13 KiB
13 KiB
NixOS Configuration
Модульная конфигурация NixOS на базе Flakes с Home Manager для виртуальной машины.
📚 Документация
Атомарные гайды по отдельным задачам находятся в папке docs/:
- docs/README.md - Индекс всех гайдов
- docs/01-install-packages.md - Добавление/удаление пакетов
- docs/02-shell-environment.md - Shell alias и переменные
- docs/03-networking.md - SSH, Firewall, сеть
- docs/04-devshell.md - Разработка конфигурации
- docs/05-git-config.md - Git конфигурация
- docs/06-adding-modules.md - Создание новых модулей
- docs/07-troubleshooting.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
│ └── qemu-guest.nix # QEMU/KVM 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- поиск файлов в nixpkgscomma- запуск программ без установки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 Guest:
- Drag & Drop включен
- Shared clipboard включен
- Guest additions настроены
QEMU/KVM Guest:
- QEMU Guest Agent включен
- SPICE VDAgent для интеграции
- Улучшенная производительность
Как использовать
Первоначальная сборка
cd /home/ada/.dotfiles/nixos
# Обновить зависимости flake
nix flake update
# Стандартный способ:
sudo nixos-rebuild switch --flake .#nixos-vm
# Или с помощью nh (рекомендуется):
nh os switch
Применение изменений
# Тестовая сборка (без добавления в 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 после первой сборки)
# Пересборка системы (использует nh)
nixos-rebuild
# Тестовая сборка (использует nh)
nixos-test
# Сборка без активации (использует nh)
nixos-boot
# Обновление флейка и пересборка
nixos-update
# Список поколений системы
nixos-list
Примечание: Алиасы в этой конфигурации используют утилиту
nhдля более удобной работы. Если хотите использовать стандартные команды напрямую, см. разделы выше.
Обновление flake inputs
cd /home/ada/.dotfiles/nixos
# Обновить зависимости
nix flake update
# Применить изменения - стандартный способ:
sudo nixos-rebuild switch --flake .#nixos-vm
# Или с nh:
nh os switch
Сравнение поколений системы
# Сравнить текущее и предыдущее поколение - стандартный способ:
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 для красивого вывода
Просмотр зависимостей пакета
nix-tree /run/current-system
Добавление нового пакета
Системный пакет
Отредактируйте нужный модуль в modules/ и добавьте пакет в environment.systemPackages.
Пользовательский пакет
Отредактируйте home/ada/default.nix и добавьте пакет в home.packages.
Создание нового модуля
- Создайте файл в соответствующей директории
modules/ - Добавьте import в configuration.nix
- Примените изменения
Пример:
# modules/services/docker.nix
{ pkgs, ... }:
{
virtualisation.docker.enable = true;
users.users.ada.extraGroups = [ "docker" ];
}
Полезные команды
Поиск и установка пакетов
# Поиск пакета - стандартный способ:
nix search nixpkgs <package>
# С nh (быстрее и удобнее):
nh search <package>
# Запустить программу без установки:
nix run nixpkgs#<package>
# Или с помощью comma:
, <package>
Управление системой
# 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:
programs.git = {
userEmail = "ваш-email@example.com";
};
Добавить ZSH плагины
Отредактируйте home/ada/default.nix:
programs.zsh.oh-my-zsh.plugins = [
"git"
"sudo"
"docker"
"ваш-плагин"
];
Изменить тему ZSH
programs.zsh.oh-my-zsh.theme = "agnoster";
Troubleshooting
Ошибка при сборке
# Посмотрите логи - стандартный способ:
sudo nixos-rebuild switch --flake .#nixos-vm --show-trace
# С nh (более подробный вывод по умолчанию):
nh os switch -- --show-trace
# Проверьте синтаксис:
nix flake check
Откатиться на предыдущее поколение
# Список поколений - стандартный способ:
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
# Стандартный способ:
home-manager switch --flake .#ada
# С nh:
nh home switch