Browse Source

Various minor changes; see details below.

.config/awesome/rc.lua
  * added awesome configuration (currently default)
.config/obmenugen/*
  * added obmenygen configuration (menu generator for openbox from the AUR)
.config/openbox/*
  * added openbox configuration
.emacs
  * noticed .emacs was out of date and unlinked (see link-conf/confmgr)
  * switched to ELPA packages over AUR or pacman (distro) packages (where possible)
  * code cleanup
.pekwm/*
  * added pekwm configuration (currently default)
.xmobarrc
  * extended the bar because trayer is no longer being used from .xinitrc
.xmonad/xmonad.hs
  * fixed a typo

Signed-off-by: Collin Doering <rekahsoft@gmail.com>
master
16 changed files with 2190 additions and 50 deletions
  1. +373
    -0
      .config/awesome/rc.lua
  2. +13
    -0
      .config/obmenugen/exclusions
  3. +35
    -0
      .config/obmenugen/obmenugen.cfg
  4. +43
    -0
      .config/obmenugen/obmenugen.schema
  5. +1
    -0
      .config/openbox/autostart.sh
  6. +91
    -0
      .config/openbox/menu.xml
  7. +732
    -0
      .config/openbox/rc.xml
  8. +129
    -49
      .emacs
  9. +108
    -0
      .pekwm/config
  10. +315
    -0
      .pekwm/keys
  11. +147
    -0
      .pekwm/menu
  12. +182
    -0
      .pekwm/mouse
  13. +18
    -0
      .pekwm/start
  14. +1
    -0
      .pekwm/vars
  15. +1
    -1
      .xmobarrc
  16. +1
    -0
      .xmonad/xmonad.hs

+ 373
- 0
.config/awesome/rc.lua View File

@@ -0,0 +1,373 @@
-- Standard awesome library
require("awful")
require("awful.autofocus")
require("awful.rules")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")

-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, there were errors during startup!",
text = awesome.startup_errors })
end

-- Handle runtime errors after startup
do
local in_error = false
awesome.add_signal("debug::error", function (err)
-- Make sure we don't go into an endless error loop
if in_error then return end
in_error = true

naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, an error happened!",
text = err })
in_error = false
end)
end
-- }}}

-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
beautiful.init("/usr/share/awesome/themes/default/theme.lua")

-- This is used later as the default terminal and editor to run.
terminal = "xterm"
editor = os.getenv("EDITOR") or "nano"
editor_cmd = terminal .. " -e " .. editor

-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"

-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
awful.layout.suit.floating,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.spiral,
awful.layout.suit.spiral.dwindle,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.magnifier
}
-- }}}

-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {}
for s = 1, screen.count() do
-- Each screen has its own tag table.
tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
end
-- }}}

-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awesome.conffile },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}

mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "open terminal", terminal }
}
})

mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })
-- }}}

-- {{{ Wibox
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" })

-- Create a systray
mysystray = widget({ type = "systray" })

-- Create a wibox for each screen and add it
mywibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = awful.util.table.join(
awful.button({ }, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({ }, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
)
mytasklist = {}
mytasklist.buttons = awful.util.table.join(
awful.button({ }, 1, function (c)
if c == client.focus then
c.minimized = true
else
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
-- This will also un-minimize
-- the client, if needed
client.focus = c
c:raise()
end
end),
awful.button({ }, 3, function ()
if instance then
instance:hide()
instance = nil
else
instance = awful.menu.clients({ width=250 })
end
end),
awful.button({ }, 4, function ()
awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
end),
awful.button({ }, 5, function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end))

for s = 1, screen.count() do
-- Create a promptbox for each screen
mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox[s] = awful.widget.layoutbox(s)
mylayoutbox[s]:buttons(awful.util.table.join(
awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
-- Create a taglist widget
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)

-- Create a tasklist widget
mytasklist[s] = awful.widget.tasklist(function(c)
return awful.widget.tasklist.label.currenttags(c, s)
end, mytasklist.buttons)

-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", screen = s })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
{
mylauncher,
mytaglist[s],
mypromptbox[s],
layout = awful.widget.layout.horizontal.leftright
},
mylayoutbox[s],
mytextclock,
s == 1 and mysystray or nil,
mytasklist[s],
layout = awful.widget.layout.horizontal.rightleft
}
end
-- }}}

-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end),
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
))
-- }}}

-- {{{ Key bindings
globalkeys = awful.util.table.join(
awful.key({ modkey, }, "Left", awful.tag.viewprev ),
awful.key({ modkey, }, "Right", awful.tag.viewnext ),
awful.key({ modkey, }, "Escape", awful.tag.history.restore),

awful.key({ modkey, }, "j",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "k",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),

-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
awful.key({ modkey, }, "Tab",
function ()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),

-- Standard program
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),

awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),

awful.key({ modkey, "Control" }, "n", awful.client.restore),

-- Prompt
awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end),

awful.key({ modkey }, "x",
function ()
awful.prompt.run({ prompt = "Run Lua code: " },
mypromptbox[mouse.screen].widget,
awful.util.eval, nil,
awful.util.getdir("cache") .. "/history_eval")
end)
)

clientkeys = awful.util.table.join(
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
awful.key({ modkey, }, "o", awful.client.movetoscreen ),
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end),
awful.key({ modkey, }, "n",
function (c)
-- The client currently has the input focus, so it cannot be
-- minimized, since minimized clients can't have the focus.
c.minimized = true
end),
awful.key({ modkey, }, "m",
function (c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end)
)

-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screen.count() do
keynumber = math.min(9, math.max(#tags[s], keynumber));
end

-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, keynumber do
globalkeys = awful.util.table.join(globalkeys,
awful.key({ modkey }, "#" .. i + 9,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end),
awful.key({ modkey, "Control" }, "#" .. i + 9,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewtoggle(tags[screen][i])
end
end),
awful.key({ modkey, "Shift" }, "#" .. i + 9,
function ()
if client.focus and tags[client.focus.screen][i] then
awful.client.movetotag(tags[client.focus.screen][i])
end
end),
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
function ()
if client.focus and tags[client.focus.screen][i] then
awful.client.toggletag(tags[client.focus.screen][i])
end
end))
end

clientbuttons = awful.util.table.join(
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
awful.button({ modkey }, 1, awful.mouse.client.move),
awful.button({ modkey }, 3, awful.mouse.client.resize))

-- Set keys
root.keys(globalkeys)
-- }}}

-- {{{ Rules
awful.rules.rules = {
-- All clients will match this rule.
{ rule = { },
properties = { border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = true,
keys = clientkeys,
buttons = clientbuttons } },
{ rule = { class = "MPlayer" },
properties = { floating = true } },
{ rule = { class = "pinentry" },
properties = { floating = true } },
{ rule = { class = "gimp" },
properties = { floating = true } },
-- Set Firefox to always map on tags number 2 of screen 1.
-- { rule = { class = "Firefox" },
-- properties = { tag = tags[1][2] } },
}
-- }}}

-- {{{ Signals
-- Signal function to execute when a new client appears.
client.add_signal("manage", function (c, startup)
-- Add a titlebar
-- awful.titlebar.add(c, { modkey = modkey })

-- Enable sloppy focus
c:add_signal("mouse::enter", function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end)

if not startup then
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)

-- Put windows in a smart way, only if they does not set an initial position.
if not c.size_hints.user_position and not c.size_hints.program_position then
awful.placement.no_overlap(c)
awful.placement.no_offscreen(c)
end
end
end)

client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}

+ 13
- 0
.config/obmenugen/exclusions View File

@@ -0,0 +1,13 @@
# OpenBox Menu Generator exclusions file
#
# Lines starting with a '#' character and empty lines are ignored.
# Put one exclusion per line.
# Exclusions are case sensitive and are matched against
# the 'Name' of the entry (the text that appears in menuitems).
#
# Exclusions format examples:
# ^example$ exact match with 'example'.
# ^example match any string that begins whith 'example'.
# example$ match any string that ends with 'example'.
# example match any string containing 'example'.


+ 35
- 0
.config/obmenugen/obmenugen.cfg View File

@@ -0,0 +1,35 @@
# OpenBox Menu Generator config file
#
# Lines starting with a '#' character and empty lines are ignored.
# Keys and values are case sensitive. Keep all keys lowercase.
# Removing or commenting any config line will cause an error.

# Top Menu section
# 'terminal' and 'editor' are REQUIRED
# 'filemanager', 'webbrowser' and 'run command' are optional.
# Leaving optional values empty causes the corresponding
# menu item to be hidden, no matter what show/hide option says.
terminal = urxvt
editor = emacs
filemanager = urxvt -e mc
webbrowser = firefox
instant messaging =
run command = gmrun

# Lock Screen menuitem
# Also leaving it empty causes menuitem to be hidden
lock command = xscreensaver-command -lock

# Exit menuitem
# Giving this an empty value don't hides the menuitem
# but uses the default OpenBox action "Exit"
exit command =

# OnlyShowIn Exclusions
# There is a 'OnlyShowIn' directive in .desktop files.
# This directive is self-descriptive :)
# You can put here (in lowercase) any directive's posible value
# you want to be excluded from the menu, comma-separeted.
# Leaving this value empty won't exclude any entry by this criteria.
exclude onlyshowin = kde,gnome


+ 43
- 0
.config/obmenugen/obmenugen.schema View File

@@ -0,0 +1,43 @@
# OpenBox Menu Generator Schema file

# Each (non-empty or non-comment) line of this file must be in the form:
# 'type:options'
#
# 'type' could be one of the following values:
# 'item', 'submenu', 'sep', 'cat', 'raw', 'file'
#
# Posible values for each of this types are:
# For 'item': 'terminal', 'filemanager', 'webbrowser', 'instantmessaging', 'editor', 'runcommand', 'lock', 'exit'
# For 'submenu': 'windowsanddesktops', 'openbox'
# For 'sep': A string representing the LABEL for the separator or none
# For 'cat': Any of the posible categories. See obmenugen --help
# For 'raw': A hardcoded XML line in the OpenBox's menu.xml file format
# Example: raw:<item label="Linux Breakout 2"><action name="Execute"><execute>lbreakout2</execute></action></item>
# For file: The name of a file with a chunk of XML in the OpenBox's menu.xml file format.
# The file must be in ~/.config/obmenugen/
# Example: file:extras.xml
#
# Comments are lines begining with a # character, to the end of the line.
item:terminal
item:filemanager
item:webbrowser
item:instantmessaging
item:editor
item:runcommand
submenu:windowsanddesktops
sep:Applications
cat:accesories
cat:graphics
cat:audiovideo
cat:education
cat:office
cat:games
cat:network
cat:development
cat:settings
cat:system
submenu:openbox
sep:
item:lock
item:exit


+ 1
- 0
.config/openbox/autostart.sh View File

@@ -0,0 +1 @@
#!/bin/bash

+ 91
- 0
.config/openbox/menu.xml View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/X11R6/share/openbox/menu.xsd">
<menu id="root-menu" label="openbox3">
<item label="Terminal"><action name="Execute"><execute>urxvt</execute></action></item>
<item label="File Manager"><action name="Execute"><execute>urxvt -e mc</execute></action></item>
<item label="Web Browser"><action name="Execute"><execute>firefox</execute></action></item>
<item label="Editor"><action name="Execute"><execute>emacs</execute></action></item>
<item label="Run Command"><action name="Execute"><execute>gmrun</execute></action></item>
<separator />
<menu id="client-list-combined-menu" />
<separator label="Applications"/>
<menu id="Accesories" label="Accesories">
<item label="File Manager"><action name="Execute"><execute>pcmanfm</execute></action></item>
<item label="Graveman"><action name="Execute"><execute>graveman</execute></action></item>
<item label="Parcellite"><action name="Execute"><execute>parcellite</execute></action></item>
<item label="SpeedCrunch"><action name="Execute"><execute>speedcrunch</execute></action></item>
</menu>
<menu id="Graphics" label="Graphics">
<item label="GNU Image Manipulation Program"><action name="Execute"><execute>gimp-2.6</execute></action></item>
<item label="Image Viewer"><action name="Execute"><execute>gpicview</execute></action></item>
</menu>
<menu id="Audio &amp; Video" label="Audio &amp; Video">
<item label="EasyTAG"><action name="Execute"><execute>easytag</execute></action></item>
<item label="Enqueue in SMPlayer"><action name="Execute"><execute>smplayer -add-to-playlist</execute></action></item>
<item label="MPlayer Media Player"><action name="Execute"><execute>mplayer -really-quiet</execute></action></item>
<item label="SMPlayer"><action name="Execute"><execute>smplayer</execute></action></item>
<item label="VLC media player"><action name="Execute"><execute>vlc</execute></action></item>
</menu>
<menu id="Office" label="Office">
<item label="HTMLDOC"><action name="Execute"><execute>htmldoc</execute></action></item>
<item label="OpenOffice.org 3.3 Base"><action name="Execute"><execute>openoffice -base</execute></action></item>
<item label="OpenOffice.org 3.3 Calc"><action name="Execute"><execute>openoffice -calc</execute></action></item>
<item label="OpenOffice.org 3.3 Draw"><action name="Execute"><execute>openoffice -draw</execute></action></item>
<item label="OpenOffice.org 3.3 Impress"><action name="Execute"><execute>openoffice -impress</execute></action></item>
<item label="OpenOffice.org 3.3 Math"><action name="Execute"><execute>openoffice -math</execute></action></item>
<item label="OpenOffice.org 3.3 Printer Administration"><action name="Execute"><execute>openoffice-printeradmin</execute></action></item>
<item label="OpenOffice.org 3.3 Writer"><action name="Execute"><execute>openoffice -writer</execute></action></item>
<item label="OpenOffice.org 3.3"><action name="Execute"><execute>openoffice</execute></action></item>
<item label="Zathura"><action name="Execute"><execute>zathura</execute></action></item>
</menu>
<menu id="Games" label="Games">
<item label="DOOM III"><action name="Execute"><execute>/usr/bin/doom3</execute></action></item>
</menu>
<menu id="Network" label="Network">
<item label="Avahi SSH Server Browser"><action name="Execute"><execute>/usr/bin/bssh</execute></action></item>
<item label="Avahi VNC Server Browser"><action name="Execute"><execute>/usr/bin/bvnc</execute></action></item>
<item label="Deluge BitTorrent Client"><action name="Execute"><execute>deluge-gtk</execute></action></item>
<item label="Firefox - Safe Mode"><action name="Execute"><execute>firefox -safe-mode</execute></action></item>
<item label="Firefox Beta - Safe Mode"><action name="Execute"><execute>firefox-beta-bin -safe-mode</execute></action></item>
<item label="Firefox Beta"><action name="Execute"><execute>firefox-beta-bin</execute></action></item>
<item label="Firefox"><action name="Execute"><execute>firefox</execute></action></item>
<item label="Zenmap (as root)"><action name="Execute"><execute>/usr/share/zenmap/su-to-zenmap.sh</execute></action></item>
<item label="Zenmap"><action name="Execute"><execute>zenmap</execute></action></item>
<item label="unison"><action name="Execute"><execute>unison-x11</execute></action></item>
</menu>
<menu id="Development" label="Development">
<item label="CMake"><action name="Execute"><execute>cmake-gui</execute></action></item>
<item label="DrRacket"><action name="Execute"><execute>drracket</execute></action></item>
<item label="Emacs Text Editor"><action name="Execute"><execute>emacs</execute></action></item>
<item label="Qt Assistant"><action name="Execute"><execute>/usr/bin/assistant</execute></action></item>
<item label="Qt Designer"><action name="Execute"><execute>/usr/bin/designer</execute></action></item>
<item label="Qt Linguist"><action name="Execute"><execute>/usr/bin/linguist</execute></action></item>
</menu>
<menu id="Settings" label="Settings">
<item label="NVIDIA X Server Settings"><action name="Execute"><execute>/usr/bin/nvidia-settings</execute></action></item>
<item label="Preferred Applications"><action name="Execute"><execute>libfm-pref-apps</execute></action></item>
<item label="Qt Config"><action name="Execute"><execute>/usr/bin/qtconfig</execute></action></item>
<item label="Screensaver"><action name="Execute"><execute>xscreensaver-demo</execute></action></item>
</menu>
<menu id="System Tools" label="System Tools">
<item label="Avahi Zeroconf Browser"><action name="Execute"><execute>/usr/bin/avahi-discover</execute></action></item>
<item label="Htop"><action name="Execute"><execute>urxvt -e htop</execute></action></item>
<item label="Ophcrack"><action name="Execute"><execute>ophcrack</execute></action></item>
<item label="Oracle VM VirtualBox"><action name="Execute"><execute>VirtualBox</execute></action></item>
<item label="rxvt-unicode"><action name="Execute"><execute>urxvt</execute></action></item>
</menu>
<separator />
<menu id="Openbox Settings" label="Openbox Settings">
<item label="Reconfigure Openbox"><action name="Reconfigure" /></item>
<item label="Configure Autostarted Applications"><action name="Execute"><execute>emacs /home/collin/.config/openbox/autostart.sh</execute></action></item>
<item label="Edit rc.xml"><action name="Execute"><execute>emacs /home/collin/.config/openbox/rc.xml</execute></action></item>
<separator label="obmenugen settings"/>
<item label="Edit obmenugen configuration"><action name="Execute"><execute>emacs /home/collin/.config/obmenugen/obmenugen.cfg</execute></action></item>
<item label="Edit obmenugen exclusions"><action name="Execute"><execute>emacs /home/collin/.config/obmenugen/exclusions</execute></action></item>
<item label="Edit obmenugen schema"><action name="Execute"><execute>emacs /home/collin/.config/obmenugen/obmenugen.schema</execute></action></item>
</menu>
<separator />
<item label="Lock Screen"><action name="Execute"><execute>xscreensaver-command -lock</execute></action></item>
<item label="Exit"><action name="Exit" /></item>
</menu>
</openbox_menu>

+ 732
- 0
.config/openbox/rc.xml View File

@@ -0,0 +1,732 @@
<?xml version="1.0" encoding="UTF-8"?>

<!-- Do not edit this file, it will be overwritten on install.
Copy the file to $HOME/.config/openbox/ instead. -->

<openbox_config xmlns="http://openbox.org/3.4/rc">

<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>

<focus>
<focusNew>yes</focusNew>
<!-- always try to focus new windows when they appear. other rules do
apply -->
<followMouse>no</followMouse>
<!-- move focus to a window when you move the mouse into it -->
<focusLast>yes</focusLast>
<!-- focus the last used window when changing desktops, instead of the one
under the mouse pointer. when followMouse is enabled -->
<underMouse>no</underMouse>
<!-- move focus under the mouse, even when the mouse is not moving -->
<focusDelay>200</focusDelay>
<!-- when followMouse is enabled, the mouse must be inside the window for
this many milliseconds (1000 = 1 sec) before moving focus to it -->
<raiseOnFocus>no</raiseOnFocus>
<!-- when followMouse is enabled, and a window is given focus by moving the
mouse into it, also raise the window -->
</focus>

<placement>
<policy>Smart</policy>
<!-- 'Smart' or 'UnderMouse' -->
<center>yes</center>
<!-- whether to place windows in the center of the free area found or
the top left corner -->
<monitor>Active</monitor>
<!-- with Smart placement on a multi-monitor system, try to place new windows
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
the active window is -->
<primaryMonitor>1</primaryMonitor>
<!-- The monitor where Openbox should place popup dialogs such as the
focus cycling popup, or the desktop switch popup. It can be an index
from 1, specifying a particular monitor. Or it can be one of the
following: 'Mouse' - where the mouse is, or
'Active' - where the active window is -->
</placement>

<theme>
<name>Clearlooks</name>
<titleLayout>NLIMC</titleLayout>
<!--
available characters are NDSLIMC, each can occur at most once.
N: window icon
L: window label (AKA title).
I: iconify
M: maximize
C: close
S: shade (roll up/down)
D: omnipresent (on all desktops).
-->
<keepBorder>yes</keepBorder>
<animateIconify>yes</animateIconify>
<font place="ActiveWindow">
<name>sans</name>
<size>8</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveWindow">
<name>sans</name>
<size>8</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuHeader">
<name>sans</name>
<size>9</size>
<!-- font size in points -->
<weight>normal</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuItem">
<name>sans</name>
<size>9</size>
<!-- font size in points -->
<weight>normal</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="OnScreenDisplay">
<name>sans</name>
<size>9</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
</theme>

<desktops>
<!-- this stuff is only used at startup, pagers allow you to change them
during a session

these are default values to use when other ones are not already set
by other applications, or saved in your session

use obconf if you want to change these without having to log out
and back in -->
<number>4</number>
<firstdesk>1</firstdesk>
<names>
<!-- set names up here if you want to, like this:
<name>desktop 1</name>
<name>desktop 2</name>
-->
</names>
<popupTime>875</popupTime>
<!-- The number of milliseconds to show the popup for when switching
desktops. Set this to 0 to disable the popup. -->
</desktops>

<resize>
<drawContents>yes</drawContents>
<popupShow>Nonpixel</popupShow>
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
<popupPosition>Center</popupPosition>
<!-- 'Center', 'Top', or 'Fixed' -->
<popupFixedPosition>
<!-- these are used if popupPosition is set to 'Fixed' -->

<x>10</x>
<!-- positive number for distance from left edge, negative number for
distance from right edge, or 'Center' -->
<y>10</y>
<!-- positive number for distance from top edge, negative number for
distance from bottom edge, or 'Center' -->
</popupFixedPosition>
</resize>

<!-- You can reserve a portion of your screen where windows will not cover when
they are maximized, or when they are initially placed.
Many programs reserve space automatically, but you can use this in other
cases. -->
<margins>
<top>0</top>
<bottom>0</bottom>
<left>0</left>
<right>0</right>
</margins>

<dock>
<position>TopLeft</position>
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
<floatingX>0</floatingX>
<floatingY>0</floatingY>
<noStrut>no</noStrut>
<stacking>Above</stacking>
<!-- 'Above', 'Normal', or 'Below' -->
<direction>Vertical</direction>
<!-- 'Vertical' or 'Horizontal' -->
<autoHide>no</autoHide>
<hideDelay>300</hideDelay>
<!-- in milliseconds (1000 = 1 second) -->
<showDelay>300</showDelay>
<!-- in milliseconds (1000 = 1 second) -->
<moveButton>Middle</moveButton>
<!-- 'Left', 'Middle', 'Right' -->
</dock>

<keyboard>
<chainQuitKey>C-g</chainQuitKey>

<!-- GMRun keybinding -->
<keybind key="A-F2">
<action name="execute"><execute>gmrun</execute></action>
</keybind>

<!-- Keybindings for desktop switching -->
<keybind key="C-A-Left">
<action name="DesktopLeft"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Right">
<action name="DesktopRight"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Up">
<action name="DesktopUp"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Down">
<action name="DesktopDown"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Left">
<action name="SendToDesktopLeft"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Right">
<action name="SendToDesktopRight"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Up">
<action name="SendToDesktopUp"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="S-A-Down">
<action name="SendToDesktopDown"><dialog>no</dialog><wrap>no</wrap></action>
</keybind>
<keybind key="W-F1">
<action name="Desktop"><desktop>1</desktop></action>
</keybind>
<keybind key="W-F2">
<action name="Desktop"><desktop>2</desktop></action>
</keybind>
<keybind key="W-F3">
<action name="Desktop"><desktop>3</desktop></action>
</keybind>
<keybind key="W-F4">
<action name="Desktop"><desktop>4</desktop></action>
</keybind>
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
</keybind>

<!-- Keybindings for windows -->
<keybind key="A-F4">
<action name="Close"/>
</keybind>
<keybind key="A-Escape">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</keybind>
<keybind key="A-space">
<action name="ShowMenu"><menu>client-menu</menu></action>
</keybind>

<!-- Keybindings for window switching -->
<keybind key="A-Tab">
<action name="NextWindow"/>
</keybind>
<keybind key="A-S-Tab">
<action name="PreviousWindow"/>
</keybind>
<keybind key="C-A-Tab">
<action name="NextWindow">
<panels>yes</panels><desktop>yes</desktop>
</action>
</keybind>

<!-- Keybindings for running applications -->
<keybind key="W-e">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>Konqueror</name>
</startupnotify>
<command>kfmclient openProfile filemanagement</command>
</action>
</keybind>
</keyboard>

<mouse>
<dragThreshold>8</dragThreshold>
<!-- number of pixels the mouse must move before a drag begins -->
<doubleClickTime>200</doubleClickTime>
<!-- in milliseconds (1000 = 1 second) -->
<screenEdgeWarpTime>400</screenEdgeWarpTime>
<!-- Time before changing desktops when the pointer touches the edge of the
screen while moving a window, in milliseconds (1000 = 1 second).
Set this to 0 to disable warping -->

<context name="Frame">
<mousebind button="A-Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="A-Left" action="Click">
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Left" action="Drag">
<action name="Move"/>
</mousebind>

<mousebind button="A-Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Right" action="Drag">
<action name="Resize"/>
</mousebind>

<mousebind button="A-Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>

<mousebind button="A-Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="DesktopNext"/>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="DesktopNext"/>
</mousebind>
<mousebind button="A-S-Up" action="Click">
<action name="SendToDesktopPrevious"/>
</mousebind>
<mousebind button="A-S-Down" action="Click">
<action name="SendToDesktopNext"/>
</mousebind>
</context>

<context name="Titlebar">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="Left" action="DoubleClick">
<action name="ToggleMaximizeFull"/>
</mousebind>

<mousebind button="Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>

<mousebind button="Up" action="Click">
<action name="Shade"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
<action name="Lower"/>
</mousebind>
<mousebind button="Down" action="Click">
<action name="Unshade"/>
<action name="Raise"/>
</mousebind>

<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>

<context name="Top">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>top</edge></action>
</mousebind>
</context>

<context name="Left">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>left</edge></action>
</mousebind>

<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>

<context name="Right">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>right</edge></action>
</mousebind>

<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>

<context name="Bottom">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>bottom</edge></action>
</mousebind>

<mousebind button="Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>

<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>

<context name="BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>

<context name="BRCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>

<context name="TLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>

<context name="TRCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>

<context name="Client">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>

<context name="Icon">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>

<context name="AllDesktops">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleOmnipresent"/>
</mousebind>
</context>

<context name="Shade">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleShade"/>
</mousebind>
</context>

<context name="Iconify">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Iconify"/>
</mousebind>
</context>

<context name="Maximize">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleMaximizeFull"/>
</mousebind>
<mousebind button="Middle" action="Click">
<action name="ToggleMaximizeVert"/>
</mousebind>
<mousebind button="Right" action="Click">
<action name="ToggleMaximizeHorz"/>
</mousebind>
</context>

<context name="Close">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Close"/>
</mousebind>
</context>

<context name="Desktop">
<mousebind button="Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="Down" action="Click">
<action name="DesktopNext"/>
</mousebind>

<mousebind button="A-Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="DesktopNext"/>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="DesktopNext"/>
</mousebind>

<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>

<context name="Root">
<!-- Menus -->
<mousebind button="Middle" action="Press">
<action name="ShowMenu"><menu>client-list-combined-menu</menu></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="ShowMenu"><menu>root-menu</menu></action>
</mousebind>
</context>

<context name="MoveResize">
<mousebind button="Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="Down" action="Click">
<action name="DesktopNext"/>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="DesktopPrevious"/>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="DesktopNext"/>
</mousebind>
</context>
</mouse>

<menu>
<!-- You can specify more than one menu file in here and they are all loaded,
just don't make menu ids clash or, well, it'll be kind of pointless -->

<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
<file>menu.xml</file>
<hideDelay>200</hideDelay>
<!-- if a press-release lasts longer than this setting (in milliseconds), the
menu is hidden again -->
<middle>no</middle>
<!-- center submenus vertically about the parent entry -->
<submenuShowDelay>100</submenuShowDelay>
<!-- time to delay before showing a submenu after hovering over the parent
entry.
if this is a negative value, then the delay is infinite and the
submenu will not be shown until it is clicked on -->
<submenuHideDelay>400</submenuHideDelay>
<!-- time to delay before hiding a submenu when selecting another
entry in parent menu -->
if this is a negative value, then the delay is infinite and the
submenu will not be hidden until a different submenu is opened -->
<applicationIcons>yes</applicationIcons>
<!-- controls if icons appear in the client-list-(combined-)menu -->
<manageDesktops>yes</manageDesktops>
<!-- show the manage desktops section in the client-list-(combined-)menu -->
</menu>

<applications>
<!--
# this is an example with comments through out. use these to make your
# own rules, but without the comments of course.

<application name="the window's _OB_APP_NAME property (see obxprop)"
class="the window's _OB_APP_CLASS property (see obxprop)"
role="the window's _OB_APP_ROLE property (see obxprop)"
type="the window's _OB_APP_TYPE property (see obxprob)..
(if unspecified, then it is 'dialog' for child windows)">
# you may set only one of name/class/role/type, or you may use more than one
# together to restrict your matches.

# the name, class, and role use simple wildcard matching such as those
# used by a shell. you can use * to match any characters and ? to match
# any single character.

# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
# or desktop

# when multiple rules match a window, they will all be applied, in the
# order that they appear in this list


# each rule element can be left out or set to 'default' to specify to not
# change that attribute of the window

<decor>yes</decor>
# enable or disable window decorations

<shade>no</shade>
# make the window shaded when it appears, or not

<position force="no">
# the position is only used if both an x and y coordinate are provided
# (and not set to 'default')
# when force is "yes", then the window will be placed here even if it
# says you want it placed elsewhere. this is to override buggy
# applications who refuse to behave
<x>center</x>
# a number like 50, or 'center' to center on screen. use a negative number
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from the
# right edge (or bottom).
<y>200</y>
<monitor>1</monitor>
# specifies the monitor in a xinerama setup.
# 1 is the first head, or 'mouse' for wherever the mouse is
</position>

<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to

<desktop>1</desktop>
# 1 is the first desktop, 'all' for all desktops

<layer>normal</layer>
# 'above', 'normal', or 'below'

<iconic>no</iconic>
# make the window iconified when it appears, or not

<skip_pager>no</skip_pager>
# asks to not be shown in pagers

<skip_taskbar>no</skip_taskbar>
# asks to not be shown in taskbars. window cycling actions will also
# skip past such windows

<fullscreen>yes</fullscreen>
# make the window in fullscreen mode when it appears

<maximized>true</maximized>
# 'Horizontal', 'Vertical' or boolean (yes/no)
</application>

# end of the example
-->
</applications>

</openbox_config>

+ 129
- 49
.emacs View File

@@ -2,6 +2,37 @@
;; Author: Collin J. Doering
;; Description: Emacs configuration file (in emacs lisp)

;; TODO: clean up backages (prefer ELPA to AUR and archlinux packages); also denote which
;; source is being used after require or autoload sexp's.
;; E.g (require 'pkg) ;; PKG_SRC
;; (autoload ...) ;; PKG_SRC
;; For packages that are installed through the ELPA (and thus they are loaded
;; auto-magically) that do not require any changes to this file (.emacs) and/or
;; are changed using customize simply note (in a comment) at the beginning of this file
;; the package

;; ELPA packages that do not require modification of this file other then Customize
;; * caml (required by tuareg)
;; * tuareg
;; * project-mode

;; ELPA packages configured explicitly below:
;; * php-mode
;; * python-mode
;; * lua-mode
;; * erlang
;; * clojure-mode

;; This needs to be a the start of ~/.emacs since package-initialize is run after the user
;; init file is read but before after-init-hook. It autoloads packages installed by
;; package.el including updating the load-path and running/loading/requiring
;; pkgname-autoload.el for all packages (where pkgname is replaced with the appropriate
;; package name). To disable package.el's autoloading functionality use:
;; (setq package-enabled-at-startup nil)
;; The reason to use package-initialize here is so one can modify the installed modules
;; later in this .emacs file but still retain the autoloading functionality of package.el
(package-initialize)

;; stop renaming of saved files to filename~ which ends up breaking hardlinks
(setq backup-by-copying-when-linked t)

@@ -51,7 +82,7 @@
;;(activate-mode-with-hooks 'pretty-lambdas '(scheme-mode-hook lisp-mode-hook lisp-interaction-mode geiser-repl-mode python-mode emacs-lisp-mode))

;; linum mode for pretty line numbering
(require 'linum)
(require 'linum) ;; Built-in

;; right justify the numbers and add a space between them and the text in the given buffer
(setq linum-format
@@ -64,7 +95,7 @@
'face 'linum)))

;; code-modes is a list of mode hooks (for programming langs only)
(defvar code-modes '(scheme-mode-hook emacs-lisp-mode-hook c-mode-hook c++-mode-hook python-mode-hook lua-mode-hook haskell-mode-hook php-mode-hook perl-mode-hook lisp-mode-hook clojure-mode-hook ruby-mode-hook sh-mode-hook))
(defvar code-modes '(scheme-mode-hook emacs-lisp-mode-hook c-mode-hook c++-mode-hook python-mode-hook lua-mode-hook python-mode-hook haskell-mode-hook php-mode-hook perl-mode-hook lisp-mode-hook clojure-mode-hook ruby-mode-hook erlang-mode-hook sh-mode-hook))

;; activate linum-mode in all buffers used for programming
(activate-mode-with-hooks (lambda () (linum-mode 1)) code-modes)
@@ -72,6 +103,12 @@
;; activate flyspell-prog-mode for all buffers used for programming
(activate-mode-with-hooks 'flyspell-prog-mode code-modes)

;; use flyspell-mode in org-mode and magit-log-edit-mode buffers
(activate-mode-with-hooks 'flyspell-mode '(org-mode-hook magit-log-edit-mode-hook))

;; Enjoy a game of Sudoku on some downtime
(require 'sudoku) ;; ELPA

;; *DEPRECIATED* as of emacs24; when it goes live remove this as well as package emacs-color-theme
;; load color-theme and initialize
;;(require 'color-theme)
@@ -105,7 +142,7 @@
(autoload 'ibuffer "ibuffer" "List buffers." t)

;; Require ibuffer extentions (used for ibuffer-never-show-predicates)
(require 'ibuf-ext)
(require 'ibuf-ext) ;; Built-in
(add-to-list 'ibuffer-never-show-predicates "^\\*slime-events\\*$")
(add-to-list 'ibuffer-never-show-predicates "^\\*Completions\\*$")
(add-to-list 'ibuffer-never-show-predicates "^\\*tramp/.*\\*$")
@@ -125,22 +162,35 @@
(name . "^\\.xmobarrc")
(name . "^\\.Xdefaults$")
(name . "^\\.screenrc$")
(name . "^\\.xbindkeysrc$")))
(name . "^\\.xbindkeysrc$")
(name . "^\\.racketrc$")
(name . "^\\.ghci")))
("code" (or
(mode . c-mode)
(mode . c++-mode)
(mode . perl-mode)
(mode . lua-mode)
(mode . clojure-mode)
(mode . java-mode)
(mode . python-mode)
(mode . ruby-mode)
(mode . emacs-lisp-mode)
(mode . lisp-mode)
(mode . sh-mode)
(mode . scheme-mode)
(mode . haskell-mode)
(mode . php-mode)
(mode . xml-mode)))
("REPL" (or
(mode . geiser-mode)
(mode . slime-repl-mode)
(mode . inferior-python-mode)
(mode . inferior-haskell-mode)
(mode . inferior-lisp-mode)
(mode . eshell-mode)
(mode . inferior-scheme-mode)
(mode . inferior-tcl)
(mode . erlang-shell-mode)
(name . "^\\*inferior-lisp\\*$")
(name . "^\\* Racket REPL \\*$")))
("planner" (or
@@ -150,6 +200,10 @@
("emacs" (or
(name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")))
("org" (or
(mode . org-mode)
(name . "^\\.org$")
(name . "^\\.org.gpg$")))
("gnus" (or
(mode . message-mode)
(mode . bbdb-mode)
@@ -164,21 +218,32 @@
(lambda ()
(ibuffer-switch-to-saved-filter-groups "default")))

;; setup html renderer w3m
(require 'w3m-load)
(setq browse-url-browser-function 'w3m-browse-url)
;; Setup oauth2 (required by google-contacts)
;;(add-to-list 'load-path "/home/collin/.emacs.d/elpa/oauth2-0.5")
(require 'oauth2-autoloads) ;; ELPA

;; Setup google-contact
(require 'google-contacts) ;; AUR: emacs-google-contacts
(require 'google-contacts-gnus) ;; AUR: emacs-google-contacts

;; setup html renderer w3m and external browser conkeror
(require 'w3m-load) ;; AUR: emacs-w3m-cvs
(setq browse-url-browser-function 'w3m-browse-url
browse-url-generic-program "conkeror"
w3m-use-cookies t)
(autoload 'w3m-browse-url "w3m" "Ask a WWW browser to show a URL." t)

;; setup magit for git *DISABLED*
;; setup magit for git (being used though elpa [auto-loaded])
;;(autoload 'magit-status magit nil t)
;;(require 'magit)
;;(require 'magit) ;; ELPA
(global-set-key "\C-xS" 'magit-status)

;; Setup PKGBUILD mode
(autoload 'pkgbuild-mode "pkgbuild-mode.el" "PKGBUILD mode." t)
(setq auto-mode-alist (append '(("/PKGBUILD$" . pkgbuild-mode)) auto-mode-alist))

;; setup php-mode
(autoload 'php-mode "php-mode.el" "Php mode." t)
(autoload 'php-mode "php-mode.el" "Php mode." t) ;; ELPA
(setq auto-mode-alist (append '(("/*.\.php[345]?$" . php-mode)) auto-mode-alist))

;; Set default lisp program
@@ -188,7 +253,7 @@
(defun run-kawa ()
"Run Kawa Scheme in an Emacs buffer."
(interactive)
(require 'cmuscheme)
(require 'cmuscheme) ;; Built-in
(let ((scheme-program-name "/usr/bin/kawa"))
(run-scheme scheme-program-name)))

@@ -200,29 +265,27 @@

;; Function to start and/or connect to slime
(defun start-slime ()
(interactive)
(unless (slime-connected-p)
(save-excursion (slime))))

;; Setup slime mode
;; Setup slime mode *TODO* drop in slime from ELPA
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/")
(require 'slime)
(require 'slime) ;; AUR: emacs-slime-cvs
(slime-setup '(slime-fancy))

;; Setup clojure mode
(add-to-list 'load-path "/usr/share/emacs/site-lisp/clojure-mode")
(require 'clojure-mode)

;; Setup swank-clojure-mode
;; Setup swank-clojure-mode *TODO* drop in version from ELPA
(add-to-list 'load-path "/usr/share/emacs/site-lisp/swank-clojure")
(require 'swank-clojure)
(require 'swank-clojure) ;; AUR: swank-clojure-git

(add-hook 'clojure-mode-hook
'(lambda ()
(define-key clojure-mode-map "\C-c\C-e" 'lisp-eval-last-sexp)
(define-key clojure-mode-map "\C-x\C-e" 'lisp-eval-last-sexp)))

(eval-after-load "slime"
`(progn
(require 'assoc)
(require 'assoc) ;; Built-in
(setq swank-clojure-classpath
(list "/usr/share/clojure/clojure.jar"
"/usr/share/clojure/clojure-contrib.jar"
@@ -233,11 +296,13 @@
;; Setup emacs-org-mode
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(add-hook 'org-mode-hook 'turn-on-font-lock) ; not needed when global-font-lock-mode is on
(setq org-return-follows-link t)
(setq org-log-done 'time)
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)

;; Setup emacs-haskell-mode
;; Setup emacs-haskell-mode *TODO* drop in ELPA version
(load "/usr/share/emacs/site-lisp/haskell-mode/haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
@@ -248,33 +313,38 @@
(setq haskell-program-name "/usr/bin/ghci")

;; Setup emacs-python-mode
(autoload 'python-mode "/usr/share/emacs/site-lisp/python-mode.el" "Python mode." t)
(autoload 'python-mode "python-mode.el" "Python mode." t) ;; ELPA
(setq auto-mode-alist (append '(("/*.\.py$" . python-mode)) auto-mode-alist))

;; Setup emacs-lua-mode
(setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist)) ;; ELPA
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)

;; Setup emacs-erlang-mode
;; Setup emacs-erlang-mode (ELPA)
(setq erlang-root-dir "/usr/lib/erlang")
(setq exec-path (cons "/usr/lib/erlang/bin" exec-path))
(require 'erlang-start)
(setq auto-mode-alist (append '(("\.erl$" . erlang-mode)) auto-mode-alist))

;; Setup enhanced scheme/racket mode consisting of geiser, quack and paredit
(require 'geiser-install)
;; Setup geiser
(require 'geiser-install) ;; AUR: geiser-git

;; Setup quack *DISABLED*
;(require 'quack)
(require 'paredit)
(defvar paredit-hooks '(lisp-mode-hook lisp-interaction-mode-hook emacs-lisp-mode scheme-mode-hook c-mode-hook c++-mode-hook python-mode-hook))

;; Paredit binds to C-j globally and thus disables the binding to
;; eval-print-last-sexp in *scratch*; this is more of a temporary
;; fix because it creates a global binding and thus can be run in
;; not only any emacs-lisp-mode buffer but any buffer
(global-set-key "\C-xj" 'eval-print-last-sexp)
;; Setup paredit
(require 'paredit) ;; ELPA
(defvar paredit-hooks '(lisp-mode-hook lisp-interaction-mode-hook emacs-lisp-mode-hook scheme-mode-hook c-mode-hook c++-mode-hook python-mode-hook))

;; Apply paredit-mode to modes listed in paredit-hooks
(activate-mode-with-hooks (lambda () (paredit-mode 1)) paredit-hooks)

;; Paredit binds to C-j globally and thus disables the binding to
;; eval-print-last-sexp in emacs-lisp-mode (e.g *scratch*, etc..)
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(define-key emacs-lisp-mode-map "\C-xj" 'eval-print-last-sexp)))

;; Highlight paren's in given modes [to apply globally do (show-paren-mode 1)]
(activate-mode-with-hooks (lambda () (show-paren-mode 1)) paredit-hooks)

@@ -291,10 +361,13 @@
(setq geiser-active-implementations '(racket))

;; setup pastebin.el for use with pastebin.com
(require 'pastebin)
(require 'pastebin) ;; ELPA

;; yasnippet, auto-complete-mode and flyspell do not play nicely with one another due to
;; a conflict with the context of their tab binding *OLD*

;; hs-org/minor-mode, yasnippet, auto-complete-mode and flyspell do not play
;; nicely with one another due to a conflict with the context of their tab binding *TODO*
;; hideshow-org being depreciated in my config due to conflicting key bindings with yasnippet
;; and flyspell *TODO*

;; Make hs-minor-mode act like org-mode for code folding
;;(add-to-list 'load-path "/usr/share/emacs/site-lisp/hideshow-org")
@@ -311,16 +384,14 @@
;; (add-hook 'scheme-mode-hook 'hs-org/minor-mode)

;; Setup fancy auto-complete
(add-to-list 'load-path "/usr/share/emacs/site-lisp/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "/usr/share/emacs/site-lisp/auto-complete/ac-dict")
(require 'auto-complete-config) ;; ELPA
;;(add-to-list 'ac-dictionary-directories "/usr/share/emacs/site-lisp/auto-complete/ac-dict")
(ac-config-default)

;; Setup yasnippet-mode *TODO* - in conflict (see comment where hs-org/minor-mode is required)
;; (add-to-list 'load-path "/usr/share/emacs/site-lisp/yas")
;; (require 'yasnippet) ;; not yasnippet-bundle
;; (yas/initialize)
;; (yas/load-directory "/usr/share/emacs/site-lisp/yas/snippets")
;; Setup yasnippet-mode (not yasnippet-bundle)
(require 'yasnippet) ;; ELPA
(yas/initialize)
(yas/load-directory "~/.emacs.d/elpa/yasnippet-0.6.1/snippets")

;; Enable flyspell-mode
(ac-flyspell-workaround)
@@ -328,7 +399,7 @@
;;(flyspell-mode)

;; Enable autoinsert feature to automagically insert
(require 'autoinsert)
(require 'autoinsert) ;; Built-in
(auto-insert-mode) ;;; Adds hook to find-files-hook
(setq auto-insert-directory "~/.emacs.d/templates/") ;;; Or use custom, *NOTE* Trailing slash important
(setq auto-insert-query nil) ;;; If you don't want to be prompted before insertion
@@ -339,6 +410,9 @@
(setq auto-insert-alist
'(("\\.c$" . ["c-template.c" auto-update-generic-template])
("\\.\(cc\|cpp\)$" . ["cpp-template.c" auto-update-generic-template])
("\\.php$" . ["php-template.php" auto-update-generic-template])
("\\.lua$" . ["lua-template.lua" auto-update-generic-template])
("\\.erl$" . ["erlang-template.erl" auto-update-generic-template])
("\\.sh$" . ["shell-template.sh" auto-update-generic-template])
("\\.rkt$" . ["racket-template.rkt" auto-update-generic-template])
("\\.scm$" . ["scheme-template.scm" auto-update-generic-template])
@@ -346,6 +420,7 @@
("\\.lisp$" . ["lisp-template.lisp" auto-update-generic-template])
("\\.el$" . ["emacs-lisp-template.el" auto-update-generic-template])
("\\.hs$" . ["haskell-template.hs" auto-update-generic-template])
("\\.ml$" . ["ocaml-template.ml" auto-update-generic-template])
("\\.py$" . ["python-template.py" auto-update-generic-template])))
(setq auto-insert 'other)

@@ -463,7 +538,7 @@
(let ((inhibit-read-only t))
(erase-buffer)))

(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
;; (add-to-list 'load-path "~/.emacs.d/el-get/el-get")

;; *BROKEN*..can't connect to dbus for some reason?
;; ;; Setup el-get
@@ -487,15 +562,20 @@
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(org-agenda-files nil)
'(highlight-current-line-globally t nil (highlight-current-line))
'(highlight-current-line-ignore-regexp "Faces\\|Colors\\| \\*Mini\\|\\**\\*")
'(magit-commit-signoff t)
'(org-agenda-files (quote ("~/.org/tech/notes.org" "~/.org/todo/rekahsoft-mini-todo.org" "~/.org/todo/rekahsoft-todo.org" "~/.org/todo/general.org" "~/.org/todo/work.org")))
'(quack-default-program "racket")
'(quack-fontify-style (quote plt))
'(quack-programs (quote ("mzscheme" "bigloo" "csi" "csi -hygienic" "gosh" "gracket" "gsi" "gsi ~~/syntax-case.scm -" "guile" "kawa" "mit-scheme" "racket" "racket -il typed/racket" "rs" "scheme" "scheme48" "scsh" "sisc" "stklos" "sxi")))
'(scroll-bar-mode nil)
'(show-paren-mode t))
'(show-paren-mode t)
'(w3m-content-type-alist (quote (("text/plain" "\\.\\(?:txt\\|tex\\|el\\)\\'" nil nil) ("text/html" "\\.s?html?\\'" ("conkeror" file) nil) ("text/sgml" "\\.sgml?\\'" nil "text/plain") ("text/xml" "\\.xml\\'" nil "text/plain") ("image/jpeg" "\\.jpe?g\\'" ("/usr/bin/display" file) nil) ("image/png" "\\.png\\'" ("/usr/bin/display" file) nil) ("image/gif" "\\.gif\\'" ("/usr/bin/display" file) nil) ("image/tiff" "\\.tif?f\\'" ("/usr/bin/display" file) nil) ("image/x-xwd" "\\.xwd\\'" ("/usr/bin/display" file) nil) ("image/x-xbm" "\\.xbm\\'" ("/usr/bin/display" file) nil) ("image/x-xpm" "\\.xpm\\'" ("/usr/bin/display" file) nil) ("image/x-bmp" "\\.bmp\\'" ("/usr/bin/display" file) nil) ("video/mpeg" "\\.mpe?g\\'" nil nil) ("video/quicktime" "\\.mov\\'" nil nil) ("application/dvi" "\\.dvi\\'" ("xdvi" file) nil) ("application/postscript" "\\.e?ps\\'" ("gs" file) nil) ("application/pdf" "\\.pdf\\'" nil nil) ("application/x-pdf" "\\.pdf\\'" nil nil) ("application/xml" "\\.xml\\'" nil w3m-detect-xml-type) ("application/rdf+xml" "\\.rdf\\'" nil "text/plain") ("application/rss+xml" "\\.rss\\'" nil "text/plain") ("application/xhtml+xml" nil nil "text/html")))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
'(font-lock-function-name-face ((t (:foreground "mediumspringgreen" :weight bold :height 1.0))))
'(highlight-current-line-face ((t (:background "gray10")))))

+ 108
- 0
.pekwm/config View File

@@ -0,0 +1,108 @@
Files {
Keys = "~/.pekwm/keys"
Mouse = "~/.pekwm/mouse"
Menu = "~/.pekwm/menu"
Start = "~/.pekwm/start"
AutoProps = "~/.pekwm/autoproperties"
Theme = "$_PEKWM_THEME_PATH/<THEME>"
Icons = "~/.pekwm/icons/"
}

MoveResize {
EdgeAttract = "10"
EdgeResist = "10"
WindowAttract = "5"
WindowResist = "5"
OpaqueMove = "True"
OpaqueResize = "False"
}

Screen {
Workspaces = "9"
WorkspacesPerRow = "3"
WorkspaceNames = "Main;Web;E-mail;Music;Work 05;Work 06;Work 07;Work 08;Work 09"
ShowFrameList = "True"
ShowStatusWindow = "True"
ShowStatusWindowCenteredOnRoot = "False"
ShowClientID = "False"
ShowWorkspaceIndicator = "500"
PlaceNew = "True"
FocusNew = "True"

ReportAllClients = "False"

TrimTitle = "..."
FullscreenAbove = "True"
FullscreenDetect = "True"
HonourRandr = "True"
HonourAspectRatio = "True"
EdgeSize = "1 1 1 1"
EdgeIndent = "False"
PixmapCacheSize = "20"
DoubleClickTime = "250"

Placement {
Model = "CenteredOnParent Smart MouseNotUnder"
Smart {
Row = "True"
TopToBottom = "True"
LeftToRight = "True"
OffsetX = "0"
OffsetY = "0"
}
}

UniqueNames {
SetUnique = "False"
Pre = " #"
Post = ""
}
}

Menu {
DisplayIcons = "True"

Icons = "DEFAULT" {
Minimum = "16x16"
Maximum = "16x16"
}

# To enable make separate window have other icon size restrictions,
# for example wallpaper menu found in pekwm_menu_tools, set the following
# for each menu you want to "free".

# Icons = "Wallpaper" {
# Minimum = "64x64"
# Maximum = "64x64"
# }

# Defines how menus act on mouse input.
# Possible values are: "ButtonPress ButtonRelease DoubleClick Motion"
# To make submenus open on mouse over, comment the default Enter,
# uncomment the alternative, and reload pekwm.
Select = "Motion MotionPressed"
Enter = "MotionPressed ButtonPress"
# Enter = "Motion"
Exec = "ButtonRelease"
}

CmdDialog {
HistoryUnique = "True"
HistorySize = "1024"
HistoryFile = "~/.pekwm/history"
HistorySaveInterval = "16"
}

Harbour {
OnTop = "True"
MaximizeOver = "False"
Placement = "Right"
Orientation = "TopToBottom"
Head = "0"

DockApp {
SideMin = "64"
SideMax = "0"
}
}

+ 315
- 0
.pekwm/keys View File

@@ -0,0 +1,315 @@
INCLUDE = "vars"

Global {
# - - ----------------------------------------------- - -
# Simple bindings to most frequently used actions.
#
# Adding your own frequently used actions is easy -
# just copy it over from CHAINS and edit the keypress!
# Moving in frames
KeyPress = "Mod1 Tab" { Actions = "NextFrame EndRaise" }
KeyPress = "Mod1 Shift Tab" { Actions = "PrevFrame EndRaise" }
KeyPress = "Mod1 Ctrl Tab" { Actions = "NextFrameMRU EndRaise" }
KeyPress = "Mod1 Ctrl Shift Tab" { Actions = "PrevFrameMRU EndRaise" }
KeyPress = "Mod4 Tab" { Actions = "ActivateClientRel 1" }
KeyPress = "Mod4 Shift Tab" { Actions = "ActivateClientRel -1" }
KeyPress = "Mod4 Ctrl Right" { Actions = "MoveClientRel 1" }
KeyPress = "Mod4 Ctrl Left" { Actions = "MoveClientRel -1" }
KeyPress = "Mod4 Left" { Actions = "FocusDirectional Left" }
KeyPress = "Mod4 Right" { Actions = "FocusDirectional Right" }
KeyPress = "Mod4 Up" { Actions = "FocusDirectional Up" }
KeyPress = "Mod4 Down" { Actions = "FocusDirectional Down" }
# Moving in workspaces
KeyPress = "Ctrl Mod1 Left" { Actions = "GotoWorkspace Left" }
KeyPress = "Ctrl Mod1 Right" { Actions = "GotoWorkspace Right" }
KeyPress = "Ctrl Mod1 Up" { Actions = "GotoWorkspace Up" }
KeyPress = "Ctrl Mod1 Down" { Actions = "GotoWorkspace Down" }
KeyPress = "Mod4 1" { Actions = "GotoWorkspace 1" }
KeyPress = "Mod4 2" { Actions = "GotoWorkspace 2" }
KeyPress = "Mod4 3" { Actions = "GotoWorkspace 3" }
KeyPress = "Mod4 4" { Actions = "GotoWorkspace 4" }
KeyPress = "Mod4 5" { Actions = "GotoWorkspace 5" }
KeyPress = "Mod4 6" { Actions = "GotoWorkspace 6" }
KeyPress = "Mod4 7" { Actions = "GotoWorkspace 7" }
KeyPress = "Mod4 8" { Actions = "GotoWorkspace 8" }
KeyPress = "Mod4 9" { Actions = "GotoWorkspace 9" }
KeyPress = "Ctrl Mod1 Shift Left" { Actions = "SendToWorkspace Next; GoToWorkspace Next" }
KeyPress = "Ctrl Mod1 Shift Right" { Actions = "SendToWorkspace Prev; GoToWorkspace Prev" }
KeyPress = "Ctrl Mod1 Shift Up" { Actions = "SendToWorkspace NextV; GoToWorkspace NextV" }
KeyPress = "Ctrl Mod1 Shift Down" { Actions = "SendToWorkspace PrevV; GoToWorkspace PrevV" }
KeyPress = "Mod4 F1" { Actions = "SendToWorkspace 1" }
KeyPress = "Mod4 F2" { Actions = "SendToWorkspace 2" }
KeyPress = "Mod4 F3" { Actions = "SendToWorkspace 3" }
KeyPress = "Mod4 F4" { Actions = "SendToWorkspace 4" }
KeyPress = "Mod4 F5" { Actions = "SendToWorkspace 5" }
KeyPress = "Mod4 F6" { Actions = "SendToWorkspace 6" }
KeyPress = "Mod4 F7" { Actions = "SendToWorkspace 7" }
KeyPress = "Mod4 F8" { Actions = "SendToWorkspace 8" }
KeyPress = "Mod4 F9" { Actions = "SendToWorkspace 9" }
# Simple window management
KeyPress = "Mod4 M" { Actions = "Toggle Maximized True True" }
KeyPress = "Mod4 G" { Actions = "Maxfill True True" }
KeyPress = "Mod4 F" { Actions = "Toggle FullScreen" }
KeyPress = "Mod4 Return" { Actions = "MoveResize" }
KeyPress = "Mod4 Q" { Actions = "Close" }
KeyPress = "Mod4 S" { Actions = "Toggle Shaded" }
KeyPress = "Mod4 I" { Actions = "Toggle Iconified" }
# Marking
KeyPress = "Mod4 Z" { Actions = "Toggle Marked" }
KeyPress = "Mod4 A" { Actions = "AttachMarked" }
# Tagging
KeyPress = "Mod4 T" { Actions = "Toggle Tagged False" }
# Menus
KeyPress = "Mod4 R" { Actions = "ShowMenu Root" }
KeyPress = "Mod4 W" { Actions = "ShowMenu Window" }
KeyPress = "Mod4 L" { Actions = "ShowMenu Goto" }
KeyPress = "Mod4 C" { Actions = "ShowMenu GotoClient" }
KeyPress = "Mod4 Shift I" { Actions = "ShowMenu Icon" }
KeyPress = "Mod4 X" { Actions = "HideAllMenus" }
# External Commands
KeyPress = "Mod4 E" { Actions = "Exec $TERM" }
# Pekwm control
KeyPress = "Ctrl Mod1 Delete" { Actions = "Reload" }
KeyPress = "Mod4 D" { Actions = "ShowCmdDialog" }
KeyPress = "Mod4 V" { Actions = "ShowSearchDialog" }
KeyPress = "Mod4 H" { Actions = "Toggle HarbourHidden" }

# - - ----------------------------------------------- - -
# CHAINS. These give you access to just about everything.
# Move to Corner
Chain = "Ctrl Mod1 C" {
KeyPress = "Q" { Actions = "MoveToEdge TopLeft" }
KeyPress = "Y" { Actions = "MoveToEdge TopCenterEdge" }
KeyPress = "W" { Actions = "MoveToEdge TopCenterEdge" }
KeyPress = "Shift Y" { Actions = "MoveToEdge TopEdge" }
KeyPress = "Shift W" { Actions = "MoveToEdge TopEdge" }
KeyPress = "P" { Actions = "MoveToEdge TopRight" }
KeyPress = "E" { Actions = "MoveToEdge TopRight" }
KeyPress = "A" { Actions = "MoveToEdge LeftCenterEdge" }
KeyPress = "Shift A" { Actions = "MoveToEdge LeftEdge" }
KeyPress = "L" { Actions = "MoveToEdge RightCenterEdge" }
KeyPress = "D" { Actions = "MoveToEdge RightCenterEdge" }
KeyPress = "Shift L" { Actions = "MoveToEdge RightEdge" }
KeyPress = "Shift D" { Actions = "MoveToEdge RightEdge" }
KeyPress = "Z" { Actions = "MoveToEdge BottomLeft" }
KeyPress = "B" { Actions = "MoveToEdge BottomCenterEdge" }
KeyPress = "X" { Actions = "MoveToEdge BottomCenterEdge" }
KeyPress = "Shift B" { Actions = "MoveToEdge BottomEdge" }
KeyPress = "Shift X" { Actions = "MoveToEdge BottomEdge" }
KeyPress = "M" { Actions = "MoveToEdge BottomRight" }
KeyPress = "C" { Actions = "MoveToEdge BottomRight" }
KeyPress = "H" { Actions = "MoveToEdge Center" }
KeyPress = "S" { Actions = "MoveToEdge Center" }
}
# Menus
Chain = "Ctrl Mod1 M" {
KeyPress = "R" { Actions = "ShowMenu Root" }
KeyPress = "W" { Actions = "ShowMenu Window" }
KeyPress = "I" { Actions = "ShowMenu Icon" }
KeyPress = "G" { Actions = "ShowMenu Goto" }
KeyPress = "C" { Actions = "ShowMenu GotoClient" }
KeyPress = "D" { Actions = "ShowMenu Decor" }
KeyPress = "A" { Actions = "ShowMenu AttachClientInFrame" }
KeyPress = "F" { Actions = "ShowMenu AttachFrameInFrame" }
Keypress = "Shift A" { Actions = "ShowMenu AttachClient" }
Keypress = "Shift F" { Actions = "ShowMenu AttachFrame" }
KeyPress = "X" { Actions = "HideAllMenus" }
}
# Grouping
Chain = "Ctrl Mod1 T" {
KeyPress = "T" { Actions = "Toggle Tagged False" }
KeyPress = "B" { Actions = "Toggle Tagged True" }
KeyPress = "C" { Actions = "Unset Tagged" }
KeyPress = "G" { Actions = "Toggle GlobalGrouping" }
KeyPress = "M" { Actions = "Toggle Marked" }
KeyPress = "A" { Actions = "AttachMarked" }
KeyPress = "D" { Actions = "Detach" }
Keypress = "P" { Actions = "AttachClientInNextFrame" }
KeyPress = "O" { Actions = "AttachClientInPrevFrame" }
Keypress = "I" { Actions = "AttachFrameInNextFrame" }
KeyPress = "U" { Actions = "AttachFrameInPrevFrame" }
}
# Decor Toggles
Chain = "Ctrl Mod1 D" {
KeyPress = "B" { Actions = "Toggle DecorBorder" }
KeyPress = "T" { Actions = "Toggle DecorTitlebar" }
KeyPress = "D" { Actions = "Toggle DecorBorder; Toggle DecorTitlebar" }
}
# Window Actions
Chain = "Ctrl Mod1 A" {
Chain = "G" {
KeyPress = "G" { Actions = "MaxFill True True" }
KeyPress = "V" { Actions = "MaxFill False True" }
KeyPress = "H" { Actions = "MaxFill True False" }
}
Chain = "M" {
KeyPress = "M" { Actions = "Toggle Maximized True True" }
KeyPress = "V" { Actions = "Toggle Maximized False True" }
KeyPress = "H" { Actions = "Toggle Maximized True False" }
}
Chain = "Q" {
KeyPress = "Q" { Actions = "Close" }
KeyPress = "F" { Actions = "CloseFrame" }
KeyPress = "K" { Actions = "Kill" }
}
KeyPress = "S" { Actions = "Toggle Shaded" }
KeyPress = "A" { Actions = "Toggle Sticky" }
KeyPress = "O" { Actions = "Toggle AlwaysOnTop" }
KeyPress = "B" { Actions = "Toggle AlwaysBelow" }
KeyPress = "I" { Actions = "Set Iconified" }
KeyPress = "R" { Actions = "Raise" }
KeyPress = "Shift R" { Actions = "Raise True" }
KeyPress = "L" { Actions = "Lower" }
KeyPress = "Shift L" { Actions = "Lower True" }
KeyPress = "X" { Actions = "ActivateOrRaise" }
KeyPress = "Return" { Actions = "MoveResize" }
KeyPress = "F" { Actions = "Toggle Fullscreen" }
KeyPress = "Left" { Actions = "GrowDirection Left" }
KeyPress = "Right" { Actions = "GrowDirection Right" }
KeyPress = "Up" { Actions = "GrowDirection Up" }
KeyPress = "Down" { Actions = "GrowDirection Down" }
}
# Moving in Frames
Chain = "Ctrl Mod1 F" {
KeyPress = "P" { Actions = "NextFrame AlwaysRaise" }
KeyPress = "O" { Actions = "PrevFrame AlwaysRaise" }
KeyPress = "Shift P" { Actions = "NextFrameMRU EndRaise" }
KeyPress = "Shift O" { Actions = "PrevFrameMRU EndRaise" }
KeyPress = "I" { Actions = "ActivateClientRel 1" }
KeyPress = "U" { Actions = "ActivateClientRel -1" }
KeyPress = "Shift I" { Actions = "MoveClientRel 1" }
KeyPress = "Shift U" { Actions = "MoveClientRel -1" }
KeyPress = "Up" { Actions = "FocusDirectional Up" }
KeyPress = "Down" { Actions = "FocusDirectional Down" }
KeyPress = "Left" { Actions = "FocusDirectional Left" }
Keypress = "Right" { Actions = "FocusDirectional Right" }
KeyPress = "1" { Actions = "ActivateClientNum 1" }
KeyPress = "2" { Actions = "ActivateClientNum 2" }
KeyPress = "3" { Actions = "ActivateClientNum 3" }
KeyPress = "4" { Actions = "ActivateClientNum 4" }
KeyPress = "5" { Actions = "ActivateClientNum 5" }
KeyPress = "6" { Actions = "ActivateClientNum 6" }
KeyPress = "7" { Actions = "ActivateClientNum 7" }
KeyPress = "8" { Actions = "ActivateClientNum 8" }
KeyPress = "9" { Actions = "ActivateClientNum 9" }
KeyPress = "0" { Actions = "ActivateClientNum 10" }
KeyPress = "C" { Actions = "ShowCmdDialog GotoClientID " }
}
# Workspaces
Chain = "Ctrl Mod1 W" {
KeyPress = "Right" { Actions = "GoToWorkspace Right" }
KeyPress = "Left" { Actions = "GoToWorkspace Left" }
KeyPress = "N" { Actions = "GoToWorkspace Next" }
KeyPress = "P" { Actions = "GoToWorkspace Prev" }
KeyPress = "1" { Actions = "GoToWorkspace 1" }
KeyPress = "2" { Actions = "GoToWorkspace 2" }
KeyPress = "3" { Actions = "GoToWorkspace 3" }
KeyPress = "4" { Actions = "GoToWorkspace 4" }
KeyPress = "5" { Actions = "GoToWorkspace 5" }
KeyPress = "6" { Actions = "GoToWorkspace 6" }
KeyPress = "7" { Actions = "GoToWorkspace 7" }
KeyPress = "8" { Actions = "GoToWorkspace 8" }
KeyPress = "9" { Actions = "GoToWorkspace 9" }
KeyPress = "Up" { Actions = "SendToWorkspace Next; GoToWorkspace Next" }
KeyPress = "Down" { Actions = "SendToWorkspace Prev; GoToWorkspace Prev" }
KeyPress = "F1" { Actions = "SendToWorkspace 1" }
KeyPress = "F2" { Actions = "SendToWorkspace 2" }
KeyPress = "F3" { Actions = "SendToWorkspace 3" }
KeyPress = "F4" { Actions = "SendToWorkspace 4" }
KeyPress = "F5" { Actions = "SendToWorkspace 5" }
KeyPress = "F6" { Actions = "SendToWorkspace 6" }
KeyPress = "F7" { Actions = "SendToWorkspace 7" }
KeyPress = "F8" { Actions = "SendToWorkspace 8" }
KeyPress = "F9" { Actions = "SendToWorkspace 9" }
}
# External commands
Chain = "Ctrl Mod1 E" {
KeyPress = "E" { Actions = "Exec $TERM" }
KeyPress = "L" { Actions = "Exec xlock -mode blank &" }
KeyPress = "S" { Actions = "Exec scrot &" }
KeyPress = "C" { Actions = "ShowCmdDialog" }
}
# Wm actions
Chain = "Ctrl Mod1 P" {
KeyPress = "Delete" { Actions = "Reload" }
KeyPress = "Next" { Actions = "Restart" }
KeyPress = "End" { Actions = "Exit" }
KeyPress = "Prior" { Actions = "RestartOther twm" }
KeyPress = "D" { Actions = "ShowCmdDialog" }
KeyPress = "H" { Actions = "Toggle HarbourHidden" }
}
# Skipping
Chain = "Ctrl Mod1 S" {
Keypress = "M" { Actions = "Toggle Skip Menus" }
Keypress = "F" { Actions = "Toggle Skip FocusToggle" }
Keypress = "S" { Actions = "Toggle Skip Snap" }
}
}

# Keys when MoveResize is active
MoveResize {
KeyPress = "Left" { Actions = "MoveHorizontal -10" }
KeyPress = "Right" { Actions = "MoveHorizontal 10" }
KeyPress = "Up" { Actions = "MoveVertical -10" }
KeyPress = "Down" { Actions = "MoveVertical 10" }
Keypress = "Shift Left" { Actions = "MoveHorizontal -1" }
Keypress = "Shift Right" { Actions = "MoveHorizontal 1" }
Keypress = "Shift Up" { Actions = "MoveVertical -1" }
Keypress = "Shift Down" { Actions = "MoveVertical 1" }
Keypress = "Mod4 Left" { Actions = "ResizeHorizontal -10" }
Keypress = "Mod4 Right" { Actions = "ResizeHorizontal 10" }
Keypress = "Mod4 Up" { Actions = "ResizeVertical -10" }
Keypress = "Mod4 Down" { Actions = "ResizeVertical 10" }
Keypress = "Mod1 Left" { Actions = "ResizeHorizontal -10" }
Keypress = "Mod1 Right" { Actions = "ResizeHorizontal 10" }
Keypress = "Mod1 Up" { Actions = "ResizeVertical -10" }
Keypress = "Mod1 Down" { Actions = "ResizeVertical 10" }
Keypress = "Shift Mod4 Left" { Actions = "ResizeHorizontal -1" }
Keypress = "Shift Mod4 Right" { Actions = "ResizeHorizontal 1" }
Keypress = "Shift Mod4 Up" { Actions = "ResizeVertical -1" }
Keypress = "Shift Mod4 Down" { Actions = "ResizeVertical 1" }
Keypress = "Shift Mod1 Left" { Actions = "ResizeHorizontal -1" }
Keypress = "Shift Mod1 Right" { Actions = "ResizeHorizontal 1" }
Keypress = "Shift Mod1 Up" { Actions = "ResizeVertical -1" }
Keypress = "Shift Mod1 Down" { Actions = "ResizeVertical 1" }
Keypress = "s" { Actions = "MoveSnap" }
Keypress = "Escape" { Actions = "Cancel" }
Keypress = "q" { Actions = "Cancel" }
Keypress = "Return" { Actions = "End" }
}