17b0cdfbac
- 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.
5.5 KiB
5.5 KiB
Добавление новых модулей
Как создавать расширяющие конфигурацию новые модули.
Что такое модуль?
Модуль - это файл .nix который описывает часть конфигурации:
modules/system/boot.nix - Загрузчик
modules/desktop/plasma.nix - Рабочий стол
home/ada/vim.nix - Vim конфигурация
Структура модуля
Простой модуль выглядит так:
{ pkgs, ... }:
{
# Здесь твоя конфигурация
services.myservice.enable = true;
}
Создание системного модуля
Пример: Добавить Transmission (торрент клиент)
- Создать файл
modules/services/transmission.nix:
{ pkgs, ... }:
{
services.transmission = {
enable = true;
openFirewall = true;
settings = {
# Конфигурация
rpc-port = 6969;
download-dir = "/home/ada/Downloads";
};
};
}
- Добавить импорт в
configuration.nix:
imports = [
# ... существующие
./modules/services/transmission.nix # Добавить эту строку
];
- Собрать:
nh os switch
Пример: Добавить VirtualBox (уже есть)
Модуль находится в modules/virtualisation/virtualbox.nix:
{ ... }:
{
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.guest.enable = true;
}
Создание Home Manager модуля
Пример: Конфигурировать Neovim
- Создать файл
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
];
};
}
- Добавить импорт в
home/ada/default.nix:
imports = [
# ... существующие
./neovim.nix # Добавить
];
- Собрать:
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