diff options
Diffstat (limited to '.config/bspwm')
| -rwxr-xr-x | .config/bspwm/bspwmrc | 275 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/bspdragtofloat | 46 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/bspswallow | 12 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/bspwindows | 14 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/bspwm-monitor-setup | 59 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/bspwm-toggle-visibility.sh | 23 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/close-window | 11 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/drag-float | 42 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/external_rules.sh | 71 | ||||
| -rwxr-xr-x | .config/bspwm/scripts/hide-window | 38 |
10 files changed, 0 insertions, 591 deletions
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc deleted file mode 100755 index d30d6db..0000000 --- a/.config/bspwm/bspwmrc +++ /dev/null @@ -1,275 +0,0 @@ -#! /bin/sh - -################################################################################ -# ██████╗ ███████╗██████╗ ██╗ ██╗███╗ ███╗ # -# ██╔══██╗██╔════╝██╔══██╗██║ ██║████╗ ████║ # -# ██████╔╝███████╗██████╔╝██║ █╗ ██║██╔████╔██║ # -# ██╔══██╗╚════██║██╔═══╝ ██║███╗██║██║╚██╔╝██║ # -# ██████╔╝███████║██║ ╚███╔███╔╝██║ ╚═╝ ██║ # -# ╚═════╝ ╚══════╝╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝ # -################################## By: srdusr ################################## - -# ############################################################################## -# # ENV VARS # -# ############################################################################## - -## Environments -export PATH="${PATH}:${HOME}/.config/bspwm/bin" - -# Get the name of the primary monitor -mainmonitor=$(xrandr --query | awk '/ primary/{print $1}') - -## Monitors -# If no primary monitor is identified, use the first connected monitor -if [ "$mainmonitor" = "" ]; then - mainmonitor=$(xrandr --query | awk '/ connected/ {print $1; exit}') -fi - -# Set up workspaces on the primary monitor -bspc monitor "$mainmonitor" -d #1 2 3 4 5 - -# Check the number of connected monitors -connected_monitors=$(xrandr --query | grep -c " connected") - -if [ "$connected_monitors" -gt 1 ]; then - # Get the name of the secondary monitor (exclude the primary monitor) - secondmonitor=$(xrandr --query | awk '/ connected/ && $1 != "'"$mainmonitor"'" {print $1; exit}') - - # Set up workspaces on the secondary monitor - bspc monitor "$secondmonitor" -d #6 7 8 9 10 - # Check if the secondary monitor is connected and configure the layout - if [ "$secondmonitor" != "" ]; then - xrandr --output "$mainmonitor" --primary --auto --output "$secondmonitor" --auto --right-of "$mainmonitor" - fi -fi - -#INTERNAL_MONITOR="LVDS-1" -#EXTERNAL_MONITOR="HDMI-1" -## on first load setup default workspaces -#if [[ "$1" = 0 ]]; then -# if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then -# bspc monitor "$EXTERNAL_MONITOR" -d 1 2 3 4 5 -# bspc monitor "$INTERNAL_MONITOR" -d 6 7 8 9 10 -# bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR" -# else -# bspc monitor "$INTERNAL_MONITOR" -d 1 2 3 4 5 6 7 8 9 10 -# fi -#fi - -# ############################################################################## -# # FUNCTIONS # -# ############################################################################## - -config() { bspc config "$@" & } -rule() { bspc rule -a "$@" & } -run_once() { - if [ ! "$(pgrep -f "$1")" ]; then - "$@" & - fi -} - -# ############################################################################## -# # WINDOW RULES # -# ############################################################################## - -## Rules -bspc rule -r *:* # remove all rules first -rule '*' --one-shot state=below private=border_width:10 -#rule '*:Tiled' --one-shot state=tiled rectangle=50x50+0+50 -#rule '*' --one-shot state=floating rectangle=1028x374+0+50 -#rule \* rectangle=680x700+340+40 -rule '*:*:Picture-in-Picture' state=floating sticky=on layer=above -rule '*:*:Picture in picture' state=floating sticky=on layer=above -rule firefox:Toolkit focus=on state=floating sticky=on layer=above rectangle=400x280+955+475 #320x190+1030+480 #522x316-10+280 -rule "https://www.youtube.com - Enhancer for YouTube™ — Mozilla Firefox" state=floating sticky=on layer=above -rule Wezterm state=floating -rule Zathura state=tiled -rule Pavucontrol state=floating rectangle=490x260+862+37 -rule Blueman-manager state=floating rectangle=536x420+818+37 #490x260-9+37 -rule scratchpad sticky=on state=floating # SCRATCHPAD -rule heads-up-display sticky=on state=floating rectangle=360x160+990+35 # Heads Up Display (scratchpad) -rule Onboard sticky=on state=floating rectangle=700x205+480-89 # Virtual keyboard -rule Plank layer=above border=off -rule Protonvpn state=floating -rule qBittorrent desktop='^2' -rule discord desktop='^4' -rule firefox -o desktop=^1 -rule stalonetray state=floating manage=off -#bspc rule -a Spotify:spotify desktop='^' state=tiled -#bspc rule -a '*:spotify' desktop='^3' state=tiled - -# ############################################################################## -# # AUTOSTART APPS # -# ############################################################################## - -# Clear cache -#rm "$HOME"/.cache/dunst.log -#rm "$HOME"/.cache/fake_battery_capacity -#rm "$HOME"/.cache/eww-calendar.lock -#rm "$HOME"/.cache/eww-escreen.lock -#rm "$HOME"/.cache/eww-control-center.lock -#rm -r "$HOME"/.cache/dunst/ - -# Autostart applications -#"$HOME"/.config/bspwm/scripts/bspwm_setup_monitors & -pgrep -x sxhkd > /dev/null || sxhkd & -pgrep -x plank > /dev/null || plank & -pgrep -x jgmenu > /dev/null || bspc rule -a jgmenu desktop='^H' state=floating hidden=on && jgmenu --hide-on-startup & -picom --config "$HOME"/.config/picom/picom.conf & -rm "$HOME"/.jgmenu-lockfile -"$HOME"/.config/polybar/launch.sh & -run_once unclutter & # Remove mouse when idle -run_once "$HOME"/.scripts/lockscreen-wallpaper & -run_once xss-lock -- betterlockscreen -l & -nitrogen --force-setter=xinerama --restore & -run_once redshift & -run_once low-bat-notifier & -pkill persistentQuickUtilities.sh; "$HOME"/.config/bspwm/scripts/persistentQuickUtilities.sh & -#xfce4-panel --disable-wm-check & - -# Start polkit agent -#[ "$(pidof xfce-polkit)" != "" ] || /usr/lib/xfce-polkit/xfce-polkit & -run_once /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & - -# Volume and brightness indicator (xob) -source "$HOME"/.virtualenvs/bin/activate # Activate virtual environment -run_once "$HOME"/.config/xob/launch.sh & -deactivate # Deactivate virtual environment - -# Eww -pkill eww -eww daemon - -xset m 0 0 # Disable mouse drift - -pgrep -x plank.sh > /dev/null || plank.sh & - -#wmname LG3D # Fixes Java applications -# Solve java apps issues (e.g. JetBrains IDEs like PyCharm, CLion, etc). # -#export _JAVA_AWT_WM_NONREPARENTING=1 - -#export QT_QPA_PLATFORMTHEME="qt5ct" # Use qt5ct to set Qt theme - -# Start MPD and mpDris2 -#exec mpd & -#exec mpDris2 & - -# Systray -#run_once signal-desktop --start-in-tray & #--use-tray-icon -#run_once onboard --not-show-in=DESKTOPS & -if ! pgrep -x "stalonetray" > /dev/null; then - stalonetray & -fi - -declare -a restart=(clipit blueman-applet caffeine) -for i in "${restart[@]}"; do - pgrep -x "$i" | xargs kill - sleep 0.5 - eval "$i" & -done - -while ! pgrep -x "clipit" > /dev/null || ! pgrep -x "blueman-applet" > /dev/null || ! pgrep -x "caffeine" > /dev/null; do - #sleep 0.5 - systray & -done -xdo hide -N stalonetray -touch "/tmp/syshide.lock" - -# ############################################################################## -# # CONFIGURATION # -# ############################################################################## - -## Config -PANEL_HEIGHT=24 -config top_padding "$PANEL_HEIGHT" -config honor_size_hints true -config automatic_scheme alternate -config initial_polarity second_child -config pointer_modifier mod4 -config click_to_focus none -config pointer_action1 move -config pointer_action2 resize_side -config pointer_action3 resize_corner -config focus_follows_pointer true -config remove_disabled_monitors true -config remove_unplugged_monitors true -config merge_overlapping_monitors true -config border_width 4 -config border_radius 10 -config window_gap 10 -config split_ratio 0.52 -config borderless_monocle true -config gapless_monocle true -config swallow_first_click false -config normal_border_color "#000000" -config focused_border_color "#000000" -config active_border_color "#000000" -config presel_feedback_color "#BF616A" - -# ############################################################################## -# # MISCELLANEOUS # -# ############################################################################## - -## Fullscreen -bspc subscribe node_state | while read -r _ _ _ _ state flag; do - if [[ "$state" != fullscreen ]]; then continue; fi - if [[ "$flag" == on ]]; then - xdo lower -N Plank - #"$(which eww)" -c "$HOME"/.config/eww close-all - else - xdo raise -N Plank - #"$(which eww)" -c "$HOME"/.config/eww open bar - fi -done & - -## Title-bar -rm -rf /tmp/title-bar_debug.log -rm -rf /tmp/title-bar.lock - -processes=("title-bar" "update-title" "lemonbar") - -for process in "${processes[@]}"; do - if pidof -q "$process"; then - pkill -x "$process" > /dev/null; sleep 0.1 - fi -done - -# Check if title-bar is already running -if ! pgrep -x "title-bar" >/dev/null; then - # Create a lock file - lockfile="/tmp/title-bar.lock" - - # Check if the lock file exists - if [ ! -e "$lockfile" ]; then - # Create the lock file - touch "$lockfile" - - # Function to handle BSPWM events - handle_bspwm_events() { - while read; do - if ! pgrep -x "title-bar" >/dev/null; then - bash "$HOME/.scripts/title-bar" & - fi - done - } - - # Start bspc subscribe in the background and pass events to the handler function - bspc subscribe | handle_bspwm_events & - - # Remove the lock file when the script exits - trap 'rm -f "$lockfile"' EXIT - else - echo "title-bar is already running." - fi -fi - -start_dunst() { - # stop dunst if it has been started by any application that called notify-send - killall -q dunst - # Wait until the processes have been shut down - while pgrep -u "$UID" -x dunst >/dev/null; do sleep .05; done - while ! pgrep -u "$UID" -x dunst >/dev/null; do sleep .05; done -} -start_dunst & - -config external_rules_command ~/.config/bspwm/scripts/external_rules.sh & diff --git a/.config/bspwm/scripts/bspdragtofloat b/.config/bspwm/scripts/bspdragtofloat deleted file mode 100755 index e2f88a2..0000000 --- a/.config/bspwm/scripts/bspdragtofloat +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/env bash - -: "${BSPWM_DIR:="${XDG_CONFIG_HOME:-$HOME/.config}/bspwm"}" - -status_file="$BSPWM_DIR/tmp/drag_to_float" - -[[ "$1" = stop ]] && { - [[ -e "$status_file" ]] \ - && rm -r -- "$status_file" - exit -} - -[[ -e "$status_file" ]] \ - && exit - -< <(bspc query -T -n pointed.window | jq -r '"\(.id) \(.client.state)"') read -r node node_state - -[[ -z "$node" ]] \ - && exit - -case "$node_state" in - floating) - ;; - tiled|pseudo_tiled) - node_tiled_rect=($(bspc query -T -n "$node" | jq -r '.client.tiledRectangle[]')) - bspc node "$node" -t floating - xdo move -x "${node_tiled_rect[0]}" -y "${node_tiled_rect[1]}" "$node" - xdo resize -w "${node_tiled_rect[2]}" -h "${node_tiled_rect[3]}" "$node" ;; - *) # fullscreen - exit ;; -esac - -eval "$(xdotool getmouselocation --shell)" -x="$X" y="$Y" -touch -- "$status_file" -while [[ -e "$status_file" ]]; do - eval "$(xdotool getmouselocation --shell)" - (( X != x || Y != y )) && { - bspc node "$node" -v "$((X - x))" "$((Y - y))" - x="$X" y="$Y" - } - sleep .01 -done - -[[ -e "$status_file" ]] \ - && rm -r -- "$status_file" diff --git a/.config/bspwm/scripts/bspswallow b/.config/bspwm/scripts/bspswallow deleted file mode 100755 index dea343f..0000000 --- a/.config/bspwm/scripts/bspswallow +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -NODE_CURRENT=$(bspc query -N -n focused) -$@ & -PID_COMMAND=$! -WATCH=$(bspc subscribe -c 1 node_add) -NODE_NEW=${WATCH%% *} -bspc node -s $NODE_CURRENT -bspc node $NODE_CURRENT --flag hidden=on -wait $PID_COMMAND -bspc node $NODE_CURRENT --flag hidden=off -bspc node $NODE_CURRENT --focus diff --git a/.config/bspwm/scripts/bspwindows b/.config/bspwm/scripts/bspwindows deleted file mode 100755 index 26deeab..0000000 --- a/.config/bspwm/scripts/bspwindows +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# bspwindows -# get targets for drawing borders/whatever on in bspwm - -target="${1:-active}" - -case "$target" in - active) - bspc query -N -n .local.descendant_of.window.leaf.!fullscreen - ;; - inactive) - bspc query -N -n .local.!descendant_of.window.leaf.!fullscreen - ;; -esac diff --git a/.config/bspwm/scripts/bspwm-monitor-setup b/.config/bspwm/scripts/bspwm-monitor-setup deleted file mode 100755 index 6e38bb7..0000000 --- a/.config/bspwm/scripts/bspwm-monitor-setup +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash - -INTERNAL_MONITOR="eDP" -EXTERNAL_MONITOR="HDMI-A-0" - -monitor_add() { - # Move first 5 desktops to external monitor - for desktop in $(bspc query -D --names -m "$INTERNAL_MONITOR" | sed 5q); do - bspc desktop "$desktop" --to-monitor "$EXTERNAL_MONITOR" - done - # Remove default desktop created by bspwm - bspc desktop Desktop --remove - # reorder monitors - bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR" -} - -monitor_remove() { - # Add default temp desktop because a minimum of one desktop is required per monitor - bspc monitor "$EXTERNAL_MONITOR" -a Desktop - - # Move all desktops except the last default desktop to internal monitor - for desktop in $(bspc query -D -m "$EXTERNAL_MONITOR"); do - bspc desktop "$desktop" --to-monitor "$INTERNAL_MONITOR" - done - - # delete default desktops - bspc desktop Desktop --remove - # reorder desktops - bspc monitor "$INTERNAL_MONITOR" -o 1 2 3 4 5 6 7 8 9 10 -} - -if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then - # set xrandr rules for docked setup - xrandr --output "$INTERNAL_MONITOR" --mode 1920x1080 --pos 0x0 --rotate normal --output "$EXTERNAL_MONITOR" --primary --mode 1920x1080 --pos 1920x780 --rotate normal - if [[ $(bspc query -D -m "${EXTERNAL_MONITOR}" | wc -l) -ne 5 ]]; then - monitor_add - fi - bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR" -else - # set xrandr rules for mobile setup - xrandr --output "$INTERNAL_MONITOR" --primary --mode 1920x1080 --pos 0x0 --rotate normal --output "$EXTERNAL_MONITOR" --off - if [[ $(bspc query -D -m "${INTERNAL_MONITOR}" | wc -l) -ne 10 ]]; then - monitor_remove - fi -fi - -# Set wallpaper -~/.local/bin/setbg.sh & - -# Kill and relaunch polybar -kill -9 $(pgrep -f 'polybar') >/dev/null 2>&1 -polybar-msg cmd quit >/dev/null 2>&1 -while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done -if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then - polybar --reload primary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-primary.log 2>&1 200>&- & - polybar --reload secondary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-secondary.log 2>&1 200>&- & -else - polybar --reload primary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-primary.log 2>&1 200>&- & -fi diff --git a/.config/bspwm/scripts/bspwm-toggle-visibility.sh b/.config/bspwm/scripts/bspwm-toggle-visibility.sh deleted file mode 100755 index 45a4c53..0000000 --- a/.config/bspwm/scripts/bspwm-toggle-visibility.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Created By: srdusr -# Created On: Mon 18 Sep 2023 18:37:21 CAT -# Project: Bspwm script to toggle visibility of initial window and bring focus back to it - -# Get the ID of the currently focused desktop -current_desktop_id=$(bspc query -D -d focused --names) - -# Get the ID of the first hidden window in the current desktop -hidden_window_id=$(bspc query -N -d "$current_desktop_id" -n .hidden | head -n 1) - -# Check if there's a hidden window in the current desktop -if [[ -n "$hidden_window_id" ]]; then - # There's a hidden window, so unhide it - bspc node "$hidden_window_id" -g hidden=off - # Bring focus back to the previously hidden window - bspc node -f "$hidden_window_id" -else - # There's no hidden window in the current desktop, hide the first available window - first_window_id=$(bspc query -N -n focused.window) - bspc node "$first_window_id" -g hidden=on -fi diff --git a/.config/bspwm/scripts/close-window b/.config/bspwm/scripts/close-window deleted file mode 100755 index 8f7f36b..0000000 --- a/.config/bspwm/scripts/close-window +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# close or kill a bspwm window - -# show wallpaper if last tile -bspc query -N -n .focused.tiled.window &> /dev/null \ - && ! bspc query -N -n .!focused.local.tiled.window &> /dev/null \ - && show-wallpaper -d - -# close focused window -[ "$1" = "kill" ] && bspc node -k || bspc node -c diff --git a/.config/bspwm/scripts/drag-float b/.config/bspwm/scripts/drag-float deleted file mode 100755 index 788e978..0000000 --- a/.config/bspwm/scripts/drag-float +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/env bash - -: "${BUTTON:=1}" - -node="$(bspc query -N -n pointed)" - -die() { - jobs -p | xargs -r -n1 -I{} kill {} - exit -} - -trap 'die' USR1 - -{ bspc subscribe node_focus | while read -r _ _ _ wid; do - (( wid != node )) && break; done; kill -USR1 "$$" ;} & -{ while xinput list \ - | sed -nE 's,.*id=([0-9]+).*slave\s+pointer.*,\1,p' \ - | xargs -r -n1 -I{} xinput query-state {} 2> /dev/null \ - | grep -qF "button[${BUTTON}]=down"; do sleep .3; done; kill -USR1 "$$" ;} & - -if bspc node "$node.tiled" -f; then - node_tiled_rect=($(bspc query -T -n "$node" | jq -r '.client.tiledRectangle[]')) - bspc node "$node" -t floating - xdo move -x "${node_tiled_rect[0]}" -y "${node_tiled_rect[1]}" "$node" - xdo resize -w "${node_tiled_rect[2]}" -h "${node_tiled_rect[3]}" "$node" -elif bspc node "$node.floating" -f; then - : -else - die -fi - -eval "$(xdotool getmouselocation --shell)" -x="$X" y="$Y" -while :; do - eval "$(xdotool getmouselocation --shell)" - (( X != x || Y != y )) && { - bspc node "$node" -v "$((X - x))" "$((Y - y))" - x="$X" y="$Y" - } -done - -wait diff --git a/.config/bspwm/scripts/external_rules.sh b/.config/bspwm/scripts/external_rules.sh deleted file mode 100755 index 7b07ae8..0000000 --- a/.config/bspwm/scripts/external_rules.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/env bash -# -# external_rules_command -# -# Absolute path to the command used to retrieve rule consequences. -# The command will receive the following arguments: window ID, class -# name, instance name, and intermediate consequences. The output of -# that command must have the following format: key1=value1 -# key2=value2 ... (the valid key/value pairs are given in the -# description of the rule command). -# -# -# Rule -# General Syntax -# rule COMMANDS -# -# Commands -# -a, --add (<class_name>|*)[:(<instance_name>|*)] [-o|--one-shot] -# [monitor=MONITOR_SEL|desktop=DESKTOP_SEL|node=NODE_SEL] -# [state=STATE] [layer=LAYER] [split_dir=DIR] [split_ratio=RATIO] -# [(hidden|sticky|private|locked|marked|center|follow|manage|focus|border)=(on|off)] -# [rectangle=WxH+X+Y] -# Create a new rule. -# -# -r, --remove -# ^<n>|head|tail|(<class_name>|*)[:(<instance_name>|*)]... -# Remove the given rules. -# -# -l, --list -# List the rules. - -# Programs to specific desktops -wid=$1 -class=$2 -instance=$3 -consequences=$4 - -main() { - case "$class" in - firefox) - if [ "$instance" = "Toolkit" ]; then - echo "state=floating sticky=on" - fi - ;; - Spotify) - echo desktop=^5 follow=on focus=on - ;; - "") - sleep 0.5 - - wm_class=("$(xprop -id "$wid" | grep "WM_CLASS" | grep -Po '"\K[^,"]+')") - - class=${wm_class[-1]} - - [[ ${#wm_class[@]} == "2" ]] && instance=${wm_class[0]} - - [[ -n "$class" ]] && main - ;; - esac -} - -main - -# Allow floating windows over fullscreen -wid="$1" -class="$2" -instance="$3" -eval "$4" - -[[ "$state" = floating ]] && - echo 'layer=above' diff --git a/.config/bspwm/scripts/hide-window b/.config/bspwm/scripts/hide-window deleted file mode 100755 index c350a0e..0000000 --- a/.config/bspwm/scripts/hide-window +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -CMD=${1:-help} -shift - -help() { - echo "Available commands:" - echo " * unhide - select and unhide window" -} - -unhide() { - action=${1:-list} - case $action in - "list") - selection=$(for id in "$(bspc query -N -n .hidden)"; do - title=$(xtitle "$id") - [[ -z "$title" ]] && title="<unnamed>" - echo "$id" "$title" - done | rofi -dmenu -i -p "Hidden windows" | cut -f1 -d' ') - - [[ -z "$selection" ]] && exit 1 - - bspc node "$selection" -g hidden=off - ;; - esac - } - - case $CMD in - "help") - help - ;; - "unhide") - unhide "$1" - ;; - *) - help - ;; - esac |
