From 495220b6a04d1362a8ae7cf22b6d1c85fddf4a04 Mon Sep 17 00:00:00 2001 From: tv Date: Mon, 9 Nov 2026 17:54:01 +0000 Subject: krops.nix: init --- krops.nix | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 krops.nix diff --git a/krops.nix b/krops.nix new file mode 100644 index 0000000..81445ad --- /dev/null +++ b/krops.nix @@ -0,0 +1,85 @@ +# 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 + ''; + }} + ''} + ''; +} -- cgit v1.3.1