@@ -1,2 +1,2 @@ | |||
#!/bin/sh | |||
xset r rate 225 30 | |||
xset r rate 230 30 |
@@ -0,0 +1,45 @@ | |||
#!/bin/bash | |||
ARESET="\e[0m" | |||
ABOLD="\e[1m" | |||
AGREEN="\e[32m" | |||
ARED="\e[91m" | |||
# Default timeout of 0.25 | |||
if [ "$#" -gt 1 ]; then | |||
echo "Usage: $0 [timeout]" | |||
exit 1 | |||
elif [ "$#" -eq 0 ]; then | |||
TO=0.5 | |||
else | |||
TO=$1 | |||
fi | |||
echo -e $ABOLD"DH2020"$ARESET | |||
for i in $(seq -w 0 30); do | |||
if timeout --preserve-status $TO nmap -p22 dh2020pc$i.utm.utoronto.ca -oG - | grep -q 22/open; then | |||
echo -en "$AGREEN""dh2020pc$i""\t" | |||
else | |||
echo -en "$ARED""dh2020pc$i""\t" | |||
fi | |||
if [ $((10#$((10#$i+1)) % 3)) == 0 ]; then | |||
echo "" | |||
fi | |||
done | |||
echo -e $ARESET | |||
echo -e "\n"$ABOLD"DH2026"$ARESET | |||
for i in $(seq -w 0 30); do | |||
if timeout --preserve-status $TO nmap -p22 dh2026pc$i.utm.utoronto.ca -oG - | grep -q 22/open; then | |||
echo -en "$AGREEN""dh2026pc$i""\t" | |||
else | |||
echo -en "$ARED""dh2026pc$i""\t" | |||
fi | |||
if [ $((10#$((10#$i+1)) % 3)) == 0 ]; then | |||
echo "" | |||
fi | |||
done | |||
echo -e $ARESET |
@@ -0,0 +1,2 @@ | |||
#!/bin/sh | |||
ssh wolfejos@dh20$1pc$2.utm.utoronto.ca |
@@ -0,0 +1,186 @@ | |||
#!/usr/bin/env bash | |||
# this is a simple config for herbstluftwm | |||
hc() { | |||
herbstclient "$@" | |||
} | |||
hc emit_hook reload | |||
xsetroot -solid '#5A8E3A' | |||
# remove all existing keybindings | |||
hc keyunbind --all | |||
# keybindings | |||
# 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 terminator | |||
# My bindings | |||
hc keybind $Mod-backslash spawn emacs | |||
hc keybind $Mod-c spawn chromium | |||
hc keybind XF86AudioRaiseVolume spawn amixer -D pulse sset Master 2%+ | |||
hc keybind XF86AudioLowerVolume spawn amixer -D pulse sset Master 2%- | |||
hc keybind XF86AudioMute spawn amixer set Master toggle | |||
# 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=( ampersand bracketleft braceleft braceright parenleft equal asterisk parenright plus ) | |||
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" | |||
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 set default_frame_layout 1 | |||
hc keybind $Mod-r remove | |||
hc keybind $Mod-s floating toggle | |||
hc keybind $Mod-f fullscreen toggle | |||
hc keybind $Mod-p pseudotile toggle | |||
# 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 vertical horizontal max vertical grid \ | |||
, cycle_layout +1 | |||
# mouse | |||
hc mouseunbind --all | |||
hc mousebind $Mod-Button1 move | |||
hc mousebind $Mod-Button2 zoom | |||
hc mousebind $Mod-Button3 resize | |||
# 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-g cycle | |||
hc keybind $Mod-i jumpto urgent | |||
# 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_bg_normal_color '#000000' | |||
hc set frame_bg_active_color '#454545' | |||
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.active.color '#6A8C8C' | |||
hc attr theme.normal.color '#000000' | |||
hc attr theme.urgent.color '#660000' | |||
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 | |||
# 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 '╾│ ├└╼─┐' | |||
# Wallpaper | |||
feh --bg-scale ~/Pictures/calvin-and-hobbes-night-sky-wallpaper.jpg | |||
# 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 | |||
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 |
@@ -0,0 +1,184 @@ | |||
#!/usr/bin/env 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: | |||
# <eventname>\t<data> [...] | |||
# 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 | |||
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' |
@@ -0,0 +1,92 @@ | |||
super + space | |||
rofi -show run -font "snap 10" -o 85 | |||
super + Return | |||
terminator | |||
super + j | |||
chromium | |||
super + backslash | |||
emacs | |||
# Window movement | |||
super + {_,alt +} y | |||
{xmmv,xmrs} | |||
# make sxhkd reload its configuration files: | |||
super + shift + Escape | |||
pkill -USR1 -x sxhkd | |||
# volume keys | |||
XF86AudioRaiseVolume | |||
amixer -D pulse sset Master 2%+ &>/dev/null | |||
XF86AudioLowerVolume | |||
amixer -D pulse sset Master 2%- &>/dev/null | |||
XF86AudioMute | |||
amixer set Master toggle &>/dev/null | |||
# brightness keys | |||
XF86MonBrightnessUp | |||
xbacklight -inc 5 | |||
XF86MonBrightnessDown | |||
xbacklight -dec 5 | |||
# brightness keys | |||
XF86MonBrightnessUp | |||
xbacklight -inc 5 | |||
XF86MonBrightnessDown | |||
xbacklight -dec 5 | |||
super + {h,t,n,s} | |||
waitron window_move {-20 0, 0 20, 0 -20, 20 0} | |||
super + alt + {h,t,n,s} | |||
waitron window_resize {-20 0, 0 20, 0 -20, 20 0} | |||
super + shift + {h,t,n,s} | |||
waitron window_move {-50 0, 0 50, 0 -50, 50 0} | |||
super + shift + alt + {h,t,n,s} | |||
waitron window_resize {-50 0, 0 50, 0 -50, 50 0} | |||
alt + {h,t,n,s} | |||
waitron window_cardinal_focus {left,down,up,right} | |||
super + alt + Escape | |||
waitron wm_quit 0 | |||
super + f | |||
waitron window_maximize | |||
super + shift + q | |||
waitron window_close | |||
super + w | |||
waitron window_hor_maximize | |||
super + c | |||
waitron window_ver_maximize | |||
super + o | |||
waitron window_monocle | |||
alt + Tab | |||
waitron window_focus_last | |||
alt + shift + Tab | |||
waitron window_rev_cycle | |||
alt + ctrl + Tab | |||
waitron window_cycle | |||
super + {_,shift +}{ampersand, bracketleft, braceleft, braceright, parenleft, equal, asterisk, parenright, plus} | |||
waitron {group_toggle,group_add_window} {1-9} | |||
super + ctrl + r | |||
waitron group_remove_window | |||
super + alt + ctrl + {ampersand, bracketleft, braceleft, braceright, parenleft, equal, asterisk, parenright, plus} | |||
waitron group_remove_all_windows {1-9} | |||
super + {g, r, m, v, d} | |||
waitron window_snap {topleft,topright,bottomleft,bottomright,middle} |
@@ -0,0 +1,13 @@ | |||
#!/bin/sh | |||
waitron wm_config border_width 5 | |||
waitron wm_config color_focused 0x97a293 | |||
waitron wm_config color_unfocused 0x393638 | |||
waitron wm_config gap_width all 0 | |||
waitron wm_config grid_gap_width 0 | |||
waitron wm_config cursor_position middle | |||
waitron wm_config groups_nr 9 | |||
waitron wm_config enable_sloppy_focus true | |||
waitron wm_config sticky_windows true | |||
waitron wm_config enable_borders true | |||
waitron wm_config enable_last_window_focusing true |