function nyx-cleanup() { ##### ๐Ÿ› ๏ธ CONFIGURATION ##### local version="1.3.1" local keep_generations="${keep_generations:-5}" local start_human=$(date '+%Y-%m-%d %H:%M:%S') local nix_cleanup_log="nixos-cleanup.log" local optimize_store="${optimize_store:-false}" local auto_push="${auto_push:-false}" local RED=$'\e[31m'; local GREEN=$'\e[32m'; local YELLOW=$'\e[33m' local BLUE=$'\e[34m'; local MAGENTA=$'\e[35m'; local CYAN=$'\e[36m' local BOLD=$'\e[1m'; local RESET=$'\e[0m' ##### ๐Ÿ“ PATH SETUP ##### local timestamp=$(date '+%Y-%m-%d_%H-%M-%S') local hostname_id=$(hostname) local log_dir="$nix_dir/Misc/nyx/logs/$hostname_id" mkdir -p "$log_dir" local cleanup_log="$log_dir/cleanup-$timestamp.log" local log_file="$log_dir/nixos-gen-cleanup-$timestamp.log" ##### ๐Ÿงฐ HELPERS ##### console-log() { echo -e "$@" | tee -a "$cleanup_log" } print_line() { console-log "${BOLD}$(printf '%*s\n' "${COLUMNS:-40}" '' | tr ' ' '=')${RESET}" } format_bytes() { num=$1 echo $(numfmt --to=iec-i --suffix=B "$num") } disk_usage() { df --output=used /nix/store | tail -1 } ##### ๐Ÿ“˜ TOOL INFO ##### print_line nix-tool "Nyx" "nyx-cleanup" "$version" \ "Smart NixOS configuration cleanup" \ "by Peritia-System" \ "https://github.com/Peritia-System/Nyx-Tools" \ "https://github.com/Peritia-System/Nyx-Tools/issues" \ "Always up to date for you!" echo echo -e "${BOLD}${CYAN}๐Ÿงผ Nyx Cleanup v$version โ€” Starting...${RESET}" print_line ##### ๐Ÿ“Š STATS: BEFORE ##### local disk_before=$(disk_usage) console-log "${CYAN}๐Ÿ“Š Disk used before cleanup: $(format_bytes $disk_before)${RESET}" ##### ๐Ÿงน EXECUTION ##### console-log "\n${BLUE}๐Ÿ—‘๏ธ Collecting Nix garbage...${RESET}" sudo nix-collect-garbage -d >> "$cleanup_log" 2>&1 console-log "\n${BLUE}๐Ÿงน Deleting old generations (keep $keep_generations)...${RESET}" sudo nix-collect-garbage --delete-older-than "${keep_generations}d" >> "$cleanup_log" 2>&1 if [[ "$optimize_store" == "true" ]]; then console-log "\n${MAGENTA}๐Ÿ”ง Optimizing the Nix store...${RESET}" sudo nix-store --optimize >> "$cleanup_log" 2>&1 fi ##### ๐Ÿ“Š STATS: AFTER ##### local disk_after=$(disk_usage) local space_freed=$((disk_before - disk_after)) print_line console-log "${GREEN}${BOLD}โœ… Cleanup Completed Successfully!${RESET}" console-log "${CYAN}๐Ÿ•’ Finished at: $(date)${RESET}" console-log "${CYAN}๐Ÿ“Š Disk used after cleanup: $(format_bytes $disk_after)${RESET}" console-log "${CYAN}๐Ÿ’พ Space freed: $(format_bytes $space_freed)${RESET}" print_line ##### ๐Ÿ“ GIT LOGGING ##### local gen_nmbr=$(nixos-rebuild list-generations | grep True | awk '{print $1}' | tail -1 | xargs printf "%04d\n") cd "$nix_dir" || return 1 mv "$nix_cleanup_log" "$log_file" git add "$log_file" if ! git diff --cached --quiet; then git commit -m "Cleanup log on $timestamp" console-log "${GREEN}โœ… Cleanup log committed.${RESET}" else console-log "${YELLOW}โ„น๏ธ No new changes in logs to commit.${RESET}" fi if [[ "$auto_push" == "true" ]]; then console-log "${BLUE}๐Ÿš€ Auto-push enabled. Pushing to remote...${RESET}" git push && console-log "${GREEN}โœ… Changes pushed to remote.${RESET}" fi console-log "\n${GREEN}๐ŸŽ‰ Nyx cleanup finished!${RESET}" print_line }