17b0cdfbac
- 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.
339 lines
12 KiB
Markdown
339 lines
12 KiB
Markdown
# 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)
|