Server Host Composition

The server host shows the other side of the branch model: it does not inherit the workstation profile and instead selects explicit server branches.

Up: hosts

Down: server branch | matrix branch | server leaves

What this host does

The host selects only the branches needed for a headless role.

config.my.hosts.server = {
  system = "x86_64-linux";
  branches = [ "server" "matrix" ];
};

Unlike the workstation host, this pattern does not merge my.profile.branches. That prevents desktop and Home Manager assumptions from leaking onto a server.

Host-specific bootstrap

Cloud hosts often need a short-lived bootstrap shape: mutable users, an SSH authorized key, or cloud-init. Those choices belong in hostCfg.nixosModules, not in the generic server branch.

config.my.hosts.server.nixosModules = [
  ({ lib, ... }: {
    users.mutableUsers = true;
    services.cloud-init.enable = true;
    users.users.admin.openssh.authorizedKeys.keys = [
      "ssh-ed25519 AAAA... public-key-placeholder"
    ];
  })
];

Do not publish real keys or deployment domains in public notes.

Service role settings

The same host can set service options for the Matrix branch.

config.my.matrix = {
  enable = true;
  domain = "matrix.example.com";
  enableTelegramBridge = false;
};

The Matrix leaf reads these options. The host decides the deployment role.