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.
This commit is contained in:
+338
@@ -0,0 +1,338 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user