Created
April 25, 2020 11:33
-
-
Save jeetelongname/d3da602c1d792ef7259eaefabcfdbfac to your computer and use it in GitHub Desktop.
Herbstluftwm config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# __ | |
# __ _____ ___ / /______ | |
# / / / / _ \/ _ \/ __/ ___/ | |
# / /_/ / __/ __/ /_(__ ) | |
# \__, /\___/\___/\__/____/ | |
# /____/ | |
# _____ | |
# _________ ____ / __(_)___ _ | |
# / ___/ __ \/ __ \/ /_/ / __ `/ | |
# / /__/ /_/ / / / / __/ / /_/ / | |
# \___/\____/_/ /_/_/ /_/\__, / | |
# /____/ | |
# for herbstluftwm | |
hc() { # this aliases herbstclient to hc to make the conf more readable (don'ask me wat the $@ does) | |
herbstclient "$@" | |
} | |
hc emit_hook reload | |
################# | |
## keybindings ## | |
################# | |
# remove all existing keybindings | |
hc keyunbind --all | |
# if you have a super key you will be much happier with Mod set to Mod4 | |
#Mod=Mod1 # Use alt as the main modifier | |
Mod=Mod4 ; Alt=Mod1 # Uses Super (Windows) key for the main modifier with alt as.. well the alt key | |
#Basic Keybinds | |
hc keybind $Mod-Shift-q quit # the session (it logs you out) | |
hc keybind $Mod-Shift-r reload # the config | |
hc keybind $Mod-Shift-c close # a window | |
# basic movement | |
# focusing clients | |
hc keybind $Mod-Left focus left | |
hc keybind $Mod-Down focus down | |
hc keybind $Mod-Up focus up | |
hc keybind $Mod-Right focus right | |
# ^ these use the arrow keys \/ these use the vim keys | |
hc keybind $Mod-h focus left | |
hc keybind $Mod-j focus down | |
hc keybind $Mod-k focus up | |
hc keybind $Mod-l focus right | |
# moving clients | |
hc keybind $Mod-Shift-Left shift left | |
hc keybind $Mod-Shift-Down shift down | |
hc keybind $Mod-Shift-Up shift up | |
hc keybind $Mod-Shift-Right shift right | |
# ^ these use the arrow keys \/ these use the vim keys | |
hc keybind $Mod-Shift-h shift left | |
hc keybind $Mod-Shift-j shift down | |
hc keybind $Mod-Shift-k shift up | |
hc keybind $Mod-Shift-l shift right | |
# splitting frames | |
hc keybind $Mod-y split left 0.5 | |
hc keybind $Mod-u split bottom 0.5 | |
hc keybind $Mod-i split top 0.5 | |
hc keybind $Mod-o split right 0.5 | |
# create an empty frame at the specified direction (move ya vim keys up and you have your split commands) | |
# let the current frame explode into subframes | |
hc keybind $Mod-Control-space split explode | |
# resizing frames | |
resizestep=0.05 | |
hc keybind $Mod-Control-h resize left +$resizestep | |
hc keybind $Mod-Control-j resize down +$resizestep | |
hc keybind $Mod-Control-k resize up +$resizestep | |
hc keybind $Mod-Control-l resize right +$resizestep | |
# vim chads ^ virgin arrow keys \/ | |
hc keybind $Mod-Control-Left resize left +$resizestep | |
hc keybind $Mod-Control-Down resize down +$resizestep | |
hc keybind $Mod-Control-Up resize up +$resizestep | |
hc keybind $Mod-Control-Right resize right +$resizestep | |
# Program Bindngs | |
hc keybind $Mod-Return spawn ${TERMINAL:-xterm} # use your $TERMINAL with xterm as fallback | |
hc keybind $Mod-d spawn dmenu_run -l 20 # Uses Dmenu for my run launcher | |
hc keybind $Mod-Shift-e spawn emoji-inserter # this is a script i riped from Luke Smith | |
hc keybind $Mod-e spawn $GUIEDITOR # incase emacs is ever ripped from my cold dead hands | |
hc keybind $Mod-i spawn $BROWSER | |
# hc keybind $Mod-f spawn $FILEMANAGER # set a varable in your .profile and you will be fine | |
# layouting | |
hc keybind $Mod-r remove # empty frames (or space if you have not kept up with the terms) | |
hc keybind $Mod-s floating toggle # makes your windows float | |
hc keybind $Mod-f fullscreen toggle # b-tec f11 (useful if you use a terminal) | |
hc keybind $Mod-p pseudotile toggle # this is ment to help but it just makes the window smaller? | |
# mouse | |
hc mouseunbind --all | |
hc mousebind $Mod-Button1 move # You can only use this when floating (it will only make your window clip back in regular mode) | |
hc mousebind $Mod-Button2 zoom | |
hc mousebind $Mod-Button3 resize # same thing but makeing your window bigger | |
# tags | |
tag_names=( {1..9} ) # this is a list of numbers 1 to 9 (thats what the .. means) | |
tag_keys=( {1..9} 0 ) | |
hc rename default "${tag_names[0]}" || true | |
for i in ${!tag_names[@]} ; do # this iterates through the tag list and adds a keybinding for them (this save typing out "hc keybind $Mod-1 use_index 1" 8 more times) | |
hc add "${tag_names[$i]}" | |
key="${tag_keys[$i]}" | |
if ! [ -z "$key" ] ; then | |
hc keybind "$Mod-$key" use_index "$i" | |
hc keybind "$Mod-Shift-$key" move_index "$i" | |
fi | |
done | |
# cycle through tags | |
hc keybind $Mod-period use_index +1 --skip-visible | |
hc keybind $Mod-comma use_index -1 --skip-visible | |
# The following cycles through the available layouts within a frame, but skips | |
# layouts, if the layout change wouldn't affect the actual window positions. | |
# I.e. if there are two windows within a frame, the grid layout is skipped. | |
hc keybind $Mod-space \ | |
or , and . compare tags.focus.curframe_wcount = 2 \ | |
. cycle_layout +1 grid vertical max \ | |
, cycle_layout +1 | |
# focus | |
hc keybind $Mod-BackSpace cycle_monitor | |
hc keybind $Mod-Tab cycle_all +1 | |
hc keybind $Mod-Shift-Tab cycle_all -1 | |
hc keybind $Mod-c cycle | |
hc keybind $Mod-i jumpto urgent | |
# theme | |
hc attr theme.tiling.reset 1 | |
hc attr theme.floating.reset 1 | |
# padding | |
hc set window_gap 2 | |
#hc set frame_gap 1 | |
hc attr theme.border_width 2 | |
hc attr theme.floating.border_width 2 | |
hc attr theme.floating.outer_width 2 | |
hc set frame_padding 0 | |
hc set smart_window_surroundings 0 | |
hc set smart_frame_surroundings 0 | |
hc set mouse_recenter_gap 0 | |
hc set frame_border_width 0 | |
hc set always_show_frame 0 | |
hc set frame_bg_transparent 1 | |
hc set frame_transparent_width 0 | |
#hc set frame_gap 0 | |
bg1="#242424" | |
bg2="#70cbe0" | |
hc attr theme.active.color "$bg2" | |
hc attr theme.normal.color "$bg1" | |
hc attr theme.urgent.color orange | |
hc attr theme.floating.outer_color "$bg1" | |
hc attr theme.active.inner_color "$bg2" | |
hc attr theme.active.outer_color "$bg2" | |
hc attr theme.background_color "#333333" | |
# hc set window_gap 5 | |
# rules | |
hc unrule -F | |
# hc rule class=XTerm tag=3 # move all xterms to tag 3 | |
hc rule focus=on # normally focus new clients | |
#hc rule focus=off # normally do not focus new clients | |
# give focus to most common terminals | |
#hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on | |
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on | |
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on | |
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off | |
hc set tree_style '╾│ ├└╼─┐' # i have no clue what this is but it reminds me of the windows pipe screensaver | |
# unlock, just to be sure | |
hc unlock | |
# do multi monitor setup here, e.g.: | |
# hc set_monitors 1280x1024+0+0 1280x1024+1280+0 | |
# or simply: | |
# hc detect_monitors | |
# find the panel | |
# use hc pad (read the man page ya dumbass) to set the padding for polybar. | |
# this loads the panel config file it uses dzen2 which is ok if a little light on... everything | |
for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do # all this does is cycle through the moniors and reload my config of polybar | |
hc pad $monitor 25 5 5 5 | |
killall -q polybar | |
while pgrep -u $UID -x polybar >/dev/null ; do sleep 0.5 ; done | |
polybar yeet # one thing you may want to do is call your bar the number of the monitor they are that way you can launch all your bars using this for loop! | |
done | |
# finaly i load in all of my start up apps! | |
# I kill them first just to make sure they are | |
killall -q compton | |
killall -q dunst | |
nitrogen --restore &# resoring my wallpaper | |
dunst &# my notification deamon (yes you need one) | |
compton --config ~/.config/compton/compton.conf &# this makes everything look pretty (adds transparncy and drop shadows and stuff) | |
# xsetroot -solid '#5A8E3A' # this would set your background as solid colour (yes I am British so I spell colour the right way) | |
diff ~/.config/herbstluftwm/autostart /etc/xdg/herbstluftwm/autostart > ~/.config/herbstluftwm/buggy.diff & | |
## all the last line does is generate a diff file that shows the diffrences i made to the config. | |
## this allows me to compare my mistakes and fix my dumb mistakes (green or > is the og base config. red or < is the changes i made to the base config) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment