feat: add comprehensive NixOS configuration documentation and structure

- Introduced `08-structure.md` detailing project structure, main files, and versioning.
- Created `README.md` for documentation overview and quick start guide.
- Added user-specific configurations for Alacritty, Vim, Micro, Git, Zsh, Tmux, and tools.
- Implemented system modules for desktop environment (KDE Plasma), audio (PipeWire), networking, and services (OpenSSH, GnuPG).
- Configured Nix settings with flakes support and garbage collection.
- Established user management for `ada` with necessary groups and shell settings.
- Enabled VirtualBox guest additions for improved VM experience.
This commit is contained in:
Dmitry
2026-03-10 13:10:52 +03:00
parent a7ba016de4
commit 17b0cdfbac
31 changed files with 3327 additions and 164 deletions
+121
View File
@@ -0,0 +1,121 @@
{ pkgs, ... }:
{
# Alacritty - GPU-ускоренный эмулятор терминала
programs.alacritty = {
enable = true;
settings = {
# Оболочка по умолчанию с автоматическим запуском tmux
shell = {
program = "${pkgs.zsh}/bin/zsh";
args = [ "-l" "-c" "tmux new-session -A -s main" ];
};
# Настройки окна
window = {
decorations = "None"; # Без рамок и заголовка
startup_mode = "Maximized"; # Растянуто на весь экран
opacity = 0.80;
padding = {
x = 10;
y = 5;
};
};
# Шрифты
font = {
size = 15.0;
normal = {
family = "FiraCode Nerd Font Mono";
style = "Regular";
};
bold = {
family = "FiraCode Nerd Font Mono";
style = "Bold";
};
italic = {
family = "FiraCode Nerd Font Mono";
style = "Italic";
};
};
# Прокрутка
scrolling = {
history = 10000;
multiplier = 5;
};
# Выделение
selection = {
save_to_clipboard = true;
semantic_escape_chars = "@-./_~?&=%+#";
};
# Мышь
mouse = {
hide_when_typing = false;
};
# Курсор
cursor = {
blink_interval = 500;
thickness = 0.15;
style = {
shape = "Beam";
blinking = "On";
};
};
# Звуковой сигнал (отключен)
bell = {
animation = "EaseOutExpo";
duration = 0;
};
# Nord цветовая схема
# https://www.nordtheme.com/
colors = {
primary = {
background = "#2E3440";
foreground = "#D8DEE9";
};
cursor = {
text = "#2E3440";
cursor = "#D8DEE9";
};
selection = {
text = "#D8DEE9";
background = "#434C5E";
};
normal = {
black = "#3B4252";
red = "#BF616A";
green = "#A3BE8C";
yellow = "#EBCB8B";
blue = "#81A1C1";
magenta = "#B48EAD";
cyan = "#88C0D0";
white = "#E5E9F0";
};
bright = {
black = "#4C566A";
red = "#BF616A";
green = "#A3BE8C";
yellow = "#EBCB8B";
blue = "#81A1C1";
magenta = "#B48EAD";
cyan = "#8FBCBB";
white = "#ECEFF4";
};
};
# Горячие клавиши
keyboard.bindings = [
{ key = "C"; mods = "Control|Shift"; action = "Copy"; }
{ key = "V"; mods = "Control|Shift"; action = "Paste"; }
{ key = "Return"; mods = "Control|Shift"; action = "SpawnNewInstance"; }
];
};
};
}
+45
View File
@@ -0,0 +1,45 @@
{ config, pkgs, ... }:
{
# Импорт модульных конфигураций
imports = [
# Визуальные программы
./alacritty.nix
./vim.nix
./micro.nix
# Конфигурация оболочеки и инструментов
./git.nix
./zsh.nix
./tmux.nix
# Утилиты и пакеты
./tools.nix
./packages.nix
];
# Основные настройки Home Manager
# Информация о пользователе
home.username = "ada";
home.homeDirectory = "/home/ada";
# Версия Home Manager
# Это значение определяет релиз Home Manager, с которым совместима конфигурация.
# Это помогает избежать поломок при выходе новых релизов с несовместимыми изменениями.
home.stateVersion = "25.11";
# Разрешить Home Manager управлять собой
programs.home-manager.enable = true;
# Общие переменные окружения
home.sessionVariables = {
EDITOR = "micro";
VISUAL = "code --wait";
};
}
+126
View File
@@ -0,0 +1,126 @@
{ config, pkgs, ... }:
{
# Git - система контроля версий
programs.git = {
enable = true;
userName = "Dmitry";
userEmail = "ada.dmitry@gmail.com";
extraConfig = {
# Основные настройки
init.defaultBranch = "main";
pull.rebase = true;
core = {
editor = "micro";
filemode = false;
autocrlf = "input";
whitespace = "trailing-space,space-before-tab";
pager = "less -FRXS";
};
# Цвета
color = {
ui = "auto";
branch = "auto";
diff = "auto";
status = "auto";
};
"color \"branch\"" = {
current = "yellow bold";
local = "green";
remote = "cyan";
};
"color \"diff\"" = {
meta = "yellow";
frag = "magenta bold";
old = "red bold";
new = "green bold";
whitespace = "red reverse";
};
"color \"status\"" = {
added = "green bold";
changed = "yellow bold";
untracked = "red bold";
};
};
# Алиасы из .gitconfig
aliases = {
# Базовые сокращения
st = "status";
co = "checkout";
br = "branch";
ci = "commit";
cm = "commit -m";
ca = "commit --amend";
# Добавление файлов
a = "add";
aa = "add --all";
ap = "add --patch";
# Логи
l = "log --oneline --graph --decorate";
lg = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
ll = "log --pretty=format:'%C(yellow)%h%Cred%d %Creset%s%Cblue [%cn]' --decorate --numstat";
ls = "log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Creset%d %s' --date=short";
lol = "log --graph --decorate --pretty=oneline --abbrev-commit";
lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all";
# История файла
filelog = "log -u";
fl = "log -u";
# Diff
d = "diff";
ds = "diff --staged";
dc = "diff --cached";
# Показать последний коммит
last = "log -1 HEAD --stat";
# Отменить последний коммит (сохранив изменения)
undo = "reset --soft HEAD^";
# Показать изменения в файле
blame = "blame -w -M -C";
};
# Глобальный gitignore
ignores = [
# OS Generated
".DS_Store"
".AppleDouble"
".LSOverride"
"._*"
"*~"
".directory"
".Trash-*"
"Thumbs.db"
"ehthumbs.db"
"Desktop.ini"
"$RECYCLE.BIN/"
# IDEs & Editors
".vscode/"
"*.code-workspace"
".history/"
".idea/"
"*.iml"
"*.ipr"
"*.iws"
".idea_modules/"
"*.swp"
"*.swo"
".*.sw?"
"Session.vim"
"#*#"
".#*"
".projectile"
];
};
}
+32
View File
@@ -0,0 +1,32 @@
{ pkgs, ... }:
{
# Micro - современный терминальный редактор
programs.micro = {
enable = true;
settings = {
# Автосохранение и undo
autosu = true;
saveundo = true;
savecursor = true;
# Цветовая схема
colorscheme = "simple";
# Поведение
mkparents = true; # Создавать родительские директории
rmtrailingws = true; # Удалять trailing whitespace
tabstospaces = true; # Заменять табы на пробелы
scrollbar = true; # Показывать scrollbar
# Строка состояния
statusformatl = "$(filename) $(modified)($(line),$(col)) $(opt:filetype) $(opt:fileformat)";
};
};
# Добавить micro в $PATH и установить как основной редактор
home.sessionVariables = {
EDITOR = "micro";
};
}
+90
View File
@@ -0,0 +1,90 @@
{ config, pkgs, ... }:
{
# Списование пакетов для различных нужд
home.packages = with pkgs; [
# ══════════════════════════════════════════════════════════════════
# Редакторы
# ══════════════════════════════════════════════════════════════════
neovim
micro
# ══════════════════════════════════════════════════════════════════
# IDE
# ══════════════════════════════════════════════════════════════════
vscode
jetbrains.idea-community
zed-editor
# ══════════════════════════════════════════════════════════════════
# Терминал
# ══════════════════════════════════════════════════════════════════
alacritty
# ══════════════════════════════════════════════════════════════════
# Средства разработки и навигации
# ══════════════════════════════════════════════════════════════════
tmux # Мультиплексер терминала
fzf # Интерактивный поиск
ripgrep # Быстрый поиск в файлах (rg)
ripgrep-all # Ripgrep для всех типов файлов (rga)
fd # Альтернатива find
bat # Замена cat с подсветкой
eza # Замена ls с иконками
lsd # Ещё одна замена ls
htop # Интерактивный монитор процессов
btop # Современный монитор ресурсов
bottom # Альтернатива top/htop
tree # Вывод дерева директорий
zoxide # Умная навигация (z, zi)
just # Альтернатива make для скриптов
tokei # Анализатор кода (строки, блоки кода)
nitch # Минималистичный neofetch аналог
difftastic # Красивый синтаксис для diff
# ══════════════════════════════════════════════════════════════════
# Инструменты Git
# ══════════════════════════════════════════════════════════════════
git # Система контроля версий
gh # GitHub CLI
lazygit # Интерактивный git UI
# ══════════════════════════════════════════════════════════════════
# Разработка и интеграция
# ══════════════════════════════════════════════════════════════════
pre-commit # Git hooks framework
nodePackages.prettier # Code formatter (Markdown, JSON, YAML, etc.)
# ══════════════════════════════════════════════════════════════════
# Сетевые утилиты
# ══════════════════════════════════════════════════════════════════
curl # Загрузка файлов через URL
wget # Загрузчик файлов
openssh # SSH клиент и сервер
mosh # SSH альтернатива с поддержкой мобильности
nmap # Сканер портов и сетевая диагностика
net-tools # Классические утилиты (netstat, arp и т.д.)
drill # DNS утилита (альтернатива dig)
# ══════════════════════════════════════════════════════════════════
# Базы данных и хранилище
# ══════════════════════════════════════════════════════════════════
sqlite # Встраиваемая реляционная БД
postgresql # Клиент PostgreSQL
# ══════════════════════════════════════════════════════════════════
# Утилиты
# ══════════════════════════════════════════════════════════════════
jq # Обработка JSON
yq # Обработка YAML (аналог jq для YAML)
unzip # Распаковка zip архивов
zip # Создание zip архивов
p7zip # 7-Zip архиватор
gnupg # Шифрование и подписание
# ══════════════════════════════════════════════════════════════════
# Шрифты
# ══════════════════════════════════════════════════════════════════
(pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; })
];
}
+29
View File
@@ -0,0 +1,29 @@
{ config, pkgs, ... }:
{
# Tmux - мультиплексер терминала
programs.tmux = {
enable = true;
terminal = "screen-256color";
keyMode = "vi";
mouse = true;
prefix = "C-a";
extraConfig = ''
# Разделить панели используя | и -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
# Перезагрузить конфигурацию
bind r source-file ~/.tmux.conf
# Переключение панелей используя Alt-стрелки без prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
'';
};
}
+27
View File
@@ -0,0 +1,27 @@
{ config, pkgs, ... }:
{
# Утилиты для работы с CLI
# Bat - замена cat с подсветкой синтаксиса
programs.bat = {
enable = true;
config = {
theme = "TwoDark";
pager = "less -FR";
};
};
# FZF - интерактивный поиск
programs.fzf = {
enable = true;
enableZshIntegration = true;
};
# Direnv - управление окружением по директориям
programs.direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
}
+112
View File
@@ -0,0 +1,112 @@
{ pkgs, ... }:
{
# Vim - легковесный редактор
programs.vim = {
enable = true;
# Включить все улучшения по умолчанию
defaultEditor = false; # Micro - основной редактор
# Настройки
settings = {
# Отображение
number = true;
relativenumber = true;
# Отступы
expandtab = true;
shiftwidth = 2;
tabstop = 2;
smartindent = true;
# Поиск
ignorecase = true;
smartcase = true;
# Файлы
swapfile = false;
undofile = true;
# История команд
history = 1000;
};
# Конфигурация из .vimrc
extraConfig = ''
" Ada's Vim config lightweight and close to Neovim setup
scriptencoding utf-8
set nocompatible
" Leader
let mapleader = " "
" UI
set cursorline
set signcolumn=yes
set termguicolors
" Performance
set updatetime=200
set timeoutlen=400
" Splits
set splitbelow
set splitright
" Clipboard (prefer system clipboard if available)
if has('unnamedplus')
set clipboard=unnamedplus
endif
" Keymaps
nnoremap <silent> j gj
nnoremap <silent> k gk
nnoremap <silent> <leader>w :w<CR>
nnoremap <silent> <leader>q :q<CR>
nnoremap <silent> <leader>h :nohlsearch<CR>
" Windows
nnoremap <silent> <leader>sv <C-w>v
nnoremap <silent> <leader>sh <C-w>s
nnoremap <silent> <leader>se <C-w>=
nnoremap <silent> <leader>sx :close<CR>
" Buffers
nnoremap <silent> <S-l> :bnext<CR>
nnoremap <silent> <S-h> :bprevious<CR>
" Quickfix
nnoremap <silent> ]q :cnext<CR>
nnoremap <silent> [q :cprev<CR>
" Autocommands
augroup AdaCore
autocmd!
" Resize splits equally on terminal resize
autocmd VimResized * tabdo wincmd =
" Disable auto comment on new line
autocmd FileType * setlocal formatoptions-=o formatoptions-=r
augroup END
'';
# Плагины через vim-plug (устанавливается автоматически)
plugins = with pkgs.vimPlugins; [
# Тема Nord
nord-vim
# Fuzzy finder
fzf-vim
# Файловое дерево
nerdtree
# Редактирование
vim-surround
vim-commentary
# Git
vim-gitgutter
];
};
}
+154
View File
@@ -0,0 +1,154 @@
{ config, pkgs, ... }:
{
# ZSH - расширенная оболочка
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
# Переменные окружения
sessionVariables = {
EDITOR = "micro";
VISUAL = "code --wait";
PAGER = "less";
# XDG Base Directories
XDG_CONFIG_HOME = "$HOME/.config";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_STATE_HOME = "$HOME/.local/state";
# История
HISTFILE = "$XDG_STATE_HOME/zsh/history";
HISTSIZE = "50000";
SAVEHIST = "50000";
# Less
LESS = "-R -M -i -j10";
# Цвета
CLICOLOR = "1";
# FZF
FZF_DEFAULT_OPTS = "--height 40% --layout=reverse --border --inline-info";
FZF_DEFAULT_COMMAND = "fd --type f --hidden --follow --exclude .git";
# Go
GOPATH = "$HOME/go";
# Rust
CARGO_HOME = "$HOME/.cargo";
# Python
PYTHONDONTWRITEBYTECODE = "1";
};
shellAliases = {
# Навигация
".." = "cd ..";
"..." = "cd ../..";
"...." = "cd ../../..";
"....." = "cd ../../../..";
# Быстрый доступ
dl = "cd ~/Downloads";
dt = "cd ~/Desktop";
doc = "cd ~/Documents";
dev = "cd ~/dev";
# Списки файлов (eza)
ls = "eza --icons --group-directories-first";
ll = "eza -l --icons --group-directories-first --git";
la = "eza -la --icons --group-directories-first --git";
lt = "eza --tree --level=2 --icons";
l = "eza -lah --icons --group-directories-first --git";
# Безопасность
rm = "rm -i";
cp = "cp -i";
mv = "mv -i";
# Системные
grep = "grep --color=auto";
df = "df -h";
du = "du -h";
free = "free -h";
# Сеть
ping = "ping -c 5";
ports = "netstat -tulanp";
localip = "ip -4 addr show | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}' | grep -v 127.0.0.1";
# NixOS - используем nh для удобства
nixos-rebuild = "nh os switch";
nixos-test = "nh os test";
nixos-boot = "nh os boot";
nixos-update = "cd /home/ada/.dotfiles/nixos && nix flake update && nh os switch";
nixos-list = "nh os list";
# Git
g = "git";
gs = "git status";
gst = "git --no-pager status";
ga = "git add";
gaa = "git add .";
gc = "git commit";
gcm = "git commit -m";
gp = "git push";
gpl = "git pull";
gd = "git diff";
gco = "git checkout";
gb = "git branch";
gl = "git log --oneline --graph --decorate";
glog = "git log --oneline --graph --decorate --all";
# Docker
d = "docker";
dc = "docker-compose";
dps = "docker ps";
dpsa = "docker ps -a";
di = "docker images";
dex = "docker exec -it";
dlog = "docker logs -f";
# Kubectl
k = "kubectl";
kgp = "kubectl get pods";
# Lazy инструменты
lg = "lazygit";
};
# История
history = {
size = 50000;
save = 50000;
path = "$HOME/.local/state/zsh/history";
ignoreDups = true;
ignoreSpace = true;
share = true;
};
initExtra = ''
# Включить zoxide (умная навигация)
eval "$(zoxide init zsh)"
# Включить direnv
eval "$(direnv hook zsh)"
# FZF конфигурация с Catppuccin цветами
export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS \
--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
# FZF используем fd вместо find
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
# Создать директорию для истории если не существует
[[ ! -d "$(dirname $HISTFILE)" ]] && mkdir -p "$(dirname $HISTFILE)"
'';
};
}