Recent changes to this wiki:

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_4a88a65fc9f1b607323779e18ede544d._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_4a88a65fc9f1b607323779e18ede544d._comment
new file mode 100644
index 0000000..a7d6fad
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_4a88a65fc9f1b607323779e18ede544d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 9"
+ date="2014-11-22T09:23:22Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+Strange, I've got a similar setup (without inhibition, though) working flawlessly as a per-user unit. Arch, systemd 217, all defaults (no special configuration of privileges took place).
+"""]]

removed
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
deleted file mode 100644
index 0b9a31f..0000000
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
- nickname="Ivan"
- subject="comment 11"
- date="2014-11-22T09:21:02Z"
- content="""
-> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
-Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
-"""]]

removed
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
deleted file mode 100644
index 9b37235..0000000
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
- nickname="Ivan"
- subject="comment 9"
- date="2014-11-22T09:18:05Z"
- content="""
-> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
-Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
-"""]]

removed
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
deleted file mode 100644
index 75f74c1..0000000
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
- nickname="Ivan"
- subject="comment 10"
- date="2014-11-22T09:19:58Z"
- content="""
-> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
-
-Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
-"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
new file mode 100644
index 0000000..0b9a31f
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 11"
+ date="2014-11-22T09:21:02Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
+"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
new file mode 100644
index 0000000..75f74c1
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 10"
+ date="2014-11-22T09:19:58Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
+"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
new file mode 100644
index 0000000..9b37235
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 9"
+ date="2014-11-22T09:18:05Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
+"""]]

fix
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 9ecf73a..f3ea580 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -82,8 +82,8 @@ example :: Host
 example = host "mylaptop"
 	& Chroot.provisioned (buildDepChroot "git-annex")
 
-buildDepChroot :: Apt.Package -> System -> Chroot.Chroot
-buildDepChroot pkg system = Chroot.debootstrapped system Debootstrap.buildd dir
+buildDepChroot :: Apt.Package -> Chroot.Chroot
+buildDepChroot pkg = Chroot.debootstrapped system Debootstrap.buildd dir
 	& Apt.buildDep pkg
   where
 	dir = /srv/chroot/builddep/"++pkg

typoski
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 7c98cde..9ecf73a 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -125,7 +125,7 @@ between these systems.
 
 ## PS
 
-Seems like that systemd-nspawn containers can be nested to any depth.
+Seems likely that systemd-nspawn containers can be nested to any depth.
 So, here's a new kind of fork bomb!
 
 [[!format haskell """

simplify
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 75753a6..7c98cde 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -123,15 +123,6 @@ that Propellor can add support for a new container system in a few hundred
 lines of code, and that it abstracts away all the unimportant differences
 between these systems.
 
-Oh BTW, all of these different sorts of containers can easily be removed
-from a host, by reverting their properties:
-
-[[!format haskell """
-	! Docker.docked webserverContainer
-	! Systemd.nspawned webserverContainer
-	! Chroot.provisioned (buildDepChroot "git-annex")
-"""]]
-
 ## PS
 
 Seems like that systemd-nspawn containers can be nested to any depth.

format
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 3e80963..75753a6 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -137,10 +137,12 @@ from a host, by reverting their properties:
 Seems like that systemd-nspawn containers can be nested to any depth.
 So, here's a new kind of fork bomb!
 
+[[!format haskell """
 infinitelyNestedContainer :: Systemd.Container
 infinitelyNestedContainer = Systemd.container "evil-systemd"
 	(Chroot.debootstrapped (System (Debian Unstable) "amd64") Debootstrap.MinBase)
 	& Systemd.nspawned infinitelyNestedContainer
+"""]]
 
 Strongly typed purely functional container deployment can only protect us
 against a certian subset of all badly thought out systems. ;)

blog update
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
new file mode 100644
index 0000000..3e80963
--- /dev/null
+++ b/blog/entry/propelling_containers.mdwn
@@ -0,0 +1,148 @@
+[[!tag propellor]]
+
+Propellor has supported docker containers for a "long" time, and it works
+great. This week I've worked on adding more container support.
+
+## docker containers (revisited)
+
+The syntax for docker containers has changed slightly. Here's how it looks
+now:
+
+[[!format haskell """
+example :: Host
+example = host "example.com"
+	& Docker.docked webserverContainer
+
+webserverContainer :: Docker.Container
+webserverContainer = Docker.container "webserver" "joeyh/debian-stable"
+	& os (System (Debian (Stable "wheezy")) "amd64")
+	& Docker.publish "80:80"
+	& Apt.serviceInstalledRunning "apache2"
+	& alias "www.example.com"
+"""]]
+
+That makes example.com have a web server in a docker container, as you'd
+expect, and when propellor is used to deploy the DNS server it'll
+automatically make www.example.com point to the host (or hosts!) where
+this container is docked.
+
+I use docker a lot, but I have drank little of the Docker KoolAid.
+I'm not keen on using random blobs created by random third parties
+using either unreproducible methods, or the weirdly underpowered dockerfiles.
+(As for vast complicated collections of containers that each run one
+program and talk to one another etc ... I'll wait and see.)
+
+That's why propellor runs inside the docker container and deploys whatever
+configuration I tell it to, in a way that's both replicatable later
+and lets me use the full power of Haskell.
+
+Which turns out to be useful when moving on from docker containers to
+something else...
+
+## systemd-nspawn containers
+
+Propellor now supports containers using systemd-nspawn. It looks a lot
+like the docker example.
+
+[[!format haskell """
+example :: Host
+example = host "example.com"
+	& Systemd.persistentJournal
+	& Systemd.nspawned webserverContainer
+
+webserverContainer :: Systemd.Container
+webserverContainer = Systemd.container "webserver" chroot
+	& Apt.serviceInstalledRunning "apache2"
+	& alias "www.example.com"
+  where
+	chroot = Chroot.debootstrapped (System (Debian Unstable) "amd64") Debootstrap.MinBase
+"""]]
+
+Notice how I specified the Debian Unstable chroot that forms the basis of
+this container. Propellor sets up the container by running debootstrap,
+boots it up using systemd-nspawn, and then runs inside the container
+to provision it.
+
+Unlike docker containers, systemd-nspawn containers use systemd as their
+init, and it all integrates rather beautifully. You can see the container
+listed in `systemctl status`, including the services running inside it,
+use `journalctl` to examine its logs, etc.
+
+But no, systemd is the devil, and docker is too trendy...
+
+## chroots
+
+Propellor now also supports deploying good old chroots. It looks a lot
+like the other containers. Rather than repeat myself a third time,
+and because we don't really run webservers inside chroots much,
+here's a slightly different example.
+
+[[!format haskell """
+example :: Host
+example = host "mylaptop"
+	& Chroot.provisioned (buildDepChroot "git-annex")
+
+buildDepChroot :: Apt.Package -> System -> Chroot.Chroot
+buildDepChroot pkg system = Chroot.debootstrapped system Debootstrap.buildd dir
+	& Apt.buildDep pkg
+  where
+	dir = /srv/chroot/builddep/"++pkg
+	system = System (Debian Unstable) "amd64"
+"""]]
+
+Again this uses debootstrap to build the chroot, and then it runs
+propellor inside the chroot to provision it
+(btw without bothering to install propellor there,
+thanks to the magic of bind mounts and
+[[completely_linux_distribution-independent_packaging]]).
+
+In fact, the systemd-nspawn container code reuses the chroot code,
+and so turns out to be really rather simple. 132 lines for the chroot
+support, and 167 lines for the systemd support (which goes somewhat beyond
+the nspawn containers shown above).
+
+Which leads to the hardest part of all this...
+
+## debootstrap
+
+Making a propellor property for debootstrap should be easy. And it was,
+for Debian systems. However, I have crazy plans that involve running
+propellor on non-Debian systems, to debootstrap something, and installing
+debootstrap on an arbitrary linux system is ... too hard.
+
+In the end, I needed 253 lines of code to do it, which is barely
+one magnitude less code than the size of debootstrap itself.
+I won't go into the ugly details, but this could be made a lot easier
+if debootstrap catered more to being used outside of Debian.
+
+## closing
+
+Docker and systemd-nspawn have different strengths and weaknesses,
+and there are sure to be more container systems to come. I'm pleased
+that Propellor can add support for a new container system in a few hundred
+lines of code, and that it abstracts away all the unimportant differences
+between these systems.
+
+Oh BTW, all of these different sorts of containers can easily be removed
+from a host, by reverting their properties:
+
+[[!format haskell """
+	! Docker.docked webserverContainer
+	! Systemd.nspawned webserverContainer
+	! Chroot.provisioned (buildDepChroot "git-annex")
+"""]]
+
+## PS
+
+Seems like that systemd-nspawn containers can be nested to any depth.
+So, here's a new kind of fork bomb!
+
+infinitelyNestedContainer :: Systemd.Container
+infinitelyNestedContainer = Systemd.container "evil-systemd"
+	(Chroot.debootstrapped (System (Debian Unstable) "amd64") Debootstrap.MinBase)
+	& Systemd.nspawned infinitelyNestedContainer
+
+Strongly typed purely functional container deployment can only protect us
+against a certian subset of all badly thought out systems. ;)
+
+[[!meta title="propelling containers"]]

Added a comment: Sorry to hear you're leaving
diff --git a/blog/entry/on_leaving/comment_5_35688f9e1e7b417eee340e8c783d938c._comment b/blog/entry/on_leaving/comment_5_35688f9e1e7b417eee340e8c783d938c._comment
new file mode 100644
index 0000000..3ffd7ba
--- /dev/null
+++ b/blog/entry/on_leaving/comment_5_35688f9e1e7b417eee340e8c783d938c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://deirdresm.wordpress.com/"
+ nickname="deirdresm"
+ subject="Sorry to hear you're leaving"
+ date="2014-11-21T17:14:17Z"
+ content="""
+...but it sounds like you picked a good time.
+
+I remember the BAD meetings of yore, and miss your company at them (and other gatherings).
+
+Hope all is well with you, and best of luck in your future ventures.
+"""]]

more
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
index 9e9f090..90b51e9 100644
--- a/blog/entry/propellor_is_d-i_2.0.mdwn
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -65,3 +65,4 @@ Well, now I know where propellor might end up if I felt like spending a month
 and adding a few thousand lines of code to it.
 
 [[!meta title="propellor is d-i 2.0"]]
