# 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 # С nh (быстрее и удобнее): nh search # Запустить программу без установки: nix run nixpkgs# # Или с помощью comma: , ``` ### Управление системой ```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)