#+TITLE: BSPWM config #+PROPERTY: header-args :tangle bspwmrc * Table of contents :toc: - [[#about][About]] - [[#the-shebang][The shebang]] - [[#restart-safety][Restart safety]] - [[#no-rerun-function][No-rerun function]] - [[#killing][Killing]] - [[#detecting-screens][Detecting screens]] - [[#basic-bspwm-configurations][Basic BSPWM configurations]] - [[#applications-workspaces-assignations][Applications workspaces assignations]] - [[#startup-applications][Startup applications]] - [[#background-applications][Background applications]] - [[#foreground-applications][Foreground applications]] - [[#network-applications][Network applications]] * About The following is my ~bspwm~ init script. * The shebang For my ~bspwm~ init script, I am using the ~dash~ shell for it is very fast. #+BEGIN_SRC shell #!/usr/local/bin/dash #+END_SRC * Restart safety ** No-rerun function The following function helps me not restart a specific program in case it is already running, avoiding creating a new instance everytime I restart ~bspwm~. #+BEGIN_SRC shell run() { if ! pgrep "$1"; then "$@" fi } #+END_SRC ** Killing Now let's kill all terminal emulators and compton. #+BEGIN_SRC shell pkill alacritty pkill compton #+END_SRC * Detecting screens This detects if more screens are attached to the terminal. The init script will act differently depending on the number of screens linked. #+BEGIN_SRC shell screens=1 if xrandr | grep VGA1 | grep " connected"; then screens=3 /usr/home/jozan/.local/bin/triplescreen elif xrandr | grep DP1 | grep " connected"; then screens=2 /usr/home/jozan/.local/bin/dualscreen fi sleep 1 if [ $screens -eq 1 ]; then bspc monitor LVDS1 -d 01 02 03 04 05 06 07 08 09 10 11 12 fi #+END_SRC * Basic BSPWM configurations #+BEGIN_SRC shell bspc config border_width 1 bspc config window_gap 0 bspc config focused_border_color \#b92121 bspc config split_ratio 0.50 bspc config borderless_monocle true bspc config gapless_monocle true bspc config single_monocle true #+END_SRC * Applications workspaces assignations #+BEGIN_SRC shell if [ $screens -eq 3 ]; then bspc rule -a Emacs desktop=01 follow=true bspc rule -a Firefox desktop=08 follow=true bspc rule -a Wine desktop=07 state=floating elif [ $screens -eq 2 ]; then bspc rule -a Emacs desktop=01 follow=true bspc rule -a Firefox desktop=08 follow=true bspc rule -a Wine desktop=07 state=floating elif [ $screens -eq 1 ]; then bspc rule -a Emacs desktop=01 follow=true bspc rule -a Firefox desktop=08 follow=true bspc rule -a Wine desktop=04 state=floating fi bspc rule -a Dunst layer=above bspc rule -a Zathura state=tiled bspc rule -a qTox desktop=12 bspc rule -a DergodsRealmII desktop=4 state=floating #+END_SRC * Startup applications ** Background applications #+BEGIN_SRC shell run compton >/dev/null 2>&1 & if [ $screens -eq 3 ]; then feh --bg-fill /usr/home/jozan/Pictures/wallpaper.jpg --bg-fill /usr/home/jozan/Pictures/wallpaper.jpg >/dev/null 2>&1 elif [ $screens -eq 2 ]; then feh --bg-fill /usr/home/jozan/Pictures/wallpaper.jpg --bg-fill /usr/home/jozan/Pictures/wallpaper.jpg >/dev/null 2>&1 else feh --bg-fill /usr/home/jozan/Pictures/wallpaper.jpg >/dev/null 2>&1 fi xset r rate 200 100 >/dev/null 2>&1 setxkbmap -layout us,fr -option grp:alt_shift_toggle run dunst > /dev/null 2>&1 & run lowbat --say "You're low, partner" >/dev/null 2>&1 & sleep 2 #+END_SRC ** Foreground applications #+BEGIN_SRC shell run emacs & sleep 12 if [ $screens -eq 3 ]; then bspc desktop -f 09 alacritty -e dash -c 'clear; cowsay "Welcome back, partner! And remember to try glest!"; zsh -i' & sleep 1 alacritty -e htop & sleep 1 alacritty -e gotop & sleep 1 bspc node -f west alacritty -e vifm & sleep 1 bspc node -z right 180 0 bspc node -z top 0 70 bspc node -f east bspc node -f north bspc node -z bottom 0 -280 bspc node -f north bspc node -f west elif [ $screens -eq 2 ]; then bspc desktop -f 09 alacritty -e dash -c 'clear; cowsay "Welcome back, partner! And remember to try glest!"; zsh -i' & sleep 1 alacritty -e htop & sleep 1 alacritty -e gotop & sleep 1 bspc node -f west alacritty -e vifm & sleep 1 bspc node -z right 180 0 bspc node -z top 0 70 bspc node -f east bspc node -f north bspc node -z bottom 0 -280 bspc node -f north bspc node -f west elif [ $screens -eq 1 ]; then bspc desktop -f 09 alacritty -e dash -c 'clear; cowsay "Welcome back, partner!"; zsh -i' & sleep 1 bspc node -p west alacritty -e htop & sleep 1 alacritty -e gotop & sleep 1 bspc node -f east alacritty -e vifm & sleep 1 bspc node -f west bspc node -f north bspc node -z bottom 0 -280 bspc node -z right -220 0 bspc node -f east bspc node -z top 0 70 bspc node -f north fi sleep 1 #+END_SRC ** Network applications In case the terminal is linked to the Internet, the following commands are run. #+BEGIN_SRC shell if curl https://www.freebsd.org/ >/dev/null 2>&1; then git -C ~/.elfeed pull origin master >/dev/null 2>&1 & run qtox & if [ $screens -eq 3 ]; then bspc desktop -f 09 elif [ $screens -eq 2 ]; then bspc desktop -f 09 elif [ $screens -eq 1 ]; then bspc desktop -f 09 fi fi #+END_SRC