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:
Dmitry
2026-03-10 13:10:52 +03:00
parent a7ba016de4
commit 17b0cdfbac
31 changed files with 3327 additions and 164 deletions
+338
View File
@@ -0,0 +1,338 @@
# NixOS Configuration
Модульная конфигурация NixOS на базе Flakes с Home Manager для виртуальной машины.
## 📚 Документация
Атомарные гайды по отдельным задачам находятся в папке [`docs/`](docs/):
- **[docs/README.md](docs/README.md)** - Индекс всех гайдов
- **[docs/01-install-packages.md](docs/01-install-packages.md)** - Добавление/удаление пакетов
- **[docs/02-shell-environment.md](docs/02-shell-environment.md)** - Shell alias и переменные
- **[docs/03-networking.md](docs/03-networking.md)** - SSH, Firewall, сеть
- **[docs/04-devshell.md](docs/04-devshell.md)** - Разработка конфигурации
- **[docs/05-git-config.md](docs/05-git-config.md)** - Git конфигурация
- **[docs/06-adding-modules.md](docs/06-adding-modules.md)** - Создание новых модулей
- **[docs/07-troubleshooting.md](docs/07-troubleshooting.md)** - Отладка проблем
- **[docs/08-structure.md](docs/08-structure.md)** - Структура проекта
## Структура проекта
```
nixos/
├── README.md # Главная страница (ты здесь)
├── flake.nix # Главный флейк с inputs и outputs
├── configuration.nix # Главная конфигурация (импортирует модули)
├── hardware-configuration.nix # Автогенерированная конфигурация железа
├── docs/ # 📚 Документация (атомарные гайды)
│ ├── README.md # Индекс документации
│ ├── 01-install-packages.md # Как ставить программы
│ ├── 02-shell-environment.md # Shell alias и переменные
│ ├── 03-networking.md # SSH, Firewall, сеть
│ ├── 04-devshell.md # Разработка конфигурации
│ ├── 05-git-config.md # Git конфигурация
│ ├── 06-adding-modules.md # Создание новых модулей
│ ├── 07-troubleshooting.md # Отладка проблем
│ └── 08-structure.md # Структура проекта
├── modules/ # Системные модули
│ ├── system/ # Ядро системы
│ │ ├── boot.nix # GRUB, kernel modules
│ │ ├── nix.nix # Nix конфигурация
│ │ └── locale.nix # Язык, таймзона
│ │
│ ├── desktop/ # Рабочее окружение
│ │ ├── plasma.nix # KDE Plasma 6 + Wayland
│ │ └── pipewire.nix # Audio система
│ │
│ ├── networking/ # Сеть
│ │ └── default.nix # NetworkManager, Firewall
│ │
│ ├── services/ # Сервисы
│ │ └── default.nix # SSH, Firefox и др.
│ │
│ ├── users/ # Пользователи
│ │ └── ada.nix # Пользователь ada
│ │
│ └── virtualisation/ # Виртуализация
│ └── virtualbox.nix # VirtualBox Guest
└── home/ # Home Manager (пользователь)
└── ada/
├── default.nix # Главный файл (импорты)
├── packages.nix # Пакеты (~50)
├── git.nix # Git конфиг
├── zsh.nix # Shell алиасы
├── vim.nix # Vim конфиг
├── alacritty.nix # Терминал
├── micro.nix # Micro редактор
├── tmux.nix # Tmux конфиг
└── tools.nix # CLI утилиты
```
## Особенности конфигурации
### ✨ Система
- **Flakes**: Современная система управления зависимостями Nix
- **Home Manager**: Управление пользовательским окружением
- **KDE Plasma 6**: Последняя версия с поддержкой Wayland
- **PipeWire**: Современная аудиосистема
- **Русская раскладка**: Настроено переключение по Caps Lock
### 🛠 Утилиты для работы с Nix
**`nh` (рекомендуется)** - современный помощник для работы с NixOS:
- ✅ Автоматически показывает diff между поколениями после сборки
- ✅ Использует nix-output-monitor для красивого вывода
- ✅ Интерактивная очистка с предпросмотром удаляемых пакетов
- ✅ Более простой и короткий синтаксис команд
- ✅ Автоматически определяет конфигурацию из текущей директории
**Другие утилиты:**
- `nix-output-monitor` (nom) - красивый вывод при сборке
- `nvd` - diff между поколениями системы
- `nix-tree` - визуализация зависимостей
- `nix-index` - поиск файлов в nixpkgs
- `comma` - запуск программ без установки
- `nix-du` - анализ использования диска
- `nixfmt-classic` - форматирование Nix кода
### 💻 Development tools
- **Editors**: Vim, Neovim, VS Code, IntelliJ IDEA Community
- **Shell**: ZSH с Oh-My-Zsh и кастомными алиасами
- **Git**: Git, GitHub CLI (gh), LazyGit
- **Terminal**: Tmux с улучшенной конфигурацией
- **Modern CLI tools**: eza, bat, fzf, ripgrep, fd
### 🔧 VirtualBox
- Drag & Drop включен
- Shared clipboard включен
- Guest additions настроены
## Как использовать
### Первоначальная сборка
```bash
cd /home/ada/.dotfiles/nixos
# Обновить зависимости flake
nix flake update
# Стандартный способ:
sudo nixos-rebuild switch --flake .#nixos-vm
# Или с помощью nh (рекомендуется):
nh os switch
```
### Применение изменений
```bash
# Тестовая сборка (без добавления в boot menu)
sudo nixos-rebuild test --flake .#nixos-vm
# С nh:
nh os test
# Применить и добавить в boot menu
sudo nixos-rebuild switch --flake .#nixos-vm
# С nh:
nh os switch
# Собрать и добавить в boot menu без активации сейчас
sudo nixos-rebuild boot --flake .#nixos-vm
# С nh:
nh os boot
```
### Алиасы (доступны в ZSH после первой сборки)
```bash
# Пересборка системы (использует nh)
nixos-rebuild
# Тестовая сборка (использует nh)
nixos-test
# Сборка без активации (использует nh)
nixos-boot
# Обновление флейка и пересборка
nixos-update
# Список поколений системы
nixos-list
```
> **Примечание**: Алиасы в этой конфигурации используют утилиту `nh` для более удобной работы.
> Если хотите использовать стандартные команды напрямую, см. разделы выше.
### Обновление flake inputs
```bash
cd /home/ada/.dotfiles/nixos
# Обновить зависимости
nix flake update
# Применить изменения - стандартный способ:
sudo nixos-rebuild switch --flake .#nixos-vm
# Или с nh:
nh os switch
```
### Сравнение поколений системы
```bash
# Сравнить текущее и предыдущее поколение - стандартный способ:
nvd diff /run/current-system /run/booted-system
# С nh (автоматически показывает diff после сборки):
nh os switch # автоматически покажет изменения
# Красивый вывод при сборке с nom:
nom build .#nixosConfigurations.nixos-vm.config.system.build.toplevel
# nh по умолчанию использует nom для красивого вывода
```
### Просмотр зависимостей пакета
```bash
nix-tree /run/current-system
```
## Добавление нового пакета
### Системный пакет
Отредактируйте нужный модуль в `modules/` и добавьте пакет в `environment.systemPackages`.
### Пользовательский пакет
Отредактируйте `home/ada/default.nix` и добавьте пакет в `home.packages`.
## Создание нового модуля
1. Создайте файл в соответствующей директории `modules/`
2. Добавьте import в [configuration.nix](configuration.nix)
3. Примените изменения
Пример:
```nix
# modules/services/docker.nix
{ pkgs, ... }:
{
virtualisation.docker.enable = true;
users.users.ada.extraGroups = [ "docker" ];
}
```
## Полезные команды
### Поиск и установка пакетов
```bash
# Поиск пакета - стандартный способ:
nix search nixpkgs <package>
# С nh (быстрее и удобнее):
nh search <package>
# Запустить программу без установки:
nix run nixpkgs#<package>
# Или с помощью comma:
, <package>
```
### Управление системой
```bash
# Garbage collection - стандартный способ:
sudo nix-collect-garbage -d
sudo nix-collect-garbage --delete-older-than 7d
# С nh (интерактивно, безопаснее):
nh clean all # очистить всё старое
nh clean user # только пользовательские профили
nh clean system # только системные поколения
# Оптимизация store:
nix-store --optimise
# Починить права в /nix/store:
sudo nix-store --verify --check-contents --repair
```
## Кастомизация
### Изменить email в Git
Отредактируйте `home/ada/default.nix`:
```nix
programs.git = {
userEmail = "ваш-email@example.com";
};
```
### Добавить ZSH плагины
Отредактируйте `home/ada/default.nix`:
```nix
programs.zsh.oh-my-zsh.plugins = [
"git"
"sudo"
"docker"
"ваш-плагин"
];
```
### Изменить тему ZSH
```nix
programs.zsh.oh-my-zsh.theme = "agnoster";
```
## Troubleshooting
### Ошибка при сборке
```bash
# Посмотрите логи - стандартный способ:
sudo nixos-rebuild switch --flake .#nixos-vm --show-trace
# С nh (более подробный вывод по умолчанию):
nh os switch -- --show-trace
# Проверьте синтаксис:
nix flake check
```
### Откатиться на предыдущее поколение
```bash
# Список поколений - стандартный способ:
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
# С nh:
nh os list # показать все поколения системы
# Откат на предыдущее поколение - стандартный способ:
sudo nixos-rebuild switch --rollback
# С nh (откат на конкретное поколение):
nh os switch --generation <номер>
```
### Обновить только Home Manager
```bash
# Стандартный способ:
home-manager switch --flake .#ada
# С nh:
nh home switch
```
## Ссылки
- [NixOS Manual](https://nixos.org/manual/nixos/stable/)
- [Home Manager Manual](https://nix-community.github.io/home-manager/)
- [Nixpkgs Search](https://search.nixos.org/packages)
- [NixOS Options Search](https://search.nixos.org/options)
- [Nix Flakes](https://nixos.wiki/wiki/Flakes)