potato
This commit is contained in:
27
hypridle/.config/hypr/hypridle.conf
Normal file
27
hypridle/.config/hypr/hypridle.conf
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||||
|
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||||
|
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 150 # 2.5min.
|
||||||
|
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 300 # 5min
|
||||||
|
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 330 # 5.5min
|
||||||
|
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
||||||
|
on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1800 # 30min
|
||||||
|
on-timeout = systemctl suspend # suspend pc
|
||||||
|
}
|
||||||
@@ -35,6 +35,8 @@ monitor= DP-1, 5120x1440@120, 0x0, 1
|
|||||||
$terminal = kitty
|
$terminal = kitty
|
||||||
$fileManager = comsic-files
|
$fileManager = comsic-files
|
||||||
$menu = rofi -show drun -theme rounded-purple-dark
|
$menu = rofi -show drun -theme rounded-purple-dark
|
||||||
|
$windowSwitcher = rofi -show window -theme rounded-purple-dark
|
||||||
|
$powerMenu = rofi -show power-menu -modi power-menu:rofi-power-menu -theme rounded-purple-dark
|
||||||
|
|
||||||
|
|
||||||
#################
|
#################
|
||||||
@@ -44,9 +46,14 @@ $menu = rofi -show drun -theme rounded-purple-dark
|
|||||||
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
# Or execute your favorite apps at launch like this:
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
exec-once = waybar & hyprpaper
|
exec-once = waybar
|
||||||
|
exec-once = hyprpaper
|
||||||
|
exec-once = hypridle
|
||||||
exec-once = systemctl --user start polkit-gnome
|
exec-once = systemctl --user start polkit-gnome
|
||||||
|
|
||||||
|
exec-once = [workspace 3] steam
|
||||||
|
exec-once = [workspace 4] flatpak run com.discordapp.Discord
|
||||||
|
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
### ENVIRONMENT VARIABLES ###
|
### ENVIRONMENT VARIABLES ###
|
||||||
@@ -56,7 +63,7 @@ exec-once = systemctl --user start polkit-gnome
|
|||||||
|
|
||||||
env = XCURSOR_SIZE,24
|
env = XCURSOR_SIZE,24
|
||||||
env = HYPRCURSOR_SIZE,24
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
env = PATH,$PATH:$HOME/.local/bin
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
### LOOK AND FEEL ###
|
### LOOK AND FEEL ###
|
||||||
@@ -181,7 +188,7 @@ input {
|
|||||||
kb_options =
|
kb_options =
|
||||||
kb_rules =
|
kb_rules =
|
||||||
|
|
||||||
follow_mouse = 2
|
follow_mouse = 1
|
||||||
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
@@ -197,6 +204,12 @@ device {
|
|||||||
sensitivity = -0.5
|
sensitivity = -0.5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = bastard-keyboards-charybdis-(4x6)-splinky-mouse
|
||||||
|
sensitivity = -0.80
|
||||||
|
accel_profile = adaptive
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
### KEYBINDINGS ###
|
### KEYBINDINGS ###
|
||||||
|
|||||||
223
hyprland/.config/hypr/hyprland.conf.save
Normal file
223
hyprland/.config/hypr/hyprland.conf.save
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
|
||||||
|
# #######################################################################################
|
||||||
|
# AUTOGENERATED HYPRLAND CONFIG.
|
||||||
|
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT,
|
||||||
|
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
|
||||||
|
# #######################################################################################
|
||||||
|
|
||||||
|
# This is an example Hyprland config file.
|
||||||
|
# Refer to the wiki for more information.
|
||||||
|
# https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
|
# Please note not all available settings / options are set here.
|
||||||
|
# For a full list, see the wiki
|
||||||
|
|
||||||
|
# You can split this configuration into multiple files
|
||||||
|
# Create your files separately and then link them to this file like this:
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
monitor= DP-1, 5120x1440@120, 0x0, 1
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = kitty
|
||||||
|
$fileManager = comsic-files
|
||||||
|
$menu = rofi -show drun -theme rounded-purple-dark
|
||||||
|
$windowSwitcher = rofi -show window -theme rounded-purple-dark
|
||||||
|
$powerMenu = rofi -show power-menu -modi power-menu:rofi-power-menu -theme rounded-purple-dark
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
|
exec-once = waybar
|
||||||
|
exec-once = hyprpaper
|
||||||
|
exec-once = hypridle
|
||||||
|
exec-once = systemctl --user start polkit-gnome
|
||||||
|
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
env = PATH,$PATH:$HOME/.local/bin
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||||
|
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 10
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 1.0
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = yes, please :)
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = easeOutQuint,0.23,1,0.32,1
|
||||||
|
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||||
|
bezier = linear,0,0,1,1
|
||||||
|
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||||
|
bezier = quick,0.15,0,0.1,1
|
||||||
|
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||||
|
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||||
|
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||||
|
|
||||||
|
# windowrulev2 = opacity 1 .9, title:(Jellyfin Media Player)
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
source = ~/.config/hypr/keybinds.conf
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
|
windowrulev2 = suppressevent maximize, class:.*
|
||||||
|
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||||
|
|
||||||
@@ -12,6 +12,8 @@ bind = $mainMod, V, togglefloating,
|
|||||||
bind = $mainMod, R, exec, $menu
|
bind = $mainMod, R, exec, $menu
|
||||||
bind = $mainMod, P, pseudo, # dwindle
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
bind = $mainMod, J, togglesplit, # dwindle
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
bind = ALT, TAB, exec, $windowSwitcher
|
||||||
|
bind = $mainMod, F12, exec, $powerMenu
|
||||||
|
|
||||||
# Move focus with mainMod + arrow keys
|
# Move focus with mainMod + arrow keys
|
||||||
bind = $mainMod, left, movefocus, l
|
bind = $mainMod, left, movefocus, l
|
||||||
|
|||||||
24
hyprlock/.config/hypr/hyprlock.conf
Normal file
24
hyprlock/.config/hypr/hyprlock.conf
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
background {
|
||||||
|
monitor = DP-1
|
||||||
|
path = $HOME/.config/hypr/backgrounds/mask.jpg
|
||||||
|
blur_passes = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor = DP-1
|
||||||
|
size = 20%, 5%
|
||||||
|
outline_thickness = 3
|
||||||
|
inner_color = rgba(0, 0, 0, 1.0) # no fill
|
||||||
|
|
||||||
|
outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
check_color=rgba(00ff99ee) rgba(ff6633ee) 120deg
|
||||||
|
fail_color=rgba(ff6633ee) rgba(ff0066ee) 40deg
|
||||||
|
|
||||||
|
font_color = rgb(143, 143, 143)
|
||||||
|
fade_on_empty = false
|
||||||
|
rounding = 15
|
||||||
|
|
||||||
|
position = 0, -150
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 467 KiB After Width: | Height: | Size: 1.1 MiB |
@@ -71,6 +71,7 @@ element {
|
|||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
spacing: 8px;
|
spacing: 8px;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
|
children: [element-icon, element-text];
|
||||||
}
|
}
|
||||||
|
|
||||||
element normal active {
|
element normal active {
|
||||||
|
|||||||
20
rofi/.local/bin/dmenu-power-menu
Executable file
20
rofi/.local/bin/dmenu-power-menu
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Simple stand-alone wrapper for rofi-power-menu.
|
||||||
|
#
|
||||||
|
# This script takes the same CLI arguments as rofi-power-menu.
|
||||||
|
#
|
||||||
|
# rofi-script-to-dmenu needs to be installed
|
||||||
|
|
||||||
|
# Use local rofi-power-menu if present. This makes developing easier.
|
||||||
|
command -v ./rofi-power-menu >/dev/null
|
||||||
|
powermenu_exists=$?
|
||||||
|
if [ $powermenu_exists -eq 0 ]
|
||||||
|
then
|
||||||
|
powermenu="./rofi-power-menu"
|
||||||
|
else
|
||||||
|
powermenu="rofi-power-menu"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmd="$powermenu $@"
|
||||||
|
rofi-script-to-dmenu "$cmd"
|
||||||
280
rofi/.local/bin/rofi-power-menu
Executable file
280
rofi/.local/bin/rofi-power-menu
Executable file
@@ -0,0 +1,280 @@
|
|||||||
|
#!/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]="\Uf033e"
|
||||||
|
icons[switchuser]="\Uf0019"
|
||||||
|
icons[logout]="\Uf0343"
|
||||||
|
icons[suspend]="\Uf04b2"
|
||||||
|
icons[hibernate]="\Uf02ca"
|
||||||
|
icons[reboot]="\Uf0709"
|
||||||
|
icons[shutdown]="\Uf0425"
|
||||||
|
icons[cancel]="\Uf0156"
|
||||||
|
|
||||||
|
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
|
||||||
|
showtext=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,text,no-text,symbols-font: --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,"
|
||||||
|
echo " logout,suspend, hibernate, reboot and shutdown. By"
|
||||||
|
echo " default, all 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"
|
||||||
|
echo " confirmation (if confirmation is set to be requested). It"
|
||||||
|
echo " is strongly recommended to combine this option with"
|
||||||
|
echo " --confirm=CHOICE if the choice wouldn't require"
|
||||||
|
echo " confirmation by default. Available choices are"
|
||||||
|
echo " lockscreen, logout, suspend, hibernate, reboot and"
|
||||||
|
echo " 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 " --[no-]text Show text description or not."
|
||||||
|
echo " --symbols-font FONT Use the given font for symbols. By default, the symbols"
|
||||||
|
echo " use the same font as the text. That font is configured"
|
||||||
|
echo " with rofi."
|
||||||
|
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
|
||||||
|
;;
|
||||||
|
"--text")
|
||||||
|
showtext=true
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
"--no-text")
|
||||||
|
showtext=false
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
"--symbols-font")
|
||||||
|
symbols_font="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
"--")
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Internal error" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$showsymbols" = "false" -a "$showtext" = "false" ]
|
||||||
|
then
|
||||||
|
echo "Invalid options: cannot have --no-symbols and --no-text enabled at the same time." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define the messages after parsing the CLI options so that it is possible to
|
||||||
|
# configure them in the future.
|
||||||
|
|
||||||
|
function write_message {
|
||||||
|
if [ -z ${symbols_font+x} ];
|
||||||
|
then
|
||||||
|
icon="<span font_size=\"medium\">$1</span>"
|
||||||
|
else
|
||||||
|
icon="<span font=\"${symbols_font}\" font_size=\"medium\">$1</span>"
|
||||||
|
fi
|
||||||
|
text="<span font_size=\"medium\">$2</span>"
|
||||||
|
if [ "$showsymbols" = "true" ]
|
||||||
|
then
|
||||||
|
if [ "$showtext" = "true" ]
|
||||||
|
then
|
||||||
|
echo -n "\u200e$icon \u2068$text\u2069"
|
||||||
|
else
|
||||||
|
echo -n "\u200e$icon"
|
||||||
|
fi
|
||||||
|
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
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
"cpu",
|
"cpu",
|
||||||
"memory",
|
"memory",
|
||||||
"temperature",
|
"temperature",
|
||||||
"clock"
|
"clock",
|
||||||
|
"custom/power",
|
||||||
],
|
],
|
||||||
"hyprland/window": {
|
"hyprland/window": {
|
||||||
"format": "{}",
|
"format": "{}",
|
||||||
@@ -80,5 +81,9 @@
|
|||||||
},
|
},
|
||||||
"tray": {
|
"tray": {
|
||||||
"spacing": 10
|
"spacing": 10
|
||||||
|
},
|
||||||
|
"custom/power": {
|
||||||
|
"format": "⏻",
|
||||||
|
"on-click": "rofi -show power-menu -modi power-menu:rofi-power-menu -theme rounded-purple-dark",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,12 @@ button:hover {
|
|||||||
color: @sapphire;
|
color: @sapphire;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#custom-power {
|
||||||
|
color: @green;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes blink {
|
@keyframes blink {
|
||||||
to {
|
to {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
|
|||||||
Reference in New Issue
Block a user