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
+63
View File
@@ -0,0 +1,63 @@
# ══════════════════════════════════════════════════════════════════
# Nix & Flake
# ══════════════════════════════════════════════════════════════════
# Результаты build (должны игнорироваться)
result
result-*
# Lock файлы (можно коммитить для воспроизводимости, но часто игнорируется)
# flake.lock
# ══════════════════════════════════════════════════════════════════
# Резервные и временные файлы
# ══════════════════════════════════════════════════════════════════
*.backup
*.bak
*~
.backup
.old
# ══════════════════════════════════════════════════════════════════
# Редакторы и IDE
# ══════════════════════════════════════════════════════════════════
.vscode/
.idea/
*.swp
*.swo
*.kate-swp
.vimrc.local
.nvimrc.local
# ══════════════════════════════════════════════════════════════════
# ОС
# ══════════════════════════════════════════════════════════════════
.DS_Store
.AppleDouble
.LSOverride
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
.Trash-*
# ══════════════════════════════════════════════════════════════════
# Разработка
# ══════════════════════════════════════════════════════════════════
.envrc
.direnv/
target/
dist/
build/
.cache/
# ══════════════════════════════════════════════════════════════════
# Логи
# ══════════════════════════════════════════════════════════════════
*.log
*.logs/
.DS_Store
Thumbs.db
# Temporary files
*.tmp
*.temp
+338
View File
@@ -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)
+28 -159
View File
@@ -1,168 +1,37 @@
{ { config, pkgs, lib, ... }:
config,
pkgs,
lib,
...
}:
{ {
imports = imports = [
[ # Include the results of the hardware scan. # Конфигурация железа
./hardware-configuration.nix ./hardware-configuration.nix
];
# Bootloader. # Системные модули
boot.loader.grub.enable = true; ./modules/system/boot.nix
boot.loader.grub.device = "/dev/sda"; ./modules/system/nix.nix
boot.loader.grub.useOSProber = true; ./modules/system/locale.nix
boot.kernelParams = [ "quiet" ]; # Окружение рабочего стола
boot.extraModulePackages = [ config.boot.kernelPackages.amneziawg ]; ./modules/desktop/plasma.nix
boot.kernelModules = [ "amneziawg" ]; ./modules/desktop/pipewire.nix
programs.nix-ld.enable = true; # Сеть
programs.nix-ld.libraries = with pkgs; [ ./modules/networking/default.nix
stdenv.cc.cc
zlib # Сервисы
fuse3 ./modules/services/default.nix
icu
nss # Виртуализация
openssl ./modules/virtualisation/virtualbox.nix
curl
expat # Пользователи
./modules/users/ada.nix
]; ];
networking.hostName = "nixos-vm"; # Версия релиза NixOS
networking.networkmanager.enable = true; # Это значение определяет релиз NixOS, из которого были взяты настройки по умолчанию
time.timeZone = "Europe/Moscow"; # для stateful данных, таких как расположение файлов и версии баз данных в вашей системе.
# Рекомендуется оставить это значение таким, каким оно было при первой установке системы.
i18n.defaultLocale = "en_US.UTF-8"; # Перед изменением этого значения прочитайте документацию для этой опции
# (например, man configuration.nix или https://nixos.org/nixos/options.html).
i18n.extraLocaleSettings = {
LC_ADDRESS = "ru_RU.UTF-8";
LC_IDENTIFICATION = "ru_RU.UTF-8";
LC_MEASUREMENT = "ru_RU.UTF-8";
LC_MONETARY = "ru_RU.UTF-8";
LC_NAME = "ru_RU.UTF-8";
LC_NUMERIC = "ru_RU.UTF-8";
LC_PAPER = "ru_RU.UTF-8";
LC_TELEPHONE = "ru_RU.UTF-8";
LC_TIME = "ru_RU.UTF-8";
};
services.xserver.enable = true;
services.xserver.displayManager.sddm.enable = true;
services.xserver.displayManager.sddm.wayland.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
environment.sessionVariables.NIXOS_OZONE_WL = "1";
# Configure keymap in X11
services.xserver.xkb = {
layout = "us";
variant = "";
};
# Enable CUPS to print documents.
services.printing.enable = true;
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# Define a user account. Don't forget to set a password with passwd.
users.users.ada = {
isNormalUser = true;
description = "ada";
extraGroups = [ "networkmanager" "wheel" ];
packages = with pkgs; [
vim
neovim
code
jetbrains.idea-community
tmux
zsh
oh-my-zsh
fzf
ripgrep
fd
bat
eza
lsd
git
gh
lazygit
curl
wget
jq
nix-output-monitor
nvd
nix-tree
comma
htop
btop
tree
];
};
environment.systemPackages = with pkgs; [
vim
wget
git
curl
amneziawg-tools
nix-output-monitor
nvd
nix-tree
comma
htop
neofetch
];
nix = {
package = pkgs.nix;
settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
};
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
};
nixpkgs.config.allowUnfree = true;
programs.firefox.enable = true;
programs.amnezia-vpn.enable = true;
programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
PubkeyAuthentication = true;
};
};
# Open ports in the firewall.
networking.firewall.allowedTCPPorts = [ 22 ];
virtualisation.virtualbox.guest.enable = true;
virtualisation.virtualbox.guest.dragAndDrop = true;
virtualisation.virtualbox.guest.clipboard = true;
system.stateVersion = "25.05"; system.stateVersion = "25.05";
} }
+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 |
+67 -5
View File
@@ -1,23 +1,85 @@
{ {
description = "NixOS Configuration Flake"; description = "Модульная конфигурация NixOS 25.11 на Flake с Home Manager для виртуальной машины";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # Nixpkgs - главный репозиторий пакетов
# Используем nixos-25.11 для стабильности вместо unstable
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
# Hardware profiles для различных машин
nixos-hardware.url = "github:nixos/nixos-hardware"; nixos-hardware.url = "github:nixos/nixos-hardware";
# Home Manager для управления конфигурацией пользователя
home-manager = {
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { self, nixpkgs, nixos-hardware }: outputs = { self, nixpkgs, nixos-hardware, home-manager }:
let let
# Переменные для переиспользования
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}; version = "25.11";
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
in in
{ {
# Главная конфигурация NixOS
nixosConfigurations.nixos-vm = nixpkgs.lib.nixosSystem { nixosConfigurations.nixos-vm = nixpkgs.lib.nixosSystem {
inherit system; inherit system;
specialArgs = {
inherit pkgs;
};
modules = [ modules = [
./nixos/configuration.nix ./configuration.nix
# Модуль Home Manager для управления конфигурацией пользователя
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.ada = import ./home/ada/default.nix;
}
]; ];
}; };
# Окружение для разработки конфигурации
devShells.${system}.default = pkgs.mkShell {
description = "Development environment для NixOS конфигурации";
buildInputs = with pkgs; [
# Инструменты Nix
nix-output-monitor
nvd
nix-tree
nixfmt-classic
# Редакторы
vim
nano
# Утилиты для работы
git
ripgrep
fd
];
shellHook = ''
echo "🚀 Development environment loaded"
echo "📚 Доступные утилиты:"
echo " - nixfmt: Форматирование Nix кода"
echo " - nvd: Сравнение версий"
echo " - nix-tree: Дерево зависимостей"
echo "💡 Совет: запусти 'nh os switch' для применения конфигурации"
'';
};
# Форматеры кода
formatter.${system} = pkgs.nixfmt-classic;
}; };
} }
+121
View File
@@ -0,0 +1,121 @@
{ pkgs, ... }:
{
# Alacritty - GPU-ускоренный эмулятор терминала
programs.alacritty = {
enable = true;
settings = {
# Оболочка по умолчанию с автоматическим запуском tmux
shell = {
program = "${pkgs.zsh}/bin/zsh";
args = [ "-l" "-c" "tmux new-session -A -s main" ];
};
# Настройки окна
window = {
decorations = "None"; # Без рамок и заголовка
startup_mode = "Maximized"; # Растянуто на весь экран
opacity = 0.80;
padding = {
x = 10;
y = 5;
};
};
# Шрифты
font = {
size = 15.0;
normal = {
family = "FiraCode Nerd Font Mono";
style = "Regular";
};
bold = {
family = "FiraCode Nerd Font Mono";
style = "Bold";
};
italic = {
family = "FiraCode Nerd Font Mono";
style = "Italic";
};
};
# Прокрутка
scrolling = {
history = 10000;
multiplier = 5;
};
# Выделение
selection = {
save_to_clipboard = true;
semantic_escape_chars = "@-./_~?&=%+#";
};
# Мышь
mouse = {
hide_when_typing = false;
};
# Курсор
cursor = {
blink_interval = 500;
thickness = 0.15;
style = {
shape = "Beam";
blinking = "On";
};
};
# Звуковой сигнал (отключен)
bell = {
animation = "EaseOutExpo";
duration = 0;
};
# Nord цветовая схема
# https://www.nordtheme.com/
colors = {
primary = {
background = "#2E3440";
foreground = "#D8DEE9";
};
cursor = {
text = "#2E3440";
cursor = "#D8DEE9";
};
selection = {
text = "#D8DEE9";
background = "#434C5E";
};
normal = {
black = "#3B4252";
red = "#BF616A";
green = "#A3BE8C";
yellow = "#EBCB8B";
blue = "#81A1C1";
magenta = "#B48EAD";
cyan = "#88C0D0";
white = "#E5E9F0";
};
bright = {
black = "#4C566A";
red = "#BF616A";
green = "#A3BE8C";
yellow = "#EBCB8B";
blue = "#81A1C1";
magenta = "#B48EAD";
cyan = "#8FBCBB";
white = "#ECEFF4";
};
};
# Горячие клавиши
keyboard.bindings = [
{ key = "C"; mods = "Control|Shift"; action = "Copy"; }
{ key = "V"; mods = "Control|Shift"; action = "Paste"; }
{ key = "Return"; mods = "Control|Shift"; action = "SpawnNewInstance"; }
];
};
};
}
+45
View File
@@ -0,0 +1,45 @@
{ config, pkgs, ... }:
{
# Импорт модульных конфигураций
imports = [
# Визуальные программы
./alacritty.nix
./vim.nix
./micro.nix
# Конфигурация оболочеки и инструментов
./git.nix
./zsh.nix
./tmux.nix
# Утилиты и пакеты
./tools.nix
./packages.nix
];
# Основные настройки Home Manager
# Информация о пользователе
home.username = "ada";
home.homeDirectory = "/home/ada";
# Версия Home Manager
# Это значение определяет релиз Home Manager, с которым совместима конфигурация.
# Это помогает избежать поломок при выходе новых релизов с несовместимыми изменениями.
home.stateVersion = "25.11";
# Разрешить Home Manager управлять собой
programs.home-manager.enable = true;
# Общие переменные окружения
home.sessionVariables = {
EDITOR = "micro";
VISUAL = "code --wait";
};
}
+126
View File
@@ -0,0 +1,126 @@
{ config, pkgs, ... }:
{
# Git - система контроля версий
programs.git = {
enable = true;
userName = "Dmitry";
userEmail = "ada.dmitry@gmail.com";
extraConfig = {
# Основные настройки
init.defaultBranch = "main";
pull.rebase = true;
core = {
editor = "micro";
filemode = false;
autocrlf = "input";
whitespace = "trailing-space,space-before-tab";
pager = "less -FRXS";
};
# Цвета
color = {
ui = "auto";
branch = "auto";
diff = "auto";
status = "auto";
};
"color \"branch\"" = {
current = "yellow bold";
local = "green";
remote = "cyan";
};
"color \"diff\"" = {
meta = "yellow";
frag = "magenta bold";
old = "red bold";
new = "green bold";
whitespace = "red reverse";
};
"color \"status\"" = {
added = "green bold";
changed = "yellow bold";
untracked = "red bold";
};
};
# Алиасы из .gitconfig
aliases = {
# Базовые сокращения
st = "status";
co = "checkout";
br = "branch";
ci = "commit";
cm = "commit -m";
ca = "commit --amend";
# Добавление файлов
a = "add";
aa = "add --all";
ap = "add --patch";
# Логи
l = "log --oneline --graph --decorate";
lg = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
ll = "log --pretty=format:'%C(yellow)%h%Cred%d %Creset%s%Cblue [%cn]' --decorate --numstat";
ls = "log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Creset%d %s' --date=short";
lol = "log --graph --decorate --pretty=oneline --abbrev-commit";
lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all";
# История файла
filelog = "log -u";
fl = "log -u";
# Diff
d = "diff";
ds = "diff --staged";
dc = "diff --cached";
# Показать последний коммит
last = "log -1 HEAD --stat";
# Отменить последний коммит (сохранив изменения)
undo = "reset --soft HEAD^";
# Показать изменения в файле
blame = "blame -w -M -C";
};
# Глобальный gitignore
ignores = [
# OS Generated
".DS_Store"
".AppleDouble"
".LSOverride"
"._*"
"*~"
".directory"
".Trash-*"
"Thumbs.db"
"ehthumbs.db"
"Desktop.ini"
"$RECYCLE.BIN/"
# IDEs & Editors
".vscode/"
"*.code-workspace"
".history/"
".idea/"
"*.iml"
"*.ipr"
"*.iws"
".idea_modules/"
"*.swp"
"*.swo"
".*.sw?"
"Session.vim"
"#*#"
".#*"
".projectile"
];
};
}
+32
View File
@@ -0,0 +1,32 @@
{ pkgs, ... }:
{
# Micro - современный терминальный редактор
programs.micro = {
enable = true;
settings = {
# Автосохранение и undo
autosu = true;
saveundo = true;
savecursor = true;
# Цветовая схема
colorscheme = "simple";
# Поведение
mkparents = true; # Создавать родительские директории
rmtrailingws = true; # Удалять trailing whitespace
tabstospaces = true; # Заменять табы на пробелы
scrollbar = true; # Показывать scrollbar
# Строка состояния
statusformatl = "$(filename) $(modified)($(line),$(col)) $(opt:filetype) $(opt:fileformat)";
};
};
# Добавить micro в $PATH и установить как основной редактор
home.sessionVariables = {
EDITOR = "micro";
};
}
+90
View File
@@ -0,0 +1,90 @@
{ config, pkgs, ... }:
{
# Списование пакетов для различных нужд
home.packages = with pkgs; [
# ══════════════════════════════════════════════════════════════════
# Редакторы
# ══════════════════════════════════════════════════════════════════
neovim
micro
# ══════════════════════════════════════════════════════════════════
# IDE
# ══════════════════════════════════════════════════════════════════
vscode
jetbrains.idea-community
zed-editor
# ══════════════════════════════════════════════════════════════════
# Терминал
# ══════════════════════════════════════════════════════════════════
alacritty
# ══════════════════════════════════════════════════════════════════
# Средства разработки и навигации
# ══════════════════════════════════════════════════════════════════
tmux # Мультиплексер терминала
fzf # Интерактивный поиск
ripgrep # Быстрый поиск в файлах (rg)
ripgrep-all # Ripgrep для всех типов файлов (rga)
fd # Альтернатива find
bat # Замена cat с подсветкой
eza # Замена ls с иконками
lsd # Ещё одна замена ls
htop # Интерактивный монитор процессов
btop # Современный монитор ресурсов
bottom # Альтернатива top/htop
tree # Вывод дерева директорий
zoxide # Умная навигация (z, zi)
just # Альтернатива make для скриптов
tokei # Анализатор кода (строки, блоки кода)
nitch # Минималистичный neofetch аналог
difftastic # Красивый синтаксис для diff
# ══════════════════════════════════════════════════════════════════
# Инструменты Git
# ══════════════════════════════════════════════════════════════════
git # Система контроля версий
gh # GitHub CLI
lazygit # Интерактивный git UI
# ══════════════════════════════════════════════════════════════════
# Разработка и интеграция
# ══════════════════════════════════════════════════════════════════
pre-commit # Git hooks framework
nodePackages.prettier # Code formatter (Markdown, JSON, YAML, etc.)
# ══════════════════════════════════════════════════════════════════
# Сетевые утилиты
# ══════════════════════════════════════════════════════════════════
curl # Загрузка файлов через URL
wget # Загрузчик файлов
openssh # SSH клиент и сервер
mosh # SSH альтернатива с поддержкой мобильности
nmap # Сканер портов и сетевая диагностика
net-tools # Классические утилиты (netstat, arp и т.д.)
drill # DNS утилита (альтернатива dig)
# ══════════════════════════════════════════════════════════════════
# Базы данных и хранилище
# ══════════════════════════════════════════════════════════════════
sqlite # Встраиваемая реляционная БД
postgresql # Клиент PostgreSQL
# ══════════════════════════════════════════════════════════════════
# Утилиты
# ══════════════════════════════════════════════════════════════════
jq # Обработка JSON
yq # Обработка YAML (аналог jq для YAML)
unzip # Распаковка zip архивов
zip # Создание zip архивов
p7zip # 7-Zip архиватор
gnupg # Шифрование и подписание
# ══════════════════════════════════════════════════════════════════
# Шрифты
# ══════════════════════════════════════════════════════════════════
(pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; })
];
}
+29
View File
@@ -0,0 +1,29 @@
{ config, pkgs, ... }:
{
# Tmux - мультиплексер терминала
programs.tmux = {
enable = true;
terminal = "screen-256color";
keyMode = "vi";
mouse = true;
prefix = "C-a";
extraConfig = ''
# Разделить панели используя | и -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
# Перезагрузить конфигурацию
bind r source-file ~/.tmux.conf
# Переключение панелей используя Alt-стрелки без prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
'';
};
}
+27
View File
@@ -0,0 +1,27 @@
{ config, pkgs, ... }:
{
# Утилиты для работы с CLI
# Bat - замена cat с подсветкой синтаксиса
programs.bat = {
enable = true;
config = {
theme = "TwoDark";
pager = "less -FR";
};
};
# FZF - интерактивный поиск
programs.fzf = {
enable = true;
enableZshIntegration = true;
};
# Direnv - управление окружением по директориям
programs.direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
}
+112
View File
@@ -0,0 +1,112 @@
{ pkgs, ... }:
{
# Vim - легковесный редактор
programs.vim = {
enable = true;
# Включить все улучшения по умолчанию
defaultEditor = false; # Micro - основной редактор
# Настройки
settings = {
# Отображение
number = true;
relativenumber = true;
# Отступы
expandtab = true;
shiftwidth = 2;
tabstop = 2;
smartindent = true;
# Поиск
ignorecase = true;
smartcase = true;
# Файлы
swapfile = false;
undofile = true;
# История команд
history = 1000;
};
# Конфигурация из .vimrc
extraConfig = ''
" Ada's Vim config lightweight and close to Neovim setup
scriptencoding utf-8
set nocompatible
" Leader
let mapleader = " "
" UI
set cursorline
set signcolumn=yes
set termguicolors
" Performance
set updatetime=200
set timeoutlen=400
" Splits
set splitbelow
set splitright
" Clipboard (prefer system clipboard if available)
if has('unnamedplus')
set clipboard=unnamedplus
endif
" Keymaps
nnoremap <silent> j gj
nnoremap <silent> k gk
nnoremap <silent> <leader>w :w<CR>
nnoremap <silent> <leader>q :q<CR>
nnoremap <silent> <leader>h :nohlsearch<CR>
" Windows
nnoremap <silent> <leader>sv <C-w>v
nnoremap <silent> <leader>sh <C-w>s
nnoremap <silent> <leader>se <C-w>=
nnoremap <silent> <leader>sx :close<CR>
" Buffers
nnoremap <silent> <S-l> :bnext<CR>
nnoremap <silent> <S-h> :bprevious<CR>
" Quickfix
nnoremap <silent> ]q :cnext<CR>
nnoremap <silent> [q :cprev<CR>
" Autocommands
augroup AdaCore
autocmd!
" Resize splits equally on terminal resize
autocmd VimResized * tabdo wincmd =
" Disable auto comment on new line
autocmd FileType * setlocal formatoptions-=o formatoptions-=r
augroup END
'';
# Плагины через vim-plug (устанавливается автоматически)
plugins = with pkgs.vimPlugins; [
# Тема Nord
nord-vim
# Fuzzy finder
fzf-vim
# Файловое дерево
nerdtree
# Редактирование
vim-surround
vim-commentary
# Git
vim-gitgutter
];
};
}
+154
View File
@@ -0,0 +1,154 @@
{ config, pkgs, ... }:
{
# ZSH - расширенная оболочка
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
# Переменные окружения
sessionVariables = {
EDITOR = "micro";
VISUAL = "code --wait";
PAGER = "less";
# XDG Base Directories
XDG_CONFIG_HOME = "$HOME/.config";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_STATE_HOME = "$HOME/.local/state";
# История
HISTFILE = "$XDG_STATE_HOME/zsh/history";
HISTSIZE = "50000";
SAVEHIST = "50000";
# Less
LESS = "-R -M -i -j10";
# Цвета
CLICOLOR = "1";
# FZF
FZF_DEFAULT_OPTS = "--height 40% --layout=reverse --border --inline-info";
FZF_DEFAULT_COMMAND = "fd --type f --hidden --follow --exclude .git";
# Go
GOPATH = "$HOME/go";
# Rust
CARGO_HOME = "$HOME/.cargo";
# Python
PYTHONDONTWRITEBYTECODE = "1";
};
shellAliases = {
# Навигация
".." = "cd ..";
"..." = "cd ../..";
"...." = "cd ../../..";
"....." = "cd ../../../..";
# Быстрый доступ
dl = "cd ~/Downloads";
dt = "cd ~/Desktop";
doc = "cd ~/Documents";
dev = "cd ~/dev";
# Списки файлов (eza)
ls = "eza --icons --group-directories-first";
ll = "eza -l --icons --group-directories-first --git";
la = "eza -la --icons --group-directories-first --git";
lt = "eza --tree --level=2 --icons";
l = "eza -lah --icons --group-directories-first --git";
# Безопасность
rm = "rm -i";
cp = "cp -i";
mv = "mv -i";
# Системные
grep = "grep --color=auto";
df = "df -h";
du = "du -h";
free = "free -h";
# Сеть
ping = "ping -c 5";
ports = "netstat -tulanp";
localip = "ip -4 addr show | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}' | grep -v 127.0.0.1";
# NixOS - используем nh для удобства
nixos-rebuild = "nh os switch";
nixos-test = "nh os test";
nixos-boot = "nh os boot";
nixos-update = "cd /home/ada/.dotfiles/nixos && nix flake update && nh os switch";
nixos-list = "nh os list";
# Git
g = "git";
gs = "git status";
gst = "git --no-pager status";
ga = "git add";
gaa = "git add .";
gc = "git commit";
gcm = "git commit -m";
gp = "git push";
gpl = "git pull";
gd = "git diff";
gco = "git checkout";
gb = "git branch";
gl = "git log --oneline --graph --decorate";
glog = "git log --oneline --graph --decorate --all";
# Docker
d = "docker";
dc = "docker-compose";
dps = "docker ps";
dpsa = "docker ps -a";
di = "docker images";
dex = "docker exec -it";
dlog = "docker logs -f";
# Kubectl
k = "kubectl";
kgp = "kubectl get pods";
# Lazy инструменты
lg = "lazygit";
};
# История
history = {
size = 50000;
save = 50000;
path = "$HOME/.local/state/zsh/history";
ignoreDups = true;
ignoreSpace = true;
share = true;
};
initExtra = ''
# Включить zoxide (умная навигация)
eval "$(zoxide init zsh)"
# Включить direnv
eval "$(direnv hook zsh)"
# FZF конфигурация с Catppuccin цветами
export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS \
--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
# FZF используем fd вместо find
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
# Создать директорию для истории если не существует
[[ ! -d "$(dirname $HISTFILE)" ]] && mkdir -p "$(dirname $HISTFILE)"
'';
};
}
+18
View File
@@ -0,0 +1,18 @@
{ ... }:
{
# Отключение PulseAudio
services.pulseaudio.enable = false;
# Включение RealtimeKit для низколатентного аудио
security.rtkit.enable = true;
# Включение PipeWire
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# jack.enable = true; # Раскомментируйте для поддержки JACK
};
}
+43
View File
@@ -0,0 +1,43 @@
{ pkgs, ... }:
{
# Включение X11 и Wayland
services.xserver.enable = true;
# Окружение рабочего стола KDE Plasma 6
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
};
services.desktopManager.plasma6.enable = true;
# Настройка раскладки клавиатуры
services.xserver.xkb = {
layout = "us,ru"; # Английская и русская раскладки
variant = "";
options = "grp:caps_toggle"; # Переключение раскладки по Caps Lock
};
# Поддержка Wayland для Electron приложений
environment.sessionVariables.NIXOS_OZONE_WL = "1";
# Включение CUPS для печати
services.printing.enable = true;
# Дополнительные пакеты KDE/Qt
environment.systemPackages = with pkgs; [
kdePackages.plasma-browser-integration
kdePackages.kio-extras
kdePackages.kio-fuse
kdePackages.kate
kdePackages.kcalc
kdePackages.kcharselect
kdePackages.filelight
kdePackages.partitionmanager
kdePackages.ark
kdePackages.okular
kdePackages.gwenview
kdePackages.spectacle
];
}
+16
View File
@@ -0,0 +1,16 @@
{ ... }:
{
# Имя хоста
networking.hostName = "nixos-vm";
# Включение NetworkManager
networking.networkmanager.enable = true;
# Конфигурация фаервола
networking.firewall = {
enable = true;
allowedTCPPorts = [ 22 ]; # SSH
# allowedUDPPorts = [ ... ];
};
}
+65
View File
@@ -0,0 +1,65 @@
{ pkgs, ... }:
{
# Сервер OpenSSH с усиленной безопасностью
services.openssh = {
enable = true;
settings = {
# Аутентификация
PasswordAuthentication = false;
PubkeyAuthentication = true;
PermitRootLogin = "no";
KbdInteractiveAuthentication = false;
ChallengeResponseAuthentication = false;
PermitEmptyPasswords = false;
# Сессии и доступ
LoginGraceTime = 30;
MaxAuthTries = 3;
MaxSessions = 2;
ClientAliveInterval = 300;
ClientAliveCountMax = 2;
# Отключить устаревшие возможности
X11Forwarding = false;
AllowAgentForwarding = false;
PermitUserEnvironment = false;
};
# Дополнительная конфигурация
extraConfig = ''
# Authentication methods
AuthenticationMethods publickey
# Reduce legacy or risky features
IgnoreRhosts yes
HostbasedAuthentication no
TCPKeepAlive no
# Connection throttling
MaxStartups 10:30:60
'';
};
# Агент GnuPG
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# MTR для сетевой диагностики
programs.mtr.enable = true;
# Firefox
programs.firefox.enable = true;
# AmneziaVPN
programs.amnezia-vpn.enable = true;
# Системные пакеты
environment.systemPackages = with pkgs; [
amneziawg-tools
neofetch
];
}
+17
View File
@@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
{
# Конфигурация загрузчика
boot.loader.grub = {
enable = true;
device = "/dev/sda";
useOSProber = true;
};
# Параметры ядра
boot.kernelParams = [ "quiet" ];
# Модуль ядра AmneziaWG
boot.extraModulePackages = [ config.boot.kernelPackages.amneziawg ];
boot.kernelModules = [ "amneziawg" ];
}
+21
View File
@@ -0,0 +1,21 @@
{ ... }:
{
# Часовой пояс
time.timeZone = "Europe/Moscow";
# Интернационализация
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "ru_RU.UTF-8";
LC_IDENTIFICATION = "ru_RU.UTF-8";
LC_MEASUREMENT = "ru_RU.UTF-8";
LC_MONETARY = "ru_RU.UTF-8";
LC_NAME = "ru_RU.UTF-8";
LC_NUMERIC = "ru_RU.UTF-8";
LC_PAPER = "ru_RU.UTF-8";
LC_TELEPHONE = "ru_RU.UTF-8";
LC_TIME = "ru_RU.UTF-8";
};
}
+60
View File
@@ -0,0 +1,60 @@
{ pkgs, ... }:
{
# Конфигурация Nix с flakes и оптимизациями
nix = {
package = pkgs.nixVersions.latest;
settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
# Substituters для более быстрой загрузки
substituters = [
"https://cache.nixos.org/"
"https://nix-community.cachix.org"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
# Автоматическая сборка мусора
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
};
# Разрешить проприетарные пакеты
nixpkgs.config.allowUnfree = true;
# Системные пакеты для удобства работы с Nix
environment.systemPackages = with pkgs; [
# Утилиты Nix
nix-output-monitor # Красивый вывод Nix
nvd # Инструмент сравнения версий Nix
nix-tree # Просмотр зависимостей Nix store
nix-index # База данных файлов для nixpkgs
comma # Запуск без установки
nh # Ещё один помощник для Nix
nix-du # Визуализация использования диска
nixfmt-classic # Форматтер Nix кода
];
# nix-ld для запуска непропатченных бинарников
programs.nix-ld.enable = true;
programs.nix-ld.libraries = with pkgs; [
stdenv.cc.cc
zlib
fuse3
icu
nss
openssl
curl
expat
];
}
+14
View File
@@ -0,0 +1,14 @@
{ pkgs, ... }:
{
# Определение учётной записи пользователя
users.users.ada = {
isNormalUser = true;
description = "ada";
extraGroups = [ "networkmanager" "wheel" ];
shell = pkgs.zsh;
};
# Включение ZSH системно
programs.zsh.enable = true;
}
@@ -0,0 +1,10 @@
{ ... }:
{
# VirtualBox Guest additions
virtualisation.virtualbox.guest = {
enable = true;
dragAndDrop = true; # Перетаскивание файлов
clipboard = true; # Общий буфер обмена
};
}