+[[!tag propellor]]
diff --git a/code/propellor.mdwn b/code/propellor.mdwn
index 4e8fd36..7b08f4a 100644
--- a/code/propellor.mdwn
+++ b/code/propellor.mdwn
@@ -1,4 +1,4 @@
 property-based host configuration management in haskell
 
 * [propellor's website](https://propellor.branchable.com/)
-* [[Read my blog post about it|/blog/entry/propellor]]
+* [[Read my blog posts about it|/blog/propellor]]

move blog post that conflicted with tag
diff --git a/blog/entry/introducing_propellor.mdwn b/blog/entry/introducing_propellor.mdwn
new file mode 100644
index 0000000..c05b524
--- /dev/null
+++ b/blog/entry/introducing_propellor.mdwn
@@ -0,0 +1,98 @@
+Whups, I seem to have built a configuration management system this evening!
+
+Propellor has similar goals to chef or puppet or ansible, but with an approach
+much more like [slaughter](http://www.steve.org.uk/Software/slaughter/).
+Except it's configured by writing Haskell code.
+
+The name is because propellor ensures that a system is configured with the
+desired PROPerties, and also because it kind of pulls system configuration
+along after it. And you may not want to stand too close.
+
+Disclaimer: I'm not really a sysadmin, except for on the scale of "diffuse
+administration of every Debian machine on planet earth or nearby", and so I
+don't really understand configuration management. (Well, I did write
+debconf, which claims to be the "Debian Configuration Management system"..
+But I didn't understand configuration management back then either.)
+
+So, propellor makes some perhaps wacky choices. The least of these
+is that it's built from [a git repository](http://git.kitenet.net/?p=propellor.git;a=summary)
+that any (theoretical) other users will fork and modify; a cron job can
+re-make it from time to time and pull down configuration changes, or
+*something* can be run to push changes.
+
+A really simple configuration for a Tor bridge server 
+using propellor looks something like this:
+
+[[!format haskell """
+main = ensureProperties
+	[ Apt.stdSourcesList Apt.Stable `onChange` Apt.upgrade
+	, Apt.removed ["exim4"] `onChange` Apt.autoRemove
+	, Hostname.set "bridget"
+	, Ssh.uniqueHostKeys
+	, Tor.isBridge
+	]
+"""]]
+
+Since it's just haskell code, it's "easy" to refactor out common
+configurations for classes of servers, etc. Or perhaps integrate
+[reclass](,http://reclass.pantsfullofunix.net/)? I don't know. I'm happy
+with just pure functions and type-safe refactorings of my configs, I
+think.
+
+Properties are also written in Haskell of course. This one ensures that
+all the packages in a list are installed.
+
+[[!format haskell """
+installed :: [Package] -> Property
+installed ps = check (isInstallable ps) go
+  where
+        go = runApt $ [Param "-y", Param "install"] ++ map Param ps
+"""]]
+
+Here's one that ensures the hostname is set to the desired value,
+which shows how to specify content for a file, and also how to run
+another action if a change needed to be made to satisfy a property.
+
+[[!format haskell """
+set :: HostName -> Property
+set hostname = "/etc/hostname" `File.hasContent` [hostname]
+        `onChange` cmdProperty "hostname" [Param hostname]
+"""]]
+
+Here's part of a custom one that I use to check out a user's
+home directory from git. Shows how to make a property require
+that some other property is satisfied first, and how to test
+if a property has already been satisfied.
+
+[[!format haskell """
+installedFor :: UserName -> Property
+installedFor user = check (not <$> hasGitDir user) $
+        Property ("githome " ++ user) (go =<< homedir user)
+	                `requires` Apt.installed ["git", "myrepos"]
+  where
+	go ... -- 12 lines elided
+"""]]
+
+I'm about 37% happy with the overall approach to listing properties
+and combining properties into larger properties etc. I think that some
+unifying insight is missing -- perhaps there should be a Property monad?
+But as long as it yields a list of properties, any smarter thing should
+be able to be built on top of this.
+
+Propellor is 564 lines of code, including 25 or so built-in properties like
+the examples above. It took around 4 hours to build. 
+
+I'm pretty sure it was easier to write it than it would have been to look
+into ansible and salt and slaughter (and also liw's human-readable configuration
+language whose name I've forgotten) in enough detail to pick one, and learn
+how its configuration worked, and warp it into something close to how I
+wanted this to work.
+
+I think that's interesting.. It's partly about NIH and
+I-want-everything-in-Haskell, but it's also about a complicated system
+that is a lot of things to a lot of people -- 
+of the kind I see when I look at ansible -- vs the tools and experience
+to build just the thing you want without the cruft. Nice to have the latter!
+
+[[!tag propellor]]
+[[!meta date="Sun Mar 30 03:50:42 2014 -0400"]]
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
deleted file mode 100644
index e4bf65c..0000000
--- a/blog/entry/propellor.mdwn
+++ /dev/null
@@ -1,97 +0,0 @@
-Whups, I seem to have built a configuration management system this evening!
-
-Propellor has similar goals to chef or puppet or ansible, but with an approach
-much more like [slaughter](http://www.steve.org.uk/Software/slaughter/).
-Except it's configured by writing Haskell code.
-
-The name is because propellor ensures that a system is configured with the
-desired PROPerties, and also because it kind of pulls system configuration
-along after it. And you may not want to stand too close.
-
-Disclaimer: I'm not really a sysadmin, except for on the scale of "diffuse
-administration of every Debian machine on planet earth or nearby", and so I
-don't really understand configuration management. (Well, I did write
-debconf, which claims to be the "Debian Configuration Management system"..
-But I didn't understand configuration management back then either.)
-
-So, propellor makes some perhaps wacky choices. The least of these
-is that it's built from [a git repository](http://git.kitenet.net/?p=propellor.git;a=summary)
-that any (theoretical) other users will fork and modify; a cron job can
-re-make it from time to time and pull down configuration changes, or
-*something* can be run to push changes.
-
-A really simple configuration for a Tor bridge server 
-using propellor looks something like this:
-
-[[!format haskell """
-main = ensureProperties
-	[ Apt.stdSourcesList Apt.Stable `onChange` Apt.upgrade
-	, Apt.removed ["exim4"] `onChange` Apt.autoRemove
-	, Hostname.set "bridget"
-	, Ssh.uniqueHostKeys
-	, Tor.isBridge
-	]
-"""]]
-
-Since it's just haskell code, it's "easy" to refactor out common
-configurations for classes of servers, etc. Or perhaps integrate
-[reclass](,http://reclass.pantsfullofunix.net/)? I don't know. I'm happy
-with just pure functions and type-safe refactorings of my configs, I
-think.
-
-Properties are also written in Haskell of course. This one ensures that
-all the packages in a list are installed.
-
-[[!format haskell """
-installed :: [Package] -> Property
-installed ps = check (isInstallable ps) go
-  where
-        go = runApt $ [Param "-y", Param "install"] ++ map Param ps
-"""]]
-
-Here's one that ensures the hostname is set to the desired value,
-which shows how to specify content for a file, and also how to run
-another action if a change needed to be made to satisfy a property.
-
-[[!format haskell """
-set :: HostName -> Property
-set hostname = "/etc/hostname" `File.hasContent` [hostname]
-        `onChange` cmdProperty "hostname" [Param hostname]
-"""]]
-
-Here's part of a custom one that I use to check out a user's
-home directory from git. Shows how to make a property require
-that some other property is satisfied first, and how to test
-if a property has already been satisfied.
-
-[[!format haskell """
-installedFor :: UserName -> Property
-installedFor user = check (not <$> hasGitDir user) $
-        Property ("githome " ++ user) (go =<< homedir user)
-	                `requires` Apt.installed ["git", "myrepos"]
-  where
-	go ... -- 12 lines elided
-"""]]
-
-I'm about 37% happy with the overall approach to listing properties
-and combining properties into larger properties etc. I think that some
-unifying insight is missing -- perhaps there should be a Property monad?
-But as long as it yields a list of properties, any smarter thing should
-be able to be built on top of this.
-
-Propellor is 564 lines of code, including 25 or so built-in properties like
-the examples above. It took around 4 hours to build. 
-
-I'm pretty sure it was easier to write it than it would have been to look
-into ansible and salt and slaughter (and also liw's human-readable configuration
-language whose name I've forgotten) in enough detail to pick one, and learn
-how its configuration worked, and warp it into something close to how I
-wanted this to work.
-

(Diff truncated)
one more
diff --git a/blog/entry/how_I_wrote_init_by_accident.mdwn b/blog/entry/how_I_wrote_init_by_accident.mdwn
index ea76d3b..1edb65e 100644
--- a/blog/entry/how_I_wrote_init_by_accident.mdwn
+++ b/blog/entry/how_I_wrote_init_by_accident.mdwn
@@ -53,3 +53,4 @@ If that does happen, perhaps I'll eventually be able to remove 2 lines of code
 from propellor.
 
 [[!meta title="how I wrote init by accident"]]
+[[!tag propellor]]

tag propellor posts
diff --git a/blog/entry/adding_docker_support_to_propellor.mdwn b/blog/entry/adding_docker_support_to_propellor.mdwn
index 5c353a8..492bf30 100644
--- a/blog/entry/adding_docker_support_to_propellor.mdwn
+++ b/blog/entry/adding_docker_support_to_propellor.mdwn
@@ -69,3 +69,4 @@ a large reason for that is, I think, that its configuration file is just
 not expressive enough.
 
 [[!meta title="adding docker support to propellor"]]
+[[!tag propellor]]
diff --git a/blog/entry/propellor-driven_DNS_and_backups.mdwn b/blog/entry/propellor-driven_DNS_and_backups.mdwn
index a1e0184..954539a 100644
--- a/blog/entry/propellor-driven_DNS_and_backups.mdwn
+++ b/blog/entry/propellor-driven_DNS_and_backups.mdwn
@@ -102,3 +102,4 @@ By the way, Propellor is now up to 3 thousand lines of code
 (not including Utility library). In 20 days, as a 10% time side project.
 
 [[!meta title="propellor-driven DNS and backups"]]
+[[!tag propellor]]
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index 159dd2d..e4bf65c 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -93,3 +93,5 @@ I-want-everything-in-Haskell, but it's also about a complicated system
 that is a lot of things to a lot of people -- 
 of the kind I see when I look at ansible -- vs the tools and experience
 to build just the thing you want without the cruft. Nice to have the latter!
+
+[[!tag propellor]]
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index a6077a6..9bc8d0b 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -93,3 +93,4 @@ main = do
 """]]
 
 [[!meta title="propellor introspection for DNS"]]
+[[!tag propellor]]
diff --git a/blog/entry/propellor_type-safe_reversions.mdwn b/blog/entry/propellor_type-safe_reversions.mdwn
index 3fdaa15..62993c8 100644
--- a/blog/entry/propellor_type-safe_reversions.mdwn
+++ b/blog/entry/propellor_type-safe_reversions.mdwn
@@ -43,3 +43,4 @@ revertable, and others not:
 """]]
 
 [[!meta title="propellor type-safe reversions"]]
+[[!tag propellor]]
diff --git a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
index c5b739e..1e4ed59 100644
--- a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
+++ b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
@@ -76,3 +76,4 @@ somewhere in /usr, and check them into a new empty repository as part of the
 generation of the upstream/master branch.
 
 [[!meta title="using a debian package as the remote for a local config repo"]]
+[[!tag propellor]]
diff --git a/blog/propellor.mdwn b/blog/propellor.mdwn
new file mode 100644
index 0000000..a719ba4
--- /dev/null
+++ b/blog/propellor.mdwn
@@ -0,0 +1 @@
+[[!inline pages="blog/entry/* and link(propellor) and !*/Discussion" actions=yes show="10"]]

reorg
diff --git a/code/debian/ctte-nomination-reply.txt b/code/debian/ctte-nomination-reply.txt
new file mode 100644
index 0000000..e443ce8
--- /dev/null
+++ b/code/debian/ctte-nomination-reply.txt
@@ -0,0 +1,90 @@
+From joey Mon Dec 19 18:39:28 2005
+Date: Mon, 19 Dec 2005 18:39:28 -0500
+X-OfflineIMAP-1326022817-6b697465-494e424f582e53656e74: 1135037001-0644317843492-v4.0.11
+From: Joey Hess <joeyh@debian.org>
+To: Manoj Srivastava <srivasta@debian.org>
+Cc: Branden Robinson / Debian Project Leader <leader@debian.org>,
+	debian-ctte-private@lists.debian.org
+Subject: Re: [Branden Robinson / Debian Project Leader] solicitation for interest in joining Technical Committee
+Message-ID: <20051219233928.GA32095@kitenet.net>
+References: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="ReaqsoxgOBHFXBhH"
+Content-Disposition: inline
+In-Reply-To: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+User-Agent: Mutt/1.5.11
+Status: RO
+Content-Length: 2875
+Lines: 69
+
+
+--ReaqsoxgOBHFXBhH
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+Content-Transfer-Encoding: quoted-printable
+
+Both I and my ego thank you for considering me (again) for the technical
+committee.
+
+Upon reviewing the recent decisions of the technical committee, I was
+struck by the slim influence that the committee's decisions seem to have
+on the project. Of the decisions listed on the web page:
+
+1. After the committee went to great lengths to avoid cardinfo needing
+   to be split out of pcmcia-cs, it was removed from the package this
+   year with the comment from the (new) maintainer that:
+
+     * Removed the graphical cardinfo utility. I don't think anybody uses it
+       and it should be in a separate package anyway.
+
+2. After overruling the kernel maintainer on whether versafb should be
+   compiled into the kernel, he (I think) ignored the committee, added
+   lots of patches to make it a module, and closed the bugs. Now 4 years
+   later the new kernel maintainers are planning to ditch those patches
+   due to the maintenance load, and build it into the kernel, which will
+   finally comply with the committee's decision, although I don't know
+   that the committee's ruling influenced their decision at all.
+
+3. The maintainer of md5sum ignored for 1.5 years the committee's decision
+   on its output. When someone finally noticed that change was not made,
+   he stated that:
+
+      I'm frankly going to ignore this unless the tech ctte revisits it.
+      AFAICT this was dealt with in the tech ctte because it was a pet peeve
+      of ian jackson. I find it vaguely disturbing that there was an entire
+      thread about changing the behavior of a program in coreutils that *was
+      never mentioned to the coreutils maintainer*.=20
+
+4. amd64 is indeed being used as the name of that port, although it is
+   still not an official Debian port. Newer architectures (such as armeb)
+   seem to be getting their names decided without recourse the the
+   technical committee.
+
+So with one success out of four, there seems to be a problem with either
+the follow-through on decisions of the committee, or not enough weight
+is being given to those decisions, or perhaps the issues that come to
+the committee are not actually very important compared to others in
+Debian.
+
+My time to work on Debian is not unlimited and this does not seem to be
+the most productive place I could spend it, so I must once again decline
+the offer to serve on the technical committee.
+
+--=20
+see shy jo
+
+--ReaqsoxgOBHFXBhH
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.2 (GNU/Linux)
+
+iD8DBQFDp0Swd8HHehbQuO8RAtuxAKCWoB5Rc4ltfWb3krsoysqzHHUk0QCg6IUb
+bM79Q6jtwAvLe7VEAGCiHRY=
+=SJ3L
+-----END PGP SIGNATURE-----
+
+--ReaqsoxgOBHFXBhH--
diff --git a/ctte-nomination-reply.txt b/ctte-nomination-reply.txt
deleted file mode 100644
index e443ce8..0000000
--- a/ctte-nomination-reply.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-From joey Mon Dec 19 18:39:28 2005
-Date: Mon, 19 Dec 2005 18:39:28 -0500
-X-OfflineIMAP-1326022817-6b697465-494e424f582e53656e74: 1135037001-0644317843492-v4.0.11
-From: Joey Hess <joeyh@debian.org>
-To: Manoj Srivastava <srivasta@debian.org>
-Cc: Branden Robinson / Debian Project Leader <leader@debian.org>,
-	debian-ctte-private@lists.debian.org
-Subject: Re: [Branden Robinson / Debian Project Leader] solicitation for interest in joining Technical Committee
-Message-ID: <20051219233928.GA32095@kitenet.net>
-References: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
-MIME-Version: 1.0
-Content-Type: multipart/signed; micalg=pgp-sha1;
-	protocol="application/pgp-signature"; boundary="ReaqsoxgOBHFXBhH"
-Content-Disposition: inline
-In-Reply-To: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
-User-Agent: Mutt/1.5.11
-Status: RO
-Content-Length: 2875
-Lines: 69
-
-
---ReaqsoxgOBHFXBhH
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-Content-Transfer-Encoding: quoted-printable
-
-Both I and my ego thank you for considering me (again) for the technical
-committee.
-
-Upon reviewing the recent decisions of the technical committee, I was
-struck by the slim influence that the committee's decisions seem to have
-on the project. Of the decisions listed on the web page:
-
-1. After the committee went to great lengths to avoid cardinfo needing
-   to be split out of pcmcia-cs, it was removed from the package this
-   year with the comment from the (new) maintainer that:
-
-     * Removed the graphical cardinfo utility. I don't think anybody uses it
-       and it should be in a separate package anyway.
-
-2. After overruling the kernel maintainer on whether versafb should be
-   compiled into the kernel, he (I think) ignored the committee, added
-   lots of patches to make it a module, and closed the bugs. Now 4 years
-   later the new kernel maintainers are planning to ditch those patches
-   due to the maintenance load, and build it into the kernel, which will
-   finally comply with the committee's decision, although I don't know
-   that the committee's ruling influenced their decision at all.
-
-3. The maintainer of md5sum ignored for 1.5 years the committee's decision
-   on its output. When someone finally noticed that change was not made,
-   he stated that:
-
-      I'm frankly going to ignore this unless the tech ctte revisits it.
-      AFAICT this was dealt with in the tech ctte because it was a pet peeve
-      of ian jackson. I find it vaguely disturbing that there was an entire
-      thread about changing the behavior of a program in coreutils that *was
-      never mentioned to the coreutils maintainer*.=20
-
-4. amd64 is indeed being used as the name of that port, although it is
-   still not an official Debian port. Newer architectures (such as armeb)
-   seem to be getting their names decided without recourse the the
-   technical committee.
-
-So with one success out of four, there seems to be a problem with either
-the follow-through on decisions of the committee, or not enough weight
-is being given to those decisions, or perhaps the issues that come to
-the committee are not actually very important compared to others in
-Debian.
-
-My time to work on Debian is not unlimited and this does not seem to be
-the most productive place I could spend it, so I must once again decline
-the offer to serve on the technical committee.
-
---=20
-see shy jo
-
---ReaqsoxgOBHFXBhH
-Content-Type: application/pgp-signature; name="signature.asc"
-Content-Description: Digital signature
-Content-Disposition: inline
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.2 (GNU/Linux)
-
-iD8DBQFDp0Swd8HHehbQuO8RAtuxAKCWoB5Rc4ltfWb3krsoysqzHHUk0QCg6IUb
-bM79Q6jtwAvLe7VEAGCiHRY=
-=SJ3L
------END PGP SIGNATURE-----
-
---ReaqsoxgOBHFXBhH--

foo
diff --git a/ctte-nomination-reply.txt b/ctte-nomination-reply.txt
new file mode 100644
index 0000000..e443ce8
--- /dev/null
+++ b/ctte-nomination-reply.txt
@@ -0,0 +1,90 @@
+From joey Mon Dec 19 18:39:28 2005
+Date: Mon, 19 Dec 2005 18:39:28 -0500
+X-OfflineIMAP-1326022817-6b697465-494e424f582e53656e74: 1135037001-0644317843492-v4.0.11
+From: Joey Hess <joeyh@debian.org>
+To: Manoj Srivastava <srivasta@debian.org>
+Cc: Branden Robinson / Debian Project Leader <leader@debian.org>,
+	debian-ctte-private@lists.debian.org
+Subject: Re: [Branden Robinson / Debian Project Leader] solicitation for interest in joining Technical Committee
+Message-ID: <20051219233928.GA32095@kitenet.net>
+References: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="ReaqsoxgOBHFXBhH"
+Content-Disposition: inline
+In-Reply-To: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+User-Agent: Mutt/1.5.11
+Status: RO
+Content-Length: 2875
+Lines: 69
+
+
+--ReaqsoxgOBHFXBhH
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+Content-Transfer-Encoding: quoted-printable
+
+Both I and my ego thank you for considering me (again) for the technical
+committee.
+
+Upon reviewing the recent decisions of the technical committee, I was
+struck by the slim influence that the committee's decisions seem to have
+on the project. Of the decisions listed on the web page:
+
+1. After the committee went to great lengths to avoid cardinfo needing
+   to be split out of pcmcia-cs, it was removed from the package this
+   year with the comment from the (new) maintainer that:
+
+     * Removed the graphical cardinfo utility. I don't think anybody uses it
+       and it should be in a separate package anyway.
+
+2. After overruling the kernel maintainer on whether versafb should be
+   compiled into the kernel, he (I think) ignored the committee, added
+   lots of patches to make it a module, and closed the bugs. Now 4 years
+   later the new kernel maintainers are planning to ditch those patches
+   due to the maintenance load, and build it into the kernel, which will
+   finally comply with the committee's decision, although I don't know
+   that the committee's ruling influenced their decision at all.
+
+3. The maintainer of md5sum ignored for 1.5 years the committee's decision
+   on its output. When someone finally noticed that change was not made,
+   he stated that:
+
+      I'm frankly going to ignore this unless the tech ctte revisits it.
+      AFAICT this was dealt with in the tech ctte because it was a pet peeve
+      of ian jackson. I find it vaguely disturbing that there was an entire
+      thread about changing the behavior of a program in coreutils that *was
+      never mentioned to the coreutils maintainer*.=20
+
+4. amd64 is indeed being used as the name of that port, although it is
+   still not an official Debian port. Newer architectures (such as armeb)
+   seem to be getting their names decided without recourse the the
+   technical committee.
+
+So with one success out of four, there seems to be a problem with either
+the follow-through on decisions of the committee, or not enough weight
+is being given to those decisions, or perhaps the issues that come to
+the committee are not actually very important compared to others in
+Debian.
+
+My time to work on Debian is not unlimited and this does not seem to be
+the most productive place I could spend it, so I must once again decline
+the offer to serve on the technical committee.
+
+--=20
+see shy jo
+
+--ReaqsoxgOBHFXBhH
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.2 (GNU/Linux)
+
+iD8DBQFDp0Swd8HHehbQuO8RAtuxAKCWoB5Rc4ltfWb3krsoysqzHHUk0QCg6IUb
+bM79Q6jtwAvLe7VEAGCiHRY=
+=SJ3L
+-----END PGP SIGNATURE-----
+
+--ReaqsoxgOBHFXBhH--

update
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
index 18b871b..38fdcbb 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
@@ -10,5 +10,7 @@ the math about when to wake up, etc -- but systemd already did.
 Also, notice that this is a composable solution; I can have multiple wakeup
 jobs that wake up at the same or different times, do activities of
 different lengths, etc. The laptop will be set to wake up at the next time
-any such job is scheduled to run.
+any such job is scheduled to run. It will keep running until no such jobs
+remain running and then, as long as the lid is closed, it will go back to
+sleep.
 """]]

comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
new file mode 100644
index 0000000..18b871b
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 8"""
+ date="2014-11-18T14:46:24Z"
+ content="""
+I suspend my laptop by closing its lid at some random time.
+I could build everything needed to make rtcwake run on lid close, do
+the math about when to wake up, etc -- but systemd already did.
+
+Also, notice that this is a composable solution; I can have multiple wakeup
+jobs that wake up at the same or different times, do activities of
+different lengths, etc. The laptop will be set to wake up at the next time
+any such job is scheduled to run.
+"""]]

Added a comment: why not just
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_7_2415dc124c96feb589582ab762616508._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_7_2415dc124c96feb589582ab762616508._comment
new file mode 100644
index 0000000..97ec8e1
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_7_2415dc124c96feb589582ab762616508._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkQQKKnSwCo39-9IEoQI_bi5FjFjbVMPpU"
+ nickname="Mark"
+ subject="why not just "
+ date="2014-11-18T11:13:52Z"
+ content="""
+rtcwake -m mem -s 120 && /path/script 
+
+in a cron job?  I would guess it's about entering sleep again?
+
+Seems like a very complex way to solve a simple problem?
+"""]]

Added a comment: Sad story and I liked the fish
diff --git a/blog/entry/on_leaving/comment_4_ed9ed082c5a65cd4630fdf520f3abbd7._comment b/blog/entry/on_leaving/comment_4_ed9ed082c5a65cd4630fdf520f3abbd7._comment
new file mode 100644
index 0000000..b4e2c31
--- /dev/null
+++ b/blog/entry/on_leaving/comment_4_ed9ed082c5a65cd4630fdf520f3abbd7._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkZRMYUHCCNbLDOcTC4hN00jK7mrOZoakM"
+ nickname="Sedat"
+ subject="Sad story and I liked the fish"
+ date="2014-11-16T03:04:08Z"
+ content="""
+It's a big loss, really. I remember your vital help, even for my questions via private email.
+Right now I followed your thread on debian-devel and read some replies.
+Doing so, I got some more helpful informations like autopkg-testing from pitti, etc.
+While my reading I remembered my initial contributions to Debian's systemd.
+At the beginning I was impressed and if I had ever knew.
+NO, you never know :-)!
+
+I lost my parents the last two years and I had to dissolve their household after 35+ years.
+\"Life is change\", look ahead and live in the present, that counts.
+
+Chapeau,
+Sedat (dileks on IRC)
+"""]]

