From 52aae5b328f344e5128a91bbe3f4f08986086337 Mon Sep 17 00:00:00 2001 From: Felix Van der Jeugt Date: Wed, 10 Dec 2014 00:19:58 +0100 Subject: [PATCH] add herbstluftwm, update script + vimrc + Xresources --- Xresources | 142 +++++++++++++++++++++--- fetch_them_files.sh | 12 ++- herbstluftwm/autostart | 238 +++++++++++++++++++++++++++++++++++++++++ herbstluftwm/panel.sh | 187 ++++++++++++++++++++++++++++++++ vimrc | 17 ++- 5 files changed, 575 insertions(+), 21 deletions(-) create mode 100755 herbstluftwm/autostart create mode 100755 herbstluftwm/panel.sh diff --git a/Xresources b/Xresources index a9f5311..5eae76e 100644 --- a/Xresources +++ b/Xresources @@ -17,24 +17,133 @@ *scrollTtyOutput: false ! fancy cryptic colours -*color0: rgb:00/00/00 -*color1: rgb:a8/00/00 -*color2: rgb:00/a8/00 -*color3: rgb:a8/54/00 -*color4: rgb:00/00/a8 -*color5: rgb:a8/00/a8 -*color6: rgb:00/a8/a8 -*color7: rgb:a8/a8/a8 -*color8: rgb:54/54/54 -*color9: rgb:fc/54/54 -*color10: rgb:54/fc/54 -*color11: rgb:fc/fc/54 -*color12: rgb:54/54/fc -*color13: rgb:fc/54/fc -*color14: rgb:54/fc/fc -*color15: rgb:fc/fc/fc +! Brown theme {{{ +!*background: #141314 +!*foreground: #ccc2a6 +!black +!*color0: #322a2c +!*color8: #46423b +!red +!*color1: #70473a +!*color9: #916255 +!green +!*color2: #534d35 +!*color10: #858167 +!yellow +!*color3: #9c7650 +!*color3: #9c7650 +!*color11: #ad8650 +!blue +!*color4: #473e38 +!*color12: #75715e +!magenta +!*color5: #543b3b +!*color13: #7b5d51 +!cyan +!*color6: #434450 +!*color14: #586868 +!white +!*color7: #9a875f +!*color15: #917154 +! }}} + +! Normal theme {{{ +! --- ~/.Xresources ------------------------------------------------------------ +! ------------------------------------------------------------------------------ +! --- generated with 4bit Terminal Color Scheme Designer ----------------------- +! ------------------------------------------------------------------------------ +! --- http://ciembor.github.com/4bit ------------------------------------------- +! ------------------------------------------------------------------------------ + +! --- special colors --- + +!*background: #17100d +!*foreground: #ffffff + +! --- standard colors --- + +! black +!*color0: #000000 + +! bright_black +!*color8: #202020 + +! red +!*color1: #9f0000 + +! bright_red +!*color9: #ff0808 + +! green +!*color2: #009f00 + +! bright_green +!*color10: #08ff08 + +! yellow +!*color3: #9f9f00 + +! bright_yellow +!*color11: #ffff08 + +! blue +!*color4: #00009f + +! bright_blue +!*color12: #0808ff + +! magenta +!*color5: #9f009f + +! bright_magenta +!*color13: #ff08ff + +! cyan +!*color6: #009f9f + +! bright_cyan +!*color14: #08ffff + +! white +!*color7: #a4a4a4 + +! bright_white +!*color15: #eaeaea +! ------------------------------------------------------------------------------ +! --- end of terminal colors section ------------------------------------------- +! ------------------------------------------------------------------------------ +! }}} + +! Autumn theme (current) {{{ +*background: #17100d +*foreground: #ffffff +! black ! bright_black +*color0: #000000 +*color8: #202020 +! red ! bright_red +*color1: #c40800 +*color9: #ff0b00 +! green ! bright_green +*color2: #c49000 +*color10: #ffbb00 +! yellow ! bright_yellow +*color3: #c4590a +*color11: #ff730d +! blue ! bright_blue +*color4: #2900c4 +*color12: #3500ff +! magenta ! bright_magenta +*color5: #b50ac4 +*color13: #eb0dff +! cyan ! bright_cyan +*color6: #003987 +*color14: #0283ff +! white ! bright_white +*color7: #a4a4a4 +*color15: #eaeaea +! }}} ! URxvt ! ----- @@ -85,3 +194,4 @@ xterm*background: rgb:00/00/00 ! Using alt as a meta key. XTerm*metaSendsEscape: true +! vim: foldmethod=marker diff --git a/fetch_them_files.sh b/fetch_them_files.sh index f182a43..4645ed5 100644 --- a/fetch_them_files.sh +++ b/fetch_them_files.sh @@ -1,9 +1,15 @@ #!/bin/bash -files="$(ls ~/.vimrc ~/.Xresources ~/.zshrc ~/.xinitrc)" +dotfiles=( vimrc Xresources zshrc xinitrc ) +configfiles=( herbstluftwm/autostart herbstluftwm/panel.sh ) -echo "$files" | while read file; do - cp "$file" "${file##*/.}" +for file in "${dotfiles[@]}"; do + cp "$HOME/.$file" "$file" +done + +for file in "${configfiles[@]}"; do + mkdir -p "${file%/*}" + cp "$HOME/.config/$file" "$file" done diff --git a/herbstluftwm/autostart b/herbstluftwm/autostart new file mode 100755 index 0000000..be3a68a --- /dev/null +++ b/herbstluftwm/autostart @@ -0,0 +1,238 @@ +#!/bin/bash + +# this is a simple config for herbstluftwm + +hc() { + herbstclient "$@" +} + +hc emit_hook reload + +hc set default_frame_layout 2 + +xsetroot -solid '#5A8E3A' + +# 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 # Use the super key as the main modifier + +hc keybind $Mod-Shift-q quit +hc keybind $Mod-Shift-r reload +hc keybind $Mod-Shift-c close +hc keybind $Mod-Return spawn urxvtc +hc keybind $Mod-Shift-s spawn systemctl suspend + +# 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 +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 +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 +# create an empty frame at the specified direction +hc keybind $Mod-u split bottom 0.5 +hc keybind $Mod-o split right 0.5 +# 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 +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 + +# tags +tag_names=( {1..9} ) +tag_keys=( {1..9} 0 ) + +hc rename default "${tag_names[0]}" || true +for i in ${!tag_names[@]} ; do + 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" + hc set_layout max + fi +done + +# cycle through tags +hc keybind $Mod-period use_index +1 --skip-visible +hc keybind $Mod-comma use_index -1 --skip-visible + +# layouting +hc keybind $Mod-r remove +hc keybind $Mod-space cycle_layout 1 +hc keybind $Mod-s floating toggle +hc keybind $Mod-f fullscreen toggle +hc keybind $Mod-p pseudotile toggle + +# 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 + +# }}} keybindings + +# programs {{{ +hc keybind $Mod-e spawn dmenu_run +# }}} programs + +# mouse bindings {{{ +hc mouseunbind --all +hc mousebind $Mod-Button1 move +hc mousebind $Mod-Button2 zoom +hc mousebind $Mod-Button3 resize +# }}} mousebindings + +# theme {{{ +hc attr theme.tiling.reset 1 +hc attr theme.floating.reset 1 +hc set frame_border_active_color '#222222' +hc set frame_border_normal_color '#101010' +hc set frame_bg_normal_color '#565656' +hc set frame_bg_active_color '#345F0C' +hc set frame_border_width 1 +hc set always_show_frame 1 +hc set frame_bg_transparent 1 +hc set frame_transparent_width 5 +hc set frame_gap 4 + +hc attr theme.active.color '#9fbc00' +hc attr theme.normal.color '#454545' +hc attr theme.urgent.color orange +hc attr theme.inner_width 1 +hc attr theme.inner_color black +hc attr theme.border_width 3 +hc attr theme.floating.border_width 4 +hc attr theme.floating.outer_width 1 +hc attr theme.floating.outer_color black +hc attr theme.active.inner_color '#3E4A00' +hc attr theme.active.outer_color '#3E4A00' +hc attr theme.background_color '#141414' + +hc set window_gap 0 +hc set frame_padding 0 +hc set smart_window_surroundings 0 +hc set smart_frame_surroundings 1 +hc set mouse_recenter_gap 0 +# }}} theme + +# general 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 +# }}} general rules + +# Application Specific {{{ + +# GIMP {{{ +# ensure there is a gimp tag +hc add gimp +hc load gimp ' +(split horizontal:0.850000:0 + (split horizontal:0.200000:1 + (clients vertical:0) + (clients grid:0)) + (clients vertical:0)) +' # load predefined layout +# center all other gimp windows on gimp tag +hc rule class=Gimp tag=gimp index=01 pseudotile=on +hc rule class=Gimp windowrole~'gimp-(image-window|toolbox|dock)' \ + pseudotile=off +hc rule class=Gimp windowrole=gimp-toolbox focus=off index=00 +hc rule class=Gimp windowrole=gimp-dock focus=off index=1 +# }}} Gimp + +# zenity {{{ +hc rule class=zenity pseudotile=on +# }}} + +# mpv {{{ +hc rule class="mpv" pseudotile=on +# }}} mpv + +# Thunderbird {{{ +hc add mail +hc rule instance="Mail" tag=mail +# [ -n "$(pgrep thunderbird)" ] || thunderbird +hc keybind $Mod-m use mail +# }}} Thunderbird + +# Weechat {{{ +hc add chat +hc rule title="weechat" tag=chat +# [ -n "$(pgrep weechat)" ] || urxvtc -name weechat -e weechat +hc keybind $Mod-Shift-w spawn urxvtc -name weechat -e weechat +hc keybind $Mod-w use chat +# }}} Weechat + +# ranger {{{ +hc keybind $Mod-b spawn urxvtc -name ranger -e ranger +# }}} ranger + +# }}} Application Specific + +# unlock, just to be sure +hc unlock + +herbstclient set tree_style '╾│ ├└╼─┐' + +# monitors {{{ +# do multi monitor setup here, e.g.: +# hc set_monitors 1280x1024+0+0 1280x1024+1280+0 +# or simply: +xrandr --output LVDS1 --auto +if grep -q "HDMI1 connected" <(xrandr); then + xrandr --output HDMI1 --auto --right-of LVDS1 +fi +hc detect_monitors +# }}} monitors + +# panel {{{ +# find the panel +panel=~/.config/herbstluftwm/panel.sh +[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh +for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do + # start it on each monitor + "$panel" $monitor & +done +# }}} panel + +# background {{{ +sh ~/.fehbg & +# }}} background + +# vim: foldmethod=marker diff --git a/herbstluftwm/panel.sh b/herbstluftwm/panel.sh new file mode 100755 index 0000000..31a2385 --- /dev/null +++ b/herbstluftwm/panel.sh @@ -0,0 +1,187 @@ +#!/bin/bash + +hc() { "${herbstclient_command[@]:-herbstclient}" "$@" ;} +monitor=${1:-0} +geometry=( $(herbstclient monitor_rect "$monitor") ) +if [ -z "$geometry" ] ;then + echo "Invalid monitor $monitor" + exit 1 +fi +# geometry has the format W H X Y +x=${geometry[0]} +y=${geometry[1]} +panel_width=${geometry[2]} +panel_height=16 +font="-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*" +bgcolor=$(hc get frame_border_normal_color) +selbg=$(hc get window_border_active_color) +selfg='#101010' + +#### +# Try to find textwidth binary. +# In e.g. Ubuntu, this is named dzen2-textwidth. +if which textwidth &> /dev/null ; then + textwidth="textwidth"; +elif which dzen2-textwidth &> /dev/null ; then + textwidth="dzen2-textwidth"; +else + echo "This script requires the textwidth tool of the dzen2 project." + exit 1 +fi +#### +# true if we are using the svn version of dzen2 +# depending on version/distribution, this seems to have version strings like +# "dzen-" or "dzen-x.x.x-svn" +if dzen2 -v 2>&1 | head -n 1 | grep -q '^dzen-\([^,]*-svn\|\),'; then + dzen2_svn="true" +else + dzen2_svn="" +fi + +if awk -Wv 2>/dev/null | head -1 | grep -q '^mawk'; then + # mawk needs "-W interactive" to line-buffer stdout correctly + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=593504 + uniq_linebuffered() { + awk -W interactive '$0 != l { print ; l=$0 ; fflush(); }' "$@" + } +else + # other awk versions (e.g. gawk) issue a warning with "-W interactive", so + # we don't want to use it there. + uniq_linebuffered() { + awk '$0 != l { print ; l=$0 ; fflush(); }' "$@" + } +fi + +hc pad $monitor $panel_height + +{ + ### Event generator ### + # based on different input data (mpc, date, hlwm hooks, ...) this generates events, formed like this: + # \t [...] + # e.g. + # date ^fg(#efefef)18:33^fg(#909090), 2013-10-^fg(#efefef)29 + + #mpc idleloop player & + while true ; do + # "date" output is checked once a second, but an event is only + # generated if the output changed compared to the previous run. + date +$'date\t^fg(#efefef)%H:%M^fg(#909090), %Y-%m-^fg(#efefef)%d' + sleep 1 || break + done > >(uniq_linebuffered) & + childpid=$! + hc --idle + kill $childpid +} 2> /dev/null | { + IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)" + visible=true + date="" + windowtitle="" + while true ; do + + ### Output ### + # This part prints dzen data based on the _previous_ data handling run, + # and then waits for the next event to happen. + + bordercolor="#26221C" + separator="^bg()^fg($selbg)|" + # draw tags + for i in "${tags[@]}" ; do + if [ "$(hc get_attr tags.by-name.$i.client_count)" = "0" ]; then + continue + fi + case ${i:0:1} in + '#') + echo -n "^bg($selbg)^fg($selfg)" + ;; + '+') + echo -n "^bg(#9CA668)^fg(#141414)" + ;; + ':') + echo -n "^bg()^fg(#ffffff)" + ;; + '!') + echo -n "^bg(#FF0675)^fg(#141414)" + ;; + *) + echo -n "^bg()^fg(#ababab)" + ;; + esac + if [ ! -z "$dzen2_svn" ] ; then + # clickable tags if using SVN dzen + echo -n "^ca(1,\"${herbstclient_command[@]:-herbstclient}\" " + echo -n "focus_monitor \"$monitor\" && " + echo -n "\"${herbstclient_command[@]:-herbstclient}\" " + echo -n "use \"${i:1}\") ${i:1} ^ca()" + else + # non-clickable tags if using older dzen + echo -n " ${i:1} " + fi + done + echo -n "$separator" + echo -n "^bg()^fg() ${windowtitle//^/^^}" + # small adjustments + right="$separator^bg() $date $separator" + right_text_only=$(echo -n "$right" | sed 's.\^[^(]*([^)]*)..g') + # get width of right aligned text.. and add some space.. + width=$($textwidth "$font" "$right_text_only ") + echo -n "^pa($(($panel_width - $width)))$right" + echo + + ### Data handling ### + # This part handles the events generated in the event loop, and sets + # internal variables based on them. The event and its arguments are + # read into the array cmd, then action is taken depending on the event + # name. + # "Special" events (quit_panel/togglehidepanel/reload) are also handled + # here. + + # wait for next event + IFS=$'\t' read -ra cmd || break + # find out event origin + case "${cmd[0]}" in + tag*) + #echo "resetting tags" >&2 + IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)" + ;; + date) + #echo "resetting date" >&2 + date="${cmd[@]:1}" + ;; + quit_panel) + exit + ;; + togglehidepanel) + currentmonidx=$(hc list_monitors | sed -n '/\[FOCUS\]$/s/:.*//p') + if [ "${cmd[1]}" -ne "$monitor" ] ; then + continue + fi + if [ "${cmd[1]}" = "current" ] && [ "$currentmonidx" -ne "$monitor" ] ; then + continue + fi + echo "^togglehide()" + if $visible ; then + visible=false + hc pad $monitor 0 + else + visible=true + hc pad $monitor $panel_height + fi + ;; + reload) + exit + ;; + focus_changed|window_title_changed) + windowtitle="${cmd[@]:2}" + ;; + #player) + # ;; + esac + done + + ### dzen2 ### + # After the data is gathered and processed, the output of the previous block + # gets piped to dzen2. + +} 2> /dev/null | dzen2 -w $panel_width -x $x -y $y -fn "$font" -h $panel_height \ + -e 'button3=;button4=exec:herbstclient use_index -1;button5=exec:herbstclient use_index +1' \ + -ta l -bg "$bgcolor" -fg '#efefef' diff --git a/vimrc b/vimrc index a0a14b8..18c9f24 100644 --- a/vimrc +++ b/vimrc @@ -54,7 +54,7 @@ set t_Co=256 let g:solarized_termcolors=256 let g:solarized_contrast="normal" let g:solarized_underline=0 -let g:solarized_termtrans=1 +let g:solarized_termtrans=0 syntax enable set background=dark colorscheme solarized @@ -220,7 +220,20 @@ function TexHook() set softtabstop=2 " Make a pdf noremap :!pdflatex '%' - noremap :!evince '%:r.pdf' + noremap :!spawn zathura '%:p:r.pdf' +endfunction + +" }}} + +" Markdown {{{ +" ---------------------------------------------------------------------------- " + +autocmd Filetype markdown call MarkdownHook() + +function MarkdownHook() + " Making and showing html + noremap :!markdown '%:p' > '%:p:r.html' + noremap :!spawn firefox '%:p:r.html' endfunction " }}}