# Justfile to safely clean up NixOS profiles, keeping only the last 3 generations.
# Uses nh (https://github.com/nix-community/nh) when available, falling back to plain nix commands.

host := "prouk"
keep := "3"
nh := `command -v nh || true`
hm_profile := env("HOME") / ".local/state/nix/profiles/home-manager"

# Default recipe displays the help menu.
help:
    @echo "NixOS Profile Cleanup Utility"
    @echo "============================="
    @echo "nh: {{ if nh != "" { "found (" + nh + ")" } else { "not found, using plain nix commands" } }}"
    @echo "Available recipes:"
    @echo "  just dry-run             - Safe preview of what will be deleted"
    @echo "  just clean-all           - Clean System, User and Home Manager generations (requires sudo)"
    @echo "  just build               - Rebuild and switch the system"
    @echo "  just update              - Update flake inputs"

# Dry run to preview changes without deleting anything.
dry-run:
    #!/usr/bin/env bash
    set -euo pipefail
    if [ -n "{{ nh }}" ]; then
        echo "=== [DRY RUN] All profiles (nh) ==="
        nh clean all --keep {{ keep }} --dry
        exit 0
    fi
    echo "=== [DRY RUN] System Profile ==="
    sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations +{{ keep }} --dry-run
    echo -e "\n=== [DRY RUN] User Profile ==="
    nix-env --delete-generations +{{ keep }} --dry-run
    echo -e "\n=== [DRY RUN] Home Manager Profile ==="
    if [ -e "{{ hm_profile }}" ]; then
        nix-env --profile "{{ hm_profile }}" --delete-generations +{{ keep }} --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, user and Home Manager generations, then update the bootloader (requires sudo).
clean-all:
    #!/usr/bin/env bash
    set -euo pipefail
    if [ -n "{{ nh }}" ]; then
        echo "--- Cleaning All Profiles (nh) ---"
        nh clean all --keep {{ keep }}
        echo "--- Updating Bootloader Menu ---"
        nh os boot . --hostname {{ host }}
    else
        echo "--- Cleaning System Profile (SUDO) ---"
        sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations +{{ keep }}
        echo "--- Cleaning User Profile ---"
        nix-env --delete-generations +{{ keep }}
        echo "--- Cleaning Home Manager Profile ---"
        if [ -e "{{ hm_profile }}" ]; then
            nix-env --profile "{{ hm_profile }}" --delete-generations +{{ keep }}
        else
            echo "No Home Manager profile found. Skipping."
        fi
        sudo nix-collect-garbage
        nix-collect-garbage
        echo "--- Updating Bootloader Menu ---"
        sudo nixos-rebuild boot --flake .#{{ host }}
    fi
    echo "All cleanups successfully completed!"

# Build.
build:
    @echo "--- Rebuilding System ---"
    {{ if nh != "" { "nh os switch . --hostname " + host } else { "sudo nixos-rebuild switch --flake .#" + host } }}

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