Files
dotfiles/nixos/README.md
T
Dmitry 17b0cdfbac 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.
2026-03-10 13:10:52 +03:00

339 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)