From b3eaf4d3e1e3031054fadbc47eb749f47f901e83 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sun, 1 Dec 2013 23:59:31 +0100 Subject: Initial commit --- .bashrc | 41 ++++++++++ .config/bspwm/bspwmrc | 20 +++++ .config/dunst/dunstrc | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++ .config/sxhkd/sxhkdrc | 114 ++++++++++++++++++++++++++ .gtkrc-2.0 | 4 + .xinitrc | 48 +++++++++++ bin/dmenu | 3 + bin/myredshift | 57 +++++++++++++ bin/myxlock | 3 + bin/opera | 2 + bin/quitmenu | 32 ++++++++ foo/bar/config.h | 31 ++++++++ mybar/mybar.awk | 135 +++++++++++++++++++++++++++++++ mybar/mybar.sh | 63 +++++++++++++++ mybar/wifi.awk | 22 +++++ 15 files changed, 792 insertions(+) create mode 100644 .bashrc create mode 100755 .config/bspwm/bspwmrc create mode 100644 .config/dunst/dunstrc create mode 100644 .config/sxhkd/sxhkdrc create mode 100644 .gtkrc-2.0 create mode 100755 .xinitrc create mode 100755 bin/dmenu create mode 100755 bin/myredshift create mode 100755 bin/myxlock create mode 100755 bin/opera create mode 100755 bin/quitmenu create mode 100644 foo/bar/config.h create mode 100755 mybar/mybar.awk create mode 100755 mybar/mybar.sh create mode 100755 mybar/wifi.awk diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..397dbf0 --- /dev/null +++ b/.bashrc @@ -0,0 +1,41 @@ +# +# ~/.bashrc +# + +export GOPATH="$HOME/go" +export PATH=$HOME/bin:$GOPATH/bin:$PATH +export TEXMFHOME="$HOME/texmf" +export EDITOR="nano" +export BLOGROOT="$HOME/blog" +export PLAN9=/opt/plan9 + +export BAR_FIFO=$HOME/mybar/fifo +export REDSHIFT_FIFO=$HOME/.redshift_fifo + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# Aliases +alias ls='ls --color=auto' +alias xo='exo-open' +alias la='ls -lah --color=auto' +alias cb='xclip -i -selection clipboard' + +PS1="[ \[\e[1m\]\W\[\e[0m\] ]$ " + +mkcd() { + mkdir "$1" + cd "$1" +} + +unlatin1() { + mv "$1" /tmp/unlatin1.data + iconv --from=latin1 --to=utf8 /tmp/unlatin1.data > "$1" + rm -f /tmp/unlatin1.data +} + +relatin1() { + cp "$1" /tmp/relatin1.data + iconv --from=utf8 --to=latin1 /tmp/relatin1.data > "$1" + rm /tmp/relatin1.data +} diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc new file mode 100755 index 0000000..11b826a --- /dev/null +++ b/.config/bspwm/bspwmrc @@ -0,0 +1,20 @@ +#! /bin/sh + +bspc desktop ^1 -n I +bspc monitor -a II III IV V VI VII VIII IX X + +bspc rule -a Gimp -d ^8 --follow --floating + +bspc config border_width 2 +bspc config window_gap 8 +bspc config split_ratio 0.52 +bspc config borderless_monocle true +bspc config gapless_monocle true + +bspc config focused_border_color '#45A5FF' +bspc config normal_border_color '#444444' +bspc config urgent_border_color '#FF0000' +bspc config presel_border_color '#ff00ff' + +bspc config top_padding 18 +~/mybar/mybar.sh & \ No newline at end of file diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..425b5ae --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,217 @@ +[global] + font = Monospace 8 + + # allow a small subset of html markup: + # bold + # italic + # strikethrough + # underline + # + # for a complete reference see http://developer.gnome.org/pango/stable/PangoMarkupFormat.html + # If markup is not allowed, those tags will be stripped out of the message. + allow_markup = yes + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # Markup is allowed + format = "%s\n%b" + + # Sort messages by urgency + sort = yes + + # Show how many messages are currently hidden (because of geometry) + indicate_hidden = yes + + # alignment of message text. + # Possible values are "left", "center" and "right" + alignment = left + + # The frequency with wich text that is longer than the notification + # window allows bounces back and forth. + # This option conflicts with 'word_wrap'. + # Set to 0 to disable + bounce_freq = 0 + + # show age of message if message is older than show_age_threshold seconds. + # set to -1 to disable + show_age_threshold = 60 + + # split notifications into multiple lines if they don't fit into geometry + word_wrap = yes + + # ignore newlines '\n' in notifications + ignore_newline = no + + + # the geometry of the window + # geometry [{width}]x{height}][+/-{x}+/-{y}] + # The geometry of the message window. + # The height is measured in number of notifications everything else in pixels. If the width + # is omitted but the height is given ("-geometry x2"), the message window + # expands over the whole screen (dmenu-like). If width is 0, + # the window expands to the longest message displayed. + # A positive x is measured from the left, a negative from the + # right side of the screen. Y is measured from the top and down respectevly. + # The width can be negative. In this case the actual width is the + # screen width minus the width defined in within the geometry option. + geometry = "400x5-8+24" + + # The transparency of the window. range: [0; 100] + # This option will only work if a compositing windowmanager is present (e.g. xcompmgr, compiz, etc..) + transparency = 0 + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + idle_threshold = 120 + + # Which monitor should the notifications be displayed on. + monitor = 0 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern windowmanagers. + # + # If this option is set to mouse or keyboard, the monitor option will be + # ignored. + follow = mouse + + # should a notification popped up from history be sticky or + # timeout as if it would normally do. + sticky_history = yes + + # The height of a single line. If the height is smaller than the font height, + # it will get raised to the font height. + # This adds empty space above and under the text. + line_height = 0 + + # Draw a line of 'separatpr_height' pixel height between two notifications. + # Set to 0 to disable + separator_height = 2 + + # padding between text and separator + padding = 8 + + # horizontal padding + horizontal_padding = 8 + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background + # * foreground: use the same color as the foreground + # * frame: use the same color as the frame. + # * anything else will be interpreted as a X color + separator_color = frame + + # print a notification on startup + # This is mainly for error detection, since dbus (re-)starts dunst + # automatically after a crash. + startup_notification = false + + # dmenu path + dmenu = /usr/bin/dmenu -p dunst: + + # browser for opening urls in context menu + browser = /usr/bin/firefox -new-tab + +[frame] + width = 2 + color = "#aaaaaa" + +[shortcuts] + # shortcuts are specified as [modifier+][modifier+]...key + # available modifiers are 'ctrl', 'mod1' (the alt-key), 'mod2', 'mod3' + # and 'mod4' (windows-key) + # xev might be helpful to find names for keys + + # close notification + close = ctrl+space + + # close all notifications + close_all = ctrl+shift+space + + # redisplay last message(s) + # On the US keyboard layout 'grave' is normally above TAB and left of '1'. + history = ctrl+grave + + # context menu + context = ctrl+shift+period + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the '#' and following would be interpreted as a comment. + background = "#222222" + foreground = "#888888" + timeout = 10 + +[urgency_normal] + background = "#285577" + foreground = "#ffffff" + timeout = 10 + +[urgency_critical] + background = "#900000" + foreground = "#ffffff" + timeout = 0 + + +# Every section that isn't one of the above is interpreted as a rules +# to override settings for certain messages. +# Messages can be matched by 'appname', 'summary', 'body' or 'icon' +# and you can override the 'timeout', 'urgency', 'foreground', 'background' +# and 'format'. +# Shell-like globbing will get expanded. +# +# SCRIPTING +# you can specify a script that gets run when the rule matches by setting +# the 'script' option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format to "" +# NOTE: It might be helpful to run dunst -print in a terminal in order to find +# fitting options for rules. + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +## This notification will not be displayed +# summary = "foobar" +# format = "" + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc new file mode 100644 index 0000000..1045986 --- /dev/null +++ b/.config/sxhkd/sxhkdrc @@ -0,0 +1,114 @@ +# +# bspwm hotkeys +# + +ctrl + alt + q + quitmenu + +alt + F4 + bspc window -c + +shift + alt + F4 + bspc window -k + +# Switch layout +ctrl + alt + l + bspc desktop -l next + +# Balance Tree +ctrl + alt + b + bspc desktop -B + +# Toggle Fullscreen/Floating +ctrl + alt + {s,f} + bspc window -t {floating,fullscreen} + +# Focus last selected Window / Desktop +#super + {grave,Tab} +# bspc {window,desktop} -f last + +# Circulate Tree +ctrl + alt + {Prior,Next} + bspc desktop -C {forward,backward} + +# Rotate +alt + shift + {Prior,Next} + bspc window -R {90,270} + +ctrl + alt + shift + {Prior,Next} + bspc desktop -R {90,270} + +# Swap with last selected window +#super + apostrophe +# bspc window -s last + +ctrl + alt + t; ctrl + alt + t + bspc window -w last.manual + +ctrl + alt + t; ctrl + alt + {Left,Down,Up,Right} + bspc window -w {Left,Down,Up,Right} + +# Swap current window with biggest +ctrl + alt + m + bspc window -s biggest + +# Select / Swap with Window in Dir +alt + {_,shift + }{Left,Down,Up,Right} + bspc window -{f,s} {left,down,up,right} + +# Switch window (alt tab) +alt + {_,shift + }Tab + bspc window -f {next,prev} + +# Navigate Desktops +alt + {Prior,Next} + bspc desktop -f {prev,next} + +# Preselect splitting (CHORD) +ctrl + alt + p; ctrl + alt + {Left,Down,Up,Right} + bspc window -p {left,down,up,right} + +# Cancel (all) preselections +ctrl + alt + p; ctrl + alt {_, + shift}+ c + bspc {window -p cancel,desktop -c} + +#change spliting +ctrl + alt + {Left,Down,Up,Right} + bspc window -e {left,down,up,right} push + +ctrl + alt + shift + {Left,Down,Up,Right} + bspc window -e {right,up,down,left} pull + +#super + ctrl + {1-9} +# bspc window -r 0.{1-9} + +# Change /move to desktop +ctrl + alt + {_,shift + }{1-9,0} + bspc {desktop -f,window -d} ^{1-9,10} + +# Stuff for mouse focus, resize, ... +~button1 + bspc pointer -g focus + +alt + button{1-3} + bspc pointer -g {move,resize_side,resize_corner} + +alt + !button{1-3} + bspc pointer -t %i %i + +# +# wm independent hotkeys +# + +alt + asciicircum + xfce4-terminal + +alt + F2 + dmenu_run + +# make sxhkd reload its configuration files: +ctrl + alt + r + pkill -USR1 -x sxhkd + +ctrl + shift + Return + mydmenu diff --git a/.gtkrc-2.0 b/.gtkrc-2.0 new file mode 100644 index 0000000..474d0ae --- /dev/null +++ b/.gtkrc-2.0 @@ -0,0 +1,4 @@ +gtk-theme-name = "Equinox Evolution Light" +gtk-font-name = "DeJaVu Sans 10" +gtk-icon-theme-name = "Faenza" + diff --git a/.xinitrc b/.xinitrc new file mode 100755 index 0000000..7ed133b --- /dev/null +++ b/.xinitrc @@ -0,0 +1,48 @@ +#!/bin/sh +# +# ~/.xinitrc +# +# Executed by startx (run your window manager from here) + +if [ -d /etc/X11/xinit/xinitrc.d ]; then + for f in /etc/X11/xinit/xinitrc.d/*; do + [ -x "$f" ] && . "$f" + done + unset f +fi + +xset fp rehash + +# Windows button is now compose key +setxkbmap -option compose:lwin +setxkbmap -option compose:rwin + +# Start godoc server +godoc -http=":6060" & + +# exec gnome-session +# exec startkde + +#exec startxfce4 + +if test -e "$BAR_FIFO"; then + rm -f "$BAR_FIFO" + mkfifo "$BAR_FIFO" +fi + +if test $(hostname) = "kch42-notebook"; then + synclient TapButton1=0 + synclient VertTwoFingerScroll=0 + synclient VertEdgeScroll=1 +fi + +start-pulseaudio-x11 & +xsetroot -cursor_name left_ptr & +hsetroot -fill ~/"Bilder/backgrounds/earthporn/1q1tk1 - milky way behind fuji.jpg" +dunst & +sxhkd & +compton & +myredshift daemon & +exec bspwm 2> ~/.bspwm.log + +# ...or the Window Manager of your choice diff --git a/bin/dmenu b/bin/dmenu new file mode 100755 index 0000000..d26c459 --- /dev/null +++ b/bin/dmenu @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/bin/dmenu -b -nb '#333333' -nf '#cccccc' -sb '#45A5FF' -sf '#ffffff' "$@" diff --git a/bin/myredshift b/bin/myredshift new file mode 100755 index 0000000..96f9d96 --- /dev/null +++ b/bin/myredshift @@ -0,0 +1,57 @@ +#!/bin/sh + +rs() { + redshift -o -l 53.8695616:10.6875833 -t 6200:4800 "$@" >/dev/null +} + +tick() { + while true; do + echo "tick" + sleep 30 + done > "$REDSHIFT_FIFO" +} + +daemon() { + test -e "$REDSHIFT_FIFO" && rm -f "$REDSHIFT_FIFO" + mkfifo "$REDSHIFT_FIFO" + + tick & + tick_pid=$! + + flag="" + cat "$REDSHIFT_FIFO" | while read cmd; do + case $cmd in + quit) + kill $tick_pid & + break + ;; + toggle) + if test -n "$flag"; then + flag="" + else + flag="-x" + fi + + echo "redshift $flag" > "$BAR_FIFO" + + rs $flag + ;; + tick) + rs $flag + ;; + esac + done +} + +toggle() { + echo "toggle" > "$REDSHIFT_FIFO" +} + +case $1 in +daemon) + daemon + ;; +toggle) + toggle + ;; +esac diff --git a/bin/myxlock b/bin/myxlock new file mode 100755 index 0000000..f531e66 --- /dev/null +++ b/bin/myxlock @@ -0,0 +1,3 @@ +#!/bin/sh + +xlock -mode blank diff --git a/bin/opera b/bin/opera new file mode 100755 index 0000000..654f023 --- /dev/null +++ b/bin/opera @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/bin/opera -noargb -nolirc "$@" diff --git a/bin/quitmenu b/bin/quitmenu new file mode 100755 index 0000000..e9823b8 --- /dev/null +++ b/bin/quitmenu @@ -0,0 +1,32 @@ +#!/bin/sh + +mkopts() { + echo 'Quit +Poweroff +Reboot +Suspend +Lock +' +} + +if choice="`mkopts | dmenu -i`"; then + case "$choice" in + Quit) + pkill mybar + bspc quit + ;; + Poweroff) + poweroff + ;; + Reboot) + reboot + ;; + Suspend) + myxlock & + systemctl suspend + ;; + Lock) + myxlock + ;; + esac +fi diff --git a/foo/bar/config.h b/foo/bar/config.h new file mode 100644 index 0000000..863e764 --- /dev/null +++ b/foo/bar/config.h @@ -0,0 +1,31 @@ +/* The height of the bar (in pixels) */ +#define BAR_HEIGHT 18 +/* The width of the bar. Set to -1 to fit screen */ +#define BAR_WIDTH -1 +/* Offset from the left. Set to 0 to have no effect */ +#define BAR_OFFSET 0 +/* Choose between an underline or an overline */ +#define BAR_UNDERLINE 1 +/* The thickness of the underline (in pixels). Set to 0 to disable. */ +#define BAR_UNDERLINE_HEIGHT 2 +/* Default bar position, overwritten by '-b' switch */ +#define BAR_BOTTOM 0 +/* The fonts used for the bar, comma separated. Only the first 2 will be used. */ +#define BAR_FONT "fixed","fixed" +/* Some fonts don't set the right width for some chars, pheex it */ +#define BAR_FONT_FALLBACK_WIDTH 6 +/* Define the opacity of the bar (requires a compositor such as compton) */ +#define BAR_OPACITY 1.0 /* 0 is invisible, 1 is opaque */ +/* Color palette */ +#define BACKGROUND 0x333333 +#define COLOR0 0xeeeeee /* Normal text */ +#define COLOR1 0x777777 /* inactive text */ +#define COLOR2 0xff0000 /* Warning */ +#define COLOR3 0x55C5FF /* progbars */ +#define COLOR4 0x256590 /* progbars2 */ +#define COLOR5 0x555555 +#define COLOR6 0x75b5aa +#define COLOR7 0x6c7a80 +#define COLOR8 0x425059 +#define COLOR9 0xcc6666 +#define FOREGROUND 0xeeeeee diff --git a/mybar/mybar.awk b/mybar/mybar.awk new file mode 100755 index 0000000..d16dbf1 --- /dev/null +++ b/mybar/mybar.awk @@ -0,0 +1,135 @@ +#!/bin/awk -f + +BEGIN { + date="" + cpu="" + mem="" + battery="" + window="" + wminfo="" + redshift="" + wifi="" + + cpu_pused=0 + cpu_ptotal=0 +} +$1 == "date" { + date = $2 " " $3 " " $4 +} +$1 == "cpu" { + used=$2+$3+$4+$7+$8; + total=used+$5+$6; + + if(total - cpu_ptotal != 0) { + tmp=int(100*(used-cpu_pused)/(total-cpu_ptotal)); + } else { + tmp=0 + } + if(tmp > 100) { + tmp=0 + } + cpu_pused=used + cpu_ptotal=total + + if(tmp < 10) { + sp = " " + } else if(tmp < 100) { + sp = " " + } else { + sp = "" + } + f = int((tmp+5) / 10) + tmp = "CPU: " sp tmp "%" + cpu = "\\u3" substr(tmp, 1, f) "\\u4" substr(tmp, 1+f, 10-f) "\\ur" +} +$1 == "window" { + window=substr($0, 7, length($0)-6); +} +$1 == "mem" { + if($2 < 10) { + sp = " " + } else if($2 < 100) { + sp = " " + } else if($2 < 1000){ + sp = " " + } else { + sp = "" + } + tmp = "Mem:" sp $2 "MB" + f = int(($2 / 4096 * 10) + .5) + mem = "\\u3" substr(tmp, 1, f) "\\u4" substr(tmp, 1+f, 10-f) "\\ur" +} +$1 == "bspwm" { + #wminfo=substr($0, 7, length($0)-6) + split(substr($0, 7, length($0)-6), info, ":") + + wminfo=" \\u5" + sep="" + for(i in info) { + raw=info[i] + k=substr(raw, 1, 1) + v=substr(raw, 2, length(raw)-1) + + add = "" + if(k=="u") add = "\\b2" v + else if(k=="U") add = "\\u3\\b2" v + else if(k=="f") add = "\\f1" v + else if(k=="F") add = "\\f1\\u3" v + else if(k=="o") add = v + else if(k=="O") add = "\\u3" v + + if(add != "") { + wminfo = wminfo sep add "\\fr\\u5\\br" + sep = " " + } + } + wminfo = wminfo "\\ur" +} +$1 == "redshift" { + if($2 == "-x") { + redshift = "\\u2" + } else { + redshift = "" + } +} +$1 == "bat" { + val=$3 + if($2 == "Full") { + val=100 + } + if($2 == "Charging") { + tmp="-charging-" + } else { + tmp="Bat:" + + if(val < 10) { + sp=" " + } else if(val < 100) { + sp=" " + } else { + sp=" " + } + tmp=tmp sp val "%" + } + f = int((val+5) / 10) + battery = "\\u3" substr(tmp, 1, f) "\\u4" substr(tmp, 1+f, 10-f) "\\ur" + if((val < 5) && ($2 != "Charging")) { + battery="\\b2" battery "\\br" + } +} +$1 == "wifi" { + if($2 == "-") { + wifi="" + } else { + tmp=$2 + if(length(tmp) > 10) { + tmp=substr(tmp, 1, 8) ".." + } + f = int(($3+5) / 10) + wifi = "\\u3" substr(tmp, 1, f) "\\u4" substr(tmp, 1+f, 10-f) "\\ur" + } +} +{ + print "\\l" wminfo "\\c" window "\\r" wifi " " battery " " mem " " cpu " " redshift "R\\ur " date " " + fflush() +} diff --git a/mybar/mybar.sh b/mybar/mybar.sh new file mode 100755 index 0000000..5adc11e --- /dev/null +++ b/mybar/mybar.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +update_wminfo() { + bspc control --subscribe | while read line; do + echo "bspwm $line" + done +} + +update_time() { + while true; do + date '+date %a. %Y-%b-%d %H:%M' + sleep 1 + done +} + +update_mem() { + while true; do + awk ' +$1 == "MemTotal:" { total=$2; } +$1 == "MemFree:" { free=$2; } +$1 == "Buffers:" { buf=$2; } +$1 == "Cached:" { cache=$2; } +END { print "mem " int((total - free - buf - cache) / 1024); }' < /proc/meminfo + sleep 2 + done +} + +update_cpu() { + while true; do + grep '^cpu\s' < /proc/stat + sleep 2 + done +} + +update_bat() { + while true; do + battery -f "bat %s %d" + sleep 2 + done +} + +update_wifi() { + while true; do + wicd-cli -y -d | ~/mybar/wifi.awk + sleep 2 + done +} + +trap 'trap - TERM; kill 0' INT TERM QUIT EXIT + +update_wminfo > "$BAR_FIFO" & +update_time > "$BAR_FIFO" & +update_mem > "$BAR_FIFO" & +update_cpu > "$BAR_FIFO" & + +if test $(hostname) = "kch42-notebook"; then + update_bat > "$BAR_FIFO" & + update_wifi > "$BAR_FIFO" & +fi + +xtitle -sf 'window %s' > "$BAR_FIFO" & + +cat "$BAR_FIFO" | ~/mybar/mybar.awk | bar diff --git a/mybar/wifi.awk b/mybar/wifi.awk new file mode 100755 index 0000000..90d3f9d --- /dev/null +++ b/mybar/wifi.awk @@ -0,0 +1,22 @@ +#!/bin/awk -f + +BEGIN { + FS=":" + essid="-" + qual="0" +} +$1 == "Essid" { + split($2, parts, " ") + sep="" + essid = "" + for(i in parts) { + essid = sep parts[i] + sep="_" + } +} +$1 == "Quality" { + qual = $2 +} +END { + print "wifi " essid " " qual +} -- cgit v1.2.3-54-g00ecf