LINUX.ORG.RU
ФорумAdmin

/etc/nixos/Justfile

 justfile, , починяю примус


0

1

Для Ъ комбайн: 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 это потому что во первых это всё работает исключительно от юзера во вторых, третьих и всех остальных твои волосы теперь будут мяяяяягкие, щелковистые и без кариеса даже в эти дни.

★★★★★
git-status --> alias git ss
git-sync --> alias git sy
verify --> nix-verify
gc --> nix-gc
analyze --> nix-analyze
backup-config --> nix-bak-cfg
switch --> nix-switch
boot --> nix-boot
update --> nix-update
upgrade --> nix-upgrade

switch: _check_deps _check_space check-all _confirm-action backup-config

switch: \
        _check_deps \
        _check_space \
        check-all \
        _confirm-action \
        backup-config

if command -v ncdu; then ncdu /nix/store else printf ’Error: ncdu not found fi

Ну или «завернуть» function _CHK_CMD()

_CHK_CMD ncdu

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 2)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария