summaryrefslogtreecommitdiff
path: root/fedora/.config/yazi/plugins/sudo-demo.yazi
diff options
context:
space:
mode:
Diffstat (limited to 'fedora/.config/yazi/plugins/sudo-demo.yazi')
-rw-r--r--fedora/.config/yazi/plugins/sudo-demo.yazi/README.md25
-rw-r--r--fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua45
2 files changed, 70 insertions, 0 deletions
diff --git a/fedora/.config/yazi/plugins/sudo-demo.yazi/README.md b/fedora/.config/yazi/plugins/sudo-demo.yazi/README.md
new file mode 100644
index 0000000..8068691
--- /dev/null
+++ b/fedora/.config/yazi/plugins/sudo-demo.yazi/README.md
@@ -0,0 +1,25 @@
+# sudo-demo.yazi
+
+Just an example showing how to use `sudo` in a Yazi plugin, and the plugin itself doesn't offer any features beyond logging a message.
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:sudo-demo
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "<C-t>"
+run = "plugin sudo-demo"
+```
+
+Press <kbd>Ctrl</kbd> + <kbd>t</kbd> to run the plugin, you should [see a message in the log](https://yazi-rs.github.io/docs/plugins/overview#logging).
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
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,
+}