diff options
Diffstat (limited to '.local/bin/rofi-ppd')
| -rwxr-xr-x | .local/bin/rofi-ppd | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/.local/bin/rofi-ppd b/.local/bin/rofi-ppd new file mode 100755 index 0000000..5a4f13b --- /dev/null +++ b/.local/bin/rofi-ppd @@ -0,0 +1,48 @@ +#!/usr/bin/env lua + +local function trim(s) + return s:gsub("^%s+", ""):gsub("%s+$", "") +end + +local function rofi(prompt, lines) + local cmd = string.format( + 'printf "%s" | rofi -dmenu -i -p "%s"', + table.concat(lines, "\n"), + prompt + ) + local handle = io.popen(cmd) + local selection = handle:read("*a") + handle:close() + selection = trim(selection or "") + if selection == "" then return nil end + return selection +end + +local modes = {} + +local handle = io.popen('powerprofilesctl list') +local profile_list = handle:read("*a") +handle:close() + +local handle = io.popen('powerprofilesctl get') +local current_profile = trim(handle:read("*a") or "") +handle:close() + +for line in profile_list:gmatch("[^\r\n]+") do + line = trim(line) + local mode = line:match("^%*?%s*([%w%-_]+)%s*:$") + if mode then + if mode == current_profile then + table.insert(modes, "* " .. mode) + else + table.insert(modes, " " .. mode) + end + end +end + +local selected_profile = rofi('', modes) +if not selected_profile then os.exit() end + +selected_profile = selected_profile:gsub("^%*%s*", ""):gsub("^%s+", "") + +io.popen('powerprofilesctl set ' .. selected_profile) |
