From e2e93f227f9962d3d2c80559b34402ed35f9ac84 Mon Sep 17 00:00:00 2001 From: EvilMuffinHa Date: Sat, 21 May 2022 23:13:38 -0400 Subject: [PATCH] rofi power + nvidia settings --- bspwm/bspwmrc | 6 +- scripts/rofi-power-menu | 247 ++++++++++++++++++++++++++++++++++++++++ sxhkd/sxhkdrc | 6 +- xinitrc | 2 +- zsh/zshrc | 1 + 5 files changed, 257 insertions(+), 5 deletions(-) create mode 100755 scripts/rofi-power-menu diff --git a/bspwm/bspwmrc b/bspwm/bspwmrc index 786f4e5..9d95024 100755 --- a/bspwm/bspwmrc +++ b/bspwm/bspwmrc @@ -2,15 +2,15 @@ # monitor setup if [[ $(cat /etc/hostname) == "gojou" ]]; then - bspc monitor DP-1 -d 1 2 3 4 5 101 - bspc monitor HDMI-1 -d 6 7 8 9 102 + bspc monitor DP-0 -d 1 2 3 4 5 101 + bspc monitor HDMI-0 -d 6 7 8 9 102 elif [[ $(cat /etc/hostname) == "uzui" ]]; then bspc monitor -d 1 2 3 4 5 6 7 8 9 101 else bspc monitor -d 1 101 fi -bspc wm -O DP-1 HDMI-1 +bspc wm -O DP-0 HDMI-0 # change window settings diff --git a/scripts/rofi-power-menu b/scripts/rofi-power-menu new file mode 100755 index 0000000..5f46670 --- /dev/null +++ b/scripts/rofi-power-menu @@ -0,0 +1,247 @@ + +#!/usr/bin/env bash + +# This script defines just a mode for rofi instead of being a self-contained +# executable that launches rofi by itself. This makes it more flexible than +# running rofi inside this script as now the user can call rofi as one pleases. +# For instance: +# +# rofi -show powermenu -modi powermenu:./rofi-power-menu +# +# See README.md for more information. + +set -e +set -u + +# All supported choices +all=(shutdown reboot suspend hibernate logout lockscreen) + +# By default, show all (i.e., just copy the array) +show=("${all[@]}") + +declare -A texts +texts[lockscreen]="lock screen" +texts[switchuser]="switch user" +texts[logout]="log out" +texts[suspend]="suspend" +texts[hibernate]="hibernate" +texts[reboot]="reboot" +texts[shutdown]="shut down" + +declare -A icons +icons[lockscreen]="\uf023" +icons[switchuser]="\uf518" +icons[logout]="\uf842" +icons[suspend]="\uf9b1" +icons[hibernate]="\uf7c9" +icons[reboot]="\ufc07" +icons[shutdown]="\uf011" +icons[cancel]="\u00d7" + +declare -A actions +actions[lockscreen]="loginctl lock-session ${XDG_SESSION_ID-}" +#actions[switchuser]="???" +actions[logout]="loginctl terminate-session ${XDG_SESSION_ID-}" +actions[suspend]="systemctl suspend" +actions[hibernate]="systemctl hibernate" +actions[reboot]="systemctl reboot" +actions[shutdown]="systemctl poweroff" + +# By default, ask for confirmation for actions that are irreversible +confirmations=(reboot shutdown logout) + +# By default, no dry run +dryrun=false +showsymbols=true + +function check_valid { + option="$1" + shift 1 + for entry in "${@}" + do + if [ -z "${actions[$entry]+x}" ] + then + echo "Invalid choice in $1: $entry" >&2 + exit 1 + fi + done +} + +# Parse command-line options +parsed=$(getopt --options=h --longoptions=help,dry-run,confirm:,choices:,choose:,symbols,no-symbols --name "$0" -- "$@") +if [ $? -ne 0 ]; then + echo 'Terminating...' >&2 + exit 1 +fi +eval set -- "$parsed" +unset parsed +while true; do + case "$1" in + "-h"|"--help") + echo "rofi-power-menu - a power menu mode for Rofi" + echo + echo "Usage: rofi-power-menu [--choices CHOICES] [--confirm CHOICES]" + echo " [--choose CHOICE] [--dry-run] [--symbols|--no-symbols]" + echo + echo "Use with Rofi in script mode. For instance, to ask for shutdown or reboot:" + echo + echo " rofi -show menu -modi \"menu:rofi-power-menu --choices=shutdown/reboot\"" + echo + echo "Available options:" + echo " --dry-run Don't perform the selected action but print it to stderr." + echo " --choices CHOICES Show only the selected choices in the given order. Use / " + echo " as the separator. Available choices are lockscreen, logout," + echo " suspend, hibernate, reboot and shutdown. By default, all" + echo " available choices are shown." + echo " --confirm CHOICES Require confirmation for the gives choices only. Use / as" + echo " the separator. Available choices are lockscreen, logout," + echo " suspend, hibernate, reboot and shutdown. By default, only" + echo " irreversible actions logout, reboot and shutdown require" + echo " confirmation." + echo " --choose CHOICE Preselect the given choice and only ask for a confirmation" + echo " (if confirmation is set to be requested). It is strongly" + echo " recommended to combine this option with --confirm=CHOICE" + echo " if the choice wouldn't require confirmation by default." + echo " Available choices are lockscreen, logout, suspend," + echo " hibernate, reboot and shutdown." + echo " --[no-]symbols Show Unicode symbols or not. Requires a font with support" + echo " for the symbols. Use, for instance, fonts from the" + echo " Nerdfonts collection. By default, they are shown" + echo " -h,--help Show this help text." + exit 0 + ;; + "--dry-run") + dryrun=true + shift 1 + ;; + "--confirm") + IFS='/' read -ra confirmations <<< "$2" + check_valid "$1" "${confirmations[@]}" + shift 2 + ;; + "--choices") + IFS='/' read -ra show <<< "$2" + check_valid "$1" "${show[@]}" + shift 2 + ;; + "--choose") + # Check that the choice is valid + check_valid "$1" "$2" + selectionID="$2" + shift 2 + ;; + "--symbols") + showsymbols=true + shift 1 + ;; + "--no-symbols") + showsymbols=false + shift 1 + ;; + "--") + shift + break + ;; + *) + echo "Internal error" >&2 + exit 1 + ;; + esac +done + +# Define the messages after parsing the CLI options so that it is possible to +# configure them in the future. + +function write_message { + icon="$1" + text="$2" + if [ "$showsymbols" = "true" ] + then + echo -n "\u200e$icon \u2068$text\u2069" + else + echo -n "$text" + fi +} + +function print_selection { + echo -e "$1" | $(read -r -d '' entry; echo "echo $entry") +} + +declare -A messages +declare -A confirmationMessages +for entry in "${all[@]}" +do + messages[$entry]=$(write_message "${icons[$entry]}" "${texts[$entry]^}") +done +for entry in "${all[@]}" +do + confirmationMessages[$entry]=$(write_message "${icons[$entry]}" "Yes, ${texts[$entry]}") +done +confirmationMessages[cancel]=$(write_message "${icons[cancel]}" "No, cancel") + +if [ $# -gt 0 ] +then + # If arguments given, use those as the selection + selection="${@}" +else + # Otherwise, use the CLI passed choice if given + if [ -n "${selectionID+x}" ] + then + selection="${messages[$selectionID]}" + fi +fi + +# Don't allow custom entries +echo -e "\0no-custom\x1ftrue" +# Use markup +echo -e "\0markup-rows\x1ftrue" + +if [ -z "${selection+x}" ] +then + echo -e "\0prompt\x1fPower menu" + for entry in "${show[@]}" + do + echo -e "${messages[$entry]}\0icon\x1f${icons[$entry]}" + done +else + for entry in "${show[@]}" + do + if [ "$selection" = "$(print_selection "${messages[$entry]}")" ] + then + # Check if the selected entry is listed in confirmation requirements + for confirmation in "${confirmations[@]}" + do + if [ "$entry" = "$confirmation" ] + then + # Ask for confirmation + echo -e "\0prompt\x1fAre you sure" + echo -e "${confirmationMessages[$entry]}\0icon\x1f${icons[$entry]}" + echo -e "${confirmationMessages[cancel]}\0icon\x1f${icons[cancel]}" + exit 0 + fi + done + # If not, then no confirmation is required, so mark confirmed + selection=$(print_selection "${confirmationMessages[$entry]}") + fi + if [ "$selection" = "$(print_selection "${confirmationMessages[$entry]}")" ] + then + if [ $dryrun = true ] + then + # Tell what would have been done + echo "Selected: $entry" >&2 + else + # Perform the action + ${actions[$entry]} + fi + exit 0 + fi + if [ "$selection" = "$(print_selection "${confirmationMessages[cancel]}")" ] + then + # Do nothing + exit 0 + fi + done + # The selection didn't match anything, so raise an error + echo "Invalid selection: $selection" >&2 + exit 1 +fi diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc index ab02768..af5c880 100644 --- a/sxhkd/sxhkdrc +++ b/sxhkd/sxhkdrc @@ -18,6 +18,10 @@ super + @space super + Tab rofi -show-icons -modi window -show +# show power options +super + p + rofi -show-icons -modi p:rofi-power-menu -show p + # toggle compositing super + ctrl + space {pkill picom ,\ @@ -148,7 +152,7 @@ super + {_,shift + }{h,j,k,l} bspc node -{f,s} {west,south,north,east} # focus the node for the given path jump -super + {p,b,comma,period} +super + {shift + p,shift + b,comma,period} bspc node -f @{parent,brother,first,second} # focus the next/previous window in the current desktop diff --git a/xinitrc b/xinitrc index 8091a69..6cf9115 100644 --- a/xinitrc +++ b/xinitrc @@ -1,3 +1,3 @@ -xrandr --output DP-1 --primary +xrandr --output DP-0 --primary xrdb -merge -I/home/emh ~/.config/X11/Xresources exec dbus-launch bspwm diff --git a/zsh/zshrc b/zsh/zshrc index 44ae3b9..5026790 100644 --- a/zsh/zshrc +++ b/zsh/zshrc @@ -14,6 +14,7 @@ alias neofetch='neofetch --kitty $XDG_CONFIG_HOME/neofetch/$(hostname).png --siz alias la='exa -lah --icons' alias ll='exa -lah --icons' alias cat='bat -p --paging=never' +alias tcat="/usr/bin/cat" alias xsecurelock='XSECURELOCK_NO_COMPOSITE=1 XSECURELOCK_AUTH_BACKGROUND_COLOR=$color00 XSECURELOCK_AUTH_FOREGROUND_COLOR=$color07 xsecurelock'