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:
Dmitry
2026-03-10 13:10:52 +03:00
parent a7ba016de4
commit 17b0cdfbac
31 changed files with 3327 additions and 164 deletions
+130
View File
@@ -0,0 +1,130 @@
# Добавление и удаление пакетов
Как управлять программами в конфигурации.
## Где пакеты?
Пакеты описаны в файле:
```
home/ada/packages.nix
```
## Добавить пакет
### Способ 1: Через редактор
1. Открыть `home/ada/packages.nix`
2. Найти подходящую категорию (например "Средства разработки")
3. Добавить пакет:
```nix
# Было:
htop # Интерактивный монитор процессов
# Стало:
htop # Интерактивный монитор процессов
lazygit # Интерактивный git UI
```
4. Собрать конфигурацию:
```bash
nh os switch
```
### Способ 2: Найти пакет в nixpkgs
Если не знаешь точное имя пакета:
```bash
# Поиск в nixpkgs
nix search nixpkgs <package-name>
# Пример:
nix search nixpkgs git-lfs
```
## Удалить пакет
1. Открыть `home/ada/packages.nix`
2. Удалить строку с пакетом
3. Собрать:
```bash
nh os switch
```
## Категории пакетов
В файле `packages.nix` пакеты организованы по категориям:
```
Редакторы → vim, neovim, micro
IDE → vscode, idea-community, zed
Терминал → alacritty
Dev tools → tmux, fzf, ripgrep, fd, bat, eza
Git tools → git, gh, lazygit
Сеть → curl, wget, ssh, mosh, nmap
БД → sqlite, postgresql
Утилиты → jq, yq, zip, unzip, gnupg
Шрифты → nerdfonts (FiraCode)
```
## Правила оформления
```nix
# ✅ Хорошо - с комментарием
ripgrep # Быстрый поиск в файлах (rg)
# ❌ Плохо - без комментария
ripgrep
# ✅ Хорошо - выровнены
fzf # Интерактивный поиск
ripgrep # Быстрый поиск
# ❌ Плохо - не выровнены
fzf # Интерактивный поиск
ripgrep # Быстрый поиск
```
## Проверка перед сборкой
```bash
# Проверить синтаксис
nix flake check
# Или просто пробуй собрать:
nh os test # Тестовая сборка (без применения)
```
## Примеры
### Добавить lazydocker
1. Открыть `home/ada/packages.nix`
2. В разделе "Dev tools" добавить:
```nix
lazydocker # Docker UI
```
3. Собрать:
```bash
nh os switch
```
### Добавить несколько пакетов
```nix
# Быстрее найти нужные команды
fzf # Поиск
ripgrep-all # Поиск по всем типам
fd # find аналог
# Анализ и визуализация
tokei # Анализ кода
nitch # Системная информация
```
## Рядом интересные пакеты
- `comma` - запустить пакет без установки: `, package`
- `nix-index` - найти файл в nixpkgs
- `nixpkgs-fmt` - форматирование Nix кода
+203
View File
@@ -0,0 +1,203 @@
# Shell окружение и алиасы
Как настроить ZSH, добавить alias и переменные окружения.
## Где окружение?
Конфигурация ZSH находится в:
```
home/ada/zsh.nix
```
## Добавить alias
1. Открыть `home/ada/zsh.nix`
2. Найти секцию `shellAliases`
3. Добавить новый alias:
```nix
# Было:
ls = "eza --icons --group-directories-first";
la = "eza -la --icons --group-directories-first --git";
# Стало:
ls = "eza --icons --group-directories-first";
la = "eza -la --icons --group-directories-first --git";
lh = "eza -la --icons --group-directories-first --git | head -20"; # Первые 20
```
4. Собрать:
```bash
nh os switch
```
## Добавить переменную окружения
Переменные находятся в секции `sessionVariables`:
```nix
sessionVariables = {
EDITOR = "micro";
VISUAL = "code --wait";
PAGER = "less";
# Добавить новую переменную:
MY_CUSTOM_VAR = "value";
};
```
## Примеры alias
### Быстрая навигация
```nix
dl = "cd ~/Downloads";
dt = "cd ~/Desktop";
dev = "cd ~/dev";
```
### Безопасность
```nix
rm = "rm -i"; # Подтверждение удаления
cp = "cp -i"; # Подтверждение копирования
mv = "mv -i"; # Подтверждение перемещения
```
### Работа с Git
```nix
g = "git";
gs = "git status";
ga = "git add";
gp = "git push";
gl = "git log --oneline";
```
### Docker
```nix
d = "docker";
dps = "docker ps";
dpsa = "docker ps -a";
dex = "docker exec -it";
```
## Организация алиасов
В `zsh.nix` алиасы организованы по категориям:
```
Навигация (cd ...)
Файлы (ls variants)
Безопасность (rm, cp, mv)
Система (grep, df, du)
Сеть (ping, ports)
NixOS (nixos-rebuild и т.д.)
Git
Docker
Kubectl
Lazy инструменты
```
## История ZSH
История настраивается в секции `history`:
```nix
history = {
size = 50000; # Размер истории
save = 50000; # Сохранять 50000 команд
ignoreDups = true; # Не сохранять дубликаты
ignoreSpace = true; # Не сохранять команды начинающиеся с пробела
share = true; # Делиться историей между сессиями
};
```
## Интеграции
### Zoxide (быстрая навигация)
```bash
z <directory> # Перейти в папку
zi # Интерактивный выбор
```
### Direnv (окружения)
```bash
# .envrc файл в папке с переменными
cat > .envrc << EOF
export MY_VAR=value
EOF
direnv allow # Разрешить автоматическое применение
```
### FZF (интерактивный поиск)
```bash
Ctrl+R # Поиск по истории
Ctrl+T # Поиск файлов
```
## Проверка после изменения
```bash
# Просто применить и проверить
nh os switch
# Потом проверить alias
alias ls # Показать что это такое
```
## Примеры полезных alias
```nix
# Список процессов
ps = "ps aux | grep";
# Размер папок
du_sort = "du -sh * | sort -hr";
# Network
ip_local = "ip -4 addr show | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}' | grep -v 127.0.0.1";
# Поиск по типу файла
find_py = "find . -name '*.py'";
```
## Переменные окружения
### Полезные переменные
```nix
sessionVariables = {
# Главный редактор
EDITOR = "micro";
VISUAL = "code --wait";
# Пейджер
PAGER = "less";
# Данные
XDG_CONFIG_HOME = "$HOME/.config";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_CACHE_HOME = "$HOME/.cache";
# Язык
LANG = "en_US.UTF-8";
# Git
GIT_AUTHOR_NAME = "Dmitry";
GIT_AUTHOR_EMAIL = "ada.dmitry@gmail.com";
};
```
## Часто изменяемое
Самые частые изменения:
1. Добавить новый alias
2. Изменить EDITOR
3. Добавить PATH переменную
Всё это делается в `zsh.nix` в соответствующих секциях.
+234
View File
@@ -0,0 +1,234 @@
# Сеть: SSH, Firewall, NetworkManager
Как настроить сетевые сервисы.
## Где сетевые настройки?
Сеть находится в двух местах:
```
modules/networking/default.nix ← NetworkManager, Firewall
modules/services/default.nix ← SSH и другие сервисы
```
## SSH настройки
SSH находится в `modules/services/default.nix`.
### Текущие настройки
```nix
settings = {
# Только публичные ключи
PasswordAuthentication = false;
PubkeyAuthentication = true;
# root не может логиниться
PermitRootLogin = "no";
# Максимум попыток: 3
MaxAuthTries = 3;
# Максимум сессий: 2
MaxSessions = 2;
};
```
### Открыть SSH на определённый порт
В `modules/networking/default.nix`:
```nix
# По умолчанию открыт порт 22
networking.firewall.allowedTCPPorts = [ 22 ];
# Если хочешь другой порт (например 2222):
networking.firewall.allowedTCPPorts = [ 2222 ];
```
И в `modules/services/default.nix`:
```nix
services.openssh.settings = {
Port = 2222; # Добавить эту строку
};
```
## Firewall
Firewall находится в `modules/networking/default.nix`.
### Открыть порты
```nix
networking.firewall.allowedTCPPorts = [ 22 ]; # SSH
# Добавить новые порты:
networking.firewall.allowedTCPPorts = [ 22 8080 3000 ];
```
### Открыть приложение
```nix
# Автоматически открыть порты для приложения
services.transmission.openFirewall = true;
services.minecraft-server.openFirewall = true;
```
## NetworkManager
NetworkManager позволяет управлять Wi-Fi и Ethernet.
### Статус
```bash
# Статус сети
nmcli status
# Список Wi-Fi сетей
nmcli dev wifi list
# Подключиться к Wi-Fi
nmcli dev wifi connect "SSID" password "password"
```
## Настройка Hostname
В `modules/networking/default.nix`:
```nix
networking.hostname = "nixos-vm";
# Изменить на:
networking.hostname = "my-machine";
```
## Интернет соединение
### Справка: NetworkManager управляет:
- Wi-Fi (connect/disconnect)
- Ethernet (автоматическое подключение)
- VPN (при установке клиента)
- Прокси (конфигурация)
### Команды
```bash
# Включить/выключить Wi-Fi
nmcli radio wifi on/off
# Список подключений
nmcli con show
# Отключиться от сети
nmcli con down "connection-name"
```
## VPN
VPN поддержка уже подготовлена в `modules/services/default.nix`:
```nix
# AmneziaVPN поддержка
services.amnezia.enable = true; # Если добавлено
```
## DNS
Если нужно изменить DNS серверы:
```nix
# В modules/networking/default.nix
networking.nameservers = [ "1.1.1.1" "8.8.8.8" ];
```
## Проверка после изменений
```bash
# Применить конфигурацию
nh os switch
# Проверить статус
systemctl status networking
systemctl status ssh
# Проверить firewall
sudo firewall-cmd --list-ports # Если используется firewalld
```
## Диагностика
### SSH не работает?
```bash
# Проверить статус
systemctl status ssh
# Посмотреть логи
sudo journalctl -u sshd -f
# Перезагрузить SSH
sudo systemctl restart ssh
```
### Нет интернета?
```bash
# Проверить соединение
ping 8.8.8.8
# Проверить DNS
nslookup google.com
# NetworkManager статус
nmcli status
# Перезагрузить NetworkManager
sudo systemctl restart NetworkManager
```
### Firewall блокирует?
```bash
# Проверить открытые порты
sudo nftables list tables # Или через nmap
nmap localhost # Сканирование локального машина
# Проверить конкретный порт
sudo netstat -tlnp | grep :8080
```
## SSH ключи
### Генерировать ключ (если нет)
```bash
ssh-keygen -t ed25519 -C "ada.dmitry@gmail.com"
# или
ssh-keygen -t rsa -b 4096 -C "ada.dmitry@gmail.com"
```
### Добавить публичный ключ
Содержимое `~/.ssh/id_ed25519.pub` нужно добавить на сервер в `~/.ssh/authorized_keys`.
## Общие команды
```bash
# Сетевые интерфейсы
ip link show
# IP адреса
ip addr show
# Маршруты
ip route show
# Слушающие порты
sudo netstat -tlnp
# DNS кэш
systemctl status systemd-resolved
```
+188
View File
@@ -0,0 +1,188 @@
# DevShell: Окружение для разработки
Как использовать devShell для работы с конфигурацией.
## Что такое devShell?
DevShell - это временное окружение с инструментами для разработки конфигурации.
## Войти в devShell
```bash
cd /home/ada/.dotfiles/nixos
nix develop
```
После этого ты находишься в окружении с дополнительными инструментами.
## Что в devShell?
Когда входишь в devShell, доступны:
```
nix-output-monitor (nom) - Красивый вывод Nix
nvd - Сравнение версий
nix-tree - Дерево зависимостей
nixfmt-classic - Форматер Nix кода
vim, nano - Редакторы
git, ripgrep, fd - Утилиты
```
## Использование devShell
### Форматировать код
```bash
# Внутри devShell:
nixfmt-classic home/ada/*.nix
nixfmt-classic modules/**/*.nix
```
### Проверить зависимости
```bash
# Посмотреть дерево
nix-tree nixpkgs#<package-name>
# Сравнить версии между поколениями
nvd diff /nix/var/nix/profiles/system /run/current-system
```
### Красивый вывод сборки
```bash
# С красивым выводом
nix-output-monitor -- nix build .
```
## Редактировать конфигурацию
Внутри devShell можно редактировать файлы и сразу их форматировать:
```bash
vim home/ada/packages.nix
# После редактирования:
nixfmt-classic home/ada/packages.nix
```
## Автоматический вход
Если у тебя есть `.envrc`, devShell загружается автоматически при входе в папку:
```bash
cd /home/ada/.dotfiles/nixos
# Если есть direnv - автоматически загрузится devShell
```
Спросит разрешение первый раз:
```bash
direnv allow
```
## Использование с IDE
### VS Code
Если открыть папку в VS Code, он автоматически предложит использовать devShell.
### Vim/Neovim
Перед запуском vim:
```bash
nix develop
vim home/ada/zsh.nix
```
## Выход из devShell
```bash
exit
# или
Ctrl+D
```
## Типичный workflow
```bash
# 1. Войти в devShell
cd /home/ada/.dotfiles/nixos
nix develop
# 2. Отредактировать файл
vim home/ada/packages.nix
# 3. Форматировать
nixfmt-classic home/ada/packages.nix
# 4. Проверить синтаксис
nix flake check
# 5. Вернуться в нормальный shell
exit
# 6. Собрать конфигурацию (вне devShell)
nh os switch
```
## Команды в devShell
```bash
# Форматирование
nixfmt-classic **/*.nix
# Проверка
nix flake check
nix flake show --all-systems
# Анализ
nix-tree <package>
nvd diff
# Сборка
nom -- nix build .
# Поиск
rg "pattern"
fd "pattern"
```
## Возможные проблемы
### "command not found"
Если команда не найдена, убедись что ты внутри devShell:
```bash
# Проверить
echo $IN_NIX_SHELL
# Если пусто, войти:
nix develop
```
### Долгая загрузка devShell
Первая загрузка может быть долгой. После этого будет быстрее.
### Нужен другой инструмент?
Открой `flake.nix`, найди секцию `devShell` и добавь пакет:
```nix
devShells.${system}.default = pkgs.mkShell {
buildInputs = with pkgs; [
# Существующие
nix-output-monitor
# Добавить новый:
your-package
];
};
```
Потом собери:
```bash
exit # Выйти из старого devShell
nix develop # Войти в новый
```
+228
View File
@@ -0,0 +1,228 @@
# Git конфигурация
Как настроить Git алиасы и конфигурацию.
## Где Git конфиг?
Git конфигурация находится в:
```
home/ada/git.nix
```
## Пользователь
```nix
programs.git = {
enable = true;
userName = "Dmitry";
userEmail = "ada.dmitry@gmail.com";
```
Изменить имя и email:
```nix
userName = "Твоё имя";
userEmail = "твой@email.com";
```
## Добавить alias
Алиасы находятся в `aliases`:
```nix
aliases = {
# Базовые
st = "status";
co = "checkout";
br = "branch";
# Твой новый alias:
quick-commit = "commit -am";
};
```
### Примеры полезных алиасов
```nix
# Быстрая работа с коммитами
cm = "commit -m";
amend = "commit --amend";
undo = "reset --soft HEAD^";
# Логи
lg = "log --graph --oneline --all";
recent = "log -10 --oneline";
# Ветки
new-branch = "checkout -b";
sync = "pull --rebase";
# Простые проверки
changed = "diff --name-only";
staged = "diff --cached";
```
## Глобальный gitignore
Файлы которые всегда игнорируются:
```nix
ignores = [
".DS_Store" # macOS
"Thumbs.db" # Windows
".vscode/" # VS Code
".idea/" # IntelliJ
"*.swp" # Vim
# Добавить свой:
".myfile"
];
```
## Цвета
Визуальная конфигурация разных элементов:
```nix
"color \"branch\"" = {
current = "yellow bold";
local = "green";
remote = "cyan";
};
"color \"diff\"" = {
meta = "yellow";
old = "red bold";
new = "green bold";
};
```
Можешь изменять цвета на свой вкус.
## Основные настройки
```nix
extraConfig = {
# Ветка по умолчанию
init.defaultBranch = "main";
# Автоматический rebase при pull
pull.rebase = true;
# Редактор для коммитов
core.editor = "micro";
};
```
## Проверка конфигурации
После изменений собери конфигурацию:
```bash
nh os switch
```
Проверить что применилось:
```bash
git config --list | grep user
git config user.name
git alias # Если есть такой alias
```
## Использование алиасов
```bash
# Вместо:
git status
# Используешь:
g st # Если есть alias g = git
```
## Работа с удалёнными репозиториями
Если нужны специальные алиасы для pull/push:
```nix
# В алиасах:
pom = "push origin main";
plm = "pull origin main";
```
## Слияние веток
```nix
# Алиасы для слияния
merge-main = "merge main";
merge-dev = "merge develop";
```
## Интерактивные операции
Хорошие алиасы для интерактивной работы:
```nix
interactive = "rebase -i";
fixup = "rebase -i --autosquash";
```
## Проверка перед применением
```bash
# Посмотреть текущие алиасы
git config --get-regexp alias
# Проверить синтаксис после редактирования
nix flake check
```
## Git UI
Если хочешь использовать интерактивный Git UI:
```bash
lazygit # Уже установлен в пакетах
```
## Частые операции
### Быстрый коммит
```nix
# Добавить алиас
quick = "commit -am";
```
```bash
git quick "commit message"
```
### История файла
```nix
# Алиас
history = "log --oneline";
```
```bash
git history <file>
```
### Визуальное дерево
```bash
# Уже есть
git lg # или git l
```
## Если что-то сломалось
Вернуть конфиг по умолчанию:
```bash
# Отменить последние изменения
git checkout home/ada/git.nix
# Пересобрать
nh os switch
```
+302
View File
@@ -0,0 +1,302 @@
# Добавление новых модулей
Как создавать расширяющие конфигурацию новые модули.
## Что такое модуль?
Модуль - это файл `.nix` который описывает часть конфигурации:
```
modules/system/boot.nix - Загрузчик
modules/desktop/plasma.nix - Рабочий стол
home/ada/vim.nix - Vim конфигурация
```
## Структура модуля
Простой модуль выглядит так:
```nix
{ pkgs, ... }:
{
# Здесь твоя конфигурация
services.myservice.enable = true;
}
```
## Создание системного модуля
### Пример: Добавить Transmission (торрент клиент)
1. Создать файл `modules/services/transmission.nix`:
```nix
{ pkgs, ... }:
{
services.transmission = {
enable = true;
openFirewall = true;
settings = {
# Конфигурация
rpc-port = 6969;
download-dir = "/home/ada/Downloads";
};
};
}
```
2. Добавить импорт в `configuration.nix`:
```nix
imports = [
# ... существующие
./modules/services/transmission.nix # Добавить эту строку
];
```
3. Собрать:
```bash
nh os switch
```
### Пример: Добавить VirtualBox (уже есть)
Модуль находится в `modules/virtualisation/virtualbox.nix`:
```nix
{ ... }:
{
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.guest.enable = true;
}
```
## Создание Home Manager модуля
### Пример: Конфигурировать Neovim
1. Создать файл `home/ada/neovim.nix`:
```nix
{ pkgs, ... }:
{
programs.neovim = {
enable = true;
extraConfig = ''
set number
set relativenumber
set tabstop=2
'';
plugins = with pkgs.vimPlugins; [
vim-sensible
nord-vim
];
};
}
```
2. Добавить импорт в `home/ada/default.nix`:
```nix
imports = [
# ... существующие
./neovim.nix # Добавить
];
```
3. Собрать:
```bash
nh os switch
```
## Распространённые системные модули
### Принтер CUPS
```nix
{ ... }:
{
services.printing.enable = true;
}
```
### PostgreSQL
```nix
{ ... }:
{
services.postgresql = {
enable = true;
package = pkgs.postgresql;
};
}
```
### MySQL
```nix
{ ... }:
{
services.mysql = {
enable = true;
package = pkgs.mysql;
};
}
```
### Docker
```nix
{ ... }:
{
virtualisation.docker.enable = true;
users.extraGroups.docker = {
members = [ "ada" ];
};
}
```
## Распространённые Home Manager модули
### Kitty терминал
```nix
{ ... }:
{
programs.kitty = {
enable = true;
settings = {
font_family = "FiraCode";
font_size = 14;
};
};
}
```
### Helix редактор
```nix
{ ... }:
{
programs.helix = {
enable = true;
};
}
```
### Starship (красивый prompt)
```nix
{ ... }:
{
programs.starship = {
enable = true;
};
}
```
## Правила при создании модулей
**Делай:**
- Используй русские комментарии
- Оставляй пустые строки между секциями
- Документируй нетривиальные вещи
**Не делай:**
- Не смешивай систему и Home Manager в одном файле
- Не создавай огромные модули (разбей на части)
- Не создавай дублирующие друг друга файлы
## Организация модулей
Системные модули по категориям:
```
modules/
├── system/ - Ядро системы
│ ├── boot.nix - Загрузчик
│ ├── nix.nix - Nix конфиг
│ └── locale.nix - Язык/время
├── desktop/ - Рабочий стол
│ ├── plasma.nix
│ └── pipewire.nix
├── networking/ - Сеть
├── services/ - Сервисы
├── users/ - Пользователи
└── virtualisation/ - Виртуализация
```
Home Manager модули:
```
home/ada/
├── default.nix - Главный файл (импорты)
├── packages.nix - Пакеты
├── alacritty.nix - Терминал
├── vim.nix - Vim
├── git.nix - Git
├── zsh.nix - Shell
└── ...
```
## Типичный workflow
```bash
# 1. Создать файл модуля
cat > modules/services/myservice.nix << 'EOF'
{ ... }:
{
# конфигурация
}
EOF
# 2. Добавить импорт в configuration.nix
vim configuration.nix
# 3. Протестировать
nh os test
# 4. Собрать
nh os switch
# 5. Проверить
systemctl status myservice
```
## Отладка моего модуля
```bash
# Проверить синтаксис
nix flake check
# Полный check
nix flake check --all-systems
# Посмотреть ошибки собственного файла
nix-instantiate modules/services/myservice.nix
```
## Полезные ресурсы
- [NixOS options search](https://search.nixos.org/options)
- [Nixpkgs документация](https://github.com/nixos/nixpkgs)
- [Home Manager опции](https://nix-community.github.io/home-manager/options.html)
+285
View File
@@ -0,0 +1,285 @@
# Отладка и решение проблем
Что делать когда что-то не работает.
## Конфигурация не собирается
### Ошибка синтаксиса
```bash
# Проверить синтаксис
nix flake check
# Посмотреть ошибку
nh os test
```
Читай ошибку внимательно - она указывает на строку файла.
## Ошибка: пакет не найден
```bash
# Проверить существует ли пакет
nix search nixpkgs package-name
# Полное имя может быть другим
nix search nixpkgs git-lfs
```
Если пакет не найден:
1. Проверь имя в [https://search.nixos.org](https://search.nixos.org)
2. Возможно пакет устарел
3. Попробуй альтернативу
## Ошибка: модуль не импортируется
```bash
# Если добавил новый модуль и он не применяется
nix flake check
# Проверить импорт в configuration.nix
grep "./modules/mymodule" configuration.nix
# Проверить путь (должен быть правильный относительный путь)
```
Старые импорты кэшируются. Попробуй:
```bash
rm -rf .direnv # Если использует direnv
nix flake update
```
## Сборка зависает
Обычно при первой сборке это может быть долгим (20-30 минут).
Если зависает надолго:
```bash
# Прервать (Ctrl+C)
# Очистить кэш
nix flake update
# Пробовать снова
nh os test
```
## Команда не работает после apply
```bash
# Обновить PATH
exec $SHELL
# Или перезагрузить terminal
# В новом окне терминала попробуй команду
```
## SSH не работает
```bash
# Проверить статус
sudo systemctl status ssh
# Посмотреть логи
sudo journalctl -u sshd -f
# Перезагрузить
sudo systemctl restart ssh
# Проверить firewall
sudo nftables list tables
nmcli device show
```
## Git алиасы не работают
```bash
# Применить конфигурацию
nh os switch
# Проверить что установилась
git config --list | grep alias
# Перезагрузить shell
exec $SHELL
```
## Пакет not found после добавления
```bash
# Пересобрать
nh os switch
# Обновить PATH если нужно
exec $SHELL
# Проверить пакет
which package-name
```
## Система не загружается
Если сломал конфигурацию и система не грузится:
```bash
# При загрузке в GRUB выбери предыдущую версию системы
```
Или откати изменения:
```bash
cd /home/ada/.dotfiles/nixos
git checkout configuration.nix
nh os switch
```
## Firewall блокирует
```bash
# Проверить статус
sudo nftables list tables
# Открыть порт (редактор файл)
# modules/networking/default.nix
networking.firewall.allowedTCPPorts = [ 22 8080 ];
# Собрать
nh os switch
```
## Нет интернета
```bash
# Проверить связь
ping 8.8.8.8
# Проверить DNS
nslookup google.com
# Перезагрузить NetworkManager
sudo systemctl restart NetworkManager
# Посмотреть статус
nmcli status
```
## Логирование и отладка
### Посмотреть логи системы
```bash
# Последние ошибки
sudo journalctl -b | tail -50
# Логи конкретного сервиса
sudo journalctl -u ssh -f
# По уровню важности
sudo journalctl -p err
```
### Проверить что загрузилось
```bash
# Посмотреть текущую конфигурацию
systemctl status
ps aux
# Проверить конкретный сервис
systemctl status sshd
systemctl status NetworkManager
```
## Производительность
Если система медленная:
```bash
# Посмотреть процессы
btop
# Посмотреть использование диска
du -sh ~/*
# Нулевые файлы
find / -size 0 2>/dev/null
# GC собрал много?
du -sh /nix/store
nix store gc
```
## Вернуть рабочее состояние
### Откатить последнее изменение
```bash
# В git
git checkout HEAD -- home/ada/packages.nix
# Пересобрать
nh os switch
```
### Посмотреть историю поколений
```bash
nh os list
# Откатить на предыдущее поколение
sudo nix-env -p /nix/var/nix/profiles/system --switch-generation N
```
### Резервная копия
Есть файл конфигурации до изменений:
```
configuration.nix.backup
```
Если что-то критичное сломалось:
```bash
cp configuration.nix configuration.nix.broken
cp configuration.nix.backup configuration.nix
nh os switch
```
## Получить помощь
### Проверить логи
```bash
# Полные логи последней сборки
nixos-rebuild dry-run 2>&1 | head -100
```
### Читать ошибки
Обычно в ошибке указывается:
1. **Файл** - какой файл конфига проблема
2. **Строка** - на какой строке
3. **Ошибка** - что именно не так
### Поиск в документации
```bash
# Поиск опции
nixos-option services.openssh
# Поиск в nixpkgs
nix search nixpkgs pattern
```
## Когда ничего не помогает
```bash
# 1. Откатить на рабочее состояние
git checkout HEAD~1
# 2. Собрать
nh os switch
# 3. Проверить что работает
systemctl status
# 4. Медленнее добавить изменения по одному
```
+222
View File
@@ -0,0 +1,222 @@
# Структура проекта
Как устроена конфигурация.
## Главные файлы
```
flake.nix - Главная входная точка
configuration.nix - Системная конфигурация
```
## Папки
```
modules/ - Системные модули
home/ada/ - Конфигурация пользователя (Home Manager)
docs/ - Документация (этот гайд)
```
## Версионирование
### flake.nix
```nix
inputs = {
# Откуда берёмся пакеты
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
# Управление пользовательским окружением
home-manager.url = "github:nix-community/home-manager/release-25.11";
};
```
- NixOS версия: **25.11** (стабильный релиз)
- Home Manager версия: **25.11** (синхронизирована)
## Системные модули
### `modules/system/`
Ядро системы:
- **boot.nix** - GRUB загрузчик, kernel modules
- **nix.nix** - Nix конфигурация (flakes, gc, substituters)
- **locale.nix** - Таймзона (Europe/Moscow), системные locale
### `modules/desktop/`
Рабочее окружение:
- **plasma.nix** - KDE Plasma 6, Wayland, X11, раскладка клавиатуры
- **pipewire.nix** - Audio система (PipeWire + ALSA)
### `modules/networking/`
Сетевые сервисы:
- **default.nix** - NetworkManager, Firewall
### `modules/services/`
Системные сервисы:
- **default.nix** - SSH (hardened), Firefox, GnuPG, VPN support
### `modules/users/`
Управление пользователями:
- **ada.nix** - Пользователь `ada` (groups, shell: zsh)
### `modules/virtualisation/`
Виртуализация:
- **virtualbox.nix** - VirtualBox Guest Additions
## Home Manager (Пользователь ada)
### `home/ada/default.nix`
Главный файл (импорты всех модулей):
```nix
home.username = "ada";
home.homeDirectory = "/home/ada";
home.stateVersion = "25.05";
```
### Модули пользователя
| Файл | Назначение |
|------|-----------|
| packages.nix | 50+ пакетов (организованы по категориям) |
| alacritty.nix | Терминальный эмулятор (Nord тема, FiraCode) |
| vim.nix | Vim редактор (Nord тема, плагины) |
| micro.nix | Micro редактор (простой редактор) |
| git.nix | Git конфигурация (15+ алиасов, colors) |
| zsh.nix | ZSH shell (30+ алиасов, интеграции) |
| tmux.nix | Tmux терминальный мультиплексер (VI mode) |
| tools.nix | CLI утилиты (bat, fzf, direnv) |
## Информационный поток
```
flake.nix (входная точка)
├─→ nixpkgs (версия 25.11)
├─→ home-manager (версия 25.11)
└─→ nixos-hardware
configuration.nix (система)
├─→ hardware-configuration.nix
├─→ modules/system/* (boot, nix, locale)
├─→ modules/desktop/* (plasma, pipewire)
├─→ modules/networking/* (network)
├─→ modules/services/* (ssh, firefox, etc.)
├─→ modules/users/* (пользователь)
├─→ modules/virtualisation/* (vbox)
└─→ Home Manager (через special args)
home/ada/default.nix (пользователь)
├─→ packages.nix (50+ пакетов)
├─→ alacritty.nix (терминал)
├─→ vim.nix (editor)
├─→ micro.nix (editor)
├─→ git.nix (git config)
├─→ zsh.nix (shell)
├─→ tmux.nix (multiplexer)
└─→ tools.nix (utilities)
```
## Категории пакетов
В `packages.nix` пакеты организованы так:
```
Редакторы vim, neovim, micro
IDE vscode, idea-community, zed
Терминал alacritty
Dev tools tmux, fzf, ripgrep, fd, bat, eza...
Git git, gh, lazygit
Сеть curl, wget, ssh, mosh, nmap...
БД sqlite, postgresql
Утилиты jq, yq, zip, unzip, gnupg...
Шрифты nerdfonts (FiraCode)
```
## Какой файл менять?
| Задача | Файл |
|--------|------|
| Добавить переменную окружения | `home/ada/zsh.nix` |
| Добавить программу | `home/ada/packages.nix` |
| Изменить Git конфиг | `home/ada/git.nix` |
| Добавить Shell alias | `home/ada/zsh.nix` |
| Настроить SSH | `modules/services/default.nix` |
| Открыть firewall порт | `modules/networking/default.nix` |
| Добавить язык/locale | `modules/system/locale.nix` |
| Установить новый сервис | Создать новый модуль в `modules/` |
| Конфигурировать программу | Создать новый модуль в `home/ada/` |
## Версия конфигурации
```nix
# configuration.nix
system.stateVersion = "25.05";
# home/ada/default.nix
home.stateVersion = "25.05";
# Обновить можно когда готов к миграции
# Но ОСТОРОЖНО - читай документацию NixOS
```
## Как это всё работает?
1. **flake.nix** - говорит Nix где брать пакеты и как их собрать
2. **configuration.nix** - импортирует все системные модули
3. **modules/** - каждый модуль отвечает за часть системы
4. **home/ada/default.nix** - импортирует все пользовательские модули
5. **home/ada/** - каждый модуль конфигурирует программу
### Когда ты делаешь `nh os switch`:
```
1. Нужно собрать конфигурацию
2. Nix читает flake.nix
3. Понимает что использовать из inputs (nixpkgs, home-manager)
4. Собирает configuration.nix (импортирует все modules/)
5. Собирает home/ada/default.nix через Home Manager
6. Создаёт результат (нов поколение системы)
7. Переключается на него
```
## Быстрая справка
```bash
# Посмотреть версию
cat configuration.nix | grep stateVersion
# Посмотреть импорты
head -30 configuration.nix
# Список всех модулей
ls -la modules/**/*.nix
# Список Home Manager модулей
ls -la home/ada/*.nix
# Найти файл по названию
find . -name "*ssh*"
```
## Следующие шаги
Если хочешь что-то изменить:
1. Найди нужный файл (выше таблица)
2. Отредактируй его
3. Собери: `nh os switch`
4. Если не работает → см. docs/07-troubleshooting.md
+39
View File
@@ -0,0 +1,39 @@
# 📚 Документация NixOS конфигурации
Каждый файл в этой папке - это небольшой гайд по конкретной задаче.
## 📖 Гайды
- **[01-install-packages.md](01-install-packages.md)** — Добавление и удаление пакетов
- **[02-shell-environment.md](02-shell-environment.md)** — Shell alias, переменные окружения
- **[03-networking.md](03-networking.md)** — SSH, firewall, сетевые настройки
- **[04-devshell.md](04-devshell.md)** — Работа с devShell для разработки
- **[05-git-config.md](05-git-config.md)** — Git конфигурация и алиасы
- **[06-adding-modules.md](06-adding-modules.md)** — Создание новых модулей
- **[07-troubleshooting.md](07-troubleshooting.md)** — Отладка проблем
- **[08-structure.md](08-structure.md)** — Структура проекта
## ⚡ Быстрый старт
```bash
cd /home/ada/.dotfiles/nixos
# Собрать конфигурацию
sudo nixos-rebuild switch --flake .
# Или с nh (проще):
nh os switch
```
## 🔍 Найти нужное
| Задача | Файл |
|--------|------|
| Добавить пакет | 01-install-packages.md |
| Добавить shell alias | 02-shell-environment.md |
| Конфигурировать SSH | 03-networking.md |
| Использовать devShell | 04-devshell.md |
| Настроить Git | 05-git-config.md |
| Создать новый модуль | 06-adding-modules.md |
| Что-то не работает | 07-troubleshooting.md |
| Как всё устроено | 08-structure.md |