mirror of
https://github.com/nmasur/dotfiles
synced 2024-11-26 14:15:36 +00:00
rofi power menu
This commit is contained in:
parent
a13083a264
commit
d6611ca7a2
@ -25,6 +25,10 @@
|
|||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
description = "Command to hide and show the status bar.";
|
description = "Command to hide and show the status bar.";
|
||||||
};
|
};
|
||||||
|
powerCommand = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Command to use for power options menu";
|
||||||
|
};
|
||||||
wallpaper = lib.mkOption {
|
wallpaper = lib.mkOption {
|
||||||
type = lib.types.path;
|
type = lib.types.path;
|
||||||
description = "Wallpaper background image file";
|
description = "Wallpaper background image file";
|
||||||
|
@ -119,6 +119,8 @@ in {
|
|||||||
"${modifier}+Shift+a" =
|
"${modifier}+Shift+a" =
|
||||||
"exec --no-startup-id ${config.audioSwitchCommand}";
|
"exec --no-startup-id ${config.audioSwitchCommand}";
|
||||||
"Mod1+Tab" = "exec --no-startup-id ${config.altTabCommand}";
|
"Mod1+Tab" = "exec --no-startup-id ${config.altTabCommand}";
|
||||||
|
"${modifier}+Shift+period" =
|
||||||
|
"exec --no-startup-id ${config.powerCommand}";
|
||||||
"${modifier}+Shift+c" = "reload";
|
"${modifier}+Shift+c" = "reload";
|
||||||
"${modifier}+Shift+r" = "restart";
|
"${modifier}+Shift+r" = "restart";
|
||||||
"${modifier}+Shift+q" = ''
|
"${modifier}+Shift+q" = ''
|
||||||
|
@ -6,6 +6,8 @@ let
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
|
imports = [ ./rofi/power.nix ];
|
||||||
|
|
||||||
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
|
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
|
||||||
|
|
||||||
# Set the Rofi-Systemd terminal for viewing logs
|
# Set the Rofi-Systemd terminal for viewing logs
|
||||||
@ -78,7 +80,7 @@ in {
|
|||||||
placeholder-color = mkLiteral config.theme.colors.base03;
|
placeholder-color = mkLiteral config.theme.colors.base03;
|
||||||
expand = true;
|
expand = true;
|
||||||
horizontal-align = "0";
|
horizontal-align = "0";
|
||||||
placeholder = "Launch Program";
|
placeholder = "";
|
||||||
padding = mkLiteral "0px 0px 0px 5px";
|
padding = mkLiteral "0px 0px 0px 5px";
|
||||||
blink = true;
|
blink = true;
|
||||||
};
|
};
|
||||||
@ -147,12 +149,20 @@ in {
|
|||||||
show-icons = true;
|
show-icons = true;
|
||||||
kb-cancel = "Escape,Super+space";
|
kb-cancel = "Escape,Super+space";
|
||||||
modi = "window,run,ssh,emoji,calc,systemd";
|
modi = "window,run,ssh,emoji,calc,systemd";
|
||||||
|
sort = true;
|
||||||
|
# levenshtein-sort = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.file.".local/share/rofi/themes" = {
|
||||||
|
recursive = true;
|
||||||
|
source = ./rofi/themes;
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
launcherCommand = "${rofi}/bin/rofi -modes drun -show drun";
|
launcherCommand = ''
|
||||||
|
${rofi}/bin/rofi -modes drun -show drun -theme-str '@import "launcher.rasi"' '';
|
||||||
systemdSearch = "${pkgs.rofi-systemd}/bin/rofi-systemd";
|
systemdSearch = "${pkgs.rofi-systemd}/bin/rofi-systemd";
|
||||||
altTabCommand = "${rofi}/bin/rofi -show window -modi window";
|
altTabCommand = "${rofi}/bin/rofi -show window -modi window";
|
||||||
audioSwitchCommand = "${
|
audioSwitchCommand = "${
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user