Added a comment: Good luck!
diff --git a/blog/entry/on_leaving/comment_3_405a226354eb7c1416376058d6fbdfc3._comment b/blog/entry/on_leaving/comment_3_405a226354eb7c1416376058d6fbdfc3._comment
new file mode 100644
index 0000000..e1f3b19
--- /dev/null
+++ b/blog/entry/on_leaving/comment_3_405a226354eb7c1416376058d6fbdfc3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlYPDgJVIC9eiG2E7I480vFHmmWXn0Nauc"
+ nickname="Piruthiviraj"
+ subject="Good luck!"
+ date="2014-11-15T03:59:21Z"
+ content="""
+I am a Arch linux user and contributed to Debian wiki couple of times and I have read so much good things about you on the Debian media and I have to wish you good luck in your future endeavors. 
+All that is gold does not glitter, Not all those who wander are lost; The old that is strong does not wither, Deep roots are not reached by the frost. - J. R. R. Tolkien, The Fellowship of the Ring
+
+"""]]

Added a comment: So...
diff --git a/blog/entry/on_leaving/comment_2_d53cc99b266af3a3fb27f699e9744627._comment b/blog/entry/on_leaving/comment_2_d53cc99b266af3a3fb27f699e9744627._comment
new file mode 100644
index 0000000..7ae332c
--- /dev/null
+++ b/blog/entry/on_leaving/comment_2_d53cc99b266af3a3fb27f699e9744627._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk6i-hhgN2tbRxiWto6NnuTCUeLvnhb5s0"
+ nickname="Joshua"
+ subject="So..."
+ date="2014-11-14T21:39:50Z"
+ content="""
+Will you still be using Debian or moving on to a different distribution?
+"""]]

Added a comment: Supporting comment :)
diff --git a/blog/entry/on_leaving/comment_1_0958c977c8faa26b1a52c11f309d51d3._comment b/blog/entry/on_leaving/comment_1_0958c977c8faa26b1a52c11f309d51d3._comment
new file mode 100644
index 0000000..805ad5d
--- /dev/null
+++ b/blog/entry/on_leaving/comment_1_0958c977c8faa26b1a52c11f309d51d3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNXyFwYjjrWNNIsNueKKhpcFd7cFpX_L0"
+ nickname="Rafael"
+ subject="Supporting comment :)"
+ date="2014-11-13T22:10:12Z"
+ content="""
+I am not an active volunteer on Debian (I maintained two packages which are orphaned now), but you are a person I've always looked up to. We never met, but I love reading your blog entries and source codes. I'm sad to see you leaving Debian (now there are no hopes of ever seeing a Haskell dh :P). I will keep following your coding endeavors. Do you think of, some day, joining other linux distribution development?
+"""]]

