{
  config,
  lib,
  ...
}: let
  inherit (lib) mkIf;
  inherit (config.networking) hostName;

  cfg = config.roles.server;
in {
  config = mkIf (cfg.enable && cfg.tailscale.enable) {
    services = {
      tailscale = {
        enable = true;
        # TODO: add authKeyFile to get extraUpFlags to work
        # https://github.com/juanfont/headscale/issues/1550
        # https://github.com/juanfont/headscale/blob/main/docs/running-headscale-linux-manual.md#register-machine-using-a-pre-authenticated-key
        # https://www.reddit.com/r/NixOS/comments/18kz1nb/tailscale_extraupflags_not_working/
        extraUpFlags = [
          "--login-server https://headscale.nelim.org"
          "--operator=${cfg.user}"
        ];
      };
    };

    home-manager.users.${cfg.user} = {
      programs.bash.shellAliases = {
        # Connect to headscale
        tup = "tailscale up --login-server https://headscale.nelim.org";

        # Desktop
        pc = "ssh -t matt@binto 'tmux -2u new -At ${hostName}'";

        # NAS
        nos = "ssh -t matt@nos 'tmux -2u new -At ${hostName}'";

        # Experimenting server
        servivi = "ssh -t matt@servivi 'tmux -2u new -At ${hostName}'";

        # Home-assistant
        homie = "ssh -t matt@homie 'tmux -2u new -At ${hostName}'";

        # Cluster nodes
        thingone = "ssh -t matt@thingone 'tmux -2u new -At ${hostName}'";
        thingtwo = "ssh -t matt@thingtwo 'tmux -2u new -At ${hostName}'";
      };
    };
  };

  # For accurate stack trace
  _file = ./default.nix;
}