Skip to content

Instantly share code, notes, and snippets.

@jeetelongname
Created April 25, 2020 11:33
Show Gist options
  • Save jeetelongname/d3da602c1d792ef7259eaefabcfdbfac to your computer and use it in GitHub Desktop.
Save jeetelongname/d3da602c1d792ef7259eaefabcfdbfac to your computer and use it in GitHub Desktop.
Herbstluftwm config
#!/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