{ config, lib, pkgs, isHM, ... }: let cfg = config.hive.nix-scripts; home-rebuild = pkgs.writeShellScriptBin ".home-rebuild" '' set -e pushd ~/.hive/ ${pkgs.alejandra}/bin/alejandra . &>/dev/null ${pkgs.git}/bin/git diff -U0 echo "NixOS Rebuilding..." ${pkgs.nh}/bin/nh home switch ~/.hive gen=$(home-manager generations | head -n1 | ${pkgs.gawk}/bin/awk '{print "Gen" $5 " @ " $1 "-" $2}') by="$(${pkgs.coreutils-full}/bin/whoami)@$(${pkgs.nettools}/bin/hostname)" ${pkgs.git}/bin/git commit --no-gpg-sign -am "Home $gen by $by" popd ''; rebuild = pkgs.writeShellScriptBin ".nixos-rebuild" '' set -e pushd ~/.hive/ ${pkgs.alejandra}/bin/alejandra . &>/dev/null ${pkgs.git}/bin/git diff -U0 echo "NixOS Rebuilding..." ${pkgs.nh}/bin/nh os switch ~/.hive gen=$(sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | ${pkgs.gnugrep}/bin/grep current | ${pkgs.gawk}/bin/awk '{print "Gen" $1 " @ " $2 "-" $3}') by="$(${pkgs.coreutils-full}/bin/whoami)@$(${pkgs.nettools}/bin/hostname)" ${pkgs.git}/bin/git commit --no-gpg-sign -am "System $gen by $by" popd ''; upgrade = pkgs.writeShellScriptBin ".nixos-upgrade" '' set -e pushd ~/.hive/ if [ -n "$(${pkgs.git}/bin/git status --porcelain)" ]; then echo ".hive is unclean!" exit 1 fi branch_staging="staging-update" if ${pkgs.git}/bin/git rev-parse --verify "$branch_staging" >/dev/null 2>&1; then echo "Using staging update branch." else echo "No staging update branch found." exit 1 fi ${pkgs.git}/bin/git checkout "$branch_staging" flake.lock echo "Updating nix-flake..." nix flake update --flake . echo "NixOS Rebuilding..." ${pkgs.nh}/bin/nh os switch ~/.hive gen=$(sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | ${pkgs.gnugrep}/bin/grep current | ${pkgs.gawk}/bin/awk '{print "Gen" $1 " @ " $2 "-" $3}') by="$(${pkgs.coreutils-full}/bin/whoami)@$(${pkgs.nettools}/bin/hostname)" ${pkgs.git}/bin/git commit --no-gpg-sign -am "Upgrade $gen by $by" ${pkgs.git}/bin/git branch -D "$branch_staging" popd ''; update = pkgs.writeShellScriptBin ".nixos-update" '' set -e pushd ~/.hive/ if [ -n "$(${pkgs.git}/bin/git status --porcelain)" ]; then echo ".hive is unclean!" exit 1 fi branch_staging="staging-update" branch_current="$(${pkgs.git}/bin/git branch --show-current)" if ${pkgs.git}/bin/git rev-parse --verify "$branch_staging" >/dev/null 2>&1; then echo "There is already a staging update branch." else echo "Creating a new staging update branch." ${pkgs.git}/bin/git switch -c "$branch_staging" nix flake update --verbose --flake . ${pkgs.git}/bin/git add flake.lock ${pkgs.git}/bin/git commit --no-gpg-sign -m "staging update" ${pkgs.git}/bin/git switch "$branch_current" fi nix store --log-format internal-json -v diff-closures \ '.?ref='"$branch_current"'#nixosConfigurations.'"$(${pkgs.hostname}/bin/hostname)"'.config.system.build.toplevel' \ '.?ref='"$branch_staging"'#nixosConfigurations.'"$(${pkgs.hostname}/bin/hostname)"'.config.system.build.toplevel' \ |& ${pkgs.nix-output-monitor}/bin/nom --json popd ''; in { options = { hive.nix-scripts.enable = lib.mkEnableOption "Enable the nix build/update scripts"; }; config = lib.mkIf cfg.enable ( if isHM then { home.packages = [ home-rebuild ]; } else { environment.systemPackages = [ rebuild upgrade update ]; } ); }