# Добавление новых модулей Как создавать расширяющие конфигурацию новые модули. ## Что такое модуль? Модуль - это файл `.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)