summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorivan-boikov <ik.boikov.public@protonmail.com>2022-05-22 18:11:15 +0200
committerivan-boikov <ik.boikov.public@protonmail.com>2022-05-22 18:11:15 +0200
commit688f02cc56104ef13dc923ee86c9801cecf0f759 (patch)
tree850a13167c7bdbc6f3be9bc6d2877090b2065805 /scripts
parent832badeaff2a74f19416f5fe637985ff93105423 (diff)
updated scripts
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/.local/bin/checkpipewire1
-rwxr-xr-xscripts/.local/bin/checkvideodriver1
-rwxr-xr-xscripts/.local/bin/checkzwap1
-rwxr-xr-xscripts/.local/bin/dcpug18
-rwxr-xr-xscripts/.local/bin/dkill2
-rwxr-xr-xscripts/.local/bin/dmnt26
-rwxr-xr-xscripts/.local/bin/dpass2
-rwxr-xr-xscripts/.local/bin/importvpn3
-rwxr-xr-xscripts/.local/bin/pinentry-wrapper10
-rwxr-xr-xscripts/.local/bin/smbscan60
-rwxr-xr-xscripts/.local/bin/statusbar/sb-battery30
-rwxr-xr-xscripts/.local/bin/statusbar/sb-clock30
-rwxr-xr-xscripts/.local/bin/statusbar/sb-cpu11
-rwxr-xr-xscripts/.local/bin/statusbar/sb-internet8
-rwxr-xr-xscripts/.local/bin/statusbar/sb-iplocate2
-rwxr-xr-xscripts/.local/bin/statusbar/sb-mailbox6
-rwxr-xr-xscripts/.local/bin/statusbar/sb-nettraf2
-rwxr-xr-xscripts/.local/bin/statusbar/sb-volume10
-rwxr-xr-xscripts/.local/bin/sysact26
19 files changed, 150 insertions, 99 deletions
diff --git a/scripts/.local/bin/checkpipewire b/scripts/.local/bin/checkpipewire
new file mode 100755
index 0000000..33af0d4
--- /dev/null
+++ b/scripts/.local/bin/checkpipewire
@@ -0,0 +1 @@
+LANG=C pactl info | grep "Server Name"
diff --git a/scripts/.local/bin/checkvideodriver b/scripts/.local/bin/checkvideodriver
new file mode 100755
index 0000000..935cf00
--- /dev/null
+++ b/scripts/.local/bin/checkvideodriver
@@ -0,0 +1 @@
+lshw -c video
diff --git a/scripts/.local/bin/checkzwap b/scripts/.local/bin/checkzwap
new file mode 100755
index 0000000..25bae37
--- /dev/null
+++ b/scripts/.local/bin/checkzwap
@@ -0,0 +1 @@
+sudo grep -R . /sys/kernel/debug/zswap
diff --git a/scripts/.local/bin/dcpug b/scripts/.local/bin/dcpug
new file mode 100755
index 0000000..7d4720b
--- /dev/null
+++ b/scripts/.local/bin/dcpug
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+dmenu="$(command -v cdmenu)"
+if [ "$dmenu" == "" ]; then
+ dmenu="dmenu"
+fi
+
+sudo="$(command -v sudo)"
+if [ "$sudo" == "" ]; then
+ sudo="doas"
+fi
+
+profiles="$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors | sed 's/ /\\n/g')"
+
+profile=$(printf $profiles | $dmenu)
+
+notify-send "Set CPU profile: $profile"
+$sudo cpupower frequency-set --governor $profile
diff --git a/scripts/.local/bin/dkill b/scripts/.local/bin/dkill
index 3e0b7ea..e3aca22 100755
--- a/scripts/.local/bin/dkill
+++ b/scripts/.local/bin/dkill
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# dmenu theming
-dmenu="cdmenu"
+dmenu="$HOME/.local/bin/cdmenu"
lines="-l 30"
selected="$(ps -a -u $USER | \
diff --git a/scripts/.local/bin/dmnt b/scripts/.local/bin/dmnt
index 46ec57c..fb615fc 100755
--- a/scripts/.local/bin/dmnt
+++ b/scripts/.local/bin/dmnt
@@ -2,7 +2,7 @@
#TODO: GET RID OF GLOBAL VARIABLES LIKE chosen
#shopt -s expand_aliases
-dmenu="cdmenu"
+dmenu="$HOME/.local/bin/cdmenu"
getmount() { \
[ -z "$chosen" ] && exit 1
@@ -10,8 +10,8 @@ getmount() { \
mp="$(find $1 2>/dev/null | "$dmenu" -l 30 -i -p "Type in mount point.")" || exit 1
[ "$mp" = "" ] && exit 1
if [ ! -d "$mp" ]; then
- mkdiryn=$(printf "No\\nYes" | "$dmenu" -i -p "$mp does not exist. Create it?") || exit 1
- [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
+ mkdiryn=$(printf "No\nYes" | "$dmenu" -i -p "$mp does not exist. Create it?") || exit 1
+ [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || doas mkdir -p "$mp")
fi
}
@@ -21,24 +21,24 @@ mountusb() { \
# *crypto_LUKS*)
#;;
#esac
- #sudo -A mount "$1" 2>/dev/null && notify-send "USB mounting" "$1 mounted." && exit 0
- sudo -A mount "$1" 2>/dev/null && notify-send "$1 mounted" "" && exit 0
+ #doas mount "$1" 2>/dev/null && notify-send "USB mounting" "$1 mounted." && exit 0
+ doas mount "$1" 2>/dev/null && notify-send "$1 mounted" "" && exit 0
alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
getmount "/mnt /media -maxdepth 1 -type d $alreadymounted"
partitiontype="$(lsblk -no "fstype" "$1")"
case "$partitiontype" in
- "vfat") sudo -A mount -t vfat "$1" "$mp" -o rw,umask=0000;;
- "exfat") sudo -A mount "$1" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
+ "vfat") doas mount -t vfat "$1" "$mp" -o rw,umask=0000;;
+ "exfat") doas mount "$1" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
*crypto_LUKS*)
name="$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 16)"
mkfifo fifo
dpass > fifo &
- sudo cryptsetup open --type luks "$1" "$name" --key-file fifo
+ doas cryptsetup open --type luks "$1" "$name" --key-file fifo
rm fifo
device="/dev/mapper/$name"
- sudo -A mount "$device" "$mp"
+ doas mount "$device" "$mp"
;;
- *) sudo -A mount "$1" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
+ *) doas mount "$1" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; doas chown "$user":"$ug" "$mp";;
esac
notify-send "$1 mounted to $mp." ""
}
@@ -55,7 +55,7 @@ mountsamba() { \
getmount "/mnt -maxdepth 1 -type d"
user=$(echo $(whoami) | $dmenu -i -p "Input user name for $1:")
pass=$(pass-askpass "Input password for user \"$user\" for share $1")
- sudo -A mount -t cifs -o user="$user",password="$pass",iocharset=utf8,uid=$(id -u),gid=$(id -g),file_mode=0644,dir_mode=0755 "$1" "$mp"
+ doas mount -t cifs -o user="$user",password="$pass",iocharset=utf8,uid=$(id -u),gid=$(id -g),file_mode=0644,dir_mode=0755 "$1" "$mp"
if [ $? -ne 0 ]; then
notify-send -u critical "Samba mounting" "Failed to mount $1 to $mp as $user"
exit 1
@@ -64,7 +64,7 @@ mountsamba() { \
}
unmountdev() { \
- result=$(sudo -A umount "$1" 2>&1)
+ result=$(doas umount "$1" 2>&1)
if [ -z "$result" ]; then
notify-send "Unmount device" "$1 unmounted"
return
@@ -89,7 +89,7 @@ selectusb() { \
chosen=$(lsblk -lpo "vendor,model,name,label,size,mountpoint" | "$dmenu" -l 30 | xargs | cut -d' ' -f 1)
# if mounted
if [ ! -z "$(grep $chosen "/etc/mtab")" ] ; then
- choice=$(echo "No\nYes" | "$dmenu" -l 2 -p "Partition is mounted. Unmount?")
+ choice=$(echo -e "No\nYes" | "$dmenu" -l 2 -p "Partition is mounted. Unmount?")
case $choice in
Yes) unmountdev $chosen ;;
No) exit ;;
diff --git a/scripts/.local/bin/dpass b/scripts/.local/bin/dpass
index 9f187ff..e8864d6 100755
--- a/scripts/.local/bin/dpass
+++ b/scripts/.local/bin/dpass
@@ -36,7 +36,7 @@ fi
if [[ -n $WAYLAND_DISPLAY ]]; then
dmenu=dmenu-wl
elif [[ -n $DISPLAY ]]; then
- dmenu=cdmenu
+ dmenu="$HOME/.local/bin/cdmenu"
else
echo "Error: No Wayland or X11 display detected" >&2
exit 1
diff --git a/scripts/.local/bin/importvpn b/scripts/.local/bin/importvpn
new file mode 100755
index 0000000..7a753fb
--- /dev/null
+++ b/scripts/.local/bin/importvpn
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+nmcli connection import type openvpn file "$1"
diff --git a/scripts/.local/bin/pinentry-wrapper b/scripts/.local/bin/pinentry-wrapper
new file mode 100755
index 0000000..febdbe2
--- /dev/null
+++ b/scripts/.local/bin/pinentry-wrapper
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+case "${PINENTRY_USER_DATA-}" in
+ *USE_TTY=1*)
+ exec pinentry-tty "$@"
+ ;;
+ *)
+ exec /usr/bin/pinentry "$@"
+ ;;
+esac
diff --git a/scripts/.local/bin/smbscan b/scripts/.local/bin/smbscan
new file mode 100755
index 0000000..c0de47d
--- /dev/null
+++ b/scripts/.local/bin/smbscan
@@ -0,0 +1,60 @@
+#!/bin/sh
+# props to https://andreafortuna.org/2016/08/08/simple-smb-scanner-with-a-single-line-of-shell/
+# plus some tweaks from me
+
+dmenu=cdmenu
+
+subnet=$1
+if [ -z $subnet ]; then
+ echo "No subnet specified, using local..."
+ IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
+ subnet="$(echo $IP | cut -d. -f1-3).*"
+ echo "Scanning subnet $subnet"
+fi
+
+scan() {
+ nmap $1 -p 445 --open -oG - | grep "Host:" | cut -d " " -f 2 | uniq | xargs -I '{}' sh -c 'echo "Scan {}";echo "---------";smbclient -L//{} -N'
+}
+#scanresult=$(scan)
+
+scanresult="""Scan 192.168.70.1
+---------
+
+ Sharename Type Comment
+ --------- ---- -------
+ print$ Disk Printer Drivers
+ public Disk
+ IPC$ IPC IPC Service (Samba 4.13.13-Debian)
+SMB1 disabled -- no workgroup available
+Scan 192.168.70.3
+---------
+
+ Sharename Type Comment
+ --------- ---- -------
+ print$ Disk Printer Drivers
+ IPC$ IPC IPC Service (Samba 4.13.14-Debian)
+SMB1 disabled -- no workgroup available"""
+
+printf "$scanresult\n"
+
+IPs=$(echo "$scanresult" | grep Scan | cut -d' ' -f2-)
+printf "Server IPs:\n$IPs\n"
+
+IP=$(printf "$IPs" | $dmenu -l 64)
+echo "Selected $IP"
+
+shares="""$(scan $IP)"""
+printf "Shares:\n$shares\n"
+# cut off header from smbclient with tail and warning about SMB1 with head
+shares=$(printf "$shares" | tail -n +6 | head -n -1)
+printf "Filtered shares:\n$shares\n"
+
+share=$(printf "$shares" | $dmenu -l 64 -p "Select share to mount" | tr -s " ")
+printf "$share"
+
+share=$(echo $share | cut -d' ' -f 1)
+echo $share
+
+user=$(: | $dmenu -i -p "Input user name:")
+
+mount -t cifs -o user="$user" //"$IP"/"$share" <MOUNT POINT>
diff --git a/scripts/.local/bin/statusbar/sb-battery b/scripts/.local/bin/statusbar/sb-battery
index 93cbe08..04a3cf7 100755
--- a/scripts/.local/bin/statusbar/sb-battery
+++ b/scripts/.local/bin/statusbar/sb-battery
@@ -1,20 +1,6 @@
#!/bin/sh
-# Prints all batteries, their percentage remaining and an emoji corresponding
-# to charge status (🔌 for plugged up, 🔋 for discharging on battery, etc.).
-
-case $BLOCK_BUTTON in
- 3) notify-send "🔋 Battery module" "🔋: discharging
-🛑: not charging
-♻: stagnant charge
-🔌: charging
-⚡: charged
-❗: battery very low!
-- Scroll to change adjust xbacklight." ;;
- 4) xbacklight -inc 10 ;;
- 5) xbacklight -dec 10 ;;
- 6) "$TERMINAL" -e "$EDITOR" "$0" ;;
-esac
+# Prints all batteries, their percentage remaining
# Loop through all attached batteries and format the info
for battery in /sys/class/power_supply/BAT?*; do
@@ -22,16 +8,16 @@ for battery in /sys/class/power_supply/BAT?*; do
[ -n "${capacity+x}" ] && printf " "
# Sets up the status and capacity
case "$(cat "$battery/status" 2>&1)" in
- "Full") status="⚡" ;;
- "Discharging") status="🔋" ;;
- "Charging") status="🔌" ;;
- "Not charging") status="🛑" ;;
- "Unknown") status="♻️" ;;
+ "Full") status="F" ;;
+ "Discharging") status="-" ;;
+ "Charging") status="+" ;;
+ "Not charging") status="" ;;
+ "Unknown") status="?" ;;
*) exit 1 ;;
esac
capacity="$(cat "$battery/capacity" 2>&1)"
# Will make a warn variable if discharging and low
- [ "$status" = "🔋" ] && [ "$capacity" -le 25 ] && warn="❗"
+ [ "$status" = "D" ] && [ "$capacity" -le 25 ] && warn="!!!"
# Prints the info
- printf "%s%s%d%%" "$status" "$warn" "$capacity"; unset warn
+ printf "%d%%%s%s" "$capacity" "$status" "$warn" ; unset warn
done && printf "\\n"
diff --git a/scripts/.local/bin/statusbar/sb-clock b/scripts/.local/bin/statusbar/sb-clock
index 33f5b25..e6fbb6b 100755
--- a/scripts/.local/bin/statusbar/sb-clock
+++ b/scripts/.local/bin/statusbar/sb-clock
@@ -1,31 +1,3 @@
#!/bin/sh
-clock=$(date '+%I')
-
-#case "$clock" in
-# "00") icon="🕛" ;;
-# "01") icon="🕐" ;;
-# "02") icon="🕑" ;;
-# "03") icon="🕒" ;;
-# "04") icon="🕓" ;;
-# "05") icon="🕔" ;;
-# "06") icon="🕕" ;;
-# "07") icon="🕖" ;;
-# "08") icon="🕗" ;;
-# "09") icon="🕘" ;;
-# "10") icon="🕙" ;;
-# "11") icon="🕚" ;;
-# "12") icon="🕛" ;;
-#esac
-#
-#case $BLOCK_BUTTON in
-# 1) notify-send "This Month" "$(cal --color=always | sed "s/..7m/<b><span color=\"red\">/;s/..27m/<\/span><\/b>/")" && notify-send "Appointments" "$(calcurse -d3)" ;;
-# 2) setsid -f "$TERMINAL" -e calcurse ;;
-# 3) notify-send "📅 Time/date module" "\- Left click to show upcoming appointments for the next three days via \`calcurse -d3\` and show the month via \`cal\`
-#- Middle click opens calcurse if installed" ;;
-# 6) "$TERMINAL" -e "$EDITOR" "$0" ;;
-#esac
-
-#date "+%Y %b %d (%a) $icon%I:%M%p"
-
-date "+%d/%m/%Y (%a) %H:%M:%S"
+date "+%d/%m/%y %a %H:%M:%S"
diff --git a/scripts/.local/bin/statusbar/sb-cpu b/scripts/.local/bin/statusbar/sb-cpu
index 1572b52..4594826 100755
--- a/scripts/.local/bin/statusbar/sb-cpu
+++ b/scripts/.local/bin/statusbar/sb-cpu
@@ -1,12 +1,3 @@
#!/bin/sh
-case $BLOCK_BUTTON in
- 1) notify-send "🖥 CPU hogs" "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)\\n(100% per core)" ;;
- 2) setsid -f "$TERMINAL" -e htop ;;
- 3) notify-send "🖥 CPU module " "\- Shows CPU temperature.
-- Click to show intensive processes.
-- Middle click to open htop." ;;
- 6) "$TERMINAL" -e "$EDITOR" "$0" ;;
-esac
-
-sensors | awk '/Core 0/ {print "🌡" $3}'
+sensors | awk '/CPU:/ {print $2}' | sed 's/....$//'
diff --git a/scripts/.local/bin/statusbar/sb-internet b/scripts/.local/bin/statusbar/sb-internet
index 94b7da2..e342345 100755
--- a/scripts/.local/bin/statusbar/sb-internet
+++ b/scripts/.local/bin/statusbar/sb-internet
@@ -4,6 +4,8 @@
# Show 🌐 if connected to ethernet or ❎ if none.
# Show 🔒 if a vpn connection is active
+# EDIT: NO CRINGEY EMOJI
+
case $BLOCK_BUTTON in
1) "$TERMINAL" -e nmtui; pkill -RTMIN+4 dwmblocks ;;
3) notify-send "🌐 Internet module" "\- Click to connect
@@ -18,9 +20,9 @@ case $BLOCK_BUTTON in
esac
if grep -xq 'up' /sys/class/net/w*/operstate 2>/dev/null ; then
- wifiicon="$(awk '/^\s*w/ { print "📶", int($3 * 100 / 70) "% " }' /proc/net/wireless)"
+ wifiicon="$(awk '/^\s*w/ { print "W" int($3 * 100 / 70) }' /proc/net/wireless)"
elif grep -xq 'down' /sys/class/net/w*/operstate 2>/dev/null ; then
- grep -xq '0x1003' /sys/class/net/w*/flags && wifiicon="📡 " || wifiicon="❌ "
+ grep -xq '0x1003' /sys/class/net/w*/flags && wifiicon="X" || wifiicon="X"
fi
-printf "%s%s%s\n" "$wifiicon" "$(sed "s/down/❎/;s/up/🌐/" /sys/class/net/e*/operstate 2>/dev/null)" "$(sed "s/.*/🔒/" /sys/class/net/tun*/operstate 2>/dev/null)"
+printf "%s%s%s\n" "$(sed "s/.*/V/" /sys/class/net/tun*/operstate 2>/dev/null)" "$(sed "s/down/X/;s/up/E/" /sys/class/net/e*/operstate 2>/dev/null)" "$wifiicon"
diff --git a/scripts/.local/bin/statusbar/sb-iplocate b/scripts/.local/bin/statusbar/sb-iplocate
index 2c70b08..ab89ffd 100755
--- a/scripts/.local/bin/statusbar/sb-iplocate
+++ b/scripts/.local/bin/statusbar/sb-iplocate
@@ -9,7 +9,7 @@
#addr="$(curl ifconfig.me 2>/dev/null)" || exit
#grep "flag: " "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji" | grep "$(geoiplookup "$addr" | sed 's/.*, //')" | sed "s/flag: //;s/;.*//"
-locaddr=$(hostname -I | awk '{print $1}')
+locaddr=$(hostname -i | awk '{print $1}')
echo $locaddr
case $BLOCK_BUTTON in
diff --git a/scripts/.local/bin/statusbar/sb-mailbox b/scripts/.local/bin/statusbar/sb-mailbox
index 2132184..13e152f 100755
--- a/scripts/.local/bin/statusbar/sb-mailbox
+++ b/scripts/.local/bin/statusbar/sb-mailbox
@@ -3,6 +3,8 @@
# Displays number of unread mail and an loading icon if updating.
# When clicked, brings up `neomutt`.
+# ivan: removed gay emoji
+
case $BLOCK_BUTTON in
1) setsid -f "$TERMINAL" -e neomutt ;;
2) setsid -f mw -Y >/dev/null ;;
@@ -15,6 +17,6 @@ esac
unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f | wc -l 2>/dev/null)"
-pidof mbsync >/dev/null 2>&1 && icon="🔃"
+pidof mbsync >/dev/null 2>&1 && icon="U"
-[ "$unread" = "0" ] && [ "$icon" = "" ] || echo "📬$unread$icon"
+[ "$unread" = "0" ] && [ "$icon" = "" ] || echo "$unread$icon"
diff --git a/scripts/.local/bin/statusbar/sb-nettraf b/scripts/.local/bin/statusbar/sb-nettraf
index eb7a73b..824e156 100755
--- a/scripts/.local/bin/statusbar/sb-nettraf
+++ b/scripts/.local/bin/statusbar/sb-nettraf
@@ -26,4 +26,4 @@ update() {
rx=$(update /sys/class/net/[ew]*/statistics/rx_bytes)
tx=$(update /sys/class/net/[ew]*/statistics/tx_bytes)
-printf "🔻%4sB 🔺%4sB\\n" $(numfmt --to=iec $rx) $(numfmt --to=iec $tx)
+printf "%4sB/%4sB\\n" $(numfmt --to=iec $rx) $(numfmt --to=iec $tx)
diff --git a/scripts/.local/bin/statusbar/sb-volume b/scripts/.local/bin/statusbar/sb-volume
index 3cfdc45..2b7ce67 100755
--- a/scripts/.local/bin/statusbar/sb-volume
+++ b/scripts/.local/bin/statusbar/sb-volume
@@ -17,14 +17,10 @@ esac
vol="$(pamixer --get-volume)"
-if [ "$vol" -gt "70" ]; then
- icon="🔊"
-elif [ "$vol" -gt "30" ]; then
- icon="🔉"
-elif [ "$vol" -gt "0" ]; then
- icon="🔈"
+if [ "$vol" -gt "0" ]; then
+ icon=""
else
- echo 🔇 && exit
+ echo  && exit
fi
echo "$icon$vol%"
diff --git a/scripts/.local/bin/sysact b/scripts/.local/bin/sysact
index f12bfa1..bf7f199 100755
--- a/scripts/.local/bin/sysact
+++ b/scripts/.local/bin/sysact
@@ -1,19 +1,27 @@
#!/bin/sh
+dmenu="$HOME/.local/bin/cdmenu"
+
# A dmenu wrapper script for system functions.
case "$(readlink -f /sbin/init)" in
*systemd*) ctl='systemctl' ;;
*) ctl='loginctl' ;;
esac
-case "$(printf "🔒 lock\n🚪 leave dwm\n♻️ renew dwm\n🐻 hibernate\n💤 sleep\n🔃 reboot\n🖥️shutdown\n📺 display off" | cdmenu -i -p 'Action: ')" in
- '🔒 lock') slock ;;
- '🚪 leave dwm') kill -TERM "$(pgrep -u "$USER" "\bdwm$")" ;;
- '♻️ renew dwm') kill -HUP "$(pgrep -u "$USER" "\bdwm$")" ;;
- '🐻 hibernate') slock $ctl hibernate ;;
- '💤 sleep') slock $ctl suspend ;;
- '🔃 reboot') $ctl reboot ;;
- '🖥️shutdown') $ctl poweroff ;;
- '📺 display off') xset dpms force off ;;
+if [ -z "$1" ]; then
+ cmd=$(printf "lock\nleave dwm\nrenew dwm\nhibernate\nsleep\nreboot\nshutdown\ndisplay off" | $dmenu -i -p 'Action: ')
+else
+ cmd=$1
+fi
+
+case "$cmd" in
+ 'lock') slock ;;
+ 'leave dwm') kill -TERM "$(pgrep -u "$USER" "\bdwm$")" ;;
+ 'renew dwm') kill -HUP "$(pgrep -u "$USER" "\bdwm$")" ;;
+ 'hibernate') slock $ctl hibernate ;;
+ 'sleep') slock $ctl suspend ;;
+ 'reboot') $ctl reboot ;;
+ 'shutdown') $ctl poweroff ;;
+ 'display off') xset dpms force off ;;
*) exit 1 ;;
esac