backup: 2026-04-11 13:47

This commit is contained in:
Dmitry
2026-04-11 13:47:41 +03:00
parent c4cc52f73d
commit 9285660f27
40 changed files with 193 additions and 3414 deletions
+74
View File
@@ -0,0 +1,74 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/master/doc/json_schema.json",
"logo": {
"type": "small",
"position": "left",
"printRemaining": false,
"padding": {
"top": 2,
"right": 1
}
},
"display": {
"separator": " ",
"brightColor": false,
"color": {
"keys": "blue",
"title": "cyan",
"separator": "bright_black",
"output": "white"
},
"key": {
"width": 3,
"type": "icon"
},
"duration": {
"abbreviation": true
}
},
"modules": [
"title",
"separator",
{
"type": "os",
"key": "os",
"format": "{name}"
},
{
"type": "kernel",
"key": "kernel",
"format": "{release}"
},
{
"type": "uptime",
"key": "uptime"
},
{
"type": "command",
"key": "age",
"shell": "/bin/sh",
"param": "-c",
"text": "first=\"$(sed -n '1{s/^\\[\\([^]]*\\)\\].*/\\1/p;q}' /var/log/pacman.log)\"; if [ -n \"$first\" ]; then start=\"${first%%+*}\"; now=$(date +%s); then_ts=$(date -d \"$start\" +%s 2>/dev/null || true); if [ -n \"$then_ts\" ]; then days=$(( (now-then_ts)/86400 )); years=$(( days/365 )); rem=$(( days%365 )); if [ \"$years\" -gt 0 ]; then printf '%sy %sd\\n' \"$years\" \"$rem\"; else printf '%sd\\n' \"$days\"; fi; else echo n/a; fi; else echo n/a; fi"
},
{
"type": "shell",
"key": "shell",
"format": "{pretty-name}"
},
{
"type": "terminal",
"key": "term",
"format": "{pretty-name}"
},
{
"type": "memory",
"key": "ram",
"format": "{used}/{total} ({percentage})"
},
{
"type": "disk",
"key": "disk",
"format": "{size-used}/{size-total} ({size-percentage})"
}
]
}
+14
View File
@@ -0,0 +1,14 @@
%%%%%%%%%%%%%%
*%%%%%%%%%%%%%%%%%%@
%%%%%%%%%%%%%%%%%%%@%%
%%%%%%%%%%%%%%%%%%%%%%%%+
%%%%%%%% %%%%@@% %%%%%%%%
%%%%:%%% %%%%@% %% %%%*@%%%%
%%% % %% %%% %@ %% @ %%%
%% % % %@% % %% %% % %%%
%%%%%%%% %%%%%%% %%%%@%%%@
%%%%%%%%%%%%%%%%%@%%%%%@%
%%%%%%@%%%%%%%@%%%%%%%
%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%
+1 -1
View File
@@ -205,7 +205,7 @@
[credential] [credential]
# Кэшировать пароли на 1 час # Кэшировать пароли на 1 час
helper = "!f() { /home/ada/.vscode-server/bin/e7fb5e96c0730b9deb70b33781f98e2f35975036/node /tmp/vscode-remote-containers-a5b5f662-89b2-4631-a1e9-74a4d6766f58.js git-credential-helper $*; }; f" helper = "!f() { /home/ada/.vscode-server/bin/e7fb5e96c0730b9deb70b33781f98e2f35975036/node /tmp/vscode-remote-containers-c2ca9419-d1b5-464d-a579-9a0e513fd732.js git-credential-helper $*; }; f"
# ═══ URL shortcuts ══════════════════════════════════════════ # ═══ URL shortcuts ══════════════════════════════════════════
+83
View File
@@ -0,0 +1,83 @@
# Adapted from alacritty/.config/alacritty/alacritty.toml
# Reference: https://sw.kovidgoyal.net/kitty/conf/
# Launch shell and attach/create tmux session
shell /usr/bin/zsh -l -c "tmux new-session -A -s main"
# Window appearance
hide_window_decorations yes
background_opacity 0.90
# window_padding_width 1 1
enable_tab_bar no
# Alacritty startup_mode=maximized has no direct kitty.conf equivalent.
# Use: kitty --start-as maximized
# Font
font_family FiraCode Nerd Font Mono
bold_font FiraCode Nerd Font Mono Bold
italic_font FiraCode Nerd Font Mono Italic
font_size 15.0
# Scrollback
scrollback_lines 10000
wheel_scroll_multiplier 5.0
# Selection behavior
copy_on_select clipboard
select_by_word_characters @-./_~?&=%+#
# Keep mouse cursor visible while typing
mouse_hide_wait 0.0
# Cursor
cursor_shape beam
cursor_blink_interval 0.5
cursor_beam_thickness 1.5
# Bell (disable visual bell)
visual_bell_duration 0.0
# Nord color scheme
foreground #D8DEE9
background #2E3440
cursor #D8DEE9
cursor_text_color #2E3440
selection_foreground #D8DEE9
selection_background #434C5E
color0 #3B4252
color1 #BF616A
color2 #A3BE8C
color3 #EBCB8B
color4 #81A1C1
color5 #B48EAD
color6 #88C0D0
color7 #E5E9F0
color8 #4C566A
color9 #BF616A
color10 #A3BE8C
color11 #EBCB8B
color12 #81A1C1
color13 #B48EAD
color14 #8FBCBB
color15 #ECEFF4
# Key bindings aligned with Alacritty config
map ctrl+shift+c copy_to_clipboard
map ctrl+shift+v paste_from_clipboard
map ctrl+shift+enter new_os_window
map ctrl+shift+f11 toggle_fullscreen
map ctrl+shift+equal change_font_size all +2.0
map ctrl+shift+minus change_font_size all -2.0
map ctrl+shift+0 change_font_size all 0
map ctrl+shift+up scroll_line_up
map ctrl+shift+down scroll_line_down
map ctrl+shift+page_up scroll_page_up
map ctrl+shift+page_down scroll_page_down
map ctrl+shift+home scroll_home
map ctrl+shift+end scroll_end
-63
View File
@@ -1,63 +0,0 @@
# ══════════════════════════════════════════════════════════════════
# 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
-346
View File
@@ -1,346 +0,0 @@
# 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
│ └── qemu-guest.nix # QEMU/KVM 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 Guest:**
- Drag & Drop включен
- Shared clipboard включен
- Guest additions настроены
**QEMU/KVM Guest:**
- QEMU Guest Agent включен
- SPICE VDAgent для интеграции
- Улучшенная производительность
## Как использовать
### Первоначальная сборка
```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)
-38
View File
@@ -1,38 +0,0 @@
{ config, pkgs, lib, ... }:
{
imports = [
# Конфигурация железа
./hardware-configuration.nix
# Системные модули
./modules/system/boot.nix
./modules/system/nix.nix
./modules/system/locale.nix
# Окружение рабочего стола
./modules/desktop/plasma.nix
./modules/desktop/pipewire.nix
# Сеть
./modules/networking/default.nix
# Сервисы
./modules/services/default.nix
# Виртуализация
./modules/virtualisation/virtualbox.nix
./modules/virtualisation/qemu-guest.nix
# Пользователи
./modules/users/ada.nix
];
# Версия релиза NixOS
# Это значение определяет релиз NixOS, из которого были взяты настройки по умолчанию
# для stateful данных, таких как расположение файлов и версии баз данных в вашей системе.
# Рекомендуется оставить это значение таким, каким оно было при первой установке системы.
# Перед изменением этого значения прочитайте документацию для этой опции
# (например, man configuration.nix или https://nixos.org/nixos/options.html).
system.stateVersion = "25.05";
}
-130
View File
@@ -1,130 +0,0 @@
# Добавление и удаление пакетов
Как управлять программами в конфигурации.
## Где пакеты?
Пакеты описаны в файле:
```
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
@@ -1,203 +0,0 @@
# 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
@@ -1,234 +0,0 @@
# Сеть: 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
@@ -1,188 +0,0 @@
# 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
@@ -1,228 +0,0 @@
# 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
@@ -1,302 +0,0 @@
# Добавление новых модулей
Как создавать расширяющие конфигурацию новые модули.
## Что такое модуль?
Модуль - это файл `.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
@@ -1,285 +0,0 @@
# Отладка и решение проблем
Что делать когда что-то не работает.
## Конфигурация не собирается
### Ошибка синтаксиса
```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. Медленнее добавить изменения по одному
```
-223
View File
@@ -1,223 +0,0 @@
# Структура проекта
Как устроена конфигурация.
## Главные файлы
```
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 (drag&drop, clipboard)
- **qemu-guest.nix** - QEMU/KVM Guest поддержка (spice-vdagent)
## 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
@@ -1,39 +0,0 @@
# 📚 Документация 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 |
-85
View File
@@ -1,85 +0,0 @@
{
description = "Модульная конфигурация NixOS 25.11 на Flake с Home Manager для виртуальной машины";
inputs = {
# Nixpkgs - главный репозиторий пакетов
# Используем nixos-25.11 для стабильности вместо unstable
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
# Hardware profiles для различных машин
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, home-manager }:
let
# Переменные для переиспользования
system = "x86_64-linux";
version = "25.11";
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
in
{
# Главная конфигурация NixOS
nixosConfigurations.nixos-vm = nixpkgs.lib.nixosSystem {
inherit system;
specialArgs = {
inherit pkgs;
};
modules = [
./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;
};
}
-30
View File
@@ -1,30 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ ];
boot.initrd.availableKernelModules = [ "ata_piix" "ohci_pci" "ehci_pci" "ahci" "sd_mod" "sr_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/2bb3bd25-1bc0-408f-945e-9150e4a10255";
fsType = "ext4";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
virtualisation.virtualbox.guest.enable = true;
}
-121
View File
@@ -1,121 +0,0 @@
{ 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
@@ -1,45 +0,0 @@
{ 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.05";
# Разрешить Home Manager управлять собой
programs.home-manager.enable = true;
# Общие переменные окружения
home.sessionVariables = {
EDITOR = "micro";
VISUAL = "code --wait";
};
}
-126
View File
@@ -1,126 +0,0 @@
{ 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
@@ -1,32 +0,0 @@
{ 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
@@ -1,90 +0,0 @@
{ 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
@@ -1,29 +0,0 @@
{ 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
@@ -1,27 +0,0 @@
{ 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
@@ -1,112 +0,0 @@
{ 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
@@ -1,154 +0,0 @@
{ 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
@@ -1,18 +0,0 @@
{ ... }:
{
# Отключение 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
@@ -1,43 +0,0 @@
{ 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
@@ -1,16 +0,0 @@
{ ... }:
{
# Имя хоста
networking.hostName = "nixos-vm";
# Включение NetworkManager
networking.networkmanager.enable = true;
# Конфигурация фаервола
networking.firewall = {
enable = true;
allowedTCPPorts = [ 22 ]; # SSH
# allowedUDPPorts = [ ... ];
};
}
-65
View File
@@ -1,65 +0,0 @@
{ 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
@@ -1,17 +0,0 @@
{ 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
@@ -1,21 +0,0 @@
{ ... }:
{
# Часовой пояс
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
@@ -1,60 +0,0 @@
{ 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
@@ -1,14 +0,0 @@
{ pkgs, ... }:
{
# Определение учётной записи пользователя
users.users.ada = {
isNormalUser = true;
description = "ada";
extraGroups = [ "networkmanager" "wheel" ];
shell = pkgs.zsh;
};
# Включение ZSH системно
programs.zsh.enable = true;
}
@@ -1,15 +0,0 @@
{ pkgs, ... }:
{
# QEMU/KVM Guest поддержка
services.qemuGuest.enable = true;
# SPICE Agent для лучшей интеграции (общий буфер, drag&drop)
services.spice-vdagentd.enable = true;
# Дополнительные пакеты для работы с QEMU
environment.systemPackages = with pkgs; [
spice-vdagent # SPICE агент для гостевой системы
qemu-utils # Утилиты QEMU
];
}
@@ -1,10 +0,0 @@
{ ... }:
{
# VirtualBox Guest additions
virtualisation.virtualbox.guest = {
enable = true;
dragAndDrop = true; # Перетаскивание файлов
clipboard = true; # Общий буфер обмена
};
}
+2 -2
View File
@@ -142,12 +142,12 @@
}, },
"ui_font_size": 16.0, "ui_font_size": 16.0,
"buffer_font_size": 14.0, "buffer_font_size": 14.0,
"proxy": "socks5://127.0.0.1:20170", "proxy": "socks5://127.0.0.1:7897",
// "proxy": "socks5://ada:%3FHolivarr588856@157.22.231.198:1081", // "proxy": "socks5://ada:%3FHolivarr588856@157.22.231.198:1081",
"theme": { "theme": {
"mode": "system", "mode": "system",
"light": "Ayu Light", "light": "Ayu Light",
"dark": "Tokyo Night", "dark": "Nordfox - blurred",
}, },
"features": { "features": {
"notebooks": true, "notebooks": true,
+14
View File
@@ -2,6 +2,8 @@
# Ada's Modular ZSH Configuration # Ada's Modular ZSH Configuration
# ════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
# ═══ Powerlevel10k Instant Prompt ══════════════════════════ # ═══ Powerlevel10k Instant Prompt ══════════════════════════
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n] # Initialization code that may require console input (password prompts, [y/n]
@@ -37,6 +39,7 @@ source "${ZSH_CONFIG_DIR}/functions.zsh" # Пользовательские
source "${ZSH_CONFIG_DIR}/keybindings.zsh" # Горячие клавиши source "${ZSH_CONFIG_DIR}/keybindings.zsh" # Горячие клавиши
source "${ZSH_CONFIG_DIR}/prompt.zsh" # Настройка промпта (starship) source "${ZSH_CONFIG_DIR}/prompt.zsh" # Настройка промпта (starship)
# ═══ Локальные настройки (опционально) ═════════════════════ # ═══ Локальные настройки (опционально) ═════════════════════
# Для машинно-специфичных настроек # Для машинно-специфичных настроек
[[ -f "${ZSH_CONFIG_DIR}/local.zsh" ]] && source "${ZSH_CONFIG_DIR}/local.zsh" [[ -f "${ZSH_CONFIG_DIR}/local.zsh" ]] && source "${ZSH_CONFIG_DIR}/local.zsh"
@@ -48,6 +51,17 @@ source "${ZSH_CONFIG_DIR}/prompt.zsh" # Настройка промпта
[[ ! -f /home/ada/.config/zsh/.p10k.zsh ]] || source /home/ada/.config/zsh/.p10k.zsh [[ ! -f /home/ada/.config/zsh/.p10k.zsh ]] || source /home/ada/.config/zsh/.p10k.zsh
# Показываем fastfetch один раз уже после инициализации prompt'а.
if [[ -o interactive ]]; then
autoload -Uz add-zsh-hook
function _fastfetch_once() {
add-zsh-hook -d precmd _fastfetch_once
command fastfetch
}
add-zsh-hook precmd _fastfetch_once
fi
export NVM_DIR="$HOME/.config/nvm" export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
+5 -2
View File
@@ -58,8 +58,11 @@ alias ports='netstat -tulanp'
alias localip="ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v 127.0.0.1" alias localip="ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v 127.0.0.1"
# Proxy # Proxy
alias proxy-on='sshp-start && export http_proxy="http://127.0.0.1:1080" https_proxy="http://127.0.0.1:1080" HTTP_PROXY="http://127.0.0.1:1080" HTTPS_PROXY="http://127.0.0.1:1080" && echo "Proxy enabled"' # Включение прокси (HTTP, HTTPS и SOCKS5h для DNS через прокси)
alias proxy-off='sshp-stop && unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY && echo "Proxy disabled"' alias proxy-on='export http_proxy="http://127.0.0.1:2080" https_proxy="http://127.0.0.1:2080" ALL_PROXY="socks5://127.0.0.1:2080" all_proxy="socks5://127.0.0.1:2080" && echo "󰖟 Proxy enabled (127.0.0.1:2080)"'
# Полное отключение всех переменных прокси
alias proxy-off='unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY && echo "󰖪 Proxy disabled"'
alias proxy-status='env | grep -i proxy' alias proxy-status='env | grep -i proxy'