mirror of
https://github.com/nmasur/dotfiles
synced 2025-07-05 19:40:14 +00:00
rofi power menu
This commit is contained in:
58
modules/nixos/graphical/rofi/power.nix
Executable file
58
modules/nixos/graphical/rofi/power.nix
Executable file
@ -0,0 +1,58 @@
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
|
||||
rofi = config.home-manager.users.${config.user}.programs.rofi.finalPackage;
|
||||
|
||||
in {
|
||||
|
||||
# Adapted from:
|
||||
# https://gitlab.com/vahnrr/rofi-menus/-/blob/b1f0e8a676eda5552e27ef631b0d43e660b23b8e/scripts/rofi-power
|
||||
# A rofi powered menu to execute power related action.
|
||||
|
||||
config.powerCommand = builtins.toString (pkgs.writeShellScript "powermenu" ''
|
||||
power_off=''
|
||||
reboot=''
|
||||
lock=''
|
||||
suspend='鈴'
|
||||
log_out=''
|
||||
|
||||
chosen=$(printf '%s;%s;%s;%s;%s\n' \
|
||||
"$power_off" \
|
||||
"$reboot" \
|
||||
"$lock" \
|
||||
"$suspend" \
|
||||
"$log_out" \
|
||||
| ${rofi}/bin/rofi \
|
||||
-theme-str '@import "power.rasi"' \
|
||||
-dmenu \
|
||||
-sep ';' \
|
||||
-selected-row 2)
|
||||
|
||||
case "$chosen" in
|
||||
"$power_off")
|
||||
${
|
||||
builtins.toString ./rofi-prompt.sh
|
||||
} 'Shutdown?' && doas shutdown now
|
||||
;;
|
||||
|
||||
"$reboot")
|
||||
${builtins.toString ./rofi-prompt.sh} 'Reboot?' && doas reboot
|
||||
;;
|
||||
|
||||
"$lock")
|
||||
${pkgs.betterlockscreen}/bin/betterlockscreen --lock --display 1 --blur 0.5 --span
|
||||
;;
|
||||
|
||||
"$suspend")
|
||||
systemctl suspend
|
||||
;;
|
||||
|
||||
"$log_out")
|
||||
${builtins.toString ./rofi-prompt.sh} 'Logout?' && i3-msg exit
|
||||
;;
|
||||
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
'');
|
||||
|
||||
}
|
44
modules/nixos/graphical/rofi/rofi-prompt.sh
Executable file
44
modules/nixos/graphical/rofi/rofi-prompt.sh
Executable file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Credit: https://gitlab.com/vahnrr/rofi-menus/-/blob/b1f0e8a676eda5552e27ef631b0d43e660b23b8e/scripts/rofi-prompt
|
||||
|
||||
# Rofi powered menu to prompt a message and get a yes/no answer.
|
||||
# Uses: rofi
|
||||
|
||||
yes='Confirm'
|
||||
no='Cancel'
|
||||
query='Are you sure?'
|
||||
|
||||
while [ $# -ne 0 ]; do
|
||||
case "$1" in
|
||||
-y | --yes)
|
||||
[ -n "$2" ] && yes="$2" || yes=''
|
||||
shift
|
||||
;;
|
||||
|
||||
-n | --no)
|
||||
[ -n "$2" ] && no="$2" || no=''
|
||||
shift
|
||||
;;
|
||||
|
||||
-q | --query)
|
||||
[ -n "$2" ] && query="$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
chosen=$(printf '%s;%s\n' "$yes" "$no" |
|
||||
rofi -theme-str '@import "prompt.rasi"' \
|
||||
-p "$query" \
|
||||
-dmenu \
|
||||
-sep ';' \
|
||||
-a 0 \
|
||||
-u 1 \
|
||||
-selected-row 1)
|
||||
|
||||
case "$chosen" in
|
||||
"$yes") exit 0 ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
62
modules/nixos/graphical/rofi/themes/common.rasi
Normal file
62
modules/nixos/graphical/rofi/themes/common.rasi
Normal file
@ -0,0 +1,62 @@
|
||||
/**
|
||||
* Allows to change the settings of every menu simply by editing this file
|
||||
* https://gitlab.com/vahnrr/rofi-menus/-/blob/b1f0e8a676eda5552e27ef631b0d43e660b23b8e/themes/shared/settings.rasi
|
||||
*/
|
||||
|
||||
* {
|
||||
/* General */
|
||||
font: "Hack Nerd Font 60";
|
||||
|
||||
/* option menus: i3-layout, music, power and screenshot
|
||||
*
|
||||
* Values bellow are 'no-padding' ones for a size 60 (@icon-font) font, played
|
||||
* around using this character: ■
|
||||
* We then add add 100 actual padding around the icons.
|
||||
* -12px 0px -19px -96px */
|
||||
option-element-padding: 1% 1% 1% 1%;
|
||||
option-5-window-padding: 4% 4%;
|
||||
option-5-listview-spacing: 15px;
|
||||
|
||||
prompt-text-font: "Hack Nerd Font 18";
|
||||
prompt-window-height: 300px;
|
||||
prompt-window-width: 627px;
|
||||
prompt-window-border: 2px;
|
||||
prompt-prompt-padding: 20px 30px;
|
||||
prompt-prompt-margin: 8px;
|
||||
prompt-listview-padding: 60px 114px 0px 114px;
|
||||
/* Values bellow are 'no-padding' ones for a size 18 (@prompt-text-font) font,
|
||||
* played around using this character: ■
|
||||
* We then add add 30 actual padding around the text.
|
||||
* -4px -1px -6px -28px */
|
||||
prompt-element-padding: 26px 29px 24px 2px;
|
||||
|
||||
vpn-textbox-prompt-colon-padding: @network-textbox-prompt-colon-padding;
|
||||
}
|
||||
|
||||
#window {
|
||||
width: 980px;
|
||||
height: 230px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Settings used in every rofi option menu:
|
||||
*/
|
||||
#window {
|
||||
children: [ horibox ];
|
||||
}
|
||||
#horibox {
|
||||
children: [ listview ];
|
||||
}
|
||||
#listview {
|
||||
layout: horizontal;
|
||||
}
|
||||
element {
|
||||
padding: 40px 68px 43px 30px;
|
||||
}
|
||||
#window {
|
||||
padding: 20px;
|
||||
}
|
||||
#listview {
|
||||
spacing: 10px;
|
||||
lines: 5;
|
||||
}
|
3
modules/nixos/graphical/rofi/themes/launcher.rasi
Normal file
3
modules/nixos/graphical/rofi/themes/launcher.rasi
Normal file
@ -0,0 +1,3 @@
|
||||
#entry {
|
||||
placeholder: "Launch Program";
|
||||
}
|
1
modules/nixos/graphical/rofi/themes/power.rasi
Normal file
1
modules/nixos/graphical/rofi/themes/power.rasi
Normal file
@ -0,0 +1 @@
|
||||
@import "common.rasi"
|
49
modules/nixos/graphical/rofi/themes/prompt.rasi
Normal file
49
modules/nixos/graphical/rofi/themes/prompt.rasi
Normal file
@ -0,0 +1,49 @@
|
||||
/**
|
||||
* This theme is intended for a 2 items option menu with a headerbar.
|
||||
* https://gitlab.com/vahnrr/rofi-menus/-/blob/b1f0e8a676eda5552e27ef631b0d43e660b23b8e/themes/prompt.rasi
|
||||
*/
|
||||
@import "common.rasi"
|
||||
* {
|
||||
font: @text-font;
|
||||
}
|
||||
#window {
|
||||
height: @prompt-window-height;
|
||||
width: @prompt-window-width;
|
||||
children: [ inputbar, horibox ];
|
||||
border: @prompt-window-border;
|
||||
border-color: @accent;
|
||||
}
|
||||
#inputbar {
|
||||
enabled: false;
|
||||
}
|
||||
#prompt {
|
||||
padding: @prompt-prompt-padding;
|
||||
margin: @prompt-prompt-margin;
|
||||
background-color: @accent;
|
||||
text-color: @background-light;
|
||||
}
|
||||
#listview {
|
||||
padding: @prompt-listview-padding;
|
||||
spacing: @option-5-listview-spacing;
|
||||
lines: 2;
|
||||
}
|
||||
#element {
|
||||
font: @prompt-text-font;
|
||||
padding: @prompt-element-padding;
|
||||
}
|
||||
element.alternate.active,
|
||||
element.normal.active,
|
||||
element.alternate.urgent,
|
||||
element.normal.urgent {
|
||||
background-color: @background-light;
|
||||
text-color: @foreground;
|
||||
}
|
||||
element.selected.urgent {
|
||||
background-color: @off;
|
||||
text-color: @background;
|
||||
}
|
||||
element.selected.active {
|
||||
background-color: @on;
|
||||
text-color: @background;
|
||||
}
|
||||
|
Reference in New Issue
Block a user