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

5.5 KiB

Добавление новых модулей

Как создавать расширяющие конфигурацию новые модули.

Что такое модуль?

Модуль - это файл .nix который описывает часть конфигурации:

modules/system/boot.nix      - Загрузчик
modules/desktop/plasma.nix   - Рабочий стол
home/ada/vim.nix             - Vim конфигурация

Структура модуля

Простой модуль выглядит так:

{ pkgs, ... }:

{
  # Здесь твоя конфигурация
  services.myservice.enable = true;
}

Создание системного модуля

Пример: Добавить Transmission (торрент клиент)

  1. Создать файл modules/services/transmission.nix:
{ pkgs, ... }:

{
  services.transmission = {
    enable = true;
    openFirewall = true;

    settings = {
      # Конфигурация
      rpc-port = 6969;
      download-dir = "/home/ada/Downloads";
    };
  };
}
  1. Добавить импорт в configuration.nix:
imports = [
  # ... существующие
  ./modules/services/transmission.nix  # Добавить эту строку
];
  1. Собрать:
nh os switch

Пример: Добавить VirtualBox (уже есть)

Модуль находится в modules/virtualisation/virtualbox.nix:

{ ... }:

{
  virtualisation.virtualbox.host.enable = true;
  virtualisation.virtualbox.guest.enable = true;
}

Создание Home Manager модуля

Пример: Конфигурировать Neovim

  1. Создать файл home/ada/neovim.nix:
{ pkgs, ... }:

{
  programs.neovim = {
    enable = true;

    extraConfig = ''
      set number
      set relativenumber
      set tabstop=2
    '';

    plugins = with pkgs.vimPlugins; [
      vim-sensible
      nord-vim
    ];
  };
}
  1. Добавить импорт в home/ada/default.nix:
imports = [
  # ... существующие
  ./neovim.nix  # Добавить
];
  1. Собрать:
nh os switch

Распространённые системные модули

Принтер CUPS

{ ... }:

{
  services.printing.enable = true;
}

PostgreSQL

{ ... }:

{
  services.postgresql = {
    enable = true;
    package = pkgs.postgresql;
  };
}

MySQL

{ ... }:

{
  services.mysql = {
    enable = true;
    package = pkgs.mysql;
  };
}

Docker

{ ... }:

{
  virtualisation.docker.enable = true;

  users.extraGroups.docker = {
    members = [ "ada" ];
  };
}

Распространённые Home Manager модули

Kitty терминал

{ ... }:

{
  programs.kitty = {
    enable = true;

    settings = {
      font_family = "FiraCode";
      font_size = 14;
    };
  };
}

Helix редактор

{ ... }:

{
  programs.helix = {
    enable = true;
  };
}

Starship (красивый prompt)

{ ... }:

{
  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

# 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

Отладка моего модуля

# Проверить синтаксис
nix flake check

# Полный check
nix flake check --all-systems

# Посмотреть ошибки собственного файла
nix-instantiate modules/services/myservice.nix

Полезные ресурсы