diff options
| author | srdusr <trevorgray@srdusr.com> | 2025-08-30 19:22:59 +0200 |
|---|---|---|
| committer | srdusr <trevorgray@srdusr.com> | 2025-08-30 19:22:59 +0200 |
| commit | 19120d4f9761c67d99ed1ce3da6084b83f5a49c9 (patch) | |
| tree | f234cad1bdad88114a63c9702144da487024967a /linux/home/.config/bspwm/bspwmrc | |
| parent | 5928998af5404ae2be84c6cecc10ebf84bd3f3ed (diff) | |
| download | dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.tar.gz dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.zip | |
Linux-specific dotfiles
Diffstat (limited to 'linux/home/.config/bspwm/bspwmrc')
| -rwxr-xr-x | linux/home/.config/bspwm/bspwmrc | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/linux/home/.config/bspwm/bspwmrc b/linux/home/.config/bspwm/bspwmrc new file mode 100755 index 0000000..d30d6db --- /dev/null +++ b/linux/home/.config/bspwm/bspwmrc @@ -0,0 +1,275 @@ +#! /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 & |
