diff options
Diffstat (limited to 'custom')
| -rw-r--r-- | custom/uucp.nix | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/custom/uucp.nix b/custom/uucp.nix index 0b4b1306..822aa92f 100644 --- a/custom/uucp.nix +++ b/custom/uucp.nix | |||
| @@ -6,7 +6,7 @@ let | |||
| 6 | portSpec = name: '' | 6 | portSpec = name: '' |
| 7 | port ${name} | 7 | port ${name} |
| 8 | type pipe | 8 | type pipe |
| 9 | protocol ${if builtins.hasAttr name config.services.uucp.protocols then config.services.uucp.protocols."${name}" else config.services.uucp.defaultProtocol} | 9 | protocol ${if builtins.hasAttr name cfg.protocols then cfg.protocols."${name}" else cfg.defaultProtocol} |
| 10 | reliable true | 10 | reliable true |
| 11 | command ${pkgs.openssh}/bin/ssh -x -o batchmode=yes ${name} | 11 | command ${pkgs.openssh}/bin/ssh -x -o batchmode=yes ${name} |
| 12 | ''; | 12 | ''; |
| @@ -15,10 +15,12 @@ let | |||
| 15 | time Any | 15 | time Any |
| 16 | port ${name} | 16 | port ${name} |
| 17 | chat "" | 17 | chat "" |
| 18 | protocol ${if builtins.hasAttr name config.services.uucp.protocols then config.services.uucp.protocols."${name}" else config.services.uucp.defaultProtocol} | 18 | protocol ${if builtins.hasAttr name cfg.protocols then cfg.protocols."${name}" else cfg.defaultProtocol} |
| 19 | command-path ${concatStringsSep " " config.services.uucp.commandPath} | 19 | command-path ${concatStringsSep " " cfg.commandPath} |
| 20 | commands ${concatStringsSep " " (if builtins.hasAttr name config.services.uucp.commands then config.services.uucp.commands."${name}" else config.services.uucp.defaultCommands)} | 20 | commands ${concatStringsSep " " (if builtins.hasAttr name cfg.commands then cfg.commands."${name}" else cfg.defaultCommands)} |
| 21 | ''; | 21 | ''; |
| 22 | |||
| 23 | cfg = config.services.uucp; | ||
| 22 | in { | 24 | in { |
| 23 | options = { | 25 | options = { |
| 24 | services.uucp = { | 26 | services.uucp = { |
| @@ -134,6 +136,15 @@ in { | |||
| 134 | ''; | 136 | ''; |
| 135 | }; | 137 | }; |
| 136 | 138 | ||
| 139 | nmDispatch = mkOption { | ||
| 140 | type = config.networking.networkmanager.enable; | ||
| 141 | default = false; | ||
| 142 | description = '' | ||
| 143 | Install a network-manager dispatcher script to automatically | ||
| 144 | call all remotes when networking is available | ||
| 145 | ''; | ||
| 146 | }; | ||
| 147 | |||
| 137 | extraConfig = mkOption { | 148 | extraConfig = mkOption { |
| 138 | type = types.string; | 149 | type = types.string; |
| 139 | default = '' | 150 | default = '' |
| @@ -152,19 +163,19 @@ in { | |||
| 152 | }; | 163 | }; |
| 153 | }; | 164 | }; |
| 154 | 165 | ||
| 155 | config = mkIf config.services.uucp.enable { | 166 | config = mkIf cfg.enable { |
| 156 | environment.etc."uucp/config" = { | 167 | environment.etc."uucp/config" = { |
| 157 | text = '' | 168 | text = '' |
| 158 | hostname ${config.services.uucp.nodeName} | 169 | hostname ${cfg.nodeName} |
| 159 | 170 | ||
| 160 | spool ${config.services.uucp.spoolDir} | 171 | spool ${cfg.spoolDir} |
| 161 | lockdir ${config.services.uucp.lockDir} | 172 | lockdir ${cfg.lockDir} |
| 162 | pubdir ${config.services.uucp.pubDir} | 173 | pubdir ${cfg.pubDir} |
| 163 | logfile ${config.services.uucp.logFile} | 174 | logfile ${cfg.logFile} |
| 164 | statfile ${config.services.uucp.statFile} | 175 | statfile ${cfg.statFile} |
| 165 | debugfile ${config.services.uucp.debugFile} | 176 | debugfile ${cfg.debugFile} |
| 166 | 177 | ||
| 167 | ${config.services.uucp.extraConfig} | 178 | ${cfg.extraConfig} |
| 168 | ''; | 179 | ''; |
| 169 | }; | 180 | }; |
| 170 | 181 | ||
| @@ -173,28 +184,28 @@ in { | |||
| 173 | isSystemUser = true; | 184 | isSystemUser = true; |
| 174 | isNormalUser = false; | 185 | isNormalUser = false; |
| 175 | createHome = true; | 186 | createHome = true; |
| 176 | home = config.services.uucp.spoolDir; | 187 | home = cfg.spoolDir; |
| 177 | description = "User for uucp over ssh"; | 188 | description = "User for uucp over ssh"; |
| 178 | useDefaultShell = true; | 189 | useDefaultShell = true; |
| 179 | } // config.services.uucp.sshUser; | 190 | } // cfg.sshUser; |
| 180 | 191 | ||
| 181 | system.activationScripts."uucp-sshconfig" = '' | 192 | system.activationScripts."uucp-sshconfig" = '' |
| 182 | mkdir -p ${config.users.users."uucp".home}/.ssh | 193 | mkdir -p ${config.users.users."uucp".home}/.ssh |
| 183 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${config.users.users."uucp".home}/.ssh | 194 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${config.users.users."uucp".home}/.ssh |
| 184 | chmod 700 ${config.users.users."uucp".home}/.ssh | 195 | chmod 700 ${config.users.users."uucp".home}/.ssh |
| 185 | ln -fs ${builtins.toFile "ssh-config" config.services.uucp.sshConfig} ${config.users.users."uucp".home}/.ssh/config | 196 | ln -fs ${builtins.toFile "ssh-config" cfg.sshConfig} ${config.users.users."uucp".home}/.ssh/config |
| 186 | ''; | 197 | ''; |
| 187 | 198 | ||
| 188 | system.activationScripts."uucp-logs" = '' | 199 | system.activationScripts."uucp-logs" = '' |
| 189 | touch ${config.services.uucp.logFile} | 200 | touch ${cfg.logFile} |
| 190 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${config.services.uucp.logFile} | 201 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${cfg.logFile} |
| 191 | chmod 644 ${config.services.uucp.logFile} | 202 | chmod 644 ${cfg.logFile} |
| 192 | touch ${config.services.uucp.statFile} | 203 | touch ${cfg.statFile} |
| 193 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${config.services.uucp.statFile} | 204 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${cfg.statFile} |
| 194 | chmod 644 ${config.services.uucp.statFile} | 205 | chmod 644 ${cfg.statFile} |
| 195 | touch ${config.services.uucp.debugFile} | 206 | touch ${cfg.debugFile} |
| 196 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${config.services.uucp.debugFile} | 207 | chown ${config.users.users."uucp".name}:${config.users.users."uucp".group} ${cfg.debugFile} |
| 197 | chmod 644 ${config.services.uucp.debugFile} | 208 | chmod 644 ${cfg.debugFile} |
| 198 | ''; | 209 | ''; |
| 199 | 210 | ||
| 200 | environment.etc."uucp/port" = { | 211 | environment.etc."uucp/port" = { |
| @@ -202,10 +213,10 @@ in { | |||
| 202 | port ssh | 213 | port ssh |
| 203 | type stdin | 214 | type stdin |
| 204 | protocol e | 215 | protocol e |
| 205 | '' + concatStringsSep "\n" (map portSpec config.services.uucp.remoteNodes); | 216 | '' + concatStringsSep "\n" (map portSpec cfg.remoteNodes); |
| 206 | }; | 217 | }; |
| 207 | environment.etc."uucp/sys" = { | 218 | environment.etc."uucp/sys" = { |
| 208 | text = config.services.uucp.extraSys + "\n" + concatStringsSep "\n" (map sysSpec config.services.uucp.remoteNodes); | 219 | text = cfg.extraSys + "\n" + concatStringsSep "\n" (map sysSpec cfg.remoteNodes); |
| 209 | }; | 220 | }; |
| 210 | 221 | ||
| 211 | security.wrappers = let | 222 | security.wrappers = let |
| @@ -264,6 +275,15 @@ in { | |||
| 264 | uucp | 275 | uucp |
| 265 | ]; | 276 | ]; |
| 266 | 277 | ||
| 267 | services.cron.systemCronJobs = (map (name: "${config.services.uucp.interval} ${config.security.wrapperDir}/uucico -D -S ${name}") (if (config.services.uucp.interval != null) then config.services.uucp.remoteNodes else [])); | 278 | services.cron.systemCronJobs = (map (name: "${cfg.interval} ${config.security.wrapperDir}/uucico -D -S ${name}") (if (cfg.interval != null) then cfg.remoteNodes else [])); |
| 279 | |||
| 280 | networking.networkmanager.dispatcherScripts = optional cfg.nmDispatch { | ||
| 281 | type = "basic"; | ||
| 282 | source = '' | ||
| 283 | #!${pkgs.stdenv.shell} | ||
| 284 | |||
| 285 | ${map (name: "${config.security.wrapperDir}/uucico -D -S ${name}") cfg.remoteNodes} | ||
| 286 | ''; | ||
| 287 | }; | ||
| 268 | }; | 288 | }; |
| 269 | } | 289 | } |
