137 lines
3.5 KiB
Nix
137 lines
3.5 KiB
Nix
# ncli/builder.nix — Assembles all modules into the final script
|
|
{
|
|
pkgs,
|
|
host,
|
|
backupFiles ? [".config/mimeapps.list.backup"],
|
|
project,
|
|
...
|
|
}: let
|
|
# --- Shared library ---
|
|
lib = import ./lib.nix {inherit pkgs host project backupFiles;};
|
|
|
|
# --- Command modules ---
|
|
rebuild = import ./commands/rebuild.nix lib;
|
|
maintenance = import ./commands/maintenance.nix lib;
|
|
git = import ./commands/git.nix lib;
|
|
switch = import ./commands/switch.nix lib;
|
|
dev = import ./commands/dev.nix lib;
|
|
|
|
# --- Help text ---
|
|
print_help = ''
|
|
print_help() {
|
|
echo "NixOS CLI Utility -- version 2.1.3"
|
|
echo ""
|
|
echo "Usage: ncli [command]"
|
|
echo ""
|
|
echo "System Commands:"
|
|
echo " rebuild - Rebuild the NixOS system configuration."
|
|
echo " update - Update the flake and rebuild the system."
|
|
echo ""
|
|
echo "Maintenance Commands:"
|
|
echo " cleanup - Clean up old system generations. Can specify a number to keep."
|
|
echo " diag - Create a system diagnostic report (saves to ~/diag.txt)."
|
|
echo " list-gens - List user and system generations."
|
|
echo " trim - Trim filesystems to improve SSD performance."
|
|
echo ""
|
|
echo "Git Commands:"
|
|
echo " commit [msg] - Add all changes and commit with message."
|
|
echo " push - Push changes to origin."
|
|
echo " pull - Pull latest changes from origin."
|
|
echo " status - Show git status."
|
|
echo ""
|
|
echo "Development Commands:"
|
|
echo " dev - Initialize a Nix development environment (flake.nix + direnv)."
|
|
echo " dev track - Remove assume-unchanged flag from flake files."
|
|
echo " dev untrack - Mark flake files as assume-unchanged in a directory."
|
|
echo ""
|
|
echo " help - Show this help message."
|
|
echo ""
|
|
}
|
|
'';
|
|
in
|
|
pkgs.writeShellScriptBin "ncli" ''
|
|
#!${pkgs.bash}/bin/bash
|
|
set -euo pipefail
|
|
|
|
# --- Configuration ---
|
|
PROJECT="${project}"
|
|
HOST="${host}"
|
|
BACKUP_FILES_STR="${lib.backupFilesString}"
|
|
VERSION="2.2.0"
|
|
FLAKE_NIX_PATH="$HOME/$PROJECT/flake.nix"
|
|
|
|
read -r -a BACKUP_FILES <<< "$BACKUP_FILES_STR"
|
|
|
|
# --- Read Colors file ---
|
|
source ${lib.colorsSource}
|
|
|
|
# --- Helper Functions ---
|
|
${lib.handle_backups}
|
|
${lib.handle_build_error}
|
|
${lib.print_header}
|
|
${lib.print_success}
|
|
${lib.print_error}
|
|
${lib.print_info}
|
|
${print_help}
|
|
|
|
# --- Main Logic ---
|
|
if [ "$#" -eq 0 ]; then
|
|
echo "Error: No command provided." >&2
|
|
print_help
|
|
exit 1
|
|
fi
|
|
|
|
case "$1" in
|
|
rebuild)
|
|
${rebuild.rebuild_case}
|
|
;;
|
|
update)
|
|
${rebuild.update_case}
|
|
;;
|
|
cleanup)
|
|
${maintenance.cleanup_case}
|
|
;;
|
|
diag)
|
|
${maintenance.diag_case}
|
|
;;
|
|
list-gens)
|
|
${maintenance.list_gens_case}
|
|
;;
|
|
trim)
|
|
${maintenance.trim_case}
|
|
;;
|
|
home-backups)
|
|
${maintenance.home_backups_case}
|
|
;;
|
|
commit)
|
|
${git.commit_case}
|
|
;;
|
|
push)
|
|
${git.push_case}
|
|
;;
|
|
pull)
|
|
${git.pull_case}
|
|
;;
|
|
status)
|
|
${git.status_case}
|
|
;;
|
|
format)
|
|
${git.format_case}
|
|
;;
|
|
switch)
|
|
${switch.switch_case}
|
|
;;
|
|
dev)
|
|
${dev.dev_case}
|
|
;;
|
|
help)
|
|
print_help
|
|
;;
|
|
*)
|
|
echo "Error: Invalid command '$1'" >&2
|
|
print_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
''
|