diff options
author | Philip Wittamore <philip@wittamore.com> | 2025-05-08 08:57:15 +0200 |
---|---|---|
committer | Philip Wittamore <philip@wittamore.com> | 2025-05-08 08:57:15 +0200 |
commit | 8aca8c547605f536bc295dd1941de1ccb05d7b2e (patch) | |
tree | d1ef1f0fd3f271b586f01567ef9065617dd83336 | |
parent | af70c01c0e07289064b926374232add1ad90631b (diff) | |
download | scripts-8aca8c547605f536bc295dd1941de1ccb05d7b2e.tar.gz scripts-8aca8c547605f536bc295dd1941de1ccb05d7b2e.tar.bz2 scripts-8aca8c547605f536bc295dd1941de1ccb05d7b2e.zip |
added more scripts
-rwxr-xr-x | choose-theme | 34 | ||||
-rwxr-xr-x | launch-dunst | 25 | ||||
-rwxr-xr-x | rofi-power-menu | 282 | ||||
-rwxr-xr-x | screenshot.sh | 6 |
4 files changed, 347 insertions, 0 deletions
diff --git a/choose-theme b/choose-theme new file mode 100755 index 0000000..183bc76 --- /dev/null +++ b/choose-theme @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +# Change background image and create +# a corresponding theme with Pywal16 +# then post process +# +# requires nsxiv, pywal16 +# ~/.local/bin is in PATH + +FOLDER=~/Pictures/wallpaper +# thumbnail display of images +CHOICE=$(nsxiv -otb $FOLDER/*) + +wal --cols16 darken -i $CHOICE + +# Post process + +# Xresources +xrdb merge .Xresources + +# DWM +cd ~/.local/src/LIVE/dwm +make clean ; make +rm -f ~/.local/bin/dwm +cp dwm ~/.local/bin + +# DWMMENU +rm -f ~/.local/bin/dmenu* +cd ~/.local/src/LIVE/dmenu +make clean ; make +cp {dmenu,dmenu_run,dmenu_path} ~/.local/bin + +# DUNST +launch-dunst diff --git a/launch-dunst b/launch-dunst new file mode 100755 index 0000000..4659fc3 --- /dev/null +++ b/launch-dunst @@ -0,0 +1,25 @@ +#!/bin/sh + +# -lf/nf/cf color +# Defines the foreground color for low, normal and critical notifications respectively. +# +# -lb/nb/cb color +# Defines the background color for low, normal and critical notifications respectively. +# +# -lfr/nfr/cfr color +# Defines the frame color for low, normal and critical notifications respectively. + +[ -f "$HOME/.cache/wal/colors.sh" ] && . "$HOME/.cache/wal/colors.sh" + +pidof dunst && killall dunst + +dunst -lf "${color0:-#ffffff}" \ + -lb "${color1:-#eeeeee}" \ + -lfr "${color2:-#dddddd}" \ + -nf "${color3:-#cccccc}" \ + -nb "${color4:-#bbbbbb}" \ + -nfr "${color5:-#aaaaaa}" \ + -cf "${color6:-#999999}" \ + -cb "${color7:-#888888}" \ + -cfr "${color8:-#777777}" > /dev/null 2>&1 & + diff --git a/rofi-power-menu b/rofi-power-menu new file mode 100755 index 0000000..9484f68 --- /dev/null +++ b/rofi-power-menu @@ -0,0 +1,282 @@ +#!/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 + # Add zero-width space character (\u200b) to icon to ensure confirmation- + # and regular messages never collide. + confirmationMessages[$entry]=$(write_message "${icons[$entry]}\u200b" "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/screenshot.sh b/screenshot.sh new file mode 100755 index 0000000..c096362 --- /dev/null +++ b/screenshot.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +canberra-gtk-play -i audio-volume-change -d "changeVolume" +scrot ~/Pictures/screenshots/%Y-%m-%d-%T-screenshot.png +dunstify -t 1000 "Screenshot taken" +gthumb ~/Pictures/screenshots |