mirror of
				https://github.com/nmasur/dotfiles
				synced 2025-10-31 21:23:16 +00:00 
			
		
		
		
	rofi power menu
This commit is contained in:
		| @@ -25,6 +25,10 @@ | ||||
|       type = lib.types.str; | ||||
|       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 { | ||||
|       type = lib.types.path; | ||||
|       description = "Wallpaper background image file"; | ||||
|   | ||||
| @@ -119,6 +119,8 @@ in { | ||||
|             "${modifier}+Shift+a" = | ||||
|               "exec --no-startup-id ${config.audioSwitchCommand}"; | ||||
|             "Mod1+Tab" = "exec --no-startup-id ${config.altTabCommand}"; | ||||
|             "${modifier}+Shift+period" = | ||||
|               "exec --no-startup-id ${config.powerCommand}"; | ||||
|             "${modifier}+Shift+c" = "reload"; | ||||
|             "${modifier}+Shift+r" = "restart"; | ||||
|             "${modifier}+Shift+q" = '' | ||||
|   | ||||
| @@ -6,6 +6,8 @@ let | ||||
|  | ||||
| in { | ||||
|  | ||||
|   imports = [ ./rofi/power.nix ]; | ||||
|  | ||||
|   config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) { | ||||
|  | ||||
|     # Set the Rofi-Systemd terminal for viewing logs | ||||
| @@ -78,7 +80,7 @@ in { | ||||
|             placeholder-color = mkLiteral config.theme.colors.base03; | ||||
|             expand = true; | ||||
|             horizontal-align = "0"; | ||||
|             placeholder = "Launch Program"; | ||||
|             placeholder = ""; | ||||
|             padding = mkLiteral "0px 0px 0px 5px"; | ||||
|             blink = true; | ||||
|           }; | ||||
| @@ -147,12 +149,20 @@ in { | ||||
|           show-icons = true; | ||||
|           kb-cancel = "Escape,Super+space"; | ||||
|           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"; | ||||
|     altTabCommand = "${rofi}/bin/rofi -show window -modi window"; | ||||
|     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; | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user