about summary refs log tree commit diff
path: root/.local/bin/rofi-ppd
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin/rofi-ppd')
-rwxr-xr-x.local/bin/rofi-ppd48
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)