| 1 |
# Mountaineer role → tool registry. |
| 2 |
# |
| 3 |
# Each role is a stable name for a job the OS needs done. The tool filling |
| 4 |
# the role is implementation detail and may change between releases; the |
| 5 |
# role name does not. `sysop info <role>` reads this file. |
| 6 |
# |
| 7 |
# Order matters: roles are presented in the list view in the order they |
| 8 |
# appear here. Group by concern (core → network → graphical). |
| 9 |
|
| 10 |
# --- core --- |
| 11 |
|
| 12 |
[[role]] |
| 13 |
name = "init" |
| 14 |
description = "Service supervisor and runlevel manager" |
| 15 |
tool = "s6 + s6-rc" |
| 16 |
packages = ["s6", "s6-rc"] |
| 17 |
config_paths = ["/etc/s6/", "/etc/s6-rc/"] |
| 18 |
|
| 19 |
[[role]] |
| 20 |
name = "shell-login" |
| 21 |
description = "POSIX /bin/sh" |
| 22 |
tool = "busybox ash" |
| 23 |
packages = ["busybox"] |
| 24 |
config_paths = ["/etc/profile", "/etc/profile.d/"] |
| 25 |
|
| 26 |
[[role]] |
| 27 |
name = "shell-interactive" |
| 28 |
description = "Login interactive shell with structured pipelines" |
| 29 |
tool = "nushell" |
| 30 |
packages = ["nushell"] |
| 31 |
config_paths = ["~/.config/nushell/"] |
| 32 |
|
| 33 |
[[role]] |
| 34 |
name = "editor" |
| 35 |
description = "Modal editor with LSP and tree-sitter" |
| 36 |
tool = "helix" |
| 37 |
packages = ["helix"] |
| 38 |
config_paths = ["~/.config/helix/"] |
| 39 |
|
| 40 |
[[role]] |
| 41 |
name = "multiplexer" |
| 42 |
description = "Terminal multiplexer with discoverable keybindings" |
| 43 |
tool = "zellij" |
| 44 |
packages = ["zellij"] |
| 45 |
config_paths = ["~/.config/zellij/"] |
| 46 |
|
| 47 |
[[role]] |
| 48 |
name = "container-runtime" |
| 49 |
description = "Rootless container runtime" |
| 50 |
tool = "podman" |
| 51 |
packages = ["podman"] |
| 52 |
config_paths = ["/etc/containers/", "~/.config/containers/"] |
| 53 |
|
| 54 |
[[role]] |
| 55 |
name = "filesystem" |
| 56 |
description = "Root filesystem and pool/dataset management" |
| 57 |
tool = "ZFS" |
| 58 |
packages = ["zfs", "zfs-lts"] |
| 59 |
config_paths = ["/etc/zfs/"] |
| 60 |
|
| 61 |
[[role]] |
| 62 |
name = "ssh" |
| 63 |
description = "SSH server, hardened defaults" |
| 64 |
tool = "OpenSSH" |
| 65 |
packages = ["openssh"] |
| 66 |
config_paths = ["/etc/ssh/sshd_config", "/etc/ssh/sshd_config.d/"] |
| 67 |
|
| 68 |
# --- network --- |
| 69 |
|
| 70 |
[[role]] |
| 71 |
name = "firewall" |
| 72 |
description = "Stateful packet filter, default-deny" |
| 73 |
tool = "nftables" |
| 74 |
packages = ["nftables"] |
| 75 |
config_paths = ["/etc/nftables.nft", "/etc/nftables.d/"] |
| 76 |
|
| 77 |
[[role]] |
| 78 |
name = "resolver" |
| 79 |
description = "Local validating recursive DNS resolver" |
| 80 |
tool = "unbound" |
| 81 |
packages = ["unbound"] |
| 82 |
config_paths = ["/etc/unbound/unbound.conf", "/etc/unbound/conf.d/"] |
| 83 |
|
| 84 |
[[role]] |
| 85 |
name = "time" |
| 86 |
description = "NTP client and time synchronisation" |
| 87 |
tool = "chrony" |
| 88 |
packages = ["chrony"] |
| 89 |
config_paths = ["/etc/chrony/chrony.conf"] |
| 90 |
|
| 91 |
[[role]] |
| 92 |
name = "network-wired" |
| 93 |
description = "Wired interface configuration" |
| 94 |
tool = "ifupdown-ng" |
| 95 |
packages = ["ifupdown-ng"] |
| 96 |
config_paths = ["/etc/network/interfaces", "/etc/network/interfaces.d/"] |
| 97 |
|
| 98 |
[[role]] |
| 99 |
name = "network-wireless" |
| 100 |
description = "Wireless interface daemon" |
| 101 |
tool = "iwd" |
| 102 |
packages = ["iwd"] |
| 103 |
config_paths = ["/etc/iwd/", "/var/lib/iwd/"] |
| 104 |
|
| 105 |
[[role]] |
| 106 |
name = "mesh" |
| 107 |
description = "Overlay mesh VPN with mutual auth" |
| 108 |
tool = "Nebula" |
| 109 |
packages = ["nebula"] |
| 110 |
config_paths = ["/etc/nebula/"] |
| 111 |
|
| 112 |
[[role]] |
| 113 |
name = "reverse-proxy" |
| 114 |
description = "HTTPS-terminating reverse proxy with auto-TLS" |
| 115 |
tool = "Caddy" |
| 116 |
packages = ["caddy"] |
| 117 |
config_paths = ["/etc/caddy/Caddyfile", "/etc/caddy/conf.d/"] |
| 118 |
|
| 119 |
[[role]] |
| 120 |
name = "mail-outbound" |
| 121 |
description = "Outbound mail relay (notifications, alerts)" |
| 122 |
tool = "msmtp" |
| 123 |
packages = ["msmtp"] |
| 124 |
config_paths = ["/etc/msmtprc"] |
| 125 |
|
| 126 |
# --- observability / data --- |
| 127 |
|
| 128 |
[[role]] |
| 129 |
name = "logs-router" |
| 130 |
description = "Structured log collection and routing" |
| 131 |
tool = "Vector" |
| 132 |
packages = ["vector"] |
| 133 |
config_paths = ["/etc/vector/vector.toml"] |
| 134 |
|
| 135 |
[[role]] |
| 136 |
name = "logs-viewer" |
| 137 |
description = "Interactive log browser" |
| 138 |
tool = "lnav" |
| 139 |
packages = ["lnav"] |
| 140 |
config_paths = ["~/.config/lnav/"] |
| 141 |
|
| 142 |
[[role]] |
| 143 |
name = "secrets" |
| 144 |
description = "Age-encrypted secrets with sops integration" |
| 145 |
tool = "age + sops" |
| 146 |
packages = ["age", "sops"] |
| 147 |
config_paths = ["~/.config/sops/", ".sops.yaml"] |
| 148 |
|
| 149 |
[[role]] |
| 150 |
name = "backup" |
| 151 |
description = "Encrypted, deduplicated backups" |
| 152 |
tool = "restic" |
| 153 |
packages = ["restic"] |
| 154 |
config_paths = ["~/.config/restic/"] |
| 155 |
|
| 156 |
# --- graphical layer (Sysadmin build only) --- |
| 157 |
|
| 158 |
[[role]] |
| 159 |
name = "compositor" |
| 160 |
description = "Tiling Wayland compositor" |
| 161 |
tool = "river" |
| 162 |
packages = ["river"] |
| 163 |
config_paths = ["~/.config/river/init"] |
| 164 |
|
| 165 |
[[role]] |
| 166 |
name = "terminal" |
| 167 |
description = "Wayland terminal emulator" |
| 168 |
tool = "foot" |
| 169 |
packages = ["foot"] |
| 170 |
config_paths = ["~/.config/foot/foot.ini"] |
| 171 |
|
| 172 |
[[role]] |
| 173 |
name = "bar" |
| 174 |
description = "Status bar (read-only system surface)" |
| 175 |
tool = "yambar" |
| 176 |
packages = ["yambar"] |
| 177 |
config_paths = ["~/.config/yambar/config.yml"] |
| 178 |
|
| 179 |
[[role]] |
| 180 |
name = "launcher" |
| 181 |
description = "Application launcher" |
| 182 |
tool = "fuzzel" |
| 183 |
packages = ["fuzzel"] |
| 184 |
config_paths = ["~/.config/fuzzel/fuzzel.ini"] |
| 185 |
|
| 186 |
[[role]] |
| 187 |
name = "clipboard" |
| 188 |
description = "Clipboard history" |
| 189 |
tool = "cliphist" |
| 190 |
packages = ["cliphist"] |
| 191 |
config_paths = [] |
| 192 |
|
| 193 |
[[role]] |
| 194 |
name = "notifications" |
| 195 |
description = "Wayland notification daemon" |
| 196 |
tool = "fnott" |
| 197 |
packages = ["fnott"] |
| 198 |
config_paths = ["~/.config/fnott/fnott.ini"] |
| 199 |
|
| 200 |
[[role]] |
| 201 |
name = "screenshots" |
| 202 |
description = "Region capture, annotation, pipeline" |
| 203 |
tool = "grim + slurp + swappy" |
| 204 |
packages = ["grim", "slurp", "swappy"] |
| 205 |
config_paths = ["~/.config/swappy/"] |
| 206 |
|
| 207 |
[[role]] |
| 208 |
name = "lock" |
| 209 |
description = "Screen locker" |
| 210 |
tool = "swaylock" |
| 211 |
packages = ["swaylock"] |
| 212 |
config_paths = ["~/.config/swaylock/config"] |
| 213 |
|
| 214 |
[[role]] |
| 215 |
name = "idle" |
| 216 |
description = "Idle event dispatcher" |
| 217 |
tool = "swayidle" |
| 218 |
packages = ["swayidle"] |
| 219 |
config_paths = ["~/.config/swayidle/config"] |
| 220 |
|
| 221 |
[[role]] |
| 222 |
name = "wallpaper" |
| 223 |
description = "Wallpaper / background" |
| 224 |
tool = "swaybg" |
| 225 |
packages = ["swaybg"] |
| 226 |
config_paths = [] |
| 227 |
|
| 228 |
[[role]] |
| 229 |
name = "audio" |
| 230 |
description = "Audio server and session manager" |
| 231 |
tool = "pipewire + wireplumber" |
| 232 |
packages = ["pipewire", "wireplumber"] |
| 233 |
config_paths = ["/etc/pipewire/", "~/.config/pipewire/", "~/.config/wireplumber/"] |
| 234 |
|
| 235 |
[[role]] |
| 236 |
name = "seat" |
| 237 |
description = "Seat / device management for non-root Wayland" |
| 238 |
tool = "seatd" |
| 239 |
packages = ["seatd"] |
| 240 |
config_paths = [] |
| 241 |
|
| 242 |
[[role]] |
| 243 |
name = "brightness" |
| 244 |
description = "Backlight control" |
| 245 |
tool = "brightnessctl" |
| 246 |
packages = ["brightnessctl"] |
| 247 |
config_paths = [] |
| 248 |
|
| 249 |
[[role]] |
| 250 |
name = "power" |
| 251 |
description = "Laptop power management profiles" |
| 252 |
tool = "tlp" |
| 253 |
packages = ["tlp"] |
| 254 |
config_paths = ["/etc/tlp.conf", "/etc/tlp.d/"] |
| 255 |
|