summaryrefslogtreecommitdiffstats
path: root/krops.nix
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-09 17:54:01 +0000
committertv <tv@krebsco.de>2026-11-09 17:54:01 +0000
commit495220b6a04d1362a8ae7cf22b6d1c85fddf4a04 (patch)
tree701b699550d4caea883c2b2d74280b91476c7f54 /krops.nix
parentfd1be17d7ea9db0c9ceedee71d7fcfce69e9bae3 (diff)
krops.nix: init
Diffstat (limited to 'krops.nix')
-rw-r--r--krops.nix85
1 files changed, 85 insertions, 0 deletions
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 \
+ '<hrm/legacy.nix>'
+ '';
+ 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
+ '';
+ }}
+ ''}
+ '';
+}