on leaving
diff --git a/blog/entry/on_leaving.mdwn b/blog/entry/on_leaving.mdwn
new file mode 100644
index 0000000..1ba94fc
--- /dev/null
+++ b/blog/entry/on_leaving.mdwn
@@ -0,0 +1,47 @@
+I left Debian. I don't really have a lot to say about why, but I do
+want to clear one thing up right away. It's not about systemd.
+
+As far as systemd goes, I agree with my friend John Goerzen:
+
+> I promise you – 18 years from now, it will not matter what init Debian chose
+> in 2014. It will probably barely matter in 3 years.
+
+[read the rest](http://changelog.complete.org/archives/9255-debian-a-plea-to-worry-about-what-matters-and-not-take-ourselves-too-seriously)
+
+And with Jonathan Corbet:
+
+> However things turn out, if it becomes clear that there is a better solution
+> than systemd available, we will be able to move to it. 
+
+[read the rest](http://lwn.net/Articles/619992/)
+
+I have no problem with trying out a piece of Free Software, that might have
+abrasive authors, all kinds of technical warts, a debatable design, scope
+creep etc. None of that stopped me from giving Linux a try in 1995, and I'm
+glad I jumped in with both feet.
+
+It's important to be unafraid to make a decision, try it out, and if it doesn't
+work, be unafraid to iterate, rethink, or throw a bad choice out. That's how
+progress happens. Free Software empowers us to do this.
+
+Debian used to be a lot better at that than it is now. This seems to have less
+to do with the size of the project, and more to do with the project having
+aged, ossified, and become comfortable with increasing layers of complexity
+around how it makes decisions. To the point that I no longer feel I can
+understand the decision-making process at all ... or at least, that I'd rather
+be spending those scarce brain cycles on understanding something equally
+hard but more useful, like category theory.
+
+It's been a long time since Debian was my main focus; I feel much more
+useful when I'm working in a small nimble project, making fast and loose
+decisions and iterating on them. Recent events brought it to a head, but
+this is not a new feeling. I've been less and less involved in Debian since
+2007, when I dropped maintaining any packages I wasn't the upstream author
+of, and took a year of mostly ignoring the larger project. 
+
+Now I've made the shift from being a Debian developer to being an upstream
+author of stuff in Debian (and other distros). It seems best to make a clean
+break rather than hang around and risk being sucked back in.
+
+My mailbox has been amazing over the past week by the way. I've heard from
+so many friends, and it's been very sad but also beautiful.

wording
diff --git a/blog/entry/continuing_to_be_pleasantly_surprised.mdwn b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
index 74c838b..d108693 100644
--- a/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
+++ b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
@@ -4,7 +4,8 @@ continue that streak.
 
 The latest is that I'm being funded for a couple of years to work part-time
 on git-annex. The funding comes from the [DataLad project](http://datalad.org/),
-which was recently awarded by [National Science Foundation](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999).
+which was recently awarded a grant by the 
+[National Science Foundation](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999).
 DataLad folks (at Dartmouth College and at Magdeburg University in Germany)
 are working on providing easy access to scientific data (particularly
 neuroimaging). So git-annex will actually be used for science!

blog
diff --git a/blog/entry/continuing_to_be_pleasantly_surprised.mdwn b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
new file mode 100644
index 0000000..74c838b
--- /dev/null
+++ b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
@@ -0,0 +1,21 @@
+Free software has been my career for a long time -- nothing else since 1999 --
+and it continues to be a happy surprise each time I find a way to
+continue that streak.
+
+The latest is that I'm being funded for a couple of years to work part-time
+on git-annex. The funding comes from the [DataLad project](http://datalad.org/),
+which was recently awarded by [National Science Foundation](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999).
+DataLad folks (at Dartmouth College and at Magdeburg University in Germany)
+are working on providing easy access to scientific data (particularly
+neuroimaging). So git-annex will actually be used for science!
+
+I'm being funded for around 30 hours of work each month, to do
+general work on the git-annex core (not on the webapp or assistant).
+That includes bugfixes and some improvements that are wanted for
+DataLad, but are all themselves generally useful.
+([see issue list](https://github.com/datalad/datalad/issues?q=is%3Aopen+label%3Agit-annex))
+
+This is enough to get by on, at least in my current living situation. It
+would be great if I could find some funding for my other work time -- but
+it's also wonderful to have the flexibility to spend time on whatever other
+interesting projects I might want to.

Added a comment: A recommendation for you
diff --git a/blog/entry/new_and_old_laptops/comment_2_543a3d41c7fc06dec5df7b0326127cab._comment b/blog/entry/new_and_old_laptops/comment_2_543a3d41c7fc06dec5df7b0326127cab._comment
new file mode 100644
index 0000000..ea50eda
--- /dev/null
+++ b/blog/entry/new_and_old_laptops/comment_2_543a3d41c7fc06dec5df7b0326127cab._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnfZFpLbVv9n44IaC4V5-yhW9lRVXAzr10"
+ nickname="Fang"
+ subject="A recommendation for you"
+ date="2014-11-10T18:14:03Z"
+ content="""
+I just noted that you want an eink display laptop. There is one that is very close, it's the 10.1 pixel qi display. I have one that works very well on a samsung n145, I am sure you can put it on the dell mini if you can figure out how to turn off the backlight. From my experience it works very well outdoors, and you can display videos too. You can get one of the display on ebay or from taobao.
+I am really sorry to hear that you are leaving debian.
+Wish you all the best.
+Q
+"""]]

update
diff --git a/code/debian-installer/dilab.mdwn b/code/debian-installer/dilab.mdwn
index ba2108c..5b7d17d 100644
--- a/code/debian-installer/dilab.mdwn
+++ b/code/debian-installer/dilab.mdwn
@@ -1,5 +1,7 @@
 [[!meta title="debian-installer test lab"]]
-	
+
+** This is no longer operational. **
+
 [[!img rack.jpg size="200x400"]]
 	
 The debian-installer test lab is used by d-i developers to perform

tense
diff --git a/code/debian-installer.mdwn b/code/debian-installer.mdwn
index d270102..5573352 100644
--- a/code/debian-installer.mdwn
+++ b/code/debian-installer.mdwn
@@ -1,6 +1,5 @@
 A while ago I designed and then on and off led development of [[Debian]]'s
-new installer. It's been quite a successful project and I remain active in
-it.
+new installer. It's been quite a successful project.
 
 I wrote a [[blog/entry/d-i_retrospective]] on the first four years of
 working on debian-installer in my blog, with some cool graphs.
@@ -8,6 +7,6 @@ working on debian-installer in my blog, with some cool graphs.
 Its website is formally <http://www.debian.org/devel/debian-installer>, but 
 <http://wiki.debian.org/DebianInstaller> is perhaps more interesting.
 
-The [[dilab]] is my own rack of d-i test
+The [[dilab]] was my own rack of d-i test
 machines. This runs on `digress`, the d-i regression suite, which is the
 most obscure part of d-i I know of, and which I wrote.

update for debian retirement
diff --git a/code.mdwn b/code.mdwn
index ac175f0..93302ef 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -7,35 +7,21 @@ The stuff that's swapped into my local cache at the moment.
 
 [[git-annex]]
 [[ikiwiki]]
-[[ikiwiki-hosting]]
-[[Debian]]
-[[debian-installer]]
-[[debhelper]]
-[[moreutils]]
+[[propellor]]
 [[myrepos|mr]]
 [[etckeeper]]
-[[mpdtoys]]
-[[tasksel]]
-[[debmirror]]
+[[moreutils]]
+[[ikiwiki-hosting]]
 [[github-backup]]
-[[propellor]]
+[[mpdtoys]]
 
 ## Less active projects
 
-In maintenance mode, or handled more by others, mostly, but I still
-have my hands in it somewhat.
+In maintenance mode mostly, but I still have my hands in it somewhat.
 
-[[alien]]
-[[debconf]]
-[[dpkg-repack]]
 [[Words2Nums]]
 [[pdmenu]]
 [[filters]]
-[[os-prober]]
-[[devscripts]]
-[[rootsync]]
-[[nslu2-utils]]
-[[jetring]]
 
 ## Past projects
 
@@ -46,6 +32,11 @@ continued life:
 
 Passed on to others, or dead and buried:
 
+[[Debian]]
+[[debian-installer]]
+[[debhelper]]
+[[tasksel]]
+[[debmirror]]
 [[shoop]]
 [[apt-src]]
 [[pentium-builder]]
@@ -58,6 +49,14 @@ Passed on to others, or dead and buried:
 [[wmbattery]]
 [[sleepd]]
 [[pristine-tar]]
+[[alien]]
+[[debconf]]
+[[dpkg-repack]]
+[[os-prober]]
+[[devscripts]]
+[[jetring]]
+[[nslu2-utils]]
+[[rootsync]]
 
 ## Misc
 
@@ -75,10 +74,8 @@ pages I add to this site, and [[grep]] aggregates my recent commits.
 Also, [Ohloh](http://www.ohloh.net/accounts/6835) tracks and mines my commits to many projects 
 for interesting metrics.
 
-[Here](http://qa.debian.org/popcon-graph.php?packages=etckeeper+mr+pristine-tar+ikiwiki+mpdtoys&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
+[Here](http://qa.debian.org/popcon-graph.php?packages=etckeeper+mr+propellor+ikiwiki+git-annex&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
 is a graph of Debian popcon stats for my newest projects.
-[Here](http://qa.debian.org/popcon-graph.php?packages=nslu2-utils+lingua-en-words2nums-perl+jetring+moreutils+dpkg-repack+wmbattery+sleepd+filters+satutils+ticker+flashybrid&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
-is a graph for my older, more-established projects, and
 [here](http://qa.debian.org/popcon-graph.php?packages=alien+debhelper+debconf+tasksel+os-prober&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
 is a graph for my most popular projects. I assume popcon only reflects 1/10th
 to 1/100th or less of total users.

update; left debian
diff --git a/code/debian.mdwn b/code/debian.mdwn
index c36d5cb..7933a26 100644
--- a/code/debian.mdwn
+++ b/code/debian.mdwn
@@ -11,7 +11,7 @@ subprojects _of_ Debian, and while nearly anything else on the whole wiki
 is probably available _in_ Debian, all that is just a fraction of all the
 work I've done _for_ Debian.
 
-## Some of Joey's random plans for Debian[1][2]
+## Some of Joey's random plans for Debian[1][2][3]
 
 * Make [[testing]] a proper Debian release that releases at some sane rate (unlike stable).
 
@@ -38,41 +38,12 @@ work I've done _for_ Debian.
   developer's reference, or the RM's list of RC type issues, or something
   like that, and leave policy as-is.
 
-* Get all my packages lintian clean (eg, fix lintian ;-)
-
-* Fix all my [bugs](http://bugs.debian.org/joeyh@debian.org) (eg, orphan buggy packages ;-)
-
-* Find co-maintainers for all my packages; move all package repos to alioth.
-
-* Completely change everything I'm working on in Debian at least once per 5 years.
-
-* Propose a vote to try to double DPL term of office.
-
-  It's nice for the project to examine itself every year in the DPL elections, but it loses a month or two doing it, and one year is not enough time to bring many plans, such as the ones listed above, to fruition. Not that I'm planning to run for DPL or anything, oh no..
-
 * Make <http://wiki.debian.org> supplant <http://www.debian.org> as the most important website of the project.
 
-* zeroconf and mdns goodness on Debian
-
-   - <http://wiki.debian.org/ZeroConf>
-   - really need to set up that mailing list
-
-* Clean up the embedded debian stuff we use at work (busybox-links, 
-  adsrootbuilder etc) and integrate it into Debian. See also: 
-  [[blog/entry/replacing_stuff_with_busybox]]:
-
-    > In the future, I for one would like to see a broad agreement in Debian
-    > that making init scripts and the like compatable with busybox is worth 
-    > doing if it doesn't make them significantly slower or uglier. 
-
-* Add a tasksel task to install software to back the machine up. backupninja is a nice frontend to several backup tools. Needs more thought..
-
-* Make dinstall/archive sync happen more frequently, AKA increase the
-  heartbeat of the project. (Already doubled to 2x/day, I would prefer
-  6x/day.)
-
 * Work on [[blog/entry/ending_the_tyranny_of_unix_permissions]]!
 
 ----
 [1] Plans may not be sufficiently random for government use.  
 [2] Goals in mirror may be closer than they appear.  
+[3] Trimmed down now that I've left Debian to the ones I really wish I'd
+    gotten to when I had the chance.

add news item for github-backup 1.20141110
diff --git a/code/github-backup/news/version_1.20140720.mdwn b/code/github-backup/news/version_1.20140720.mdwn
deleted file mode 100644
index 5d8f796..0000000
--- a/code/github-backup/news/version_1.20140720.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-github-backup 1.20140720 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Deal with trailing slashes on github repo urls. Closes: #[755261](http://bugs.debian.org/755261)
-   * Fix bug introduced by change to embedded git libraries
-     in last release. Closes: #[755262](http://bugs.debian.org/755262)"""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20141110.mdwn b/code/github-backup/news/version_1.20141110.mdwn
new file mode 100644
index 0000000..2c24e28
--- /dev/null
+++ b/code/github-backup/news/version_1.20141110.mdwn
@@ -0,0 +1,4 @@
+github-backup 1.20141110 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package.
+     (I continue to maintain github-backup upstream.)"""]]
\ No newline at end of file

add news item for filters 2.53
diff --git a/code/filters/news/version_2.46.mdwn b/code/filters/news/version_2.46.mdwn
deleted file mode 100644
index 57d03eb..0000000
--- a/code/filters/news/version_2.46.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-filters 2.46 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * fanboy: Improve docs and remove from SAMPLES. Closes: #[496588](http://bugs.debian.org/496588)"""]]
\ No newline at end of file
diff --git a/code/filters/news/version_2.53.mdwn b/code/filters/news/version_2.53.mdwn
new file mode 100644
index 0000000..aa06a5e
--- /dev/null
+++ b/code/filters/news/version_2.53.mdwn
@@ -0,0 +1,3 @@
+filters 2.53 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for moreutils 0.53
diff --git a/code/moreutils/news/version_0.47.mdwn b/code/moreutils/news/version_0.47.mdwn
deleted file mode 100644
index cbc697c..0000000
--- a/code/moreutils/news/version_0.47.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-moreutils 0.47 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * errno: New utility that looks up errno numbers or names."""]]
\ No newline at end of file
diff --git a/code/moreutils/news/version_0.53.mdwn b/code/moreutils/news/version_0.53.mdwn
new file mode 100644
index 0000000..4a86bd2
--- /dev/null
+++ b/code/moreutils/news/version_0.53.mdwn
@@ -0,0 +1,3 @@
+moreutils 0.53 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for pdmenu 1.3.4
diff --git a/code/pdmenu/news/version_1.2.99.mdwn b/code/pdmenu/news/version_1.2.99.mdwn
deleted file mode 100644
index 4c7d09b..0000000
--- a/code/pdmenu/news/version_1.2.99.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-pdmenu 1.2.99 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Add Danish translation from Joe Dalton. Closes: #[609579](http://bugs.debian.org/609579)"""]]
\ No newline at end of file
diff --git a/code/pdmenu/news/version_1.3.4.mdwn b/code/pdmenu/news/version_1.3.4.mdwn
new file mode 100644
index 0000000..b638306
--- /dev/null
+++ b/code/pdmenu/news/version_1.3.4.mdwn
@@ -0,0 +1,3 @@
+pdmenu 1.3.4 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for liblingua-en-words2nums-perl 0.19
diff --git a/code/words2nums/news/version_0.14.mdwn b/code/words2nums/news/version_0.14.mdwn
deleted file mode 100644
index c7c83aa..0000000
--- a/code/words2nums/news/version_0.14.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-liblingua-en-words2nums-perl 0.14 released with these changes:
-
-   * Remove the tests that involve exponentents, as they may not on 64 bit
-     machines, and will cause false test failures. Closes: #[250610](http://bugs.debian.org/250610)
\ No newline at end of file
diff --git a/code/words2nums/news/version_0.19.mdwn b/code/words2nums/news/version_0.19.mdwn
new file mode 100644
index 0000000..f08188c
--- /dev/null
+++ b/code/words2nums/news/version_0.19.mdwn
@@ -0,0 +1,3 @@
+liblingua-en-words2nums-perl 0.19 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaning the Debian package."""]]
\ No newline at end of file

add news item for mpdtoys 0.25
diff --git a/code/mpdtoys/news/version_0.20.mdwn b/code/mpdtoys/news/version_0.20.mdwn
deleted file mode 100644
index e3d5267..0000000
--- a/code/mpdtoys/news/version_0.20.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-mpdtoys 0.20 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Work around bug #548305."""]]
\ No newline at end of file
diff --git a/code/mpdtoys/news/version_0.25.mdwn b/code/mpdtoys/news/version_0.25.mdwn
new file mode 100644
index 0000000..8f90429
--- /dev/null
+++ b/code/mpdtoys/news/version_0.25.mdwn
@@ -0,0 +1,3 @@
+mpdtoys 0.25 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for etckeeper 1.16
diff --git a/code/etckeeper/news/version_1.11.mdwn b/code/etckeeper/news/version_1.11.mdwn
deleted file mode 100644
index c50fcce..0000000
--- a/code/etckeeper/news/version_1.11.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-etckeeper 1.11 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix too broad matching of .gitignored files.
-     Closes: #[732339](http://bugs.debian.org/732339)"""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.16.mdwn b/code/etckeeper/news/version_1.16.mdwn
new file mode 100644
index 0000000..91d93b4
--- /dev/null
+++ b/code/etckeeper/news/version_1.16.mdwn
@@ -0,0 +1,6 @@
+etckeeper 1.16 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added support for Fedora's DNF highlevel package manager.
+     Thanks, Peter Listiak and Petr Spacek.
+   * Add architecture info to dpkg list-installed. Closes: #[768145](http://bugs.debian.org/768145)
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for alien 8.93
diff --git a/code/alien/news/version_8.87.mdwn b/code/alien/news/version_8.87.mdwn
deleted file mode 100644
index 5fdd13a..0000000
--- a/code/alien/news/version_8.87.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-alien 8.87 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Use lsb-rpmbuild, not lsb-rpm. Closes: #[667044](http://bugs.debian.org/667044)
-   * Fix adding of postinst script to deb, containing rpm permissions
-     fixups code. Closes: #[667651](http://bugs.debian.org/667651)"""]]
\ No newline at end of file
diff --git a/code/alien/news/version_8.93.mdwn b/code/alien/news/version_8.93.mdwn
new file mode 100644
index 0000000..afdb329
--- /dev/null
+++ b/code/alien/news/version_8.93.mdwn
@@ -0,0 +1,3 @@
+alien 8.93 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Alien needs a new maintainer, both in Debian and upstream."""]]
\ No newline at end of file

add news item for debhelper 9.20141107
diff --git a/code/debhelper/news/version_9.20140809.mdwn b/code/debhelper/news/version_9.20140809.mdwn
deleted file mode 100644
index 4774c3f..0000000
--- a/code/debhelper/news/version_9.20140809.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-debhelper 9.20140809 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh\_perl: Add perlapi-* dependency on packages installed to
-     $Config{vendorarch} Closes: #[751684](http://bugs.debian.org/751684)
-   * dh\_perl: Use vendorlib and vendorarch from Config instead of
-     hardcoding their values. Closes: #[750021](http://bugs.debian.org/750021)
-   * Typo: Closes: #[755237](http://bugs.debian.org/755237)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20141107.mdwn b/code/debhelper/news/version_9.20141107.mdwn
new file mode 100644
index 0000000..9c226c0
--- /dev/null
+++ b/code/debhelper/news/version_9.20141107.mdwn
@@ -0,0 +1,3 @@
+debhelper 9.20141107 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * I'm leaving Debian, and Debhelper needs a new maintainer."""]]
\ No newline at end of file

syntax
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 1416195..e5b9148 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -42,7 +42,7 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /usr/bin/timeout 45m /home/joey/bin/goodmorning
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c "/usr/bin/timeout 45m /home/joey/bin/goodmorning"
 </pre>
 
 ## installation

add timeout
Prevents scenario where eg, mail fetch stalls and keeps laptop on.
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 7963427..1416195 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -42,7 +42,7 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /usr/bin/timeout 45m /home/joey/bin/goodmorning
 </pre>
 
 ## installation

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_6_7f13435cdfd83f8eb0a3520c06061046._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_6_7f13435cdfd83f8eb0a3520c06061046._comment
new file mode 100644
index 0000000..99f939a
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_6_7f13435cdfd83f8eb0a3520c06061046._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkyvp3cHZUjFtgqf5gTg-QoYBZ-kpkgUDc"
+ nickname="Maik"
+ subject="comment 6"
+ date="2014-11-03T13:53:07Z"
+ content="""
+Generally nice, but I really don't see why this needs to be:
+
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+So why can't I give that privilege to the user? A normal user shouldn't have to touch root for user-tasks like this. Please, Mr. Pöttering, please, please, please, spend a month with a group of experienced sys admins. Maybe then you will see the errors of your ways and why systemd is a nice toy but not a serious tool.
+"""]]

