Kieran's opinionated (and probably slightly dumb) nix config

ssh#

Declarative SSH config with per-host options and zmx (persistent tmux-like sessions over SSH) integration.

Options#

All options under atelier.ssh:

Option Type Default Description
enable bool false Enable SSH config management
extraConfig string "" Raw SSH config appended to the end

zmx#

Option Type Default Description
zmx.enable bool false Install zmx and autossh
zmx.hosts list of strings [] Host patterns to auto-attach via zmx

When zmx is enabled for a host, the SSH config injects RemoteCommand, RequestTTY force, and ControlMaster/ControlPersist settings. Shell aliases are also added: zmls, zmk, zma, ash.

Hosts#

Per-host config under atelier.ssh.hosts.<name>:

Option Type Default Description
hostname string SSH hostname or IP
port int or null null SSH port
user string or null null SSH user
identityFile string or null null Path to SSH key
forwardAgent bool false Forward SSH agent
zmx bool false Enable zmx for this host
extraOptions attrsOf string {} Arbitrary SSH options

Example#

atelier.ssh = {
  enable = true;
  zmx.enable = true;
  zmx.hosts = [ "terebithia" "ember" ];

  hosts = {
    terebithia = {
      hostname = "terebithia";
      user = "kierank";
      forwardAgent = true;
      zmx = true;
    };
    "github.com" = {
      identityFile = "~/.ssh/id_rsa";
    };
  };
};