#!/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)