├── .config └── bspwm │ ├── autostart │ ├── bspwmrc │ ├── restore.cfg │ ├── scripts │ ├── dmenu-logout │ ├── external_rules │ ├── move-window │ └── toggle-systray │ └── sxhkdrc ├── .stow-local-ignore ├── README.md └── demo.gif /.config/bspwm/autostart: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Launch composite manager 4 | pgrep -u "$USER" compton >/dev/null || \ 5 | compton -bcCG -o 0.2 -r 0 -l 5 -t 5 6 | 7 | # Launch systray 8 | pgrep -u "$USER" stalonetray >/dev/null || stalonetray & 9 | # Hide systray after 5 seconds 10 | (sleep 5s && xdotool search --class "stalonetray" windowunmap) & 11 | 12 | # Set volume to 30% 13 | amixer -q sset Master 30% 14 | 15 | # Change screen timeout 16 | # https://wiki.archlinux.org/index.php/Display_Power_Management_Signaling#Modifying_DPMS_and_screensaver_settings_using_xset 17 | xset s 590 590 18 | # Start xautolock daemon 19 | pgrep -xu "$USER" xautolock >/dev/null || \ 20 | xautolock -locker "i3lock.sh -p 50 -de -I 5" -time 10 & 21 | 22 | # Start Udisks-glue for device automonting 23 | pgrep -xu "$USER" udisks-glue >/dev/null || udisks-glue & 24 | 25 | # Start S.M.A.R.T. notifier 26 | pgrep -xu "$USER" smart-notifier >/dev/null || smart-notifier & 27 | 28 | # Start AppArmor notifier 29 | pgrep -xu "$USER" aa-notify >/dev/null || aa-notify -p -s 1 -w 60 & 30 | 31 | # Start gxkb applet 32 | gxkb & 33 | # Start Update-notifier 34 | update-notifier & 35 | # Start Redshift 36 | redshift-gtk & 37 | # Start ownCloud client 38 | owncloud & 39 | # Start syncthing-gtk 40 | syncthing-gtk --minimized & 41 | # Start clipboard manager 42 | parcellite & 43 | # Start Pidgin 44 | pidgin & 45 | # Start Empathy 46 | empathy --start-hidden & 47 | # Start Tox client 48 | qtox & 49 | # Start Workrave 50 | workrave & 51 | 52 | # Hot corners 53 | # Toggle visibility of systray 54 | xdotool behave_screen_edge --quiesce 600 --delay 0 bottom-right \ 55 | exec --sync "$BSPWM_CONFIG/scripts/toggle-systray" & 56 | -------------------------------------------------------------------------------- /.config/bspwm/bspwmrc: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Set environment 4 | export BSPWM_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/bspwm" 5 | 6 | bspc config border_width 5 7 | bspc config window_gap 8 8 | bspc config top_padding 0 9 | 10 | bspc config split_ratio 0.50 11 | bspc config borderless_monocle true 12 | bspc config gapless_monocle true 13 | bspc config focus_follows_pointer true 14 | bspc config history_aware_focus true 15 | 16 | bspc monitor --reset-desktops term www dev chat edit play virt 8 9 10 17 | 18 | # Use monocle layout on desktop 1 19 | bspc desktop '^1' --layout monocle 20 | # Make windows float on specific desktops 21 | # https://github.com/baskerville/bspwm/issues/325 22 | bspc subscribe node_manage | while read -r event monitor desktop nodeid ipid; do 23 | case "$desktop" in 24 | www|play|6|virt|7|9) 25 | bspc node "$nodeid" --state floating 26 | ;; 27 | esac 28 | done & 29 | 30 | # Script for external rules 31 | bspc config external_rules_command "$BSPWM_CONFIG/scripts/external_rules" 32 | 33 | # Send to www desktop 34 | bspc rule --add Firefox desktop='www' follow=on 35 | bspc rule --add Iceweasel desktop='www' follow=on 36 | # Send to dev desktop 37 | bspc rule --add Atom desktop='dev' follow=on 38 | bspc rule --add Brackets desktop='dev' follow=on 39 | bspc rule --add Eclipse desktop='dev' follow=on 40 | bspc rule --add LightTable desktop='dev' follow=on 41 | bspc rule --add Ltbin desktop='dev' follow=on 42 | bspc rule --add Gvim desktop='dev' follow=on 43 | bspc rule --add Mysql-workbench-bin desktop='dev' follow=on 44 | bspc rule --add sun-awt-X11-XFramePeer desktop='dev' follow=on 45 | # Send to chat desktop 46 | bspc rule --add Hexchat desktop='chat' --one-shot follow=on 47 | bspc rule --add Xchat desktop='chat' --one-shot follow=on 48 | # Send to edit desktop 49 | bspc rule --add Abiword desktop='edit' follow=on 50 | bspc rule --add Avidemux desktop='edit' follow=on 51 | bspc rule --add Blender desktop='edit' follow=on 52 | bspc rule --add Darktable desktop='edit' follow=on 53 | bspc rule --add Gimp desktop='edit' follow=on 54 | bspc rule --add Gimp-2.8 desktop='edit' follow=on 55 | bspc rule --add Gnumeric desktop='edit' follow=on 56 | bspc rule --add Handbrake desktop='edit' follow=on 57 | bspc rule --add Illustrator.exe desktop='edit' follow=on 58 | bspc rule --add Photoshop.exe desktop='edit' follow=on 59 | bspc rule --add Inkscape desktop='edit' follow=on 60 | bspc rule --add Openshot desktop='edit' follow=on 61 | bspc rule --add Pitivi desktop='edit' follow=on 62 | bspc rule --add Rawtherapee desktop='edit' follow=on 63 | bspc rule --add Ufraw desktop='edit' follow=on 64 | # Send to play desktop 65 | bspc rule --add Vlc desktop='play' follow=on 66 | bspc rule --add retroarch desktop='play' follow=on 67 | bspc rule --add scummvm desktop='play' follow=on 68 | bspc rule --add zsnes desktop='play' follow=on 69 | bspc rule --add Wine desktop='play' follow=on 70 | bspc rule --add Desura desktop='play' --one-shot follow=on 71 | bspc rule --add Steam desktop='play' --one-shot follow=on 72 | # Send to virt desktop 73 | bspc rule --add qemu-system-i386 desktop='virt' follow=on 74 | bspc rule --add qemu-system-x86_64 desktop='virt' follow=on 75 | bspc rule --add Virt-manager desktop='virt' follow=on 76 | bspc rule --add VirtualBox desktop='virt' follow=on 77 | 78 | # Float windows opened from the panel 79 | bspc rule --add URxvt:popup state=floating 80 | # Make scratchpad floating and sticky 81 | bspc rule --add URxvt:scratchpad sticky=on state=floating border=off 82 | # Other floating windows 83 | bspc rule --add Cssh state=floating 84 | bspc rule --add Display state=floating 85 | bspc rule --add Empathy state=floating 86 | bspc rule --add Eog state=floating 87 | bspc rule --add feh state=floating 88 | bspc rule --add Keepassx state=floating 89 | bspc rule --add mplayer2 state=floating 90 | bspc rule --add mpv state=floating 91 | bspc rule --add Nautilus state=floating 92 | bspc rule --add Pavucontrol state=floating 93 | bspc rule --add Pcmanfm state=floating 94 | bspc rule --add Pidgin state=floating 95 | bspc rule --add qTox state=floating 96 | bspc rule --add Remmina state=floating 97 | bspc rule --add "Syncthing GTK" state=floating 98 | bspc rule --add Transmission-gtk state=floating 99 | bspc rule --add Uget-gtk state=floating 100 | bspc rule --add Vinagre state=floating 101 | 102 | # Colors 103 | # shellcheck source=/dev/null 104 | . "$HOME/.local/share/themes/colorschemes/bspwm.cfg" 105 | bspc config focused_border_color "$brightwhite" 106 | bspc config active_border_color "$brightblack" 107 | bspc config normal_border_color "$black" 108 | bspc config urgent_border_color "$blue" 109 | bspc config presel_feedback_color "$yellow" 110 | bspc config focused_locked_border_color "$brightred" 111 | bspc config active_locked_border_color "$red" 112 | bspc config normal_locked_border_color "$black" 113 | bspc config focused_sticky_border_color "$brightcyan" 114 | bspc config active_sticky_border_color "$cyan" 115 | bspc config normal_sticky_border_color "$black" 116 | bspc config focused_private_border_color "$brightblue" 117 | bspc config active_private_border_color "$blue" 118 | bspc config normal_private_border_color "$black" 119 | 120 | # Set wallpaper 121 | hsetroot -solid "$brightblack" 122 | 123 | # Load session 124 | # shellcheck source=/dev/null 125 | . "$BSPWM_CONFIG/restore.cfg" 126 | if [ -e "$BSPWM_STATE" ] ; then 127 | bspc wm --load-state "$BSPWM_STATE" 128 | bspc wm --adopt-orphans 129 | rm "$BSPWM_STATE" 130 | fi 131 | 132 | # Launch keybinding daemon 133 | sxhkd -c "$BSPWM_CONFIG/sxhkdrc" & 134 | 135 | # Autostart 136 | "$BSPWM_CONFIG/autostart" & 137 | 138 | # Read panel configuration and launch it 139 | # shellcheck source=/dev/null 140 | . "${XDG_CONFIG_HOME:-$HOME/.config}/lemonbar/panel.cfg" && panel \ 141 | | lemonbar -a 50 -g "${BARWIDTH}x${BARHEIGHT}+${EDGEWIDTH}+${EDGEWIDTH}" \ 142 | -f "$PANEL_FONT_FAMILY" -F "$COLOR_FOREGROUND" -B "$COLOR_BACKGROUND" \ 143 | -u "$UNDERLINE_WIDTH" | sh & 144 | -------------------------------------------------------------------------------- /.config/bspwm/restore.cfg: -------------------------------------------------------------------------------- 1 | # File to save status 2 | export BSPWM_STATE="${XDG_DATA_HOME:-$HOME/.local/share}/bspwm-state.json" 3 | -------------------------------------------------------------------------------- /.config/bspwm/scripts/dmenu-logout: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Set environment 4 | export BSPWM_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/bspwm" 5 | 6 | # Function to kill programs 7 | killprogs() { 8 | # Kill udisks-glue 9 | pkill -x udisks-glue 10 | # Kill panel 11 | pkill -x panel 12 | # Kill Redshift 13 | pkill -x redshift 14 | } 15 | 16 | # Restart function 17 | # shellcheck source=/dev/null 18 | restart() { 19 | # Save session status 20 | . "$BSPWM_CONFIG/restore.cfg" 21 | bspc wm --dump-state > "$BSPWM_STATE" 22 | # Kill programs 23 | killprogs 24 | # Quit bspwm 25 | bspc quit 0 26 | } 27 | 28 | # Logout function 29 | logout() { 30 | # For each opened window 31 | bspc query --nodes | while read -r winid; do 32 | # Close it 33 | xdotool windowkill "$winid" 34 | done 35 | # Kill programs 36 | killprogs 37 | # Quit bspwm 38 | bspc quit 1 39 | } 40 | 41 | # Load dmenu config 42 | # shellcheck source=/dev/null 43 | [ -f "$HOME/.dmenurc" ] && . "$HOME/.dmenurc" || DMENU='dmenu -i' 44 | 45 | # Menu items 46 | items="restart 47 | logout 48 | hibernate 49 | suspend 50 | reboot 51 | poweroff" 52 | 53 | # Open menu 54 | selection=$(printf '%s' "$items" | $DMENU) 55 | 56 | case $selection in 57 | restart) 58 | restart 59 | ;; 60 | logout) 61 | logout 62 | ;; 63 | hibernate) 64 | systemctl hibernate 65 | ;; 66 | suspend) 67 | systemctl suspend 68 | ;; 69 | reboot) 70 | logout 71 | systemctl reboot 72 | ;; 73 | halt|poweroff|shutdown) 74 | logout 75 | systemctl poweroff 76 | ;; 77 | esac 78 | 79 | exit 80 | -------------------------------------------------------------------------------- /.config/bspwm/scripts/external_rules: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | wid=$1 4 | class=$2 5 | instance=$3 6 | 7 | # Parse instance 8 | case "$instance" in 9 | libreoffice) 10 | printf "desktop='edit' follow=on" 11 | ;; 12 | *) 13 | # Parse class 14 | case "$class" in 15 | *) 16 | # Parse window name 17 | name=$(xdotool getwindowname "$wid") 18 | case "$name" in 19 | Butter|Popcorn-Time) 20 | printf "desktop='play' follow=on" 21 | ;; 22 | esac 23 | ;; 24 | esac 25 | ;; 26 | esac 27 | -------------------------------------------------------------------------------- /.config/bspwm/scripts/move-window: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Move floating windows around 4 | 5 | # Defaults 6 | jump=20 7 | 8 | # Get current setup information 9 | getInfo() { 10 | # Get screen dimensions 11 | screen_info=$(xrandr --query --current | grep -oE 'current [0-9]+ x [0-9]+') 12 | screen_width=$(printf '%s' "$screen_info" | awk '{print $2}') 13 | screen_height=$(printf '%s' "$screen_info" | awk '{print $4}') 14 | # Get current window size 15 | eval "$(xdotool getactivewindow getwindowgeometry --shell)" 16 | win_width=$WIDTH 17 | win_height=$HEIGHT 18 | # Get BSPWM current settings 19 | border_width=$(bspc config -d focused border_width) 20 | border_width=$((border_width*2)) 21 | window_gap=$(bspc config -d focused window_gap) 22 | left_padding=$(bspc config -m focused left_padding) 23 | top_padding=$(bspc config -m focused top_padding) 24 | right_padding=$(bspc config -m focused right_padding) 25 | bottom_padding=$(bspc config -m focused bottom_padding) 26 | } 27 | 28 | # Exit if window is not floating 29 | bspc query --tree --node | grep --silent '"state":"floating"' || exit 10 30 | 31 | # Run function to get information 32 | getInfo 33 | 34 | # Check arguments 35 | while [ "$#" -gt 0 ]; do 36 | case $1 in 37 | left|west) 38 | # Move window left 39 | xpos=$((0 - jump)) 40 | xdotool getactivewindow windowmove --relative -- $xpos y 41 | shift 42 | ;; 43 | right|east) 44 | # Move window right 45 | xpos=$jump 46 | xdotool getactivewindow windowmove --relative -- $xpos y 47 | shift 48 | ;; 49 | up|north) 50 | # Move window up 51 | ypos=$((0 - jump)) 52 | xdotool getactivewindow windowmove --relative -- x $ypos 53 | shift 54 | ;; 55 | down|south) 56 | # Move window down 57 | ypos=$jump 58 | xdotool getactivewindow windowmove --relative -- x $ypos 59 | shift 60 | ;; 61 | edge-left|edge-west) 62 | # Move window to the left screen edge 63 | xpos=$((0 + window_gap + left_padding)) 64 | xdotool getactivewindow windowmove -- $xpos y 65 | shift 66 | ;; 67 | edge-right|edge-east) 68 | # Move window to the right screen edge 69 | xpos=$((screen_width - win_width - window_gap - right_padding - border_width)) 70 | xdotool getactivewindow windowmove -- $xpos y 71 | shift 72 | ;; 73 | top|edge-up|edge-north) 74 | # Move window to the top screen edge 75 | ypos=$((0 + window_gap + top_padding)) 76 | xdotool getactivewindow windowmove -- x $ypos 77 | shift 78 | ;; 79 | bottom|edge-down|edge-south) 80 | # Move window to the bottom screen edge 81 | ypos=$((screen_height - win_height - window_gap - bottom_padding - border_width)) 82 | xdotool getactivewindow windowmove -- x $ypos 83 | shift 84 | ;; 85 | *) 86 | # Exit on unknown arguments 87 | exit 1 88 | ;; 89 | esac 90 | done 91 | -------------------------------------------------------------------------------- /.config/bspwm/scripts/toggle-systray: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Name of systray 4 | CLASS="stalonetray" 5 | 6 | case $1 in 7 | close|down|unmap) 8 | # Show systray 9 | xdotool search --onlyvisible --class $CLASS windowunmap 10 | ;; 11 | open|up|map) 12 | # Hide systray 13 | xdotool search --class $CLASS windowmap windowraise 14 | ;; 15 | *) 16 | # Toggle visibility of systray 17 | xdotool search --onlyvisible --class $CLASS windowunmap \ 18 | || xdotool search --class $CLASS windowmap windowraise 19 | ;; 20 | esac 21 | 22 | exit 23 | -------------------------------------------------------------------------------- /.config/bspwm/sxhkdrc: -------------------------------------------------------------------------------- 1 | # 2 | # bspwm hotkeys 3 | # 4 | 5 | # Exit bspwm 6 | super + alt + Escape 7 | $BSPWM_CONFIG/scripts/dmenu-logout 8 | 9 | # Close window 10 | alt + F4 11 | bspc node --close 12 | 13 | # Close window 14 | ctrl + q 15 | bspc node --close 16 | 17 | # Navigate layouts 18 | super + {_,shift + }space 19 | bspc desktop --layout {next,prev} 20 | 21 | # Rotate desktop 22 | super + {_,shift + }r 23 | bspc node @/ --rotate {90,-90} 24 | 25 | # Circulate the leaves of the tree 26 | super + {_,shift + }c 27 | bspc node @/ --circulate {backward,forward} 28 | 29 | # Make split ratios equal 30 | super + equal 31 | bspc node @/ --equalize 32 | 33 | # Make split ratios balanced 34 | super + minus 35 | bspc node @/ --balance 36 | 37 | # Toogle tiling of window 38 | super + d 39 | bspc query --nodes -n focused.tiled && state=floating || state=tiled; \ 40 | bspc node --state \~$state 41 | 42 | # Toogle pseudo tiling of window 43 | super + p 44 | bspc node --state \~pseudo_tiled 45 | 46 | # Toggle fullscreen of window 47 | super + f 48 | bspc node --state \~fullscreen 49 | 50 | # Focus last window/desktop 51 | {alt,super} + grave 52 | bspc {node,desktop} --focus last.local 53 | 54 | # Focus next/previous window 55 | alt + {_,shift} + Tab 56 | bspc node --focus {prev,next} 57 | 58 | # Focus next/previous desktop 59 | super + {_,shift} + Tab 60 | bspc desktop --focus {prev,next}.occupied 61 | 62 | # Navigate to older/newer window in history 63 | super + {o,n} 64 | bspc wm --record-history off; \ 65 | bspc node --focus {older,newer}; \ 66 | bspc wm --record-history on 67 | 68 | # Focus/move window to the biggest space 69 | super + {_,shift + }m 70 | bspc node --{focus,swap} biggest 71 | 72 | # Focus/swap windows by direction 73 | super + {_,shift + }{h,j,k,l} 74 | bspc node --{focus,swap} {west,south,north,east} 75 | 76 | # Swap window with last window 77 | super + apostrophe 78 | bspc node --swap last 79 | 80 | # Move window to last split 81 | super + y 82 | bspc query --nodes -n focused.automatic \ 83 | && bspc node -n last.\!automatic \ 84 | || bspc node last.leaf -n focused 85 | 86 | # Flip layout vertically/horizontally 87 | super + {_,shift + }s 88 | bspc node @/ --flip {vertical,horizontal} 89 | 90 | # Focus parent/brother/first/second for preselection 91 | super + ctrl + {p,b,comma,period} 92 | bspc node --focus @{parent,brother,first,second} 93 | 94 | # Preselect the splitting area for next window on leaf/parent 95 | super + ctrl + {h,j,k,l} 96 | bspc node --presel-dir \~{west,south,north,east} 97 | 98 | # Define splitting ratio for next window on leaf/parent 99 | super + ctrl + {_,shift +}{1-9} 100 | bspc node {_,@/} --presel-ratio 0.{1-9} 101 | 102 | # Cancel preselection 103 | super + ctrl + space 104 | bspc node --presel-dir cancel 105 | 106 | # Expand tiled space 107 | super + alt + {h,j,k,l} 108 | bspc node {@west -r -10,@south -r +10,@north -r -10,@east -r +10} 109 | 110 | # Contract tiled space 111 | super + alt + shift + {h,j,k,l} 112 | bspc node {@east -r -10,@north -r +10,@south -r -10,@west -r +10} 113 | 114 | # Move window to selected desktop 115 | super + shift + {1-9,0} 116 | bspc node --to-desktop ^{1-9,10} --focus 117 | 118 | # Move window to left/right desktop 119 | super + shift + {Left,Right} 120 | bspc node --to-desktop {prev,next} --focus 121 | 122 | # Move window to left/right desktop 123 | ctrl + alt + shift + {Left,Right} 124 | bspc node --to-desktop {prev,next} --focus 125 | 126 | # Focus selected desktop 127 | super + {1-9,0} 128 | bspc desktop --focus ^{1-9,10} 129 | 130 | # Focus left/right occupied desktop 131 | super + {Left,Right} 132 | bspc desktop --focus {prev,next}.occupied 133 | 134 | # Focus left/right occupied desktop 135 | ctrl + alt + {Left,Right} 136 | bspc desktop --focus {prev,next}.occupied 137 | 138 | # Increase/decrease window gap on focused desktop 139 | super + bracket{left,right} 140 | bspc config -d focused window_gap $((`bspc config -d focused window_gap` {-,+} 5 )) 141 | 142 | # Focus when clicking 143 | ~button1 144 | bspc pointer --grab focus 145 | 146 | # Move/resize windows 147 | alt + button{1-3} 148 | ; bspc pointer --grab {move,resize_side,resize_corner} 149 | 150 | # Ungrab when releasing a mouse button 151 | alt + @button{1-3} 152 | bspc pointer --ungrab 153 | 154 | # 155 | # wm independent hotkeys 156 | # 157 | 158 | # Launch dmenu 159 | alt + r 160 | dmenu_run -p 'Run:' 161 | 162 | # Toggle visibility of systray 163 | super + t 164 | $BSPWM_CONFIG/scripts/toggle-systray 165 | 166 | # Lock the screen 167 | ctrl + alt + l 168 | xautolock -enable; sleep 1; xautolock -locknow 169 | 170 | # Launch terminal 171 | super + Return 172 | urxvtc 173 | 174 | # Move floating window 175 | super + alt + {_,shift + }{Left,Down,Up,Right} 176 | $BSPWM_CONFIG/scripts/move-window {_,edge-}{west,south,north,east} 177 | 178 | # Emulate i3's scratchpad 179 | F12 180 | xdotool search --onlyvisible --classname scratchpad windowunmap \ 181 | || ( xdotool search --classname scratchpad windowmap; xdotool search --classname scratchpad windowraise; ) \ 182 | || ( urxvtc -name scratchpad -geometry 220x20+400+0; xdotool search --classname scratchpad windowraise; ) 183 | 184 | # make sxhkd reload its configuration files: 185 | super + Escape 186 | pkill -USR1 -x sxhkd 187 | -------------------------------------------------------------------------------- /.stow-local-ignore: -------------------------------------------------------------------------------- 1 | # Comments and blank lines are allowed. 2 | # https://www.gnu.org/software/stow/manual/stow.html#Types-And-Syntax-Of-Ignore-Lists 3 | 4 | RCS 5 | .+,v 6 | 7 | CVS 8 | \.\#.+ # CVS conflict files / emacs lock files 9 | \.cvsignore 10 | 11 | \.svn 12 | _darcs 13 | \.hg 14 | 15 | \.git 16 | \.gitignore 17 | \.gitmodules 18 | 19 | .+~ # emacs backup files 20 | \#.*\# # emacs autosave files 21 | 22 | ^/README.* 23 | ^/LICENSE.* 24 | ^/COPYING 25 | 26 | .+bak 27 | .+new 28 | .+old 29 | 30 | ^/demo.gif 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bspwm configuration 2 | 3 | ## About 4 | 5 | This repository stores my configuration of [bspwm][bspwm], *a tiling window 6 | manager based on binary space partitioning*, and [sxhkd][sxhkd], *a simple X 7 | hotkey daemon*. 8 | 9 | ## Getting the files 10 | 11 | ### Using Git 12 | 13 | If we have Git installed on the system, we can get the files directly from the 14 | repository: 15 | 16 | git clone https://gitlab.com/aguslr/bspwm-config 17 | 18 | After this, every time we want to update the files we do: 19 | 20 | cd bspwm-config && git pull 21 | 22 | ### Without Git 23 | 24 | If Git is not installed, we can still get the files as long as we have a basic 25 | Unix environment available: 26 | 27 | wget https://gitlab.com/aguslr/bspwm-config/-/archive/main/bspwm-config-main.tar.gz -O - | tar -xzv --strip-components 1 --exclude={README.md,demo.gif} 28 | 29 | ## Installing with Stow 30 | 31 | To easily create and manage links to the files we can use [GNU Stow][stow] as 32 | follows: 33 | 34 | stow -vt ~ -S . 35 | 36 | ## Demo 37 | 38 | ![Demo GIF](https://gitlab.com/aguslr/bspwm-config/raw/main/demo.gif "Demo") 39 | 40 | [bspwm]: https://github.com/baskerville/bspwm 41 | [sxhkd]: https://github.com/baskerville/sxhkd 42 | [stow]: https://www.gnu.org/software/stow/ 43 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aguslr/bspwm-config/52d0a37bf2eb7b3d68d1204b4be021b9f197b659/demo.gif --------------------------------------------------------------------------------