diff --git a/.gitignore b/.gitignore
index 034b0e8..48ca6a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
/www-root
+
+# only track org files
+/src/**/*
+!/src/**/*.org
+
theindex.*
diff --git a/src/_inc/prog.org b/src/_inc/prog.org
new file mode 100644
index 0000000..41a6ee0
--- /dev/null
+++ b/src/_inc/prog.org
@@ -0,0 +1,39 @@
+#+TITLE: Program Macros (Include File)
+#+AUTHOR: Mike Gerwitz
+#+EMAIL: mtg@gnu.org
+
+# This file contains general includes for program definitions; it is not
+# intended to produce any output by itself.
+
+#+NAME: prog-header
+#+HEADER: :var license=gplv3-header
+#+HEADER: :var years=(format-time-string "%Y")
+#+HEADER: :var desc="Missing description"
+#+BEGIN_SRC emacs-lisp :exports none
+ (concat (print desc)
+ "\n\nCopyright (C) " years " Mike Gerwitz"
+ "\n\n" license)
+#+END_SRC
+
+* Headers
+These are the licensing headers that I may use throughout my programs
+tangled from this document.
+
+** GNU General Public License Version 3 or Later
+[[https://www.gnu.org/licenses/gpl.html][GPLv3+]] is recommended by both myself and the FSF for most software works:
+
+#+NAME: gplv3-header
+#+BEGIN_EXAMPLE
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+#+END_EXAMPLE
diff --git a/src/x11.org b/src/x11.org
new file mode 100644
index 0000000..218f0ac
--- /dev/null
+++ b/src/x11.org
@@ -0,0 +1,142 @@
+#+TITLE: X11 Configuration
+#+AUTHOR: Mike Gerwitz
+#+EMAIL: mtg@gnu.org
+
+X11 is a version of the [[http://www.x.org/][X Window System]][fn::Yep, they have a one-letter
+domain name.] that is widely used as the graphical environment on many
+Unix-based systems. There are various implementations, but X.org is
+standard on most [[https://wiki.freedesktop.org/www/][free (as in freedom) desktops]].
+
+
+* Session Initialization
+The file =~/.xinitrc= is used by X11 when no other configuration script is
+provided (e.g. when running =startx= from the command line; see
+=xinit(1)=). This is how I usually start my session.
+
+#+HEADER: :shebang "#!/bin/sh"
+#+HEADER: :exports none
+#+BEGIN_SRC sh :tangle .xinitrc :noweb yes :padline no
+ # <<_inc/prog.org:prog-header("Executed when no display manager is used", "2014, 2015")>>
+ ##
+#+END_SRC
+
+But if the session is started by some other means---the common case being a
+[[https://wiki.archlinux.org/index.php/Display_manager][display manager]]---then its own configuration file is used instead. To allow
+users to configure their environment, the script =.xprofile= is executed (if
+it exists) /before/ the window manager is started.
+
+#+BEGIN_SRC sh :tangle .xinitrc
+ test -f ~/.xprofile && source ~/.xprofile
+#+END_SRC
+
+Since the execution of =.xinitrc= implies that no display manager was used,
+ invoke my window manager: XMonad.[fn::Recall that =exec= replaces the
+running process, meaning that the =.xinitrc= script will not linger.]
+
+#+BEGIN_SRC sh :tangle .xinitrc
+ exec xmonad
+#+END_SRC
+
+I share my configuration file between multiple environments, so to avoid
+frustration, I defer all X\nbsp{}configuration to =.xprofile=.
+
+#+HEADER: :shebang "#!/bin/sh"
+#+HEADER: :exports none
+#+BEGIN_SRC sh :tangle .xprofile :noweb yes :padline no
+ # <<_inc/prog.org:prog-header("Executed before window manager", "2014, 2015")>>
+ ##
+#+END_SRC
+
+** Keyboard Layout
+My keyboard layout is largely a vanilla en_US layout with one important
+modification: I map the caps lock key to control (the original left-control
+key remains functional). The control key is very awkward to press and can
+quickly cause pain in the hand and wrist when using programs that make
+aggressive use of it (such as Emacs). The caps lock key is a key that is
+rarely used and in a position that is exceptionally easy to press, so it is
+often remapped.[fn::Some [[http://ergoemacs.org/emacs/swap_CapsLock_Ctrl.html][argue against]] such a remapping. While I see the
+merit of some of the arguments, I have been using Caps Lock as my control
+key for years quite comfortably. Further, since my Control keys still work,
+I will use them when it makes ergonomic sense to do so.]
+
+#+BEGIN_SRC sh :tangle .xprofile
+ setxkbmap -option ctrl:nocaps
+#+END_SRC
+
+I used to do additional keyboard layout customization in the past, but I've
+found that many of my changes were not all that useful. If there are
+additional layout changes, they're performed via =.xmodmap=:
+
+#+BEGIN_SRC sh :tangle .xprofile
+ xmodmap ~/.xmodmap
+#+END_SRC
+
+** Mouse
+The default mouse cursor for X11 is a black "x". Changing it to =arrow=
+yields the conventional arrow cursor.
+
+#+BEGIN_SRC sh :tangle .xprofile
+ xsetroot -cursor_name arrow
+#+END_SRC
+
+Mouse speed is controlled by two parameters: acceleration and
+threshold. Once the mouse movement reaches the provided threshold within
+10ms, its movement is multiplied by the given acceleration---this allows the
+use to make precision movements when the mouse is moved slowly, while still
+being able to rapidly move the cursor from one point to another.
+
+I don't have much rationale for my chosen values; they just work well for
+me. I use the mouse primarily for web browsing, but otherwise my work is
+almost entirely in a terminal.
+
+#+BEGIN_SRC sh :tangle .xprofile
+ xset mouse 5/0.1
+#+END_SRC
+
+** Root
+The X root window is the background window that you see underneath all
+other windows. Most people refer to this as the "desktop", but without
+software to actually produce a desktop, the root is non-interactive. I have
+no desktop.[fn::For example, GNOME has Nautilus as both its desktop and
+file manager.]
+
+The default root renders a 1x1px-checkered background, which is useful for
+showing that X is actually running, but not very appealing. Since I use a
+tiling window manager (XMonad), I never see my root unless I switch to a
+workspace with no windows, so I just set it to black.
+
+#+BEGIN_SRC sh :tangle .xprofile
+ xsetroot -bg black
+#+END_SRC
+
+** Resources
+
+=.Xresources= is the file traditionally used to provide key-value pairs for
+configuring X11 programs (such as fonts, colors, menus, and other
+features). I prefer a more modular approach: I instead have an
+=.Xresources.d= directory, which contains resource files that will be
+merged; this will take precedence over any =.Xresources= file if there are
+key conflicts.
+
+#+BEGIN_SRC sh :tangle .xprofile
+ xrd="$HOME/.Xresources.d"
+ test -f ~/.Xresources && xrdb -merge ~/.Xresources
+ test -d "$xrd" && {
+ for xr in "$xrd"/*; do
+ xrdb -merge "$xr"
+ done
+ }
+#+END_SRC
+
+** Screensaver
+I use =xscreensaver= with my own daemon script that watches for status
+changes to perform certain actions. Since I share this configuration on
+multiple systems, I permit an opt-out by touching =.noscreensaver=.
+
+#+BEGIN_SRC sh :tangle .xprofile
+ # screensaver can be disabled by creating ~/.noscreensaver (not managed)
+ test -f ~/.noscreensaver || {
+ xscreensaver &
+ xscreensaver-watchd 2>~/.xscreensaver-watch.log &
+ }
+#+END_SRC
diff --git a/xinitrc b/xinitrc
deleted file mode 100644
index 5fe6e54..0000000
--- a/xinitrc
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-# Executed when X session begins
-#
-# Copyright (C) 2014 Mike Gerwitz
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-##
-
-setxkbmap -option ctrl:nocaps
-xmodmap ~/.xmodmap
-xset mouse 5/0.1
-xsetroot -cursor_name arrow
-
-# .Xresources will be included by convention, but .Xresources.d should be used
-# instead; the latter will override the former
-xrd="$HOME/.Xresources.d"
-test -f ~/.Xresources && xrdb -merge ~/.Xresources
-test -d "$xrd" && {
- for xr in "$xrd"/*; do
- xrdb -merge "$xr"
- done
-}
-
-# .xprofile is *not* managed by software (such as Puppet) and may therefore
-# be used for system-specific configuration
-test -f ~/.xprofile && source ~/.xprofile
-
-# screensaver can be disabled by creating ~/.noscreensaver (not managed)
-test -f ~/.noscreensaver || {
- xscreensaver &
- xscreensaver-watchd 2>~/.xscreensaver-watch.log &
-}
-
-exec xmonad