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 =
|
||||
[ # Include the results of the hardware scan.
|
||||
imports = [
|
||||
# Конфигурация железа
|
||||
./hardware-configuration.nix
|
||||
|
||||
# Системные модули
|
||||
./modules/system/boot.nix
|
||||
./modules/system/nix.nix
|
||||
./modules/system/locale.nix
|
||||
|
||||
# Окружение рабочего стола
|
||||
./modules/desktop/plasma.nix
|
||||
./modules/desktop/pipewire.nix
|
||||
|
||||
# Сеть
|
||||
./modules/networking/default.nix
|
||||
|
||||
# Сервисы
|
||||
./modules/services/default.nix
|
||||
|
||||
# Виртуализация
|
||||
./modules/virtualisation/virtualbox.nix
|
||||
|
||||
# Пользователи
|
||||
./modules/users/ada.nix
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
boot.loader.grub.useOSProber = true;
|
||||
|
||||
boot.kernelParams = [ "quiet" ];
|
||||
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;
|
||||
|
||||
# Версия релиза NixOS
|
||||
# Это значение определяет релиз NixOS, из которого были взяты настройки по умолчанию
|
||||
# для stateful данных, таких как расположение файлов и версии баз данных в вашей системе.
|
||||
# Рекомендуется оставить это значение таким, каким оно было при первой установке системы.
|
||||
# Перед изменением этого значения прочитайте документацию для этой опции
|
||||
# (например, man configuration.nix или https://nixos.org/nixos/options.html).
|
||||
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 = {
|
||||
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";
|
||||
|
||||
# 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
|
||||
# Переменные для переиспользования
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
version = "25.11";
|
||||
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
in
|
||||
{
|
||||
# Главная конфигурация NixOS
|
||||
nixosConfigurations.nixos-vm = nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
|
||||
specialArgs = {
|
||||
inherit pkgs;
|
||||
};
|
||||
|
||||
modules = [
|
||||
./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