add news item for github-backup 1.20141031
diff --git a/code/github-backup/news/version_1.20140707.mdwn b/code/github-backup/news/version_1.20140707.mdwn
deleted file mode 100644
index ed63eea..0000000
--- a/code/github-backup/news/version_1.20140707.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-github-backup 1.20140707 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Add --exclude to skip backing up a specific repository
-     when backing up a user or organization's repositories.
-     Closes: #[754072](http://bugs.debian.org/754072)
-   * Converted to using optparse-applicative.
-   * Multiple usernames can now be specified to back up at once."""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20141031.mdwn b/code/github-backup/news/version_1.20141031.mdwn
new file mode 100644
index 0000000..8a79eda
--- /dev/null
+++ b/code/github-backup/news/version_1.20141031.mdwn
@@ -0,0 +1,7 @@
+github-backup 1.20141031 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Adjust cabal file for network-uri split.
+   * Avoid using optparse-applicate's argument combinator, so it will build
+     with 0.11 and older too.
+   * Various updates to internal git and utility libraries shared with
+     git-annex."""]]
\ No newline at end of file

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_5_057aff1b495bd7f5f58d5a25914382e6._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_5_057aff1b495bd7f5f58d5a25914382e6._comment
new file mode 100644
index 0000000..25b0067
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_5_057aff1b495bd7f5f58d5a25914382e6._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkwGyT-xQG956hj3PjmNMoQb_iqdOALS9Q"
+ nickname="Mantas"
+ subject="comment 5"
+ date="2014-10-28T10:09:34Z"
+ content="""
+I think almost all x86 systems have a RTC with wake support.
+
+The \"\*IgnoreInhibited\" settings shouldn't be needed; they're about the lid overriding normal \"sleep\" inhibitors, not handle-\* ones.
+"""]]

Added a comment: per-user unit
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_4_225414e1d42e4882c5f6979d66734dec._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_4_225414e1d42e4882c5f6979d66734dec._comment
new file mode 100644
index 0000000..bd808c8
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_4_225414e1d42e4882c5f6979d66734dec._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkk-9UbXJdtsz_3c1Sxjo7TCAPlfm5zE08"
+ nickname="Lennart"
+ subject="per-user unit"
+ date="2014-10-28T09:56:57Z"
+ content="""
+Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+The Unit=goodmorning.service line is implied btw. Persistent=false is the default, so could be dropped too.
+
+Lennart
+"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_3_54c05708f76ff01b74272ce6813aa60e._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_3_54c05708f76ff01b74272ce6813aa60e._comment
new file mode 100644
index 0000000..9224d69
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_3_54c05708f76ff01b74272ce6813aa60e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmeUbp_bTPJg__VA4WR7RFrmocmmkeWwx0"
+ nickname="Franco"
+ subject="comment 3"
+ date="2014-10-28T05:35:03Z"
+ content="""
+crond, this unknown daemon that will do the same in only one line and exists tens of years before systemd...
+"""]]

typo
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 062fcce..7963427 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -66,7 +66,7 @@ available that is.
 
 Also, notice the  `ConditionACPower=true`, which I added once I realized I
 don't want the job to run if I forgot to leave the laptop plugged in
-overnight. Technically, it will still wake up when on batter power, but
+overnight. Technically, it will still wake up when on battery power, but
 then it should go right back to sleep.
 
 Quite a lot of nice peices of systemd all working together here!

reorg
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index d753641..062fcce 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -55,15 +55,15 @@ is not to let systemd-inhibit block sleep on lid close.
 
 ## almost too easy
 
+I don't think this would be anywhere near as easy to do without systemd,
+logind, etc. Especially the handling of waking the system at the right
+time, and the behavior around lid sleep inhibiting.
+
 The WakeSystem=true relies on some 
 [hardware support for waking from sleep](https://en.wikipedia.org/wiki/Real-time_clock_alarm);
 my laptop supported it with no trouble but I don't know how broadly
 available that is.
 
-I don't think this would be anywhere near as easy to do without systemd,
-logind, etc. Especially the handling of waking the system at the right
-time, and the behavior around lid sleep inhibiting.
-
 Also, notice the  `ConditionACPower=true`, which I added once I realized I
 don't want the job to run if I forgot to leave the laptop plugged in
 overnight. Technically, it will still wake up when on batter power, but

updates
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 83c0837..d753641 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -15,7 +15,7 @@ This took some time to figure out, but it's surprisingly simple.
 Besides ~/bin/goodmorning, which can be any program/script,
 I needed just two files to configure systemd to do this.
 
-First, `/etc/systemd/system/goodmorning.timer`
+## /etc/systemd/system/goodmorning.timer
 
 <pre>
 [Unit]
@@ -31,7 +31,7 @@ Persistent=false
 WantedBy=multi-user.target
 </pre>
 
-Second, `/etc/systemd/system/goodmorning.service`
+## /etc/systemd/system/goodmorning.service
 
 <pre>
 [Unit]
@@ -42,35 +42,53 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/sh -c 'systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning; if ! grep -q open /proc/acpi/button/lid/LID0/state; then systemctl suspend; fi'
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning
 </pre>
 
-After installing these files, run (as root): `systemctl enable goodmorning.timer; systemctl start goodmorning.timer`
+## installation
+
+After installing those files, run (as root): `systemctl enable goodmorning.timer; systemctl start goodmorning.timer`
 
 Then, you'll also need to edit `/etc/systemd/logind.conf`, and
 set `LidSwitchIgnoreInhibited=no` -- this overrides the default, which
 is not to let systemd-inhibit block sleep on lid close.
 
-The WakeSystem=true relies on some hardware support for waking from sleep;
+## almost too easy
+
+The WakeSystem=true relies on some 
+[hardware support for waking from sleep](https://en.wikipedia.org/wiki/Real-time_clock_alarm);
 my laptop supported it with no trouble but I don't know how broadly
 available that is.
 
 I don't think this would be anywhere near as easy to do without systemd,
 logind, etc. Especially the handling of waking the system at the right
-time, and the behavior around lid sleep inhibiting. Also, notice the 
-`ConditionACPower=true`, which I added once I realized I don't want
-the job to run if I forgot to leave the laptop plugged in overnight.
+time, and the behavior around lid sleep inhibiting.
+
+Also, notice the  `ConditionACPower=true`, which I added once I realized I
+don't want the job to run if I forgot to leave the laptop plugged in
+overnight. Technically, it will still wake up when on batter power, but
+then it should go right back to sleep.
+
 Quite a lot of nice peices of systemd all working together here!
 
-Unfortunately, xfce4-power-manager reimplements its own lid switch handling,
-overriding systemd's, and this cannot be disabled. That's why the ExecStart
-above checks if the lid is still closed at the end, and manually suspends. That
-hack is not necessary when not using xfce4-power-manager.
+## xfce workaround
+
+If using xfce, xfce4-power-manager takes over handling of lid close from
+systemd, and currently prevents the system from going back to sleep if the
+lid is still closed when goodmorning finishes. Happily, there is an easy
+workaround; this configures xfce to not override the lid switch behavior:
 
-(It would perhaps be better to use the per-user systemd, not the system wide
+`xfconf-query -c xfce4-power-manager -n -p /xfce4-power-manager/logind-handle-lid-switch -t bool -s true`
+
+Other desktop environments may have similar issues.
+
+## why not a per-user unit?
+
+It would perhaps be better to use the per-user systemd, not the system wide
 one. Then I could change the time the alarm runs without using root.
+
 What's prevented me from doing this is that systemd-inhibit uses policykit,
 and policykit prevents it from being used in this situation. It's a lot
-easier to run it as root and use su, than it is to reconfigure policykit.)
+easier to run it as root and use su, than it is to reconfigure policykit.
 
 [[!meta title="a programmable alarm clock using systemd"]]

boo
diff --git a/index.mdwn b/index.mdwn
index 12a7a41..fbe185a 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="https://joeyh.name/"
+[[!meta openid="http://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

switch to https
diff --git a/index.mdwn b/index.mdwn
index fbe185a..12a7a41 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://joeyh.name/"
+[[!meta openid="https://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_2_3071b3486b4d9f7a2c77a35829f4b5ba._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_2_3071b3486b4d9f7a2c77a35829f4b5ba._comment
new file mode 100644
index 0000000..b819d5b
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_2_3071b3486b4d9f7a2c77a35829f4b5ba._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://www.kitenet.net/"
+ ip="67.223.1.203"
+ subject="comment 2"
+ date="2014-10-27T16:26:59Z"
+ content="""
+systemd-inhibit can only be used in a login session, or by root, that's why the command has to run as root.
+"""]]

openid tweak
diff --git a/index.mdwn b/index.mdwn
index 59a79a9..fbe185a 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://kitenet.net/"
+[[!meta openid="http://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

Revert "openid tweak"
This reverts commit cfff21db8880c746c936110efe95f504d81fb8b5.
diff --git a/index.mdwn b/index.mdwn
index fbe185a..59a79a9 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://joeyh.name/"
+[[!meta openid="http://kitenet.net/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

openid tweak
diff --git a/index.mdwn b/index.mdwn
index 59a79a9..fbe185a 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://kitenet.net/"
+[[!meta openid="http://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

hack around xfce4-power-manager
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 2db93c0..83c0837 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -42,7 +42,7 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning
+ExecStart=/bin/sh -c 'systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning; if ! grep -q open /proc/acpi/button/lid/LID0/state; then systemctl suspend; fi'
 </pre>
 
 After installing these files, run (as root): `systemctl enable goodmorning.timer; systemctl start goodmorning.timer`
@@ -62,6 +62,11 @@ time, and the behavior around lid sleep inhibiting. Also, notice the
 the job to run if I forgot to leave the laptop plugged in overnight.
 Quite a lot of nice peices of systemd all working together here!
 
+Unfortunately, xfce4-power-manager reimplements its own lid switch handling,
+overriding systemd's, and this cannot be disabled. That's why the ExecStart
+above checks if the lid is still closed at the end, and manually suspends. That
+hack is not necessary when not using xfce4-power-manager.
+
 (It would perhaps be better to use the per-user systemd, not the system wide
 one. Then I could change the time the alarm runs without using root.
 What's prevented me from doing this is that systemd-inhibit uses policykit,

Added a comment: "su joey"
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_1_d6ff3f45e50fcb74959a3d359e586a7b._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_1_d6ff3f45e50fcb74959a3d359e586a7b._comment
new file mode 100644
index 0000000..53c7b81
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_1_d6ff3f45e50fcb74959a3d359e586a7b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jordi"
+ ip="83.34.195.195"
+ subject="&quot;su joey&quot;"
+ date="2014-10-27T09:03:32Z"
+ content="""
+Just wondering, can't you use \"User/Group=joey\" instead of su joey -c?
+"""]]

update to not run job when off AC power
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 7a92662..2db93c0 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -38,6 +38,7 @@ Second, `/etc/systemd/system/goodmorning.service`
 Description=good morning
 RefuseManualStart=true
 RefuseManualStop=true
+ConditionACPower=true
 
 [Service]
 Type=oneshot
@@ -56,7 +57,10 @@ available that is.
 
 I don't think this would be anywhere near as easy to do without systemd,
 logind, etc. Especially the handling of waking the system at the right
-time, and the behavior around lid sleep inhibiting.
+time, and the behavior around lid sleep inhibiting. Also, notice the 
+`ConditionACPower=true`, which I added once I realized I don't want
+the job to run if I forgot to leave the laptop plugged in overnight.
+Quite a lot of nice peices of systemd all working together here!
 
 (It would perhaps be better to use the per-user systemd, not the system wide
 one. Then I could change the time the alarm runs without using root.

blog update
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
new file mode 100644
index 0000000..7a92662
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -0,0 +1,67 @@
+I've taught my laptop to wake up at 7:30 in the morning. When it does, it
+will run [whatever's in my ~/bin/goodmorning script](http://git.kitenet.net/?p=joey/home.git;a=blob;f=bin/goodmorning;h=567f50f0595c6111bc416c0e5b2dd1de09214790;hb=HEAD). Then, if the lid is
+still closed, it will go back to sleep again.
+
+So, it's a programmable alarm clock that doesn't need the laptop to be left
+turned on to work.
+
+But it doesn't have to make noise and wake me up (I rarely want to be woken
+up by an alarm; the sun coming in the window is a much nicer method).
+It can handle other tasks like downloading my email, before I wake up. When
+I'm at home and on dialup, this tends to take an hour in the morning, so
+it's nice to let it happen before I get up.
+
+This took some time to figure out, but it's surprisingly simple.
+Besides ~/bin/goodmorning, which can be any program/script,
+I needed just two files to configure systemd to do this.
+
+First, `/etc/systemd/system/goodmorning.timer`
+
+<pre>
+[Unit]
+Description=good morning
+
+[Timer]
+Unit=goodmorning.service
+OnCalendar=*-*-* 7:30
+WakeSystem=true
+Persistent=false
+
+[Install]
+WantedBy=multi-user.target
+</pre>
+
+Second, `/etc/systemd/system/goodmorning.service`
+
+<pre>
+[Unit]
+Description=good morning
+RefuseManualStart=true
+RefuseManualStop=true
+
+[Service]
+Type=oneshot
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning
+</pre>
+
+After installing these files, run (as root): `systemctl enable goodmorning.timer; systemctl start goodmorning.timer`
+
+Then, you'll also need to edit `/etc/systemd/logind.conf`, and
+set `LidSwitchIgnoreInhibited=no` -- this overrides the default, which
+is not to let systemd-inhibit block sleep on lid close.
+
+The WakeSystem=true relies on some hardware support for waking from sleep;
+my laptop supported it with no trouble but I don't know how broadly
+available that is.
+
+I don't think this would be anywhere near as easy to do without systemd,
+logind, etc. Especially the handling of waking the system at the right
+time, and the behavior around lid sleep inhibiting.
+
+(It would perhaps be better to use the per-user systemd, not the system wide
+one. Then I could change the time the alarm runs without using root.
+What's prevented me from doing this is that systemd-inhibit uses policykit,
+and policykit prevents it from being used in this situation. It's a lot
+easier to run it as root and use su, than it is to reconfigure policykit.)
+
+[[!meta title="a programmable alarm clock using systemd"]]

add news item for debhelper 9.20141022
diff --git a/code/debhelper/news/version_9.20140613.mdwn b/code/debhelper/news/version_9.20140613.mdwn
deleted file mode 100644
index 1b3eae3..0000000
--- a/code/debhelper/news/version_9.20140613.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-debhelper 9.20140613 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Pass --disable-silent-rules in dh\_auto\_configure if DH\_VERBOSE is set.
-     Closes: #[751207](http://bugs.debian.org/751207). Thanks, Helmut Grohne.
-   * Minor typos. Closes: #[741144](http://bugs.debian.org/741144), #[744176](http://bugs.debian.org/744176)
-   * dh\_installinit: Fix uninitialized value warning when --name is used."""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20141022.mdwn b/code/debhelper/news/version_9.20141022.mdwn
new file mode 100644
index 0000000..8efa2eb
--- /dev/null
+++ b/code/debhelper/news/version_9.20141022.mdwn
@@ -0,0 +1,4 @@
+debhelper 9.20141022 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh\_installdeb: Sort conffile list so there is a stable order for
+     reproducible builds. Closes: #[766384](http://bugs.debian.org/766384) Thanks, Jérémy Bobbio."""]]
\ No newline at end of file

