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:
@@ -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 кода
|
||||
@@ -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` в соответствующих секциях.
|
||||
@@ -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
|
||||
```
|
||||
@@ -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 # Войти в новый
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
@@ -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)
|
||||
@@ -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. Медленнее добавить изменения по одному
|
||||
```
|
||||
@@ -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
|
||||
@@ -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 |
|
||||
Reference in New Issue
Block a user