# NAME # krops.nix - deployment entry point # # SYNOPSIS # $(nix-build krops.nix --no-out-link --argstr name HOSTNAME -A deploy) # { lib ? import ~/sync/src/krops/lib , pkgs ? import ~/sync/src/krops/pkgs {} , name , target ? null }: rec { target = "root@${name}.r/var/src"; source = lib.evalSource [ { hrm.file = { path = toString ~/sync/src/hrm; }; nixos-config.symlink = { target = "hrm/systems/${name}/config.nix"; }; nixpkgs.git = { ref = (lib.importJSON ./nixpkgs.json)."nixos-26.05".rev; url = "https://github.com/NixOS/nixpkgs"; }; secrets.passage = { age = "${pkgs.rage}/bin/rage"; dir = toString ~/sync/secrets/${name}; identities_file = toString ~/.passage/identities; }; stockholm.file = { path = toString ~/sync/src/stockholm; }; } ]; deploy = hrm.legacy.deploy; hrm.legacy.deploy = mkAction "legacy" "deploy"; hrm.flake.deploy = mkAction "flake" "deploy"; mkAction = build-method: deploy-action: let target' = lib.mkTarget target; name' = "${name}-deploy-${build-method}-${deploy-action}"; in pkgs.writers.writeDash name' /* sh */ '' set -efu ${pkgs.populate { source = source; target = target'; }} ${pkgs.krops.runShell target' { allocateTTY = true; } /* sh */ '' set -efu system=$( export NIX_PATH=${lib.escapeShellArg target'.path} ${builtins.getAttr build-method { legacy = /* sh */ '' nix-build \ -j 1 \ --show-trace \ --attr nixosConfigurations.${name}.config.system.build.toplevel \ '' ''; flake = /* sh */ '' nix build \ --print-build-logs \ --show-trace \ --print-out-paths \ "$NIX_PATH"/hrm#nixosConfigurations.${name}.config.system.build.toplevel ''; }} ) ${builtins.getAttr deploy-action { deploy = /* sh */ '' old_gen=$(readlink -f /nix/var/nix/profiles/system) new_gen=$(readlink -f "$system") if [ "x$old_gen" != "x$new_gen" ]; then nix-env -p /nix/var/nix/profiles/system --set "$system" "$system"/bin/switch-to-configuration switch else echo 'Configuration is already up to date' >&2 fi ''; }} ''} ''; }