feat(tailscale): operator-set login user — VPN menu skips the sudo terminal
nomarchy.services.tailscale now makes the login user the Tailscale operator (services.tailscale.extraSetFlags = ["--operator=<username>"], mkDefault), so `tailscale up/down/set` — and the System → VPN menu's Tailscale controls — run without sudo. The user is already in wheel, so the operator grant is no real new privilege, just skips the prompt. nomarchy-vpn's Tailscale actions are now operator-aware: a ts_priv helper runs the subcommand inline and only falls back to a sudo terminal if the operator grant is absent (downstream dropped it). Connect brings an authed-but-down node up inline; a node that still needs interactive login goes to a terminal so the auth URL is visible. Option description + template comment updated; ROADMAP follow-up closed. System + home builds green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -11,8 +11,9 @@ in
|
||||
{
|
||||
options.nomarchy.services = {
|
||||
tailscale.enable = lib.mkEnableOption ''
|
||||
Tailscale, the mesh VPN — ships the daemon; authenticate once with
|
||||
`sudo tailscale up`'';
|
||||
Tailscale, the mesh VPN — ships the daemon and makes the login user its
|
||||
operator, so `tailscale up/down/set` and the System → VPN menu work
|
||||
without sudo. Authenticate once (the menu's Connect, or `tailscale up`)'';
|
||||
|
||||
syncthing.enable = lib.mkEnableOption ''
|
||||
Syncthing continuous file sync, running as the login user — add
|
||||
@@ -125,6 +126,12 @@ in
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf cfg.tailscale.enable {
|
||||
services.tailscale.enable = true;
|
||||
# Let the login user drive tailscale (up/down/set — and so the VPN menu's
|
||||
# Tailscale controls) without sudo. It's already in wheel, so the operator
|
||||
# grant is no real new privilege, just skips the password prompt. The
|
||||
# module's tailscaled-set unit applies this after the daemon starts.
|
||||
# mkDefault so a downstream can drop or replace it (e.g. extraSetFlags = []).
|
||||
services.tailscale.extraSetFlags = lib.mkDefault [ "--operator=${args.username}" ];
|
||||
})
|
||||
|
||||
(lib.mkIf cfg.syncthing.enable {
|
||||
|
||||
Reference in New Issue
Block a user