Для Ъ комбайн: nh (github.com), nvd (sr.ht), ncdu, alejandra, statix, deadnix, nix-du, graphviz, nix-index
min_disk_gb := "10" # Порог свободного места на диске (ГБ)
nix_dir := "/etc/nixos" # Путь к конфигурации NixOS
dir_ver := "/etc/nixos/backups" # Папка для архивных копий
hostname := `hostname --short` # Имя хоста текущей машины
username := `whoami` # Имя текущего пользователя
# --- ГЛАВНОЕ МЕНЮ ---
# Вывести список всех доступных команд
default:
@just --list --unsorted
# --- 1. СЛУЖЕБНЫЕ ПРОВЕРКИ (ВНУТРЕННИЕ) ---
# Проверка наличия всех необходимых утилит в системе перед работой
_check_deps:
@bash -c 'for tool in nh nvd ncdu alejandra statix deadnix nix-du dot nix-locate; do \
if ! command -v "$tool" > /dev/null 2>&1; then \
echo "ОШИБКА: Отсутствует пакет: $tool"; exit 1; \
fi; \
done'
# Проверка места в /nix/store перед тяжелыми операциями сборки
_check_space:
@bash -c 'free_gb=$(df -BG "/nix/store" | awk "NR==2 {gsub(/G/, \"\"); print \$4}"); \
if [ "$free_gb" -lt "{{min_disk_gb}}" ]; then \
echo "ОШИБКА: Мало места ($free_gb GB). Требуется минимум {{min_disk_gb}} GB."; exit 1; \
fi'
# Запрос подтверждения у пользователя (y/N) перед выполнением
_confirm-action:
@bash -c 'printf "=> Вы уверены, что хотите продолжить? (y/N) "; \
read confirm; \
case "$confirm" in [Yy]*) ;; *) echo "Операция отменена." 1>&2; exit 1 ;; esac'
# --- 2. РАБОТА С КОДОМ (ЛИНТИНГ И ФОРМАТИРОВАНИЕ) ---
# Принудительное форматирование всех .nix файлов (Alejandra)
format:
@echo "=> Форматирование (alejandra)..."
@alejandra --quiet .
# Удаление неиспользуемых переменных и фрагментов кода (Deadnix)
deadcode:
@echo "=> Удаление мертвого кода (deadnix)..."
@deadnix -e .
# Исправление нарушений стандартов и антипаттернов (Statix)
lint:
@echo "=> Исправление антипаттернов (statix)..."
@statix fix .
# Комплексная "прическа" кода: мертвый код -> антипаттерны -> форматирование
fix-all: deadcode lint format
@echo "=> Код полностью приведен в порядок."
# Проверка кода всеми инструментами без внесения изменений
check-all:
@echo "=> Запуск диагностических проверок..."
@alejandra -c --quiet .
@deadnix .
@statix check .
# --- 3. УПРАВЛЕНИЕ СИСТЕМОЙ NIXOS ---
# Пересборка системы
switch: _check_deps _check_space check-all _confirm-action backup-config
@git add .
@echo "=> Пересборка системы (nh os switch)..."
nh os switch .
@echo "=> Сравнение версий пакетов (nvd):"
@nvd diff $(ls -dv /nix/var/nix/profiles/system-*-link | tail -n 2) || true
# Сборка в загрузчик
boot: _check_deps _check_space check-all _confirm-action backup-config
@git add .
@echo "=> Сборка в загрузчик (nh os boot)..."
nh os boot .
# Обновление всех зависимостей Flake (flake.lock)
update:
@echo "=> Обновление flake.lock..."
@nix flake update
# Полный цикл: обновление Flake + пересборка всей системы
upgrade: update switch
# --- 4. УПРАВЛЕНИЕ HOME MANAGER ---
# Тестовая сборка (убрали username, подхватится автоматически)
home-build: _check_deps
@echo "=> Проверка сборки Home Manager..."
nh home build .
# Применение Home Manager
home-switch: _check_deps _check_space check-all _confirm-action backup-config
@git add .
@echo "=> Применение настроек Home Manager..."
nh home switch .
# --- 5. РЕЗЕРВНОЕ КОПИРОВАНИЕ И АНАЛИЗ ---
# Создание архива текущей конфигурации в папку backups
backup-config:
@mkdir -p "{{dir_ver}}"
@bash -c 'timestamp=$(date +%Y%m%d_%H%M); \
backup_file="{{dir_ver}}/config_$timestamp.tar.gz"; \
tar -czf "$backup_file" --exclude=".git" --exclude="backups" --exclude="result" --one-file-system .; \
echo "=> Бэкап сохранён: $backup_file"'
@find "{{dir_ver}}" -name "config_*.tar.gz" -mtime +30 -delete
# --- 6. АНАЛИЗ И ДИАГНОСТИКА ---
# Интерактивный анализ места в хранилище (ncdu)
analyze:
ncdu /nix/store
# Поиск пакета по имени файла (например: just locate libfoo.so)
locate query:
@nix-locate --at-root {{query}}
# Визуализация графа зависимостей (требуется nix-du и graphviz/dot)
analyze-bins:
@echo "=> Генерация store_map.png..."
@nix-du -s 500MB | dot -Tpng > store_map.png
# --- 7. ОБСЛУЖИВАНИЕ И ОЧИСТКА ---
# Очистка старых поколений и оптимизация хранилища
gc:
@echo "=> Очистка мусора (nh clean)..."
nh clean all --keep 5
@echo "=> Оптимизация Nix Store (hard-links)..."
@nix store optimize
# Проверка целостности файлов в /nix/store
verify:
@echo "=> Проверка целостности хранилища..."
nix-store --verify --check-contents
# --- 8. РАБОТА С GIT ---
# Синхронизация с удаленным репозиторием (rebase + push)
git-sync:
@echo "=> Синхронизация с Git..."
@git pull --rebase || (echo "ОШИБКА: Конфликт при pull."; exit 1)
@git push || (echo "ОШИБКА: Ошибка при push."; exit 1)
# Статус репозитория
git-status:
@git status
А ненужно конкретно ТЕБЕ Username это потому что во первых это всё работает исключительно от юзера во вторых, третьих и всех остальных твои волосы теперь будут мяяяяягкие, щелковистые и без кариеса даже в эти дни.