Files
dotfiles/nixos/docs/06-adding-modules.md
T
Dmitry 17b0cdfbac feat: add comprehensive NixOS configuration documentation and structure
- Introduced `08-structure.md` detailing project structure, main files, and versioning.
- Created `README.md` for documentation overview and quick start guide.
- Added user-specific configurations for Alacritty, Vim, Micro, Git, Zsh, Tmux, and tools.
- Implemented system modules for desktop environment (KDE Plasma), audio (PipeWire), networking, and services (OpenSSH, GnuPG).
- Configured Nix settings with flakes support and garbage collection.
- Established user management for `ada` with necessary groups and shell settings.
- Enabled VirtualBox guest additions for improved VM experience.
2026-03-10 13:10:52 +03:00

303 lines
5.5 KiB
Markdown

# Добавление новых модулей
Как создавать расширяющие конфигурацию новые модули.
## Что такое модуль?
Модуль - это файл `.nix` который описывает часть конфигурации:
```
modules/system/boot.nix - Загрузчик
modules/desktop/plasma.nix - Рабочий стол
home/ada/vim.nix - Vim конфигурация
```
## Структура модуля
Простой модуль выглядит так:
```nix
{ pkgs, ... }:
{
# Здесь твоя конфигурация
services.myservice.enable = true;
}
```
## Создание системного модуля
### Пример: Добавить Transmission (торрент клиент)
1. Создать файл `modules/services/transmission.nix`:
```nix
{ pkgs, ... }:
{
services.transmission = {
enable = true;
openFirewall = true;
settings = {
# Конфигурация
rpc-port = 6969;
download-dir = "/home/ada/Downloads";
};
};
}
```
2. Добавить импорт в `configuration.nix`:
```nix
imports = [
# ... существующие
./modules/services/transmission.nix # Добавить эту строку
];
```
3. Собрать:
```bash
nh os switch
```
### Пример: Добавить VirtualBox (уже есть)
Модуль находится в `modules/virtualisation/virtualbox.nix`:
```nix
{ ... }:
{
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.guest.enable = true;
}
```
## Создание Home Manager модуля
### Пример: Конфигурировать Neovim
1. Создать файл `home/ada/neovim.nix`:
```nix
{ pkgs, ... }:
{
programs.neovim = {
enable = true;
extraConfig = ''
set number
set relativenumber
set tabstop=2
'';
plugins = with pkgs.vimPlugins; [
vim-sensible
nord-vim
];
};
}
```
2. Добавить импорт в `home/ada/default.nix`:
```nix
imports = [
# ... существующие
./neovim.nix # Добавить
];
```
3. Собрать:
```bash
nh os switch
```
## Распространённые системные модули
### Принтер CUPS
```nix
{ ... }:
{
services.printing.enable = true;
}
```
### PostgreSQL
```nix
{ ... }:
{
services.postgresql = {
enable = true;
package = pkgs.postgresql;
};
}
```
### MySQL
```nix
{ ... }:
{
services.mysql = {
enable = true;
package = pkgs.mysql;
};
}
```
### Docker
```nix
{ ... }:
{
virtualisation.docker.enable = true;
users.extraGroups.docker = {
members = [ "ada" ];
};
}
```
## Распространённые Home Manager модули
### Kitty терминал
```nix
{ ... }:
{
programs.kitty = {
enable = true;
settings = {
font_family = "FiraCode";
font_size = 14;
};
};
}
```
### Helix редактор
```nix
{ ... }:
{
programs.helix = {
enable = true;
};
}
```
### Starship (красивый prompt)
```nix
{ ... }:
{
programs.starship = {
enable = true;
};
}
```
## Правила при создании модулей
**Делай:**
- Используй русские комментарии
- Оставляй пустые строки между секциями
- Документируй нетривиальные вещи
**Не делай:**
- Не смешивай систему и Home Manager в одном файле
- Не создавай огромные модули (разбей на части)
- Не создавай дублирующие друг друга файлы
## Организация модулей
Системные модули по категориям:
```
modules/
├── system/ - Ядро системы
│ ├── boot.nix - Загрузчик
│ ├── nix.nix - Nix конфиг
│ └── locale.nix - Язык/время
├── desktop/ - Рабочий стол
│ ├── plasma.nix
│ └── pipewire.nix
├── networking/ - Сеть
├── services/ - Сервисы
├── users/ - Пользователи
└── virtualisation/ - Виртуализация
```
Home Manager модули:
```
home/ada/
├── default.nix - Главный файл (импорты)
├── packages.nix - Пакеты
├── alacritty.nix - Терминал
├── vim.nix - Vim
├── git.nix - Git
├── zsh.nix - Shell
└── ...
```
## Типичный workflow
```bash
# 1. Создать файл модуля
cat > modules/services/myservice.nix << 'EOF'
{ ... }:
{
# конфигурация
}
EOF
# 2. Добавить импорт в configuration.nix
vim configuration.nix
# 3. Протестировать
nh os test
# 4. Собрать
nh os switch
# 5. Проверить
systemctl status myservice
```
## Отладка моего модуля
```bash
# Проверить синтаксис
nix flake check
# Полный check
nix flake check --all-systems
# Посмотреть ошибки собственного файла
nix-instantiate modules/services/myservice.nix
```
## Полезные ресурсы
- [NixOS options search](https://search.nixos.org/options)
- [Nixpkgs документация](https://github.com/nixos/nixpkgs)
- [Home Manager опции](https://nix-community.github.io/home-manager/options.html)