aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2022-08-23 14:16:39 +0200
committertv <tv@krebsco.de>2022-08-23 14:16:39 +0200
commit625bd446dd7238c5226dc90c89bdfa4ee5c13688 (patch)
tree3bb8a88a8793652a07576266be3685f4dc736eed
parent3aa04be96f19cc5f4866b2b36a351f88f6667bd2 (diff)
krops writeDeploy: add useNixOutputMonitor parameter1.28.0
-rw-r--r--README.md23
-rw-r--r--pkgs/krops/default.nix55
2 files changed, 71 insertions, 7 deletions
diff --git a/README.md b/README.md
index 6e50633..6d574fe 100644
--- a/README.md
+++ b/README.md
@@ -136,6 +136,29 @@ Create the sentinel file (`/var/src/.populate`) before syncing the new source.
Specifies which `nixos-rebuild` operation to perform.
+### `useNixOutputMonitor` (optional, defaults to `"opportunistic"`)
+
+Specifies when to pipe `nixos-rebuild`'s output to
+[nom](https://github.com/maralorn/nix-output-monitor).
+
+Supported values:
+
+* `"opportunistic"` (default) -
+ Use `nom` only if it is present on the target machine.
+
+* `"optimistic"` -
+ Use `nom`, assuming it is present on the target machine.
+
+* `"pessimistic"` -
+ Use `nom` via `nix-shell` on the target machine.
+
+* `true` -
+ Use `nom`.
+ If it is not present on the target machine, then use it via `nix-shell`.
+
+* `false` -
+ Don't use `nom`
+
## writeTest
Very similiar to writeDeploy, but just builds the system on the target without
diff --git a/pkgs/krops/default.nix b/pkgs/krops/default.nix
index b4f89b6..429e648 100644
--- a/pkgs/krops/default.nix
+++ b/pkgs/krops/default.nix
@@ -4,10 +4,16 @@ in
{ nix, openssh, populate, writers }: rec {
- rebuild = args: target:
- runShell target {} "nixos-rebuild -I ${lib.escapeShellArg target.path} ${
- lib.concatMapStringsSep " " lib.escapeShellArg args
- }";
+ rebuild = {
+ useNixOutputMonitor
+ }:
+ args: target:
+ runShell target {}
+ (withNixOutputMonitor useNixOutputMonitor /* sh */ ''
+ nixos-rebuild -I ${
+ lib.concatMapStringsSep " " lib.escapeShellArg ([target.path] ++ args)
+ }
+ '');
runShell = target: {
allocateTTY ? false
@@ -24,9 +30,43 @@ in
(if allocateTTY then "-t" else "-T")
target.extraOptions
target.host
- command'])}
+ command'
+ ])}
'';
+ withNixOutputMonitor = mode_: command: let
+ mode =
+ lib.getAttr (lib.typeOf mode_) {
+ bool = lib.toJSON mode_;
+ string = mode_;
+ };
+ in /* sh */ ''
+ printf '# use nix-output-monitor: %s\n' ${lib.escapeShellArg mode} >&2
+ ${lib.getAttr mode rec {
+ opportunistic = /* sh */ ''
+ if command -v nom >/dev/null; then
+ ${optimistic}
+ else
+ ${false}
+ fi
+ '';
+ optimistic = /* sh */ ''
+ (${command}) 2>&1 | nom
+ '';
+ pessimistic = /* sh */ ''
+ nix-shell -p nix-output-monitor --run ${lib.escapeShellArg optimistic}
+ '';
+ true = /* sh */ ''
+ if command -v nom >/dev/null; then
+ ${optimistic}
+ else
+ ${pessimistic}
+ fi
+ '';
+ false = command;
+ }}
+ '';
+
writeCommand = name: {
command ? (targetPath: "echo ${targetPath}"),
backup ? false,
@@ -51,7 +91,8 @@ in
force ? false,
operation ? "switch",
source,
- target
+ target,
+ useNixOutputMonitor ? "opportunistic"
}: let
buildTarget' =
if buildTarget == null
@@ -65,7 +106,7 @@ in
${lib.optionalString (buildTarget' != target')
(populate { inherit backup force source; target = buildTarget'; })}
${populate { inherit backup force source; target = target'; }}
- ${rebuild ([
+ ${rebuild { inherit useNixOutputMonitor; } ([
operation
] ++ lib.optionals crossDeploy [
"--no-build-nix"