# Makefile to safely clean up NixOS profiles, keeping only the last 3 generations.

.PHONY: help dry-run clean-system clean-user clean-home-manager clean-all

# Default target displays the help menu
help:
	@echo "NixOS Profile Cleanup Utility"
	@echo "============================="
	@echo "Available targets:"
	@echo "  make dry-run             - Safe preview of what will be deleted"
	@echo "  make clean-system        - Clean system generations and update bootloader (requires sudo)"
	@echo "  make clean-user          - Clean current user's profile generations"
	@echo "  make clean-home-manager  - Clean Home Manager generations (if applicable)"
	@echo "  make clean-all           - Clean everything (System, User, and Home Manager)"

# Dry run to preview changes without deleting anything
dry-run:
	@echo "=== [DRY RUN] System Profile ==="
	sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations +3 --dry-run
	@echo "\n=== [DRY RUN] User Profile ==="
	nix-env --delete-generations +3 --dry-run
	@echo "\n=== [DRY RUN] Home Manager Profile ==="
	@if [ -d "$$HOME/.local/state/nix/profiles/home-manager" ]; then \
		nix-env --profile "$$HOME/.local/state/nix/profiles/home-manager" --delete-generations +3 --dry-run; \
	elif [ -d "$$HOME/.nix-profile" ]; then \
		echo "No Home Manager directory found, but user profile exists."; \
	else \
		echo "No Home Manager profile detected."; \
	fi

# Clean system generations (requires sudo)
clean-system:
	@echo "--- Cleaning System Profile (SUDO) ---"
	sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations +3
	sudo nix-collect-garbage
	@echo "--- Updating Bootloader Menu ---"
	sudo nixos-rebuild boot --flake

# Clean user generations (no sudo)
clean-user:
	@echo "--- Cleaning User Profile ---"
	nix-env --delete-generations +3
	nix-collect-garbage

# Clean Home Manager generations (no sudo)
clean-home-manager:
	@echo "--- Cleaning Home Manager Profile ---"
	@if [ -d "$$HOME/.local/state/nix/profiles/home-manager" ]; then \
		nix-env --profile "$$HOME/.local/state/nix/profiles/home-manager" --delete-generations +3; \
		nix-collect-garbage; \
	else \
		echo "No Home Manager profile found. Skipping."; \
	fi

# Clean everything in one go
clean-all: clean-system clean-user clean-home-manager
	@echo "All cleanups successfully completed!"

# Rebuild
rebuild:
	@echo "--- Rebuilding System ---"
	sudo nixos-rebuild switch --flake

# Update flake
update:
	@echo "--- Updating Flake ---"
	sudo nix flake update
