added hm cli utility
This commit is contained in:
parent
46387a4745
commit
f797aedb5b
5 changed files with 118 additions and 2 deletions
|
|
@ -3,8 +3,8 @@
|
||||||
{
|
{
|
||||||
flake.overlays = {
|
flake.overlays = {
|
||||||
default = final: prev: {
|
default = final: prev: {
|
||||||
# plasticity = inputs.self.packages.${final.system}.plasticity;
|
|
||||||
toggleaudiosink = inputs.self.packages.${final.system}.toggleaudiosink;
|
toggleaudiosink = inputs.self.packages.${final.system}.toggleaudiosink;
|
||||||
|
hm-cli = inputs.self.packages.${final.system}.hm-cli;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
{
|
{
|
||||||
packages = {
|
packages = {
|
||||||
toggleaudiosink = pkgs.callPackage ./packages/toggleaudiosink.nix { };
|
toggleaudiosink = pkgs.callPackage ./packages/toggleaudiosink.nix { };
|
||||||
|
hm-cli = pkgs.callPackage ./packages/hm-cli.nix { };
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
101
packages/hm-cli.nix
Normal file
101
packages/hm-cli.nix
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
{
|
||||||
|
pkgs ? import <nixpkgs> { },
|
||||||
|
}:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "hm" ''
|
||||||
|
set -e
|
||||||
|
|
||||||
|
HM="${pkgs.lib.getExe pkgs.home-manager}"
|
||||||
|
FLAKE_PATH="''${HM_PATH:-$HOME/.config/home-manager}"
|
||||||
|
FLAKE_OUTPUT="''${HM_USER:-$(whoami)@$(hostname)}"
|
||||||
|
|
||||||
|
show_usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: hm <command> [args]
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
apply Switch to a new generation
|
||||||
|
generation list List all generations
|
||||||
|
generation delete ID... Delete specified generation(s)
|
||||||
|
generation rollback Rollback to the previous generation
|
||||||
|
generation switch ID Switch to the specified generation
|
||||||
|
generation cleanup Delete all but the current generation
|
||||||
|
|
||||||
|
Environment Variables:
|
||||||
|
HM_PATH Override default flake path (~/.config/home-manager)
|
||||||
|
Currently set to "$(echo $HM_PATH)"
|
||||||
|
HM_USER Override default user output ("$(whoami)@$(hostname)")
|
||||||
|
Currently set to "$(echo $HM_USER)"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
apply)
|
||||||
|
"$HM" switch --flake "$FLAKE_PATH#$FLAKE_OUTPUT"
|
||||||
|
;;
|
||||||
|
generation)
|
||||||
|
if [[ $# -lt 2 ]]; then
|
||||||
|
echo "Error: generation command requires a subcommand"
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$2" in
|
||||||
|
list)
|
||||||
|
"$HM" generations
|
||||||
|
;;
|
||||||
|
delete)
|
||||||
|
if [[ $# -lt 3 ]]; then
|
||||||
|
echo "Error: delete requires at least one generation ID"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift 2
|
||||||
|
"$HM" remove-generations "$@"
|
||||||
|
;;
|
||||||
|
rollback)
|
||||||
|
"$HM" generations | \
|
||||||
|
sed -n 's/^[[:space:]]*id \([0-9]\+\).*/\1/p' | \
|
||||||
|
head -n 2 | tail -n 1 | \
|
||||||
|
xargs -I {} "$HM" switch --flake "$FLAKE_PATH" --switch-generation {}
|
||||||
|
;;
|
||||||
|
switch)
|
||||||
|
if [[ $# -ne 3 ]]; then
|
||||||
|
echo "Error: switch requires exactly one generation ID"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
"$HM" switch --flake "$FLAKE_PATH" --switch-generation "$3"
|
||||||
|
;;
|
||||||
|
cleanup)
|
||||||
|
CURRENT_GEN=$("$HM" generations | sed -n 's/^[[:space:]]*id \([0-9]\+\) (current).*/\1/p')
|
||||||
|
if [[ -z "$CURRENT_GEN" ]]; then
|
||||||
|
echo "Error: could not determine current generation"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
OLD_GENS=$("$HM" generations | sed -n 's/^[[:space:]]*id \([0-9]\+\).*/\1/p' | grep -v "^$CURRENT_GEN$")
|
||||||
|
if [[ -z "$OLD_GENS" ]]; then
|
||||||
|
echo "No old generations to delete"
|
||||||
|
else
|
||||||
|
echo "Deleting generations: $(echo $OLD_GENS | tr '\n' ' ')"
|
||||||
|
echo "$OLD_GENS" | xargs "$HM" remove-generations
|
||||||
|
echo "Cleanup complete. Current generation $CURRENT_GEN preserved."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: unknown generation subcommand '$2'"
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: unknown command '$1'"
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
''
|
||||||
10
users/modules/common/hm-cli.nix
Normal file
10
users/modules/common/hm-cli.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home = {
|
||||||
|
packages = with pkgs; [ hm-cli ];
|
||||||
|
sessionVariables = {
|
||||||
|
HM_PATH = "/etc/nixos";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -166,6 +166,10 @@ in
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
userTags = allTags;
|
userTags = allTags;
|
||||||
};
|
};
|
||||||
modules = allModules;
|
modules = allModules ++ [
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [ self.overlays.default ];
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue