summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--nixos/modules/module-list.nix7
-rw-r--r--nixos/modules/services/dispatch.nix108
-rw-r--r--pkgs/default.nix5
3 files changed, 117 insertions, 3 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 0a778ee..43de9f8 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -10,12 +10,10 @@
./services/ambience.nix
./services/catbus-lgtv.nix
./services/catbus-lifx.nix
- ./sites/cgit.nix
- ./sites/go.nix
- ./sites/recipes.nix
./services/catbus-networkpresence.nix
./services/catbus-snapcast.nix
./services/catbus-wakeonlan.nix
+ ./services/dispatch.nix
./services/dlnatoad.nix
./services/helix-directory-jackalope.nix
./services/helix-directory.nix
@@ -24,5 +22,8 @@
./services/snapclient.nix
./services/ssh.nix
./services/upmpdcli.nix
+ ./sites/cgit.nix
+ ./sites/go.nix
+ ./sites/recipes.nix
./users/eth.nix
]
diff --git a/nixos/modules/services/dispatch.nix b/nixos/modules/services/dispatch.nix
new file mode 100644
index 0000000..c5f8005
--- /dev/null
+++ b/nixos/modules/services/dispatch.nix
@@ -0,0 +1,108 @@
+{ config, lib, pkgs, ... }:
+with lib;
+
+let
+
+ cfg = config.eth.services.dispatch;
+
+ systemdDirectoryName = "dispatch";
+ runtimeDirectory = "/run/${systemdDirectoryName}";
+ socket = "${runtimeDirectory}/listen.sock";
+
+ configJSON = pkgs.writeText "config.json" (builtins.toJSON {
+ rules = cfg.rules;
+ });
+
+in {
+
+ options.eth.services.dispatch = {
+ enable = mkEnableOption "Whether to enable dispatch";
+
+ socket = mkOption {
+ type = types.path;
+ readOnly = true;
+ description = "Path of the UNIX socket to listen on.";
+ default = socket;
+ };
+
+ rules = mkOption {
+ type = types.attrsOf (types.submodule {
+ options = {
+ triggers = mkOption {
+ type = types.listOf (types.submodule {
+ options = {
+ url = mkOption {
+ type = types.str;
+ example = "/gitolite-repo-updated";
+ };
+ formValues = mkOption {
+ type = types.attrsOf types.str;
+ example = {
+ repo = "catbus-web-ui";
+ };
+ default = {};
+ };
+ };
+ });
+ default = [];
+ };
+ actions = mkOption {
+ type = types.listOf (types.submodule {
+ options = {
+ url = mkOption {
+ type = types.str;
+ example = "https://build.eth.moe/deploy";
+ };
+ formValues = mkOption {
+ type = types.attrsOf types.str;
+ example = {
+ project = "catbus-web-ui";
+ };
+ default = {};
+ };
+ };
+ });
+ default = [];
+ };
+ };
+ });
+ example = {
+ "update Catbus UI" = {
+ triggers = [
+ { url = "/gitolite-repo-updated"; formValues = { repo = "catbus-web-ui"; }; }
+ ];
+ output = [
+ { url = "https://build.eth.moe/deploy"; formValues = { project = "catbus-web-ui"; }; }
+ ];
+ };
+ };
+ default = {};
+ };
+ };
+
+
+ config = mkIf cfg.enable {
+ systemd.services.dispatch = {
+ enable = true;
+ description = "Webhook & MQTT dispatch server";
+ wants = [ "network.target" ];
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ DynamicUser = true;
+ Group = config.services.nginx.group;
+
+ RuntimeDirectory = systemdDirectoryName;
+
+ ExecStart = "${pkgs.eth.dispatch}/bin/dispatch -config-path ${configJSON} -listen ${socket}";
+
+ NoNewPrivileges = true;
+ ProtectHome = true;
+ ProtectKernelTunables = true;
+ ProtectControlGroups = true;
+ ProtectKernelModules = true;
+ };
+ };
+ };
+
+}
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 573fd7b..e75bedd 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -23,6 +23,10 @@ let
url = "https://github.com/ethulhu/catbus-web-ui";
# TODO: rev = "...";
};
+ dispatch = builtins.fetchGit {
+ url = "https://git.eth.moe/dispatch";
+ rev = "530fc42f37eb17e3638f6aef055da77847e20dfa";
+ };
helix = builtins.fetchGit {
url = "https://github.com/ethulhu/helix";
rev = "b64bdc80c3c994f22a28599747897aa5de3ada93";
@@ -42,6 +46,7 @@ let
in
pkgs: super: {
eth = {
+ dispatch = pkgs.callPackage dispatch {};
helix = pkgs.callPackage helix {};
jackalope = pkgs.callPackage jackalope {};
recipes = pkgs.callPackage recipes {};