diff options
| -rw-r--r-- | README.md | 23 | ||||
| -rw-r--r-- | pkgs/krops/default.nix | 55 | 
2 files changed, 71 insertions, 7 deletions
| @@ -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" | 
