diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
new file mode 100644
index 0000000..c8f0a92
--- /dev/null
+++ b/.config/awesome/rc.lua
@@ -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)
+-- }}}
diff --git a/.config/obmenugen/exclusions b/.config/obmenugen/exclusions
new file mode 100644
index 0000000..e0530a8
--- /dev/null
+++ b/.config/obmenugen/exclusions
@@ -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'.
+
diff --git a/.config/obmenugen/obmenugen.cfg b/.config/obmenugen/obmenugen.cfg
new file mode 100644
index 0000000..699163c
--- /dev/null
+++ b/.config/obmenugen/obmenugen.cfg
@@ -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
+
diff --git a/.config/obmenugen/obmenugen.schema b/.config/obmenugen/obmenugen.schema
new file mode 100644
index 0000000..93f1bdc
--- /dev/null
+++ b/.config/obmenugen/obmenugen.schema
@@ -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:- lbreakout2
+# 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
+
diff --git a/.config/openbox/autostart.sh b/.config/openbox/autostart.sh
new file mode 100755
index 0000000..a9bf588
--- /dev/null
+++ b/.config/openbox/autostart.sh
@@ -0,0 +1 @@
+#!/bin/bash
diff --git a/.config/openbox/menu.xml b/.config/openbox/menu.xml
new file mode 100644
index 0000000..286b0af
--- /dev/null
+++ b/.config/openbox/menu.xml
@@ -0,0 +1,91 @@
+
+
+
+
diff --git a/.config/openbox/rc.xml b/.config/openbox/rc.xml
new file mode 100644
index 0000000..55690dd
--- /dev/null
+++ b/.config/openbox/rc.xml
@@ -0,0 +1,732 @@
+
+
+
+
+
+
+
+ 10
+ 20
+
+
+
+ yes
+
+ no
+
+ yes
+
+ no
+
+ 200
+
+ no
+
+
+
+
+ Smart
+
+ yes
+
+ Active
+
+ 1
+
+
+
+
+ Clearlooks
+ NLIMC
+
+ yes
+ yes
+
+ sans
+ 8
+
+ bold
+
+ normal
+
+
+
+ sans
+ 8
+
+ bold
+
+ normal
+
+
+
+ sans
+ 9
+
+ normal
+
+ normal
+
+
+
+ sans
+ 9
+
+ normal
+
+ normal
+
+
+
+ sans
+ 9
+
+ bold
+
+ normal
+
+
+
+
+
+
+ 4
+ 1
+
+
+
+ 875
+
+
+
+
+ yes
+ Nonpixel
+
+ Center
+
+
+
+
+ 10
+
+ 10
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+ TopLeft
+
+ 0
+ 0
+ no
+ Above
+
+ Vertical
+
+ no
+ 300
+
+ 300
+
+ Middle
+
+
+
+
+ C-g
+
+
+
+ gmrun
+
+
+
+
+ no
+
+
+ no
+
+
+ no
+
+
+ no
+
+
+ no
+
+
+ no
+
+
+ no
+
+
+ no
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ yesyes
+
+
+
+
+
+
+
+ true
+ Konqueror
+
+ kfmclient openProfile filemanagement
+
+
+
+
+
+ 8
+
+ 200
+
+ 400
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ top
+
+
+
+
+
+
+
+
+
+ left
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ right
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bottom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.emacs b/.emacs
index 0e0ddb7..9436982 100644
--- a/.emacs
+++ b/.emacs
@@ -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)
-;(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))
+;; Setup geiser
+(require 'geiser-install) ;; AUR: geiser-git
-;; 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 quack *DISABLED*
+;(require 'quack)
+
+;; 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
-;; 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*
+;; 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*
+
+;; 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")))))
diff --git a/.pekwm/config b/.pekwm/config
new file mode 100644
index 0000000..5093160
--- /dev/null
+++ b/.pekwm/config
@@ -0,0 +1,108 @@
+Files {
+ Keys = "~/.pekwm/keys"
+ Mouse = "~/.pekwm/mouse"
+ Menu = "~/.pekwm/menu"
+ Start = "~/.pekwm/start"
+ AutoProps = "~/.pekwm/autoproperties"
+ Theme = "$_PEKWM_THEME_PATH/"
+ 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"
+ }
+}
diff --git a/.pekwm/keys b/.pekwm/keys
new file mode 100644
index 0000000..6002088
--- /dev/null
+++ b/.pekwm/keys
@@ -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" }
+}
+
+# Keys for CmdDialog editing
+InputDialog {
+ KeyPress = "Left" { Actions = "CursPrev" }
+ KeyPress = "Right" { Actions = "CursNext" }
+ KeyPress = "Ctrl A" { Actions = "CursBegin" }
+ KeyPress = "Ctrl E" { Actions = "CursEnd" }
+ KeyPress = "BackSpace" { Actions = "Erase;CompleteAbort" }
+ KeyPress = "Ctrl K" { Actions = "ClearFromCursor" }
+ KeyPress = "Ctrl C" { Actions = "Clear" }
+ KeyPress = "Return" { Actions = "Exec" }
+ KeyPress = "Escape" { Actions = "Close" }
+ KeyPress = "Up" { Actions = "HistPrev" }
+ KeyPress = "Down" { Actions = "HistNext" }
+ KeyPress = "Ctrl P" { Actions = "HistPrev" }
+ KeyPress = "Ctrl N" { Actions = "HistNext" }
+ KeyPress = "Ctrl B" { Actions = "CursPrev" }
+ KeyPress = "Ctrl F" { Actions = "CursNext" }
+ KeyPress = "Tab" { Actions = "Complete" }
+ KeyPress = "Any Any" { Actions = "Insert" }
+}
+
+# Keys working in menus
+Menu {
+ KeyPress = "Down" { Actions = "NextItem" }
+ KeyPress = "Up" { Actions = "PrevItem" }
+ KeyPress = "Ctrl N" { Actions = "NextItem" }
+ KeyPress = "Ctrl P" { Actions = "PrevItem" }
+ KeyPress = "Left" { Actions = "LeaveSubmenu" }
+ KeyPress = "Right" { Actions = "EnterSubmenu" }
+ KeyPress = "Return" { Actions = "Select" }
+ KeyPress = "space" { Actions = "Select" }
+ KeyPress = "Escape" { Actions = "Close" }
+ KeyPress = "Q" { Actions = "Close" }
+}
+
diff --git a/.pekwm/menu b/.pekwm/menu
new file mode 100644
index 0000000..3e22e98
--- /dev/null
+++ b/.pekwm/menu
@@ -0,0 +1,147 @@
+# Menu config for pekwm
+
+# Variables
+INCLUDE = "vars"
+
+RootMenu = "Pekwm" {
+ Entry = "Terminal" { Actions = "Exec $TERM &" }
+ Entry = "Run.." { Actions = "ShowCmdDialog" }
+
+ Separator {}
+
+ Submenu = "Editors" {
+ Entry = "vim" { Actions = "Exec $TERM -title vim -e vim &" }
+ Entry = "gvim" { Actions = "Exec gvim &" }
+ Entry = "Emacs" { Actions = "Exec emacs &" }
+ Entry = "Emacs Terminal" { Actions = "Exec $TERM -title emacs -e emacs -nw &" }
+ Entry = "Kate" { Actions = "Exec kate &" }
+ }
+ Submenu = "Graphics" {
+ Entry = "display" { Actions = "Exec display &" }
+ Entry = "Gimp" { Actions = "Exec gimp &" }
+ Entry = "Gv" { Actions = "Exec gv &" }
+ Entry = "Xpdf" { Actions = "Exec xpdf &" }
+ Entry = "gqview" { Actions = "Exec gqview &" }
+ }
+ Submenu = "Multimedia" {
+ Entry = "Amarok" { Actions = "Exec amarok &" }
+ Entry = "Quod Libet" { Actions = "Exec quodlibet &" }
+ Entry = "Xmms" { Actions = "Exec xmms &" }
+ Entry = "MPlayer" { Actions = "Exec gnome-mplayer &" }
+ Entry = "Xine" { Actions = "Exec xine &" }
+ Entry = "xawtv" { Actions = "Exec xawtv &" }
+ Entry = "Totem" { actions = "exec totem &" }
+ Entry = "alsamixer" { Actions = "Exec $TERM -title alsamixer -e alsamixer &" }
+ }
+ Submenu = "Utils" {
+ Entry = "Calculator" { Actions = "Exec gcalctool &" }
+ Entry = "Xpdf" { Actions = "Exec xpdf &" }
+ Entry = "Evince" { Actions = "Exec evince &" }
+ Entry = "gucharmap" { Actions = "Exec gucharmap &" }
+ Entry = "Gkrellm" { Actions = "Exec gkrellm &" }
+ }
+ Submenu = "WWW" {
+ Entry = "Dillo" { Actions = "Exec dillo &" }
+ Entry = "Konqueror" { Actions = "Exec konqueror &" }
+ Entry = "Firefox" { Actions = "Exec firefox &" }
+ }
+ Submenu = "FTP" {
+ Entry = "gftp" { Actions = "Exec gftp &" }
+ Entry = "lftp" { Actions = "Exec $TERM -title lftp -e lftp &" }
+ }
+ Submenu = "Communication" {
+ Entry = "Mutt" { Actions = "Exec $TERM -title mutt -e mutt &" }
+ Entry = "Alpine" { Actions = "Exec $TERM -title alpine -e alpine &" }
+ Entry = "Thunderbird" { Actions = "Exec thunderbird &" }
+ Entry = "Evolution" { Actions = "Exec evolution &" }
+ Entry = "KMail" { Actions = "Exec kmail &" }
+ Entry = "Pidgin" { Actions = "Exec pidgin &" }
+ Entry = "Irssi" { Actions = "Exec $TERM -title irssi -e irssi &" }
+ Entry = "Kopete" { Actions = "Exec kopete &" }
+ }
+ Submenu = "Office" {
+ Entry = "KOffice Workspace" { Actions = "Exec koshell &" }
+ Entry = "OpenOffice" { Actions = "Exec ooffice &" }
+ }
+ Submenu = "Development" {
+ Entry = "Anjuta" { Actions = "Exec anjuta &" }
+ Entry = "Eclipse" { Actions = "Exec eclipse &" }
+ Entry = "KDevelop" { Actions = "Exec kdevelop &" }
+ }
+
+ Separator {}
+
+ Submenu = "Go to" {
+ SubMenu = "Workspace" {
+ # Create goto menu once per pekwm config reload. The fast way that
+ # will work for most if not all users.
+ COMMAND = "$_PEKWM_SCRIPT_PATH/pekwm_ws_menu.sh goto"
+ # Create goto menu every time the menu is opened. The slow way.
+ # This is what you want if you are using external tools to make
+ # the amount of workspaces something else than what you define in
+ # ~/.pekwm/config. You will know if you want this.
+ # Entry = "" { Actions = "Dynamic $_PEKWM_SCRIPT_PATH/pekwm_ws_menu.sh goto dynamic" }
+ }
+ Entry = "Window.." { Actions = "ShowMenu GotoClient True" }
+ }
+ Submenu = "Pekwm" {
+ Submenu = "Themes" {
+ Entry { Actions = "Dynamic $_PEKWM_SCRIPT_PATH/pekwm_themeset.sh $_PEKWM_THEME_PATH" }
+ Entry { Actions = "Dynamic $_PEKWM_SCRIPT_PATH/pekwm_themeset.sh ~/.pekwm/themes" }
+ }
+ Entry = "Reload" { Actions = "Reload" }
+ Entry = "Restart" { Actions = "Restart" }
+ Entry = "Exit" { Actions = "Exit" }
+ Submenu = "Exit to" {
+ Entry = "Xterm" { Actions = "RestartOther xterm" }
+ Entry = "TWM" { Actions = "RestartOther twm" }
+ }
+ }
+}
+
+WindowMenu = "Window Menu" {
+ Entry = "(Un)Stick" { Actions = "Toggle Sticky" }
+ Entry = "(Un)Shade" { Actions = "Toggle Shaded" }
+ Entry = "Iconify" { Actions = "Set Iconified" }
+ Entry = "Command.." { Actions = "ShowCmdDialog" }
+
+ Submenu = "Maximize" {
+ Entry = "Toggle Full" { Actions = "Toggle Maximized True True" }
+ Entry = "Toggle Horizontal" { Actions = "Toggle Maximized True False" }
+ Entry = "Toggle Vertical" { Actions = "Toggle Maximized False True" }
+ }
+ Submenu = "Fill" {
+ Entry = "Full" { Actions = "MaxFill True True" }
+ Entry = "Horizontal" { Actions = "MaxFill True False" }
+ Entry = "Vertical" { Actions = "MaxFill False True" }
+ }
+ Submenu = "Stacking" {
+ Entry = "Raise" { Actions = "Raise" }
+ Entry = "Lower" { Actions = "Lower" }
+ Entry = "Toggle Always On Top" { Actions = "Toggle AlwaysOnTop" }
+ Entry = "Toggle Always Below" { Actions = "Toggle AlwaysBelow" }
+ }
+ Submenu = "Decorations" {
+ Entry = "Toggle Decorations" { Actions = "Toggle DecorBorder; Toggle DecorTitlebar" }
+ Entry = "Toggle Borders" { Actions = "Toggle DecorBorder" }
+ Entry = "Toggle Titlebar" { Actions = "Toggle DecorTitlebar" }
+ }
+ Submenu = "Skip" {
+ Entry = "Toggle showing this frame in menus" { Actions = "Toggle Skip Menus" }
+ Entry = "Toggle including this frame in focus toggle" { Actions = "Toggle Skip FocusToggle" }
+ Entry = "Toggle if this frame snaps to other windows" { Actions = "Toggle Skip Snap" }
+ }
+ SubMenu = "Send To" {
+ # Create sendto menu once per pekwm config reload. The fast way that
+ # will work for most if not all users.
+ COMMAND = "$_PEKWM_SCRIPT_PATH/pekwm_ws_menu.sh send"
+ # Create sendto menu every time the menu is opened. The slow way.
+ # This is what you want if you are using external tools to make
+ # the amount of workspaces something else than what you define in
+ # ~/.pekwm/config. You will know if you want this.
+ # Entry = "" { Actions = "Dynamic $_PEKWM_SCRIPT_PATH/pekwm_ws_menu.sh send dynamic" }
+ }
+ Separator {}
+ Entry = "Close" { Actions = "Close" }
+ Submenu = "Kill" { Entry = "Kill application" { Actions = "Kill" } }
+}
diff --git a/.pekwm/mouse b/.pekwm/mouse
new file mode 100644
index 0000000..3aa9ae8
--- /dev/null
+++ b/.pekwm/mouse
@@ -0,0 +1,182 @@
+FrameTitle {
+ ButtonRelease = "1" { Actions = "Raise; Focus; ActivateClient" }
+ ButtonRelease = "Mod1 1" { Actions = "Focus; Raise" }
+ ButtonRelease = "Mod4 1" { Actions = "Focus; Raise" }
+ ButtonRelease = "2" { Actions = "ActivateClient" }
+ ButtonRelease = "Mod4 3" { Actions = "Close" }
+ ButtonRelease = "3" { Actions = "ShowMenu Window" }
+ ButtonRelease = "4" { Actions = "ActivateClientRel 1" }
+ ButtonRelease = "5" { Actions = "ActivateClientRel -1" }
+ ButtonRelease = "Mod1 4" { Actions = "SendToWorkspace Next; GotoWorkspace Next" }
+ ButtonRelease = "Mod1 5" { Actions = "SendToWorkspace Prev; GotoWorkspace Prev" }
+ ButtonRelease = "Mod1 Shift 4" { Actions = "SendToWorkspace PrevV; GotoWorkspace PrevV" }
+ ButtonRelease = "Mod1 Shift 5" { Actions = "SendToWorkspace NextV; GotoWorkspace NextV" }
+ ButtonRelease = "Ctrl 4" { Actions = "MoveClientRel 1" }
+ ButtonRelease = "Ctrl 5" { Actions = "MoveClientRel -1" }
+ ButtonRelease = "Ctrl Mod1 1" { Actions = "Focus; Raise True" }
+ DoubleClick = "2" { Actions = "Toggle Shaded" }
+ DoubleClick = "Mod1 2" { Actions = "Toggle Shaded" }
+ DoubleClick = "1" { Actions = "MaxFill True True" }
+ DoubleClick = "Mod1 1" { Actions = "Toggle Maximized True True" }
+ Motion = "1" { Threshold = "4"; Actions = "Raise; Move" }
+ Motion = "Mod1 1" { Threshold = "4"; Actions = "Raise; Move" }
+ Motion = "Mod4 1" { Threshold = "4"; Actions = "Raise; Move" }
+ Motion = "2" { Threshold = "4"; Actions = "GroupingDrag True" }
+ Motion = "Mod1 3" { Actions = "Resize" }
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+}
+
+OtherTitle {
+ ButtonRelease = "1" { Actions = "Raise; Focus" }
+ ButtonRelease = "2" { Actions = "Focus" }
+ ButtonRelease = "3" { Actions = "Close" }
+ ButtonRelease = "Mod4 3" { Actions = "ShowMenu Window" }
+ ButtonRelease = "Mod1 4" { Actions = "SendToWorkspace Next; GotoWorkspace Next" }
+ ButtonRelease = "Mod1 5" { Actions = "SendToWorkspace Prev; GotoWorkspace Prev" }
+ ButtonRelease = "Mod1 Shift 4" { Actions = "SendToWorkspace PrevV; GotoWorkspace PrevV" }
+ ButtonRelease = "Mod1 Shift 5" { Actions = "SendToWorkspace NextV; GotoWorkspace NextV" }
+ Motion = "1" { Threshold = "4"; Actions = "Raise; Move" }
+ Motion = "Mod1 1" { Threshold = "4"; Actions = "Raise; Move" }
+ Motion = "Mod4 1" { Threshold = "4"; Actions = "Raise; Move" }
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+}
+
+Border {
+ TopLeft {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize TopLeft" } }
+ Top {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize Top" } }
+ TopRight {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize TopRight" } }
+ Left {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize Left" } }
+ Right {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize Right" } }
+ BottomLeft {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize BottomLeft" } }
+ Bottom {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize Bottom" } }
+ BottomRight {
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonPress = "1" { Actions = "Focus; Resize BottomRight" } }
+}
+
+ScreenEdge {
+ Down {
+ Enter = "Mod1 Any" { Actions = "GoToWorkspace Down" }
+ ButtonRelease = "3" { Actions = "ShowMenu Root" }
+ ButtonRelease = "2" { Actions = "ShowMenu Goto" }
+ ButtonRelease = "1" { Actions = "GoToWorkspace Down" }
+ ButtonRelease = "Mod4 2" { Actions = "ShowMenu GotoClient" }
+ ButtonRelease = "4" { Actions = "GoToWorkspace Up" }
+ ButtonRelease = "5" { Actions = "GoToWorkspace Down" }
+ ButtonRelease = "Mod1 4" { Actions = "GoToWorkspace PrevV" }
+ ButtonRelease = "Mod1 5" { Actions = "GoToWorkspace NextV" }
+ EnterMoving = "Any Any" { Actions = "WarpToWorkspace Down" }
+ }
+ Up {
+ Enter = "Mod1 Any" { Actions = "GoToWorkspace Up" }
+ ButtonRelease = "3" { Actions = "ShowMenu Root" }
+ ButtonRelease = "2" { Actions = "ShowMenu Goto" }
+ ButtonRelease = "1" { Actions = "GoToWorkspace Up" }
+ ButtonRelease = "Mod4 2" { Actions = "ShowMenu GotoClient" }
+ ButtonRelease = "4" { Actions = "GoToWorkspace Up" }
+ ButtonRelease = "5" { Actions = "GoToWorkspace Down" }
+ ButtonRelease = "Mod1 4" { Actions = "GoToWorkspace PrevV" }
+ ButtonRelease = "Mod1 5" { Actions = "GoToWorkspace NextV" }
+ EnterMoving = "Any Any" { Actions = "WarpToWorkspace Up" }
+ }
+ Left {
+ Enter = "Mod1 Any" { Actions = "GoToWorkspace Left" }
+ ButtonRelease = "3" { Actions = "ShowMenu Root" }
+ ButtonRelease = "1" { Actions = "GoToWorkspace Left" }
+ DoubleClick = "1" { Actions = "GoToWorkspace Left" }
+ ButtonRelease = "2" { Actions = "ShowMenu Goto" }
+ ButtonRelease = "Mod4 2" { Actions = "ShowMenu GotoClient" }
+ ButtonRelease = "4" { Actions = "GoToWorkspace Right" }
+ ButtonRelease = "5" { Actions = "GoToWorkspace Left" }
+ ButtonRelease = "Mod1 4" { Actions = "GoToWorkspace Next" }
+ ButtonRelease = "Mod1 5" { Actions = "GoToWorkspace Prev" }
+ EnterMoving = "Any Any" { Actions = "WarpToWorkspace Left" }
+ }
+ Right {
+ Enter = "Mod1 Any" { Actions = "GoToWorkspace Right" }
+ ButtonRelease = "3" { Actions = "ShowMenu Root" }
+ ButtonRelease = "1" { Actions = "GoToWorkspace Right" }
+ DoubleClick = "1" { Actions = "GoToWorkspace Right" }
+ ButtonRelease = "2" { Actions = "ShowMenu Goto" }
+ ButtonRelease = "Mod4 2" { Actions = "ShowMenu GotoClient" }
+ ButtonRelease = "4" { Actions = "GoToWorkspace Right" }
+ ButtonRelease = "5" { Actions = "GoToWorkspace Left" }
+ ButtonRelease = "Mod1 4" { Actions = "GoToWorkspace Next" }
+ ButtonRelease = "Mod1 5" { Actions = "GoToWorkspace Prev" }
+ EnterMoving = "Any Any" { Actions = "WarpToWorkspace Right" }
+ }
+}
+
+Client {
+ # Remove the following line and uncomment the alternative if windows should raise when clicked.
+ ButtonPress = "1" { Actions = "Focus" }
+ # Uncomment the following line if windows should raise when clicked.
+ # ButtonPress = "1" { Actions = "Focus; Raise" }
+
+ ButtonRelease = "Mod1 1" { Actions = "Focus; Raise" }
+ ButtonRelease = "Mod4 1" { Actions = "Lower" }
+ ButtonRelease = "Mod1 4" { Actions = "SendToWorkspace Next; GotoWorkspace Next" }
+ ButtonRelease = "Mod1 5" { Actions = "SendToWorkspace Prev; GotoWorkspace Prev" }
+ ButtonRelease = "Mod1 Shift 4" { Actions = "SendToWorkspace PrevV; GotoWorkspace PrevV" }
+ ButtonRelease = "Mod1 Shift 5" { Actions = "SendToWorkspace NextV; GotoWorkspace NextV" }
+ ButtonRelease = "Ctrl Mod1 1" { Actions = "Focus; Raise True" }
+ Motion = "Mod1 1" { Threshold = "4"; Actions = "Focus; Raise; Move" }
+ Motion = "Mod4 1" { Threshold = "4"; Actions = "Focus; Raise; Move" }
+ Motion = "Mod1 2" { Threshold = "4"; Actions = "GroupingDrag True" }
+ Motion = "Mod1 3" { Actions = "Resize" }
+ # Remove the following line if you want to use click to focus.
+ Enter = "Any Any" { Actions = "Focus" }
+}
+
+Root {
+ ButtonRelease = "3" { Actions = "ShowMenu Root" }
+ ButtonRelease = "2" { Actions = "ShowMenu Goto" }
+ ButtonRelease = "Mod4 2" { Actions = "ShowMenu GotoClient" }
+ # Horizontal movement
+ ButtonRelease = "4" { Actions = "GoToWorkspace Right" }
+ ButtonRelease = "5" { Actions = "GoToWorkspace Left" }
+ ButtonRelease = "Mod1 4" { Actions = "GoToWorkspace Next" }
+ ButtonRelease = "Mod1 5" { Actions = "GoToWorkspace Prev" }
+ # Vertical movement
+ ButtonRelease = "Shift 4" { Actions = "GoToWorkspace Up" }
+ ButtonRelease = "Shift 5" { Actions = "GoToWorkspace Down" }
+ ButtonRelease = "Mod1 Shift 4" { Actions = "GoToWorkspace NextV" }
+ ButtonRelease = "Mod1 Shift 5" { Actions = "GoToWorkspace PrevV" }
+ ButtonRelease = "1" { Actions = "HideAllMenus" }
+}
+
+Menu {
+ Enter = "Any Any" { Actions = "Focus" }
+ Motion = "Mod1 1" { Threshold = "4"; Actions = "Focus; Raise; Move" }
+}
+
+Other {
+ Enter = "Any Any" { Actions = "Focus" }
+ ButtonRelease = "3" { Actions = "Close" }
+ Motion = "1" { Actions = "Focus; Raise; Move" }
+ Motion = "Mod1 1" { Threshold = "4"; Actions = "Focus; Raise; Move" }
+}
diff --git a/.pekwm/start b/.pekwm/start
new file mode 100644
index 0000000..ba11dda
--- /dev/null
+++ b/.pekwm/start
@@ -0,0 +1,18 @@
+#!/bin/sh
+# PekWM start file
+# This file is a simple shell script; It gets run on pekwm startup, after
+# the theme and all config has loaded if it is set executable
+# (chmod +x start).
+#
+# This is different from ~/.xinitrc because a normal configuration of
+# .xinitrc you'll run all commands, then launch the window manager last.
+#
+# It also gets re-run every time pekwm is restarted.
+#
+# As for it's usefulness, well, it's up to you. I actually set my background
+# from my start file; since it runs after the theme gets loaded, this
+# effectively overrides whatever's in the theme.
+#
+# There's probably a few other good uses for it, too. I mainly pushed for it
+# because when I was doing fluxbox's docs, people used to complain that there
+# wasn't one, and I wanted to avoid that for pekwm. ;) --eyez
diff --git a/.pekwm/vars b/.pekwm/vars
new file mode 100644
index 0000000..cd1027e
--- /dev/null
+++ b/.pekwm/vars
@@ -0,0 +1 @@
+$TERM="xterm -fn fixed +sb -bg white -fg black"
diff --git a/.xmobarrc b/.xmobarrc
index 0e97e94..3f37ad0 100644
--- a/.xmobarrc
+++ b/.xmobarrc
@@ -20,7 +20,7 @@
Config { font = "-*-terminus-*-*-*-*-35-*-*-*-*-*-*-u"
, bgColor = "#000000"
, fgColor = "#00FFFF"
- , position = TopW L 96
+ , position = TopW L 100
, lowerOnStart = True
, commands = [ Run Network "eth0" ["-L","0","-H","32","-l","green","--normal","orange","--high","red"] 40
-- , Run Com "/home/collin/.bin/vol.sh" [] "vol" 15
diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs
index 792536e..598ed9b 100644
--- a/.xmonad/xmonad.hs
+++ b/.xmonad/xmonad.hs
@@ -329,7 +329,7 @@ myLayout = smartBorders . avoidStruts $
toggleLayouts (noBorders Full) $
-- for sublayouts but not currently used..see myGenericBindings above
-- windowNavigation $ subTabbed $ boringWindows $
--- to get tabbed layout add simple
+-- to get tabbed layout add simpleTabbed
rztiled ||| Mirror rztiled ||| Grid
where
-- default tiling algorithm partitions the screen into two panes