diff --git a/modules/services/lorri.nix b/modules/services/lorri.nix index 0a49cb545..85b75682f 100644 --- a/modules/services/lorri.nix +++ b/modules/services/lorri.nix @@ -12,12 +12,22 @@ in { options.services.lorri = { enable = mkEnableOption "lorri build daemon"; + enableNotifications = mkEnableOption "lorri build notifications"; + package = mkOption { type = types.package; default = pkgs.lorri; defaultText = literalExpression "pkgs.lorri"; description = "Which lorri package to install."; }; + + nixPackage = mkOption { + type = types.package; + default = pkgs.nix; + defaultText = literalExpression "pkgs.nix"; + example = literalExpression "pkgs.nixVersions.unstable"; + description = "Which nix package to use."; + }; }; config = mkIf cfg.enable { @@ -45,7 +55,7 @@ in { Restart = "on-failure"; Environment = let path = with pkgs; - makeSearchPath "bin" [ nix gitMinimal gnutar gzip ]; + makeSearchPath "bin" [ cfg.nixPackage gitMinimal gnutar gzip ]; in [ "PATH=${path}" ]; }; }; @@ -60,6 +70,37 @@ in { Install = { WantedBy = [ "sockets.target" ]; }; }; + + services.lorri-notify = mkIf cfg.enableNotifications { + Unit = { + Description = "lorri build notifications"; + After = "lorri.service"; + Requires = "lorri.service"; + }; + + Service = { + ExecStart = let + jqFile = '' + ( + (.Started? | values | "Build starting in \(.nix_file)"), + (.Completed? | values | "Build complete in \(.nix_file)"), + (.Failure? | values | "Build failed in \(.nix_file)") + ) + ''; + + notifyScript = pkgs.writeShellScript "lorri-notify" '' + lorri internal stream-events --kind live \ + | jq --unbuffered '${jqFile}' \ + | xargs -n 1 notify-send "Lorri Build" + ''; + in toString notifyScript; + Restart = "on-failure"; + Environment = let + path = makeSearchPath "bin" + (with pkgs; [ bash jq findutils libnotify cfg.package ]); + in "PATH=${path}"; + }; + }; }; }; }