aboutsummaryrefslogtreecommitdiff
path: root/modules/services/options.nix
blob: 78a5a8f014220b7fa1d8efb81c3e1d571dc49880 (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
{
  lib,
  config,
  ...
}: let
  inherit (lib) mkOption mkEnableOption;
in {
  options = {
    collinux.services = {
      networking = {
        enable = mkEnableOption "wifi";
        iwd.enable = mkEnableOption "lightweight wifi daemon";
        networkmanager.enable = mkEnableOption "heavier wifi daemon";

        static = let
          ip_addr =
            lib.types.strMatching
            "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$";
        in {
          enable = mkEnableOption "set static IP (systemd-networkd)";
          ssid = mkOption {type = lib.types.str;};
          ip = mkOption {type = ip_addr;};
          gateway = mkOption {type = ip_addr;};
          pskFile = mkOption {type = lib.types.str;};
        };
        tailscale.enable = mkEnableOption "tailscale";
        sshd.enable = mkEnableOption "OpenSSH server";
      };
      audio = {
        enable = mkEnableOption "pipewire + wireplumber";
        pulse.enable = mkEnableOption "pipewire-pulse";
        # some config to make audio work with wine (TODO for jupiter)
      };
      bluetooth = {
        enable = mkEnableOption "bluetooth";
        blueman.enable = mkEnableOption "graphical bluetooth manager";
        bluetuith.enable = mkEnableOption "terminal bluetooth manager";
      };

      selfhost = {
        navidrome = {
          enable = mkEnableOption "navidrome music server";
          user = mkOption {
            description = "user to run the service as";
            default = config.collinux.user.name;
          };
        };
        adguard.enable = mkEnableOption "AdGuardHome network-wide adblocking";
        caddy.enable = mkEnableOption "caddy https server";
      };
    };
  };

  config = {
    assertions = [
      {
        assertion = with config.collinux.services.networking; (iwd.enable && !networkmanager.enable && !static.enable) || (!iwd.enable && networkmanager.enable && !static.enable) || (!iwd.enable && !networkmanager.enable && static.enable);
        message = "only one networking method (iwd, networkmanager, static) can be active";
      }
    ];
  };
}