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.
This commit is contained in:
@@ -0,0 +1,302 @@
|
||||
# Добавление новых модулей
|
||||
|
||||
Как создавать расширяющие конфигурацию новые модули.
|
||||
|
||||
## Что такое модуль?
|
||||
|
||||
Модуль - это файл `.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)
|
||||
Reference in New Issue
Block a user