#!9PREFIX/bin/rc
# configure wmii

TAB_HEIGHT=16
BAR_HEIGHT=16
BORDER_WIDTH=3

SELECTED_BG_COLOR='#304050'
SELECTED_FG_COLOR='#eeeeee'
SELECTED_BORDER_COLOR='#506070'
NORMAL_BG_COLOR='#222222'
NORMAL_FG_COLOR='#bbbbbb'
NORMAL_BORDER_COLOR='#111111'
TEXT_FONT='fixed'

MODKEY=M  # M, M2, M3, WIN, or M5
NORTHKEY=k
SOUTHKEY=j
WESTKEY=h
EASTKEY=l

nl='
'

fn kbind {
    wmiir create /keys/mode/$1/$2 $3
}

fn selstyle {
    wmiir write $1/text-font $TEXT_FONT
    wmiir write $1/text-color $SELECTED_FG_COLOR
    wmiir write $1/bg-color $SELECTED_BG_COLOR
    wmiir write $1/border-color $SELECTED_BORDER_COLOR
}

fn normstyle {
    wmiir write $1/text-font $TEXT_FONT
    wmiir write $1/text-color $NORMAL_FG_COLOR
    wmiir write $1/bg-color $NORMAL_BG_COLOR
    wmiir write $1/border-color $NORMAL_BORDER_COLOR
}

fn items {
    ifs=:$nl { dirs=`{echo $2} }
    {
        for(dir in $dirs) {
            for(file in $dir/*) {
                if(! ~ $file $dir^'/*' && ! test -d $file && test -x $file) {
                    file=`{basename $file}
                    echo create /menu/items/$1/$"file $"file
                }
            }
        }
    } | sort | wmiir -f &
}

fn frameconf {
    wmiir write $1/event/b3press 'wmiir write /wm/page/sel/ctl toggle'
    wmiir write $1/event/b2press 'wmiir write /wm/ctl close'
    normstyle $1/norm-style
    selstyle $1/sel-style
    wmiir write $1/tab-height $TAB_HEIGHT
    if(~ $2 refresh)
        wmiir write $1/size +0,+0,+0,+0  # causes refresh
}

