diff options
Diffstat (limited to 'custom/uucp-mediaserver.nix')
-rw-r--r-- | custom/uucp-mediaserver.nix | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/custom/uucp-mediaserver.nix b/custom/uucp-mediaserver.nix new file mode 100644 index 00000000..a8af8bc6 --- /dev/null +++ b/custom/uucp-mediaserver.nix | |||
@@ -0,0 +1,59 @@ | |||
1 | { config, lib, pkgs, ... }: | ||
2 | |||
3 | with lib; | ||
4 | |||
5 | let | ||
6 | cfg = config.uucp.media-server; | ||
7 | |||
8 | touchStateFiles = name: '' | ||
9 | touch ${cfg.queueDir}/${name}.queue | ||
10 | touch ${cfg.queueDir}/${name}.space | ||
11 | touch ${cfg.queueDir}/${name}.queuesize | ||
12 | |||
13 | chown ${cfg.owner}:${cfg.group} ${cfg.queueDir}/${name}.queue ${cfg.queueDir}/${name}.space ${cfg.queueDir}/${name}.queuesize | ||
14 | ''; | ||
15 | in { | ||
16 | options = { | ||
17 | services.uucp.media-server = { | ||
18 | enable = mkEnableOption "UUCP media server"; | ||
19 | |||
20 | remoteNodes = mkOption { | ||
21 | type = types.listOf types.str; | ||
22 | default = []; | ||
23 | description = '' | ||
24 | Clients to track | ||
25 | ''; | ||
26 | }; | ||
27 | |||
28 | queueDir = mkOption { | ||
29 | type = types.path; | ||
30 | default = "/var/spool/media"; | ||
31 | description = "Queue directory"; | ||
32 | }; | ||
33 | |||
34 | owner = mkOption { | ||
35 | type = types.str; | ||
36 | default = "root"; | ||
37 | description = "Owner of the various queue files"; | ||
38 | }; | ||
39 | |||
40 | group = mkOption { | ||
41 | type = types.str; | ||
42 | default = "media"; | ||
43 | description = "Group of the various queue files"; | ||
44 | }; | ||
45 | }; | ||
46 | }; | ||
47 | |||
48 | config = mkIf cfg.enable { | ||
49 | system.activationScripts."uucp-media-server" = '' | ||
50 | mkdir -p ${cfg.queueDir} | ||
51 | chmod 750 ${cfg.queueDir} | ||
52 | chown ${cfg.owner}:${cfg.group} ${cfg.queueDir} | ||
53 | |||
54 | ${concatStringsSep "\n" (map touchStateFiles cfg.remoteNodes)} | ||
55 | ''; | ||
56 | |||
57 | environment.systemPackages = [ (pkgs.callPackage ./uucp-mediaserver/scripts.nix { config = cfg; }) ]; | ||
58 | }; | ||
59 | } | ||