diff --git a/doc/release-notes/rl-1809.adoc b/doc/release-notes/rl-1809.adoc
new file mode 100644
index 00000000..b363704e
--- /dev/null
+++ b/doc/release-notes/rl-1809.adoc
@@ -0,0 +1,4 @@
+[[sec-release-18.09]]
+== Release 18.09
+
+The 18.09 release branch became the stable branch in September, 2018.
diff --git a/doc/release-notes/rl-1809.xml b/doc/release-notes/rl-1809.xml
deleted file mode 100644
index e19a4776..00000000
--- a/doc/release-notes/rl-1809.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
- Release 18.09
-
-
- The 18.09 release branch became the stable branch in September, 2018.
-
-
diff --git a/doc/release-notes/rl-1903.adoc b/doc/release-notes/rl-1903.adoc
new file mode 100644
index 00000000..6dfdc67f
--- /dev/null
+++ b/doc/release-notes/rl-1903.adoc
@@ -0,0 +1,59 @@
+[[sec-release-19.03]]
+== Release 19.03
+
+The 19.03 release branch became the stable branch in April, 2019.
+
+[[sec-release-19.03-highlights]]
+=== Highlights
+:opt-home-file-source: opt-home.file._name__.source
+
+This release has the following notable changes:
+
+* The <<{opt-home-file-source}>> option now allows source files to be
+hidden, that is, having a name starting with the `.` character. It
+also allows the source file name to contain characters not typically
+allowed for Nix store paths. For example, your configuration can now
+contain things such as
++
+[source,nix]
+----
+home.file."my file".source = ./. + "/file with spaces!";
+----
+
+* The type used for the systemd unit options under
+<>, <>, etc. has
+been changed to offer more robust merging of configurations. If you
+don't override values within systemd units then you are not affected
+by this change. Unfortunately, if you do override unit values you may
+encounter errors.
++
+In particular, if you get an error saying that a ``unique option'' is
+``defined multiple times'' then you need to use the
+https://nixos.org/nixos/manual/#sec-option-definitions-setting-priorities[`mkForce`]
+function. For example,
++
+[source,nix]
+----
+systemd.user.services.foo.Service.ExecStart = "/foo/bar";
+----
++
+becomes
++
+[source,nix]
+----
+systemd.user.services.foo.Service.ExecStart = lib.mkForce "/foo/bar";
+----
++
+We had to make this change because the old merging was causing too
+many confusing situations for people.
+
+[[sec-release-19.03-state-version-changes]]
+=== State Version Changes
+
+The state version in this release includes the changes below. These
+changes are only active if the <> option is set
+to ``19.03'' or later.
+
+* There is now an option <> that defaults
+to `false`. Before the module would be active if the
+<> option was non-empty.
diff --git a/doc/release-notes/rl-1903.xml b/doc/release-notes/rl-1903.xml
deleted file mode 100644
index 2c666da7..00000000
--- a/doc/release-notes/rl-1903.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-
- Release 19.03
-
-
- The 19.03 release branch became the stable branch in April, 2019.
-
-
-
- Highlights
-
-
- This release has the following notable changes:
-
-
-
-
-
- The now allows source files
- to be hidden, that is, having a name starting with the
- . character. It also allows the source file name to
- contain characters not typically allowed for Nix store paths. For example,
- your configuration can now contain things such as
-
-home.file."my file".source = ./. + "/file with spaces!";
-
-
-
-
-
- The type used for the systemd unit options under
- ,
- , etc. has been changed to offer more
- robust merging of configurations. If you don't override values within
- systemd units then you are not affected by this change. Unfortunately, if
- you do override unit values you may encounter errors.
-
-
- In particular, if you get an error saying that a unique
- option is defined multiple times then you need to
- use the
- mkForce
- function. For example,
-
-systemd.user.services.foo.Service.ExecStart = "/foo/bar";
-
- becomes
-
-systemd.user.services.foo.Service.ExecStart = lib.mkForce "/foo/bar";
-
- We had to make this change because the old merging was causing too many
- confusing situations for people.
-
-
-
-
-
-
- State Version Changes
-
-
- The state version in this release includes the changes below. These changes
- are only active if the option is set to
- "19.03" or later.
-
-
-
-
-
- There is now an option that
- defaults to false. Before the module would be active if
- the option was non-empty.
-
-
-
-
-
diff --git a/doc/release-notes/rl-1909.adoc b/doc/release-notes/rl-1909.adoc
new file mode 100644
index 00000000..a33d6297
--- /dev/null
+++ b/doc/release-notes/rl-1909.adoc
@@ -0,0 +1,19 @@
+[[sec-release-19.09]]
+== Release 19.09 (unreleased)
+
+This is the current unstable branch and the information in this
+section is therefore not final.
+
+[[sec-release-19.09-state-version-changes]]
+=== State Version Changes
+
+The state version in this release includes the changes below. These
+changes are only active if the `home.stateVersion` option is set to
+"19.09" or later.
+
+* The <> option now expects a wrapped
+ Firefox package and defaults to `pkgs.firefox`.
+
+* The options <> and
+ <> now default to `null`, which indicates
+ that the system value should be used.
diff --git a/doc/release-notes/rl-1909.xml b/doc/release-notes/rl-1909.xml
deleted file mode 100644
index 99a2f27c..00000000
--- a/doc/release-notes/rl-1909.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
- Release 19.09 (unreleased)
-
-
- This is the current unstable branch and the information in this section is
- therefore not final.
-
-
-
- State Version Changes
-
-
- The state version in this release includes the changes below. These changes
- are only active if the option is set to
- "19.09" or later.
-
-
-
-
-
- The option now expects a wrapped
- Firefox package and defaults to pkgs.firefox.
-
-
-
-
- The options and
- now default to
- null, which indicates that the system value should be
- used.
-
-
-
-
-