fn framesconf {
    for(frame in `{wmiir read $1 | grep '^[0-9]'})
        frameconf $1/$frame $2
}


# WMIIBAR CONFIGURATION

fn barsucks {
    wmiir write /bar/$1/b1press 'wmiir write /wm/ctl ''select prev'''
    wmiir write /bar/$1/b3press 'wmiir write /wm/ctl ''select next'''
    wmiir write /bar/$1/b4press 'wmiir write /wm/ctl ''select prev'''
    wmiir write /bar/$1/b5press 'wmiir write /wm/ctl ''select next'''
}

wmiir write /bar/ctl reset
wmiir write /bar/font $TEXT_FONT
wmiir write /bar/fgcolor $NORMAL_FG_COLOR
wmiir write /bar/bgcolor $NORMAL_BG_COLOR
wmiir write /bar/bordercolor $NORMAL_BORDER_COLOR

plab=`{wmiir read /bar/new}
wmiir write /bar/$plab/b1press 'wmiir write /wm/ctl pager'

clab=`{wmiir read /bar/new}
wmiir write /bar/$clab/fgcolor $SELECTED_FG_COLOR
wmiir write /bar/$clab/bgcolor $SELECTED_BG_COLOR
wmiir write /bar/$clab/bordercolor $SELECTED_BG_COLOR
barsucks $clab

wmiir write /bar/expandable 2
wmiir write /bar/geometry 0,south,east,$BAR_HEIGHT
wmiir write /bar/ctl 'display 1'


# WMIIWM CONFIGURATION

# default layout (tiled, max, grid, vsplit or float):
wmiir write /wm/default/page/layout tiled

# width of the left frame in tiled layout in percent:
wmiir write /wm/default/page/tile-width 60

wmiir write /wm/default/core/trans-color $SELECTED_FG_COLOR
wmiir write /wm/default/frame/handle-inc 1

# some broken WIMP apps:
wmiir create /wm/default/client/'xmms:*'/manage 0
wmiir create /wm/default/client/'Gimp:*'/manage 0

wmiir write /wm/default/frame/border-width $BORDER_WIDTH
wmiir write /wm/default/page/size '0,0,east,south-'^$BAR_HEIGHT
wmiir write /wm/event/client-update \
'n=`{wmiir read /wm/page/sel/mode/sel/client/sel/name >[2]/dev/null} \
wmiir write /bar/'^$clab^'/data $"n'
wmiir write /wm/event/page-update \
'n=`{wmiir read /wm/page/sel/name >[2]/dev/null} \
l=`{wmiir read /wm/page/sel/mode/name >[2]/dev/null|awk ''{print substr($0,0,1)}''} \
m=`{wmiir read /keys/lookup >[2]/dev/null|awk ''{print substr($0,7,1)}''} \
wmiir write /bar/'^$plab^'/data $"n^$"l^$"m'

for(page in `{wmiir read /wm/page | grep '^[0-9]'}) {
    framesconf /wm/page/$page/floating refresh
    framesconf /wm/page/$page/managed refresh
}
frameconf /wm/default/frame norefresh
for(i in norm-style norm-style/client)
    normstyle /wm/default/core/pager/$i
for(i in sel-style sel-style/client)
    selstyle /wm/default/core/pager/$i
wmiir write /wm/page/sel/managed/size 0,0,east,south-$BAR_HEIGHT >[2]/dev/null


# WMIIKEYS CONFIGURATION

kbind bare $MODKEY-Escape 'kmode normal'

kbind move Escape 'kmode normal'
kbind move $MODKEY-C-r 'kmode resize'
kbind move $NORTHKEY 'wmiir write /wm/page/sel/mode/sel/size -0,-30,-0,-0'
kbind move $SOUTHKEY 'wmiir write /wm/page/sel/mode/sel/size +0,+30,+0,+0'
kbind move $WESTKEY 'wmiir write /wm/page/sel/mode/sel/size -40,-0,-0,-0'
kbind move $EASTKEY 'wmiir write /wm/page/sel/mode/sel/size +40,+0,+0,+0'
kbind move S-$NORTHKEY 'wmiir write /wm/page/sel/mode/sel/size -0,north,-0,-0'
kbind move S-$SOUTHKEY 'wmiir write /wm/page/sel/mode/sel/size +0,south-'^$BAR_HEIGHT^',+0,+0'
kbind move S-$WESTKEY 'wmiir write /wm/page/sel/mode/sel/size west,-0,-0,-0'
kbind move S-$EASTKEY 'wmiir write /wm/page/sel/mode/sel/size east,+0,+0,+0'

kbind resize Escape 'kmode normal'
kbind resize $MODKEY-C-m 'kmode move'
kbind resize $NORTHKEY 'wmiir write /wm/page/sel/mode/sel/size +0,+0,+0,-30'
kbind resize $SOUTHKEY 'wmiir write /wm/page/sel/mode/sel/size +0,+0,+0,+30'
kbind resize $WESTKEY 'wmiir write /wm/page/sel/mode/sel/size +0,+0,-40,+0'
kbind resize $EASTKEY 'wmiir write /wm/page/sel/mode/sel/size +0,+0,+40,+0'

kbind normal $MODKEY-C-b 'kmode bare'
kbind normal $MODKEY-C-m 'kmode move'
kbind normal $MODKEY-C-r 'kmode resize'
kbind normal $MODKEY-C-a 'wmiir write /menu/precmd ''''; wmiir write /menu/lookup /items/actions; wmiir write /menu/ctl ''display 1'''
kbind normal $MODKEY-C-p 'wmiir write /menu/precmd extern; wmiir write /menu/lookup /items/programs; wmiir write /menu/ctl ''display 1'''
kbind normal $MODKEY-C-c 'wmiir write /wm/ctl close'
kbind normal $MODKEY-C-q,y quit
kbind normal $MODKEY-C-w,y wmiirc
kbind normal $MODKEY-t 'extern xterm ''+sb'' -bg ''#000000'' -fg ''#eeeeee'' -cr ''#ffffff'' -sl 4000'
kbind normal $MODKEY-d 'wmiir write /wm/ctl detach'
kbind normal $MODKEY-a 'wmiir write /wm/ctl attach'
kbind normal $MODKEY-S-a 'wmiir write /wm/ctl icons'
kbind normal $MODKEY-S-space 'wmiir write /wm/page/sel/ctl toggle'
kbind normal $MODKEY-Return 'wmiir write /wm/page/sel/ctl ''select zoomed'''
kbind normal $MODKEY-C-y 'wmiir write /wm/ctl new'
kbind normal $MODKEY-u 'wmiir write /wm/page/sel/mode/sel/locked 0'
kbind normal $MODKEY-S-u 'wmiir write /wm/page/sel/mode/sel/locked 1'
kbind normal $MODKEY-m 'wmiir write /wm/ctl togglemax'
kbind normal $MODKEY-S-t 'wmiir write /wm/page/sel/managed/name tiled'
kbind normal $MODKEY-S-g 'wmiir write /wm/page/sel/managed/name grid'
kbind normal $MODKEY-S-v 'wmiir write /wm/page/sel/managed/name vsplit'
kbind normal $MODKEY-S-f 'wmiir write /wm/page/sel/managed/name float'
kbind normal $MODKEY-S-m 'wmiir write /wm/page/sel/managed/name max'
kbind normal $MODKEY-$WESTKEY 'wmiir write /wm/ctl ''select prev'''
kbind normal $MODKEY-$EASTKEY 'wmiir write /wm/ctl ''select next'''
kbind normal $MODKEY-Tab 'wmiir write /wm/page/sel/ctl ''select next'''
kbind normal $MODKEY-$SOUTHKEY 'wmiir write /wm/page/sel/ctl ''select next'''
kbind normal $MODKEY-$NORTHKEY 'wmiir write /wm/page/sel/ctl ''select prev'''
kbind normal $MODKEY-S-Tab 'wmiir write /wm/page/sel/mode/sel/ctl ''select next'''
kbind normal $MODKEY-S-$SOUTHKEY 'wmiir write /wm/page/sel/mode/sel/ctl ''select next'''
kbind normal $MODKEY-S-$NORTHKEY 'wmiir write /wm/page/sel/mode/sel/ctl ''select prev'''
kbind normal $MODKEY-space 'wmiir write /wm/page/sel/ctl ''select toggled'''
kbind normal $MODKEY-S-p 'wmiir write /wm/ctl pager'
kbind normal $MODKEY-S-0 'wmiir write /wm/ctl ''select 10'''
for(i in 1 2 3 4 5 6 7 8 9) {
    kbind normal $MODKEY-S-$i 'wmiir write /wm/ctl ''select '^$i^''''
}

wmiir write /keys/size center,center,100,$BAR_HEIGHT
selstyle /keys/box/style
kmode normal


# WMIIMENU CONFIGURATION

items actions $WMII_CONFDIR:$HOME/.wmii-2.5
wmiir create /menu/items/actions/rmpage 'wmiir write /wm/ctl destroy'
items programs $OLD_PATH
wmiir write /menu/size 0,south,east,$BAR_HEIGHT
normstyle /menu/style >[2]/dev/null
normstyle /menu/norm-style >[2]/dev/null
selstyle /menu/sel-style >[2]/dev/null


# MISC

xsetroot -mod 2 2 -fg '#000000' -bg '#111111'
status &
