2025-06-27 02:31:23 +01:00

42 lines
2.1 KiB
Plaintext

use std log
def addcap [binpath: path] {
if ($nu.os-info.name == "linux") {
print $"(ansi red)Warning(ansi reset): To access the PIDs of applications running as root or other users, you need to add the following capabilities to the plugin binary: net_admin, sys_ptrace, dac_read_search."
print $"(ansi red)sudo setcap 'cap_net_admin,cap_sys_ptrace,cap_dac_read_search=ep' '($binpath)'(ansi reset)"
print "Do you want to run this command with sudo? [y/N]"
match (input listen --types [key]) {
{code: $key} if ($key | str downcase) == "y" => {
let caps = (['cap_net_admin', 'cap_sys_ptrace', 'cap_dac_read_search'] | input list --multi "Choose which specific capabilities you want to add" | str join ",")
let cmd = $"setcap '($caps)=ep' '($binpath)'"
print $"Executing `($cmd)` with sudo."
sh -c $"sudo ($cmd)"
}
_ => {
print "If you prefer to add the capabilities manually, use the following command:"
print $"sudo setcap 'cap_net_admin,cap_sys_ptrace,cap_dac_read_search=ep' '($binpath)'"
}
}
} else if ($nu.os-info.name == "windows") {
print $"(ansi red)For Windows Users(ansi reset): The plugin is installed successfully but keep in mind in order to fetch all executables information you must run nushell as administrator"
}
}
def main [package_file: path] {
let repo_root = $package_file | path dirname
let install_root = $env.NUPM_HOME | path join "plugins"
let name = open ($repo_root | path join "Cargo.toml") | get package.name
let cmd = $"cargo install --path ($repo_root) --root ($install_root)"
log info $"building plugin using: (ansi blue)($cmd)(ansi reset)"
nu -c $cmd
let ext: string = if ($nu.os-info.name == 'windows') { '.exe' } else { '' }
let bin_path = $"($install_root | path join "bin" $name)($ext)"
plugin add $bin_path
addcap $bin_path
log info "do not forget to restart Nushell for the plugin to be fully available!"
}