1{ config, lib, pkgs, ... }: 2 3let 4 inherit (lib) mkEnableOption mkIf mkOption singleton types; 5 inherit (pkgs) bird; 6 cfg = config.services.bird; 7 8 configFile = pkgs.writeText "bird.conf" '' 9 ${cfg.config} 10 ''; 11in 12 13{ 14 15 ###### interface 16 17 options = { 18 19 services.bird = { 20 21 enable = mkEnableOption "BIRD Internet Routing Daemon"; 22 23 config = mkOption { 24 type = types.string; 25 description = '' 26 BIRD Internet Routing Daemon configuration file. 27 <link xlink:href='http://bird.network.cz/'/> 28 ''; 29 }; 30 31 user = mkOption { 32 type = types.string; 33 default = "ircd"; 34 description = '' 35 BIRD Internet Routing Daemon user. 36 ''; 37 }; 38 39 group = mkOption { 40 type = types.string; 41 default = "ircd"; 42 description = '' 43 BIRD Internet Routing Daemon group. 44 ''; 45 }; 46 47 }; 48 49 }; 50 51 52 ###### implementation 53 54 config = mkIf cfg.enable { 55 56 users.extraUsers = singleton { 57 name = cfg.user; 58 description = "BIRD Internet Routing Daemon user"; 59 uid = config.ids.uids.bird; 60 group = cfg.group; 61 }; 62 63 users.extraGroups = singleton { 64 name = cfg.group; 65 gid = config.ids.gids.bird; 66 }; 67 68 systemd.services.bird = { 69 description = "BIRD Internet Routing Daemon"; 70 wantedBy = [ "multi-user.target" ]; 71 serviceConfig = { 72 ExecStart = "${bird}/bin/bird -d -c ${configFile} -s /var/run/bird.ctl -u ${cfg.user} -g ${cfg.group}"; 73 }; 74 }; 75 }; 76}