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