# sudo-timed-nopasswd — time-boxed passwordless sudo ("sudoless" mode) Writes to `/usr/local/bin`, installs a systemd unit, and patches caelestia — all need root. Install with the command below. ## What it is A Settings → Services toggle (and a CLI) that grants the user **`NOPASSWD: ALL` for 15 minutes**, then automatically reverts. For batches of admin work without re-typing your password each time — bounded so it can't be left on forever. Inspired by Omarchy's install-time `/etc/sudoers.d/first-run` (which is just `$USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl`, removed after first-run — see omarchy issue #5708). This is the deliberate, user-triggered, time-boxed, full-`ALL` version. ## Pieces - **`nosignal-sudo-toggle`** → `/usr/local/bin` — `enable` / `disable` / `status`. - **`nosignal-sudoless-boot-clean.service`** (enabled) — removes the drop-in on every boot (reboot safety net; see below). - **`SudoToggleRow.qml`** → `nexus/common/` (untracked, survives upgrades). - **`patch-servicespage.sh`** — inserts the toggle into `ServicesPage.qml` (re-applied by the caelestia-shell pacman hook, like the Additions/Updates patches). ## How it works - **enable** (root; you authenticate ONCE): validates a drop-in with `visudo -cf` *before* installing it (a broken sudoers never reaches `/etc/sudoers.d`), writes `/etc/sudoers.d/01-nosignal-sudoless` (` ALL=(ALL:ALL) NOPASSWD: ALL`, mode 0440), stamps `/run/nosignal-sudoless.stamp` (world-readable, for `status`), and arms a root-owned transient timer: `systemd-run --on-active=15min … disable`. - **disable**: cancels the timer, removes the drop-in + stamp. Inside the window `sudo -n` runs it without a prompt; the panel's "off" uses exactly that. - **status**: reads only the `/run` stamp → no root, so the toggle can poll it every 5 s and show minutes remaining. ## Safety - `visudo -cf` validation before install — never installs a malformed sudoers. - Auto-revert after 15 min via a root systemd timer (no password needed). - **Reboot net:** transient timers don't survive a reboot but the `/etc` drop-in would — so `nosignal-sudoless-boot-clean.service` removes it on every boot. A reboot always ends the sudoless session. - Full `NOPASSWD: ALL` is broad **by design** (the requested "run sudoless"), with the 15-min window + reboot net as the bound. If you want it narrower, change the drop-in body in `nosignal-sudo-toggle` (e.g. limit to `/usr/bin/systemctl, /usr/bin/pacman`). ## Install (root) ``` sudo sh ~/.local/share/nosignal/sudo-timed-nopasswd/install-sudo-timed-nopasswd.sh ``` Then reload caelestia (or log out/in) so the new toggle/QML loads. ## Use - Settings → Services → **Passwordless sudo (15 min)**: on opens a small floating terminal for your password (once); off reverts immediately. - Or terminal: `sudo nosignal-sudo-toggle enable` / `disable`, `nosignal-sudo-toggle status`. ## Auto-revert The 15-min `systemd-run` timer fires on schedule to revert the drop-in. `disable` removes the drop-in/stamp **first**, then touches units, and `cancel_timer` stops **only the `.timer`**, never the `.service` — this avoids the revert service stopping itself (getting SIGTERM'd) before the `rm` runs. `disable` also clears the user's cached sudo **timestamp** (`/run/sudo/ts/`) — sudo caches a ticket ~15 min independently of the drop-in, so without this a sudo run just before revert would stay passwordless past the window. ## QML toggle The Settings → Services row toggles sudoless mode. Toggle ON → floating terminal → password → drop-in installed, 15-min timer armed, status `active 15`. Toggle OFF → immediate revert: drop-in + stamp removed, timer disarmed, sudo cache cleared, `sudo` prompts again. ## Files - `nosignal-sudo-toggle`, `nosignal-sudoless-boot-clean.service`, `install-sudo-timed-nopasswd.sh`, `SudoToggleRow.qml`, `patch-servicespage.sh`, `migrations/1781456400-sudo-timed-nopasswd.sh`.