Add websockify service
This commit is contained in:
parent
3ad424632b
commit
59a4df3159
|
@ -153,6 +153,7 @@
|
|||
./services/networking/unbound.nix
|
||||
./services/networking/vsftpd.nix
|
||||
./services/networking/wakeonlan.nix
|
||||
./services/networking/websockify.nix
|
||||
./services/networking/wicd.nix
|
||||
./services/networking/wpa_supplicant.nix
|
||||
./services/networking/xinetd.nix
|
||||
|
|
50
modules/services/networking/websockify.nix
Normal file
50
modules/services/networking/websockify.nix
Normal file
|
@ -0,0 +1,50 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
let cfg = config.services.networking.websockify; in {
|
||||
options = {
|
||||
services.networking.websockify = {
|
||||
enable = mkOption {
|
||||
description = "Whether to enable websockify to forward websocket connections to TCP connections";
|
||||
|
||||
default = false;
|
||||
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
sslCert = mkOption {
|
||||
description = "Path to the SSL certificate";
|
||||
type = types.path;
|
||||
};
|
||||
|
||||
sslKey = mkOption {
|
||||
description = "Path to the SSL key";
|
||||
default = cfg.sslCert;
|
||||
type = types.path;
|
||||
};
|
||||
|
||||
portMap = mkOption {
|
||||
description = "Ports to map by default";
|
||||
default = {};
|
||||
type = types.attrsOf types.int;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services."websockify@" = {
|
||||
script = ''
|
||||
IFS=':' read -a array <<< "$1"
|
||||
${pkgs.pythonPackages.websockify}/bin/websockify --ssl-only \
|
||||
--cert=${cfg.sslCert} --key=${cfg.sslKey} 0.0.0.0:''${array[0]} 0.0.0.0:''${array[1]}
|
||||
'';
|
||||
scriptArgs = "%i";
|
||||
};
|
||||
|
||||
systemd.targets."default-websockify" = {
|
||||
wants = mapAttrsToList (name: value: "websockify@${name}:${toString value}.service") cfg.portMap;
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
};
|
||||
}
|
|
@ -147,6 +147,12 @@ rec {
|
|||
description = "Shell commands executed as the service's main process.";
|
||||
};
|
||||
|
||||
scriptArgs = mkOption {
|
||||
type = types.uniq types.string;
|
||||
default = "";
|
||||
description = "Arguments passed to the main process script.";
|
||||
};
|
||||
|
||||
preStart = mkOption {
|
||||
type = types.string;
|
||||
default = "";
|
||||
|
@ -262,4 +268,4 @@ rec {
|
|||
};
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -241,7 +241,7 @@ let
|
|||
ExecStart=${makeJobScript "${name}-start" ''
|
||||
#! ${pkgs.stdenv.shell} -e
|
||||
${def.script}
|
||||
''}
|
||||
''} ${def.scriptArgs}
|
||||
''}
|
||||
|
||||
${optionalString (def.postStart != "") ''
|
||||
|
|
Loading…
Reference in a new issue