add news item for etckeeper 1.15
diff --git a/code/etckeeper/news/version_1.10.mdwn b/code/etckeeper/news/version_1.10.mdwn
deleted file mode 100644
index 11ef907..0000000
--- a/code/etckeeper/news/version_1.10.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-etckeeper 1.10 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Remove lvm/backup from default ignores, because lvm
-     documentation recommends backing that up, for use by
-     vgcfgrestore.
-   * Fix exporting of some git variables. Closes: #[728583](http://bugs.debian.org/728583)"""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.15.mdwn b/code/etckeeper/news/version_1.15.mdwn
new file mode 100644
index 0000000..4934b76
--- /dev/null
+++ b/code/etckeeper/news/version_1.15.mdwn
@@ -0,0 +1,4 @@
+etckeeper 1.15 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Recommend cron-daemon, rather than cron, as etckeeper only needs
+     cron.daily functionality. Closes: #[762721](http://bugs.debian.org/762721)"""]]
\ No newline at end of file

add news item for debhelper 9.20141010
diff --git a/code/debhelper/news/version_9.20140228.mdwn b/code/debhelper/news/version_9.20140228.mdwn
deleted file mode 100644
index aa2ba79..0000000
--- a/code/debhelper/news/version_9.20140228.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-debhelper 9.20140228 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix breakage in no-act mode introduced in last release."""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20141010.mdwn b/code/debhelper/news/version_9.20141010.mdwn
new file mode 100644
index 0000000..9c6dedc
--- /dev/null
+++ b/code/debhelper/news/version_9.20141010.mdwn
@@ -0,0 +1,11 @@
+debhelper 9.20141010 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Johannes Schauer ]
+   * Depend on libdpkg-perl (&gt;= 1.17.14) for build profiles support. Note to
+     backporters: If you remove that dependency, debhelper will throw an error
+     when a binary package stanza in debian/control has the Build-Profiles
+     field.
+   * Use libdpkg-perl functionality to parse the content of the Build-Profiles
+     field, if there is one. In that case, use libdpkg-perl to evaluate whether
+     the binary package should be built or not.
+     Closes: #[763766](http://bugs.debian.org/763766)"""]]
\ No newline at end of file

switch to hack feed for https feed that has expired cert
diff --git a/grep.mdwn b/grep.mdwn
index 8763807..f13c25e 100644
--- a/grep.mdwn
+++ b/grep.mdwn
@@ -8,6 +8,6 @@ on the net.
 List of feeds:
 
 * [[!aggregate expirecount=25 name="music" feedurl="http://libre.fm/rdf.php?fmt=rss&page=%2Fuser%2Fjoeyhess%2Frecent-tracks" url="http://libre.fm/user/joeyhess"]]
-* [[!aggregate expirecount=25 name="identi.ca posts" feedurl="https://pump2rss.com/feed/joeyh@identi.ca.atom" url="http://identi.ca/joeyh"]]
+* [[!aggregate expirecount=25 name="identi.ca posts" feedurl="http://tmp.kitenet.net/pump.atom" url="http://identi.ca/joeyh"]]
 * [[!aggregate expirecount=25 name="twitter grep" feedurl="http://tmp.kitenet.net/twittergrep.rss" url="https://twitter.com/search/realtime?q=olduse+OR+git-annex+OR+debhelper+OR+etckeeper+OR+ikiwiki+-ashley_ikiwiki"]]
 * [[!aggregate expirecount=25 name="books" feedurl="http://www.goodreads.com/review/list_rss/2159448?key=afd7e8432b3f9e33edab442a7c94e95849af4527&shelf=currently-reading" url="http://www.goodreads.com/user/show/2159448"]]

add news item for debhelper 9.20141003
diff --git a/code/debhelper/news/version_9.20140227.mdwn b/code/debhelper/news/version_9.20140227.mdwn
deleted file mode 100644
index 4b5431d..0000000
--- a/code/debhelper/news/version_9.20140227.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-debhelper 9.20140227 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh\_compress: Avoid compressing .map files, which may be html
-     usemaps. Closes: #[704443](http://bugs.debian.org/704443)
-   * dh\_installdocs: When doc dirs are symlinked make the dependency
-     versioned per policy. Closes: #[676777](http://bugs.debian.org/676777)
-   * dh\_makeshlibs: Defer propigating dpkg-gensymbols error until
-     all packages have been processed. Closes: #[736640](http://bugs.debian.org/736640)
-   * dh: Reject unknown parameters that are not dashed command-line
-     parameters intended to be passed on to debhelper commands.
-     Closes: #[737635](http://bugs.debian.org/737635)
-   * perl\_build: Use realclean instead of distclean. Closes: #[737662](http://bugs.debian.org/737662)
-   * Initial implementation of support for Build-Profiles fields.
-     Thanks, Daniel Schepler.
-   * dh\_gencontrol: Revert change made in version 4.0.13 that avoided
-     passing -p to dpkg-gencontrol when only operating on one package.
-     There seems to be no benefit to doing that, and it breaks when using
-     Build-Profiles, since while debhelper may know a profile only allows
-     for one package, dpkg-gencontrol may see other packages in the
-     control file."""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20141003.mdwn b/code/debhelper/news/version_9.20141003.mdwn
new file mode 100644
index 0000000..f5b8bd3
--- /dev/null
+++ b/code/debhelper/news/version_9.20141003.mdwn
@@ -0,0 +1,4 @@
+debhelper 9.20141003 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh\_clean: Skip over .git, .svn, .bzr, .hg, and CVS directories
+     and avoid cleaning their contents. Closes: #[760033](http://bugs.debian.org/760033)"""]]
\ No newline at end of file

Added a comment: nice
diff --git a/blog/entry/propellor_is_d-i_2.0/comment_4_039c3a5147cf32bf8b1af523da5bb757._comment b/blog/entry/propellor_is_d-i_2.0/comment_4_039c3a5147cf32bf8b1af523da5bb757._comment
new file mode 100644
index 0000000..c47522e
--- /dev/null
+++ b/blog/entry/propellor_is_d-i_2.0/comment_4_039c3a5147cf32bf8b1af523da5bb757._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="wires"
+ ip="82.161.183.192"
+ subject="nice"
+ date="2014-09-27T10:01:13Z"
+ content="""
+Nice and simple solution again! would love to see this developed further. Also wondering if it is useful to combine this with (parts of) [nix](https://nixos.org/nix/)... 
+"""]]

Added a comment: nice
diff --git a/blog/entry/propellor_is_d-i_2.0/comment_3_1cb9726c4ee5f649025d252f140add3f._comment b/blog/entry/propellor_is_d-i_2.0/comment_3_1cb9726c4ee5f649025d252f140add3f._comment
new file mode 100644
index 0000000..ab804f0
--- /dev/null
+++ b/blog/entry/propellor_is_d-i_2.0/comment_3_1cb9726c4ee5f649025d252f140add3f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="wires"
+ ip="82.161.183.192"
+ subject="nice"
+ date="2014-09-27T10:00:46Z"
+ content="""
+Nice and simple solution again! would love to see this developed further. Also wondering if it is useful to combine this with (parts of) [nix](https://nixos.org/nix/)... 
+"""]]

update
diff --git a/boxen/diatom.mdwn b/boxen/diatom.mdwn
index 8c6bb7d..d158156 100644
--- a/boxen/diatom.mdwn
+++ b/boxen/diatom.mdwn
@@ -1 +1 @@
-In digital ocean.
+In digital ocean. Stable server.

