From 1fd350e8571a889063cf055ce0cbcc65b4d918f8 Mon Sep 17 00:00:00 2001 From: klein panic Date: Mon, 19 Aug 2024 18:22:55 -0400 Subject: [PATCH 01/13] Automated update --- customstatusbar/statusbars/install.sh | 4 ++-- customstatusbar/statusbars/statusbar.sh | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/customstatusbar/statusbars/install.sh b/customstatusbar/statusbars/install.sh index 78a4151..309cf6a 100755 --- a/customstatusbar/statusbars/install.sh +++ b/customstatusbar/statusbars/install.sh @@ -32,7 +32,7 @@ for pkg in "${requires_packages[@]}"; do echo "Package $pkg is installed already. YAY" fi done -sudo chmod +x /home/klein/KleinWindowManagement/customstatusbar/statusbars/statusbar.sh -sudo cp /home/klein/KleinWindowManagement/customstatusbar/statusbars/statusbar.sh /usr/bin/ +sudo chmod +x /home/klein/DynamicWindowManagement//customstatusbar/statusbars/statusbar.sh +sudo cp /home/klein/DynamicWindowManagement/customstatusbar/statusbars/statusbar.sh /usr/bin/ echo "Installation done. Run statusbar.sh in shell" diff --git a/customstatusbar/statusbars/statusbar.sh b/customstatusbar/statusbars/statusbar.sh index 5897094..acdc0a4 100755 --- a/customstatusbar/statusbars/statusbar.sh +++ b/customstatusbar/statusbars/statusbar.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Source color vars -source /home/klein/KleinWindowManagement/customstatusbar/statusbars/colorvars.sh +source /home/klein/DynamicWindowManagement/customstatusbar/statusbars/colorvars.sh # Define Basic Dimentions base_x=0 @@ -212,6 +212,7 @@ wifi() { echo "{ $wifi_icon$ssid : $signal% }" } + status(){ echo "$(cpu)|$(ram)|$(swap)$(disk)|$(cpu_temperature)|$(battery)|$(wifi)" } From e4b5b217aa152c7be9a011a10582bf7fb528263e Mon Sep 17 00:00:00 2001 From: klein panic Date: Mon, 19 Aug 2024 19:55:22 -0400 Subject: [PATCH 02/13] Automated update --- customstatusbar/statusbars/install.sh | 4 +- customstatusbar/statusbars/oldstatus2dbar.sh | 328 ------------------- customstatusbar/statusbars/statusbar.service | 13 + customstatusbar/statusbars/statusbar.sh | 11 +- 4 files changed, 21 insertions(+), 335 deletions(-) delete mode 100644 customstatusbar/statusbars/oldstatus2dbar.sh create mode 100644 customstatusbar/statusbars/statusbar.service diff --git a/customstatusbar/statusbars/install.sh b/customstatusbar/statusbars/install.sh index 309cf6a..b311530 100755 --- a/customstatusbar/statusbars/install.sh +++ b/customstatusbar/statusbars/install.sh @@ -33,6 +33,6 @@ for pkg in "${requires_packages[@]}"; do fi done sudo chmod +x /home/klein/DynamicWindowManagement//customstatusbar/statusbars/statusbar.sh -sudo cp /home/klein/DynamicWindowManagement/customstatusbar/statusbars/statusbar.sh /usr/bin/ +sudo ln -s /home/klein/DynamicWindowManagement/customstatusbar/statusbars/statusbar.sh /usr/local/bin/statusbar -echo "Installation done. Run statusbar.sh in shell" +echo "Installation done. Run statusbar in shell. Installed to local bin" diff --git a/customstatusbar/statusbars/oldstatus2dbar.sh b/customstatusbar/statusbars/oldstatus2dbar.sh deleted file mode 100644 index bfd0dc9..0000000 --- a/customstatusbar/statusbars/oldstatus2dbar.sh +++ /dev/null @@ -1,328 +0,0 @@ -#!/bin/bash -# This is a relic of the old. Shit sucks - - -##Global Definitions -#Color definitions -color_black="#000000" #outline -color_white="#ffffff" #default -color_green="#00ff00" -color_yellow="#ffff00" -color_red="#ff0000" -color_grey="#555555" - -#Primary scheme - medium orchid -color_scheme_1="#c067dd" #background -color_scheme_2="#a656c2" -color_scheme_3="#8B45A7" -color_scheme_4="#71348C" #highlight -color_scheme_5="#572371" -color_scheme_6="#3C1256" -color_scheme_7="#22013B" #default text color - -#Complimentary scheme - pastel green -c_color_scheme_1="#84dd67" #Complimentary background color -c_color_scheme_2="#72c059" -c_color_scheme_3="#60a44b" -c_color_scheme_4="#4f883d" #Complimentary highlight -c_color_scheme_5="#3f6e30" -c_color_scheme_6="#2f5523" -c_color_scheme_7="#203d17" #Complimentary txt color - -#GLobal basics -basic_y=27 -basic_x=0 - -get_cpu() { - local cpu_stats=$(top -bn1 | rep "%pu(s)") - local us=$(echo $cpu_stats | awk '{print $2}' | tr -d '%') - local sy=$(echo $cpu_stats | awk '{print $4}' | tr -d '%') - local ni=$(echo $cpu_stats | awk '{print $6}' | tr -d '%') - local id=$(echo $cpu_stats | awk '{print $8}' | tr -d '%') - local wa=$(echo $cpu_stats | awk '{print $10}' | tr -d '%') - local hi=$(echo $cpu_stats | awk '{print $12}' | tr -d '%') - local si=$(echo $cpu_stats | awk '{print $14}' | tr -d '%') - local st=$(echo $cpu_stats | awk '{print $16}' | tr -d '%') - - local top_cpu_consumer=$(ps -eo %cpu,comm --sort=-%cpu | head -n 2 | tail -n 1 | awk '{print $2}') - top_cpu_consumer="${top_cpu_consumer:0:8}" - - local base_x=$basic_x - local base_y=$basic_y - local max_height=16 - local bar_width=3 - local status_line="" - local bg=$color_grey - - declare -A colors=( [us]="#ffd700" [sy]="#ff4500" [ni]="#ff8c00" [id]="#008000" - [wa]="#0000ff" [hi]="#4b0082" [si]="#800080" [st]="#a0522d" ) - - for state in us sy ni id wa hi si st; do - local percentage=$(echo ${!state}) - if [[ ! "$percentage" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then - percentage=0 - fi - - local bar_height=$(echo "$percentage * $max_height / 100" | bc) - - status_line+="^c$bg^^r${base_x},$((base_y - max_height)),${bar_width},${max_height}^" - - local upper_y=$((base_y - bar_height)) - status_line+="^c${colors[$state]}^^r$base_x,$upper_y,$bar_width,$bar_height^" - base_x=$((base_x + bar_width + 2)) - done - - status_line+="^d^^f30^" - - echo "{[$status_line][User:$us|Sys:$sy]$top_cpu_consumer]}" -} - -get_ram() { - local mem_info=$(free -m) - local total_mem=$(echo "$mem_info" | awk '/^Mem:/ {print $2}') - local used_mem=$(echo "$mem_info" | awk '/^Mem:/ {print $3}') - - local mem_usage=$(awk "BEGIN {printf \"%.0f\", ($used_mem/$total_mem)*100}") - - local max_height=20 - local bar_height=$((max_height * mem_usage / 100)) - local bar_width=5 - local base_x=$basic_x - local base_y=$basic_y - local color=$color_white - local border=$color_black - local bg=$color_grey - - local status_line="" - status_line+="^c$bg^" - status_line+="^r$base_x,$((base_y - max_height)),$((bar_width + 2)),$((max_height + 2))^" - status_line+="^c$color^" - status_line+="^r$((base_x + 1)),$((base_y - bar_height - 1)),${bar_width},${bar_height}^" - status_line+="^d^^f8^" - status_line+="${mem_usage}%" - - echo "{[$status_line]}" -} - -get_df() { - # Fetch disk usage data - local usage_p2=$(df -h | grep '/dev/nvme0n1p2' | awk '{print $5}' | tr -d '%') - local usage_p4=$(df -h | grep '/dev/nvme0n1p4' | awk '{print $5}' | tr -d '%') - - # Safeguard against malformed input - if [[ ! "$usage_p2" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then - usage_p2=0 - fi - if [[ ! "$usage_p4" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then - usage_p4=0 - fi - - # Base settings for drawing - local base_x=$basic_x - local base_y=$basic_y - local max_height=20 - local bar_width=3 - local status_line="" - local bg=$color_grey - - # Define colors for each partition - declare -A colors=( - [p2]="#FFD700" - [p4]="#FF4500" - ) - - # Define percentages - local -A usages=( - [p2]=$usage_p2 - [p4]=$usage_p4 - ) - - # Create a vertical bar for each partition - for partition in p2 p4; do - local percentage=${usages[$partition]} - local bar_height=$(echo "$percentage * $max_height / 100" | bc) - - # Draw the background rectangle for 100% capacity - status_line+="^c$bg^^r${base_x},$((base_y - max_height)),${bar_width},${max_height}^" - - # Draw the usage bar on top of the background - local upper_y=$((base_y - bar_height)) - status_line+="^c${colors[$partition]}^^r$base_x,$upper_y,$bar_width,$bar_height^" - base_x=$((base_x + bar_width + 2)) - done - - # Reset formatting and move forward - status_line+="^d^^f10^" - - echo "{[$status_line][Sys:$usage_p2%|User:$usage_p4%]}" -} - -get_temperature() { - local temp=$(sensors | awk '/Package id 0/ {gsub(/[^0-9.]/, "", $4); print int($4)}') - local max_temp=70 - - local color=$color_white - local bg=$color_scheme_1 - local outline=$color_white - - if [ "$temp" -gt "$max_temp" ]; then - color=$color_red - elif [ "$temp" -lt "$max_temp" ]; then - color=$color_green - fi - - local fill_height=$(($temp * 10 / $max_temp)) - local base_y=$((basic_y - 22)) - local temp_icon="^c$outline^" - temp_icon+="^r5,$base_y,4,11^" - temp_icon+="^c$bg^" - temp_icon+="^r6,$((base_y + 4)),2,9^" - temp_icon+="^c$color^" - temp_icon+="^r6,$((base_y + 7 - fill_height)),2,$fill_height^" - temp_icon+="^c$outline^" - temp_icon+="^r4,$((base_y + 8)),7,4^" - temp_icon+="^r5,$((base_y + 9)),5,4^" - temp_icon+="^d^^f10^" - echo "^c$color_white^{[^d^$temp_icon $temp°C^c$color_white^]}^d^" -} - -get_battery() { - local status=$(cat /sys/class/power_supply/BAT0/status) - local capacity=$(cat /sys/class/power_supply/BAT0/capacity) - local current_now=$(cat /sys/class/power_supply/BAT0/current_now) - local voltage_now=$(cat /sys/class/power_supply/BAT0/voltage_now) - local power_consumption=$(awk "BEGIN {printf \"%.2f\n\", ($current_now/1000000)*($voltage_now/1000000)}") - - local color=$color_scheme_7 - local bg=$color_scheme_1 - local outline=$color_black - local color_status=$color_white - - if [[ "$capacity" -le 15 ]]; then - color=$color_red - shutdown -h now - elif [[ "$capacity" -le 25 ]]; then - color=$color_yellow - else - color=$color_green - fi - - local fill_width=$(($capacity * 20 / 100)) - local base_y=$((basic_y - 20)) - local battery_icon="^c$outline^" - battery_icon+="^r2,$base_y,22,10^" - battery_icon+="^c$bg^" - battery_icon+="^r3,$((base_y +1)),20,8^" - battery_icon+="^c$color^" - battery_icon+="^r3,$((base_y + 1)),$fill_width,8^" - battery_icon+="^c$outline^" - battery_icon+="^r0,$((base_y + 3)),2,4^" - battery_icon+="^d^^f24^" - - if [[ "$status" == "Full" ]]; then - status="F" - color_status=$color_green - elif [[ "$status" == "Charging" ]]; then - status="C" - color_status=$c_color_scheme_1 - elif [[ "$status" == "Discharging" ]]; then - status="D" - color_status=$color_yellow - elif [[ "$status" == "Not charging" ]]; then - status="NC" - color_status=$color_scheme_4 - else - status="NA" - fi - - echo "{[$battery_icon^c$color^$capacity^d^%]}" -} - -get_wifi() { - local color=$color_black - local bg=$color_grey - local ssid=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d':' -f2) - ssid="${ssid:-No WiFi}" - ssid="${ssid:0:15}" - - local dwm=$(grep wlp0s20f3 /proc/net/wireless | awk '{ print int($4) }') - local signal_normalized=$(( (dwm + 90) * 100 / 60 )) - local signal - if [ $signal_normalized -gt 100 ]; then - signal=100 - elif [ $signal_normalized -lt 0 ]; then - signal=0 - else - signal=$signal_normalized - fi - - local color=$color_white - if [ $signal -ge 66 ]; then - color=$color_green - elif [ $signal -le 33 ]; then - color=$color_red - elif [ $signal -gt 33 ] && [ $signal -lt 66 ]; then - color=$color_yellow - fi - - local base_x=$basic_x - local base_y=$((basic_y - 7)) - local max_bars=5 - local bars_filled=$((signal / 20)) - - local wifi_icon="^c$color^" - for i in 1 2 3 4 5; do - local width=$((3 * i + 1)) - local height=$((3 * i + 1)) - local height_placement=$((base_y - height)) - if [ $i -le $bars_filled ]; then - wifi_icon+="^c$color^" - else - wifi_icon+="^c$bg^" - fi - wifi_icon+="^r$((base_x + 3 * (i - 1))),$height_placement,$width,$height^" - done - wifi_icon+="^d^^f18^" - - echo "{[$wifi_icon$ssid[$signal%]]}" -} - -get_screen_width() { - local screen_width_px=$(xdpyinfo | awk '/dimensions:/ {print $2}' | cut -dx -f1) - echo $((screen_width_px / 1)) -} - -get_status() { - local screen_width=$(get_screen_width) - declare -A components=( - [cpu]="$(get_cpu)" - [ram]="$(get_ram)" - [df]="$(get_df)" - [temperature]="$(get_temperature)" - [battery]="$(get_battery)" - [wifi]="$(get_wifi)" - ) - local status_line="" - local separator="" - local total_length=0 - local sep_length=${#separator} - - for component in date wifi battery temperature df ram cpu; do - local component_output="${components[$component]}" - local component_length=$(( ${#component_output} + sep_length )) - - if [[ $((total_length + component_length)) -le $screen_width ]]; then - status_line="${component_output}${status_line}" - total_length=$((total_length + component_length)) - else - echo "Skipped: $component due to space constraints" - fi - done - - echo "$status_line" -} - -while true; do - xsetroot -name "$(get_status)" - sleep 1 -done diff --git a/customstatusbar/statusbars/statusbar.service b/customstatusbar/statusbars/statusbar.service new file mode 100644 index 0000000..cb6212f --- /dev/null +++ b/customstatusbar/statusbars/statusbar.service @@ -0,0 +1,13 @@ +[Unit] +Description=SystemBar for DWM from suckless +After=graphical.target + +[Service] +Type=simple +ExecStart=/usr/local/bin/statusbar +Restart=on-failure +Environment=DISPLAY=:0 +Environment=XAUTHORITY=/home/klein/.Xauthority + +[Install] +WantedBy=graphical.target diff --git a/customstatusbar/statusbars/statusbar.sh b/customstatusbar/statusbars/statusbar.sh index acdc0a4..7a11503 100755 --- a/customstatusbar/statusbars/statusbar.sh +++ b/customstatusbar/statusbars/statusbar.sh @@ -51,7 +51,7 @@ ram() { local t_mem=$(echo "$m_mem" | awk '/^Mem:/ {print $2}') local u_mem=$(echo "$m_mem" | awk '/^Mem:/ {print $3}') local p_mem=$(awk "BEGIN {printf \"%.0f\", ($u_mem/$t_mem)*100}") - local usage_height=$((max_height * mem_usage / 100)) + local usage_height=$((max_height * p_mem / 100)) local usage_y=$((base_y + max_height - usage_height)) local status_line="" status_line+="^c$grey^^r$base_x,${base_y},${bar_width},${max_height}^" @@ -63,13 +63,13 @@ ram() { swap() { local m_swap=$(free -m) - local t_swap=$(echo "$m_mem" | awk '/^Swap:/ {print $2}') - local u_swap=$(echo "$m_mem" | awk '/^Swap:/ {print $3}') + local t_swap=$(echo "$m_swap" | awk '/^Swap:/ {print $2}') + local u_swap=$(echo "$m_swap" | awk '/^Swap:/ {print $3}') if [[ "$u_swap" -eq 0 ]]; then return fi local p_swap=$(awk "BEGIN {printf \"%.0f\", ($u_swap/$t_swap)*100}") - local usage_height=$((max_height * mem_usage / 100)) + local usage_height=$((max_height * p_swap / 100)) local usage_y=$((base_y + max_height - usage_height)) local status_line="" status_line+="^c$grey^^r$base_x,${base_y},${bar_width},${max_height}^" @@ -167,10 +167,11 @@ battery() { } wifi() { + local iface=$(ip -o link show | grep -v "lo:" | awk -F': ' '{print $2}') local ssid=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d':' -f2) ssid="${ssid:-No WiFi}" ssid="${ssid:0:15}" - local dwm=$(grep wlp0s20f3 /proc/net/wireless | awk '{ print int($4) }') + local dwm=$(grep "$iface" /proc/net/wireless | awk '{ print int($4) }') if [ "$ssid" = "No WiFi" ]; then local signal=0 else From 59968f2a3bc30f611862c618d029bc5315e020e7 Mon Sep 17 00:00:00 2001 From: klein panic Date: Tue, 20 Aug 2024 17:43:39 -0400 Subject: [PATCH 03/13] Automated update --- README.md | 2 +- customstatusbar/statusbars/install.sh | 8 ++++++-- customstatusbar/statusbars/statusbar.sh | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 752e72f..e751d1d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # Suckless Installs - Programs associated with my window manager, and my window manager. ## Purpose -I pretty much use this as my backup system. +I pretty much use this as my backup system (for my window manage) diff --git a/customstatusbar/statusbars/install.sh b/customstatusbar/statusbars/install.sh index b311530..4d5c019 100755 --- a/customstatusbar/statusbars/install.sh +++ b/customstatusbar/statusbars/install.sh @@ -32,7 +32,11 @@ for pkg in "${requires_packages[@]}"; do echo "Package $pkg is installed already. YAY" fi done -sudo chmod +x /home/klein/DynamicWindowManagement//customstatusbar/statusbars/statusbar.sh -sudo ln -s /home/klein/DynamicWindowManagement/customstatusbar/statusbars/statusbar.sh /usr/local/bin/statusbar +sudo chmod +x statusbar.sh +sudo cp statusbar.sh /usr/local/bin/statusbar + +PREFIX="$HOME/.local/share/statusbar" +mkdir -p "$PREFIX" +cp colorvars.sh "$PREFIX" echo "Installation done. Run statusbar in shell. Installed to local bin" diff --git a/customstatusbar/statusbars/statusbar.sh b/customstatusbar/statusbars/statusbar.sh index 7a11503..843146d 100755 --- a/customstatusbar/statusbars/statusbar.sh +++ b/customstatusbar/statusbars/statusbar.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Source color vars -source /home/klein/DynamicWindowManagement/customstatusbar/statusbars/colorvars.sh +source "$HOME/.local/share/statusbar/colorvars.sh" # Define Basic Dimentions base_x=0 From fe56b9cacfd824fdb237cd9678bdfc4d702f4090 Mon Sep 17 00:00:00 2001 From: klein panic Date: Tue, 20 Aug 2024 17:47:41 -0400 Subject: [PATCH 04/13] Automated update --- customstatusbar/statusbars/install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/customstatusbar/statusbars/install.sh b/customstatusbar/statusbars/install.sh index 4d5c019..491a412 100755 --- a/customstatusbar/statusbars/install.sh +++ b/customstatusbar/statusbars/install.sh @@ -6,10 +6,10 @@ command_exists() { } #DWM dependency is running -if ! pgrep -x "dwm" > /dev/null; then - echo "DWM is not running. Please ensure that you got that shit installed and its your window manager." - exit 1 -fi +#if ! pgrep -x "dwm" > /dev/null; then +# echo "DWM is not running. Please ensure that you got that shit installed and its your window manager." +# exit 1 +#fi #status2d dependency (update later if you find out how) if command_exists dwm; then From 0b5140571fae7b37f80738b121ca1e13b01c2b9d Mon Sep 17 00:00:00 2001 From: klein panic Date: Tue, 20 Aug 2024 18:10:51 -0400 Subject: [PATCH 05/13] Automated update --- customstatusbar/statusbars/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/customstatusbar/statusbars/install.sh b/customstatusbar/statusbars/install.sh index 491a412..d23e81e 100755 --- a/customstatusbar/statusbars/install.sh +++ b/customstatusbar/statusbars/install.sh @@ -32,7 +32,7 @@ for pkg in "${requires_packages[@]}"; do echo "Package $pkg is installed already. YAY" fi done -sudo chmod +x statusbar.sh +# sudo chmod +x statusbar.sh sudo cp statusbar.sh /usr/local/bin/statusbar PREFIX="$HOME/.local/share/statusbar" From 70e9fad2d6a147bd89fc3fb15742ef9e8fe58f10 Mon Sep 17 00:00:00 2001 From: klein panic Date: Wed, 21 Aug 2024 13:11:54 -0400 Subject: [PATCH 06/13] Automated update --- customstatusbar/statusbars/statusbar.service | 1 + 1 file changed, 1 insertion(+) diff --git a/customstatusbar/statusbars/statusbar.service b/customstatusbar/statusbars/statusbar.service index cb6212f..a22a9b8 100644 --- a/customstatusbar/statusbars/statusbar.service +++ b/customstatusbar/statusbars/statusbar.service @@ -5,6 +5,7 @@ After=graphical.target [Service] Type=simple ExecStart=/usr/local/bin/statusbar +User=klein Restart=on-failure Environment=DISPLAY=:0 Environment=XAUTHORITY=/home/klein/.Xauthority From 93b6c6b782cc90ddd778c291eeaef38fe89cdbbf Mon Sep 17 00:00:00 2001 From: klein panic Date: Sat, 24 Aug 2024 15:29:27 -0400 Subject: [PATCH 07/13] Automated update --- .../systrays/brightnesssystray2.sh | 51 ------------------- .../systrays/brightnesssystray2.sh.bak | 37 -------------- customstatusbar/systrays/expansivesystray.sh | 17 ------- customstatusbar/systrays/screenshotsystray.sh | 43 ---------------- 4 files changed, 148 deletions(-) delete mode 100755 customstatusbar/systrays/brightnesssystray2.sh delete mode 100755 customstatusbar/systrays/brightnesssystray2.sh.bak delete mode 100755 customstatusbar/systrays/expansivesystray.sh delete mode 100755 customstatusbar/systrays/screenshotsystray.sh diff --git a/customstatusbar/systrays/brightnesssystray2.sh b/customstatusbar/systrays/brightnesssystray2.sh deleted file mode 100755 index ffc949d..0000000 --- a/customstatusbar/systrays/brightnesssystray2.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -icon_name="/usr/share/icons/Adwaita/16x16/status/display-brightness-symbolic.symbolic.png" - -# Persistent loop to handle the system tray icon -while true -do - # Command to keep the icon in the systray and open the dialog on click - yad --notification --image="$icon_name" \ - --command="bash -c '\ - while : ; do \ - current_brightness=\$(brightnessctl get 2>/dev/null); \ - max_brightness=\$(brightnessctl max 2>/dev/null); \ - brightness_percent=\$((current_brightness * 100 / max_brightness)); \ - command_output=\$(yad --title \"Brightness Control\" --width=300 --height=150 --posx=810 --posy=575 \ - --form --separator=\",\" --field=\"Set Brightness (0-100):NUM\" \"\$brightness_percent\"!0..100!1 \ - --scale --value=\$brightness_percent --min-value=0 --max-value=100 --step=1 \ - --button=\"Increase Brightness\":1 --button=\"Decrease Brightness\":2 --button=gtk-ok:0 --button=gtk-cancel:3 \ - --fixed --undecorated --on-top --skip-taskbar --skip-pager 2>/dev/null); \ - ret=\$?; \ - case \$ret in \ - 0) \ - new_brightness=\$(echo \$command_output | cut -d ',' -f 1); \ - brightnessctl set \$new_brightness% > /dev/null 2>&1; \ - break;; \ - 1) \ - current_brightness=\$(brightnessctl get 2>/dev/null); \ - max_brightness=\$(brightnessctl max 2>/dev/null); \ - brightness_percent=\$((current_brightness * 100 / max_brightness)); \ - new_brightness=\$((brightness_percent + 10)); \ - [ \$new_brightness -gt 100 ] && new_brightness=100; \ - brightnessctl set \$new_brightness% > /dev/null 2>&1; \ - continue;; \ - 2) \ - current_brightness=\$(brightnessctl get 2>/dev/null); \ - max_brightness=\$(brightnessctl max 2>/dev/null); \ - brightness_percent=\$((current_brightness * 100 / max_brightness)); \ - new_brightness=\$((brightness_percent - 10)); \ - [ \$new_brightness -lt 0 ] && new_brightness=0; \ - brightnessctl set \$new_brightness% > /dev/null 2>&1; \ - continue;; \ - 3) \ - break;; \ - *) \ - break;; \ - esac; \ - done'" - - # Sleep to ensure it doesn't respawn too quickly if closed - sleep 0.5 -done diff --git a/customstatusbar/systrays/brightnesssystray2.sh.bak b/customstatusbar/systrays/brightnesssystray2.sh.bak deleted file mode 100755 index a6a51a2..0000000 --- a/customstatusbar/systrays/brightnesssystray2.sh.bak +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -icon_name="/usr/share/icons/Adwaita/16x16/status/display-brightness-symbolic.symbolic.png" - -# Persistent loop to handle the system tray icon -while true -do - # Command to keep the icon in the systray and open the dialog on click - yad --notification --image="$icon_name" \ - --command="bash -c '\ - while : ; do \ - current_brightness=\$(brightnessctl get 2>/dev/null); \ - max_brightness=\$(brightnessctl max 2>/dev/null); \ - brightness_percent=\$((current_brightness * 100 / max_brightness)); \ - command_output=\$(yad --title \"Brightness Control\" --width=300 --height=50 --posx=810 --posy=575 \ - --form --separator=\",\" --field=\"Set Brightness (0-100):NUM\" \"\$brightness_percent\"!0..100!1 \ - --button=\"Apply\":0 --button=\"Increase Brightness:1\" --button=\"Decrease Brightness:2\" --button=gtk-cancel:3 \ - --fixed --undecorated --on-top --skip-taskbar --skip-pager 2>/dev/null); \ - ret=\$?; \ - case \$ret in \ - 0) \ - new_brightness=\$(echo \$command_output | cut -d ',' -f 1); \ - brightnessctl set \$new_brightness% > /dev/null 2>&1;; \ - 1) \ - brightnessctl set +10% > /dev/null 2>&1;; \ - 2) \ - brightnessctl set 10%- > /dev/null 2>&1;; \ - 3) \ - break;; \ - *) \ - break;; \ - esac; \ - done'" - - # Sleep to ensure it doesn't respawn too quickly if closed - sleep 0.5 -done diff --git a/customstatusbar/systrays/expansivesystray.sh b/customstatusbar/systrays/expansivesystray.sh deleted file mode 100755 index 4eeb7ea..0000000 --- a/customstatusbar/systrays/expansivesystray.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -# Icon path -icon_path="/usr/share/icons/Adwaita/16x16/devices/display-symbolic.symbolic.png" - -# Persistent loop to handle the system tray icon -while true; do - yad --notification --image="$icon_path" \ - --command="bash -c 'if pgrep -x conky > /dev/null; then killall conky; else conky & disown; fi'" & - - # Wait for the tray icon to be closed - wait $! - - # Sleep to ensure it doesn't respawn too quickly if closed - sleep 2 -done - diff --git a/customstatusbar/systrays/screenshotsystray.sh b/customstatusbar/systrays/screenshotsystray.sh deleted file mode 100755 index d6e768c..0000000 --- a/customstatusbar/systrays/screenshotsystray.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -# Icon path -icon_path="/usr/share/icons/Adwaita/16x16/devices/camera-photo-symbolic.symbolic.png" - -# Directory to save screenshots -screenshot_dir="/home/klein/Pictures/screenshots" -export screenshot_dir # Export the directory path - -# Ensure directory exists -mkdir -p "$screenshot_dir" - -# Persistent loop to handle the system tray icon -while true; do - yad --notification --image="$icon_path" \ - --command="bash -c '\ - while :; do \ - yad --title \"Screenshot Tool\" --width=300 --height=50 \ - --button=\"Full Screen:0\" --button=\"Select Window:1\" --button=\"Cancel:2\" \ - --center; \ - ret=\$?; \ - counter=1; \ - while true; do \ - file_path=\"\$screenshot_dir/Screenshot_\${counter}.png\"; \ - if [[ ! -f \"\$file_path\" ]]; then \ - break; \ - fi; \ - ((counter++)); \ - done; \ - case \$ret in \ - 0) \ - scrot \"\$file_path\"; \ - break; ;; \ - 1) \ - scrot -s \"\$file_path\"; \ - break; ;; \ - 2|*) \ - break; ;; \ - esac; \ - done'" \ - # Sleep to ensure it doesn't respawn too quickly if closed - sleep 2 -done From ae51077ff074779d7859e50f89de458898be1ce7 Mon Sep 17 00:00:00 2001 From: klein panic Date: Mon, 9 Sep 2024 19:52:55 -0400 Subject: [PATCH 08/13] Automated update --- KleinDwm/source/config.h | 4 +++- KleinDwm/source/dwm | Bin 114296 -> 114296 bytes KleinDwm/source/dwm.o | Bin 128152 -> 128152 bytes 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/KleinDwm/source/config.h b/KleinDwm/source/config.h index 52d869a..9373c06 100644 --- a/KleinDwm/source/config.h +++ b/KleinDwm/source/config.h @@ -23,7 +23,9 @@ static const int user_bh = 8; /* 2 is the default spacing arou //static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; //static const char *tags[] = { " \u2680 ", " \u2681 ", " \u2682 ", " \u2683 ", " \u2684 ", " \u2685 ", " \u2661 ", " \u2665 ", "\u266c" }; // Dice Faces // tag1 tag2 tag3 tag4 tag5 tag6 tag7 tag8 tag9 -static const char *tags[] = { " \uf17c ", " \uf1d8 ", " \uf0ac ", " \uf109 ", " \uf09b ", " \uf02d ", " \uf044 ", " \uf1bc ", " \uf120 " }; +//static const char *tags[] = { " \uf17c ", " \uf1d8 ", " \uf0ac ", " \uf109 ", " \uf09b ", " \uf02d ", " \uf044 ", " \uf1bc ", " \uf120 " }; + +static const char *tags[] = { "\uf17c", "\uf1d8", "\uf0ac", "\uf109", "\uf09b", "\uf02d", "\uf044", "\uf1bc", "\uf120" }; static const Rule rules[] = { /* xprop(1): diff --git a/KleinDwm/source/dwm b/KleinDwm/source/dwm index 2f00bfcbc78e80e61f67aed5d34939294aa89426..6bb9b6559c6255ab2b014517633e745a0a2d572f 100755 GIT binary patch delta 6408 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 delta 6478 zcmezIhwaB7wha!9oH6DMU=Xv}lTn{haEBrzmddxb1Zp?@qlV zm3eJ1{WjMyi|8<_PM)YQE~%*i(KR6(LUVx4U|`Uld{AFp(hw@U08Q3(@<)AfNlU2g z1~ggQ$%+Qzl8#W>18B0YlLHOJB|V|C571=&CN~=BGX_oGXduoQHu6R>76=?raRoGSKB%|`nz#Z~+yG770U|#6y1AfaB!tc2fTkvWGNXmKWIj|j08O@N zvY~~zWI9wf15Gx6a-xN}nx24U|6G}#A}A0o*vK$E>OS6jHQ#;me_DxtYKjA>3rnT%d0r~OGy&r>B-@x&WwvD&o1>~^xXWUR6&X{U^43j zB}U!N8WZ|i80T)@G3BnN_VpwN27dh$W$d5%Bit2UvwY@{IrxcRKy-Z)1H)(js1s@Y z`WMTU)A;pymu^0=&)teiPGd9YPhl1&PL<7af8*I1-*2yDVXR?eEZhE@i?NE4iCJ`d zIS*qyZ;c28!)q=Nkc&)vw{!C{o)s`vc;C85fkEMY`wS4-v<5`Bbb`pH*&woEEr@Jv z0g-KBl`RVtw*Qu83}sS=R%%eH=E?v6Z7=@+mwod8zyFi}|688^|37Jassf`uV||9* z|Nk#o85mZ0{{Jt)#=x+{^Z)-66$S>2i2wh0ure?xM*jb=!N$N49r^#i4I2YPN96zi z5o`<$p;7<;FJNO}_#XBD{{=P%2Ai1w|7F-27$Rc+|F>XgV3->7|9=QO1H;>x|Nl$a z85mMx|NmdZ&cKit`~Uv|b_Rxu*#G~purt&%lqUTD@4>;qAeZ?6{{apLhN#5<|KD&h zFic7O|6hWWf#F5s|NlOm3=HNO|No!iWMIh1`2YV6Cj-NxjQ{^dxEL57XZ-)~z{SA8 zl==UE0v7{=S?2%$C0q;)t26)q@8Du!xS#p|{~Rs`27#>q|2J?kFlc7||9^ywfnizJ z|NjrT>KPbrX8r&Fg^PiKIs5;A4sHepw(S4^Ww;p_q_Y42H{fPqNX_~GKZKisAt?X< z{|Vd-4FB{0|6jw+z)(=||Njwg1_sf>|NozGGce>7{{R1nn}H#+`2YU|9tH;WlK=l3 zco-P0OaA|#!Nb5%Tk`+^0Uid1?Ir*J-{4_jcv$xTKTAC?0|R&Y|Nkny3=E6P|Nl?m zWneg3{{MdsF9U;Z)&Kt|co`V@s{jB0z{|kkQT_iv2Ok5&zUu$~HTW19(rW(y58z{9 zm{;@ve+eH0gKX{p|5NxF7*gy0|G&e>z@T0K|342u1H+X1|NmY185rCe{{OGwXJFXV z@c;iBeg=jo4gdewpWtU;&~5(zUq*m|VQcgM|0x0t4AWZv|KB3Oz_7OE|Nkoj3=BqX z|NmPEGBC)t|NlQjkbxn${r~?pf(#6c+yDPRAjrTF+V%hcA3+9&X5fx%R12&Zy?FQ(7fjVe-B9phCOTk|4)!)V3@S_|Nja}28NP#|Nl<_iLd+re~TmogZ=vd z|F1|gFl<==|38Bi1H+H?|No0fF)$cz`2Sx=ih&_)^Z)-_q!<`}Z~gyYM4Ex2a{K@P z3DOJ<&D;O~FOg4e-9Z329N#!|4)%&VEDNI|NlEO3=9{}6cwhTyaR|7XZEFeIM+|G!3_ zfuZ2+|Nj%@85jc3{r|s5o`K=!x&Qy)$TKjMod5ryMS+3g*2Vw-O%xay)?E7kzea(9 zA>{J^|63Fo7?xlD|Nn^s0|Vcc|Nli485lyY{{J7L$iR?#_5c4I#d-#Yy;uMLpQ6aX zzb{~1aQ3{1EF|G%Tez#w}6 z|9=Z*28MO_|NpN5mADW7|KFg@!0_VX|NnoK85sUO|Nq}Zg@Hl&#sB{aDhv$XFaG~u zpu)gl^78-xJt_>)ZshRr!e>lhl7d``~ zAU=)+1_lNLHU@@_>2q}%lNCRv{r`UsB<%=x>tQZF4i9ceJ`RwjTi6&F=1*7DV-#nc zJ>61|QJrz?^h6Nv`t(XYMs3Ec)0gTo$}`@depHXqn$c=HqducFqvLd0eMWD_-07M6 zjOvVH(iPAFzPdk zPhV@mXwK*{{iy+?G2^l6l7@`Nj2zQ_4H=~wMW$yOG6pkpPTy@5BN-wY~d0ZK~T z3=FrYCmJ(aGX_qdYs@IkST=p9F{3);r0EZh8RZ%GPG>Y>v}XEVG2PCD(Tj1{^iC5- zbw-!z8%-FEMJH7K|E~!(tb>7pp@)}&Vd?arCXC%o-)g6~nKH^T@=RZ9%J`YFc=}8; zMs3;f*8l&tK^ojZAs&4gmO4uK85q*0KQv<$)_u|T|34_xFr@Jb6!UR_6VC#E1_p=r z|No0YTA`lV!Viuhb4FpwUG4w>PXtN1@HsGb@Nt0h-2;9G2IJ|z=8V#e=F>CH8RZ#w zPVY2lG-o_G{h&FcvhDef|Nq@UdLVJ{0CI^80|Ubp0S1Pj9smE^f#h8H6teg<-1rPU zLDCEj3=9mQYFB)^q6K3!qu%tT7L3N4Jw5;bbAnVu9o8Voz|h$9|GzL)Oao-9AOl0g zbVf@?ZN{C`buAgCnI82{_p)SEV)U4vYsqNOm^*zfNOJDo*Rbp%w^PdBt?RAywD9%{`f z&zL;D)S6M7amDn7){MeZccwy(Oyv{s=Hp;!VPIfL5Mf~WJ9YXwYsNOlS<^#p7~>i5 zPv2_8=*=iNoza$2Sd4wn|NrbDix?OfKoPP>l!4*b?CDyzj8e8DbN>HVgvx;mhc}`O z42pC9|5ry6V-RCtFqwlIj3Q#7NNu!b)MhN0zSfq}nz4EMOIt>7#x>JT?HJt|d8gOf zfs44gc8uPvwk!VscbmS^fKhmwJ);O?_;gWwMs=olE2i7oGn%n=to;9_)zv{^7&Zse6)``)aamMseCq{k7-P2p0819Nj?_Kb&$4*+P>xg|83I`x-kk*mvLc~VdR`{>B8vDC^x;hzl~jP^`=d#0ar zX4K>KU|?W)BFn(wF+I?g(VOYX-s$sP8NDRe9sd7c6=b&?BoTrU72`MsZ0AMM#F`h5DPHje&uY zL6E^=x?vTgIHSRK&nm{}OpFtz8`d(4Yr+hLjkRWSKvcur1`{uy?pVtxZdn7BhB*-? z-3Aqhg)vOL8!G-_`oUU8aY0xJ!=$H9FRW!0pH|1nF?~fXqX6f8sPY5T73&zqr{4gH zt%Qngm>viczTx~xvoEmfAfQR8yK4l7HltAz^I_kcz625Nar#4$bQn}R15G+^y5LDhamf~_bOV}n*mOsb zG|cb`Xwplk7lNc=hOa=Aj+?#^Bz+ia_yIKOu;~|1GKzb`48MRT{TZt50h&0>wijsP zanlV?F^Wry@q(lFZu(4?)VPXtNB4A(%Dj+=fEBpm@Y+yPCx za{5P*bTd>s08P4Wy5ea@@#!B(ktpvldd9(bBjTyhaq>jX6ErPCWvGm3jYhe{tn zll}x1KY=Fx7b<=MO`Ku+Ly&PWZ7%U0+WFSLc;>Ja=POgMsZ0FsI&%} zw9xdzGmQF-V$&CbD5>ceL6qEd#4Hqj{FD8bh)oapz^K3&Fum{tV?CqU_KzPJmoozZ DxURM* delta 1244 zcmbR7l6}TY_6<9GOcma@?onV+c;7w)L^iDfku9AdvS~JmY*-5-8(TnR8(3w_0)@?Y zdL}V#F6a;7Z@w^Z`-ORo2Q(P(PoH?4QGEJ=xa3D3 zuqeX|kT?Sa1Be1if1m#GIHP#|U#RpCkT{YwGcQCN0~3S>NrSX;Ld6x(#QCA(8ffB* zP;mn^aYu;w^!5{sf|5}X4ub=lqKxSqPcVv07C@x~(4>o}KLkl20(-(rIuR;w!fF_+W{o+YRaZi}x7to|x z`5>YC08Jcb+Y2=Dg6W2*7{w*kq1qUjA=+V)k}*9IBn`7o08QFw`b3a4%y11f>4ND8 zLDE@J!yVA1yQhByNl%4J2cSvMn67x5QCxB^RJs98dfoIukn|R)^aM2N?b91iGm3lu zgi0SklV;(Ec=QCCI6qYU0-Ctc^oJnhVA@`wNyD^#Kob{-8ppr_u?`ll-P0Y+5=76XL=(@IshsifhHX?eIrOZ0xF$>CLJ^V;ax^?#>DAA z?=tF3rb1OMKvR`D-SHlyK4b3mLJ(EBec?UE>4Hq9{FD8bh)oapz^K5OFum{tV?CqW L_KzPJmoozZ_KCCx From 562c828aab360b4cb61a8559de21aafba4602cbb Mon Sep 17 00:00:00 2001 From: klein panic Date: Wed, 11 Sep 2024 13:18:09 -0400 Subject: [PATCH 09/13] Automated update --- KleinDwm/source/dwm | Bin 114296 -> 114264 bytes KleinDwm/source/dwm.c | 11 +- KleinDwm/source/dwm.c.orig | 149 +++++++++++++++++- KleinDwm/source/dwm.o | Bin 128152 -> 128112 bytes .../patches/dwm-focusonnetactive-6.2.diff | 57 +++++++ 5 files changed, 207 insertions(+), 10 deletions(-) create mode 100644 KleinDwm/source/patches/dwm-focusonnetactive-6.2.diff diff --git a/KleinDwm/source/dwm b/KleinDwm/source/dwm index 6bb9b6559c6255ab2b014517633e745a0a2d572f..7d450c0c72443659bdc8a97379f56f850b9f2307 100755 GIT binary patch delta 30539 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 z zDApSg6iPK7uw=?DWupiAe= zEXEf$$3fxf((UZg?V=)Kc+&8aNB3q>!R6A;n+{QJasvO=19vfA9G|>@ zS2o+u!wd{BOeP!bmf)Rz7*wEm^v0+dys)1fy4%Je=rAbNzTA}ns@Ywaf}IGe*F8Xm z;_J;G-L?i`6}P|@?2E~h5AIe{ItVI+I`6-5yaOs3?nl2o_3!`xm&?KJ%O4)ywkHm4 zX5BN9k+CDkJz!3SG-|#?ZJ80g)quch<0S1Pb7ykbLf7qk*hezxG zk}QvI+r0-S3+$6&+MYC7Z=aZOe-Z=3Xa1-YY5e*Z%azmk^?6$-hwoEm^q*Y2PoGhK z^4fi>S>LXK%xC?ypMjydqJW{4tD9BnAOpkq8?QwTFEv+`fZKAVyxk5q+N_)h!37+T zM>ne$DCj`-#V$}9^ys!dxgV0;4lV?lXS)c*Z9Zc0a?YRs|3Pi!nfoW(>{n#Wn;f^l zmeFJKo&9EviIas77)mS!6~CQ_K@C}PkIv&S_&@*u?_n)lFgfOcOz>`yG2ON{`#|A* z>xJfhaO0QXqt}!x2qbj>#mZ%1`?U5kFud6N>Hq)emrLIL2X%fWK+P&qt^J@n^rT0p ziHb+(KTv%?`Sby)`g6-cYK~|?I_w^eZ#Y1SyxU*Fqx1ZW_oqM+bJ(MsRUH(2)*Sq; z3zJ zffv>uAX7>`JSP7;E#WvF98#kszwGc?Q@Wtg{b+1OqrcIwyC4M0!J1Dm*$P zI9^;@1`Yw)ZdRXtlf%!{)a#u3|G#^RN(%!6L-!UHP$mU+G5pSfLIu_$XxqcU@M0p^ zIB+~MuIE{EAr?z_1*(=&q>D}EDRupV3S@Pgs5f*sg44xt_NqgZc|y9a!`@}-vFX~ zGDP{!0}Kp~(O~6J)$eyh4d+5KJQb|kHhMQGm%m^E2aB!gZcv?k>Hq&18(xE43U=N; zkR>mE|M~y_rC}$iz-ztD-vXML^XPWf@aPs@xSN5&!}3CDiAOiE-3;|Npn1EXjlhe-^_|kjGsOPl9Xc?YrO|h?*t; z{~Mm{><0A=Bcfhgcv!PW?q*;p)%WOTt=I*!cm^mHl*l*l1`TyFl!_tj0XsZ8_NC+R z+yDPVg<<1IpB#69hBQ5z-za!knob9q)a#=HiBWJQ1bXnh9D`&c&0Uif56Ur}oHN<+ zpiI3rNNu-#DUU~UjS2@-DT_yUJjV;w+2Aau03J;;JkZG+vw?x(@Nw3UI~l;ktso&! zkdR}DN4Kf|E(V5BPzTqedp{_WURZ!@I&g4%bejh3Vqoy>Jn};6|Ns9!ma2vz8#|Ad z3O4V~VVr#DAg6lbv;Y4+EOm8uF));J9d8Dek)TKdmFI^&xFP_W+l_U3GD7^Up|Fr|Ch-NqZ_Tu(a zkUmp+uu5Bp9SjWMuB73~7fa@YWJKSBWlaBV2N`S&Qum??WKuWlZ;((YIC`V&Uxxkw zDQCS760~&JD6I+Z4!5utmEOs~(Cuzh%3;aMvy*|LM7UFwV!`lN}5U-KNjLcG|Aq&cN^@8#I!jcO7K7>?Dxkt+yfL7FFOv1v0Af zireu23#)&i^48|bWZolE^=A)(MoBqi5Jl`L0x9s z`A7c$e<6=3lRUa@6}N+$d@rizffV?taO?tgSfTmBquZ7V-lH<=mfIN^9KmhD0FQ1{?QIMU z;GVwY4h2wY&~57o(!#S~a==k3ChpIZbB;JrtWO1sFU!kCzB|bngIp!|-AleS&!-Gwt>RB+twVUTmKA5_r|9n-Ocp@3?AM73Z-n# z^&w29oF3M^%v%{4N()0hI?o4(z0d)h2CkE3Ji1pvE2R%xK;ba~RJwRr9xWAnt@q;h zWstR?e#qr5lNTNnQBQgV642eYg@NHUtB2*~67DGQ$nDF*-;l9tP_^2zW%8Y4QqHOe zL25w)zczu&t-~eSAor_zbh9RIVPF6kRvz6uK=!@(`VbUB9-Xr8TNoH#@PoS8owA2F zO}0F)P;U-$MC*YPJ ztapH#gr)YbhEEJ{`}CUntzlsB?lyVm(QSJgq&{~asA-(*z|8t&3j+h=VMoim{7st~ zK;y(mCf_*DE7^^}+*ehi%Db1_sAHpu+q`45*FQZCkY&l+O2o z8cr|vfnumv*1UhR>Ip@rkS&uvPDIvU1O-R8?X689ouFduMcLl}|Cwb!Zid?(0WKa{ zmxEOHnsR`=+-d+nG@xo>A|NouG3=h0mzwiHlX47q(85lG_YaVv7eC#Uu z#IgAZ^GnhHkd|3C$c*OQputLp5|?g%!^sLKrFG3gqLw#GWTByG`0d5X`=I!emE8oI zB8q68lcg`{dGf9YHSBjld}bEhZU15dxa|!}axd3G zk{pu%s=*C%+4Jil{+sd@ zx8PwINLA7uPyuVZbw*UYko^jB_-;@}ihk+#dNS`t8NO4XI=J)xi}^eM|9^3AviU_j zm1ST4{|8U(+=6)Rcy!7-u3}(#!TE8r$W@JcA&{c(`5=FLfZAu-Ab)>&3UbD3P_xVMl1uky z9!AL6qV6hCfey-QkkL+1qs#QbO5||4wGtdI!XW20A5myMz~3qX>IC$bsK|Kqf(9Sj zPJk*^{uV|i1_nd9w?4hL)2D&r&vwB|(Bx2xiUK&4d^#V!$eVogsyCz7WYudo8J|x6 zf6avV{(`(ve&%odq>eH)R2@(nM=~dlg!N35T z?<=qXx8^>3G{2GX=&VuUco7bYmF^l94wze#tQZ(x1a^T6totu+c7T#pjS2^7)}iyz z3rmoAca2I6T)B`11H%htP)KhM0Vj2kp~ZbrZM!%@)q1Zf1IW<7ogh(YgAb(42d<0{ zqHHQCjIK>Cye(3%2$ur~VXtW}$fDI?BS3m5_J9nlQQ`3Ee7B1oG>XsuwaW405Zv3Kr0di9?L`1Y2`F8Abl23YaJ-lgR|Be@d^(@K(1oZ0 zB_@b5HE<>1A@|OAFSsB|K&cL*Boe0N1wTj%9MsGZ@7^(EU_b=%i~XQ@2Fo)t)PsgE z|M~RVUIVGw28xE{%@XhcW`!9F_2D<4UegsIl|2xZGH{i*;b8&uL?%Ru0$j-sxDuEr z+&Vym&dHlq;A*DA)V%NpX$QITg(Hl$3)C6(=rt7rxqurc`r;!rvB1;HUsKQwUpqA7 zUR;FB!<=>=B$vEd1LS{5=*hwC-34>o8i*PlxYK^ag6+jdkQB&iu(Ui0WMMT-^hF|u zh4CP{NVt;D?F4_zI70nD0Kf zfinMQ3%Ef}FoWQBU4SUD0WDpF1b{qD&5NrbIf!NdAeJqLiM;5 zQJ4rkbUwF2;~u1jg^_{b#X^{x7vEuWFW$EP|6dRGJp`wt4p#;>OcbPSBUl+|f)!#|BU}~Ku-`@u3@^IDszB@SAgZF_s(2v|yAM*8 z3RVRg5P_&Ng{e||k=+7~s~3qNR`U@FL!?1oNR2aNvcf~jdf6s$W#MZ1t~UF{hqnL! z!O7XD^B<_1`_TOVzfX56gKz7TQg)wS)jN8ilI^+U|6?ywn~-a{E6?nk{ih|DjFZMM5|Npx8MQGdq|51hqChvGCQ=bH~7926)%9bDG zxj2ySWYF;C{TG|sQ7YqOh71fZ?7;FRDl8y(P6R0cM?KhpDv$zMr~(djdM8NPsG$arN3>g^e9YOW3q9L^2y=TtA09rY9CDfzyD`@m2@Wr9l|NnPEgFeU* z;=O&4fcwlJ<*M+a5afSoL23_GFc+jCxl{#Y|3{DyL1m0buc;PPz7`^{;Zfgt|HVa+ z0%$_vgDQw^0<9bYH6(m`Rox937+z?1{QnOb9_TgwVgPZ6ImnpK`!D1{ZiLi_;JA|q zi6@tWo9M+L(;;%8_;|q#kuw1~ExfJ%|NmW(Vh%ju^SlvM(v@0(B&|UjK>_R233A7a z(-1iukeoay_k#uz8vp;_#SclBg-}N=2C3`34^GI?S`O@}Zjg9#se?!7eV<<29DN3c z7dKi#_9Hni1ER(SWXB$mr;yy{1CjFp>o>Il>7NNwg5*R^h!P)=_F7N@(0TubDaeT+ zH6FdD_w^y+#t2f^dH==B<``(&g(mu!4WMb^5RcCL-6gFtFRVc3gQCu-6C6CJ;L^<> z7{Mweptf9S`2Qc)W@?1mGH3GYCsL{zP+nyNC`;UbkqAnLy{2ON3=FVF=8M?Lub#-H zFKB^AhDWcdyamLiI#69Eb)ek16tvXFxAjShlxO!A70^%$$fp@C|Nr}TFHxDm$iVRW zAxLCf)Bpdl^7E!1#H2@{mOPcNIbbz2ju)ypb$Y6VUfBF3@^e!wv-ltq_siO3Jx%E0p$#mHn02t-=@2?1SHP` zk_XoSV0mfK+EfXU@!eZNBQzi-nb3Gq1POQEe<4{n+5fp5!u-ke~6QJ&%2a;e__ zpa8Q2xw7;A3$w|FujJ~V*Z%*%OA6x0HmLEBs~~b(DAZ56EJd)P6|v-6r`sAuQd$>(12)<=Wvfx5vO z>V|NrE_;w1BAkC|GBCWb2FXDznE;9gaHI!saJ~#y`us&SSSc)=_f|rJ=PHywTRGYOt$2M) z4Xg$LJLQ8q1H+4k%K!hnO9eoo6$%P1uv5U&%RthJU}*-Bv>8Ym+y($kPXI|ffu+HX z9C45|xDf)Do(qyz21|>8bpNRP?*grU!18e*c^0rdIA7ibg#*HLPmuJ}3Xt1)K-zaf zqw3S-(l-kA3qk1!8XfyJAR#fg0^;XZkQ^d995fghUNnN_AklFR6b6XshyzI{fdda5 z9os?Dh>~uz8Uw=%XRtIVH@ukk4-|r0@C4@pa;6Gc9u)R3%Kt$eVFP)77KbR19S2opP{BaLdM{*OU_^cA^~GzV+xe{ihD`))uh3_b+V9KbJz1W?=1v-2vbU3exG)GTa%BjD4?yJG^#kY_HPqT41gFuc%{ z1r2=JsJvJ(`TJX4_o7lzD_lm!v$u{Z?Ko@W1ke$VLXk zOD_yS-s(2B>;-KN|S88LMRhW`gja`%DSMxFOxECJhO z`nCtGk6)dEq4hw8f9vgv0FPeY>-`K2owvaA0iExCI(4`AgBGEvt^f(^s+$Dt>@=2L_pe)wjL<8>bBj|3iA0Q(2746u<i_@$U%%}ZWoZSi@v&-UU;ta`(aU?Nmx19$ZOQ-thL;Qv z7@q7Doe9#_D|)IIH1z4wdEKLvwGYHT;L*uDwU>cmXC4Cs!{=3ttZq1yTYwU_Z!! z&*lFu|G%8hz`)SudfKsrMWx%i^?xa+M|bLum(M`$zQg&TG~>I$)$oZ&C*x}|kLDl$ z`CFSoQWlffe^Rn91u1AfPr-gI08Q%f6nx{;Z@M}&T0l-VJ*mLJ@FE79xmt3-%P}4>Fff2}5NQ3` zVUJ$k9h0@b>oQ3$njHB(fbsa`Ro{adizom4?#-w^+3SZJ zXu!$?v_;AEHK^dRp8WHNjEvm!|Nk4T8A?H`reJ0LT(BlxwaJD*B^YBTd;PR$l$+f3 zQ`W?B^8f$clR@LY-J8J!#GUtFq)z|;|0QTUo`<#R`&I@9{#MXdZs_#&3;olRZ~s(R zN@-Q zM6N9;d`pEqnrk)GOSvHt`BMMb|NqUk7L5GtEv%sNy490U{n9kgU-tk1i@itw|9>6U zyc;yE#Zc;tSZ)vsj;9b6ju+K=pmMmx5Hh&rJz49wj1~96|Nmce7#`?s_5hEXxoUVc z|4;|*d0?$=VPJr?t;7EQ|Nq*^!{d)qF{<6uje#$PLEEuj*!}?po$c)=P$CLZQ2;XRyKjAGY!9abcd*L`1G1ioc!#Mm4RCm1H+5L zbWlG!1+=<6M@7Sst?gmlvS5*iDlI{z^*lW zd9;2j;Ro3x@Z#I##=oMB4<=9ln}>@NCuA`Oy!esv|G#5*D`?84Thx8352LF5*E&#R zHs$|+&+fe-Wsvl};=up^Q6Al_`=?G|6tDML1C|EO_xg0M2hBmgn7$h%1ldK{Z95NS zh-NBin(l@BQSf|f1UT!1_qQDeFNJap@aV4Bc(DaEcHVlR!~vS)K#T3085jaVtBAWz z&(?ufhJo@Nbh+JsgBLC?Ye2DJs|2z{YU=<0FXpZTFM{vY-ChG~m=$Yyblb|*fg=0W zi!JG(BVHVyzK(^_ka6Pl z2P}*}3hAJ^<6hCjLZAx1^#FgzMrP2O1zoF3(1fiOrMkPjz>G`aT28_ki7qBw= zGg?glz{)6E&obfv|CdqBAotg(82I$&s6^~aVE{$iyBDfapjOIJ&>DLKk8abnQc(7= z6&7M(c##zk4vXMYkjhu!I`cg@1H%iUl>h%oz56D8+&i5X@tmpVZA>*SG z0Lo4tFLoq=lD*1-QVEZ4Qyz%X_XHUjUI@hh|NrtNXcD;dy-#-m$BX*uE7%z28COm} z!NzFAIAc01JENA9cqF7gYdug3a$7_R*lkC+K;?fN*ln&Q2)8{1iL)gC|NpX@5wuLi zqnGvg^g?z59=)cEpu!iy!X;rI zy{7x2Li->>ULL)s@1R1fAwqT@y{0m}5c6h0gp53TP2C|vdqHcPUNk_&Bk* zb7!->mhk8mO%-5ZnEsZ7Q7ft*tjp9@0NiA9Oa!%kU%GUHyEDC_;Sk{k;2n51Dh4kC zqW=GXx%L-$*8phmivvWv2SgoH;{X56C;q<<^yn3hoLu+%|CfKTbwzCW}qerMVdMnRp7P_i!<4Nl%CX*T){+ zrq>D>7)n5+W*(g-DjYA^Bd1^FVic)g7y&L8wBrB&f6cWYG~Dr`FXI1y$nxSXVgLUJ zzKDwjB}vGJk}xp_h8Lh_aMWSPaK|vvP{LQokWj<7kRkiU5uk=h1*2!@u@~au|Nnb3 z-t+8q1@*J{>4VyT!qK2|sTQ=n(u486N9%#Gy+Kq;?B=ld6v!oi+@tq)p+rTN;Ux0>;VT^LC7EsxH3o}DZz zpvB!aF(8rm$5k?t64D)%gGa|BH_4^LZHc>TgE> z|L@gnW8>3no5c)DF#ldW17-Eztq!0CP@T_TERO{x{L1JT?;=56E2dIe$fE1c=PzvH zz)}t#;6`hV2m`}wE(kjpWLdXub{;s9n8bqWnEx;C#DM7MFG9k=Uh(K&I^BntQIgSc zdKxdIp_o6&?cKs2ovsYWTm=3zM1f|K4sT!2%NWQsc|w59HUY)}0ns^6{{LV0;{Si! zC;$KFKl%TE$?|2tSgE201Y*I;8{sE+*q--eBWVMXNs{}F5q45d;3|1V%;U=WY~|NjCT14B&A z|Nk=V3=9=9|NmRCGcat8`TswJoq>Tj_W%D9b_Rx)*#H06uro09#s2?)fSsY9VMgr# z|5w-<7^Z?sG!6y^yTt$h4{$IrR3-lZ|AvEsVN2rw{}P-G3>-=S|NC$VyOxEL5tXa4`+!NtJv zKlA_pIa~}323i0AZ{T8J@XY%E{|Hw-1H-Yb|NkFwF);kh`v3n67XyQG_W%DJ+zbqA z+5i8`a5FGiW&i(gz|FwWn)CmE2sZ;mQU3q`6Sx@|k$^ZWcco-P2m;C>K zqn?L>fwBDme->T_2JQ0y|5bPy7!H;H|DV9i!0@#E|Nk0Z28P(G|Nl?$GBD^>|NsAi zmw_Rp`u~3pJ_d$+)&Ku%@G&s7)%^b-z{kL_ujc>%5Z_wATIqe}|8O z!Mpzde;$4YhAs8~|GV%rFr+p7|6jq+z;LJG|Nr_m{0s~%jsO3j;Add)ZT|mXMu36g zYV-g9DFO@(+gkqr-y*=kaJJ?D|0@Cv3_)%G|62$$Fxa;L|35>JfuXnk|Nk|D3=D_c z|NlQA$iPtA_5c4LK?a6xUH|_}2r)4H>iYlRL5P9Dwfq171R(~7-QEBH&kFr>`+|35^Of#J%W|NnDD85rE>{{P<~%D_-I_y7MX zq6`e|^Zx%|Bg(*_KJWkk6QT?ZC+GeD|3Z|3fph-<{|aIZ4A%2OK_bS$&^Z79{{%4x zhW+#Z|8EduV2E1$|38a31H+re|NmQvGcbHz{Qtj?I0FO6lK=k`#2FZJm;C?VBhJ9E zY3cv}E5sQXY?l51e@2{vVd3)s|9K=B82&E*|KCD_fuU^0|Nk)(3=E7b|NoyM!N8EQ z^8f!W5)2HctN;K1A;G}VTfh4Me+fwjhD)pe|2L3iU|0-lB}pZL z|1TrQz#s%VqC$>=;oHgo|6Al3>KV?Q`u~5890S9w)Bpd!kYixrIP?F%fII_3&e{L} zL*yA4iqHQ4pCQk{(0KO${~CD)h6!i?|DPbwz)*PZ|NlMm3=BWd{r~?)o`GS?`Tze} z6c`wOUHt#wM1g_f%%%VTYZMq5N-qEZzeRz8;rQkM|DPx@Fz8+R|6fFrfuZE;|Njw+ z^$ZNHSO5RdQDk7ad-ebSDT)jXn%DmS-=oOD(0c9v|38Wh3;L~dN(>C9_y7O5P-b8_cmMzY3S|Zcg$MutZ%}4n;CS@^{~u)r z2075idld!-=NJF~C#WzmWWV_Te}M`EL&(ej|Mw`UFfio4{Qv)o3Il`EtN;IHR2dj1 zzxw~*N0ou$#Owe6E2e9zGpaMrm>#IksLwcKdZRj{y5t7u|NlWF)eKMo8qkelU|uAL1`Z|$hCS1BH5rQ;U8g_PWGrVan;xmfsLj|my%j`FnZ8kr(U@_|^ru>k z^^DEaQ?(i88K+Ed)n-&@TsD2JHlsGIn-2Lq+`m|DgFTkTA$+KUf$TYNyBQFiLCQi~s-M z7$gogU4xZ@;cxu^|Da)RkTA$b8&(De;pq!?7==Zd68`@e0f{p(FeorEFr=_DFfdI& zsl%wus5$+u4x=^Wt?8P&jM9?XDgXZ$f)u*&6)@%SaexB&2P*@^k?FCzjPi`0(`$7Z z#aTO2|NnnGJy(NKVtS`5BhU1`x{TJ0g42KMGRjNtPlsCN$R`lQ$HAb&z`$^Zje%kJ zbVEHxb;+yg|NmQoEO6u#DB-4#LjPgwXGpFyX83`E@tir_3=Bf0|Np;+Xy0nY zXs>&Qn}K0&>Hq%$Anniu@qn9w;b!Uo|7K7z3kC*;FWd|azo#o2Gn%s+@GvkGPLDNa z6le9}VPKdxz0#ObnYDz6fnn41g~p81tW$Ux817C#Xv}ENc7cb1LA-MMKVwEWR#30z z)^tx3MrBqPUIvDg>4heY`jQpA3=A8p{{Pp6TGj!|x4aAtN2l*JVQg2G;A3DAtAo15 zkxw8G?l}gA4-5o*rq&s9qnz&%jXL`v1Q+$WU;h5Dm`b zprl>G&%n^u`v3nlP~ z!l!GRGfK0{2rw|*obGAPXv`WSz`*cudZRg`ylaI31H=1{|Nq@UhJa&|$pKW7fzs#{ z0R{%pIypO#oC}{q7N3S2pMfVx8g$qW1E|qr-ueIk?CF_SjIK6*TznEPd;*T3gy74! zg2{_-15-5L3MNOs1x(pod=j2eId^dSbmZdzCr?mI$FFDlBXdSQy&ORXhBZC^|AXen zKz4#cu0fE2VPVhz|DXwIkQgZcO%Y^ZSkN=w&Vo@%4dh`^tLSFW|NpL_(DeW%M`jB~ zJ`QlnaYvAWfvIo$Gz&&KHU=REhK#=HyDS*3*g!3&-u~&oEEv_;a)cNd_V!O#vt*QG zn;^u%AT(jRmnEZ_(itHJhQtZ~|EGg2_5+#A6wb%tc-R5ddlF(`STkYzB1=ZQdL3Z~ z2GdFZ|3`q-K>{%VmSjLNvg{q$-%)n4G`TzfGAn|lQ0j8B;^+^nCgc%r&ru_f^ z2qeL@oKL`)j{{U}9s#xbK;teT@gR@~^0*Fz;>Qu>4F+&Y^g@_{L1F6u|Df>$25{gp zmB1Vi3T%*zny0&3GpZY!h%hjmnEL;}2go>RD)tazVE8i?>ef^~0dGDI2GEw&1Q7-X z+39nw8JoFYh%hkhn(_btQl{y78jOn5y=@px**ruU82-{fsp zlym<72d!!WSqF;eJ)#T@QgaabvY81~B15XH8=?#hCUgG(2c5eDQV&WyZ$udw9OwN1 zuMQG`<|GC&28NJ1DCvofK|~CcV*+g%)ma_H7#Jo@ueD_~XRQ%qU|2kTr!Av9+X*oS zhBJ$%v)M5^u?mPYFz8PAwPTcKH4tZDm@+-rj?ta9Mx22mcKS{`Ms-$DQ?-2hQ#(dw z)(hec41Cjh?HP?(L0NOfbXR*uXVw4-28NvJz4naioHY^*42M?z|NmsVq64Gc^xO7~ zqO72;^jXut+A}J%K9FEwkeDv(z-Z1YBgw$9YI>vtqcWR|Bm={THPf3M810-oBpDb4 z)*-?P3=GWc{{IKfP=mY<65Alj!0>nN|No#>Y9KLC)E<#!VED0iI+G)#8tVs1 z28OlMbsZVCWfi0t7+BZ;|34d~&WTTeX$l{Q4yf3ZVqoZ)Uh2rG&6Od=z_4%Q|Noa5 zKv60){g@-866*#j1_qDmZygzp*0wTcTC5(@3=Bfk zTb&r~C3~b97(}-G|1Su#g@FNF?=FxAHLvbEF)Fj3kY-?ToX+aZsLc97nt>s8x~?;$ zHLHOP14HBVTxUjY)&v;_hTiFOof(ZeXUH%xEZ_3~|F-E9-57}WDdwqQ0WU|6L!<|S3Zn#(7& zF=slXAEP>B&U8%>RWd!$k5Qee5dR86GBY{QGcfI^oN+z<;y5HEr5}O$@<)Mt^h_gMxE(~0gUR5I@2RT)Q0Je z5b9$vqxkd#0gM8Slcrw;2~C>*6GABlg8k|Vp$Z|?ObB%lLcN4gf0#D$8^OYMscRIXQtl@VpLJ$s{I7;3)({OsWb- zG6|M8IHn5*Lrgjq3^wT_)Fi18B$HSmCJBTOxhI!HtAsq z#7$hGNG5TBO_~-8F(@h&$skxijAQyos6nej!3JFng&6b;*&qS1LDN4#P4WsuG6|G- zAx?T23USh`FtAAn!yqQT3PW;|0>q>TVGuW2g(H~+s$d}|T?~Vm)D;dkX=6CVq+8)g zCOJS%x)2UANh<=$Bv9som~=24Vp3HE*rbIK5R*yxsdfukg*I5J_?XjX?Sz;MkX~Y*a@)^Nd^Yk$*?d!=ujjO z8+3dTh=$=Q>p=w(aXNnZ_v3s55;fi1M0#5=50ue+i=QPv=Z$lm`_$TIq~(jDMzkrZdVj z=1k87i6$P{-j&X{kA=}}x@Qh!Kcm6)n>mc{8D*!R%w;TR{IuOMkI|ozv10qgd`5l7 zdT^JIfq_Al33TijKZDOgh+jY>${ARu)u!0@Qw3F;NCppSu*Kih&bEi|CwkQ0`z85m&wVgsneUZ{q<(B^|3G{G%^Mj!(;23@8%7Bh-_g3iTZV&G?( z1)3^E3aALEaTlQC(a^?ynItGZN--QLhj;+g8UuMfVfw>jM)CSIsBIBw$*TZroc3;z zVg?4#sud8c0xE6|I+%rlfdSkhXJBAxfQrNJBLH{285kJ)q2f8v8xvq1?->yBdIs3V z46xq!Vu%C-?3xE~51fI4VJ%dAKJ@wrSPiiaD!v~o4$Vaj2cY7KkQ1yKVD-Q`s5sv{$TBapWk7#OZXB`!lXfP3u>3=EH;;*!u4slh#V1_p*7P;poxHyav%Y%Guj^63b~ z;7JgQK@uw7augx}?udgY1c0;qT@L?6QsXv$2x4Jis0Sq_SYZzufCcG^gKB_P29+Q|1_p*4s5q<&>4u6| zK*eEI47f|rz`)ST0!n()3A9eP|H|@))eK4DRbQFfeR}sxN_FT5=6)KLh9_9*_pu9U|bq zJ_7^8VWLpcZ;`%myVL79?=Rc@4?9P^@&{C0u6%yhL>L4KsTGt73i6B(G0V)n! zrU??~p3YdoC@!f4l`eov!y-z5x*o-Kb zFlcQu0|UcWu#2%7Zy>5SEk;*w9Hx(}d9|DJ9L zk``nKc}$u?1R5-`grYt@5hQI3mX>1Jf~Gro`b3a)CRCcC3gT~AZ=!JeL6CG6R9c}D zA`Pnm`lo*cNiTs)Kd3;J-Z@>dhEZJd98`J%n)Ku8fgtH0Q0W9TY2N9LAZaBIkjJDL z9H4fC1|&c+rZs(I4Wsz<2Q`cwf)Ai_Fn2jje+bg*1=YF$Dh=~h=ybtaMsdk_u(Tk< z2WVP=WxdSljv(n`sPqLi>6+<igk?Q(>dxG1vr;L#b!(o1c_PHF$zeogNk*aS+{w5VjZKne0pF#qqt-mCn!P$89D?Zra;RAhP>&GAn7uwS;Ey2mw@LI89>8Z8$r^O zpt=*Fx?#~dbNWM&^a8N7G{XX@LqYR^AamA$ouG&-6gGpk2{Tws_iSKPXFNE)uz^ur z@(Nf~lHo-@#HApEK={@4g&_ZYp8SwSoblfDiy#j3bi+nQaYcQED244Q6Y;AdcY4^a$lVKN9q#g9P?dN+uJ7<8fHoS=Cf&;lKZHU^XF z5BnI!8EvOGHi2UlOl3iM^$@BDOi4cChlIojXcI&UYQi#z^iHS+hR}e5P3Rs3OEX>u zQ-+`wEui3xgnBgyY6vqA#BfQdcVMHpGSe3}Gm0~6PrnGFoFSAygi4&w*up3-Spd~) z0BOH4{Dsz0-4IptAk=yYbp%3P15=WZp;{L(LqbUmv~81tfq`-QN07;KybKINOacs3 zcp=hIw=$?eq|HIn4Ezl5K?fv)E~S9V`+%hxqajotgsO*76Cl)L2(=MH9fnZXAk<3; z^$kL?Pj_r%6lWBIPzn%A4?@{NsEFwcK}wRryu@-oNJw%+LlQPN-Ub!#z6Eh+Db%l% zpyFOHAmW!G6vIZS_`&ZG0a%0dB-k3p8xZR0^u%^XaYn}J2SJqB^obx!6~eQGP@WJf z971J6s46fuJ)nb8f^jmKEx8z)z9vFbD0oz!fq`K?Seo?^KLdlp|hjU zdk-f#K0iP zB*oAGEu%pOfUw?l!5&6&Msu(#Mqdb(0HzF!LDP?*yF{R4AJ8EMh6bp(#w(Bs3=B;W zieUj*8{=jOb!_^@9!7D=hfs@GKpQbowG8j3GxjoyGya4q=ALc{;z>X#&FP6Co)LuS z1fhZLi#lybD$A1T7t5 zLn?2e;s(%OjwrP9{0Y{^$O9>z6(E%HbisZ`ea2u2FAYK!L#U?dh5d};jQtSan&}Hc zyd4nUVF+~vLfwK;Zz0rgFeS+*3h^W>Hzdhzg$AX_^u!5_;*#=EY1otmYu$JpZurwnRxMDKA4^ID70;VL>r63-^3{7~jVe`p`8M2W4s2Y44*(%t%R0(?GR5ee1?kefa-n$F@%A6I^#@6 zaYlX!B>|z-Ae0e=a+#hulTlo<8C2IW@gTbSP?J3&suID}_5(8+rJ2-=Q%g#V(o^$F z7)lFL5=&Ccb2BpYN{SiMQ%j0V5=&AU%5xJ-@^iQUn9aD2kvBOfGc~UyH?_DpF+Fwq z+PRFIx981c)R5RdV;kcFW=7@dmb)1BIbn^xDbovgF}5?#nf`MZqrQ-ZI>aL|nnhu| t)o#W*CSD6Yi2LL~qm$E*?q$^Gx-k=?wp1E2(;~2sQGwBSy5T-XbpT3O=!O6Q diff --git a/KleinDwm/source/dwm.c b/KleinDwm/source/dwm.c index 65a4ee0..9d0199a 100644 --- a/KleinDwm/source/dwm.c +++ b/KleinDwm/source/dwm.c @@ -633,6 +633,7 @@ clientmessage(XEvent *e) XSetWindowAttributes swa; XClientMessageEvent *cme = &e->xclient; Client *c = wintoclient(cme->window); + unsigned int i; if (showsystray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) { /* add systray icons */ @@ -689,8 +690,14 @@ clientmessage(XEvent *e) setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ || cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */)); } else if (cme->message_type == netatom[NetActiveWindow]) { - if (c != selmon->sel && !c->isurgent) - seturgent(c, 1); + for (i = 0; i < LENGTH(tags) && !((1 << i) & c->tags); i++); + if (i < LENGTH(tags)) { + const Arg a = {.ui = 1 << i}; + selmon = c->mon; + view(&a); + focus(c); + restack(selmon); + } } } diff --git a/KleinDwm/source/dwm.c.orig b/KleinDwm/source/dwm.c.orig index 5907d42..65a4ee0 100644 --- a/KleinDwm/source/dwm.c.orig +++ b/KleinDwm/source/dwm.c.orig @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -86,9 +87,21 @@ enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms * enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ +typedef struct TagState TagState; +struct TagState { + int selected; + int occupied; + int urgent; +}; + +typedef struct ClientState ClientState; +struct ClientState { + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; +}; + typedef union { - int i; - unsigned int ui; + long i; + unsigned long ui; float f; const void *v; } Arg; @@ -117,6 +130,7 @@ struct Client { Client *snext; Monitor *mon; Window win; + ClientState prevstate; }; typedef struct { @@ -135,6 +149,7 @@ typedef struct { typedef struct Pertag Pertag; struct Monitor { char ltsymbol[16]; + char lastltsymbol[16]; float mfact; int nmaster; int num; @@ -145,14 +160,17 @@ struct Monitor { unsigned int seltags; unsigned int sellt; unsigned int tagset[2]; + TagState tagstate; int showbar; int topbar; Client *clients; Client *sel; + Client *lastsel; Client *stack; Monitor *next; Window barwin; const Layout *lt[2]; + const Layout *lastlt; Pertag *pertag; }; @@ -211,6 +229,7 @@ static unsigned int getsystraywidth(); static int gettextprop(Window w, Atom atom, char *text, unsigned int size); static void grabbuttons(Client *c, int focused); static void grabkeys(void); +static int handlexevent(struct epoll_event *ev); static void incnmaster(const Arg *arg); static void keypress(XEvent *e); static void killclient(const Arg *arg); @@ -241,8 +260,10 @@ static void setclientstate(Client *c, long state); static void setfocus(Client *c); static void setfullscreen(Client *c, int fullscreen); static void setlayout(const Arg *arg); +static void setlayoutsafe(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); +static void setupepoll(void); static void seturgent(Client *c, int urg); static void showhide(Client *c); static void sigchld(int unused); @@ -317,6 +338,8 @@ static void (*handler[LASTEvent]) (XEvent *) = { [UnmapNotify] = unmapnotify }; static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast]; +static int epoll_fd; +static int dpy_fd; static int restart = 0; static int running = 1; static Cur *cursor[CurLast]; @@ -324,13 +347,20 @@ static Clr **scheme; static Clr **tagscheme; static Display *dpy; static Drw *drw; -static Monitor *mons, *selmon; +static Monitor *mons, *selmon, *lastselmon; static Window root, wmcheckwin; static KeySym keychain = -1; +#include "ipc.h" /* configuration, allows nested code to access above variables */ #include "config.h" +#ifdef VERSION +#include "IPCClient.c" +#include "yajl_dumps.c" +#include "ipc.c" +#endif + struct Pertag { unsigned int curtag, prevtag; /* current and previous tag */ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ @@ -572,6 +602,12 @@ cleanup(void) XSync(dpy, False); XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + + ipc_cleanup(); + + if (close(epoll_fd) < 0) { + fprintf(stderr, "Failed to close epoll file descriptor\n"); + } } void @@ -1337,6 +1373,25 @@ grabkeys(void) } } +int +handlexevent(struct epoll_event *ev) +{ + if (ev->events & EPOLLIN) { + XEvent ev; + while (running && XPending(dpy)) { + XNextEvent(dpy, &ev); + if (handler[ev.type]) { + handler[ev.type](&ev); /* call handler */ + ipc_send_events(mons, &lastselmon, selmon); + } + } + } else if (ev-> events & EPOLLHUP) { + return -1; + } + + return 0; +} + void incnmaster(const Arg *arg) { @@ -1821,12 +1876,40 @@ restack(Monitor *m) void run(void) { - XEvent ev; - /* main event loop */ + int event_count = 0; + const int MAX_EVENTS = 10; + struct epoll_event events[MAX_EVENTS]; + XSync(dpy, False); - while (running && !XNextEvent(dpy, &ev)) - if (handler[ev.type]) - handler[ev.type](&ev); /* call handler */ + + /* main event loop */ + while (running) { + event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, -1); + + for (int i = 0; i < event_count; i++) { + int event_fd = events[i].data.fd; + DEBUG("Got event from fd %d\n", event_fd); + + if (event_fd == dpy_fd) { + // -1 means EPOLLHUP + if (handlexevent(events + i) == -1) + return; + } else if (event_fd == ipc_get_sock_fd()) { + ipc_handle_socket_epoll_event(events + i); + } else if (ipc_is_client_registered(event_fd)){ + if (ipc_handle_client_epoll_event(events + i, mons, &lastselmon, selmon, + tags, LENGTH(tags), layouts, LENGTH(layouts)) < 0) { + fprintf(stderr, "Error handling IPC event on fd %d\n", event_fd); + } + } else { + fprintf(stderr, "Got event from unknown fd %d, ptr %p, u32 %d, u64 %lu", + event_fd, events[i].data.ptr, events[i].data.u32, + events[i].data.u64); + fprintf(stderr, " with events %d\n", events[i].events); + return; + } + } + } } void @@ -2044,6 +2127,18 @@ setlayout(const Arg *arg) drawbar(selmon); } +void +setlayoutsafe(const Arg *arg) +{ + const Layout *ltptr = (Layout *)arg->v; + if (ltptr == 0) + setlayout(arg); + for (int i = 0; i < LENGTH(layouts); i++) { + if (ltptr == &layouts[i]) + setlayout(arg); + } +} + /* arg > 1.0 will set mfact absolutely */ void setmfact(const Arg *arg) @@ -2146,6 +2241,36 @@ setup(void) XSelectInput(dpy, root, wa.event_mask); grabkeys(); focus(NULL); + setupepoll(); +} + +void +setupepoll(void) +{ + epoll_fd = epoll_create1(0); + dpy_fd = ConnectionNumber(dpy); + struct epoll_event dpy_event; + + // Initialize struct to 0 + memset(&dpy_event, 0, sizeof(dpy_event)); + + DEBUG("Display socket is fd %d\n", dpy_fd); + + if (epoll_fd == -1) { + fputs("Failed to create epoll file descriptor", stderr); + } + + dpy_event.events = EPOLLIN; + dpy_event.data.fd = dpy_fd; + if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, dpy_fd, &dpy_event)) { + fputs("Failed to add display file descriptor to epoll", stderr); + close(epoll_fd); + exit(1); + } + + if (ipc_init(ipcsockpath, epoll_fd, ipccommands, LENGTH(ipccommands)) < 0) { + fputs("Failed to initialize IPC\n", stderr); + } } void @@ -2749,10 +2874,18 @@ updatesystray(void) void updatetitle(Client *c) { + char oldname[sizeof(c->name)]; + strcpy(oldname, c->name); + if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); if (c->name[0] == '\0') /* hack to mark broken clients */ strcpy(c->name, broken); + + for (Monitor *m = mons; m; m = m->next) { + if (m->sel == c && strcmp(oldname, c->name) != 0) + ipc_focused_title_change_event(m->num, c->win, oldname, c->name); + } } void diff --git a/KleinDwm/source/dwm.o b/KleinDwm/source/dwm.o index a827afd26145a7ec4392b088aed9fc67789060a1..6f763c54639b08c9c6667187edb11ab79ff39c71 100644 GIT binary patch delta 41425 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 Um@fE*(VUax9fW&+^22%Z08Is-!T +Date: Tue, 7 Apr 2020 12:33:04 +0200 +Subject: [PATCH] Activate a window in response to _NET_ACTIVE_WINDOW + +By default, dwm response to client requests to _NET_ACTIVE_WINDOW client +messages by setting the urgency bit on the named window. + +This patch activates the window instead. + +Both behaviours are legitimate according to +https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html#idm140200472702304 + +One should decide which of these one should perform based on the message +senders' untestable claims that it represents the end-user. Setting the +urgency bit is the conservative decision. This patch implements the more +trusting alternative. + +It also allows dwm to work with `wmctrl -a` and other external window +management utilities + +--- + dwm.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/dwm.c b/dwm.c +index 4465af1..3919d47 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -514,6 +514,7 @@ clientmessage(XEvent *e) + { + XClientMessageEvent *cme = &e->xclient; + Client *c = wintoclient(cme->window); ++ unsigned int i; + + if (!c) + return; +@@ -523,8 +524,14 @@ clientmessage(XEvent *e) + setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ + || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); + } else if (cme->message_type == netatom[NetActiveWindow]) { +- if (c != selmon->sel && !c->isurgent) +- seturgent(c, 1); ++ for (i = 0; i < LENGTH(tags) && !((1 << i) & c->tags); i++); ++ if (i < LENGTH(tags)) { ++ const Arg a = {.ui = 1 << i}; ++ selmon = c->mon; ++ view(&a); ++ focus(c); ++ restack(selmon); ++ } + } + } + +-- +2.17.1 + From 130b21b83db6ebbb8fa02224e77b8b3d6cecc87c Mon Sep 17 00:00:00 2001 From: klein panic Date: Thu, 19 Sep 2024 22:23:14 -0400 Subject: [PATCH 10/13] Automated update --- KleinDwm/source/config.h | 2 +- KleinDwm/source/dwm | Bin 114264 -> 114264 bytes KleinDwm/source/dwm.o | Bin 128112 -> 128080 bytes KleinDwm/source/keys.h | 2 +- st/config.h | 6 +++--- st/st | Bin 110696 -> 110696 bytes st/x.o | Bin 73896 -> 73928 bytes 7 files changed, 5 insertions(+), 5 deletions(-) diff --git a/KleinDwm/source/config.h b/KleinDwm/source/config.h index 9373c06..4e757ac 100644 --- a/KleinDwm/source/config.h +++ b/KleinDwm/source/config.h @@ -3,7 +3,7 @@ #include "colors/space.h" #include "keys.h" -#define TERMINAL "alacritty" // default terminal appearance */ +#define TERMINAL "st" // default terminal appearance */ #define ICONSIZE 20 /* icon size */ #define ICONSPACING 5 /* space between icon and title */ static const unsigned int borderpx = 2; /* border pixel of windows */ diff --git a/KleinDwm/source/dwm b/KleinDwm/source/dwm index 7d450c0c72443659bdc8a97379f56f850b9f2307..44d1b8c233c15a133f7b2dcd4eeb33bf1a3d615b 100755 GIT binary patch delta 77 zcmccdhwa86whbA~A`7mrl;dktbumg~m*25rj>h+>=~Fk?Fds2v@{-)_WaY=m*WU|^`9E_j+zT(Si!-GC-Nb-E)+dNx#g0-E%^>4hNa2T`K>qDhI(4>v0 z7lNeCq0$j(($>=#f~4)C(iv#d&eJd6WfW)hnEvuEqrRjMRMi4BRRPlt?=k8#hD=Wc zQ4!lG-ecS@z<6T1=X=KEj4{&%KQNjzCQSGIz-Z67V0tHra+`hWxy{K#m}cwo9G zi1L`;38EaPp9E1WrgMH`v}bgf?g^qIrgwsjP{Hc(>cE|+H)Rw3yJ{-hVzpj&XWfK0C|da delta 676 zcmcccg8jn__6Zt{8#ZbN^l>KUBqkSSmXuU(uI^)HoLtb)xw)Y~fPeFYc^ep;3l?lI zSiqQ}CE3i!00sffV2Xi}fq_Ahfq|iI`o~j@;*#A^=>|0EInxzSGm1+tf=W+7lU_PK z5G4H^Dt!P=`qT8r(~RPtf1%PB(4-moA#QnqCjJSk{so%&-{}ueGm0~@@=yPDno&=Z z1FBtv1!4@$OG48f&oJsUicK#BQBuh>6-5uk25Au|M;HKoUvfK<_AW5 z#skwcK~&iEl^`l$`b!Y?V7lf6suZVfsoCbz=HU5S1`p^An>zW5x7L5LGjM z1pxL~^GXGVJ_i3iiOJ~P@eUYNe}Gow9Y#PpY+8SObAyah!7 M1H<{r2j|HH0NdM?X#fBK diff --git a/KleinDwm/source/keys.h b/KleinDwm/source/keys.h index 488a6b3..e0c5876 100644 --- a/KleinDwm/source/keys.h +++ b/KleinDwm/source/keys.h @@ -2,7 +2,7 @@ #include "movestack.c" #include -#define TERMINAL "alacritty" // default terminal +#define TERMINAL "st" // default terminal /* key definitions */ #define MODKEY Mod4Mask diff --git a/st/config.h b/st/config.h index 1dd7a7c..a8eb1cd 100644 --- a/st/config.h +++ b/st/config.h @@ -120,8 +120,8 @@ static const char *colorname[] = { /* more colors can be added after 255 to use with DefaultXX */ "#cccccc", "#555555", - "gray90", /* default foreground colour */ - "black", /* default background colour */ + "#ffb2b7", /* default foreground colour */ + "#011627", /* default background colour */ }; @@ -141,7 +141,7 @@ static unsigned int defaultrcs = 257; * 6: Bar ("|") * 7: Snowman ("☃") */ -static unsigned int cursorshape = 2; +static unsigned int cursorshape = 4; /* * Default columns and rows numbers diff --git a/st/st b/st/st index 2e6c61369165993067fc504b45e12bdba124fb9f..e6994b066e2fcff1018885e704485d5138108a4d 100755 GIT binary patch delta 3611 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 diff --git a/st/x.o b/st/x.o index 330e1271fc363b2f306198b45b956034d033f3b2..c91162b3898ec543eae0ea1953cb1fe398e0a27b 100644 GIT binary patch delta 261 zcmZ2+kmbZdmI)e+9UC=+O&M7>*P0&V=T}ZkOEO9_XHYgUG&D0Z-|XZ%k7tsHz~%>m z5v!$`*%-jUf)h+JFfuSO@G&qjaI#`lx`R9;$8-*PMhnJ_ q>5lS@_KX?R8$r~G=?6iS!gNLjMtdfX>C>GQ80{EmOm9?RR0jaTus`1b delta 244 zcmX?ckY&X|mI)e+85=c&O&OUs*P0&V-yG~ZmuFK@#A>POj0|94!3m}qKwLfs28MZz zn~VOg6J}(dt|-W;&&a<$P>}IFC!@f0MQO(4jH1(DN;8@>Mod?fVYKJ`;11EdVsc=P z`1A%DMg>NT=?i5T?HLzLe+Z&9rYp)a+A}=}oSr1hXvY{aeW5I)J)^?(haf6ox}qGT zJ>!Ati6H94^o1bm!t{qAN@KdBJfr<|1$jn}=^65j77*47c}5Gy71JNeGuksUOjlH3 Vv}bxTZF-Udqa9<#^o0tH>Hs${KcoNv From b166c1ec4230ea3ef306418bd152bce643cae3f6 Mon Sep 17 00:00:00 2001 From: klein panic Date: Fri, 27 Sep 2024 12:26:54 -0400 Subject: [PATCH 11/13] Automated update --- KleinDwm/source/config.h | 1 - customstatusbar/{statusbars => }/colorvars.sh | 0 customstatusbar/install.sh | 55 +++++++++++++++++++ .../{statusbars => }/statusbar.service | 4 +- customstatusbar/{statusbars => }/statusbar.sh | 0 customstatusbar/statusbars/install.sh | 42 -------------- 6 files changed, 57 insertions(+), 45 deletions(-) rename customstatusbar/{statusbars => }/colorvars.sh (100%) create mode 100755 customstatusbar/install.sh rename customstatusbar/{statusbars => }/statusbar.service (81%) rename customstatusbar/{statusbars => }/statusbar.sh (100%) delete mode 100755 customstatusbar/statusbars/install.sh diff --git a/KleinDwm/source/config.h b/KleinDwm/source/config.h index 4e757ac..6e4a564 100644 --- a/KleinDwm/source/config.h +++ b/KleinDwm/source/config.h @@ -3,7 +3,6 @@ #include "colors/space.h" #include "keys.h" -#define TERMINAL "st" // default terminal appearance */ #define ICONSIZE 20 /* icon size */ #define ICONSPACING 5 /* space between icon and title */ static const unsigned int borderpx = 2; /* border pixel of windows */ diff --git a/customstatusbar/statusbars/colorvars.sh b/customstatusbar/colorvars.sh similarity index 100% rename from customstatusbar/statusbars/colorvars.sh rename to customstatusbar/colorvars.sh diff --git a/customstatusbar/install.sh b/customstatusbar/install.sh new file mode 100755 index 0000000..c7bccb8 --- /dev/null +++ b/customstatusbar/install.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# Function to check if a command exists +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +# DWM dependency check (uncomment if necessary) +# if ! pgrep -x "dwm" > /dev/null; then +# echo "DWM is not running. Please ensure that DWM is installed and is your window manager." +# exit 1 +# fi + +# Check for the status2D dependency +if command_exists dwm; then + echo "DWM is installed. Make sure you have the status2D patch applied for proper rendering." +fi + +# Required packages list +required_packages=("grep" "gawk" "procps" "coreutils" "lm-sensors" "network-manager" "x11-xserver-utils") + +# Install required packages +for pkg in "${required_packages[@]}"; do + if ! dpkg -s "$pkg" >/dev/null 2>&1; then + echo "Package $pkg is not installed. Installing..." + sudo apt update + sudo apt install -y "$pkg" + if [ $? -ne 0 ]; then + echo "Failed to install $pkg. Please install it manually, or its equivalent, and edit the source code." + exit 1 + fi + else + echo "Package $pkg is already installed." + fi +done + +# Copy statusbar.sh to /usr/local/bin and make it executable +sudo cp statusbar.sh /usr/local/bin/statusbar +sudo chmod +x /usr/local/bin/statusbar + +# Create the directory and copy colorvars.sh +PREFIX="$HOME/.local/share/statusbar" +mkdir -p "$PREFIX" +cp colorvars.sh "$PREFIX" + +# Setup the systemd service +SERVICE_DIR="$HOME/.config/systemd/user" +mkdir -p "$SERVICE_DIR" +cp statusbar.service "$SERVICE_DIR" + +# Enable and restart the service +systemctl --user enable statusbar.service +systemctl --user restart statusbar.service + +echo "Installation completed successfully. The statusbar is installed and the service has been enabled and restarted." diff --git a/customstatusbar/statusbars/statusbar.service b/customstatusbar/statusbar.service similarity index 81% rename from customstatusbar/statusbars/statusbar.service rename to customstatusbar/statusbar.service index a22a9b8..a0ec29c 100644 --- a/customstatusbar/statusbars/statusbar.service +++ b/customstatusbar/statusbar.service @@ -1,6 +1,6 @@ [Unit] Description=SystemBar for DWM from suckless -After=graphical.target +After=default.target [Service] Type=simple @@ -11,4 +11,4 @@ Environment=DISPLAY=:0 Environment=XAUTHORITY=/home/klein/.Xauthority [Install] -WantedBy=graphical.target +WantedBy=default.target diff --git a/customstatusbar/statusbars/statusbar.sh b/customstatusbar/statusbar.sh similarity index 100% rename from customstatusbar/statusbars/statusbar.sh rename to customstatusbar/statusbar.sh diff --git a/customstatusbar/statusbars/install.sh b/customstatusbar/statusbars/install.sh deleted file mode 100755 index d23e81e..0000000 --- a/customstatusbar/statusbars/install.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env bash - -#Check if command exits -command_exists() { - command -v "$1" >/dev/null 2>&1 -} - -#DWM dependency is running -#if ! pgrep -x "dwm" > /dev/null; then -# echo "DWM is not running. Please ensure that you got that shit installed and its your window manager." -# exit 1 -#fi - -#status2d dependency (update later if you find out how) -if command_exists dwm; then - echo "DWM is installed. Make sure you got status2D patch applied for properrendering." -fi - -#Package dependcies -requires_packages=("grep" "gawk" "procps" "coreutils" "lm-sensors" "network-manager" "x11-xserver-utils") - -for pkg in "${requires_packages[@]}"; do - if ! dpkg -s "$pkg" >/dev/null 2>&1; then - echo "Package $pkg is not installed. Installing..." - sudo apt update - sudo apt install -y "$pkg" - if [ $? -ne 0 ]; then - echo "Failed to install $pkg. Install it manually, or its equivalent and edit source code" - exit 1 - fi - else - echo "Package $pkg is installed already. YAY" - fi -done -# sudo chmod +x statusbar.sh -sudo cp statusbar.sh /usr/local/bin/statusbar - -PREFIX="$HOME/.local/share/statusbar" -mkdir -p "$PREFIX" -cp colorvars.sh "$PREFIX" - -echo "Installation done. Run statusbar in shell. Installed to local bin" From 5c3577e3d385b0209e1e5cc146e362e0aa7a2233 Mon Sep 17 00:00:00 2001 From: klein panic Date: Fri, 27 Sep 2024 18:00:01 -0400 Subject: [PATCH 12/13] Automated update --- KleinDwm/{source => }/IPCClient.c | 0 KleinDwm/{source => }/IPCClient.h | 0 KleinDwm/{source => }/Makefile | 0 KleinDwm/{source => }/colors/default.h | 0 KleinDwm/{source => }/colors/space.h | 0 KleinDwm/{source => }/config.def.h | 0 KleinDwm/{source => }/config.def.h.orig | 0 KleinDwm/{source => }/config.def.h.rej | 0 KleinDwm/{source => }/config.h | 0 KleinDwm/{source => }/config.mk | 0 KleinDwm/{source => }/config.mk.orig | 0 KleinDwm/{source => }/config.mk.rej | 0 KleinDwm/{source => }/drw.c | 0 KleinDwm/{source => }/drw.c.orig | 0 KleinDwm/{source => }/drw.h | 0 KleinDwm/{source => }/drw.h.orig | 0 KleinDwm/{source => }/drw.o | Bin KleinDwm/{source => }/dwm | Bin KleinDwm/{source => }/dwm-msg | Bin KleinDwm/{source => }/dwm-msg.c | 0 KleinDwm/{source => }/dwm-msg.o | Bin KleinDwm/{source => }/dwm.1 | 0 KleinDwm/{source => }/dwm.1.orig | 0 KleinDwm/{source => }/dwm.c | 0 KleinDwm/{source => }/dwm.c.orig | 0 KleinDwm/{source => }/dwm.c.rej | 0 KleinDwm/{source => }/dwm.o | Bin KleinDwm/{source => }/fibonacci.c | 0 KleinDwm/{source => }/ipc.c | 0 KleinDwm/{source => }/ipc.h | 0 KleinDwm/{source => }/keys.h | 0 KleinDwm/{source => }/layouts.h | 0 KleinDwm/{source => }/movestack.c | 0 KleinDwm/{source => }/patches/README.md | 0 KleinDwm/{source => }/patches/accessnthmon.diff | 0 .../{source => }/patches/dwm-6.2-urg-border.diff | 0 .../patches/dwm-alwayscenter-20200625-f04cac6.diff | 0 .../patches/dwm-autostart-20210120-cb3f58a.diff | 0 .../patches/dwm-bar-height-spacing-6.3.diff | 0 .../patches/dwm-centerfirstwindow-6.2.diff | 0 .../dwm-clientmonoclesymbol-20220417-d93ff48.diff | 0 .../dwm-fakefullscreen-20210714-138b405.diff | 0 .../{source => }/patches/dwm-fibonacci-6.2.diff | 0 .../patches/dwm-focusonnetactive-6.2.diff | 0 .../patches/dwm-fullgaps-20200508-7b77734.diff | 0 .../patches/dwm-ipc-20201106-f04cac6.diff | 0 .../patches/dwm-keychain-20200729-053e3a2.diff | 0 .../patches/dwm-movestack-20211115-a786211.diff | 0 .../patches/dwm-pertag-20200914-61bb8b2.diff | 0 .../{source => }/patches/dwm-rainbowtags-6.2.diff | 0 .../patches/dwm-restartsig-20180523-6.2.diff | 0 .../patches/dwm-status2d-systray-6.3.diff | 0 .../patches/dwm-titlecolor-20210815-ed3ab6b4.diff | 0 .../{source => }/patches/dwm-winicon-6.3-v2.1.diff | 0 KleinDwm/{source => }/tags | 0 KleinDwm/{source => }/transient.c | 0 KleinDwm/{source => }/util.c | 0 KleinDwm/{source => }/util.c.orig | 0 KleinDwm/{source => }/util.h | 0 KleinDwm/{source => }/util.o | Bin KleinDwm/{source => }/yajl_dumps.c | 0 KleinDwm/{source => }/yajl_dumps.h | 0 62 files changed, 0 insertions(+), 0 deletions(-) rename KleinDwm/{source => }/IPCClient.c (100%) rename KleinDwm/{source => }/IPCClient.h (100%) rename KleinDwm/{source => }/Makefile (100%) rename KleinDwm/{source => }/colors/default.h (100%) rename KleinDwm/{source => }/colors/space.h (100%) rename KleinDwm/{source => }/config.def.h (100%) rename KleinDwm/{source => }/config.def.h.orig (100%) rename KleinDwm/{source => }/config.def.h.rej (100%) rename KleinDwm/{source => }/config.h (100%) rename KleinDwm/{source => }/config.mk (100%) rename KleinDwm/{source => }/config.mk.orig (100%) rename KleinDwm/{source => }/config.mk.rej (100%) rename KleinDwm/{source => }/drw.c (100%) rename KleinDwm/{source => }/drw.c.orig (100%) rename KleinDwm/{source => }/drw.h (100%) rename KleinDwm/{source => }/drw.h.orig (100%) rename KleinDwm/{source => }/drw.o (100%) rename KleinDwm/{source => }/dwm (100%) rename KleinDwm/{source => }/dwm-msg (100%) rename KleinDwm/{source => }/dwm-msg.c (100%) rename KleinDwm/{source => }/dwm-msg.o (100%) rename KleinDwm/{source => }/dwm.1 (100%) rename KleinDwm/{source => }/dwm.1.orig (100%) rename KleinDwm/{source => }/dwm.c (100%) rename KleinDwm/{source => }/dwm.c.orig (100%) rename KleinDwm/{source => }/dwm.c.rej (100%) rename KleinDwm/{source => }/dwm.o (100%) rename KleinDwm/{source => }/fibonacci.c (100%) rename KleinDwm/{source => }/ipc.c (100%) rename KleinDwm/{source => }/ipc.h (100%) rename KleinDwm/{source => }/keys.h (100%) rename KleinDwm/{source => }/layouts.h (100%) rename KleinDwm/{source => }/movestack.c (100%) rename KleinDwm/{source => }/patches/README.md (100%) rename KleinDwm/{source => }/patches/accessnthmon.diff (100%) rename KleinDwm/{source => }/patches/dwm-6.2-urg-border.diff (100%) rename KleinDwm/{source => }/patches/dwm-alwayscenter-20200625-f04cac6.diff (100%) rename KleinDwm/{source => }/patches/dwm-autostart-20210120-cb3f58a.diff (100%) rename KleinDwm/{source => }/patches/dwm-bar-height-spacing-6.3.diff (100%) rename KleinDwm/{source => }/patches/dwm-centerfirstwindow-6.2.diff (100%) rename KleinDwm/{source => }/patches/dwm-clientmonoclesymbol-20220417-d93ff48.diff (100%) rename KleinDwm/{source => }/patches/dwm-fakefullscreen-20210714-138b405.diff (100%) rename KleinDwm/{source => }/patches/dwm-fibonacci-6.2.diff (100%) rename KleinDwm/{source => }/patches/dwm-focusonnetactive-6.2.diff (100%) rename KleinDwm/{source => }/patches/dwm-fullgaps-20200508-7b77734.diff (100%) rename KleinDwm/{source => }/patches/dwm-ipc-20201106-f04cac6.diff (100%) rename KleinDwm/{source => }/patches/dwm-keychain-20200729-053e3a2.diff (100%) rename KleinDwm/{source => }/patches/dwm-movestack-20211115-a786211.diff (100%) rename KleinDwm/{source => }/patches/dwm-pertag-20200914-61bb8b2.diff (100%) rename KleinDwm/{source => }/patches/dwm-rainbowtags-6.2.diff (100%) rename KleinDwm/{source => }/patches/dwm-restartsig-20180523-6.2.diff (100%) rename KleinDwm/{source => }/patches/dwm-status2d-systray-6.3.diff (100%) rename KleinDwm/{source => }/patches/dwm-titlecolor-20210815-ed3ab6b4.diff (100%) rename KleinDwm/{source => }/patches/dwm-winicon-6.3-v2.1.diff (100%) rename KleinDwm/{source => }/tags (100%) rename KleinDwm/{source => }/transient.c (100%) rename KleinDwm/{source => }/util.c (100%) rename KleinDwm/{source => }/util.c.orig (100%) rename KleinDwm/{source => }/util.h (100%) rename KleinDwm/{source => }/util.o (100%) rename KleinDwm/{source => }/yajl_dumps.c (100%) rename KleinDwm/{source => }/yajl_dumps.h (100%) diff --git a/KleinDwm/source/IPCClient.c b/KleinDwm/IPCClient.c similarity index 100% rename from KleinDwm/source/IPCClient.c rename to KleinDwm/IPCClient.c diff --git a/KleinDwm/source/IPCClient.h b/KleinDwm/IPCClient.h similarity index 100% rename from KleinDwm/source/IPCClient.h rename to KleinDwm/IPCClient.h diff --git a/KleinDwm/source/Makefile b/KleinDwm/Makefile similarity index 100% rename from KleinDwm/source/Makefile rename to KleinDwm/Makefile diff --git a/KleinDwm/source/colors/default.h b/KleinDwm/colors/default.h similarity index 100% rename from KleinDwm/source/colors/default.h rename to KleinDwm/colors/default.h diff --git a/KleinDwm/source/colors/space.h b/KleinDwm/colors/space.h similarity index 100% rename from KleinDwm/source/colors/space.h rename to KleinDwm/colors/space.h diff --git a/KleinDwm/source/config.def.h b/KleinDwm/config.def.h similarity index 100% rename from KleinDwm/source/config.def.h rename to KleinDwm/config.def.h diff --git a/KleinDwm/source/config.def.h.orig b/KleinDwm/config.def.h.orig similarity index 100% rename from KleinDwm/source/config.def.h.orig rename to KleinDwm/config.def.h.orig diff --git a/KleinDwm/source/config.def.h.rej b/KleinDwm/config.def.h.rej similarity index 100% rename from KleinDwm/source/config.def.h.rej rename to KleinDwm/config.def.h.rej diff --git a/KleinDwm/source/config.h b/KleinDwm/config.h similarity index 100% rename from KleinDwm/source/config.h rename to KleinDwm/config.h diff --git a/KleinDwm/source/config.mk b/KleinDwm/config.mk similarity index 100% rename from KleinDwm/source/config.mk rename to KleinDwm/config.mk diff --git a/KleinDwm/source/config.mk.orig b/KleinDwm/config.mk.orig similarity index 100% rename from KleinDwm/source/config.mk.orig rename to KleinDwm/config.mk.orig diff --git a/KleinDwm/source/config.mk.rej b/KleinDwm/config.mk.rej similarity index 100% rename from KleinDwm/source/config.mk.rej rename to KleinDwm/config.mk.rej diff --git a/KleinDwm/source/drw.c b/KleinDwm/drw.c similarity index 100% rename from KleinDwm/source/drw.c rename to KleinDwm/drw.c diff --git a/KleinDwm/source/drw.c.orig b/KleinDwm/drw.c.orig similarity index 100% rename from KleinDwm/source/drw.c.orig rename to KleinDwm/drw.c.orig diff --git a/KleinDwm/source/drw.h b/KleinDwm/drw.h similarity index 100% rename from KleinDwm/source/drw.h rename to KleinDwm/drw.h diff --git a/KleinDwm/source/drw.h.orig b/KleinDwm/drw.h.orig similarity index 100% rename from KleinDwm/source/drw.h.orig rename to KleinDwm/drw.h.orig diff --git a/KleinDwm/source/drw.o b/KleinDwm/drw.o similarity index 100% rename from KleinDwm/source/drw.o rename to KleinDwm/drw.o diff --git a/KleinDwm/source/dwm b/KleinDwm/dwm similarity index 100% rename from KleinDwm/source/dwm rename to KleinDwm/dwm diff --git a/KleinDwm/source/dwm-msg b/KleinDwm/dwm-msg similarity index 100% rename from KleinDwm/source/dwm-msg rename to KleinDwm/dwm-msg diff --git a/KleinDwm/source/dwm-msg.c b/KleinDwm/dwm-msg.c similarity index 100% rename from KleinDwm/source/dwm-msg.c rename to KleinDwm/dwm-msg.c diff --git a/KleinDwm/source/dwm-msg.o b/KleinDwm/dwm-msg.o similarity index 100% rename from KleinDwm/source/dwm-msg.o rename to KleinDwm/dwm-msg.o diff --git a/KleinDwm/source/dwm.1 b/KleinDwm/dwm.1 similarity index 100% rename from KleinDwm/source/dwm.1 rename to KleinDwm/dwm.1 diff --git a/KleinDwm/source/dwm.1.orig b/KleinDwm/dwm.1.orig similarity index 100% rename from KleinDwm/source/dwm.1.orig rename to KleinDwm/dwm.1.orig diff --git a/KleinDwm/source/dwm.c b/KleinDwm/dwm.c similarity index 100% rename from KleinDwm/source/dwm.c rename to KleinDwm/dwm.c diff --git a/KleinDwm/source/dwm.c.orig b/KleinDwm/dwm.c.orig similarity index 100% rename from KleinDwm/source/dwm.c.orig rename to KleinDwm/dwm.c.orig diff --git a/KleinDwm/source/dwm.c.rej b/KleinDwm/dwm.c.rej similarity index 100% rename from KleinDwm/source/dwm.c.rej rename to KleinDwm/dwm.c.rej diff --git a/KleinDwm/source/dwm.o b/KleinDwm/dwm.o similarity index 100% rename from KleinDwm/source/dwm.o rename to KleinDwm/dwm.o diff --git a/KleinDwm/source/fibonacci.c b/KleinDwm/fibonacci.c similarity index 100% rename from KleinDwm/source/fibonacci.c rename to KleinDwm/fibonacci.c diff --git a/KleinDwm/source/ipc.c b/KleinDwm/ipc.c similarity index 100% rename from KleinDwm/source/ipc.c rename to KleinDwm/ipc.c diff --git a/KleinDwm/source/ipc.h b/KleinDwm/ipc.h similarity index 100% rename from KleinDwm/source/ipc.h rename to KleinDwm/ipc.h diff --git a/KleinDwm/source/keys.h b/KleinDwm/keys.h similarity index 100% rename from KleinDwm/source/keys.h rename to KleinDwm/keys.h diff --git a/KleinDwm/source/layouts.h b/KleinDwm/layouts.h similarity index 100% rename from KleinDwm/source/layouts.h rename to KleinDwm/layouts.h diff --git a/KleinDwm/source/movestack.c b/KleinDwm/movestack.c similarity index 100% rename from KleinDwm/source/movestack.c rename to KleinDwm/movestack.c diff --git a/KleinDwm/source/patches/README.md b/KleinDwm/patches/README.md similarity index 100% rename from KleinDwm/source/patches/README.md rename to KleinDwm/patches/README.md diff --git a/KleinDwm/source/patches/accessnthmon.diff b/KleinDwm/patches/accessnthmon.diff similarity index 100% rename from KleinDwm/source/patches/accessnthmon.diff rename to KleinDwm/patches/accessnthmon.diff diff --git a/KleinDwm/source/patches/dwm-6.2-urg-border.diff b/KleinDwm/patches/dwm-6.2-urg-border.diff similarity index 100% rename from KleinDwm/source/patches/dwm-6.2-urg-border.diff rename to KleinDwm/patches/dwm-6.2-urg-border.diff diff --git a/KleinDwm/source/patches/dwm-alwayscenter-20200625-f04cac6.diff b/KleinDwm/patches/dwm-alwayscenter-20200625-f04cac6.diff similarity index 100% rename from KleinDwm/source/patches/dwm-alwayscenter-20200625-f04cac6.diff rename to KleinDwm/patches/dwm-alwayscenter-20200625-f04cac6.diff diff --git a/KleinDwm/source/patches/dwm-autostart-20210120-cb3f58a.diff b/KleinDwm/patches/dwm-autostart-20210120-cb3f58a.diff similarity index 100% rename from KleinDwm/source/patches/dwm-autostart-20210120-cb3f58a.diff rename to KleinDwm/patches/dwm-autostart-20210120-cb3f58a.diff diff --git a/KleinDwm/source/patches/dwm-bar-height-spacing-6.3.diff b/KleinDwm/patches/dwm-bar-height-spacing-6.3.diff similarity index 100% rename from KleinDwm/source/patches/dwm-bar-height-spacing-6.3.diff rename to KleinDwm/patches/dwm-bar-height-spacing-6.3.diff diff --git a/KleinDwm/source/patches/dwm-centerfirstwindow-6.2.diff b/KleinDwm/patches/dwm-centerfirstwindow-6.2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-centerfirstwindow-6.2.diff rename to KleinDwm/patches/dwm-centerfirstwindow-6.2.diff diff --git a/KleinDwm/source/patches/dwm-clientmonoclesymbol-20220417-d93ff48.diff b/KleinDwm/patches/dwm-clientmonoclesymbol-20220417-d93ff48.diff similarity index 100% rename from KleinDwm/source/patches/dwm-clientmonoclesymbol-20220417-d93ff48.diff rename to KleinDwm/patches/dwm-clientmonoclesymbol-20220417-d93ff48.diff diff --git a/KleinDwm/source/patches/dwm-fakefullscreen-20210714-138b405.diff b/KleinDwm/patches/dwm-fakefullscreen-20210714-138b405.diff similarity index 100% rename from KleinDwm/source/patches/dwm-fakefullscreen-20210714-138b405.diff rename to KleinDwm/patches/dwm-fakefullscreen-20210714-138b405.diff diff --git a/KleinDwm/source/patches/dwm-fibonacci-6.2.diff b/KleinDwm/patches/dwm-fibonacci-6.2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-fibonacci-6.2.diff rename to KleinDwm/patches/dwm-fibonacci-6.2.diff diff --git a/KleinDwm/source/patches/dwm-focusonnetactive-6.2.diff b/KleinDwm/patches/dwm-focusonnetactive-6.2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-focusonnetactive-6.2.diff rename to KleinDwm/patches/dwm-focusonnetactive-6.2.diff diff --git a/KleinDwm/source/patches/dwm-fullgaps-20200508-7b77734.diff b/KleinDwm/patches/dwm-fullgaps-20200508-7b77734.diff similarity index 100% rename from KleinDwm/source/patches/dwm-fullgaps-20200508-7b77734.diff rename to KleinDwm/patches/dwm-fullgaps-20200508-7b77734.diff diff --git a/KleinDwm/source/patches/dwm-ipc-20201106-f04cac6.diff b/KleinDwm/patches/dwm-ipc-20201106-f04cac6.diff similarity index 100% rename from KleinDwm/source/patches/dwm-ipc-20201106-f04cac6.diff rename to KleinDwm/patches/dwm-ipc-20201106-f04cac6.diff diff --git a/KleinDwm/source/patches/dwm-keychain-20200729-053e3a2.diff b/KleinDwm/patches/dwm-keychain-20200729-053e3a2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-keychain-20200729-053e3a2.diff rename to KleinDwm/patches/dwm-keychain-20200729-053e3a2.diff diff --git a/KleinDwm/source/patches/dwm-movestack-20211115-a786211.diff b/KleinDwm/patches/dwm-movestack-20211115-a786211.diff similarity index 100% rename from KleinDwm/source/patches/dwm-movestack-20211115-a786211.diff rename to KleinDwm/patches/dwm-movestack-20211115-a786211.diff diff --git a/KleinDwm/source/patches/dwm-pertag-20200914-61bb8b2.diff b/KleinDwm/patches/dwm-pertag-20200914-61bb8b2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-pertag-20200914-61bb8b2.diff rename to KleinDwm/patches/dwm-pertag-20200914-61bb8b2.diff diff --git a/KleinDwm/source/patches/dwm-rainbowtags-6.2.diff b/KleinDwm/patches/dwm-rainbowtags-6.2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-rainbowtags-6.2.diff rename to KleinDwm/patches/dwm-rainbowtags-6.2.diff diff --git a/KleinDwm/source/patches/dwm-restartsig-20180523-6.2.diff b/KleinDwm/patches/dwm-restartsig-20180523-6.2.diff similarity index 100% rename from KleinDwm/source/patches/dwm-restartsig-20180523-6.2.diff rename to KleinDwm/patches/dwm-restartsig-20180523-6.2.diff diff --git a/KleinDwm/source/patches/dwm-status2d-systray-6.3.diff b/KleinDwm/patches/dwm-status2d-systray-6.3.diff similarity index 100% rename from KleinDwm/source/patches/dwm-status2d-systray-6.3.diff rename to KleinDwm/patches/dwm-status2d-systray-6.3.diff diff --git a/KleinDwm/source/patches/dwm-titlecolor-20210815-ed3ab6b4.diff b/KleinDwm/patches/dwm-titlecolor-20210815-ed3ab6b4.diff similarity index 100% rename from KleinDwm/source/patches/dwm-titlecolor-20210815-ed3ab6b4.diff rename to KleinDwm/patches/dwm-titlecolor-20210815-ed3ab6b4.diff diff --git a/KleinDwm/source/patches/dwm-winicon-6.3-v2.1.diff b/KleinDwm/patches/dwm-winicon-6.3-v2.1.diff similarity index 100% rename from KleinDwm/source/patches/dwm-winicon-6.3-v2.1.diff rename to KleinDwm/patches/dwm-winicon-6.3-v2.1.diff diff --git a/KleinDwm/source/tags b/KleinDwm/tags similarity index 100% rename from KleinDwm/source/tags rename to KleinDwm/tags diff --git a/KleinDwm/source/transient.c b/KleinDwm/transient.c similarity index 100% rename from KleinDwm/source/transient.c rename to KleinDwm/transient.c diff --git a/KleinDwm/source/util.c b/KleinDwm/util.c similarity index 100% rename from KleinDwm/source/util.c rename to KleinDwm/util.c diff --git a/KleinDwm/source/util.c.orig b/KleinDwm/util.c.orig similarity index 100% rename from KleinDwm/source/util.c.orig rename to KleinDwm/util.c.orig diff --git a/KleinDwm/source/util.h b/KleinDwm/util.h similarity index 100% rename from KleinDwm/source/util.h rename to KleinDwm/util.h diff --git a/KleinDwm/source/util.o b/KleinDwm/util.o similarity index 100% rename from KleinDwm/source/util.o rename to KleinDwm/util.o diff --git a/KleinDwm/source/yajl_dumps.c b/KleinDwm/yajl_dumps.c similarity index 100% rename from KleinDwm/source/yajl_dumps.c rename to KleinDwm/yajl_dumps.c diff --git a/KleinDwm/source/yajl_dumps.h b/KleinDwm/yajl_dumps.h similarity index 100% rename from KleinDwm/source/yajl_dumps.h rename to KleinDwm/yajl_dumps.h From 5a374dc02ce3c01c27d4f7e471ade7504cfb52bf Mon Sep 17 00:00:00 2001 From: klein panic Date: Tue, 15 Oct 2024 16:01:34 -0400 Subject: [PATCH 13/13] fixed readme --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e751d1d..e851fac 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ -# Suckless Installs - Programs associated with my window manager, and my window manager. -## Purpose -I pretty much use this as my backup system (for my window manage) +# Custom Suckless Dynamic Window Manager with added patches. + +## Includes +- The DWM source. +- Statusbar with bash using status2d patches +- slstatus +- st (simple terminal with changes) +- pinentry-dmenu +- dmen