summary refs log tree commit diff
path: root/nixos/modules/services
diff options
context:
space:
mode:
authorKranium Gikos Mendoza <kranium@gikos.net>2016-05-11 12:18:38 +0800
committerKranium Gikos Mendoza <kranium@gikos.net>2016-05-11 13:27:28 +0800
commit356f1bdac85f4cc018b320141d3227a4c1f6dccf (patch)
tree6cf20f2e693dfe30ae88ea156ba22b66bb50b5ae /nixos/modules/services
parent59f71829a33150f34e7fbdcc4812203bcbe903ae (diff)
downloadnixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.tar
nixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.tar.gz
nixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.tar.bz2
nixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.tar.lz
nixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.tar.xz
nixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.tar.zst
nixlib-356f1bdac85f4cc018b320141d3227a4c1f6dccf.zip
sniproxy service: init
Diffstat (limited to 'nixos/modules/services')
-rw-r--r--nixos/modules/services/networking/sniproxy.nix99
1 files changed, 99 insertions, 0 deletions
diff --git a/nixos/modules/services/networking/sniproxy.nix b/nixos/modules/services/networking/sniproxy.nix
new file mode 100644
index 000000000000..4d0f36923293
--- /dev/null
+++ b/nixos/modules/services/networking/sniproxy.nix
@@ -0,0 +1,99 @@
+{ config, pkgs, lib, ... }:
+
+with lib;
+
+let
+
+  cfg = config.services.sniproxy;
+
+  configFile = pkgs.writeText "sniproxy.conf" ''
+    user ${cfg.user}
+    pidfile /run/sniproxy.pid
+    ${cfg.config}
+  '';
+
+in
+{
+  options = {
+    services.sniproxy = {
+      enable = mkEnableOption "sniproxy server";
+
+      user = mkOption {
+        type = types.str;
+        default = "sniproxy";
+        description = "User account under which sniproxy runs.";
+      };
+
+      group = mkOption {
+        type = types.str;
+        default = "sniproxy";
+        description = "Group under which sniproxy runs.";
+      };
+
+      config = mkOption {
+        type = types.lines;
+        default = "";
+        description = "sniproxy.conf configuration excluding the daemon username and pid file.";
+        example = literalExample ''
+          error_log {
+            filename /var/log/sniproxy/error.log
+          }
+          access_log {
+            filename /var/log/sniproxy/access.log
+          }
+          listen 443 {
+            proto tls
+          }
+          table {
+            example.com 192.0.2.10
+            example.net 192.0.2.20
+        }
+        '';
+      };
+
+      logDir = mkOption {
+        type = types.str;
+        default = "/var/log/sniproxy/";
+        description = "Location of the log directory for sniproxy.";
+      };
+
+    };
+
+  };
+
+  config = mkIf cfg.enable {
+    systemd.services.sniproxy = {
+      description = "sniproxy server";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      preStart = ''
+        test -d ${cfg.logDir} || {
+          echo "Creating initial log directory for sniproxy in ${cfg.logDir}"
+          mkdir -p ${cfg.logDir}
+          chmod 640 ${cfg.logDir}
+          }
+        chown -R ${cfg.user}:${cfg.group} ${cfg.logDir}
+      '';
+
+      serviceConfig = {
+        Type = "forking";
+        ExecStart = "${pkgs.sniproxy}/bin/sniproxy -c ${configFile}";
+        Restart = "always";
+      };
+    };
+
+    users.extraUsers = mkIf (cfg.user == "sniproxy") {
+      sniproxy = {
+        group = cfg.group;
+        uid = config.ids.uids.sniproxy;
+      };
+    };
+
+    users.extraGroups = mkIf (cfg.group == "sniproxy") {
+      sniproxy = {
+        gid = config.ids.gids.sniproxy;
+      };
+    };
+
+  };
+}