update
diff --git a/boxen/wren.mdwn b/boxen/wren.mdwn
index 8fbd16d..fed5fc0 100644
--- a/boxen/wren.mdwn
+++ b/boxen/wren.mdwn
@@ -1,26 +1,2 @@
-Wren serves [kitenet.net](http://kitenet.net/) and associated domains, and is
-my main server. However, it's EOL.
-
-Wren is a KVM instance hosted by Steve Kemp at
-[kvm-hosting.org](http://www.xen-hosting.org/), in the UK.
-For a KVM instance, it's fairly large, with 50 gb of disk and 1 gb ram.
-
-## Notes
-
-IPs:
-
-* 80.68.85.49
-* 80.68.85.50 (unused)
-* 80.68.85.51 (unused)
-
-console:
-
-	ssh joey@joey.console.kvm-hosting.net (uses special key)
-
-sibling xen instances:
-
-* [80.68.85.34](http://80.68.85.34)
-* [80.68.85.37](http://80.68.85.37)
-* [80.68.85.40](http://80.68.85.40)
-* [80.68.85.43](http://80.68.85.43)
-* [80.68.85.46](http://80.68.85.46)
+Wren served [kitenet.net](http://kitenet.net/) and associated domains, and was
+my main server. Now retired.

update
diff --git a/links/personal.mdwn b/links/personal.mdwn
index 1c66d9d..bef4558 100644
--- a/links/personal.mdwn
+++ b/links/personal.mdwn
@@ -4,6 +4,3 @@
 [[pics]]  
 [[contact_me|contact]]  
 [[todo]]
-
-Funded in 2014 via  
-[campaign.joeyh.name](https://campaign.joeyh.name/)!

add propellor demo
diff --git a/talks.mdwn b/talks.mdwn
index 23833d3..5309da9 100644
--- a/talks.mdwn
+++ b/talks.mdwn
@@ -89,3 +89,5 @@ by others.
  * "Debian Through a Functional Lens"
     - [[slidish things|debconf-14-debian-through-a-functional-lens]]
     - [video](http://meetings-archive.debian.net/pub/debian-meetings/2014/debconf14/webm/seeing_Debian_through_a_Functional_lens.webm)
+ * "Propellor demo"
+    - [video](http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm)

add video link
diff --git a/boxen.mdwn b/boxen.mdwn
index 69bc61f..14ab7fd 100644
--- a/boxen.mdwn
+++ b/boxen.mdwn
@@ -32,10 +32,10 @@ Mostly birds.
 * [[dodo]] {*}
 * ostrich
 * [[stork]]
-* [[wren]] {*}
+* [[wren]]
 * bluebird
-* [[hydra]] {*}
-* [[box]] {*}
+* [[hydra]]
+* [[box]]
 * [[finch]]
 * [[pell]] {*}
 * orca
diff --git a/talks.mdwn b/talks.mdwn
index 2387357..23833d3 100644
--- a/talks.mdwn
+++ b/talks.mdwn
@@ -88,3 +88,4 @@ by others.
 
  * "Debian Through a Functional Lens"
     - [[slidish things|debconf-14-debian-through-a-functional-lens]]
+    - [video](http://meetings-archive.debian.net/pub/debian-meetings/2014/debconf14/webm/seeing_Debian_through_a_Functional_lens.webm)

Added a comment: What lenovo model do you use ?
diff --git a/blog/entry/laptop_death/comment_1_02b9da5e7ea80a1b39aeb01accd91aac._comment b/blog/entry/laptop_death/comment_1_02b9da5e7ea80a1b39aeb01accd91aac._comment
new file mode 100644
index 0000000..ffc315a
--- /dev/null
+++ b/blog/entry/laptop_death/comment_1_02b9da5e7ea80a1b39aeb01accd91aac._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="beaufils"
+ ip="109.190.78.125"
+ subject="What lenovo model do you use ?"
+ date="2014-09-13T20:58:12Z"
+ content="""
+I am on a process to change my laptop and it would be helpful to know what laptop debian guys are using and/or recommanding.
+"""]]

Added a comment: Good idea.
diff --git a/blog/entry/propellor_is_d-i_2.0/comment_2_f174ec3b06b9031a3bdedc49aed3d4f9._comment b/blog/entry/propellor_is_d-i_2.0/comment_2_f174ec3b06b9031a3bdedc49aed3d4f9._comment
new file mode 100644
index 0000000..532c91e
--- /dev/null
+++ b/blog/entry/propellor_is_d-i_2.0/comment_2_f174ec3b06b9031a3bdedc49aed3d4f9._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="DaveA"
+ ip="67.41.199.133"
+ subject="Good idea."
+ date="2014-09-09T19:07:55Z"
+ content="""
+I think this is a good idea.  I've thought for a long time that I should start using a configurator (puppet, propellor, something) to manage my personal machines.  Well, I haven't had to do a fresh install and the learning curve has been too high for the time available.
+
+But if the system comes with propellor control out of the box that would make it easy to continue down that path.  I'd just have to learn how to manage with propellor rather than the manual tools.
+
+Thanks!
+Dave
+"""]]

add news item for filters 2.52
diff --git a/code/filters/news/version_2.45.mdwn b/code/filters/news/version_2.45.mdwn
deleted file mode 100644
index 25bf691..0000000
--- a/code/filters/news/version_2.45.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-filters 2.45 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Use debhelper v7; rules file minimisation to 3 lines."""]]
\ No newline at end of file
diff --git a/code/filters/news/version_2.52.mdwn b/code/filters/news/version_2.52.mdwn
new file mode 100644
index 0000000..828febd
--- /dev/null
+++ b/code/filters/news/version_2.52.mdwn
@@ -0,0 +1,4 @@
+filters 2.52 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Rename lolcat to LOLCAT to avoid collision with a fine rainbow colored cat.
+     Closes: #[760910](http://bugs.debian.org/760910)"""]]
\ No newline at end of file

Added a comment: Screenshots?
diff --git a/blog/entry/propellor_is_d-i_2.0/comment_1_6f9e6aca67ebfe24df5777d939849ab9._comment b/blog/entry/propellor_is_d-i_2.0/comment_1_6f9e6aca67ebfe24df5777d939849ab9._comment
new file mode 100644
index 0000000..a78ee4c
--- /dev/null
+++ b/blog/entry/propellor_is_d-i_2.0/comment_1_6f9e6aca67ebfe24df5777d939849ab9._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="foobar"
+ ip="178.3.119.122"
+ subject="Screenshots?"
+ date="2014-09-08T15:58:20Z"
+ content="""
+Hi Joey,
+
+please show screenshots.
+
+Greetings,
+foobar
+"""]]

oh yeah and
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
index e76de6b..9e9f090 100644
--- a/blog/entry/propellor_is_d-i_2.0.mdwn
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -58,6 +58,9 @@ main = Installer.main
 	& User.loginStarts "propellor --installer"
 """]]
 
+* Propellor has a nice display of what it's doing so there is **no freaking
+  progress bar**.
+
 Well, now I know where propellor might end up if I felt like spending a month
 and adding a few thousand lines of code to it.
 

typo
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
index dc388a7..e76de6b 100644
--- a/blog/entry/propellor_is_d-i_2.0.mdwn
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -36,7 +36,7 @@ main :: IO
 main = Installer.main
 	& Installer.partition First "/boot" Ext3 (MiB 256)
 	& Installer.partition Next "/" Ext4 (GiB 5)
-	& Installer.partition Next "/" Ext4 FreeSpace
+	& Installer.partition Next "/home" Ext4 FreeSpace
 	& Installer.grubBoots "hd0"
 	& os (System (Debian Stable) "amd64")
 	& Apt.stdSourcesList

typoen
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
index b3f2ba5..dc388a7 100644
--- a/blog/entry/propellor_is_d-i_2.0.mdwn
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -15,7 +15,7 @@ I'm as suprised as you are, but consider this design:
 
 * Really, no other questions. Not even user name/password! The installed system
   will only allow login via the same method that was used to install it.
-  So an locally installed system will accept console/X login with no
+  So a locally installed system will accept console/X login with no
   password and then a forced password change. Or a system installed via
   ssh will only allow login using the same ssh key that was used to install it.
 
@@ -28,7 +28,7 @@ I'm as suprised as you are, but consider this design:
 
 * Users who want to configure installation in any way write down
   properties of system using a simple propellor config file. I suppose
-  some people still use more than one partion or gnome or some such
+  some people still use more than one partiton or gnome or some such
   customization, so they'd use:
 
 [[!format haskell """

layout
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
index 22b166c..b3f2ba5 100644
--- a/blog/entry/propellor_is_d-i_2.0.mdwn
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -7,7 +7,7 @@ I'm as suprised as you are, but consider this design:
   [[code/propellor]] + web browser.
 
 * Entire installation UI consists of a web-based (and entirely pictographic
-  + prompt based, so does not need to be translated) selection of the
+  and prompt based, so does not need to be translated) selection of the
   installation target.
 
 * Installation target can be local disk, remote system via ssh

blog update
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
new file mode 100644
index 0000000..22b166c
--- /dev/null
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -0,0 +1,64 @@
+I think I've been writing the second system to replace d-i with in my
+spare time for a couple months, and never noticed.
+
+I'm as suprised as you are, but consider this design:
+
+* Installation system consists of debian live + haskell + 
+  [[code/propellor]] + web browser.
+
+* Entire installation UI consists of a web-based (and entirely pictographic
+  + prompt based, so does not need to be translated) selection of the
+  installation target.
+
+* Installation target can be local disk, remote system via ssh
+  (wiping out crufty hacked-up pre-installed debian), local VM, live ISO, etc.
+
+* Really, no other questions. Not even user name/password! The installed system
+  will only allow login via the same method that was used to install it.
+  So an locally installed system will accept console/X login with no
+  password and then a forced password change. Or a system installed via
+  ssh will only allow login using the same ssh key that was used to install it.
+
+* The entire installation process consists of a disk format, followed by
+  debootstrap, followed by running propellor in the target system.
+  This also means that the installed system includes a propellor config file
+  which now describes the properties of the system as installed (so can be
+  edited to tweak the installation, or reused as starting point for next
+  installation).
+
+* Users who want to configure installation in any way write down
+  properties of system using a simple propellor config file. I suppose
+  some people still use more than one partion or gnome or some such
+  customization, so they'd use:
+
+[[!format haskell """
+main :: IO
+main = Installer.main
+	& Installer.partition First "/boot" Ext3 (MiB 256)
+	& Installer.partition Next "/" Ext4 (GiB 5)
+	& Installer.partition Next "/" Ext4 FreeSpace
+	& Installer.grubBoots "hd0"
+	& os (System (Debian Stable) "amd64")
+	& Apt.stdSourcesList
+	& Apt.installed ["task-gnome-desktop"]
+"""]]
+
+* The installation system is itself built using propellor.
+  A free feature given the above design, so basically all it will take to
+  build an installation iso is this code:
+
+[[!format haskell """
+main :: IO
+main = Installer.main
+	& Installer.target CdImage "installer.iso"
+	& os (System (Debian Stable) "amd64")
+	& Apt.stdSourcesList
+	& Apt.installed ["task-xfce-desktop", "ghc", "propellor"]
+	& User.autoLogin "root"
+	& User.loginStarts "propellor --installer"
+"""]]
+
+Well, now I know where propellor might end up if I felt like spending a month
+and adding a few thousand lines of code to it.
+
+[[!meta title="propellor is d-i 2.0"]]

add news item for etckeeper 1.14
diff --git a/code/etckeeper/news/version_1.14.mdwn b/code/etckeeper/news/version_1.14.mdwn
new file mode 100644
index 0000000..e5789d3
--- /dev/null
+++ b/code/etckeeper/news/version_1.14.mdwn
@@ -0,0 +1,9 @@
+etckeeper 1.14 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Handle failure to commit in post-install, pre-install by showing a
+     warning, rather than propigating the error to apt.
+     This avoids breaking the apt run when eg, git is misconfigured and
+     cannot commit.
+     pre-install already did this when it was able to use debconf to display a
+     message, but now debconf is not used, and it always behaves this way.
+     Closes: #[760011](http://bugs.debian.org/760011)"""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.9.mdwn b/code/etckeeper/news/version_1.9.mdwn
deleted file mode 100644
index 800a8d5..0000000
--- a/code/etckeeper/news/version_1.9.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-etckeeper 1.9 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix git update-ignore syntax. Closes: #[721873](http://bugs.debian.org/721873)"""]]
\ No newline at end of file

add news item for github-backup 1.20140831
diff --git a/code/github-backup/news/version_1.20140704.mdwn b/code/github-backup/news/version_1.20140704.mdwn
deleted file mode 100644
index f645de0..0000000
--- a/code/github-backup/news/version_1.20140704.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-github-backup 1.20140704 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Avoid making signed commits when committing to the github-backup branch
-     and the user has commit.gpgsign=true.
-     Closes: #[753720](http://bugs.debian.org/753720)
-   * Various updates to internal git and utility libraries shared with git-annex."""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20140831.mdwn b/code/github-backup/news/version_1.20140831.mdwn
new file mode 100644
index 0000000..9833a15
--- /dev/null
+++ b/code/github-backup/news/version_1.20140831.mdwn
@@ -0,0 +1,3 @@
+github-backup 1.20140831 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix build with github 0.10."""]]
\ No newline at end of file

add news item for filters 2.50
diff --git a/code/filters/news/version_2.44.mdwn b/code/filters/news/version_2.44.mdwn
deleted file mode 100644
index ec23268..0000000
--- a/code/filters/news/version_2.44.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-filters 2.44 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Work around dpkg bug #476138. Closes: #[475979](http://bugs.debian.org/475979)
-   * Use CC consistently."""]]
\ No newline at end of file
diff --git a/code/filters/news/version_2.50.mdwn b/code/filters/news/version_2.50.mdwn
new file mode 100644
index 0000000..72a778b
--- /dev/null
+++ b/code/filters/news/version_2.50.mdwn
@@ -0,0 +1,4 @@
+filters 2.50 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Reorganize some code to support building with clang.
+     Closes: #[758450](http://bugs.debian.org/758450) Thanks, Alexander."""]]
\ No newline at end of file

add news item for alien 8.92
diff --git a/code/alien/news/version_8.86.mdwn b/code/alien/news/version_8.86.mdwn
deleted file mode 100644
index b366085..0000000
--- a/code/alien/news/version_8.86.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-alien 8.86 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Filter out illegal characters in version number when building a deb.
-     Closes: #[648531](http://bugs.debian.org/648531)"""]]
\ No newline at end of file
diff --git a/code/alien/news/version_8.92.mdwn b/code/alien/news/version_8.92.mdwn
new file mode 100644
index 0000000..fc8a3c1
--- /dev/null
+++ b/code/alien/news/version_8.92.mdwn
@@ -0,0 +1,4 @@
+alien 8.92 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Remove suggests for lsb-rpm, which no longer exists.
+     Closes: #[756873](http://bugs.debian.org/756873)"""]]
\ No newline at end of file

final
diff --git a/talks/debconf-14-debian-through-a-functional-lens.otl b/talks/debconf-14-debian-through-a-functional-lens.otl
index 9bdec13..3993291 100644
--- a/talks/debconf-14-debian-through-a-functional-lens.otl
+++ b/talks/debconf-14-debian-through-a-functional-lens.otl
@@ -171,8 +171,6 @@ comparing debian/control types
 			result not based on /etc/lsb_release or phase of the moon
 		X language lock-in
 			but language lock-in has not been a problem for debian/rules ...
-    
-	... convincing or not, it's worth thinking about!
 
 nixos exploration
 	filesystem layout

update
diff --git a/talks/debconf-14-debian-through-a-functional-lens.otl b/talks/debconf-14-debian-through-a-functional-lens.otl
index fa6645b..9bdec13 100644
--- a/talks/debconf-14-debian-through-a-functional-lens.otl
+++ b/talks/debconf-14-debian-through-a-functional-lens.otl
@@ -95,7 +95,7 @@ a motivating example (haskell-dav)
 		Debian Haskell Group maintains 844+ of these
 		Debian perl Group: 3327+!
 		... that's 20% of the source packages in Debian
-		... and there are probably more
+		... and there are more
 
 nixos equivalent
 	;	# This file was auto-generated by cabal2nix. Please do NOT edit manually!
@@ -153,7 +153,7 @@ comparing debian/control types
 		♥ simple
 		X redundant boilerplate
 		X inflexible
-	control :: IO Control                 -- executable control file
+	control :: IO Control                 -- executable control file         
 		♥ avoids boilerplate
 		♥ no language lock-in
 		X cannot extract Control data w/o running arbitrary code
@@ -164,7 +164,7 @@ comparing debian/control types
 		♥ avoids boilerplate
 		♥ no language lock-in
 		X "this file was auto-generated. Please do NOT edit manually"
-	control :: UpstreamSource -> Control  -- control file as functional code
+	control :: UpstreamSource -> Control  -- control file as functional code 
 		♥ avoids boilerplate
 		♥ purely functional safety
 			control file generates same output given same inputs
@@ -174,7 +174,7 @@ comparing debian/control types
     
 	... convincing or not, it's worth thinking about!
 
-nixos demo
+nixos exploration
 	filesystem layout
 		ldd $(which bash)
 		which bash
@@ -220,6 +220,10 @@ a progression: IO to declarative to FP
 		manual                  -- IO
 		debhelper autoscripts   -- sorta declarative, still lots of IO
 		triggers                -- some declarative, some IO
+		... FP?
+			talked with Russ yesterday about eliminating
+			more maintainer scripts, he suggested an EDSL
+			to simplify debconf config scripts
 	config files
 		just a static file      -- declarative (mostly)
 		debconf generated file  -- IO (oops!)
@@ -227,7 +231,7 @@ a progression: IO to declarative to FP
 	debian/copyright  (a bit of a stretch)
 		prose
 			"This package was downloaded in 1997 from sunsite
-			and it is licensed under the GPL by copyright holder ESR."
+			and it is GPL licensed by ESR."
 		structured
 			Copyright: 2009-2013 J. Random Hacker
 			License: GPL-3+
