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.
303 lines
5.5 KiB
Markdown
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)
|