Files
dotfiles/nixos/README.md
T

13 KiB
Raw Blame History

NixOS Configuration

Модульная конфигурация NixOS на базе Flakes с Home Manager для виртуальной машины.

📚 Документация

Атомарные гайды по отдельным задачам находятся в папке docs/:

Структура проекта

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 - поиск файлов в 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 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.

Создание нового модуля

  1. Создайте файл в соответствующей директории modules/
  2. Добавьте import в configuration.nix
  3. Примените изменения

Пример:

# 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

Ссылки