aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--dot_config/waybar/config.jsonc2
-rwxr-xr-xdot_config/waybar/executable_pacdiff-status.sh7
-rw-r--r--etc/sudoers-rs16
3 files changed, 20 insertions, 5 deletions
diff --git a/dot_config/waybar/config.jsonc b/dot_config/waybar/config.jsonc
index a68278f..a5bada7 100644
--- a/dot_config/waybar/config.jsonc
+++ b/dot_config/waybar/config.jsonc
@@ -227,7 +227,7 @@
"exec": "~/.config/waybar/pacdiff-status.sh",
"return-type": "json",
"interval": 300,
- "on-click": "ghostty --class=floating -e sh -c 'sudo sh -c \"DIFFPROG=\\\"nvim -d\\\" pacdiff\"; printf \"\\n[done — press enter] \"; read _'",
+ "on-click": "ghostty --class=floating -e sh -c 'DIFFPROG=\"nvim -d\" sudo pacdiff; printf \"\\n[done — press enter] \"; read _'",
"tooltip": true,
},
diff --git a/dot_config/waybar/executable_pacdiff-status.sh b/dot_config/waybar/executable_pacdiff-status.sh
index e1a2291..c9278d2 100755
--- a/dot_config/waybar/executable_pacdiff-status.sh
+++ b/dot_config/waybar/executable_pacdiff-status.sh
@@ -5,10 +5,9 @@
# from "no problems" to "non-zero" (i.e. on the post-`pacman -Syu`
# settle), so you're nudged exactly once per upgrade wave.
#
-# Click handler hands off to a root shell that sets DIFFPROG before
-# invoking pacdiff (sudo-rs scrubs the env by default, so passing
-# `DIFFPROG=… sudo pacdiff` or `sudo DIFFPROG=… pacdiff` doesn't
-# survive — but `sudo sh -c 'DIFFPROG=… pacdiff'` does).
+# Click handler runs `DIFFPROG='nvim -d' sudo pacdiff` in a floating
+# ghostty. DIFFPROG is propagated through sudo-rs by the env_keep policy
+# in etc/sudoers-rs (no -E needed — env_keep is unconditional pass-through).
set -eu
diff --git a/etc/sudoers-rs b/etc/sudoers-rs
index 8326b8e..3a75395 100644
--- a/etc/sudoers-rs
+++ b/etc/sudoers-rs
@@ -2,6 +2,22 @@
Defaults!/usr/bin/visudo-rs env_keep += "SUDO_EDITOR EDITOR VISUAL"
Defaults!/usr/local/bin/visudo env_keep += "SUDO_EDITOR EDITOR VISUAL"
+# Pass through interactive/UX env vars so commands run via sudo behave the
+# way they do in a normal shell. Specifically:
+# DIFFPROG — pacdiff(8), etckeeper, etc.
+# EDITOR/VISUAL — sudoedit, systemctl edit, git rebase -i under sudo, …
+# SUDO_EDITOR — explicit override for sudoedit
+# PAGER/MANPAGER — pacman, systemctl, man, less wrappers
+# LESS / LESSOPEN — `less` behaviour and preprocessor
+# SYSTEMD_PAGER / SYSTEMD_LESS — systemctl's pager
+# GIT_EDITOR / GIT_PAGER — git invocations under sudo
+# None of these influence privilege boundaries; they just configure
+# user-facing behaviour of programs that happen to run as root.
+Defaults env_keep += "DIFFPROG"
+Defaults env_keep += "EDITOR VISUAL SUDO_EDITOR GIT_EDITOR"
+Defaults env_keep += "PAGER MANPAGER GIT_PAGER SYSTEMD_PAGER"
+Defaults env_keep += "LESS LESSOPEN SYSTEMD_LESS"
+
# Sanitize PATH for elevated commands.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/bin"