summary refs log tree commit diff stats
path: root/bin
diff options
context:
space:
mode:
authorChristian Krinitsin <code@krinitsin.xyz>2024-05-28 22:21:23 +0200
committerChristian Krinitsin <code@krinitsin.xyz>2024-05-28 22:21:23 +0200
commit597a57c242422ea8e760f82f285e404ce2e43a41 (patch)
tree6ac8fcdffe3c3bb203fa83affa620dbd28fc9f77 /bin
parenta3b983d90668a87ec07d4f7fb53122d9fe579e74 (diff)
downloaddotfiles-597a57c242422ea8e760f82f285e404ce2e43a41.tar.gz
dotfiles-597a57c242422ea8e760f82f285e404ce2e43a41.zip
add many different things
Diffstat (limited to 'bin')
-rwxr-xr-xbin/blur-lock11
-rwxr-xr-xbin/powermenu186
-rwxr-xr-xbin/volume_brightness102
3 files changed, 299 insertions, 0 deletions
diff --git a/bin/blur-lock b/bin/blur-lock
new file mode 100755
index 0000000..7b5aa6a
--- /dev/null
+++ b/bin/blur-lock
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+PICTURE=/tmp/swaylock.png
+SCREENSHOT="grim $PICTURE"
+
+BLUR="5x4"
+
+$SCREENSHOT
+convert $PICTURE -blur $BLUR $PICTURE
+swaylock -i $PICTURE
+rm $PICTURE
diff --git a/bin/powermenu b/bin/powermenu
new file mode 100755
index 0000000..ac1d677
--- /dev/null
+++ b/bin/powermenu
@@ -0,0 +1,186 @@
+#!/usr/bin/env bash
+#
+# Use rofi/zenity to change system runstate thanks to systemd.
+#
+# Note: this currently relies on associative array support in the shell.
+#
+# Inspired from i3pystatus wiki:
+# https://github.com/enkore/i3pystatus/wiki/Shutdown-Menu
+#
+# Copyright 2015 Benjamin Chrétien <chretien at lirmm dot fr>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# modified to work with latest rofi update by joekamprad <joekamprad@endeavouros.com>
+
+#######################################################################
+#                            BEGIN CONFIG                             #
+#######################################################################
+
+# Use a custom lock script
+#LOCKSCRIPT="i3lock-extra -m pixelize"
+
+# Colors: FG (foreground), BG (background), HL (highlighted)
+FG_COLOR="#bbbbbb"
+BG_COLOR="#111111"
+HLFG_COLOR="#111111"
+HLBG_COLOR="#bbbbbb"
+BORDER_COLOR="#222222"
+
+# Options not related to colors (most rofi options do not work anymore)
+ROFI_OPTIONS=(-theme ~/.config/rofi/powermenu.rasi)
+# Zenity options
+ZENITY_TITLE="Power Menu"
+ZENITY_TEXT="Action:"
+ZENITY_OPTIONS=(--column= --hide-header)
+
+#######################################################################
+#                             END CONFIG                              #
+#######################################################################
+
+# Whether to ask for user's confirmation
+enable_confirmation=false
+
+# Preferred launcher if both are available
+preferred_launcher="rofi"
+
+usage="$(basename "$0") [-h] [-c] [-p name] -- display a menu for shutdown, reboot, lock etc.
+
+where:
+    -h  show this help text
+    -c  ask for user confirmation
+    -p  preferred launcher (rofi or zenity)
+
+This script depends on:
+  - systemd,
+  - sway,
+  - rofi or zenity."
+
+# Check whether the user-defined launcher is valid
+launcher_list=(rofi zenity)
+function check_launcher() {
+  if [[ ! "${launcher_list[@]}" =~ (^|[[:space:]])"$1"($|[[:space:]]) ]]; then
+    echo "Supported launchers: ${launcher_list[*]}"
+    exit 1
+  else
+    # Get array with unique elements and preferred launcher first
+    # Note: uniq expects a sorted list, so we cannot use it
+    i=1
+    launcher_list=($(for l in "$1" "${launcher_list[@]}"; do printf "%i %s\n" "$i" "$l"; let i+=1; done \
+      | sort -uk2 | sort -nk1 | cut -d' ' -f2- | tr '\n' ' '))
+  fi
+}
+
+# Parse CLI arguments
+while getopts "hcp:" option; do
+  case "${option}" in
+    h) echo "${usage}"
+       exit 0
+       ;;
+    c) enable_confirmation=true
+       ;;
+    p) preferred_launcher="${OPTARG}"
+       check_launcher "${preferred_launcher}"
+       ;;
+    *) exit 1
+       ;;
+  esac
+done
+
+# Check whether a command exists
+function command_exists() {
+  command -v "$1" &> /dev/null 2>&1
+}
+
+# systemctl required
+if ! command_exists systemctl ; then
+  exit 1
+fi
+
+# menu defined as an associative array
+typeset -A menu
+
+# Menu with keys/commands
+
+menu=(
+  [  Shutdown]="systemctl poweroff"
+  [  Reboot]="systemctl reboot"
+  [  Suspend]="systemctl suspend"
+  [  Hibernate]="systemctl hibernate"
+  [  Lock]="~/.config/waybar/scripts/blur-lock"
+  [  Logout]="swaymsg exit"
+  [  Cancel]=""
+)
+
+menu_nrows=${#menu[@]}
+
+# Menu entries that may trigger a confirmation message
+menu_confirm="Shutdown Reboot Hibernate Suspend Halt Logout"
+
+launcher_exe=""
+launcher_options=""
+rofi_colors=""
+
+function prepare_launcher() {
+  if [[ "$1" == "rofi" ]]; then
+    rofi_colors=(-bc "${BORDER_COLOR}" -bg "${BG_COLOR}" -fg "${FG_COLOR}" \
+        -hlfg "${HLFG_COLOR}" -hlbg "${HLBG_COLOR}")
+    launcher_exe="rofi"
+    launcher_options=(-dmenu -i -lines "${menu_nrows}" -p "${ROFI_TEXT}" \
+        "${rofi_colors}" "${ROFI_OPTIONS[@]}")
+  elif [[ "$1" == "zenity" ]]; then
+    launcher_exe="zenity"
+    launcher_options=(--list --title="${ZENITY_TITLE}" --text="${ZENITY_TEXT}" \
+        "${ZENITY_OPTIONS[@]}")
+  fi
+}
+
+for l in "${launcher_list[@]}"; do
+  if command_exists "${l}" ; then
+    prepare_launcher "${l}"
+    break
+  fi
+done
+
+# No launcher available
+if [[ -z "${launcher_exe}" ]]; then
+  exit 1
+fi
+
+launcher=(${launcher_exe} "${launcher_options[@]}")
+selection="$(printf '%s\n' "${!menu[@]}" | sort | "${launcher[@]}")"
+
+function ask_confirmation() {
+  if [ "${launcher_exe}" == "rofi" ]; then
+    confirmed=$(echo -e "Yes\nNo" | rofi -dmenu -i -lines 2 -p "${selection}?" \
+      "${rofi_colors}" "${ROFI_OPTIONS[@]}")
+    [ "${confirmed}" == "Yes" ] && confirmed=0
+  elif [ "${launcher_exe}" == "zenity" ]; then
+    zenity --question --text "Are you sure you want to ${selection,,}?"
+    confirmed=$?
+  fi
+
+  if [ "${confirmed}" == 0 ]; then
+    swaymsg -q "exec --no-startup-id ${menu[${selection}]}"
+  fi
+}
+
+if [[ $? -eq 0 && ! -z ${selection} ]]; then
+  if [[ "${enable_confirmation}" = true && \
+        ${menu_confirm} =~ (^|[[:space:]])"${selection}"($|[[:space:]]) ]]; then
+    ask_confirmation
+  else
+    swaymsg -q "exec --no-startup-id ${menu[${selection}]}"
+  fi
+fi
diff --git a/bin/volume_brightness b/bin/volume_brightness
new file mode 100755
index 0000000..f6174ca
--- /dev/null
+++ b/bin/volume_brightness
@@ -0,0 +1,102 @@
+#!/bin/bash
+# original source: https://gitlab.com/Nmoleo/i3-volume-brightness-indicator
+
+# taken from here: https://gitlab.com/Nmoleo/i3-volume-brightness-indicator
+
+# See README.md for usage instructions
+bar_color="#d3c6aa"
+volume_step=2
+brightness_step=2.5
+max_volume=100
+
+# Uses regex to get volume from pactl
+function get_volume {
+    pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '[0-9]{1,3}(?=%)' | head -1
+}
+
+# Uses regex to get mute status from pactl
+function get_mute {
+    pactl get-sink-mute @DEFAULT_SINK@ | grep -Po '(?<=Mute: )(yes|no)'
+}
+
+# Uses regex to get brightness from xbacklight
+function get_brightness {
+    brightnessctl | grep "Current brightness" | cut -d '(' -f 2 | cut -d '%' -f 1 
+}
+
+# Returns a mute icon, a volume-low icon, or a volume-high icon, depending on the volume
+function get_volume_icon {
+    volume=$(get_volume)
+    mute=$(get_mute)
+    if [ "$mute" == "yes" ] ; then
+        volume_icon="  "
+    elif [ "$volume" -eq 0 ]; then 
+        volume_icon="  " 
+    elif [ "$volume" -lt 50 ]; then
+        volume_icon="  "
+    else
+        volume_icon="  "
+    fi
+}
+
+# Always returns the same icon - I couldn't get the brightness-low icon to work with fontawesome
+function get_brightness_icon {
+    brightness_icon="  "
+}
+
+# Displays a volume notification using dunstify
+function show_volume_notif {
+    volume=$(get_mute)
+    get_volume_icon
+    if [ "$mute" == "yes" ]; then
+        dunstify -t 1000 -r 2593 -u normal "$volume_icon" -h int:value:0 -h string:hlcolor:$bar_color
+    else
+        dunstify -t 1000 -r 2593 -u normal "$volume_icon $volume%" -h int:value:$volume -h string:hlcolor:$bar_color
+    fi
+}
+
+# Displays a brightness notification using dunstify
+function show_brightness_notif {
+    brightness=$(get_brightness)
+    get_brightness_icon
+    dunstify -t 1000 -r 2593 -u normal "$brightness_icon $brightness%" -h int:value:$brightness -h string:hlcolor:$bar_color
+}
+
+# Main function - Takes user input, "volume_up", "volume_down", "brightness_up", or "brightness_down"
+case $1 in
+    volume_up)
+    # Unmutes and increases volume, then displays the notification
+    pactl set-sink-mute @DEFAULT_SINK@ 0
+    volume=$(get_volume)
+    if [ $(( "$volume" + "$volume_step" )) -gt $max_volume ]; then
+        pactl set-sink-volume @DEFAULT_SINK@ $max_volume%
+    else
+        pactl set-sink-volume @DEFAULT_SINK@ +$volume_step%
+    fi
+    show_volume_notif
+    ;;
+
+    volume_down)
+    # Raises volume and displays the notification
+    pactl set-sink-volume @DEFAULT_SINK@ -$volume_step%
+    show_volume_notif
+    ;;
+
+    volume_mute)
+    # Toggles mute and displays the notification
+    pactl set-sink-mute @DEFAULT_SINK@ toggle
+    show_volume_notif
+    ;;
+
+    brightness_up)
+    # Increases brightness and displays the notification
+    brightnessctl set +$brightness_step% 
+    show_brightness_notif
+    ;;
+
+    brightness_down)
+    # Decreases brightness and displays the notification
+    brightnessctl set $brightness_step%- 
+    show_brightness_notif
+    ;;
+esac