caddy: `withPlugins` better error messages for untagged plugins (#368657)
[NixPkgs.git] / nixos / modules / services / networking / netbird / server.nix
blob1725374d03c6bc0107211faa60d4fe0767bfe530
1 { config, lib, ... }:
3 let
4   inherit (lib)
5     mkDefault
6     mkEnableOption
7     mkIf
8     mkOption
9     optionalAttrs
10     ;
12   inherit (lib.types) str;
14   cfg = config.services.netbird.server;
18   meta = {
19     maintainers = with lib.maintainers; [patrickdag];
20     doc = ./server.md;
21   };
23   # Import the separate components
24   imports = [
25     ./coturn.nix
26     ./dashboard.nix
27     ./management.nix
28     ./signal.nix
29   ];
31   options.services.netbird.server = {
32     enable = mkEnableOption "Netbird Server stack, comprising the dashboard, management API and signal service";
34     enableNginx = mkEnableOption "Nginx reverse-proxy for the netbird server services";
36     domain = mkOption {
37       type = str;
38       description = "The domain under which the netbird server runs.";
39     };
40   };
42   config = mkIf cfg.enable {
43     services.netbird.server = {
44       dashboard = {
45         domain = mkDefault cfg.domain;
46         enable = mkDefault cfg.enable;
47         enableNginx = mkDefault cfg.enableNginx;
49         managementServer = "https://${cfg.domain}";
50       };
52       management =
53         {
54           domain = mkDefault cfg.domain;
55           enable = mkDefault cfg.enable;
56           enableNginx = mkDefault cfg.enableNginx;
57         }
58         // (optionalAttrs cfg.coturn.enable rec {
59           turnDomain = cfg.domain;
60           turnPort = config.services.coturn.tls-listening-port;
61           # We cannot merge a list of attrsets so we have to redefine the whole list
62           settings = {
63             TURNConfig.Turns = mkDefault [
64               {
65                 Proto = "udp";
66                 URI = "turn:${turnDomain}:${builtins.toString turnPort}";
67                 Username = "netbird";
68                 Password =
69                   if (cfg.coturn.password != null)
70                   then cfg.coturn.password
71                   else {_secret = cfg.coturn.passwordFile;};
72               }
73             ];
74           };
75         });
77       signal = {
78         domain = mkDefault cfg.domain;
79         enable = mkDefault cfg.enable;
80         enableNginx = mkDefault cfg.enableNginx;
81       };
83       coturn = {
84         domain = mkDefault cfg.domain;
85       };
86     };
87   };