1{ config, lib, ... }:
2
3let
4 inherit (lib)
5 mkEnableOption
6 mkIf
7 mkOption
8 optionalAttrs
9 ;
10
11 inherit (lib.types) str;
12
13 cfg = config.services.netbird.server;
14in
15
16{
17 meta = {
18 maintainers = with lib.maintainers; [ thubrecht ];
19 doc = ./server.md;
20 };
21
22 # Import the separate components
23 imports = [
24 ./coturn.nix
25 ./dashboard.nix
26 ./management.nix
27 ./signal.nix
28 ];
29
30 options.services.netbird.server = {
31 enable = mkEnableOption "Netbird Server stack, comprising the dashboard, management API and signal service";
32
33 enableNginx = mkEnableOption "Nginx reverse-proxy for the netbird server services.";
34
35 domain = mkOption {
36 type = str;
37 description = "The domain under which the netbird server runs.";
38 };
39 };
40
41 config = mkIf cfg.enable {
42 services.netbird.server = {
43 dashboard = {
44 inherit (cfg) enable domain enableNginx;
45
46 managementServer = "https://${cfg.domain}";
47 };
48
49 management =
50 {
51 inherit (cfg) enable domain enableNginx;
52 }
53 // (optionalAttrs cfg.coturn.enable {
54 turnDomain = cfg.domain;
55 turnPort = config.services.coturn.tls-listening-port;
56 });
57
58 signal = {
59 inherit (cfg) enable domain enableNginx;
60 };
61
62 coturn = {
63 inherit (cfg) domain;
64 };
65 };
66 };
67}