blob: b46ecedf2f6bd0819cf7d6ad44ead6841bd22df9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
{ config, lib, pkgs, ... }:
with lib;
let
portSpec = name: ''
port ${name}
type pipe
protocol e
reliable true
command ${pkgs.openssh}/bin/ssh -x -o batchmode=yes ${name}
'';
in {
options = {
services.uucp = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
If enabled we set up an account accesible via uucp over ssh
'';
};
sshUser = mkOption {
type = types.unspecified;
default = {
name = "uucp";
isSystemUser = true;
isNormalUser = false;
createHome = true;
home = "/var/spool/uucp";
description = "User for uucp over ssh";
};
description = "The local uucp linux-user";
};
sshConfig = mkOption {
type = types.str;
default = "";
description = "~uucp/.ssh/config";
};
remoteNodes = mkOption {
type = types.listOf types.str;
default = [];
description = "List of ports to set up. You will probably need to configure these in sshConfig";
};
spoolDir = mkOption {
type = types.path;
default = "/var/spool/uucp";
description = "Spool directory";
};
lockDir = mkOption {
type = types.path;
default = "/var/spool/uucp";
description = "Lock directory";
};
pubDir = mkOption {
type = types.path;
default = "/var/spool/uucppublic";
description = "Public directory";
};
logFile = mkOption {
type = types.path;
default = "/var/log/uucp";
description = "Log file";
};
statFile = mkOption {
type = types.path;
default = "/var/log/uucp.stat";
description = "Statistics file";
};
debugFile = mkOption {
type = types.path;
default = "/var/log/uucp.debug";
description = "Debug file";
};
extraConfig = mkOption {
type = types.string;
default = "";
description = "Extra configuration to append verbatim to `/etc/uucp/config'";
};
};
};
config = mkIf config.services.uucp.enable {
environment.etc."uucp/config" = {
text = ''
spool ${config.services.uucp.spoolDir}
lockdir ${config.services.uucp.lockDir}
pubdir ${config.services.uucp.pubDir}
logfile ${config.services.uucp.logFile}
statfile ${config.services.uucp.statFile}
debugfile ${config.services.uucp.debugFile}
${config.services.uucp.extraConfig}
'';
};
users.users."uucp" = config.services.uucp.sshUser;
system.activationScripts."uucp-sshconfig" = ''
mkdir -p ${config.users.users."uucp".home}/.ssh
cp ${builtins.toFile "ssh-config" config.services.uucp.sshConfig} ${config.users.users."uucp".home}/.ssh/config
'';
environment.etc."uucp/port" = {
text = concatStringsSep "\n" (map portSpec config.services.uucp.remoteNodes);
};
};
}
|