@@ -237,5 +241,5 @@ a progression: IO to declarative to FP
 	OS configuration
 		apt-get install         -- IO
 		puppet/etc				-- declarative-ish + IO
-		docker					-- declarative (dockerfile) / static (hash)
+		docker					-- declarative-ish (dockerfile)
 		nixos					-- FP

Added a comment: Why another dot directory?
diff --git a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo/comment_1_15a277f48a6ec2c3851978bfd4154250._comment b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo/comment_1_15a277f48a6ec2c3851978bfd4154250._comment
new file mode 100644
index 0000000..d5b14be
--- /dev/null
+++ b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo/comment_1_15a277f48a6ec2c3851978bfd4154250._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mirabilos"
+ ip="2a01:238:4200:4342:321e:80ff:fe12:4223"
+ subject="Why another dot directory?"
+ date="2014-08-26T15:46:08Z"
+ content="""
+This seems to be the trend, polluting the home directory more and more. Why can't propellor use the XDG basedir specification to have a sensible root directory for its configs?
+"""]]

typo
diff --git a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
index ceeab3f..c5b739e 100644
--- a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
+++ b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
@@ -73,6 +73,6 @@ It would perhaps not be hard to get from here to a full git-backed version of
 ucf. Note that the Debian binary package doesn't *have* to ship a git
 repisitory, it can just as easily ship the current version of the config files
 somewhere in /usr, and check them into a new empty repository as part of the
-generation of the upsteam/master branch.
+generation of the upstream/master branch.
 
 [[!meta title="using a debian package as the remote for a local config repo"]]

blog update
diff --git a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
new file mode 100644
index 0000000..ceeab3f
--- /dev/null
+++ b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
@@ -0,0 +1,78 @@
+Today I did something interesting with the Debian packaging for
+[[code/propellor]], which seems like it could
+be a useful technique for other Debian packages as well.
+
+Propellor is configured by a directory, which is maintained as a local git
+repository. In propellor's case, it's `~/.propellor/`. This contains a lot
+of haskell files, in fact the entire source code of propellor! That's
+really unusual, but I think this can be generalized to any package whose
+configuration is maintained in its own git repository on the user's
+system. For now on, I'll refer to this as the config repo.
+
+The config repo is set up the first time a user runs
+propellor. But, until now, I didn't provide an easy way to update
+the config repo when the propellor package was updated. Nothing would
+break, but the old version would be used until the user updated it
+themselves somehow (probably by pulling from a git repository over the
+network, bypassing apt's signature validation).
+
+So, what I wanted was a way to update the config repo, merging in any
+changes from the new version of the Debian package, while preserving the
+user's local modifications. Ideally, the user could just run `git merge
+upstream/master`, where the upstream repo was included in the
+Debian package.
+
+But, that can't work! The Debian package can't reasonably include the
+full git repository of propellor with all its history. So, any git repository
+included in the Debian binary package would need to be a synthetic one, that
+only contains probably one commit that is not connected to anything else. Which
+means that if the config repo was cloned from that repo in version 1.0, then
+when version 1.1 came around, git would see no common parent when merging 1.1
+into the config repo, and the merge would fail horribly.
+
+To solve this, let's assume that the config repo's master branch has
+a parent commit that can be identified, somehow, as coming from a past
+version of the Debian package. It doesn't matter which version, although
+the last one merged with will be best. (The easy way to do this is to set
+`refs/heads/upstream/master` to point to it when creating the config repo.)
+
+Once we have that parent commit, we have three things:
+
+1. The current content of the config repo.
+2. The content from some old version of the Debian package.
+3. The new content of the Debian package.
+
+Now git can be used to merge #3 onto #2, with -Xtheirs, so the result
+is a git commit with parents of #3 and #2, and content of #3. (This can be
+done using a temporary clone of the config repo to avoid touching its contents.)
+
+Such a git commit can be merged into the config repo, without any conflicts
+other than those the user might have caused with their own edits.
+
+So, propellor will tell the user when updates are available, and they can 
+simply run `git merge upstream/master` to get them. The resulting history
+looks like this:
+
+<pre>
+* Merge remote-tracking branch 'upstream/master'
+|\  
+| * merging upstream version
+| |\  
+| | * upstream version
+* | user change
+|/  
+* upstream version
+</pre>
+
+So, generalizing this, if a package has a lot of config files, and 
+creates a git repository containing them when the user uses it
+(or automatically when it's installed), this method can be used to provide
+an easily mergable branch that tracks the files as distributed with the package.
+
+It would perhaps not be hard to get from here to a full git-backed version of
+ucf. Note that the Debian binary package doesn't *have* to ship a git
+repisitory, it can just as easily ship the current version of the config files
+somewhere in /usr, and check them into a new empty repository as part of the
+generation of the upsteam/master branch.
+
+[[!meta title="using a debian package as the remote for a local config repo"]]

add news item for debhelper 9.20140817
diff --git a/code/debhelper/news/version_9.20131227.mdwn b/code/debhelper/news/version_9.20131227.mdwn
deleted file mode 100644
index 517e9ea..0000000
--- a/code/debhelper/news/version_9.20131227.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-debhelper 9.20131227 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * [ Guillem Jover ]
-   * dh\_shlibdeps: Use new dpkg-shlibdeps -l option instead of LD\_LIBRARY\_PATH
-     Closes: #[717505](http://bugs.debian.org/717505)
-   * Depend on dpkg-dev (&gt;= 1.17.0), the version that introduced
-     dpkg-shlibdeps -l option."""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20140817.mdwn b/code/debhelper/news/version_9.20140817.mdwn
new file mode 100644
index 0000000..c3b7589
--- /dev/null
+++ b/code/debhelper/news/version_9.20140817.mdwn
@@ -0,0 +1,6 @@
+debhelper 9.20140817 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added Portuguese translation of the man pages, by Américo Monteiro.
+     Closes: #[758043](http://bugs.debian.org/758043)
+   * Updated German translation from Chris Leick.
+     Closes: #[735610](http://bugs.debian.org/735610)"""]]
\ No newline at end of file
diff --git a/talks/debconf-14-debian-through-a-functional-lens.otl b/talks/debconf-14-debian-through-a-functional-lens.otl
index 1c64a13..fa6645b 100644
--- a/talks/debconf-14-debian-through-a-functional-lens.otl
+++ b/talks/debconf-14-debian-through-a-functional-lens.otl
@@ -156,29 +156,22 @@ comparing debian/control types
 	control :: IO Control                 -- executable control file
 		♥ avoids boilerplate
 		♥ no language lock-in
-		♥ supports package-specific code
 		X cannot extract Control data w/o running arbitrary code
 			seems to completely rule this out!
 	gencontrol :: IO ControlFie           -- pre-generate control file       
 		♥ already available
 			see "debdry - Debian Don't Repeat Yourself"
 		♥ avoids boilerplate
-		X cannot include package-specific code
 		♥ no language lock-in
 		X "this file was auto-generated. Please do NOT edit manually"
 	control :: UpstreamSource -> Control  -- control file as functional code
 		♥ avoids boilerplate
-		♥ supports package-specific code
 		♥ purely functional safety
 			control file generates same output given same inputs
 			result not based on /etc/lsb_release or phase of the moon
 		X language lock-in
 			but language lock-in has not been a problem for debian/rules ...
     
-	why package-specific code?
-		* extract Description or Depends from info in the Source
-		* generate different Packages for different OS builds (ex: emdebian)
-
 	... convincing or not, it's worth thinking about!
 
 nixos demo

update
diff --git a/talks/debconf-14-debian-through-a-functional-lens.otl b/talks/debconf-14-debian-through-a-functional-lens.otl
index 879f2f8..1c64a13 100644
--- a/talks/debconf-14-debian-through-a-functional-lens.otl
+++ b/talks/debconf-14-debian-through-a-functional-lens.otl
@@ -125,7 +125,7 @@ nixos equivalent
 	;	})
 	... not exactly ideal, but a lot better
 
-dh-control dream equivalent (take 1)
+debian/control dream equivalent (take 1)
 	;	{ haskell_libraries }
 	;	Section: web
 	;	Standards-Version: 3.9.5
@@ -136,7 +136,7 @@ dh-control dream equivalent (take 1)
 	;	  hdav currently only supports copying a file and associated WebDAV
 	;	  properties from one URL to another.
 
-dh-control dream equivalent (take 2)
+debian/control dream equivalent (take 2)
 	;	-- valid haskell code this time
 	;	source = haskell_source 
 	;		& section Web
@@ -148,84 +148,38 @@ dh-control dream equivalent (take 2)
 	;			, "properties from one URL to another."
 	;			]
 
-dreaming in types
-	Digression: Understanding simple Haskell type signatures
-		func :: Type      -- indicates the type of a function
-		Foo -> Bar        -- a function from type Foo to type Bar
-		Foo -> Bar -> Baz -- a function from a Foo and a Bar to a Baz
-		(Foo, Bar)        -- tuple
-		Set Foo           -- a set of Foo
-		Foo -> IO x       -- a function that take a foo
-		                  -- and returns an IO action of type x
-		.. if I went any further I'd get monad tomatoes tossed at me
-	
-	Current
-	; control :: ControlFile
-	; rules :: ControlFile -> DebianFiles -> UpstreamSource 
-	;          -> IO (SourcePkg, Set DebPkg)
-    
-	Pure functional version
-	; rules :: Control     -> DebianFiles -> UpstreamSource
-	;          -> IO (SourcePkg, Set DebPkg)
-	; data Control = Control CommonControl (Set PackageControl)
-	; control :: UpstreamSource -> Control
-    
-	Which type is better?
+comparing debian/control types
 	control :: ControlFile                -- current                         
 		♥ simple
-		X redundant / boilerplate
+		X redundant boilerplate
 		X inflexible
-	gencontrol :: IO ControlFIe           -- pre-generate control file       
+	control :: IO Control                 -- executable control file
+		♥ avoids boilerplate
+		♥ no language lock-in
+		♥ supports package-specific code
+		X cannot extract Control data w/o running arbitrary code
+			seems to completely rule this out!
+	gencontrol :: IO ControlFie           -- pre-generate control file       
 		♥ already available
 			see "debdry - Debian Don't Repeat Yourself"
-		♥ no boilerplate
+		♥ avoids boilerplate
+		X cannot include package-specific code
 		♥ no language lock-in
 		X "this file was auto-generated. Please do NOT edit manually"
 	control :: UpstreamSource -> Control  -- control file as functional code
-		♥ beautiful?
-		♥ maximum flexibility
-			can do arbitrarily complicated calculation
-			could generate different packages for different OS builds
+		♥ avoids boilerplate
+		♥ supports package-specific code
 		♥ purely functional safety
-			control file generates same outputs given same inputs
+			control file generates same output given same inputs
 			result not based on /etc/lsb_release or phase of the moon
-		♥ no boilerplate
-			can refactor out of control file into libraries
-		X language lock-in?
+		X language lock-in
+			but language lock-in has not been a problem for debian/rules ...
+    
+	why package-specific code?
+		* extract Description or Depends from info in the Source
+		* generate different Packages for different OS builds (ex: emdebian)
 
-a progression: IO to declarative to FP
-	debian/rules
-		manual                  -- IO                   (cp foo bar)
-		debhelper               -- IO, some declarative (debian/install etc)
-		dh                      -- declarative, some IO (override_dh_auto_*)
-		... FP?
-			many debhelper feature requests are now about the
-			limits of declarative configuration
-				"debian/install is too inflexible"
-	maintainer scripts
-		manual                  -- IO
-		debhelper autoscripts   -- sorta declarative, still lots of IO
-		triggers                -- some declarative, some IO
-	config files
-		just a static file      -- declarative (mostly)
-		debconf generated file  -- IO (oops!)
-		file.d					-- FP-ish (Set File -> File)
-	debian/copyright  (a bit of a stretch)
-		prose
-			"This package was downloaded in 1997 from sunsite
-			and it is licensed under the GPL by copyright holder ESR."
-		structured
-			Copyright: 2009-2013 J. Random Hacker
-			License: GPL-3+
-		almost programming
-			"License: $foo with $bar exception"	
-			"License: $X or $Y, and $Z"
-		(BTW, debian/changelog followed a similar path)
-	OS maintenance
-		apt-get install         -- IO
-		puppet/etc				-- declarative-ish
-		docker					-- declarative (dockerfile) / static (hash)
-		nixos					-- FP
+	... convincing or not, it's worth thinking about!
 
 nixos demo
 	filesystem layout
@@ -244,20 +198,51 @@ nixos demo
 		nix-env --rollback
 
 functional runtime
-	: We're seen how OS building/maintenance can move toward
-	: functional programming.
-	
-	: Corollary: The running OS is like the runtime of a functional program.
+	: Increasingly, the running OS is like the runtime
+	: of a functional program.
 	
 	immutable data
 		git commits
 		docker images
 		nix derivations
 	copy on write
-		git tree delta compression
+		git delta compression
 		docker aufs layers
 		nix generations
 	garbage collection
 		git gc
 		docker images -f dangling=true # or something like that
 		nix-env --delete-generations; nix-collect-garbage
+
+a progression: IO to declarative to FP
+	debian/rules
+		manual                  -- IO                   (cp foo bar)
+		debhelper               -- IO, some declarative (debian/install etc)
+		dh                      -- declarative, some IO (override_dh_auto_*)
+		... FP?
+			many debhelper feature requests are now about the
+			limits of declarative configuration
+				"debian/install is too inflexible"
+	maintainer scripts
+		manual                  -- IO
+		debhelper autoscripts   -- sorta declarative, still lots of IO
+		triggers                -- some declarative, some IO
+	config files
+		just a static file      -- declarative (mostly)
+		debconf generated file  -- IO (oops!)
+		file.d					-- FP-ish (Set File -> File)
+	debian/copyright  (a bit of a stretch)
+		prose
+			"This package was downloaded in 1997 from sunsite
+			and it is licensed under the GPL by copyright holder ESR."
+		structured
+			Copyright: 2009-2013 J. Random Hacker
+			License: GPL-3+
+		almost programming
+			"License: $foo with $bar exception"	
+			"License: $X or $Y, and $Z"
+	OS configuration
+		apt-get install         -- IO
+		puppet/etc				-- declarative-ish + IO
+		docker					-- declarative (dockerfile) / static (hash)
+		nixos					-- FP