summaryrefslogtreecommitdiff
path: root/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua
diff options
context:
space:
mode:
Diffstat (limited to 'fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua')
-rw-r--r--fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua45
1 files changed, 45 insertions, 0 deletions
diff --git a/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua b/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua
new file mode 100644
index 0000000..599afe4
--- /dev/null
+++ b/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua
@@ -0,0 +1,45 @@
+--- @since 25.5.31
+
+--- Verify if `sudo` is already authenticated
+--- @return boolean
+local function sudo_already()
+ local status = Command("sudo"):arg({ "--validate", "--non-interactive" }):status()
+ assert(status, "Failed to run `sudo --validate --non-interactive`")
+ return status.success
+end
+
+--- Run a program with `sudo` privilege
+--- @param program string
+--- @param args table
+--- @return Output|nil output
+--- @return integer|nil err
+--- nil: no error
+--- 1: sudo failed
+local function run_with_sudo(program, args)
+ local cmd = Command("sudo"):arg(program):arg(args)
+ if sudo_already() then
+ return cmd:output()
+ end
+
+ local permit = ui.hide and ui.hide() or ya.hide() -- TODO: remove this
+ print(string.format("Sudo password required to run: `%s %s`", program, table.concat(args)))
+ local output = cmd:output()
+ permit:drop()
+
+ if output.status.success or sudo_already() then
+ return output
+ end
+ return nil, 1
+end
+
+return {
+ entry = function()
+ local output = run_with_sudo("ls", { "-l" })
+ if not output then
+ return ya.err("Failed to run `sudo ls -l`")
+ end
+
+ ya.err("stdout", output.stdout)
+ ya.err("status.code", output.status.code)
+ end,
+}