From 45abf3d38a2b51c00c347cab6950f3734e023bba Mon Sep 17 00:00:00 2001
From: Robert Helgesson <robert@rycee.net>
Date: Sun, 2 Feb 2020 00:39:17 +0100
Subject: [PATCH 1/3] Apply `nixfmt` on many files

---
 default.nix                                   |  11 +-
 doc/default.nix                               |  38 +-
 home-manager/install.nix                      | 115 +++---
 modules/lib/dag.nix                           |  45 +--
 modules/lib/shell.nix                         |   2 +-
 modules/lib/stdlib-extended.nix               |   8 +-
 modules/lib/strings.nix                       |  13 +-
 modules/lib/types-dag.nix                     |  92 +++--
 modules/lib/zsh.nix                           |  16 +-
 modules/misc/fontconfig.nix                   |  12 +-
 modules/misc/lib.nix                          |   2 +-
 modules/misc/numlock.nix                      |  12 +-
 modules/misc/pam.nix                          |  14 +-
 modules/misc/qt.nix                           |  28 +-
 modules/misc/xdg-mime-apps.nix                |  18 +-
 modules/misc/xdg-mime.nix                     |   4 +-
 modules/misc/xdg-user-dirs.nix                |  35 +-
 modules/programs/alacritty.nix                |  11 +-
 modules/programs/alot-accounts.nix            |  25 +-
 modules/programs/astroid-accounts.nix         |   7 +-
 modules/programs/astroid.nix                  |  80 ++---
 modules/programs/autorandr.nix                | 202 ++++++-----
 modules/programs/bat.nix                      |  13 +-
 modules/programs/beets.nix                    |  19 +-
 modules/programs/broot.nix                    |  97 +++--
 modules/programs/browserpass.nix              | 115 +++---
 modules/programs/chromium.nix                 | 103 +++---
 .../command-not-found/command-not-found.nix   |  14 +-
 modules/programs/direnv.nix                   |  50 ++-
 modules/programs/eclipse.nix                  |  14 +-
 modules/programs/feh.nix                      |  45 ++-
 modules/programs/fzf.nix                      |  38 +-
 modules/programs/getmail-accounts.nix         |   4 +-
 modules/programs/getmail.nix                  |  47 ++-
 modules/programs/git.nix                      | 248 ++++++-------
 modules/programs/gnome-terminal.nix           | 338 ++++++++----------
 modules/programs/go.nix                       |  44 +--
 modules/programs/home-manager.nix             |  11 +-
 modules/programs/htop.nix                     |  79 +++-
 modules/programs/info.nix                     |  31 +-
 modules/programs/jq.nix                       |  26 +-
 modules/programs/kakoune.nix                  | 150 +++++---
 modules/programs/keychain.nix                 |  18 +-
 modules/programs/lsd.nix                      |   6 +-
 modules/programs/matplotlib.nix               |  25 +-
 modules/programs/mbsync-accounts.nix          |  12 +-
 modules/programs/mbsync.nix                   | 180 ++++------
 modules/programs/mercurial.nix                |  68 ++--
 modules/programs/mpv.nix                      |  57 ++-
 modules/programs/msmtp-accounts.nix           |   3 +-
 modules/programs/msmtp.nix                    |  54 ++-
 modules/programs/neomutt-accounts.nix         |   9 +-
 modules/programs/neomutt.nix                  | 199 +++++------
 modules/programs/newsboat.nix                 |  54 +--
 modules/programs/noti.nix                     |  13 +-
 modules/programs/notmuch-accounts.nix         |   4 +-
 modules/programs/notmuch.nix                  | 127 +++----
 modules/programs/obs-studio.nix               |  34 +-
 modules/programs/offlineimap-accounts.nix     |  18 +-
 modules/programs/offlineimap.nix              | 160 ++++-----
 modules/programs/opam.nix                     |   4 +-
 modules/programs/password-store.nix           |   4 +-
 modules/programs/pazi.nix                     |   4 +-
 modules/programs/pidgin.nix                   |   6 +-
 modules/programs/readline.nix                 |  51 ++-
 modules/programs/rofi.nix                     | 120 +++----
 modules/programs/rtorrent.nix                 |   9 +-
 modules/programs/skim.nix                     |  36 +-
 modules/programs/starship.nix                 |  30 +-
 modules/programs/taskwarrior.nix              |  36 +-
 modules/programs/termite.nix                  | 143 ++++----
 modules/programs/texlive.nix                  |  16 +-
 modules/programs/urxvt.nix                    |  36 +-
 modules/programs/vim.nix                      | 144 ++++----
 modules/programs/vscode/haskell.nix           |  14 +-
 modules/programs/z-lua.nix                    |  28 +-
 modules/programs/zathura.nix                  |  27 +-
 modules/services/blueman-applet.nix           |  18 +-
 modules/services/cbatticon.nix                |  48 +--
 modules/services/compton.nix                  | 104 +++---
 modules/services/dunst.nix                    | 159 ++++----
 modules/services/dwm-status.nix               |  13 +-
 modules/services/emacs.nix                    |  30 +-
 modules/services/flameshot.nix                |  14 +-
 modules/services/getmail.nix                  |  32 +-
 modules/services/gnome-keyring.nix            |  27 +-
 modules/services/grobi.nix                    |  16 +-
 modules/services/hound.nix                    |  38 +-
 modules/services/imapnotify-accounts.nix      |   7 +-
 modules/services/imapnotify.nix               | 131 +++----
 modules/services/kdeconnect.nix               |  25 +-
 modules/services/keepassx.nix                 |  18 +-
 modules/services/lorri.nix                    |  23 +-
 modules/services/mbsync.nix                   |  32 +-
 modules/services/mpdris2.nix                  |  28 +-
 modules/services/muchsync.nix                 |  38 +-
 modules/services/network-manager-applet.nix   |  18 +-
 modules/services/nextcloud-client.nix         |   8 +-
 modules/services/owncloud-client.nix          |   8 +-
 modules/services/parcellite.nix               |  12 +-
 modules/services/password-store-sync.nix      |  38 +-
 modules/services/pasystray.nix                |  32 +-
 modules/services/polybar.nix                  |  46 +--
 modules/services/random-background.nix        |  74 ++--
 modules/services/redshift.nix                 |  56 ++-
 modules/services/rsibreak.nix                 |   8 +-
 modules/services/screen-locker.nix            |  12 +-
 modules/services/spotifyd.nix                 |  11 +-
 modules/services/stalonetray.nix              |  66 ++--
 modules/services/status-notifier-watcher.nix  |  32 +-
 modules/services/syncthing.nix                |  24 +-
 modules/services/taffybar.nix                 |   8 +-
 modules/services/tahoe-lafs.nix               |  12 +-
 modules/services/taskwarrior-sync.nix         |  16 +-
 modules/services/udiskie.nix                  |  42 +--
 modules/services/unclutter.nix                |   4 +-
 modules/services/unison.nix                   |  21 +-
 modules/services/window-managers/awesome.nix  |  39 +-
 .../window-managers/bspwm/default.nix         |  81 +++--
 .../window-managers/bspwm/options.nix         |  33 +-
 modules/services/window-managers/xmonad.nix   |  12 +-
 modules/services/xcape.nix                    |  22 +-
 modules/services/xembed-sni-proxy.nix         |   8 +-
 modules/services/xscreensaver.nix             |  26 +-
 modules/services/xsuspender.nix               |  38 +-
 modules/xcursor.nix                           |  12 +-
 modules/xresources.nix                        |  32 +-
 modules/xsession.nix                          |  46 +--
 nixos/default.nix                             | 105 +++---
 overlay.nix                                   |   4 +-
 tests/lib/types/dag-merge.nix                 |  22 +-
 tests/lib/types/list-or-dag-merge.nix         |  22 +-
 tests/modules/files/hidden-source.nix         |   5 +-
 tests/modules/misc/pam/default.nix            |   4 +-
 tests/modules/misc/xdg/default.nix            |   4 +-
 tests/modules/misc/xdg/mime-apps-basics.nix   |   4 +-
 tests/modules/misc/xsession/basic.nix         |   6 +-
 .../misc/xsession/keyboard-without-layout.nix |  10 +-
 .../programs/alacritty/empty-settings.nix     |   4 +-
 .../programs/alacritty/example-settings.nix   |  16 +-
 .../programs/browserpass/browserpass.nix      |  36 +-
 .../modules/programs/browserpass/default.nix  |   4 +-
 .../programs/firefox/profile-settings.nix     |  26 +-
 .../programs/firefox/state-version-19_09.nix  |  22 +-
 tests/modules/programs/getmail/default.nix    |   4 +-
 tests/modules/programs/getmail/getmail.nix    |   6 +-
 tests/modules/programs/git/git-with-email.nix |   4 +-
 tests/modules/programs/git/git.nix            |  22 +-
 tests/modules/programs/gpg/default.nix        |   4 +-
 tests/modules/programs/mbsync/default.nix     |   4 +-
 tests/modules/programs/mbsync/mbsync.nix      |   8 +-
 tests/modules/programs/neomutt/default.nix    |   4 +-
 tests/modules/programs/neomutt/neomutt.nix    |  15 +-
 tests/modules/programs/newsboat/default.nix   |   4 +-
 .../programs/newsboat/newsboat-basics.nix     |  12 +-
 tests/modules/programs/readline/default.nix   |   4 +-
 .../programs/readline/using-all-options.nix   |   4 +-
 .../rofi/assert-on-both-theme-and-colors.nix  |  10 +-
 tests/modules/programs/ssh/default-config.nix |  11 +-
 ...ds-dynamic-bind-path-with-port-asserts.nix |  23 +-
 ...forwards-dynamic-valid-bind-no-asserts.nix |  29 +-
 ...ards-local-bind-path-with-port-asserts.nix |  29 +-
 ...ards-local-host-path-with-port-asserts.nix |  29 +-
 ...rds-remote-bind-path-with-port-asserts.nix |  29 +-
 ...rds-remote-host-path-with-port-asserts.nix |  29 +-
 .../programs/ssh/match-blocks-attrs.nix       |  27 +-
 tests/modules/programs/texlive/default.nix    |   4 +-
 tests/modules/programs/tmux/vi-all-true.nix   |   4 +-
 .../programs/zsh/history-path-new-custom.nix  |   7 +-
 .../programs/zsh/history-path-new-default.nix |   7 +-
 .../programs/zsh/history-path-old-custom.nix  |   7 +-
 .../programs/zsh/history-path-old-default.nix |   7 +-
 .../modules/services/sxhkd/configuration.nix  |   5 +-
 .../services/window-managers/i3/default.nix   |   4 +-
 .../window-managers/i3/i3-keybindings.nix     |  26 +-
 tests/modules/systemd/timers.nix              |  12 +-
 tests/modules/xresources/default.nix          |   4 +-
 177 files changed, 2850 insertions(+), 3565 deletions(-)

diff --git a/default.nix b/default.nix
index 1e3ff09e0..545b01141 100644
--- a/default.nix
+++ b/default.nix
@@ -1,13 +1,10 @@
-{ pkgs ? import <nixpkgs> {} }:
+{ pkgs ? import <nixpkgs> { } }:
 
 rec {
-  home-manager = pkgs.callPackage ./home-manager {
-    path = toString ./.;
-  };
+  home-manager = pkgs.callPackage ./home-manager { path = toString ./.; };
 
-  install = pkgs.callPackage ./home-manager/install.nix {
-    inherit home-manager;
-  };
+  install =
+    pkgs.callPackage ./home-manager/install.nix { inherit home-manager; };
 
   nixos = import ./nixos;
 }
diff --git a/doc/default.nix b/doc/default.nix
index 97c1914a5..638027b0a 100644
--- a/doc/default.nix
+++ b/doc/default.nix
@@ -1,8 +1,6 @@
 {
-  # Note, this should be "the standard library" + HM extensions.
-  lib
-, pkgs
-}:
+# Note, this should be "the standard library" + HM extensions.
+lib, pkgs }:
 
 let
 
@@ -19,23 +17,19 @@ let
   # Make sure the used package is scrubbed to avoid actually
   # instantiating derivations.
   scrubbedPkgsModule = {
-    imports = [
-      {
-        _module.args = {
-          pkgs = lib.mkForce (nmd.scrubDerivations "pkgs" pkgs);
-          pkgs_i686 = lib.mkForce { };
-        };
-      }
-    ];
+    imports = [{
+      _module.args = {
+        pkgs = lib.mkForce (nmd.scrubDerivations "pkgs" pkgs);
+        pkgs_i686 = lib.mkForce { };
+      };
+    }];
   };
 
   hmModulesDocs = nmd.buildModulesDocs {
-    modules =
-      import ../modules/modules.nix {
-        inherit lib pkgs;
-        check = false;
-      }
-      ++ [ scrubbedPkgsModule ];
+    modules = import ../modules/modules.nix {
+      inherit lib pkgs;
+      check = false;
+    } ++ [ scrubbedPkgsModule ];
     moduleRootPaths = [ ./.. ];
     mkModuleUrl = path:
       "https://github.com/rycee/home-manager/blob/master/${path}#blob-path";
@@ -58,9 +52,7 @@ let
     '';
   };
 
-in
-
-{
+in {
   inherit nmdSrc;
 
   options = {
@@ -71,7 +63,5 @@ in
 
   manPages = docs.manPages;
 
-  manual = {
-    inherit (docs) html htmlOpenTool;
-  };
+  manual = { inherit (docs) html htmlOpenTool; };
 }
diff --git a/home-manager/install.nix b/home-manager/install.nix
index bafb9a065..87aae5047 100644
--- a/home-manager/install.nix
+++ b/home-manager/install.nix
@@ -1,70 +1,67 @@
 { home-manager, runCommand }:
 
-runCommand
-  "home-manager-install"
-  {
-    propagatedBuildInputs = [ home-manager ];
-    preferLocalBuild = true;
-    allowSubstitutes = false;
-    shellHookOnly = true;
-    shellHook = ''
-      confFile="''${XDG_CONFIG_HOME:-$HOME/.config}/nixpkgs/home.nix"
-
-      if [[ ! -e $confFile ]]; then
-        echo
-        echo "Creating initial Home Manager configuration..."
-
-        mkdir -p "$(dirname "$confFile")"
-        cat > $confFile <<EOF
-      { config, pkgs, ... }:
-
-      {
-        # Let Home Manager install and manage itself.
-        programs.home-manager.enable = true;
-
-        # This value determines the Home Manager release that your
-        # configuration is compatible with. This helps avoid breakage
-        # when a new Home Manager release introduces backwards
-        # incompatible changes.
-        #
-        # You can update Home Manager without changing this value. See
-        # the Home Manager release notes for a list of state version
-        # changes in each release.
-        home.stateVersion = "19.09";
-      }
-      EOF
-      fi
+runCommand "home-manager-install" {
+  propagatedBuildInputs = [ home-manager ];
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+  shellHookOnly = true;
+  shellHook = ''
+    confFile="''${XDG_CONFIG_HOME:-$HOME/.config}/nixpkgs/home.nix"
 
+    if [[ ! -e $confFile ]]; then
       echo
-      echo "Creating initial Home Manager generation..."
-      echo
+      echo "Creating initial Home Manager configuration..."
 
-      if home-manager switch; then
-        cat <<EOF
+      mkdir -p "$(dirname "$confFile")"
+      cat > $confFile <<EOF
+    { config, pkgs, ... }:
 
-      All done! The home-manager tool should now be installed and you
-      can edit
+    {
+      # Let Home Manager install and manage itself.
+      programs.home-manager.enable = true;
 
-          $confFile
+      # This value determines the Home Manager release that your
+      # configuration is compatible with. This helps avoid breakage
+      # when a new Home Manager release introduces backwards
+      # incompatible changes.
+      #
+      # You can update Home Manager without changing this value. See
+      # the Home Manager release notes for a list of state version
+      # changes in each release.
+      home.stateVersion = "19.09";
+    }
+    EOF
+    fi
 
-      to configure Home Manager. Run 'man home-configuration.nix' to
-      see all available options.
-      EOF
-        exit 0
-      else
-        cat <<EOF
+    echo
+    echo "Creating initial Home Manager generation..."
+    echo
 
-      Uh oh, the installation failed! Please create an issue at
+    if home-manager switch; then
+      cat <<EOF
 
-          https://github.com/rycee/home-manager/issues
+    All done! The home-manager tool should now be installed and you
+    can edit
 
-      if the error seems to be the fault of Home Manager.
-      EOF
-        exit 1
-      fi
-    '';
-  }
-  ''
-    echo This derivation is not buildable, instead run it using nix-shell.
-    exit 1
-  ''
+        $confFile
+
+    to configure Home Manager. Run 'man home-configuration.nix' to
+    see all available options.
+    EOF
+      exit 0
+    else
+      cat <<EOF
+
+    Uh oh, the installation failed! Please create an issue at
+
+        https://github.com/rycee/home-manager/issues
+
+    if the error seems to be the fault of Home Manager.
+    EOF
+      exit 1
+    fi
+  '';
+} ''
+  echo This derivation is not buildable, instead run it using nix-shell.
+  exit 1
+''
diff --git a/modules/lib/dag.nix b/modules/lib/dag.nix
index 535dec35a..cbe341296 100644
--- a/modules/lib/dag.nix
+++ b/modules/lib/dag.nix
@@ -13,13 +13,11 @@ with lib;
 
 rec {
 
-  emptyDag = {};
+  emptyDag = { };
 
   isDag = dag:
-    let
-      isEntry = e: (e ? data) && (e ? after) && (e ? before);
-    in
-      builtins.isAttrs dag && all (x: x) (mapAttrsToList (n: isEntry) dag);
+    let isEntry = e: (e ? data) && (e ? after) && (e ? before);
+    in builtins.isAttrs dag && all (x: x) (mapAttrsToList (n: isEntry) dag);
 
   # Takes an attribute set containing entries built by
   # dagEntryAnywhere, dagEntryAfter, and dagEntryBefore to a
@@ -80,22 +78,19 @@ rec {
   dagTopoSort = dag:
     let
       dagBefore = dag: name:
-        mapAttrsToList (n: v: n) (
-          filterAttrs (n: v: any (a: a == name) v.before) dag
-        );
-      normalizedDag =
-        mapAttrs (n: v: {
-          name = n;
-          data = v.data;
-          after = v.after ++ dagBefore dag n;
-        }) dag;
+        mapAttrsToList (n: v: n)
+        (filterAttrs (n: v: any (a: a == name) v.before) dag);
+      normalizedDag = mapAttrs (n: v: {
+        name = n;
+        data = v.data;
+        after = v.after ++ dagBefore dag n;
+      }) dag;
       before = a: b: any (c: a.name == c) b.after;
       sorted = toposort before (mapAttrsToList (n: v: v) normalizedDag);
-    in
-      if sorted ? result then
-        { result = map (v: { inherit (v) name data; }) sorted.result; }
-      else
-        sorted;
+    in if sorted ? result then {
+      result = map (v: { inherit (v) name data; }) sorted.result;
+    } else
+      sorted;
 
   # Applies a function to each element of the given DAG.
   dagMap = f: dag: mapAttrs (n: v: v // { data = f n v.data; }) dag;
@@ -103,22 +98,20 @@ rec {
   # Create a DAG entry with no particular dependency information.
   dagEntryAnywhere = data: {
     inherit data;
-    before = [];
-    after = [];
+    before = [ ];
+    after = [ ];
   };
 
-  dagEntryBetween = before: after: data: {
-    inherit data before after;
-  };
+  dagEntryBetween = before: after: data: { inherit data before after; };
 
   dagEntryAfter = after: data: {
     inherit data after;
-    before = [];
+    before = [ ];
   };
 
   dagEntryBefore = before: data: {
     inherit data before;
-    after = [];
+    after = [ ];
   };
 
 }
diff --git a/modules/lib/shell.nix b/modules/lib/shell.nix
index f1443c546..5e5743f51 100644
--- a/modules/lib/shell.nix
+++ b/modules/lib/shell.nix
@@ -2,7 +2,7 @@
 
 rec {
   # Produces a Bourne shell like variable export statement.
-  export = n: v: "export ${n}=\"${toString v}\"";
+  export = n: v: ''export ${n}="${toString v}"'';
 
   # Given an attribute set containing shell variable names and their
   # assignment, this function produces a string containing an export
diff --git a/modules/lib/stdlib-extended.nix b/modules/lib/stdlib-extended.nix
index 307f7a07c..93f2397ce 100644
--- a/modules/lib/stdlib-extended.nix
+++ b/modules/lib/stdlib-extended.nix
@@ -3,9 +3,5 @@
 
 nixpkgsLib:
 
-let
-  mkHmLib = import ./.;
-in
-  nixpkgsLib.extend (self: super: {
-    hm = mkHmLib { lib = super; };
-  })
+let mkHmLib = import ./.;
+in nixpkgsLib.extend (self: super: { hm = mkHmLib { lib = super; }; })
diff --git a/modules/lib/strings.nix b/modules/lib/strings.nix
index 13d6bb03b..fe7b2fa30 100644
--- a/modules/lib/strings.nix
+++ b/modules/lib/strings.nix
@@ -9,19 +9,14 @@ with lib;
       # All characters that are considered safe. Note "-" is not
       # included to avoid "-" followed by digit being interpreted as a
       # version.
-      safeChars =
-        [ "+" "." "_" "?" "=" ]
-        ++ lowerChars
-        ++ upperChars
+      safeChars = [ "+" "." "_" "?" "=" ] ++ lowerChars ++ upperChars
         ++ stringToCharacters "0123456789";
 
       empties = l: genList (x: "") (length l);
 
-      unsafeInName = stringToCharacters (
-        replaceStrings safeChars (empties safeChars) path
-      );
+      unsafeInName =
+        stringToCharacters (replaceStrings safeChars (empties safeChars) path);
 
       safeName = replaceStrings unsafeInName (empties unsafeInName) path;
-    in
-      "hm_" + safeName;
+    in "hm_" + safeName;
 }
diff --git a/modules/lib/types-dag.nix b/modules/lib/types-dag.nix
index 4003d7132..4dbdb907b 100644
--- a/modules/lib/types-dag.nix
+++ b/modules/lib/types-dag.nix
@@ -6,41 +6,34 @@ let
 
   isDagEntry = e: isAttrs e && (e ? data) && (e ? after) && (e ? before);
 
-  dagContentType = elemType: types.submodule {
-    options = {
-      data = mkOption { type = elemType; };
-      after = mkOption { type = with types; uniq (listOf str); };
-      before = mkOption { type = with types; uniq (listOf str); };
+  dagContentType = elemType:
+    types.submodule {
+      options = {
+        data = mkOption { type = elemType; };
+        after = mkOption { type = with types; uniq (listOf str); };
+        before = mkOption { type = with types; uniq (listOf str); };
+      };
     };
-  };
 
-in
-
-{
+in {
   # A directed acyclic graph of some inner type.
   dagOf = elemType:
     let
-      convertAllToDags =
-        let
-          maybeConvert = n: v:
-            if isDagEntry v
-            then v
-            else dag.entryAnywhere v;
-        in
-          map (def: def // { value = mapAttrs maybeConvert def.value; });
+      convertAllToDags = let
+        maybeConvert = n: v: if isDagEntry v then v else dag.entryAnywhere v;
+      in map (def: def // { value = mapAttrs maybeConvert def.value; });
 
       attrEquivalent = types.attrsOf (dagContentType elemType);
-    in
-      mkOptionType rec {
-        name = "dagOf";
-        description = "DAG of ${elemType.description}s";
-        check = isAttrs;
-        merge = loc: defs: attrEquivalent.merge loc (convertAllToDags defs);
-        getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]);
-        getSubModules = elemType.getSubModules;
-        substSubModules = m: dagOf (elemType.substSubModules m);
-        functor = (defaultFunctor name) // { wrapped = elemType; };
-      };
+    in mkOptionType rec {
+      name = "dagOf";
+      description = "DAG of ${elemType.description}s";
+      check = isAttrs;
+      merge = loc: defs: attrEquivalent.merge loc (convertAllToDags defs);
+      getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "<name>" ]);
+      getSubModules = elemType.getSubModules;
+      substSubModules = m: dagOf (elemType.substSubModules m);
+      functor = (defaultFunctor name) // { wrapped = elemType; };
+    };
 
   # A directed acyclic graph of some inner type OR a list of that
   # inner type. This is a temporary hack for use by the
@@ -55,42 +48,37 @@ in
   listOrDagOf = elemType:
     let
       paddedIndexStr = list: i:
-        let
-          padWidth = stringLength (toString (length list));
-        in
-          fixedWidthNumber padWidth i;
+        let padWidth = stringLength (toString (length list));
+        in fixedWidthNumber padWidth i;
 
       convertAllToDags = defs:
         let
           convertAttrValue = n: v:
-            if isDagEntry v then v
-            else dag.entryAnywhere v;
+            if isDagEntry v then v else dag.entryAnywhere v;
 
           convertListValue = namePrefix: vs:
             let
               pad = paddedIndexStr vs;
               makeEntry = i: v:
                 nameValuePair "${namePrefix}.${pad i}" (dag.entryAnywhere v);
-            in
-              listToAttrs (imap1 makeEntry vs);
+            in listToAttrs (imap1 makeEntry vs);
 
           convertValue = i: value:
-            if isList value
-            then convertListValue "unnamed-${paddedIndexStr defs i}" value
-            else mapAttrs convertAttrValue value;
-        in
-          imap1 (i: def: def // { value = convertValue i def.value; }) defs;
+            if isList value then
+              convertListValue "unnamed-${paddedIndexStr defs i}" value
+            else
+              mapAttrs convertAttrValue value;
+        in imap1 (i: def: def // { value = convertValue i def.value; }) defs;
 
       attrEquivalent = types.attrsOf (dagContentType elemType);
-    in
-      mkOptionType rec {
-        name = "dagOf";
-        description = "DAG of ${elemType.description}s";
-        check = x: isAttrs x || isList x;
-        merge = loc: defs: attrEquivalent.merge loc (convertAllToDags defs);
-        getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]);
-        getSubModules = elemType.getSubModules;
-        substSubModules = m: dagOf (elemType.substSubModules m);
-        functor = (defaultFunctor name) // { wrapped = elemType; };
-      };
+    in mkOptionType rec {
+      name = "dagOf";
+      description = "DAG of ${elemType.description}s";
+      check = x: isAttrs x || isList x;
+      merge = loc: defs: attrEquivalent.merge loc (convertAllToDags defs);
+      getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "<name>" ]);
+      getSubModules = elemType.getSubModules;
+      substSubModules = m: dagOf (elemType.substSubModules m);
+      functor = (defaultFunctor name) // { wrapped = elemType; };
+    };
 }
diff --git a/modules/lib/zsh.nix b/modules/lib/zsh.nix
index 1d3e96b54..c6901350f 100644
--- a/modules/lib/zsh.nix
+++ b/modules/lib/zsh.nix
@@ -2,13 +2,15 @@
 
 rec {
   # Produces a Zsh shell like value
-  toZshValue = v: if builtins.isBool v then
-                    if v then "true" else "false"
-                  else if builtins.isString v then
-                    "\"${v}\""
-                  else if builtins.isList v then
-                    "(${lib.concatStringsSep " " (map toZshValue v)})"
-                  else "\"${toString v}\"";
+  toZshValue = v:
+    if builtins.isBool v then
+      if v then "true" else "false"
+    else if builtins.isString v then
+      ''"${v}"''
+    else if builtins.isList v then
+      "(${lib.concatStringsSep " " (map toZshValue v)})"
+    else
+      ''"${toString v}"'';
 
   # Produces a Zsh shell like definition statement
   define = n: v: "${n}=${toZshValue v}";
diff --git a/modules/misc/fontconfig.nix b/modules/misc/fontconfig.nix
index 8dbcce53c..795ab3a74 100644
--- a/modules/misc/fontconfig.nix
+++ b/modules/misc/fontconfig.nix
@@ -8,15 +8,15 @@ let
 
   profileDirectory = config.home.profileDirectory;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   imports = [
-    (mkRenamedOptionModule
-      [ "fonts" "fontconfig" "enableProfileFonts" ]
-      [ "fonts" "fontconfig" "enable" ])
+    (mkRenamedOptionModule [ "fonts" "fontconfig" "enableProfileFonts" ] [
+      "fonts"
+      "fontconfig"
+      "enable"
+    ])
   ];
 
   options = {
diff --git a/modules/misc/lib.nix b/modules/misc/lib.nix
index a09075453..13c00dc59 100644
--- a/modules/misc/lib.nix
+++ b/modules/misc/lib.nix
@@ -4,7 +4,7 @@
   options = {
     lib = lib.mkOption {
       type = lib.types.attrsOf lib.types.attrs;
-      default = {};
+      default = { };
       description = ''
         This option allows modules to define helper functions,
         constants, etc.
diff --git a/modules/misc/numlock.nix b/modules/misc/numlock.nix
index 77149d123..199dd317d 100644
--- a/modules/misc/numlock.nix
+++ b/modules/misc/numlock.nix
@@ -6,12 +6,8 @@ let
 
   cfg = config.xsession.numlock;
 
-in
-
-{
-  options = {
-    xsession.numlock.enable = mkEnableOption "Num Lock";
-  };
+in {
+  options = { xsession.numlock.enable = mkEnableOption "Num Lock"; };
 
   config = mkIf cfg.enable {
     systemd.user.services.numlockx = {
@@ -27,9 +23,7 @@ in
         ExecStart = "${pkgs.numlockx}/bin/numlockx";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/misc/pam.nix b/modules/misc/pam.nix
index 6ace2bfda..f54f4b950 100644
--- a/modules/misc/pam.nix
+++ b/modules/misc/pam.nix
@@ -6,14 +6,12 @@ let
 
   vars = config.pam.sessionVariables;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
     pam.sessionVariables = mkOption {
-      default = {};
+      default = { };
       type = types.attrs;
       example = { EDITOR = "vim"; };
       description = ''
@@ -27,10 +25,8 @@ in
     };
   };
 
-  config = mkIf (vars != {}) {
-    home.file.".pam_environment".text =
-      concatStringsSep "\n" (
-        mapAttrsToList (n: v: "${n} OVERRIDE=\"${toString v}\"") vars
-      ) + "\n";
+  config = mkIf (vars != { }) {
+    home.file.".pam_environment".text = concatStringsSep "\n"
+      (mapAttrsToList (n: v: ''${n} OVERRIDE="${toString v}"'') vars) + "\n";
   };
 }
diff --git a/modules/misc/qt.nix b/modules/misc/qt.nix
index d0ba16d73..ff38f842c 100644
--- a/modules/misc/qt.nix
+++ b/modules/misc/qt.nix
@@ -6,19 +6,13 @@ let
 
   cfg = config.qt;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   imports = [
-    (mkChangedOptionModule
-      [ "qt" "useGtkTheme" ]
-      [ "qt" "platformTheme" ]
+    (mkChangedOptionModule [ "qt" "useGtkTheme" ] [ "qt" "platformTheme" ]
       (config:
-        if getAttrFromPath [ "qt" "useGtkTheme" ] config
-        then "gtk"
-        else null))
+        if getAttrFromPath [ "qt" "useGtkTheme" ] config then "gtk" else null))
   ];
 
   options = {
@@ -29,10 +23,8 @@ in
         type = types.nullOr (types.enum [ "gtk" "gnome" ]);
         default = null;
         example = "gnome";
-        relatedPackages = [
-          "qgnomeplatform"
-          ["libsForQt5" "qtstyleplugins"]
-        ];
+        relatedPackages =
+          [ "qgnomeplatform" [ "libsForQt5" "qtstyleplugins" ] ];
         description = ''
           Selects the platform theme to use for Qt applications.</para>
           <para>The options are
@@ -59,16 +51,16 @@ in
     home.sessionVariables.QT_QPA_PLATFORMTHEME =
       if cfg.platformTheme == "gnome" then "gnome" else "gtk2";
 
-    home.packages =
-      if cfg.platformTheme == "gnome"
-      then [ pkgs.qgnomeplatform ]
-      else [ pkgs.libsForQt5.qtstyleplugins ];
+    home.packages = if cfg.platformTheme == "gnome" then
+      [ pkgs.qgnomeplatform ]
+    else
+      [ pkgs.libsForQt5.qtstyleplugins ];
 
     xsession.importedVariables = [ "QT_QPA_PLATFORMTHEME" ];
 
     # Enable GTK+ style for Qt4 in either case.
     # It doesn’t support the platform theme packages.
-    home.activation.useGtkThemeInQt4 = hm.dag.entryAfter ["writeBoundary"] ''
+    home.activation.useGtkThemeInQt4 = hm.dag.entryAfter [ "writeBoundary" ] ''
       $DRY_RUN_CMD ${pkgs.crudini}/bin/crudini $VERBOSE_ARG \
         --set "${config.xdg.configHome}/Trolltech.conf" Qt style GTK+
     '';
diff --git a/modules/misc/xdg-mime-apps.nix b/modules/misc/xdg-mime-apps.nix
index 979c7ea48..7ba4083b3 100644
--- a/modules/misc/xdg-mime-apps.nix
+++ b/modules/misc/xdg-mime-apps.nix
@@ -9,9 +9,7 @@ let
   strListOrSingleton = with types;
     coercedTo (either (listOf str) str) toList (listOf str);
 
-in
-
-{
+in {
   meta.maintainers = with maintainers; [ pacien ];
 
   options.xdg.mimeApps = {
@@ -80,13 +78,11 @@ in
       config.xdg.configFile."mimeapps.list".source;
 
     xdg.configFile."mimeapps.list".text =
-      let
-        joinValues = mapAttrs (n: concatStringsSep ";");
-      in
-        generators.toINI {} {
-          "Added Associations" = joinValues cfg.associations.added;
-          "Removed Associations" = joinValues cfg.associations.removed;
-          "Default Applications" = joinValues cfg.defaultApplications;
-        };
+      let joinValues = mapAttrs (n: concatStringsSep ";");
+      in generators.toINI { } {
+        "Added Associations" = joinValues cfg.associations.added;
+        "Removed Associations" = joinValues cfg.associations.removed;
+        "Default Applications" = joinValues cfg.defaultApplications;
+      };
   };
 }
diff --git a/modules/misc/xdg-mime.nix b/modules/misc/xdg-mime.nix
index 0063e43d2..32006e025 100644
--- a/modules/misc/xdg-mime.nix
+++ b/modules/misc/xdg-mime.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.xdg.mime;
 
-in
-
-{
+in {
   options = {
     xdg.mime.enable = mkOption {
       type = types.bool;
diff --git a/modules/misc/xdg-user-dirs.nix b/modules/misc/xdg-user-dirs.nix
index d45356da4..da9d3c43a 100644
--- a/modules/misc/xdg-user-dirs.nix
+++ b/modules/misc/xdg-user-dirs.nix
@@ -6,15 +6,15 @@ let
 
   cfg = config.xdg.userDirs;
 
-in
-
-{
+in {
   meta.maintainers = with maintainers; [ pacien ];
 
   imports = [
-    (mkRenamedOptionModule
-      [ "xdg" "userDirs" "publishShare" ]
-      [ "xdg" "userDirs" "publicShare" ])
+    (mkRenamedOptionModule [ "xdg" "userDirs" "publishShare" ] [
+      "xdg"
+      "userDirs"
+      "publicShare"
+    ])
   ];
 
   options.xdg.userDirs = {
@@ -89,18 +89,15 @@ in
   };
 
   config = mkIf cfg.enable {
-    xdg.configFile."user-dirs.dirs".text = generators.toKeyValue {} (
-      {
-        XDG_DESKTOP_DIR = cfg.desktop;
-        XDG_DOCUMENTS_DIR = cfg.documents;
-        XDG_DOWNLOAD_DIR = cfg.download;
-        XDG_MUSIC_DIR = cfg.music;
-        XDG_PICTURES_DIR = cfg.pictures;
-        XDG_PUBLICSHARE_DIR = cfg.publicShare;
-        XDG_TEMPLATES_DIR = cfg.templates;
-        XDG_VIDEOS_DIR = cfg.videos;
-      }
-      // cfg.extraConfig
-    );
+    xdg.configFile."user-dirs.dirs".text = generators.toKeyValue { } ({
+      XDG_DESKTOP_DIR = cfg.desktop;
+      XDG_DOCUMENTS_DIR = cfg.documents;
+      XDG_DOWNLOAD_DIR = cfg.download;
+      XDG_MUSIC_DIR = cfg.music;
+      XDG_PICTURES_DIR = cfg.pictures;
+      XDG_PUBLICSHARE_DIR = cfg.publicShare;
+      XDG_TEMPLATES_DIR = cfg.templates;
+      XDG_VIDEOS_DIR = cfg.videos;
+    } // cfg.extraConfig);
   };
 }
diff --git a/modules/programs/alacritty.nix b/modules/programs/alacritty.nix
index 84675cb1c..69b9ea967 100644
--- a/modules/programs/alacritty.nix
+++ b/modules/programs/alacritty.nix
@@ -6,16 +6,14 @@ let
 
   cfg = config.programs.alacritty;
 
-in
-
-{
+in {
   options = {
     programs.alacritty = {
       enable = mkEnableOption "Alacritty";
 
       settings = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             window.dimensions = {
@@ -45,8 +43,9 @@ in
     (mkIf cfg.enable {
       home.packages = [ pkgs.alacritty ];
 
-      xdg.configFile."alacritty/alacritty.yml" = mkIf (cfg.settings != {}) {
-        text = replaceStrings ["\\\\"] ["\\"] (builtins.toJSON cfg.settings);
+      xdg.configFile."alacritty/alacritty.yml" = mkIf (cfg.settings != { }) {
+        text =
+          replaceStrings [ "\\\\" ] [ "\\" ] (builtins.toJSON cfg.settings);
       };
     })
   ];
diff --git a/modules/programs/alot-accounts.nix b/modules/programs/alot-accounts.nix
index 8f3ffdfb3..89ae28f9c 100644
--- a/modules/programs/alot-accounts.nix
+++ b/modules/programs/alot-accounts.nix
@@ -18,12 +18,10 @@ with lib;
       type = types.attrsOf types.str;
       default = {
         type = "shellcommand";
-        command = "'${pkgs.notmuch}/bin/notmuch address --format=json --output=recipients  date:6M..'";
-        regexp =
-          "'\\[?{"
-          + ''"name": "(?P<name>.*)", ''
-          + ''"address": "(?P<email>.+)", ''
-          + ''"name-addr": ".*"''
+        command =
+          "'${pkgs.notmuch}/bin/notmuch address --format=json --output=recipients  date:6M..'";
+        regexp = "'\\[?{" + ''
+          "name": "(?P<name>.*)", "address": "(?P<email>.+)", "name-addr": ".*"''
           + "}[,\\]]?'";
         shellcommand_external_filtering = "False";
       };
@@ -36,9 +34,9 @@ with lib;
         }
       '';
       description = ''
-       Contact completion configuration as expected per alot.
-       See <link xlink:href="http://alot.readthedocs.io/en/latest/configuration/contacts_completion.html">alot's wiki</link> for
-       explanation about possible values.
+        Contact completion configuration as expected per alot.
+        See <link xlink:href="http://alot.readthedocs.io/en/latest/configuration/contacts_completion.html">alot's wiki</link> for
+        explanation about possible values.
       '';
     };
 
@@ -52,10 +50,9 @@ with lib;
   };
 
   config = mkIf config.notmuch.enable {
-    alot.sendMailCommand = mkOptionDefault (
-      if config.msmtp.enable
-      then "msmtpq --read-envelope-from --read-recipients"
-      else null
-    );
+    alot.sendMailCommand = mkOptionDefault (if config.msmtp.enable then
+      "msmtpq --read-envelope-from --read-recipients"
+    else
+      null);
   };
 }
diff --git a/modules/programs/astroid-accounts.nix b/modules/programs/astroid-accounts.nix
index bc94a301d..17544ff78 100644
--- a/modules/programs/astroid-accounts.nix
+++ b/modules/programs/astroid-accounts.nix
@@ -17,7 +17,7 @@ with lib;
 
     extraConfig = mkOption {
       type = types.attrs;
-      default = {};
+      default = { };
       example = { select_query = ""; };
       description = ''
         Extra settings to add to this astroid account configuration.
@@ -26,8 +26,7 @@ with lib;
   };
 
   config = mkIf config.notmuch.enable {
-    astroid.sendMailCommand = mkIf config.msmtp.enable (
-      mkOptionDefault "msmtpq --read-envelope-from --read-recipients"
-    );
+    astroid.sendMailCommand = mkIf config.msmtp.enable
+      (mkOptionDefault "msmtpq --read-envelope-from --read-recipients");
   };
 }
diff --git a/modules/programs/astroid.nix b/modules/programs/astroid.nix
index b4b60fe23..8b3762fac 100644
--- a/modules/programs/astroid.nix
+++ b/modules/programs/astroid.nix
@@ -8,35 +8,32 @@ let
   cfg = config.programs.astroid;
 
   astroidAccounts =
-    filterAttrs
-      (n: v: v.astroid.enable)
-      config.accounts.email.accounts;
+    filterAttrs (n: v: v.astroid.enable) config.accounts.email.accounts;
 
   boolOpt = b: if b then "true" else "false";
 
-  accountAttr = account: with account; {
-    email = address;
-    name = realName;
-    sendmail = astroid.sendMailCommand;
-    additional_sent_tags = "";
-    default = boolOpt primary;
-    save_drafts_to = "${maildir.absPath}/${folders.drafts}";
-    save_sent = "true";
-    save_sent_to = "${maildir.absPath}/${folders.sent}";
-    select_query = "";
-  }
-  // optionalAttrs (signature.showSignature != "none") {
-    signature_attach = boolOpt (signature.showSignature == "attach");
-    signature_default_on = boolOpt (signature.showSignature != "none");
-    signature_file = pkgs.writeText "signature.txt" signature.text;
-    signature_file_markdown = "false";
-    signature_separate = "true";  # prepends '--\n' to the signature
-  }
-  // optionalAttrs (gpg != null) {
-    always_gpg_sign = boolOpt gpg.signByDefault;
-    gpgkey = gpg.key;
-  }
-  // astroid.extraConfig;
+  accountAttr = account:
+    with account;
+    {
+      email = address;
+      name = realName;
+      sendmail = astroid.sendMailCommand;
+      additional_sent_tags = "";
+      default = boolOpt primary;
+      save_drafts_to = "${maildir.absPath}/${folders.drafts}";
+      save_sent = "true";
+      save_sent_to = "${maildir.absPath}/${folders.sent}";
+      select_query = "";
+    } // optionalAttrs (signature.showSignature != "none") {
+      signature_attach = boolOpt (signature.showSignature == "attach");
+      signature_default_on = boolOpt (signature.showSignature != "none");
+      signature_file = pkgs.writeText "signature.txt" signature.text;
+      signature_file_markdown = "false";
+      signature_separate = "true"; # prepends '--\n' to the signature
+    } // optionalAttrs (gpg != null) {
+      always_gpg_sign = boolOpt gpg.signByDefault;
+      gpgkey = gpg.key;
+    } // astroid.extraConfig;
 
   # See https://github.com/astroidmail/astroid/wiki/Configuration-Reference
   configFile = mailAccounts:
@@ -51,12 +48,9 @@ let
         cfg.extraConfig
         cfg.externalEditor
       ];
-    in
-      builtins.toJSON astroidConfig;
+    in builtins.toJSON astroidConfig;
 
-in
-
-{
+in {
   options = {
     programs.astroid = {
       enable = mkEnableOption "Astroid";
@@ -81,7 +75,8 @@ in
               "cmd" = cmd;
             };
           };
-        example = "nvim-qt -- -c 'set ft=mail' '+set fileencoding=utf-8' '+set ff=unix' '+set enc=utf-8' '+set fo+=w' %1";
+        example =
+          "nvim-qt -- -c 'set ft=mail' '+set fileencoding=utf-8' '+set ff=unix' '+set enc=utf-8' '+set fo+=w' %1";
         description = ''
           You can use <code>%1</code>, <code>%2</code>, and
           <code>%3</code> to refer respectively to:
@@ -96,7 +91,7 @@ in
 
       extraConfig = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         example = { poll.interval = 0; };
         description = ''
           JSON config that will override the default Astroid configuration.
@@ -106,18 +101,15 @@ in
   };
 
   config = mkIf cfg.enable {
-    home.packages =  [ pkgs.astroid ];
+    home.packages = [ pkgs.astroid ];
 
-    xdg.configFile."astroid/config".source =
-      pkgs.runCommand "out.json"
-        {
-          json = configFile astroidAccounts;
-          preferLocalBuild = true;
-          allowSubstitutes = false;
-        }
-        ''
-          echo -n "$json" | ${pkgs.jq}/bin/jq . > $out
-        '';
+    xdg.configFile."astroid/config".source = pkgs.runCommand "out.json" {
+      json = configFile astroidAccounts;
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+    } ''
+      echo -n "$json" | ${pkgs.jq}/bin/jq . > $out
+    '';
 
     xdg.configFile."astroid/poll.sh" = {
       executable = true;
diff --git a/modules/programs/autorandr.nix b/modules/programs/autorandr.nix
index 4514a5b5d..02fc77c1e 100644
--- a/modules/programs/autorandr.nix
+++ b/modules/programs/autorandr.nix
@@ -6,20 +6,21 @@ let
 
   cfg = config.programs.autorandr;
 
-  matrixOf = n: m: elemType: mkOptionType rec {
-    name = "matrixOf";
-    description = "${toString n}×${toString m} matrix of ${elemType.description}s";
-    check = xss:
-      let
-        listOfSize = l: xs: isList xs && length xs == l;
-      in
-        listOfSize n xss && all (xs: listOfSize m xs && all elemType.check xs) xss;
-    merge = mergeOneOption;
-    getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["*" "*"]);
-    getSubModules = elemType.getSubModules;
-    substSubModules = mod: matrixOf n m (elemType.substSubModules mod);
-    functor = (defaultFunctor name) // { wrapped = elemType; };
-  };
+  matrixOf = n: m: elemType:
+    mkOptionType rec {
+      name = "matrixOf";
+      description =
+        "${toString n}×${toString m} matrix of ${elemType.description}s";
+      check = xss:
+        let listOfSize = l: xs: isList xs && length xs == l;
+        in listOfSize n xss
+        && all (xs: listOfSize m xs && all elemType.check xs) xss;
+      merge = mergeOneOption;
+      getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "*" "*" ]);
+      getSubModules = elemType.getSubModules;
+      substSubModules = mod: matrixOf n m (elemType.substSubModules mod);
+      functor = (defaultFunctor name) // { wrapped = elemType; };
+    };
 
   profileModule = types.submodule {
     options = {
@@ -29,19 +30,19 @@ let
           Output name to EDID mapping.
           Use <code>autorandr --fingerprint</code> to get current setup values.
         '';
-        default = {};
+        default = { };
       };
 
       config = mkOption {
         type = types.attrsOf configModule;
         description = "Per output profile configuration.";
-        default = {};
+        default = { };
       };
 
       hooks = mkOption {
         type = profileHooksModule;
         description = "Profile hook scripts.";
-        default = {};
+        default = { };
       };
     };
   };
@@ -89,7 +90,7 @@ let
       };
 
       rotate = mkOption {
-        type = types.nullOr (types.enum ["normal" "left" "right" "inverted"]);
+        type = types.nullOr (types.enum [ "normal" "left" "right" "inverted" ]);
         description = "Output rotate configuration.";
         default = null;
         example = "left";
@@ -126,7 +127,7 @@ let
         type = types.nullOr (types.submodule {
           options = {
             method = mkOption {
-              type = types.enum ["factor" "pixel" ];
+              type = types.enum [ "factor" "pixel" ];
               description = "Output scaling method.";
               default = "factor";
               example = "pixel";
@@ -178,19 +179,21 @@ let
       postswitch = mkOption {
         type = types.attrsOf hookType;
         description = "Postswitch hook executed after mode switch.";
-        default = {};
+        default = { };
       };
 
       preswitch = mkOption {
         type = types.attrsOf hookType;
         description = "Preswitch hook executed before mode switch.";
-        default = {};
+        default = { };
       };
 
       predetect = mkOption {
         type = types.attrsOf hookType;
-        description = "Predetect hook executed before autorandr attempts to run xrandr.";
-        default = {};
+        description = ''
+          Predetect hook executed before autorandr attempts to run xrandr.
+        '';
+        default = { };
       };
     };
   };
@@ -211,50 +214,56 @@ let
 
       predetect = mkOption {
         type = hookType;
-        description = "Predetect hook executed before autorandr attempts to run xrandr.";
+        description = ''
+          Predetect hook executed before autorandr attempts to run xrandr.
+        '';
         default = "";
       };
     };
   };
 
   hookToFile = folder: name: hook:
-    nameValuePair
-      "autorandr/${folder}/${name}"
-      { source = "${pkgs.writeShellScriptBin "hook" hook}/bin/hook"; };
-  profileToFiles = name: profile: with profile; mkMerge ([
-    {
-      "autorandr/${name}/setup".text = concatStringsSep "\n" (mapAttrsToList fingerprintToString fingerprint);
-      "autorandr/${name}/config".text = concatStringsSep "\n" (mapAttrsToList configToString profile.config);
-    }
-    (mkIf (hooks.postswitch != "") (listToAttrs [ (hookToFile name "postswitch" hooks.postswitch) ]))
-    (mkIf (hooks.preswitch != "") (listToAttrs [ (hookToFile name "preswitch" hooks.preswitch) ]))
-    (mkIf (hooks.predetect != "") (listToAttrs [ (hookToFile name "predetect" hooks.predetect) ]))
-  ]);
+    nameValuePair "autorandr/${folder}/${name}" {
+      source = "${pkgs.writeShellScriptBin "hook" hook}/bin/hook";
+    };
+  profileToFiles = name: profile:
+    with profile;
+    mkMerge ([
+      {
+        "autorandr/${name}/setup".text = concatStringsSep "\n"
+          (mapAttrsToList fingerprintToString fingerprint);
+        "autorandr/${name}/config".text =
+          concatStringsSep "\n" (mapAttrsToList configToString profile.config);
+      }
+      (mkIf (hooks.postswitch != "")
+        (listToAttrs [ (hookToFile name "postswitch" hooks.postswitch) ]))
+      (mkIf (hooks.preswitch != "")
+        (listToAttrs [ (hookToFile name "preswitch" hooks.preswitch) ]))
+      (mkIf (hooks.predetect != "")
+        (listToAttrs [ (hookToFile name "predetect" hooks.predetect) ]))
+    ]);
   fingerprintToString = name: edid: "${name} ${edid}";
-  configToString = name: config: if config.enable then ''
-    output ${name}
-    ${optionalString (config.position != "") "pos ${config.position}"}
-    ${optionalString config.primary "primary"}
-    ${optionalString (config.dpi != null) "dpi ${toString config.dpi}"}
-    ${optionalString (config.gamma != "") "gamma ${config.gamma}"}
-    ${optionalString (config.mode != "") "mode ${config.mode}"}
-    ${optionalString (config.rate != "") "rate ${config.rate}"}
-    ${optionalString (config.rotate != null) "rotate ${config.rotate}"}
-    ${optionalString (config.scale != null) (
-      (if config.scale.method == "factor" then "scale" else "scale-from")
-      + " ${toString config.scale.x}x${toString config.scale.y}"
-    )}
-    ${optionalString (config.transform != null) (
-      "transform " + concatMapStringsSep "," toString (flatten config.transform)
-    )}
-  '' else ''
-    output ${name}
-    off
-  '';
+  configToString = name: config:
+    if config.enable then ''
+      output ${name}
+      ${optionalString (config.position != "") "pos ${config.position}"}
+      ${optionalString config.primary "primary"}
+      ${optionalString (config.dpi != null) "dpi ${toString config.dpi}"}
+      ${optionalString (config.gamma != "") "gamma ${config.gamma}"}
+      ${optionalString (config.mode != "") "mode ${config.mode}"}
+      ${optionalString (config.rate != "") "rate ${config.rate}"}
+      ${optionalString (config.rotate != null) "rotate ${config.rotate}"}
+      ${optionalString (config.scale != null)
+      ((if config.scale.method == "factor" then "scale" else "scale-from")
+        + " ${toString config.scale.x}x${toString config.scale.y}")}
+      ${optionalString (config.transform != null) ("transform "
+        + concatMapStringsSep "," toString (flatten config.transform))}
+    '' else ''
+      output ${name}
+      off
+    '';
 
-in
-
-{
+in {
   options = {
     programs.autorandr = {
       enable = mkEnableOption "Autorandr";
@@ -262,39 +271,39 @@ in
       hooks = mkOption {
         type = globalHooksModule;
         description = "Global hook scripts";
-        default = {};
+        default = { };
         example = literalExample ''
-        {
-          postswitch = {
-            "notify-i3" = "''${pkgs.i3}/bin/i3-msg restart";
-            "change-background" = readFile ./change-background.sh;
-            "change-dpi" = '''
-              case "$AUTORANDR_CURRENT_PROFILE" in
-                default)
-                  DPI=120
-                  ;;
-                home)
-                  DPI=192
-                  ;;
-                work)
-                  DPI=144
-                  ;;
-                *)
-                  echo "Unknown profle: $AUTORANDR_CURRENT_PROFILE"
-                  exit 1
-              esac
+          {
+            postswitch = {
+              "notify-i3" = "''${pkgs.i3}/bin/i3-msg restart";
+              "change-background" = readFile ./change-background.sh;
+              "change-dpi" = '''
+                case "$AUTORANDR_CURRENT_PROFILE" in
+                  default)
+                    DPI=120
+                    ;;
+                  home)
+                    DPI=192
+                    ;;
+                  work)
+                    DPI=144
+                    ;;
+                  *)
+                    echo "Unknown profle: $AUTORANDR_CURRENT_PROFILE"
+                    exit 1
+                esac
 
-              echo "Xft.dpi: $DPI" | ''${pkgs.xorg.xrdb}/bin/xrdb -merge
-            '''
-          };
-        }
+                echo "Xft.dpi: $DPI" | ''${pkgs.xorg.xrdb}/bin/xrdb -merge
+              '''
+            };
+          }
         '';
       };
 
       profiles = mkOption {
         type = types.attrsOf profileModule;
         description = "Autorandr profiles specification.";
-        default = {};
+        default = { };
         example = literalExample ''
           {
             "work" = {
@@ -323,24 +332,21 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions = flatten (mapAttrsToList (
-      profile: { config, ... }: mapAttrsToList (
-        output: opts: {
-          assertion = opts.scale == null || opts.transform == null;
-          message = ''
-            Cannot use the profile output options 'scale' and 'transform' simultaneously.
-            Check configuration for: programs.autorandr.profiles.${profile}.config.${output}
-          '';
-        })
-        config
-    )
-    cfg.profiles);
+    assertions = flatten (mapAttrsToList (profile:
+      { config, ... }:
+      mapAttrsToList (output: opts: {
+        assertion = opts.scale == null || opts.transform == null;
+        message = ''
+          Cannot use the profile output options 'scale' and 'transform' simultaneously.
+          Check configuration for: programs.autorandr.profiles.${profile}.config.${output}
+        '';
+      }) config) cfg.profiles);
 
     home.packages = [ pkgs.autorandr ];
     xdg.configFile = mkMerge ([
       (mapAttrs' (hookToFile "postswitch.d") cfg.hooks.postswitch)
-      (mapAttrs' (hookToFile "preswitch.d")  cfg.hooks.preswitch)
-      (mapAttrs' (hookToFile "predetect.d")  cfg.hooks.predetect)
+      (mapAttrs' (hookToFile "preswitch.d") cfg.hooks.preswitch)
+      (mapAttrs' (hookToFile "predetect.d") cfg.hooks.predetect)
       (mkMerge (mapAttrsToList profileToFiles cfg.profiles))
     ]);
   };
diff --git a/modules/programs/bat.nix b/modules/programs/bat.nix
index 860c5e82f..aa0df9abd 100644
--- a/modules/programs/bat.nix
+++ b/modules/programs/bat.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.bat;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.bat = {
@@ -16,7 +14,7 @@ in
 
     config = mkOption {
       type = types.attrsOf types.str;
-      default = {};
+      default = { };
       example = {
         theme = "TwoDark";
         pager = "less -FR";
@@ -31,10 +29,9 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.bat ];
 
-    xdg.configFile."bat/config" = mkIf (cfg.config != {}) {
-      text = concatStringsSep "\n" (
-        mapAttrsToList (n: v: ''--${n}="${v}"'') cfg.config
-      );
+    xdg.configFile."bat/config" = mkIf (cfg.config != { }) {
+      text = concatStringsSep "\n"
+        (mapAttrsToList (n: v: ''--${n}="${v}"'') cfg.config);
     };
   };
 }
diff --git a/modules/programs/beets.nix b/modules/programs/beets.nix
index efd5f8fd1..1a45bbea1 100644
--- a/modules/programs/beets.nix
+++ b/modules/programs/beets.nix
@@ -6,19 +6,17 @@ let
 
   cfg = config.programs.beets;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
     programs.beets = {
       enable = mkOption {
         type = types.bool;
-        default =
-          if versionAtLeast config.home.stateVersion "19.03"
-          then false
-          else cfg.settings != {};
+        default = if versionAtLeast config.home.stateVersion "19.03" then
+          false
+        else
+          cfg.settings != { };
         defaultText = "false";
         description = ''
           Whether to enable the beets music library manager. This
@@ -32,7 +30,8 @@ in
         type = types.package;
         default = pkgs.beets;
         defaultText = literalExample "pkgs.beets";
-        example = literalExample "(pkgs.beets.override { enableCheck = true; })";
+        example =
+          literalExample "(pkgs.beets.override { enableCheck = true; })";
         description = ''
           The <literal>beets</literal> package to use.
           Can be used to specify extensions.
@@ -41,7 +40,7 @@ in
 
       settings = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         description = ''
           Configuration written to
           <filename>~/.config/beets/config.yaml</filename>
@@ -54,6 +53,6 @@ in
     home.packages = [ cfg.package ];
 
     xdg.configFile."beets/config.yaml".text =
-        builtins.toJSON config.programs.beets.settings;
+      builtins.toJSON config.programs.beets.settings;
   };
 }
diff --git a/modules/programs/broot.nix b/modules/programs/broot.nix
index f6d3cd7f9..eac31b568 100644
--- a/modules/programs/broot.nix
+++ b/modules/programs/broot.nix
@@ -7,29 +7,23 @@ let
   cfg = config.programs.broot;
 
   configFile = config:
-    pkgs.runCommand "conf.toml"
-      {
-         buildInputs = [ pkgs.remarshal ];
-         preferLocalBuild = true;
-         allowSubstitutes = false;
-      }
-      ''
-        remarshal -if json -of toml \
-          < ${pkgs.writeText "verbs.json" (builtins.toJSON config)} \
-          > $out
-      '';
+    pkgs.runCommand "conf.toml" {
+      buildInputs = [ pkgs.remarshal ];
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+    } ''
+      remarshal -if json -of toml \
+        < ${pkgs.writeText "verbs.json" (builtins.toJSON config)} \
+        > $out
+    '';
 
   brootConf = {
     verbs =
-      mapAttrsToList
-        (name: value: value // { invocation = name; })
-        cfg.verbs;
+      mapAttrsToList (name: value: value // { invocation = name; }) cfg.verbs;
     skin = cfg.skin;
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.aheaume ];
 
   options.programs.broot = {
@@ -63,7 +57,10 @@ in
       type = with types; attrsOf (attrsOf (either bool str));
       default = {
         "p" = { execution = ":parent"; };
-        "edit" = { shortcut = "e"; execution = "$EDITOR {file}" ; };
+        "edit" = {
+          shortcut = "e";
+          execution = "$EDITOR {file}";
+        };
         "create {subpath}" = { execution = "$EDITOR {directory}/{subpath}"; };
         "view" = { execution = "less {file}"; };
       };
@@ -114,7 +111,7 @@ in
 
     skin = mkOption {
       type = types.attrsOf types.str;
-      default = {};
+      default = { };
       example = literalExample ''
         {
           status_normal_fg = "grayscale(18)";
@@ -177,38 +174,36 @@ in
     # Dummy file to prevent broot from trying to reinstall itself
     xdg.configFile."broot/launcher/installed".text = "";
 
-    programs.bash.initExtra =
-      mkIf cfg.enableBashIntegration (
-        # Using mkAfter to make it more likely to appear after other
-        # manipulations of the prompt.
-        mkAfter ''
-          # This script was automatically generated by the broot function
-          # More information can be found in https://github.com/Canop/broot
-          # This function starts broot and executes the command
-          # it produces, if any.
-          # It's needed because some shell commands, like `cd`,
-          # have no useful effect if executed in a subshell.
-          function br {
-              f=$(mktemp)
-              (
-                  set +e
-                  broot --outcmd "$f" "$@"
-                  code=$?
-                  if [ "$code" != 0 ]; then
-                      rm -f "$f"
-                      exit "$code"
-                  fi
-              )
-              code=$?
-              if [ "$code" != 0 ]; then
-                  return "$code"
-              fi
-              d=$(cat "$f")
-              rm -f "$f"
-              eval "$d"
-          }
-        ''
-      );
+    programs.bash.initExtra = mkIf cfg.enableBashIntegration (
+    # Using mkAfter to make it more likely to appear after other
+    # manipulations of the prompt.
+      mkAfter ''
+        # This script was automatically generated by the broot function
+        # More information can be found in https://github.com/Canop/broot
+        # This function starts broot and executes the command
+        # it produces, if any.
+        # It's needed because some shell commands, like `cd`,
+        # have no useful effect if executed in a subshell.
+        function br {
+            f=$(mktemp)
+            (
+                set +e
+                broot --outcmd "$f" "$@"
+                code=$?
+                if [ "$code" != 0 ]; then
+                    rm -f "$f"
+                    exit "$code"
+                fi
+            )
+            code=$?
+            if [ "$code" != 0 ]; then
+                return "$code"
+            fi
+            d=$(cat "$f")
+            rm -f "$f"
+            eval "$d"
+        }
+      '');
 
     programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
       # This script was automatically generated by the broot function
diff --git a/modules/programs/browserpass.nix b/modules/programs/browserpass.nix
index e65484fad..10a2883c8 100644
--- a/modules/programs/browserpass.nix
+++ b/modules/programs/browserpass.nix
@@ -2,13 +2,7 @@
 
 with lib;
 
-let
-  browsers = [
-    "chrome"
-    "chromium"
-    "firefox"
-    "vivaldi"
-  ];
+let browsers = [ "chrome" "chromium" "firefox" "vivaldi" ];
 in {
   options = {
     programs.browserpass = {
@@ -24,58 +18,59 @@ in {
   };
 
   config = mkIf config.programs.browserpass.enable {
-    home.file =
-      foldl' (a: b: a // b) {}
-      (concatMap (x: with pkgs.stdenv;
-        if x == "chrome" then
-          let dir = if isDarwin
-            then "Library/Application Support/Google/Chrome/NativeMessagingHosts"
-            else ".config/google-chrome/NativeMessagingHosts";
-          in [
-            {
-              "${dir}/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/hosts/chromium/com.github.browserpass.native.json";
-              "${dir}/../policies/managed/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/policies/chromium/com.github.browserpass.native.json";
-            }
-          ]
-        else if x == "chromium" then
-          let dir = if isDarwin
-            then "Library/Application Support/Chromium/NativeMessagingHosts"
-            else ".config/chromium/NativeMessagingHosts";
-          in [
-            {
-              "${dir}/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/hosts/chromium/com.github.browserpass.native.json";
-            }
-            {
-              "${dir}/../policies/managed/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/policies/chromium/com.github.browserpass.native.json";
-            }
-          ]
-        else if x == "firefox" then
-          let dir = if isDarwin
-            then "Library/Application Support/Mozilla/NativeMessagingHosts"
-            else ".mozilla/native-messaging-hosts";
-          in [
-            {
-              "${dir}/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/hosts/firefox/com.github.browserpass.native.json";
-            }
-          ]
-        else if x == "vivaldi" then
-          let dir = if isDarwin
-            then "Library/Application Support/Vivaldi/NativeMessagingHosts"
-            else ".config/vivaldi/NativeMessagingHosts";
-          in [
-            {
-              "${dir}/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/hosts/chromium/com.github.browserpass.native.json";
-              "${dir}/../policies/managed/com.github.browserpass.native.json".source =
-                "${pkgs.browserpass}/lib/browserpass/policies/chromium/com.github.browserpass.native.json";
-            }
-          ]
-        else throw "unknown browser ${x}") config.programs.browserpass.browsers
-      );
+    home.file = foldl' (a: b: a // b) { } (concatMap (x:
+      with pkgs.stdenv;
+      if x == "chrome" then
+        let
+          dir = if isDarwin then
+            "Library/Application Support/Google/Chrome/NativeMessagingHosts"
+          else
+            ".config/google-chrome/NativeMessagingHosts";
+        in [{
+          "${dir}/com.github.browserpass.native.json".source =
+            "${pkgs.browserpass}/lib/browserpass/hosts/chromium/com.github.browserpass.native.json";
+          "${dir}/../policies/managed/com.github.browserpass.native.json".source =
+            "${pkgs.browserpass}/lib/browserpass/policies/chromium/com.github.browserpass.native.json";
+        }]
+      else if x == "chromium" then
+        let
+          dir = if isDarwin then
+            "Library/Application Support/Chromium/NativeMessagingHosts"
+          else
+            ".config/chromium/NativeMessagingHosts";
+        in [
+          {
+            "${dir}/com.github.browserpass.native.json".source =
+              "${pkgs.browserpass}/lib/browserpass/hosts/chromium/com.github.browserpass.native.json";
+          }
+          {
+            "${dir}/../policies/managed/com.github.browserpass.native.json".source =
+              "${pkgs.browserpass}/lib/browserpass/policies/chromium/com.github.browserpass.native.json";
+          }
+        ]
+      else if x == "firefox" then
+        let
+          dir = if isDarwin then
+            "Library/Application Support/Mozilla/NativeMessagingHosts"
+          else
+            ".mozilla/native-messaging-hosts";
+        in [{
+          "${dir}/com.github.browserpass.native.json".source =
+            "${pkgs.browserpass}/lib/browserpass/hosts/firefox/com.github.browserpass.native.json";
+        }]
+      else if x == "vivaldi" then
+        let
+          dir = if isDarwin then
+            "Library/Application Support/Vivaldi/NativeMessagingHosts"
+          else
+            ".config/vivaldi/NativeMessagingHosts";
+        in [{
+          "${dir}/com.github.browserpass.native.json".source =
+            "${pkgs.browserpass}/lib/browserpass/hosts/chromium/com.github.browserpass.native.json";
+          "${dir}/../policies/managed/com.github.browserpass.native.json".source =
+            "${pkgs.browserpass}/lib/browserpass/policies/chromium/com.github.browserpass.native.json";
+        }]
+      else
+        throw "unknown browser ${x}") config.programs.browserpass.browsers);
   };
 }
diff --git a/modules/programs/chromium.nix b/modules/programs/chromium.nix
index a34fef3d4..4e35c07b9 100644
--- a/modules/programs/chromium.nix
+++ b/modules/programs/chromium.nix
@@ -5,46 +5,44 @@ with lib;
 let
 
   browserModule = defaultPkg: name: visible:
-    let
-      browser = (builtins.parseDrvName defaultPkg.name).name;
-    in
-      {
-        enable = mkOption {
-          inherit visible;
-          default = false;
-          example = true;
-          description = "Whether to enable ${name}.";
-          type = lib.types.bool;
-        };
-
-        package = mkOption {
-          inherit visible;
-          type = types.package;
-          default = defaultPkg;
-          defaultText = literalExample "pkgs.${browser}";
-          description = "The ${name} package to use.";
-        };
-
-        extensions = mkOption {
-          inherit visible;
-          type = types.listOf types.str;
-          default = [];
-          example = literalExample ''
-            [
-              "chlffgpmiacpedhhbkiomidkjlcfhogd" # pushbullet
-              "mbniclmhobmnbdlbpiphghaielnnpgdp" # lightshot
-              "gcbommkclmclpchllfjekcdonpmejbdp" # https everywhere
-              "cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock origin
-            ]
-          '';
-          description = ''
-            List of ${name} extensions to install.
-            To find the extension ID, check its URL on the
-            <link xlink:href="https://chrome.google.com/webstore/category/extensions">Chrome Web Store</link>.
-          '';
-        };
+    let browser = (builtins.parseDrvName defaultPkg.name).name;
+    in {
+      enable = mkOption {
+        inherit visible;
+        default = false;
+        example = true;
+        description = "Whether to enable ${name}.";
+        type = lib.types.bool;
       };
 
+      package = mkOption {
+        inherit visible;
+        type = types.package;
+        default = defaultPkg;
+        defaultText = literalExample "pkgs.${browser}";
+        description = "The ${name} package to use.";
+      };
+
+      extensions = mkOption {
+        inherit visible;
+        type = types.listOf types.str;
+        default = [ ];
+        example = literalExample ''
+          [
+            "chlffgpmiacpedhhbkiomidkjlcfhogd" # pushbullet
+            "mbniclmhobmnbdlbpiphghaielnnpgdp" # lightshot
+            "gcbommkclmclpchllfjekcdonpmejbdp" # https everywhere
+            "cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock origin
+          ]
+        '';
+        description = ''
+          List of ${name} extensions to install.
+          To find the extension ID, check its URL on the
+          <link xlink:href="https://chrome.google.com/webstore/category/extensions">Chrome Web Store</link>.
+        '';
+      };
+    };
+
   browserConfig = cfg:
     let
 
@@ -57,31 +55,32 @@ let
         google-chrome-dev = "Google/Chrome Dev";
       };
 
-      configDir = if pkgs.stdenv.isDarwin
-        then "Library/Application Support/${getAttr browser darwinDirs}"
-        else "${config.xdg.configHome}/${browser}";
+      configDir = if pkgs.stdenv.isDarwin then
+        "Library/Application Support/${getAttr browser darwinDirs}"
+      else
+        "${config.xdg.configHome}/${browser}";
 
       extensionJson = ext: {
         name = "${configDir}/External Extensions/${ext}.json";
         value.text = builtins.toJSON {
-          external_update_url = "https://clients2.google.com/service/update2/crx";
+          external_update_url =
+            "https://clients2.google.com/service/update2/crx";
         };
       };
 
-    in
-      mkIf cfg.enable {
-        home.packages = [ cfg.package ];
-        home.file = listToAttrs (map extensionJson cfg.extensions);
-      };
+    in mkIf cfg.enable {
+      home.packages = [ cfg.package ];
+      home.file = listToAttrs (map extensionJson cfg.extensions);
+    };
 
-in
-
-{
+in {
   options.programs = {
     chromium = browserModule pkgs.chromium "Chromium" true;
     google-chrome = browserModule pkgs.google-chrome "Google Chrome" false;
-    google-chrome-beta = browserModule pkgs.google-chrome-beta "Google Chrome Beta" false;
-    google-chrome-dev = browserModule pkgs.google-chrome-dev "Google Chrome Dev" false;
+    google-chrome-beta =
+      browserModule pkgs.google-chrome-beta "Google Chrome Beta" false;
+    google-chrome-dev =
+      browserModule pkgs.google-chrome-dev "Google Chrome Dev" false;
   };
 
   config = mkMerge [
diff --git a/modules/programs/command-not-found/command-not-found.nix b/modules/programs/command-not-found/command-not-found.nix
index 0053fe36a..b79fde0f6 100644
--- a/modules/programs/command-not-found/command-not-found.nix
+++ b/modules/programs/command-not-found/command-not-found.nix
@@ -13,8 +13,11 @@ let
     isExecutable = true;
     inherit (pkgs) perl;
     inherit (cfg) dbPath;
-    perlFlags = concatStrings (map (path: "-I ${path}/lib/perl5/site_perl ")
-      [ pkgs.perlPackages.DBI pkgs.perlPackages.DBDSQLite pkgs.perlPackages.StringShellQuote ]);
+    perlFlags = concatStrings (map (path: "-I ${path}/lib/perl5/site_perl ") [
+      pkgs.perlPackages.DBI
+      pkgs.perlPackages.DBDSQLite
+      pkgs.perlPackages.StringShellQuote
+    ]);
   };
 
   shInit = commandNotFoundHandlerName: ''
@@ -31,14 +34,13 @@ let
     }
   '';
 
-in
-
-{
+in {
   options.programs.command-not-found = {
     enable = mkEnableOption "command-not-found hook for interactive shell";
 
     dbPath = mkOption {
-      default = "/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite" ;
+      default =
+        "/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite";
       description = ''
         Absolute path to <filename>programs.sqlite</filename>. By
         default this file will be provided by your channel
diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix
index e4c17239c..beb40a962 100644
--- a/modules/programs/direnv.nix
+++ b/modules/programs/direnv.nix
@@ -6,21 +6,17 @@ let
 
   cfg = config.programs.direnv;
   configFile = config:
-    pkgs.runCommand "config.toml"
-      {
-         buildInputs = [ pkgs.remarshal ];
-         preferLocalBuild = true;
-         allowSubstitutes = false;
-      }
-      ''
-        remarshal -if json -of toml \
-          < ${pkgs.writeText "config.json" (builtins.toJSON config)} \
-          > $out
-      '';
+    pkgs.runCommand "config.toml" {
+      buildInputs = [ pkgs.remarshal ];
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+    } ''
+      remarshal -if json -of toml \
+        < ${pkgs.writeText "config.json" (builtins.toJSON config)} \
+        > $out
+    '';
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options.programs.direnv = {
@@ -28,7 +24,7 @@ in
 
     config = mkOption {
       type = types.attrs;
-      default = {};
+      default = { };
       description = ''
         Configuration written to
         <filename>~/.config/direnv/config.toml</filename>.
@@ -79,22 +75,18 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.direnv ];
 
-    xdg.configFile."direnv/config.toml" = mkIf (cfg.config != {}) {
-      source = configFile cfg.config;
-    };
+    xdg.configFile."direnv/config.toml" =
+      mkIf (cfg.config != { }) { source = configFile cfg.config; };
 
-    xdg.configFile."direnv/direnvrc" = mkIf (cfg.stdlib != "") {
-      text = cfg.stdlib;
-    };
+    xdg.configFile."direnv/direnvrc" =
+      mkIf (cfg.stdlib != "") { text = cfg.stdlib; };
 
-    programs.bash.initExtra =
-      mkIf cfg.enableBashIntegration (
-        # Using mkAfter to make it more likely to appear after other
-        # manipulations of the prompt.
-        mkAfter ''
-          eval "$(${pkgs.direnv}/bin/direnv hook bash)"
-        ''
-      );
+    programs.bash.initExtra = mkIf cfg.enableBashIntegration (
+    # Using mkAfter to make it more likely to appear after other
+    # manipulations of the prompt.
+      mkAfter ''
+        eval "$(${pkgs.direnv}/bin/direnv hook bash)"
+      '');
 
     programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
       eval "$(${pkgs.direnv}/bin/direnv hook zsh)"
diff --git a/modules/programs/eclipse.nix b/modules/programs/eclipse.nix
index 4a432c9fe..8ce605b10 100644
--- a/modules/programs/eclipse.nix
+++ b/modules/programs/eclipse.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.eclipse;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -27,13 +25,13 @@ in
 
       jvmArgs = mkOption {
         type = types.listOf types.str;
-        default = [];
+        default = [ ];
         description = "JVM arguments to use for the Eclipse process.";
       };
 
       plugins = mkOption {
         type = types.listOf types.package;
-        default = [];
+        default = [ ];
         description = "Plugins that should be added to Eclipse.";
       };
     };
@@ -43,10 +41,8 @@ in
     home.packages = [
       (pkgs.eclipses.eclipseWithPlugins {
         eclipse = pkgs.eclipses.eclipse-platform;
-        jvmArgs =
-          cfg.jvmArgs
-          ++ optional cfg.enableLombok
-              "-javaagent:${pkgs.lombok}/share/java/lombok.jar";
+        jvmArgs = cfg.jvmArgs ++ optional cfg.enableLombok
+          "-javaagent:${pkgs.lombok}/share/java/lombok.jar";
         plugins = cfg.plugins;
       })
     ];
diff --git a/modules/programs/feh.nix b/modules/programs/feh.nix
index 1b14e71f5..b1b33697e 100644
--- a/modules/programs/feh.nix
+++ b/modules/programs/feh.nix
@@ -9,31 +9,35 @@ let
   disableBinding = func: key: func;
   enableBinding = func: key: "${func} ${toString key}";
 
-in
-
-{
+in {
   options.programs.feh = {
     enable = mkEnableOption "feh - a fast and light image viewer";
 
     buttons = mkOption {
-      default = {};
+      default = { };
       type = with types; attrsOf (nullOr (either str int));
-      example = { zoom_in = 4; zoom_out = "C-4"; };
+      example = {
+        zoom_in = 4;
+        zoom_out = "C-4";
+      };
       description = ''
         Override feh's default mouse button mapping. If you want to disable an
-	action, set its value to null.
+        action, set its value to null.
         See <link xlink:href="https://man.finalrewind.org/1/feh/#x425554544f4e53"/> for
         default bindings and available commands.
       '';
     };
 
     keybindings = mkOption {
-      default = {};
+      default = { };
       type = types.attrsOf (types.nullOr types.str);
-      example = { zoom_in = "plus"; zoom_out = "minus"; };
+      example = {
+        zoom_in = "plus";
+        zoom_out = "minus";
+      };
       description = ''
         Override feh's default keybindings. If you want to disable a keybinding
-	set its value to null.
+        set its value to null.
         See <link xlink:href="https://man.finalrewind.org/1/feh/#x4b455953"/> for
         default bindings and available commands.
       '';
@@ -41,23 +45,26 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions = [
-      {
-        assertion = ((filterAttrs (n: v: v == "") cfg.keybindings) == {});
-	message = "To disable a keybinding, use `null` instead of an empty string.";
-      }
-    ];
+    assertions = [{
+      assertion = ((filterAttrs (n: v: v == "") cfg.keybindings) == { });
+      message =
+        "To disable a keybinding, use `null` instead of an empty string.";
+    }];
 
     home.packages = [ pkgs.feh ];
 
     xdg.configFile."feh/buttons".text = ''
-      ${concatStringsSep "\n" (mapAttrsToList disableBinding (filterAttrs (n: v: v == null) cfg.buttons))}
-      ${concatStringsSep "\n" (mapAttrsToList enableBinding (filterAttrs (n: v: v != null) cfg.buttons))}
+      ${concatStringsSep "\n" (mapAttrsToList disableBinding
+        (filterAttrs (n: v: v == null) cfg.buttons))}
+      ${concatStringsSep "\n" (mapAttrsToList enableBinding
+        (filterAttrs (n: v: v != null) cfg.buttons))}
     '';
 
     xdg.configFile."feh/keys".text = ''
-      ${concatStringsSep "\n" (mapAttrsToList disableBinding (filterAttrs (n: v: v == null) cfg.keybindings))}
-      ${concatStringsSep "\n" (mapAttrsToList enableBinding (filterAttrs (n: v: v != null) cfg.keybindings))}
+      ${concatStringsSep "\n" (mapAttrsToList disableBinding
+        (filterAttrs (n: v: v == null) cfg.keybindings))}
+      ${concatStringsSep "\n" (mapAttrsToList enableBinding
+        (filterAttrs (n: v: v != null) cfg.keybindings))}
     '';
   };
 }
diff --git a/modules/programs/fzf.nix b/modules/programs/fzf.nix
index 832c0bfa3..36eb3a1cd 100644
--- a/modules/programs/fzf.nix
+++ b/modules/programs/fzf.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.fzf;
 
-in
-
-{
+in {
   options.programs.fzf = {
     enable = mkEnableOption "fzf - a command-line fuzzy finder";
 
@@ -24,7 +22,7 @@ in
 
     defaultOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--height 40%" "--border" ];
       description = ''
         Extra command line options given to fzf by default.
@@ -43,7 +41,7 @@ in
 
     fileWidgetOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--preview 'head {}'" ];
       description = ''
         Command line options for the CTRL-T keybinding.
@@ -53,7 +51,7 @@ in
     changeDirWidgetCommand = mkOption {
       type = types.nullOr types.str;
       default = null;
-      example = "fd --type d" ;
+      example = "fd --type d";
       description = ''
         The command that gets executed as the source for fzf for the
         ALT-C keybinding.
@@ -62,7 +60,7 @@ in
 
     changeDirWidgetOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--preview 'tree -C {} | head -200'" ];
       description = ''
         Command line options for the ALT-C keybinding.
@@ -80,7 +78,7 @@ in
 
     historyWidgetOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--sort" "--exact" ];
       description = ''
         Command line options for the CTRL-R keybinding.
@@ -107,19 +105,17 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.fzf ];
 
-    home.sessionVariables =
-      mapAttrs (n: v: toString v) (
-        filterAttrs (n: v: v != [] && v != null) {
-          FZF_ALT_C_COMMAND = cfg.changeDirWidgetCommand;
-          FZF_ALT_C_OPTS = cfg.changeDirWidgetOptions;
-          FZF_CTRL_R_COMMAND = cfg.historyWidgetCommand;
-          FZF_CTRL_R_OPTS = cfg.historyWidgetOptions;
-          FZF_CTRL_T_COMMAND = cfg.fileWidgetCommand;
-          FZF_CTRL_T_OPTS = cfg.fileWidgetOptions;
-          FZF_DEFAULT_COMMAND = cfg.defaultCommand;
-          FZF_DEFAULT_OPTS = cfg.defaultOptions;
-        }
-      );
+    home.sessionVariables = mapAttrs (n: v: toString v)
+      (filterAttrs (n: v: v != [ ] && v != null) {
+        FZF_ALT_C_COMMAND = cfg.changeDirWidgetCommand;
+        FZF_ALT_C_OPTS = cfg.changeDirWidgetOptions;
+        FZF_CTRL_R_COMMAND = cfg.historyWidgetCommand;
+        FZF_CTRL_R_OPTS = cfg.historyWidgetOptions;
+        FZF_CTRL_T_COMMAND = cfg.fileWidgetCommand;
+        FZF_CTRL_T_OPTS = cfg.fileWidgetOptions;
+        FZF_DEFAULT_COMMAND = cfg.defaultCommand;
+        FZF_DEFAULT_OPTS = cfg.defaultOptions;
+      });
 
     programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
       if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
diff --git a/modules/programs/getmail-accounts.nix b/modules/programs/getmail-accounts.nix
index 32e1312dc..24eb4fb58 100644
--- a/modules/programs/getmail-accounts.nix
+++ b/modules/programs/getmail-accounts.nix
@@ -17,8 +17,8 @@ with lib;
 
     mailboxes = mkOption {
       type = types.nonEmptyListOf types.str;
-      default = [];
-      example = ["INBOX" "INBOX.spam"];
+      default = [ ];
+      example = [ "INBOX" "INBOX.spam" ];
       description = ''
         A non-empty list of mailboxes. To download all mail you can
         use the <literal>ALL</literal> mailbox.
diff --git a/modules/programs/getmail.nix b/modules/programs/getmail.nix
index 3de898ef7..2c3919dcf 100644
--- a/modules/programs/getmail.nix
+++ b/modules/programs/getmail.nix
@@ -4,27 +4,26 @@ with lib;
 
 let
 
-  accounts = filter (a: a.getmail.enable)
-    (attrValues config.accounts.email.accounts);
+  accounts =
+    filter (a: a.getmail.enable) (attrValues config.accounts.email.accounts);
 
-  renderAccountConfig = account: with account;
+  renderAccountConfig = account:
+    with account;
     let
       passCmd = concatMapStringsSep ", " (x: "'${x}'") passwordCommand;
-      renderedMailboxes = concatMapStringsSep ", " (x: "'${x}'") getmail.mailboxes;
-      retrieverType = if imap.tls.enable
-        then "SimpleIMAPSSLRetriever"
-        else "SimpleIMAPRetriever";
-      destination = if getmail.destinationCommand != null
-        then
-        {
-          destinationType = "MDA_external";
-          destinationPath = getmail.destinationCommand;
-        }
-        else
-        {
-          destinationType = "Maildir";
-          destinationPath = "${maildir.absPath}/";
-        };
+      renderedMailboxes =
+        concatMapStringsSep ", " (x: "'${x}'") getmail.mailboxes;
+      retrieverType = if imap.tls.enable then
+        "SimpleIMAPSSLRetriever"
+      else
+        "SimpleIMAPRetriever";
+      destination = if getmail.destinationCommand != null then {
+        destinationType = "MDA_external";
+        destinationPath = getmail.destinationCommand;
+      } else {
+        destinationType = "Maildir";
+        destinationPath = "${maildir.absPath}/";
+      };
       renderGetmailBoolean = v: if v then "true" else "false";
     in ''
       # Generated by Home-Manager.
@@ -46,15 +45,13 @@ let
     '';
   getmailEnabled = length (filter (a: a.getmail.enable) accounts) > 0;
   # Watch out! This is used by the getmail.service too!
-  renderConfigFilepath = a: ".getmail/getmail${if a.primary then "rc" else a.name}";
+  renderConfigFilepath = a:
+    ".getmail/getmail${if a.primary then "rc" else a.name}";
 
-in
-
-{
+in {
   config = mkIf getmailEnabled {
-    home.file =
-      foldl' (a: b: a // b) {}
+    home.file = foldl' (a: b: a // b) { }
       (map (a: { "${renderConfigFilepath a}".text = renderAccountConfig a; })
-      accounts);
+        accounts);
   };
 }
diff --git a/modules/programs/git.nix b/modules/programs/git.nix
index 913f86f71..a56aa10d5 100644
--- a/modules/programs/git.nix
+++ b/modules/programs/git.nix
@@ -14,36 +14,31 @@ let
       section = head sections;
       subsections = tail sections;
       subsection = concatStringsSep "." subsections;
-    in
-      if containsQuote || subsections == []
-      then name
-      else "${section} \"${subsection}\"";
+    in if containsQuote || subsections == [ ] then
+      name
+    else
+      ''${section} "${subsection}"'';
 
   # generation for multiple ini values
   mkKeyValue = k: v:
-    let
-      mkKeyValue = generators.mkKeyValueDefault {} "=" k;
-    in
-      concatStringsSep "\n" (map mkKeyValue (toList v));
+    let mkKeyValue = generators.mkKeyValueDefault { } "=" k;
+    in concatStringsSep "\n" (map mkKeyValue (toList v));
 
   # converts { a.b.c = 5; } to { "a.b".c = 5; } for toINI
-  gitFlattenAttrs =
-    let
-      recurse = path: value:
-        if isAttrs value then
-          mapAttrsToList (name: value: recurse ([name] ++ path) value) value
-        else if length path > 1 then
-          { ${concatStringsSep "." (reverseList (tail path))}.${head path} = value; }
-        else
-          { ${head path} = value; };
-    in
-      attrs: foldl recursiveUpdate {} (flatten (recurse [] attrs));
+  gitFlattenAttrs = let
+    recurse = path: value:
+      if isAttrs value then
+        mapAttrsToList (name: value: recurse ([ name ] ++ path) value) value
+      else if length path > 1 then {
+        ${concatStringsSep "." (reverseList (tail path))}.${head path} = value;
+      } else {
+        ${head path} = value;
+      };
+  in attrs: foldl recursiveUpdate { } (flatten (recurse [ ] attrs));
 
   gitToIni = attrs:
-    let
-      toIni = generators.toINI { inherit mkKeyValue mkSectionName; };
-    in
-      toIni (gitFlattenAttrs attrs);
+    let toIni = generators.toINI { inherit mkKeyValue mkSectionName; };
+    in toIni (gitFlattenAttrs attrs);
 
   gitIniType = with types;
     let
@@ -51,8 +46,7 @@ let
       multipleType = either primitiveType (listOf primitiveType);
       sectionType = attrsOf multipleType;
       supersectionType = attrsOf (either multipleType sectionType);
-    in
-      attrsOf supersectionType;
+    in attrsOf supersectionType;
 
   signModule = types.submodule {
     options = {
@@ -98,21 +92,18 @@ let
 
       contents = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         description = ''
           Configuration to include. If empty then a path must be given.
         '';
       };
     };
 
-    config.path = mkIf (config.contents != {}) (
-      mkDefault (pkgs.writeText "contents" (gitToIni config.contents))
-    );
+    config.path = mkIf (config.contents != { })
+      (mkDefault (pkgs.writeText "contents" (gitToIni config.contents)));
   });
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -143,7 +134,7 @@ in
 
       aliases = mkOption {
         type = types.attrsOf types.str;
-        default = {};
+        default = { };
         example = { co = "checkout"; };
         description = "Git aliases to define.";
       };
@@ -156,7 +147,7 @@ in
 
       extraConfig = mkOption {
         type = types.either types.lines gitIniType;
-        default = {};
+        default = { };
         example = {
           core = { whitespace = "trailing-space,space-before-tab"; };
           url."ssh://git@host".insteadOf = "otherhost";
@@ -174,21 +165,21 @@ in
 
       ignores = mkOption {
         type = types.listOf types.str;
-        default = [];
+        default = [ ];
         example = [ "*~" "*.swp" ];
         description = "List of paths that should be globally ignored.";
       };
 
       attributes = mkOption {
         type = types.listOf types.str;
-        default = [];
+        default = [ ];
         example = [ "*.pdf diff=pdf" ];
         description = "List of defining attributes set globally.";
       };
 
       includes = mkOption {
         type = types.listOf includeModule;
-        default = [];
+        default = [ ];
         example = literalExample ''
           [
             { path = "~/path/to/config.inc"; }
@@ -217,109 +208,96 @@ in
     };
   };
 
-  config = mkIf cfg.enable (
-    mkMerge [
-      {
-        home.packages = [ cfg.package ];
+  config = mkIf cfg.enable (mkMerge [
+    {
+      home.packages = [ cfg.package ];
 
-        programs.git.iniContent.user = {
-          name = mkIf (cfg.userName != null) cfg.userName;
-          email = mkIf (cfg.userEmail != null) cfg.userEmail;
+      programs.git.iniContent.user = {
+        name = mkIf (cfg.userName != null) cfg.userName;
+        email = mkIf (cfg.userEmail != null) cfg.userEmail;
+      };
+
+      xdg.configFile = {
+        "git/config".text = gitToIni cfg.iniContent;
+
+        "git/ignore" = mkIf (cfg.ignores != [ ]) {
+          text = concatStringsSep "\n" cfg.ignores + "\n";
         };
 
-        xdg.configFile = {
-          "git/config".text = gitToIni cfg.iniContent;
+        "git/attributes" = mkIf (cfg.attributes != [ ]) {
+          text = concatStringsSep "\n" cfg.attributes + "\n";
+        };
+      };
+    }
 
-          "git/ignore" = mkIf (cfg.ignores != []) {
-            text = concatStringsSep "\n" cfg.ignores + "\n";
+    {
+      programs.git.iniContent = let
+        hasSmtp = name: account: account.smtp != null;
+
+        genIdentity = name: account:
+          with account;
+          nameValuePair "sendemail.${name}" ({
+            smtpEncryption = if smtp.tls.enable then "tls" else "";
+            smtpServer = smtp.host;
+            smtpUser = userName;
+            from = address;
+          } // optionalAttrs (smtp.port != null) {
+            smtpServerPort = smtp.port;
+          });
+      in mapAttrs' genIdentity
+      (filterAttrs hasSmtp config.accounts.email.accounts);
+    }
+
+    (mkIf (cfg.signing != null) {
+      programs.git.iniContent = {
+        user.signingKey = cfg.signing.key;
+        commit.gpgSign = cfg.signing.signByDefault;
+        gpg.program = cfg.signing.gpgPath;
+      };
+    })
+
+    (mkIf (cfg.aliases != { }) { programs.git.iniContent.alias = cfg.aliases; })
+
+    (mkIf (lib.isAttrs cfg.extraConfig) {
+      programs.git.iniContent = cfg.extraConfig;
+    })
+
+    (mkIf (lib.isString cfg.extraConfig) {
+      warnings = [''
+        Using programs.git.extraConfig as a string option is
+        deprecated and will be removed in the future. Please
+        change to using it as an attribute set instead.
+      ''];
+
+      xdg.configFile."git/config".text = cfg.extraConfig;
+    })
+
+    (mkIf (cfg.includes != [ ]) {
+      xdg.configFile."git/config".text = let
+        include = i:
+          with i;
+          if condition != null then {
+            includeIf.${condition}.path = "${path}";
+          } else {
+            include.path = "${path}";
           };
+      in mkAfter
+      (concatStringsSep "\n" (map gitToIni (map include cfg.includes)));
+    })
 
-          "git/attributes" = mkIf (cfg.attributes != []) {
-            text = concatStringsSep "\n" cfg.attributes + "\n";
-          };
+    (mkIf cfg.lfs.enable {
+      home.packages = [ pkgs.git-lfs ];
+
+      programs.git.iniContent.filter.lfs =
+        let skipArg = optional cfg.lfs.skipSmudge "--skip";
+        in {
+          clean = "git-lfs clean -- %f";
+          process =
+            concatStringsSep " " ([ "git-lfs" "filter-process" ] ++ skipArg);
+          required = true;
+          smudge = concatStringsSep " "
+            ([ "git-lfs" "smudge" ] ++ skipArg ++ [ "--" "%f" ]);
         };
-      }
-
-      {
-        programs.git.iniContent =
-          let
-            hasSmtp = name: account: account.smtp != null;
-
-            genIdentity = name: account: with account;
-              nameValuePair "sendemail.${name}" ({
-                smtpEncryption = if smtp.tls.enable then "tls" else "";
-                smtpServer = smtp.host;
-                smtpUser = userName;
-                from = address;
-              }
-              // optionalAttrs (smtp.port != null) {
-                smtpServerPort = smtp.port;
-              });
-          in
-            mapAttrs' genIdentity
-              (filterAttrs hasSmtp config.accounts.email.accounts);
-      }
-
-      (mkIf (cfg.signing != null) {
-        programs.git.iniContent = {
-          user.signingKey = cfg.signing.key;
-          commit.gpgSign = cfg.signing.signByDefault;
-          gpg.program = cfg.signing.gpgPath;
-        };
-      })
-
-      (mkIf (cfg.aliases != {}) {
-        programs.git.iniContent.alias = cfg.aliases;
-      })
-
-      (mkIf (lib.isAttrs cfg.extraConfig) {
-        programs.git.iniContent = cfg.extraConfig;
-      })
-
-      (mkIf (lib.isString cfg.extraConfig) {
-        warnings = [
-          ''
-            Using programs.git.extraConfig as a string option is
-            deprecated and will be removed in the future. Please
-            change to using it as an attribute set instead.
-          ''
-        ];
-
-        xdg.configFile."git/config".text = cfg.extraConfig;
-      })
-
-      (mkIf (cfg.includes != []) {
-        xdg.configFile."git/config".text =
-          let
-            include = i: with i;
-              if condition != null
-              then { includeIf.${condition}.path = "${path}"; }
-              else { include.path = "${path}"; };
-          in
-            mkAfter
-            (concatStringsSep "\n"
-            (map gitToIni
-            (map include cfg.includes)));
-      })
-
-      (mkIf cfg.lfs.enable {
-        home.packages = [ pkgs.git-lfs ];
-
-        programs.git.iniContent.filter.lfs =
-          let
-            skipArg = optional cfg.lfs.skipSmudge "--skip";
-          in
-            {
-              clean = "git-lfs clean -- %f";
-              process = concatStringsSep " " (
-                [ "git-lfs" "filter-process" ] ++ skipArg
-              );
-              required = true;
-              smudge = concatStringsSep " " (
-                [ "git-lfs" "smudge" ] ++ skipArg ++ [ "--" "%f" ]
-              );
-            };
-      })
-    ]
-  );
+    })
+  ]);
 }
diff --git a/modules/programs/gnome-terminal.nix b/modules/programs/gnome-terminal.nix
index 9a4436449..570a1fc7d 100644
--- a/modules/programs/gnome-terminal.nix
+++ b/modules/programs/gnome-terminal.nix
@@ -11,125 +11,118 @@ let
     . ${pkgs.gnome3.vte}/etc/profile.d/vte.sh
   '';
 
-  backForeSubModule = types.submodule (
-    { ... }: {
-      options = {
-        foreground = mkOption {
-          type = types.str;
-          description = "The foreground color.";
-        };
-
-        background = mkOption {
-          type = types.str;
-          description = "The background color.";
-        };
+  backForeSubModule = types.submodule ({ ... }: {
+    options = {
+      foreground = mkOption {
+        type = types.str;
+        description = "The foreground color.";
       };
-    }
-  );
 
-  profileColorsSubModule = types.submodule (
-    { ... }: {
-      options = {
-        foregroundColor = mkOption {
-          type = types.str;
-          description = "The foreground color.";
-        };
-
-        backgroundColor = mkOption {
-          type = types.str;
-          description = "The background color.";
-        };
-
-        boldColor = mkOption {
-          default = null;
-          type = types.nullOr types.str;
-          description = "The bold color, null to use same as foreground.";
-        };
-
-        palette = mkOption {
-          type = types.listOf types.str;
-          description = "The terminal palette.";
-        };
-
-        cursor = mkOption {
-          default = null;
-          type = types.nullOr backForeSubModule;
-          description = "The color for the terminal cursor.";
-        };
-
-        highlight = mkOption {
-          default = null;
-          type = types.nullOr backForeSubModule;
-          description = "The colors for the terminal’s highlighted area.";
-        };
+      background = mkOption {
+        type = types.str;
+        description = "The background color.";
       };
-    }
-  );
+    };
+  });
 
-  profileSubModule = types.submodule (
-    { name, config, ... }: {
-      options = {
-        default = mkOption {
-          default = false;
-          type = types.bool;
-          description = "Whether this should be the default profile.";
-        };
-
-        visibleName = mkOption {
-          type = types.str;
-          description = "The profile name.";
-        };
-
-        colors = mkOption {
-          default = null;
-          type = types.nullOr profileColorsSubModule;
-          description = "The terminal colors, null to use system default.";
-        };
-
-        cursorShape = mkOption {
-          default = "block";
-          type = types.enum [ "block" "ibeam" "underline" ];
-          description = "The cursor shape.";
-        };
-
-        font = mkOption {
-          default = null;
-          type = types.nullOr types.str;
-          description = "The font name, null to use system default.";
-        };
-
-        allowBold = mkOption {
-          default = null;
-          type = types.nullOr types.bool;
-          description = ''
-            If <literal>true</literal>, allow applications in the
-            terminal to make text boldface.
-          '';
-        };
-
-        scrollOnOutput = mkOption {
-          default = true;
-          type = types.bool;
-          description = "Whether to scroll when output is written.";
-        };
-
-        showScrollbar = mkOption {
-          default = true;
-          type = types.bool;
-          description = "Whether the scroll bar should be visible.";
-        };
-
-        scrollbackLines = mkOption {
-          default = 10000;
-          type = types.nullOr types.int;
-          description =
-            ''
-              The number of scrollback lines to keep, null for infinite.
-            '';
-        };
+  profileColorsSubModule = types.submodule ({ ... }: {
+    options = {
+      foregroundColor = mkOption {
+        type = types.str;
+        description = "The foreground color.";
       };
-    }
-  );
+
+      backgroundColor = mkOption {
+        type = types.str;
+        description = "The background color.";
+      };
+
+      boldColor = mkOption {
+        default = null;
+        type = types.nullOr types.str;
+        description = "The bold color, null to use same as foreground.";
+      };
+
+      palette = mkOption {
+        type = types.listOf types.str;
+        description = "The terminal palette.";
+      };
+
+      cursor = mkOption {
+        default = null;
+        type = types.nullOr backForeSubModule;
+        description = "The color for the terminal cursor.";
+      };
+
+      highlight = mkOption {
+        default = null;
+        type = types.nullOr backForeSubModule;
+        description = "The colors for the terminal’s highlighted area.";
+      };
+    };
+  });
+
+  profileSubModule = types.submodule ({ name, config, ... }: {
+    options = {
+      default = mkOption {
+        default = false;
+        type = types.bool;
+        description = "Whether this should be the default profile.";
+      };
+
+      visibleName = mkOption {
+        type = types.str;
+        description = "The profile name.";
+      };
+
+      colors = mkOption {
+        default = null;
+        type = types.nullOr profileColorsSubModule;
+        description = "The terminal colors, null to use system default.";
+      };
+
+      cursorShape = mkOption {
+        default = "block";
+        type = types.enum [ "block" "ibeam" "underline" ];
+        description = "The cursor shape.";
+      };
+
+      font = mkOption {
+        default = null;
+        type = types.nullOr types.str;
+        description = "The font name, null to use system default.";
+      };
+
+      allowBold = mkOption {
+        default = null;
+        type = types.nullOr types.bool;
+        description = ''
+          If <literal>true</literal>, allow applications in the
+          terminal to make text boldface.
+        '';
+      };
+
+      scrollOnOutput = mkOption {
+        default = true;
+        type = types.bool;
+        description = "Whether to scroll when output is written.";
+      };
+
+      showScrollbar = mkOption {
+        default = true;
+        type = types.bool;
+        description = "Whether the scroll bar should be visible.";
+      };
+
+      scrollbackLines = mkOption {
+        default = 10000;
+        type = types.nullOr types.int;
+        description = ''
+          The number of scrollback lines to keep, null for infinite.
+        '';
+      };
+    };
+  });
 
   buildProfileSet = pcfg:
     {
@@ -137,56 +130,41 @@ let
       scrollbar-policy = if pcfg.showScrollbar then "always" else "never";
       scrollback-lines = pcfg.scrollbackLines;
       cursor-shape = pcfg.cursorShape;
-    }
-    // (
-      if (pcfg.font == null)
-      then { use-system-font = true; }
-      else { use-system-font = false; font = pcfg.font; }
-    ) // (
-      if (pcfg.colors == null)
-      then { use-theme-colors = true; }
-      else (
-        {
-          use-theme-colors = false;
-          foreground-color = pcfg.colors.foregroundColor;
-          background-color = pcfg.colors.backgroundColor;
-          palette = pcfg.colors.palette;
-        }
-        // optionalAttrs (pcfg.allowBold != null) {
-          allow-bold = pcfg.allowBold;
-        }
-        // (
-          if (pcfg.colors.boldColor == null)
-          then { bold-color-same-as-fg = true; }
-          else {
-            bold-color-same-as-fg = false;
-            bold-color = pcfg.colors.boldColor;
-          }
-        )
-        // (
-          if (pcfg.colors.cursor != null)
-          then {
-            cursor-colors-set = true;
-            cursor-foreground-color = pcfg.colors.cursor.foreground;
-            cursor-background-color = pcfg.colors.cursor.background;
-          }
-          else { cursor-colors-set = false; }
-        )
-        // (
-          if (pcfg.colors.highlight != null)
-          then {
-            highlight-colors-set = true;
-            highlight-foreground-color = pcfg.colors.highlight.foreground;
-            highlight-background-color = pcfg.colors.highlight.background;
-          }
-          else { highlight-colors-set = false; }
-        )
-      )
-    );
+    } // (if (pcfg.font == null) then {
+      use-system-font = true;
+    } else {
+      use-system-font = false;
+      font = pcfg.font;
+    }) // (if (pcfg.colors == null) then {
+      use-theme-colors = true;
+    } else
+      ({
+        use-theme-colors = false;
+        foreground-color = pcfg.colors.foregroundColor;
+        background-color = pcfg.colors.backgroundColor;
+        palette = pcfg.colors.palette;
+      } // optionalAttrs (pcfg.allowBold != null) {
+        allow-bold = pcfg.allowBold;
+      } // (if (pcfg.colors.boldColor == null) then {
+        bold-color-same-as-fg = true;
+      } else {
+        bold-color-same-as-fg = false;
+        bold-color = pcfg.colors.boldColor;
+      }) // (if (pcfg.colors.cursor != null) then {
+        cursor-colors-set = true;
+        cursor-foreground-color = pcfg.colors.cursor.foreground;
+        cursor-background-color = pcfg.colors.cursor.background;
+      } else {
+        cursor-colors-set = false;
+      }) // (if (pcfg.colors.highlight != null) then {
+        highlight-colors-set = true;
+        highlight-foreground-color = pcfg.colors.highlight.foreground;
+        highlight-background-color = pcfg.colors.highlight.background;
+      } else {
+        highlight-colors-set = false;
+      })));
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -206,7 +184,7 @@ in
       };
 
       profile = mkOption {
-        default = {};
+        default = { };
         type = types.attrsOf profileSubModule;
         description = "A set of Gnome Terminal profiles.";
       };
@@ -216,25 +194,21 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.gnome3.gnome_terminal ];
 
-    dconf.settings =
-      let
-        dconfPath = "org/gnome/terminal/legacy";
-      in
-        {
-          "${dconfPath}" = {
-            default-show-menubar = cfg.showMenubar;
-            theme-variant = cfg.themeVariant;
-            schema-version = 3;
-          };
+    dconf.settings = let dconfPath = "org/gnome/terminal/legacy";
+    in {
+      "${dconfPath}" = {
+        default-show-menubar = cfg.showMenubar;
+        theme-variant = cfg.themeVariant;
+        schema-version = 3;
+      };
 
-          "${dconfPath}/profiles:" = {
-            default = head (attrNames (filterAttrs (n: v: v.default) cfg.profile));
-            list = attrNames cfg.profile;
-          };
-        }
-        // mapAttrs' (n: v:
-          nameValuePair ("${dconfPath}/profiles:/:${n}") (buildProfileSet v)
-        ) cfg.profile;
+      "${dconfPath}/profiles:" = {
+        default = head (attrNames (filterAttrs (n: v: v.default) cfg.profile));
+        list = attrNames cfg.profile;
+      };
+    } // mapAttrs'
+    (n: v: nameValuePair ("${dconfPath}/profiles:/:${n}") (buildProfileSet v))
+    cfg.profile;
 
     programs.bash.initExtra = mkBefore vteInitStr;
     programs.zsh.initExtra = vteInitStr;
diff --git a/modules/programs/go.nix b/modules/programs/go.nix
index 39788e040..983769d26 100644
--- a/modules/programs/go.nix
+++ b/modules/programs/go.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.go;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rvolosatovs ];
 
   options = {
@@ -24,7 +22,7 @@ in
 
       packages = mkOption {
         type = with types; attrsOf path;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             "golang.org/x/text" = builtins.fetchGit "https://go.googlesource.com/text";
@@ -47,18 +45,15 @@ in
 
       extraGoPaths = mkOption {
         type = types.listOf types.str;
-        default = [];
+        default = [ ];
         example = [ "extraGoPath1" "extraGoPath2" ];
-        description =
-          let
-            goPathOpt = "programs.go.goPath";
-          in
-          ''
-            Extra <envar>GOPATH</envar>s relative to <envar>HOME</envar> appended
-            after
-            <varname><link linkend="opt-${goPathOpt}">${goPathOpt}</link></varname>,
-            if that option is set.
-          '';
+        description = let goPathOpt = "programs.go.goPath";
+        in ''
+          Extra <envar>GOPATH</envar>s relative to <envar>HOME</envar> appended
+          after
+          <varname><link linkend="opt-${goPathOpt}">${goPathOpt}</link></varname>,
+          if that option is set.
+        '';
       };
 
       goBin = mkOption {
@@ -74,24 +69,21 @@ in
     {
       home.packages = [ cfg.package ];
 
-      home.file =
-        let
-          goPath = if cfg.goPath != null then cfg.goPath else "go";
-          mkSrc = n: v: { "${goPath}/src/${n}".source = v; };
-        in
-          foldl' (a: b: a // b) {} (mapAttrsToList mkSrc cfg.packages);
+      home.file = let
+        goPath = if cfg.goPath != null then cfg.goPath else "go";
+        mkSrc = n: v: { "${goPath}/src/${n}".source = v; };
+      in foldl' (a: b: a // b) { } (mapAttrsToList mkSrc cfg.packages);
     }
 
     (mkIf (cfg.goPath != null) {
-      home.sessionVariables.GOPATH =
-        concatStringsSep ":"
-        (map builtins.toPath
+      home.sessionVariables.GOPATH = concatStringsSep ":" (map builtins.toPath
         (map (path: "${config.home.homeDirectory}/${path}")
-        ([cfg.goPath] ++ cfg.extraGoPaths)));
+          ([ cfg.goPath ] ++ cfg.extraGoPaths)));
     })
 
     (mkIf (cfg.goBin != null) {
-      home.sessionVariables.GOBIN = builtins.toPath "${config.home.homeDirectory}/${cfg.goBin}";
+      home.sessionVariables.GOBIN =
+        builtins.toPath "${config.home.homeDirectory}/${cfg.goBin}";
     })
   ]);
 }
diff --git a/modules/programs/home-manager.nix b/modules/programs/home-manager.nix
index 42e3c8a38..9039a59d7 100644
--- a/modules/programs/home-manager.nix
+++ b/modules/programs/home-manager.nix
@@ -8,9 +8,7 @@ let
 
   dag = config.lib.dag;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -33,10 +31,7 @@ in
   };
 
   config = mkIf (cfg.enable && !config.submoduleSupport.enable) {
-    home.packages = [
-      (pkgs.callPackage ../../home-manager {
-        inherit (cfg) path;
-      })
-    ];
+    home.packages =
+      [ (pkgs.callPackage ../../home-manager { inherit (cfg) path; }) ];
   };
 }
diff --git a/modules/programs/htop.nix b/modules/programs/htop.nix
index d700c4855..849660405 100644
--- a/modules/programs/htop.nix
+++ b/modules/programs/htop.nix
@@ -3,6 +3,7 @@
 with lib;
 
 let
+
   cfg = config.programs.htop;
 
   list = xs: concatMapStrings (x: "${toString x} ") xs;
@@ -81,16 +82,15 @@ let
     RightCPUs2 = 1;
     Blank = 2;
     CPU = 1;
-    "CPU(1)"= 1;
+    "CPU(1)" = 1;
     "CPU(2)" = 1;
     "CPU(3)" = 1;
     "CPU(4)" = 1;
   };
 
-  singleMeterType = types.coercedTo
-    (types.enum (attrNames meters))
-    (m: { kind = m; mode = meters.${m}; })
-    (types.submodule {
+  singleMeterType = let
+    meterEnum = types.enum (attrNames meters);
+    meterSubmodule = types.submodule {
       options = {
         kind = mkOption {
           type = types.enum (attrNames meters);
@@ -101,10 +101,15 @@ let
         mode = mkOption {
           type = types.enum [ 1 2 3 4 ];
           example = 2;
-          description = "Which mode the meter should use, one of 1(Bar) 2(Text) 3(Graph) 4(LED).";
+          description =
+            "Which mode the meter should use, one of 1(Bar) 2(Text) 3(Graph) 4(LED).";
         };
       };
-    });
+    };
+  in types.coercedTo meterEnum (m: {
+    kind = m;
+    mode = meters.${m};
+  }) meterSubmodule;
 
   meterType = types.submodule {
     options = {
@@ -115,7 +120,10 @@ let
           "Memory"
           "LeftCPUs2"
           "RightCPUs2"
-          { kind = "CPU"; mode = 3; }
+          {
+            kind = "CPU";
+            mode = 3;
+          }
         ];
         type = types.listOf singleMeterType;
       };
@@ -123,7 +131,10 @@ let
         description = "Meters shown in the right header.";
         default = [ "Tasks" "LoadAverage" "Uptime" ];
         example = [
-          { kind = "Clock"; mode = 4; }
+          {
+            kind = "Clock";
+            mode = 4;
+          }
           "Uptime"
           "Tasks"
         ];
@@ -131,15 +142,37 @@ let
       };
     };
   };
-in
-{
+
+in {
   options.programs.htop = {
     enable = mkEnableOption "htop";
 
     fields = mkOption {
       type = types.listOf (types.enum (attrNames fields));
-      default = [ "PID" "USER" "PRIORITY" "NICE" "M_SIZE" "M_RESIDENT" "M_SHARE" "STATE" "PERCENT_CPU" "PERCENT_MEM" "TIME" "COMM" ];
-      example = [ "PID" "USER" "PRIORITY" "PERCENT_CPU" "M_RESIDENT" "PERCENT_MEM" "TIME" "COMM" ];
+      default = [
+        "PID"
+        "USER"
+        "PRIORITY"
+        "NICE"
+        "M_SIZE"
+        "M_RESIDENT"
+        "M_SHARE"
+        "STATE"
+        "PERCENT_CPU"
+        "PERCENT_MEM"
+        "TIME"
+        "COMM"
+      ];
+      example = [
+        "PID"
+        "USER"
+        "PRIORITY"
+        "PERCENT_CPU"
+        "M_RESIDENT"
+        "PERCENT_MEM"
+        "TIME"
+        "COMM"
+      ];
       description = "Active fields shown in the table.";
     };
 
@@ -209,7 +242,7 @@ in
       default = true;
       description = "Display threads in a different color.";
     };
-    
+
     treeView = mkOption {
       type = types.bool;
       default = false;
@@ -225,7 +258,8 @@ in
     detailedCpuTime = mkOption {
       type = types.bool;
       default = false;
-      description = "Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest).";
+      description =
+        "Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest).";
     };
 
     cpuCountFromZero = mkOption {
@@ -272,14 +306,23 @@ in
           "CPU"
           "LeftCPUs2"
           "RightCPUs2"
-          { kind = "CPU"; mode = 3; }
+          {
+            kind = "CPU";
+            mode = 3;
+          }
         ];
         right = [
-          { kind = "Clock"; mode = 4; }
+          {
+            kind = "Clock";
+            mode = 4;
+          }
           "Uptime"
           "Tasks"
           "LoadAverage"
-          { kind = "Battery"; mode = 1; }
+          {
+            kind = "Battery";
+            mode = 1;
+          }
         ];
       };
       type = meterType;
diff --git a/modules/programs/info.nix b/modules/programs/info.nix
index 863bdcc19..9e4a5d4aa 100644
--- a/modules/programs/info.nix
+++ b/modules/programs/info.nix
@@ -34,9 +34,7 @@ let
   # from this package in the activation script.
   infoPkg = pkgs.texinfoInteractive;
 
-in
-
-{
+in {
   options = {
     programs.info = {
       enable = mkEnableOption "GNU Info";
@@ -55,19 +53,20 @@ in
     home.sessionVariables.INFOPATH =
       "${cfg.homeInfoDirLocation}\${INFOPATH:+:}\${INFOPATH}";
 
-    home.activation.createHomeInfoDir = hm.dag.entryAfter ["installPackages"] ''
-      oPATH=$PATH
-      export PATH="${lib.makeBinPath [ pkgs.gzip ]}''${PATH:+:}$PATH"
-      $DRY_RUN_CMD mkdir -p "${cfg.homeInfoDirLocation}"
-      $DRY_RUN_CMD rm -f "${cfg.homeInfoDirLocation}/dir"
-      if [[ -d "${homeInfoPath}" ]]; then
-        find -L "${homeInfoPath}" \( -name '*.info' -o -name '*.info.gz' \) \
-          -exec $DRY_RUN_CMD ${infoPkg}/bin/install-info '{}' \
-          "${cfg.homeInfoDirLocation}/dir" \;
-      fi
-      export PATH="$oPATH"
-      unset oPATH
-    '';
+    home.activation.createHomeInfoDir =
+      hm.dag.entryAfter [ "installPackages" ] ''
+        oPATH=$PATH
+        export PATH="${lib.makeBinPath [ pkgs.gzip ]}''${PATH:+:}$PATH"
+        $DRY_RUN_CMD mkdir -p "${cfg.homeInfoDirLocation}"
+        $DRY_RUN_CMD rm -f "${cfg.homeInfoDirLocation}/dir"
+        if [[ -d "${homeInfoPath}" ]]; then
+          find -L "${homeInfoPath}" \( -name '*.info' -o -name '*.info.gz' \) \
+            -exec $DRY_RUN_CMD ${infoPkg}/bin/install-info '{}' \
+            "${cfg.homeInfoDirLocation}/dir" \;
+        fi
+        export PATH="$oPATH"
+        unset oPATH
+      '';
 
     home.packages = [ infoPkg ];
 
diff --git a/modules/programs/jq.nix b/modules/programs/jq.nix
index 56c3adf06..6c89df0df 100644
--- a/modules/programs/jq.nix
+++ b/modules/programs/jq.nix
@@ -15,19 +15,17 @@ let
 
   colorsType = types.submodule {
     options = {
-      null    = colorType;
-      false   = colorType;
-      true    = colorType;
+      null = colorType;
+      false = colorType;
+      true = colorType;
       numbers = colorType;
       strings = colorType;
-      arrays  = colorType;
+      arrays = colorType;
       objects = colorType;
     };
   };
 
-in
-
-{
+in {
   options = {
     programs.jq = {
       enable = mkEnableOption "the jq command-line JSON processor";
@@ -52,12 +50,12 @@ in
         '';
 
         default = {
-          null    = "1;30";
-          false   = "0;39";
-          true    = "0;39";
+          null = "1;30";
+          false = "0;39";
+          true = "0;39";
           numbers = "0;39";
           strings = "0;32";
-          arrays  = "1;39";
+          arrays = "1;39";
           objects = "1;39";
         };
 
@@ -69,8 +67,10 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.jq ];
 
-    home.sessionVariables = let c = cfg.colors; in {
-      JQ_COLORS = "${c.null}:${c.false}:${c.true}:${c.numbers}:${c.strings}:${c.arrays}:${c.objects}";
+    home.sessionVariables = let c = cfg.colors;
+    in {
+      JQ_COLORS =
+        "${c.null}:${c.false}:${c.true}:${c.numbers}:${c.strings}:${c.arrays}:${c.objects}";
     };
   };
 }
diff --git a/modules/programs/kakoune.nix b/modules/programs/kakoune.nix
index dbaa764a2..faf2542dc 100644
--- a/modules/programs/kakoune.nix
+++ b/modules/programs/kakoune.nix
@@ -10,16 +10,44 @@ let
     options = {
       name = mkOption {
         type = types.enum [
-          "NormalBegin" "NormalIdle" "NormalEnd" "NormalKey"
-          "InsertBegin" "InsertIdle" "InsertEnd" "InsertKey"
-          "InsertChar" "InsertDelete" "InsertMove" "WinCreate"
-          "WinClose" "WinResize" "WinDisplay" "WinSetOption"
-          "BufSetOption" "BufNewFile" "BufOpenFile" "BufCreate"
-          "BufWritePre" "BufWritePost" "BufReload" "BufClose"
-          "BufOpenFifo" "BufReadFifo" "BufCloseFifo" "RuntimeError"
-          "ModeChange" "PromptIdle" "GlobalSetOption" "KakBegin"
-          "KakEnd" "FocusIn" "FocusOut" "RawKey"
-          "InsertCompletionShow" "InsertCompletionHide"
+          "NormalBegin"
+          "NormalIdle"
+          "NormalEnd"
+          "NormalKey"
+          "InsertBegin"
+          "InsertIdle"
+          "InsertEnd"
+          "InsertKey"
+          "InsertChar"
+          "InsertDelete"
+          "InsertMove"
+          "WinCreate"
+          "WinClose"
+          "WinResize"
+          "WinDisplay"
+          "WinSetOption"
+          "BufSetOption"
+          "BufNewFile"
+          "BufOpenFile"
+          "BufCreate"
+          "BufWritePre"
+          "BufWritePost"
+          "BufReload"
+          "BufClose"
+          "BufOpenFifo"
+          "BufReadFifo"
+          "BufCloseFifo"
+          "RuntimeError"
+          "ModeChange"
+          "PromptIdle"
+          "GlobalSetOption"
+          "KakBegin"
+          "KakEnd"
+          "FocusIn"
+          "FocusOut"
+          "RawKey"
+          "InsertCompletionShow"
+          "InsertCompletionHide"
           "InsertCompletionSelect"
         ];
         example = "SetOption";
@@ -159,7 +187,8 @@ let
       };
 
       autoInfo = mkOption {
-        type = types.nullOr (types.listOf (types.enum [ "command" "onkey" "normal" ]));
+        type = types.nullOr
+          (types.listOf (types.enum [ "command" "onkey" "normal" ]));
         default = null;
         example = [ "command" "normal" ];
         description = ''
@@ -169,7 +198,7 @@ let
       };
 
       autoComplete = mkOption {
-        type = types.nullOr(types.listOf (types.enum [ "insert" "prompt" ]));
+        type = types.nullOr (types.listOf (types.enum [ "insert" "prompt" ]));
         default = null;
         description = ''
           Modes in which to display possible completions.
@@ -450,7 +479,7 @@ let
 
       keyMappings = mkOption {
         type = types.listOf keyMapping;
-        default = [];
+        default = [ ];
         description = ''
           User-defined key mappings. For documentation, see
           <link xlink:href="https://github.com/mawww/kakoune/blob/master/doc/pages/mapping.asciidoc"/>.
@@ -459,7 +488,7 @@ let
 
       hooks = mkOption {
         type = types.listOf hook;
-        default = [];
+        default = [ ];
         description = ''
           Global hooks. For documentation, see
           <link xlink:href="https://github.com/mawww/kakoune/blob/master/doc/pages/hooks.asciidoc"/>.
@@ -468,92 +497,103 @@ let
     };
   };
 
-  configFile =
-    let
-      wrapOptions = with cfg.config.wrapLines; concatStrings [
+  configFile = let
+    wrapOptions = with cfg.config.wrapLines;
+      concatStrings [
         "${optionalString word " -word"}"
         "${optionalString indent " -indent"}"
         "${optionalString (marker != null) " -marker ${marker}"}"
         "${optionalString (maxWidth != null) " -width ${toString maxWidth}"}"
       ];
 
-      numberLinesOptions = with cfg.config.numberLines; concatStrings [
+    numberLinesOptions = with cfg.config.numberLines;
+      concatStrings [
         "${optionalString relative " -relative "}"
         "${optionalString highlightCursor " -hlcursor"}"
         "${optionalString (separator != null) " -separator ${separator}"}"
       ];
 
-      uiOptions = with cfg.config.ui; concatStringsSep " " [
+    uiOptions = with cfg.config.ui;
+      concatStringsSep " " [
         "ncurses_set_title=${if setTitle then "true" else "false"}"
-        "ncurses_status_on_top=${if (statusLine == "top") then "true" else "false"}"
+        "ncurses_status_on_top=${
+          if (statusLine == "top") then "true" else "false"
+        }"
         "ncurses_assistant=${assistant}"
         "ncurses_enable_mouse=${if enableMouse then "true" else "false"}"
         "ncurses_change_colors=${if changeColors then "true" else "false"}"
         "${optionalString (wheelDownButton != null)
-          "ncurses_wheel_down_button=${wheelDownButton}"}"
+        "ncurses_wheel_down_button=${wheelDownButton}"}"
         "${optionalString (wheelUpButton != null)
-          "ncurses_wheel_up_button=${wheelUpButton}"}"
+        "ncurses_wheel_up_button=${wheelUpButton}"}"
         "${optionalString (shiftFunctionKeys != null)
-          "ncurses_shift_function_key=${toString shiftFunctionKeys}"}"
-        "ncurses_builtin_key_parser=${if useBuiltinKeyParser then "true" else "false"}"
+        "ncurses_shift_function_key=${toString shiftFunctionKeys}"}"
+        "ncurses_builtin_key_parser=${
+          if useBuiltinKeyParser then "true" else "false"
+        }"
       ];
 
-      keyMappingString = km: concatStringsSep " " [
+    keyMappingString = km:
+      concatStringsSep " " [
         "map global"
         "${km.mode} ${km.key} '${km.effect}'"
-        "${optionalString (km.docstring != null) "-docstring '${km.docstring}'"}"
+        "${optionalString (km.docstring != null)
+        "-docstring '${km.docstring}'"}"
       ];
 
-      hookString = h: concatStringsSep " " [
-        "hook" "${optionalString (h.group != null) "-group ${group}"}"
-        "${optionalString (h.once) "-once"}" "global"
-        "${h.name}" "${optionalString (h.option != null) h.option}"
+    hookString = h:
+      concatStringsSep " " [
+        "hook"
+        "${optionalString (h.group != null) "-group ${group}"}"
+        "${optionalString (h.once) "-once"}"
+        "global"
+        "${h.name}"
+        "${optionalString (h.option != null) h.option}"
         "%{ ${h.commands} }"
       ];
 
-      cfgStr = with cfg.config; concatStringsSep "\n" (
-        [ "# Generated by home-manager" ]
+    cfgStr = with cfg.config;
+      concatStringsSep "\n" ([ "# Generated by home-manager" ]
         ++ optional (colorScheme != null) "colorscheme ${colorScheme}"
-        ++ optional (tabStop != null) "set-option global tabstop ${toString tabStop}"
-        ++ optional (indentWidth != null) "set-option global indentwidth ${toString indentWidth}"
+        ++ optional (tabStop != null)
+        "set-option global tabstop ${toString tabStop}"
+        ++ optional (indentWidth != null)
+        "set-option global indentwidth ${toString indentWidth}"
         ++ optional (!incrementalSearch) "set-option global incsearch false"
         ++ optional (alignWithTabs) "set-option global aligntab true"
-        ++ optional (autoInfo != null) "set-option global autoinfo ${concatStringsSep "|" autoInfo}"
-        ++ optional (autoComplete != null) "set-option global autocomplete ${concatStringsSep "|" autoComplete}"
-        ++ optional (autoReload != null) "set-option global/ autoreload ${autoReload}"
-        ++ optional (wrapLines != null && wrapLines.enable) "add-highlighter global/ wrap${wrapOptions}"
+        ++ optional (autoInfo != null)
+        "set-option global autoinfo ${concatStringsSep "|" autoInfo}"
+        ++ optional (autoComplete != null)
+        "set-option global autocomplete ${concatStringsSep "|" autoComplete}"
+        ++ optional (autoReload != null)
+        "set-option global/ autoreload ${autoReload}"
+        ++ optional (wrapLines != null && wrapLines.enable)
+        "add-highlighter global/ wrap${wrapOptions}"
         ++ optional (numberLines != null && numberLines.enable)
-          "add-highlighter global/ number-lines${numberLinesOptions}"
+        "add-highlighter global/ number-lines${numberLinesOptions}"
         ++ optional showMatching "add-highlighter global/ show-matching"
         ++ optional (scrollOff != null)
-          "set-option global scrolloff ${toString scrollOff.lines},${toString scrollOff.columns}"
+        "set-option global scrolloff ${toString scrollOff.lines},${
+          toString scrollOff.columns
+        }"
 
         ++ [ "# UI options" ]
         ++ optional (ui != null) "set-option global ui_options ${uiOptions}"
 
-        ++ [ "# Key mappings" ]
-        ++ map keyMappingString keyMappings
+        ++ [ "# Key mappings" ] ++ map keyMappingString keyMappings
 
-        ++ [ "# Hooks" ]
-        ++ map hookString hooks
-      );
-    in
-      pkgs.writeText "kakrc" (
-        optionalString (cfg.config != null) cfgStr
-        + "\n"
-        + cfg.extraConfig
-      );
+        ++ [ "# Hooks" ] ++ map hookString hooks);
+  in pkgs.writeText "kakrc"
+  (optionalString (cfg.config != null) cfgStr + "\n" + cfg.extraConfig);
 
-in
-
-{
+in {
   options = {
     programs.kakoune = {
       enable = mkEnableOption "the kakoune text editor";
 
       config = mkOption {
         type = types.nullOr configModule;
-        default = {};
+        default = { };
         description = "kakoune configuration options.";
       };
 
diff --git a/modules/programs/keychain.nix b/modules/programs/keychain.nix
index 2231a7c2e..6e26bd232 100644
--- a/modules/programs/keychain.nix
+++ b/modules/programs/keychain.nix
@@ -6,15 +6,16 @@ let
 
   cfg = config.programs.keychain;
 
-  flags = cfg.extraFlags
-    ++ optional (cfg.agents != []) "--agents ${concatStringsSep "," cfg.agents}"
+  flags = cfg.extraFlags ++ optional (cfg.agents != [ ])
+    "--agents ${concatStringsSep "," cfg.agents}"
     ++ optional (cfg.inheritType != null) "--inherit ${cfg.inheritType}";
 
-  shellCommand = "${cfg.package}/bin/keychain --eval ${concatStringsSep " " flags} ${concatStringsSep " " cfg.keys}";
+  shellCommand =
+    "${cfg.package}/bin/keychain --eval ${concatStringsSep " " flags} ${
+      concatStringsSep " " cfg.keys
+    }";
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.keychain = {
@@ -39,14 +40,15 @@ in
 
     agents = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       description = ''
         Agents to add.
       '';
     };
 
     inheritType = mkOption {
-      type = types.nullOr (types.enum ["local" "any" "local-once" "any-once"]);
+      type =
+        types.nullOr (types.enum [ "local" "any" "local-once" "any-once" ]);
       default = null;
       description = ''
         Inherit type to attempt from agent variables from the environment.
diff --git a/modules/programs/lsd.nix b/modules/programs/lsd.nix
index 94934169a..ab1880ff8 100644
--- a/modules/programs/lsd.nix
+++ b/modules/programs/lsd.nix
@@ -11,12 +11,10 @@ let
     ll = "ls -l";
     la = "ls -a";
     lt = "ls --tree";
-    lla ="ls -la";
+    lla = "ls -la";
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.lsd = {
diff --git a/modules/programs/matplotlib.nix b/modules/programs/matplotlib.nix
index 48ff6e60d..da80c1167 100644
--- a/modules/programs/matplotlib.nix
+++ b/modules/programs/matplotlib.nix
@@ -9,16 +9,13 @@ let
   formatLine = o: n: v:
     let
       formatValue = v:
-        if isBool v then (if v then "True" else "False")
-        else toString v;
-    in
-      if isAttrs v
-      then concatStringsSep "\n" (mapAttrsToList (formatLine "${o}${n}.") v)
-      else (if v == "" then "" else "${o}${n}: ${formatValue v}");
+        if isBool v then (if v then "True" else "False") else toString v;
+    in if isAttrs v then
+      concatStringsSep "\n" (mapAttrsToList (formatLine "${o}${n}.") v)
+    else
+      (if v == "" then "" else "${o}${n}: ${formatValue v}");
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rprospero ];
 
   options.programs.matplotlib = {
@@ -31,7 +28,7 @@ in
         Add terms to the <filename>matplotlibrc</filename> file to
         control the default matplotlib behavior.
       '';
-      example = literalExample  ''
+      example = literalExample ''
         {
           backend = "Qt5Agg";
           axes = {
@@ -55,10 +52,8 @@ in
   };
 
   config = mkIf cfg.enable {
-    xdg.configFile."matplotlib/matplotlibrc".text =
-      concatStringsSep "\n" ([]
-        ++ mapAttrsToList (formatLine "") cfg.config
-        ++ optional (cfg.extraConfig != "") cfg.extraConfig
-      ) + "\n";
+    xdg.configFile."matplotlib/matplotlibrc".text = concatStringsSep "\n" ([ ]
+      ++ mapAttrsToList (formatLine "") cfg.config
+      ++ optional (cfg.extraConfig != "") cfg.extraConfig) + "\n";
   };
 }
diff --git a/modules/programs/mbsync-accounts.nix b/modules/programs/mbsync-accounts.nix
index c586481df..4de1965fe 100644
--- a/modules/programs/mbsync-accounts.nix
+++ b/modules/programs/mbsync-accounts.nix
@@ -6,9 +6,7 @@ let
 
   extraConfigType = with lib.types; attrsOf (either (either str int) bool);
 
-in
-
-{
+in {
   options.mbsync = {
     enable = mkEnableOption "synchronization using mbsync";
 
@@ -62,7 +60,7 @@ in
 
     extraConfig.channel = mkOption {
       type = extraConfigType;
-      default = {};
+      default = { };
       example = literalExample ''
         {
           MaxMessages = 10000;
@@ -76,7 +74,7 @@ in
 
     extraConfig.local = mkOption {
       type = extraConfigType;
-      default = {};
+      default = { };
       description = ''
         Local store extra configuration.
       '';
@@ -84,7 +82,7 @@ in
 
     extraConfig.remote = mkOption {
       type = extraConfigType;
-      default = {};
+      default = { };
       description = ''
         Remote store extra configuration.
       '';
@@ -92,7 +90,7 @@ in
 
     extraConfig.account = mkOption {
       type = extraConfigType;
-      default = {};
+      default = { };
       example = literalExample ''
         {
           PipelineDepth = 10;
diff --git a/modules/programs/mbsync.nix b/modules/programs/mbsync.nix
index 7537f6d5c..6ade10986 100644
--- a/modules/programs/mbsync.nix
+++ b/modules/programs/mbsync.nix
@@ -10,14 +10,15 @@ let
   mbsyncAccounts =
     filter (a: a.mbsync.enable) (attrValues config.accounts.email.accounts);
 
-  genTlsConfig = tls: {
-      SSLType =
-        if !tls.enable          then "None"
-        else if tls.useStartTls then "STARTTLS"
-        else                         "IMAPS";
-    }
-    //
-    optionalAttrs (tls.enable && tls.certificatesFile != null) {
+  genTlsConfig = tls:
+    {
+      SSLType = if !tls.enable then
+        "None"
+      else if tls.useStartTls then
+        "STARTTLS"
+      else
+        "IMAPS";
+    } // optionalAttrs (tls.enable && tls.certificatesFile != null) {
       CertificateFile = toString tls.certificatesFile;
     };
 
@@ -30,79 +31,61 @@ let
 
   genSection = header: entries:
     let
-      escapeValue = escape [ "\"" ];
+      escapeValue = escape [ ''"'' ];
       hasSpace = v: builtins.match ".* .*" v != null;
       genValue = n: v:
-        if isList v
-        then concatMapStringsSep " " (genValue n) v
-        else if isBool v then (if v then "yes" else "no")
-        else if isInt v then toString v
-        else if isString v && hasSpace v then "\"${escapeValue v}\""
-        else if isString v then v
+        if isList v then
+          concatMapStringsSep " " (genValue n) v
+        else if isBool v then
+          (if v then "yes" else "no")
+        else if isInt v then
+          toString v
+        else if isString v && hasSpace v then
+          ''"${escapeValue v}"''
+        else if isString v then
+          v
         else
-          let prettyV = lib.generators.toPretty {} v;
-          in  throw "mbsync: unexpected value for option ${n}: '${prettyV}'";
-    in
-      ''
-        ${header}
-        ${concatStringsSep "\n"
-          (mapAttrsToList (n: v: "${n} ${genValue n v}") entries)}
-      '';
+          let prettyV = lib.generators.toPretty { } v;
+          in throw "mbsync: unexpected value for option ${n}: '${prettyV}'";
+    in ''
+      ${header}
+      ${concatStringsSep "\n"
+      (mapAttrsToList (n: v: "${n} ${genValue n v}") entries)}
+    '';
 
-  genAccountConfig = account: with account;
-      genSection "IMAPAccount ${name}" (
-        {
-          Host = imap.host;
-          User = userName;
-          PassCmd = toString passwordCommand;
-        }
-        // genTlsConfig imap.tls
-        // optionalAttrs (imap.port != null) { Port = toString imap.port; }
-        // mbsync.extraConfig.account
-      )
-      + "\n"
-      + genSection "IMAPStore ${name}-remote" (
-        {
-          Account = name;
-        }
-        // mbsync.extraConfig.remote
-      )
-      + "\n"
-      + genSection "MaildirStore ${name}-local" (
-        {
-          Path = "${maildir.absPath}/";
-          Inbox = "${maildir.absPath}/${folders.inbox}";
-          SubFolders = "Verbatim";
-        }
-        // optionalAttrs (mbsync.flatten != null) { Flatten = mbsync.flatten; }
-        // mbsync.extraConfig.local
-      )
-      + "\n"
-      + genSection "Channel ${name}" (
-        {
-          Master = ":${name}-remote:";
-          Slave = ":${name}-local:";
-          Patterns = mbsync.patterns;
-          Create = masterSlaveMapping.${mbsync.create};
-          Remove = masterSlaveMapping.${mbsync.remove};
-          Expunge = masterSlaveMapping.${mbsync.expunge};
-          SyncState = "*";
-        }
-        // mbsync.extraConfig.channel
-      )
-      + "\n";
+  genAccountConfig = account:
+    with account;
+    genSection "IMAPAccount ${name}" ({
+      Host = imap.host;
+      User = userName;
+      PassCmd = toString passwordCommand;
+    } // genTlsConfig imap.tls
+      // optionalAttrs (imap.port != null) { Port = toString imap.port; }
+      // mbsync.extraConfig.account) + "\n"
+    + genSection "IMAPStore ${name}-remote"
+    ({ Account = name; } // mbsync.extraConfig.remote) + "\n"
+    + genSection "MaildirStore ${name}-local" ({
+      Path = "${maildir.absPath}/";
+      Inbox = "${maildir.absPath}/${folders.inbox}";
+      SubFolders = "Verbatim";
+    } // optionalAttrs (mbsync.flatten != null) { Flatten = mbsync.flatten; }
+      // mbsync.extraConfig.local) + "\n" + genSection "Channel ${name}" ({
+        Master = ":${name}-remote:";
+        Slave = ":${name}-local:";
+        Patterns = mbsync.patterns;
+        Create = masterSlaveMapping.${mbsync.create};
+        Remove = masterSlaveMapping.${mbsync.remove};
+        Expunge = masterSlaveMapping.${mbsync.expunge};
+        SyncState = "*";
+      } // mbsync.extraConfig.channel) + "\n";
 
   genGroupConfig = name: channels:
     let
       genGroupChannel = n: boxes: "Channel ${n}:${concatStringsSep "," boxes}";
-    in
-      concatStringsSep "\n" (
-        [ "Group ${name}" ] ++ mapAttrsToList genGroupChannel channels
-      );
+    in concatStringsSep "\n"
+    ([ "Group ${name}" ] ++ mapAttrsToList genGroupChannel channels);
 
-in
-
-{
+in {
   options = {
     programs.mbsync = {
       enable = mkEnableOption "mbsync IMAP4 and Maildir mailbox synchronizer";
@@ -117,7 +100,7 @@ in
 
       groups = mkOption {
         type = types.attrsOf (types.attrsOf (types.listOf types.str));
-        default = {};
+        default = { };
         example = literalExample ''
           {
             inboxes = {
@@ -142,41 +125,34 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions =
-      let
-        checkAccounts = pred: msg:
-          let
-            badAccounts = filter pred mbsyncAccounts;
-          in {
-            assertion = badAccounts == [];
-            message = "mbsync: ${msg} for accounts: "
-              + concatMapStringsSep ", " (a: a.name) badAccounts;
-          };
-      in
-        [
-          (checkAccounts (a: a.maildir == null) "Missing maildir configuration")
-          (checkAccounts (a: a.imap == null) "Missing IMAP configuration")
-          (checkAccounts (a: a.passwordCommand == null) "Missing passwordCommand")
-          (checkAccounts (a: a.userName == null) "Missing username")
-        ];
+    assertions = let
+      checkAccounts = pred: msg:
+        let badAccounts = filter pred mbsyncAccounts;
+        in {
+          assertion = badAccounts == [ ];
+          message = "mbsync: ${msg} for accounts: "
+            + concatMapStringsSep ", " (a: a.name) badAccounts;
+        };
+    in [
+      (checkAccounts (a: a.maildir == null) "Missing maildir configuration")
+      (checkAccounts (a: a.imap == null) "Missing IMAP configuration")
+      (checkAccounts (a: a.passwordCommand == null) "Missing passwordCommand")
+      (checkAccounts (a: a.userName == null) "Missing username")
+    ];
 
     home.packages = [ cfg.package ];
 
     programs.notmuch.new.ignore = [ ".uidvalidity" ".mbsyncstate" ];
 
-    home.file.".mbsyncrc".text =
-      let
-        accountsConfig = map genAccountConfig mbsyncAccounts;
-        groupsConfig = mapAttrsToList genGroupConfig cfg.groups;
-      in
-        concatStringsSep "\n" (
-          [ "# Generated by Home Manager.\n" ]
-          ++ optional (cfg.extraConfig != "") cfg.extraConfig
-          ++ accountsConfig
-          ++ groupsConfig
-        ) + "\n";
+    home.file.".mbsyncrc".text = let
+      accountsConfig = map genAccountConfig mbsyncAccounts;
+      groupsConfig = mapAttrsToList genGroupConfig cfg.groups;
+    in concatStringsSep "\n" ([''
+      # Generated by Home Manager.
+    ''] ++ optional (cfg.extraConfig != "") cfg.extraConfig ++ accountsConfig
+      ++ groupsConfig) + "\n";
 
-    home.activation = mkIf (mbsyncAccounts != []) {
+    home.activation = mkIf (mbsyncAccounts != [ ]) {
       createMaildir =
         hm.dag.entryBetween [ "linkGeneration" ] [ "writeBoundary" ] ''
           $DRY_RUN_CMD mkdir -m700 -p $VERBOSE_ARG ${
diff --git a/modules/programs/mercurial.nix b/modules/programs/mercurial.nix
index fa6e7b3e5..8e9a3befb 100644
--- a/modules/programs/mercurial.nix
+++ b/modules/programs/mercurial.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.mercurial;
 
-in
-
-{
+in {
 
   options = {
     programs.mercurial = {
@@ -33,13 +31,13 @@ in
 
       aliases = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         description = "Mercurial aliases to define.";
       };
 
       extraConfig = mkOption {
         type = types.either types.attrs types.lines;
-        default = {};
+        default = { };
         description = "Additional configuration to add.";
       };
 
@@ -50,53 +48,53 @@ in
 
       ignores = mkOption {
         type = types.listOf types.str;
-        default = [];
+        default = [ ];
         example = [ "*~" "*.swp" ];
         description = "List of globs for files to be globally ignored.";
       };
 
       ignoresRegexp = mkOption {
         type = types.listOf types.str;
-        default = [];
+        default = [ ];
         example = [ "^.*~$" "^.*\\.swp$" ];
         description =
-            "List of regular expressions for files to be globally ignored.";
+          "List of regular expressions for files to be globally ignored.";
       };
     };
   };
 
-  config = mkIf cfg.enable (
-    mkMerge [
-      {
-        home.packages = [ cfg.package ];
+  config = mkIf cfg.enable (mkMerge [
+    {
+      home.packages = [ cfg.package ];
 
-        programs.mercurial.iniContent.ui = {
-          username = cfg.userName + " <" + cfg.userEmail + ">";
-        };
+      programs.mercurial.iniContent.ui = {
+        username = cfg.userName + " <" + cfg.userEmail + ">";
+      };
 
-        xdg.configFile."hg/hgrc".text = generators.toINI {} cfg.iniContent;
-      }
+      xdg.configFile."hg/hgrc".text = generators.toINI { } cfg.iniContent;
+    }
 
-      (mkIf (cfg.ignores != [] || cfg.ignoresRegexp != []) {
-        programs.mercurial.iniContent.ui.ignore =
-            "${config.xdg.configHome}/hg/hgignore_global";
+    (mkIf (cfg.ignores != [ ] || cfg.ignoresRegexp != [ ]) {
+      programs.mercurial.iniContent.ui.ignore =
+        "${config.xdg.configHome}/hg/hgignore_global";
 
-        xdg.configFile."hg/hgignore_global".text =
-            "syntax: glob\n"   + concatStringsSep "\n" cfg.ignores + "\n" +
-            "syntax: regexp\n" + concatStringsSep "\n" cfg.ignoresRegexp + "\n";
-      })
+      xdg.configFile."hg/hgignore_global".text = ''
+        syntax: glob
+      '' + concatStringsSep "\n" cfg.ignores + "\n" + ''
+        syntax: regexp
+      '' + concatStringsSep "\n" cfg.ignoresRegexp + "\n";
+    })
 
-      (mkIf (cfg.aliases != {}) {
-        programs.mercurial.iniContent.alias = cfg.aliases;
-      })
+    (mkIf (cfg.aliases != { }) {
+      programs.mercurial.iniContent.alias = cfg.aliases;
+    })
 
-      (mkIf (lib.isAttrs cfg.extraConfig) {
-        programs.mercurial.iniContent = cfg.extraConfig;
-      })
+    (mkIf (lib.isAttrs cfg.extraConfig) {
+      programs.mercurial.iniContent = cfg.extraConfig;
+    })
 
-      (mkIf (lib.isString cfg.extraConfig) {
-        xdg.configFile."hg/hgrc".text = cfg.extraConfig;
-      })
-    ]
-  );
+    (mkIf (lib.isString cfg.extraConfig) {
+      xdg.configFile."hg/hgrc".text = cfg.extraConfig;
+    })
+  ]);
 }
diff --git a/modules/programs/mpv.nix b/modules/programs/mpv.nix
index 8b9c191ce..3a4e5092f 100644
--- a/modules/programs/mpv.nix
+++ b/modules/programs/mpv.nix
@@ -23,31 +23,21 @@ let
     }.${typeOf option};
 
   renderOptions = options:
-    concatStringsSep "\n"
-      (mapAttrsToList
-        (name: value:
-          let
-            rendered = renderOption value;
-            length = toString (stringLength rendered);
-          in
-          "${name}=%${length}%${rendered}")
-          options);
+    concatStringsSep "\n" (mapAttrsToList (name: value:
+      let
+        rendered = renderOption value;
+        length = toString (stringLength rendered);
+      in "${name}=%${length}%${rendered}") options);
 
   renderProfiles = profiles:
-    concatStringsSep "\n"
-      (mapAttrsToList
-        (name: value: ''
-          [${name}]
-          ${renderOptions value}
-        '')
-        profiles);
+    concatStringsSep "\n" (mapAttrsToList (name: value: ''
+      [${name}]
+      ${renderOptions value}
+    '') profiles);
 
   renderBindings = bindings:
     concatStringsSep "\n"
-      (mapAttrsToList
-        (name: value:
-          "${name} ${value}")
-        bindings);
+    (mapAttrsToList (name: value: "${name} ${value}") bindings);
 
 in {
   options = {
@@ -56,7 +46,7 @@ in {
 
       scripts = mkOption {
         type = with types; listOf (either package str);
-        default = [];
+        default = [ ];
         example = literalExample "[ pkgs.mpvScripts.mpris ]";
         description = ''
           List of scripts to use with mpv.
@@ -74,7 +64,7 @@ in {
           for the full list of options.
         '';
         type = mpvOptions;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             profile = "gpu-hq";
@@ -92,7 +82,7 @@ in {
           <option>programs.mpv.config</option> for more information.
         '';
         type = mpvProfiles;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             fast = {
@@ -117,7 +107,7 @@ in {
           for the full list of options.
         '';
         type = mpvBindings;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             WHEEL_UP = "seek 10";
@@ -131,19 +121,20 @@ in {
 
   config = mkIf cfg.enable (mkMerge [
     {
-      home.packages = [(
-        if cfg.scripts == []
-        then pkgs.mpv
-        else pkgs.mpv-with-scripts.override { scripts = cfg.scripts; }
-      )];
+      home.packages = [
+        (if cfg.scripts == [ ] then
+          pkgs.mpv
+        else
+          pkgs.mpv-with-scripts.override { scripts = cfg.scripts; })
+      ];
     }
-    (mkIf (cfg.config != {} || cfg.profiles != {}) {
+    (mkIf (cfg.config != { } || cfg.profiles != { }) {
       xdg.configFile."mpv/mpv.conf".text = ''
-        ${optionalString (cfg.config != {}) (renderOptions cfg.config)}
-        ${optionalString (cfg.profiles != {}) (renderProfiles cfg.profiles)}
+        ${optionalString (cfg.config != { }) (renderOptions cfg.config)}
+        ${optionalString (cfg.profiles != { }) (renderProfiles cfg.profiles)}
       '';
     })
-    (mkIf (cfg.bindings != {}) {
+    (mkIf (cfg.bindings != { }) {
       xdg.configFile."mpv/input.conf".text = renderBindings cfg.bindings;
     })
   ]);
diff --git a/modules/programs/msmtp-accounts.nix b/modules/programs/msmtp-accounts.nix
index 277710f4c..894cef517 100644
--- a/modules/programs/msmtp-accounts.nix
+++ b/modules/programs/msmtp-accounts.nix
@@ -23,7 +23,8 @@ with lib;
     };
 
     tls.fingerprint = mkOption {
-      type = types.nullOr (types.strMatching "([[:alnum:]]{2}\:)+[[:alnum:]]{2}");
+      type =
+        types.nullOr (types.strMatching "([[:alnum:]]{2}:)+[[:alnum:]]{2}");
       default = null;
       example = "my:SH:a2:56:ha:sh";
       description = ''
diff --git a/modules/programs/msmtp.nix b/modules/programs/msmtp.nix
index 1ff3139ef..f34fd72f8 100644
--- a/modules/programs/msmtp.nix
+++ b/modules/programs/msmtp.nix
@@ -6,38 +6,32 @@ let
 
   cfg = config.programs.msmtp;
 
-  msmtpAccounts = filter (a: a.msmtp.enable)
-    (attrValues config.accounts.email.accounts);
+  msmtpAccounts =
+    filter (a: a.msmtp.enable) (attrValues config.accounts.email.accounts);
 
   onOff = p: if p then "on" else "off";
 
-  accountStr = account: with account;
-    concatStringsSep "\n" (
-      [ "account ${name}" ]
-      ++ mapAttrsToList (n: v: n + " " + v) (
-        {
-          host = smtp.host;
-          from = address;
-          auth = "on";
-          user = userName;
-          tls = onOff smtp.tls.enable;
-          tls_starttls = onOff smtp.tls.useStartTls;
-          tls_trust_file = smtp.tls.certificatesFile;
-        }
-        // optionalAttrs (msmtp.tls.fingerprint != null) {
-          tls_fingerprint = msmtp.tls.fingerprint;
-        }
-        // optionalAttrs (smtp.port != null) {
-          port = toString smtp.port;
-        }
+  accountStr = account:
+    with account;
+    concatStringsSep "\n" ([ "account ${name}" ]
+      ++ mapAttrsToList (n: v: n + " " + v) ({
+        host = smtp.host;
+        from = address;
+        auth = "on";
+        user = userName;
+        tls = onOff smtp.tls.enable;
+        tls_starttls = onOff smtp.tls.useStartTls;
+        tls_trust_file = smtp.tls.certificatesFile;
+      } // optionalAttrs (msmtp.tls.fingerprint != null) {
+        tls_fingerprint = msmtp.tls.fingerprint;
+      } // optionalAttrs (smtp.port != null) { port = toString smtp.port; }
         // optionalAttrs (passwordCommand != null) {
           # msmtp requires the password to finish with a newline.
-          passwordeval = ''${pkgs.bash}/bin/bash -c "${toString passwordCommand}; echo"'';
-        }
-        // msmtp.extraConfig
-      )
-      ++ optional primary "\naccount default : ${name}"
-    );
+          passwordeval =
+            ''${pkgs.bash}/bin/bash -c "${toString passwordCommand}; echo"'';
+        } // msmtp.extraConfig) ++ optional primary ''
+
+          account default : ${name}'');
 
   configFile = mailAccounts: ''
     # Generated by Home Manager.
@@ -47,9 +41,7 @@ let
     ${concatStringsSep "\n\n" (map accountStr mailAccounts)}
   '';
 
-in
-
-{
+in {
 
   options = {
     programs.msmtp = {
@@ -71,7 +63,7 @@ in
 
     xdg.configFile."msmtp/config".text = configFile msmtpAccounts;
 
-    home.sessionVariables =  {
+    home.sessionVariables = {
       MSMTP_QUEUE = "${config.xdg.dataHome}/msmtp/queue";
       MSMTP_LOG = "${config.xdg.dataHome}/msmtp/queue.log";
     };
diff --git a/modules/programs/neomutt-accounts.nix b/modules/programs/neomutt-accounts.nix
index a374f1167..033db38eb 100644
--- a/modules/programs/neomutt-accounts.nix
+++ b/modules/programs/neomutt-accounts.nix
@@ -26,10 +26,9 @@ with lib;
   };
 
   config = mkIf config.neomutt.enable {
-    neomutt.sendMailCommand = mkOptionDefault (
-      if config.msmtp.enable
-      then "msmtpq --read-envelope-from --read-recipients"
-      else null
-    );
+    neomutt.sendMailCommand = mkOptionDefault (if config.msmtp.enable then
+      "msmtpq --read-envelope-from --read-recipients"
+    else
+      null);
   };
 }
diff --git a/modules/programs/neomutt.nix b/modules/programs/neomutt.nix
index 1f7022e0a..85af0353b 100644
--- a/modules/programs/neomutt.nix
+++ b/modules/programs/neomutt.nix
@@ -6,8 +6,8 @@ let
 
   cfg = config.programs.neomutt;
 
-  neomuttAccounts = filter (a: a.neomutt.enable)
-      (attrValues config.accounts.email.accounts);
+  neomuttAccounts =
+    filter (a: a.neomutt.enable) (attrValues config.accounts.email.accounts);
 
   sidebarModule = types.submodule {
     options = {
@@ -76,13 +76,12 @@ let
 
   yesno = x: if x then "yes" else "no";
   setOption = n: v: if v == null then "unset ${n}" else "set ${n}=${v}";
-  escape = replaceStrings ["%"] ["%25"];
+  escape = replaceStrings [ "%" ] [ "%25" ];
 
-  accountFilename = account:
-    config.xdg.configHome + "/neomutt/" + account.name;
+  accountFilename = account: config.xdg.configHome + "/neomutt/" + account.name;
 
-  genCommonFolderHooks = account: with account;
-    {
+  genCommonFolderHooks = account:
+    with account; {
       from = "'${address}'";
       realname = "'${realName}'";
       spoolfile = "'+${folders.inbox}'";
@@ -91,13 +90,13 @@ let
       trash = "'+${folders.trash}'";
     };
 
-  mtaSection = account: with account;
-    let
-      passCmd = concatStringsSep " " passwordCommand;
-    in
-      if neomutt.sendMailCommand != null then {
-        sendmail = "'${neomutt.sendMailCommand}'";
-      } else let
+  mtaSection = account:
+    with account;
+    let passCmd = concatStringsSep " " passwordCommand;
+    in if neomutt.sendMailCommand != null then {
+      sendmail = "'${neomutt.sendMailCommand}'";
+    } else
+      let
         smtpProto = if smtp.tls.enable then "smtps" else "smtp";
         smtpBaseUrl = "${smtpProto}://${escape userName}@${smtp.host}";
       in {
@@ -105,35 +104,32 @@ let
         smtp_pass = "'`${passCmd}`'";
       };
 
-  genMaildirAccountConfig = account: with account;
+  genMaildirAccountConfig = account:
+    with account;
     let
-      folderHook =
-        mapAttrsToList setOption (
-          genCommonFolderHooks account
-          // { folder = "'${account.maildir.absPath}'"; }
-        )
-        ++ optional (neomutt.extraConfig != "") neomutt.extraConfig;
-    in
-      ''
-        ${concatStringsSep "\n" folderHook}
-      '';
+      folderHook = mapAttrsToList setOption (genCommonFolderHooks account // {
+        folder = "'${account.maildir.absPath}'";
+      }) ++ optional (neomutt.extraConfig != "") neomutt.extraConfig;
+    in ''
+      ${concatStringsSep "\n" folderHook}
+    '';
 
-  registerAccount = account: with account;
-    ''
+  registerAccount = account:
+    with account; ''
       # register account ${name}
       mailboxes "${account.maildir.absPath}/${folders.inbox}"
       folder-hook ${account.maildir.absPath}/ " \
           source ${accountFilename account} "
     '';
 
-  mraSection = account: with account;
-    if account.maildir != null
-    then genMaildirAccountConfig account
-    else throw "Only maildir is supported at the moment";
-
-    optionsStr = attrs:
-      concatStringsSep "\n" (mapAttrsToList setOption attrs);
+  mraSection = account:
+    with account;
+    if account.maildir != null then
+      genMaildirAccountConfig account
+    else
+      throw "Only maildir is supported at the moment";
 
+  optionsStr = attrs: concatStringsSep "\n" (mapAttrsToList setOption attrs);
 
   sidebarSection = ''
     # Sidebar
@@ -143,81 +139,74 @@ let
     set sidebar_format = '${cfg.sidebar.format}'
   '';
 
-  bindSection =
-    concatMapStringsSep
-      "\n"
-      (bind: "bind ${bind.map} ${bind.key} \"${bind.action}\"")
-      cfg.binds;
+  bindSection = concatMapStringsSep "\n"
+    (bind: ''bind ${bind.map} ${bind.key} "${bind.action}"'') cfg.binds;
 
-  macroSection =
-    concatMapStringsSep
-      "\n"
-      (bind: "macro ${bind.map} ${bind.key} \"${bind.action}\"")
-      cfg.macros;
+  macroSection = concatMapStringsSep "\n"
+    (bind: ''macro ${bind.map} ${bind.key} "${bind.action}"'') cfg.macros;
 
   mailCheckSection = ''
     set mail_check_stats
     set mail_check_stats_interval = ${toString cfg.checkStatsInterval}
   '';
 
-  notmuchSection = account: with account; ''
-    # notmuch section
-    set nm_default_uri = "notmuch://${config.accounts.email.maildirBasePath}"
-    virtual-mailboxes "My INBOX" "notmuch://?query=tag:inbox"
-  '';
+  notmuchSection = account:
+    with account; ''
+      # notmuch section
+      set nm_default_uri = "notmuch://${config.accounts.email.maildirBasePath}"
+      virtual-mailboxes "My INBOX" "notmuch://?query=tag:inbox"
+    '';
 
-  accountStr = account: with account; ''
-    # Generated by Home Manager.
-    set ssl_force_tls = yes
-    set certificate_file=${config.accounts.email.certificatesFile}
+  accountStr = account:
+    with account;
+    ''
+      # Generated by Home Manager.
+      set ssl_force_tls = yes
+      set certificate_file=${config.accounts.email.certificatesFile}
 
-    # GPG section
-    set crypt_use_gpgme = yes
-    set crypt_autosign = ${yesno (gpg.signByDefault or false)}
-    set pgp_use_gpg_agent = yes
-    set mbox_type = ${if maildir != null then "Maildir" else "mbox"}
-    set sort = "${cfg.sort}"
+      # GPG section
+      set crypt_use_gpgme = yes
+      set crypt_autosign = ${yesno (gpg.signByDefault or false)}
+      set pgp_use_gpg_agent = yes
+      set mbox_type = ${if maildir != null then "Maildir" else "mbox"}
+      set sort = "${cfg.sort}"
 
-    # MTA section
-    ${optionsStr (mtaSection account)}
+      # MTA section
+      ${optionsStr (mtaSection account)}
 
-    ${optionalString (cfg.checkStatsInterval != null) mailCheckSection}
+      ${optionalString (cfg.checkStatsInterval != null) mailCheckSection}
 
-    ${optionalString cfg.sidebar.enable sidebarSection}
+      ${optionalString cfg.sidebar.enable sidebarSection}
 
-    # MRA section
-    ${mraSection account}
+      # MRA section
+      ${mraSection account}
 
-    # Extra configuration
-    ${account.neomutt.extraConfig}
-  ''
-  + optionalString (account.signature.showSignature != "none") ''
-    set signature = ${pkgs.writeText "signature.txt" account.signature.text}
-  ''
-  + optionalString account.notmuch.enable (notmuchSection account);
+      # Extra configuration
+      ${account.neomutt.extraConfig}
+    '' + optionalString (account.signature.showSignature != "none") ''
+      set signature = ${pkgs.writeText "signature.txt" account.signature.text}
+    '' + optionalString account.notmuch.enable (notmuchSection account);
 
-in
-
-{
+in {
   options = {
     programs.neomutt = {
       enable = mkEnableOption "the NeoMutt mail client";
 
       sidebar = mkOption {
         type = sidebarModule;
-        default = {};
+        default = { };
         description = "Options related to the sidebar.";
       };
 
       binds = mkOption {
         type = types.listOf bindModule;
-        default = [];
+        default = [ ];
         description = "List of keybindings.";
       };
 
       macros = mkOption {
         type = types.listOf bindModule;
-        default = [];
+        default = [ ];
         description = "List of macros.";
       };
 
@@ -259,7 +248,7 @@ in
 
       settings = mkOption {
         type = types.attrsOf types.str;
-        default = {};
+        default = { };
         description = "Extra configuration appended to the end.";
       };
 
@@ -277,43 +266,37 @@ in
       rcFile = account: {
         "${accountFilename account}".text = accountStr account;
       };
-    in
-      foldl' (a: b: a // b) {} (map rcFile neomuttAccounts);
+    in foldl' (a: b: a // b) { } (map rcFile neomuttAccounts);
 
-    xdg.configFile."neomutt/neomuttrc" = mkIf (neomuttAccounts != []) {
-      text =
-        let
-          primary = filter (a: a.primary) neomuttAccounts;
-        in
-          ''
-            # Generated by Home Manager.
-            set header_cache = "${config.xdg.cacheHome}/neomutt/headers/"
-            set message_cachedir = "${config.xdg.cacheHome}/neomutt/messages/"
-            set editor = "${cfg.editor}"
-            set implicit_autoview = yes
+    xdg.configFile."neomutt/neomuttrc" = mkIf (neomuttAccounts != [ ]) {
+      text = let primary = filter (a: a.primary) neomuttAccounts;
+      in ''
+        # Generated by Home Manager.
+        set header_cache = "${config.xdg.cacheHome}/neomutt/headers/"
+        set message_cachedir = "${config.xdg.cacheHome}/neomutt/messages/"
+        set editor = "${cfg.editor}"
+        set implicit_autoview = yes
 
-            alternative_order text/enriched text/plain text
+        alternative_order text/enriched text/plain text
 
-            set delete = yes
+        set delete = yes
 
-            # Binds
-            ${bindSection}
+        # Binds
+        ${bindSection}
 
-            # Macros
-            ${macroSection}
+        # Macros
+        ${macroSection}
 
-            ${optionalString cfg.vimKeys "source ${pkgs.neomutt}/share/doc/neomutt/vim-keys/vim-keys.rc"}
+        ${optionalString cfg.vimKeys
+        "source ${pkgs.neomutt}/share/doc/neomutt/vim-keys/vim-keys.rc"}
 
-            # Extra configuration
-            ${optionsStr cfg.settings}
+        # Extra configuration
+        ${optionsStr cfg.settings}
 
-            ${cfg.extraConfig}
-          ''
-          +
-          concatMapStringsSep "\n" registerAccount neomuttAccounts
-          +
-          # source primary account
-          "source ${accountFilename (builtins.head primary)}";
+        ${cfg.extraConfig}
+      '' + concatMapStringsSep "\n" registerAccount neomuttAccounts +
+      # source primary account
+      "source ${accountFilename (builtins.head primary)}";
     };
   };
 }
diff --git a/modules/programs/newsboat.nix b/modules/programs/newsboat.nix
index 19fec642d..6b59ed713 100644
--- a/modules/programs/newsboat.nix
+++ b/modules/programs/newsboat.nix
@@ -4,11 +4,9 @@ with lib;
 
 let
   cfg = config.programs.newsboat;
-  wrapQuote = x: "\"${x}\"";
+  wrapQuote = x: ''"${x}"'';
 
-in
-
-{
+in {
   options = {
     programs.newsboat = {
       enable = mkEnableOption "the Newsboat feed reader";
@@ -24,8 +22,8 @@ in
 
             tags = mkOption {
               type = types.listOf types.str;
-              default = [];
-              example = ["foo" "bar"];
+              default = [ ];
+              example = [ "foo" "bar" ];
               description = "Feed tags.";
             };
 
@@ -37,8 +35,11 @@ in
             };
           };
         });
-        default = [];
-        example = [{url = "http://example.com"; tags = ["foo" "bar"];}];
+        default = [ ];
+        example = [{
+          url = "http://example.com";
+          tags = [ "foo" "bar" ];
+        }];
         description = "List of news feeds.";
       };
 
@@ -57,7 +58,9 @@ in
       autoReload = mkOption {
         type = types.bool;
         default = false;
-        description = "Whether to enable automatic reloading while newsboat is running.";
+        description = ''
+          Whether to enable automatic reloading while newsboat is running.
+        '';
       };
 
       reloadTime = mkOption {
@@ -74,43 +77,40 @@ in
 
       queries = mkOption {
         type = types.attrsOf types.str;
-        default = {};
-        example = {
-          "foo" = "rssurl =~ \"example.com\"";
-        };
+        default = { };
+        example = { "foo" = ''rssurl =~ "example.com"''; };
         description = "A list of queries to use.";
       };
 
       extraConfig = mkOption {
         type = types.lines;
         default = "";
-        description = "Extra configuration values that will be appended to the end.";
+        description = ''
+          Extra configuration values that will be appended to the end.
+        '';
       };
     };
   };
 
   config = mkIf cfg.enable {
     home.packages = [ pkgs.newsboat ];
-    home.file.".newsboat/urls".text =
-      let
-        mkUrlEntry = u: concatStringsSep " " (
-          [u.url]
-          ++ map wrapQuote u.tags
-          ++ optional (u.title != null) (wrapQuote "~${u.title}")
-        );
-        urls = map mkUrlEntry cfg.urls;
+    home.file.".newsboat/urls".text = let
+      mkUrlEntry = u:
+        concatStringsSep " " ([ u.url ] ++ map wrapQuote u.tags
+          ++ optional (u.title != null) (wrapQuote "~${u.title}"));
+      urls = map mkUrlEntry cfg.urls;
 
-        mkQueryEntry = n: v: "\"query:${n}:${escape ["\""] v}\"";
-        queries = mapAttrsToList mkQueryEntry cfg.queries;
-      in
-        concatStringsSep "\n" (urls ++ queries) + "\n";
+      mkQueryEntry = n: v: ''"query:${n}:${escape [ ''"'' ] v}"'';
+      queries = mapAttrsToList mkQueryEntry cfg.queries;
+    in concatStringsSep "\n" (urls ++ queries) + "\n";
 
     home.file.".newsboat/config".text = ''
       max-items ${toString cfg.maxItems}
       browser ${cfg.browser}
       reload-threads ${toString cfg.reloadThreads}
       auto-reload ${if cfg.autoReload then "yes" else "no"}
-      ${optionalString (cfg.reloadTime != null) (toString "reload-time ${toString cfg.reloadTime}")}
+      ${optionalString (cfg.reloadTime != null)
+      (toString "reload-time ${toString cfg.reloadTime}")}
       prepopulate-query-feeds yes
 
       ${cfg.extraConfig}
diff --git a/modules/programs/noti.nix b/modules/programs/noti.nix
index 476c2eb19..348555eef 100644
--- a/modules/programs/noti.nix
+++ b/modules/programs/noti.nix
@@ -1,4 +1,4 @@
-{ config, lib, pkgs, ...}:
+{ config, lib, pkgs, ... }:
 
 with lib;
 
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.noti;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.noti = {
@@ -16,7 +14,7 @@ in
 
     settings = mkOption {
       type = types.attrsOf (types.attrsOf types.str);
-      default = {};
+      default = { };
       description = ''
         Configuration written to
         <filename>~/.config/noti/noti.yaml</filename>.
@@ -45,9 +43,8 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.noti ];
 
-    xdg.configFile."noti/noti.yaml" = mkIf (cfg.settings != {}) {
-      text = generators.toYAML {} cfg.settings;
-    };
+    xdg.configFile."noti/noti.yaml" =
+      mkIf (cfg.settings != { }) { text = generators.toYAML { } cfg.settings; };
   };
 
 }
diff --git a/modules/programs/notmuch-accounts.nix b/modules/programs/notmuch-accounts.nix
index 7c9c93d3f..fd4a811d7 100644
--- a/modules/programs/notmuch-accounts.nix
+++ b/modules/programs/notmuch-accounts.nix
@@ -1,7 +1,5 @@
 { lib, ... }:
 
 {
-  options.notmuch = {
-    enable = lib.mkEnableOption "notmuch indexing";
-  };
+  options.notmuch = { enable = lib.mkEnableOption "notmuch indexing"; };
 }
diff --git a/modules/programs/notmuch.nix b/modules/programs/notmuch.nix
index 74aa9320d..7e7a140b2 100644
--- a/modules/programs/notmuch.nix
+++ b/modules/programs/notmuch.nix
@@ -9,53 +9,42 @@ let
   mkIniKeyValue = key: value:
     let
       tweakVal = v:
-        if isString v then v
-        else if isList v then concatMapStringsSep ";" tweakVal v
-        else if isBool v then (if v then "true" else "false")
-        else toString v;
-    in
-      "${key}=${tweakVal value}";
+        if isString v then
+          v
+        else if isList v then
+          concatMapStringsSep ";" tweakVal v
+        else if isBool v then
+          (if v then "true" else "false")
+        else
+          toString v;
+    in "${key}=${tweakVal value}";
 
-  notmuchIni =
-    recursiveUpdate
-      {
-        database = {
-          path = config.accounts.email.maildirBasePath;
-        };
+  notmuchIni = recursiveUpdate {
+    database = { path = config.accounts.email.maildirBasePath; };
 
-        maildir = {
-          synchronize_flags = cfg.maildir.synchronizeFlags;
-        };
+    maildir = { synchronize_flags = cfg.maildir.synchronizeFlags; };
 
-        new = {
-          ignore = cfg.new.ignore;
-          tags = cfg.new.tags;
-        };
+    new = {
+      ignore = cfg.new.ignore;
+      tags = cfg.new.tags;
+    };
 
-        user =
-          let
-            accounts =
-              filter (a: a.notmuch.enable)
-              (attrValues config.accounts.email.accounts);
-            primary = filter (a: a.primary) accounts;
-            secondaries = filter (a: !a.primary) accounts;
-          in {
-            name = catAttrs "realName" primary;
-            primary_email = catAttrs "address" primary;
-            other_email = catAttrs "aliases" primary
-              ++ catAttrs "address" secondaries
-              ++ catAttrs "aliases" secondaries;
-          };
+    user = let
+      accounts = filter (a: a.notmuch.enable)
+        (attrValues config.accounts.email.accounts);
+      primary = filter (a: a.primary) accounts;
+      secondaries = filter (a: !a.primary) accounts;
+    in {
+      name = catAttrs "realName" primary;
+      primary_email = catAttrs "address" primary;
+      other_email = catAttrs "aliases" primary ++ catAttrs "address" secondaries
+        ++ catAttrs "aliases" secondaries;
+    };
 
-        search = {
-          exclude_tags = cfg.search.excludeTags;
-        };
-      }
-      cfg.extraConfig;
+    search = { exclude_tags = cfg.search.excludeTags; };
+  } cfg.extraConfig;
 
-in
-
-{
+in {
   options = {
     programs.notmuch = {
       enable = mkEnableOption "Notmuch mail indexer";
@@ -65,7 +54,7 @@ in
           options = {
             ignore = mkOption {
               type = types.listOf types.str;
-              default = [];
+              default = [ ];
               description = ''
                 A list to specify files and directories that will not be
                 searched for messages by <command>notmuch new</command>.
@@ -83,7 +72,7 @@ in
             };
           };
         };
-        default = {};
+        default = { };
         description = ''
           Options related to email processing performed by
           <command>notmuch new</command>.
@@ -92,7 +81,7 @@ in
 
       extraConfig = mkOption {
         type = types.attrsOf (types.attrsOf types.str);
-        default = {};
+        default = { };
         description = ''
           Options that should be appended to the notmuch configuration file.
         '';
@@ -159,11 +148,11 @@ in
   config = mkIf cfg.enable {
     assertions = [
       {
-        assertion = notmuchIni.user.name != [];
+        assertion = notmuchIni.user.name != [ ];
         message = "notmuch: Must have a user name set.";
       }
       {
-        assertion = notmuchIni.user.primary_email != [];
+        assertion = notmuchIni.user.primary_email != [ ];
         message = "notmuch: Must have a user primary email address set.";
       }
     ];
@@ -176,33 +165,27 @@ in
     };
 
     xdg.configFile."notmuch/notmuchrc".text =
-      let
-        toIni = generators.toINI { mkKeyValue = mkIniKeyValue; };
-      in
-        "# Generated by Home Manager.\n\n"
-        + toIni notmuchIni;
+      let toIni = generators.toINI { mkKeyValue = mkIniKeyValue; };
+      in ''
+        # Generated by Home Manager.
 
-    home.file =
-      let
-        hook = name: cmds:
-          {
-            "${notmuchIni.database.path}/.notmuch/hooks/${name}".source =
-              pkgs.writeShellScript name ''
-                export PATH="${pkgs.notmuch}/bin''${PATH:+:}$PATH"
-                export NOTMUCH_CONFIG="${config.xdg.configHome}/notmuch/notmuchrc"
-                export NMBGIT="${config.xdg.dataHome}/notmuch/nmbug"
+      '' + toIni notmuchIni;
 
-                ${cmds}
-              '';
-          };
-      in
-        optionalAttrs (cfg.hooks.preNew != "")
-          (hook "pre-new" cfg.hooks.preNew)
-        //
-        optionalAttrs (cfg.hooks.postNew != "")
-          (hook "post-new" cfg.hooks.postNew)
-        //
-        optionalAttrs (cfg.hooks.postInsert != "")
-          (hook "post-insert" cfg.hooks.postInsert);
+    home.file = let
+      hook = name: cmds: {
+        "${notmuchIni.database.path}/.notmuch/hooks/${name}".source =
+          pkgs.writeShellScript name ''
+            export PATH="${pkgs.notmuch}/bin''${PATH:+:}$PATH"
+            export NOTMUCH_CONFIG="${config.xdg.configHome}/notmuch/notmuchrc"
+            export NMBGIT="${config.xdg.dataHome}/notmuch/nmbug"
+
+            ${cmds}
+          '';
+      };
+    in optionalAttrs (cfg.hooks.preNew != "") (hook "pre-new" cfg.hooks.preNew)
+    // optionalAttrs (cfg.hooks.postNew != "")
+    (hook "post-new" cfg.hooks.postNew)
+    // optionalAttrs (cfg.hooks.postInsert != "")
+    (hook "post-insert" cfg.hooks.postInsert);
   };
 }
diff --git a/modules/programs/obs-studio.nix b/modules/programs/obs-studio.nix
index f0dfecb63..6df597838 100644
--- a/modules/programs/obs-studio.nix
+++ b/modules/programs/obs-studio.nix
@@ -11,23 +11,18 @@ let
     let
       pluginDirs = map (pkg: "${pkg}/share/obs/obs-plugins") packages;
       plugins = concatMapStringsSep " " (p: "${p}/*") pluginDirs;
-    in
-      pkgs.runCommand "obs-studio-plugins"
-        {
-          preferLocalBuild = true;
-          allowSubstitutes = false;
-        }
-        ''
-          mkdir $out
-          [[ '${plugins}' ]] || exit 0
-          for plugin in ${plugins}; do
-            ln -s "$plugin" $out/
-          done
-        '';
+    in pkgs.runCommand "obs-studio-plugins" {
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+    } ''
+      mkdir $out
+      [[ '${plugins}' ]] || exit 0
+      for plugin in ${plugins}; do
+        ln -s "$plugin" $out/
+      done
+    '';
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.adisbladis ];
 
   options = {
@@ -35,7 +30,7 @@ in
       enable = mkEnableOption "obs-studio";
 
       plugins = mkOption {
-        default = [];
+        default = [ ];
         example = literalExample "[ pkgs.obs-linuxbrowser ]";
         description = "Optional OBS plugins.";
         type = types.listOf types.package;
@@ -46,8 +41,7 @@ in
   config = mkIf cfg.enable {
     home.packages = [ package ];
 
-    xdg.configFile."obs-studio/plugins" = mkIf (cfg.plugins != []) {
-      source = mkPluginEnv cfg.plugins;
-    };
+    xdg.configFile."obs-studio/plugins" =
+      mkIf (cfg.plugins != [ ]) { source = mkPluginEnv cfg.plugins; };
   };
 }
diff --git a/modules/programs/offlineimap-accounts.nix b/modules/programs/offlineimap-accounts.nix
index 015a5974a..afc7a0199 100644
--- a/modules/programs/offlineimap-accounts.nix
+++ b/modules/programs/offlineimap-accounts.nix
@@ -6,18 +6,14 @@ let
 
   extraConfigType = with types; attrsOf (either (either str int) bool);
 
-in
-
-{
+in {
   options.offlineimap = {
     enable = mkEnableOption "OfflineIMAP";
 
     extraConfig.account = mkOption {
       type = extraConfigType;
-      default = {};
-      example = {
-        autorefresh = 20;
-      };
+      default = { };
+      example = { autorefresh = 20; };
       description = ''
         Extra configuration options to add to the account section.
       '';
@@ -25,10 +21,8 @@ in
 
     extraConfig.local = mkOption {
       type = extraConfigType;
-      default = {};
-      example = {
-        sync_deletes = true;
-      };
+      default = { };
+      example = { sync_deletes = true; };
       description = ''
         Extra configuration options to add to the local account
         section.
@@ -37,7 +31,7 @@ in
 
     extraConfig.remote = mkOption {
       type = extraConfigType;
-      default = {};
+      default = { };
       example = {
         maxconnections = 2;
         expunge = false;
diff --git a/modules/programs/offlineimap.nix b/modules/programs/offlineimap.nix
index 82143b630..4ce12ec0a 100644
--- a/modules/programs/offlineimap.nix
+++ b/modules/programs/offlineimap.nix
@@ -12,11 +12,11 @@ let
   toIni = generators.toINI {
     mkKeyValue = key: value:
       let
-        value' =
-          if isBool value then (if value then "yes" else "no")
-          else toString value;
-      in
-        "${key} = ${value'}";
+        value' = if isBool value then
+          (if value then "yes" else "no")
+        else
+          toString value;
+      in "${key} = ${value'}";
   };
 
   # Generates a script to fetch only a specific account.
@@ -29,90 +29,65 @@ let
   # Something like
   #
   #     $ email <account name> <program name> <program args>
-  genOfflineImapScript = account: with account;
+  genOfflineImapScript = account:
+    with account;
     pkgs.writeShellScriptBin "offlineimap-${name}" ''
       exec ${pkgs.offlineimap}/bin/offlineimap -a${account.name} "$@"
     '';
 
-  accountStr = account: with account;
+  accountStr = account:
+    with account;
     let
       postSyncHook = optionalAttrs (offlineimap.postSyncHookCommand != "") {
-        postsynchook =
-          pkgs.writeShellScriptBin
-            "postsynchook"
-            offlineimap.postSyncHookCommand
-          + "/bin/postsynchook";
+        postsynchook = pkgs.writeShellScriptBin "postsynchook"
+          offlineimap.postSyncHookCommand + "/bin/postsynchook";
       };
 
       localType =
-        if account.flavor == "gmail.com"
-        then "GmailMaildir"
-        else "Maildir";
+        if account.flavor == "gmail.com" then "GmailMaildir" else "Maildir";
 
-      remoteType =
-        if account.flavor == "gmail.com"
-        then "Gmail"
-        else "IMAP";
+      remoteType = if account.flavor == "gmail.com" then "Gmail" else "IMAP";
 
-      remoteHost = optionalAttrs (imap.host != null) {
-        remotehost = imap.host;
+      remoteHost =
+        optionalAttrs (imap.host != null) { remotehost = imap.host; };
+
+      remotePort =
+        optionalAttrs ((imap.port or null) != null) { remoteport = imap.port; };
+
+      ssl = if imap.tls.enable then {
+        ssl = true;
+        sslcacertfile = imap.tls.certificatesFile;
+        starttls = imap.tls.useStartTls;
+      } else {
+        ssl = false;
       };
 
-      remotePort = optionalAttrs ((imap.port or null) != null) {
-        remoteport = imap.port;
-      };
-
-      ssl =
-        if imap.tls.enable
-        then
-          {
-            ssl = true;
-            sslcacertfile = imap.tls.certificatesFile;
-            starttls = imap.tls.useStartTls;
-          }
-        else
-          {
-            ssl = false;
-          };
-
       remotePassEval =
-        let
-          arglist = concatMapStringsSep "," (x: "'${x}'") passwordCommand;
-        in
-          optionalAttrs (passwordCommand != null) {
-            remotepasseval = ''get_pass("${name}", [${arglist}])'';
-          };
-    in
-      toIni {
-        "Account ${name}" = {
-          localrepository = "${name}-local";
-          remoterepository = "${name}-remote";
-        }
-        // postSyncHook
-        // offlineimap.extraConfig.account;
+        let arglist = concatMapStringsSep "," (x: "'${x}'") passwordCommand;
+        in optionalAttrs (passwordCommand != null) {
+          remotepasseval = ''get_pass("${name}", [${arglist}])'';
+        };
+    in toIni {
+      "Account ${name}" = {
+        localrepository = "${name}-local";
+        remoterepository = "${name}-remote";
+      } // postSyncHook // offlineimap.extraConfig.account;
 
-        "Repository ${name}-local" = {
-          type = localType;
-          localfolders = maildir.absPath;
-        }
-        // offlineimap.extraConfig.local;
+      "Repository ${name}-local" = {
+        type = localType;
+        localfolders = maildir.absPath;
+      } // offlineimap.extraConfig.local;
 
-        "Repository ${name}-remote" = {
-          type = remoteType;
-          remoteuser = userName;
-        }
-        // remoteHost
-        // remotePort
-        // remotePassEval
-        // ssl
+      "Repository ${name}-remote" = {
+        type = remoteType;
+        remoteuser = userName;
+      } // remoteHost // remotePort // remotePassEval // ssl
         // offlineimap.extraConfig.remote;
-      };
+    };
 
   extraConfigType = with types; attrsOf (either (either str int) bool);
 
-in
-
-{
+in {
   options = {
     programs.offlineimap = {
       enable = mkEnableOption "OfflineIMAP";
@@ -133,7 +108,7 @@ in
 
       extraConfig.general = mkOption {
         type = extraConfigType;
-        default = {};
+        default = { };
         example = {
           maxage = 30;
           ui = "blinkenlights";
@@ -146,10 +121,8 @@ in
 
       extraConfig.default = mkOption {
         type = extraConfigType;
-        default = {};
-        example = {
-          gmailtrashfolder = "[Gmail]/Papierkorb";
-        };
+        default = { };
+        example = { gmailtrashfolder = "[Gmail]/Papierkorb"; };
         description = ''
           Extra configuration options added to the
           <option>DEFAULT</option> section.
@@ -158,7 +131,7 @@ in
 
       extraConfig.mbnames = mkOption {
         type = extraConfigType;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             filename = "~/.config/mutt/mailboxes";
@@ -181,27 +154,20 @@ in
 
     xdg.configFile."offlineimap/get_settings.py".text = cfg.pythonFile;
 
-    xdg.configFile."offlineimap/config".text =
-      ''
-        # Generated by Home Manager.
-        # See https://github.com/OfflineIMAP/offlineimap/blob/master/offlineimap.conf
-        # for an exhaustive list of options.
-      ''
-      + toIni ({
-        general = {
-          accounts = concatMapStringsSep "," (a: a.name) accounts;
-          pythonfile = "${config.xdg.configHome}/offlineimap/get_settings.py";
-          metadata = "${config.xdg.dataHome}/offlineimap";
-        }
-        // cfg.extraConfig.general;
-      }
-      // optionalAttrs (cfg.extraConfig.mbnames != {}) {
-        mbnames = { enabled = true; } // cfg.extraConfig.mbnames;
-      }
-      // optionalAttrs (cfg.extraConfig.default != {}) {
-        DEFAULT = cfg.extraConfig.default;
-      })
-      + "\n"
-      + concatStringsSep "\n" (map accountStr accounts);
+    xdg.configFile."offlineimap/config".text = ''
+      # Generated by Home Manager.
+      # See https://github.com/OfflineIMAP/offlineimap/blob/master/offlineimap.conf
+      # for an exhaustive list of options.
+    '' + toIni ({
+      general = {
+        accounts = concatMapStringsSep "," (a: a.name) accounts;
+        pythonfile = "${config.xdg.configHome}/offlineimap/get_settings.py";
+        metadata = "${config.xdg.dataHome}/offlineimap";
+      } // cfg.extraConfig.general;
+    } // optionalAttrs (cfg.extraConfig.mbnames != { }) {
+      mbnames = { enabled = true; } // cfg.extraConfig.mbnames;
+    } // optionalAttrs (cfg.extraConfig.default != { }) {
+      DEFAULT = cfg.extraConfig.default;
+    }) + "\n" + concatStringsSep "\n" (map accountStr accounts);
   };
 }
diff --git a/modules/programs/opam.nix b/modules/programs/opam.nix
index 4de2e82da..a61ff7878 100644
--- a/modules/programs/opam.nix
+++ b/modules/programs/opam.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.opam;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.opam = {
diff --git a/modules/programs/password-store.nix b/modules/programs/password-store.nix
index a15f002c2..db31146a1 100644
--- a/modules/programs/password-store.nix
+++ b/modules/programs/password-store.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.password-store;
 
-in
-
-{
+in {
   meta.maintainers = with maintainers; [ pacien ];
 
   options.programs.password-store = {
diff --git a/modules/programs/pazi.nix b/modules/programs/pazi.nix
index decc0d9db..e1a08eb61 100644
--- a/modules/programs/pazi.nix
+++ b/modules/programs/pazi.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.pazi;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.pazi = {
diff --git a/modules/programs/pidgin.nix b/modules/programs/pidgin.nix
index 8dcb21221..a375fd1b2 100644
--- a/modules/programs/pidgin.nix
+++ b/modules/programs/pidgin.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.pidgin;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -23,7 +21,7 @@ in
       };
 
       plugins = mkOption {
-        default = [];
+        default = [ ];
         example = literalExample "[ pkgs.pidgin-otr pkgs.pidgin-osd ]";
         description = "Plugins that should be available to Pidgin.";
       };
diff --git a/modules/programs/readline.nix b/modules/programs/readline.nix
index 35cbab5f5..a7ff5f594 100644
--- a/modules/programs/readline.nix
+++ b/modules/programs/readline.nix
@@ -9,32 +9,34 @@ let
   mkSetVariableStr = n: v:
     let
       mkValueStr = v:
-        if v == true then "on"
-        else if v == false then "off"
-        else if isInt v then toString v
-        else if isString v then v
-        else abort ("values ${toPretty v} is of unsupported type");
-    in
-      "set ${n} ${mkValueStr v}";
+        if v == true then
+          "on"
+        else if v == false then
+          "off"
+        else if isInt v then
+          toString v
+        else if isString v then
+          v
+        else
+          abort ("values ${toPretty v} is of unsupported type");
+    in "set ${n} ${mkValueStr v}";
 
-  mkBindingStr = k: v: "\"${k}\": ${v}";
+  mkBindingStr = k: v: ''"${k}": ${v}'';
 
-in
-
-{
+in {
   options.programs.readline = {
     enable = mkEnableOption "readline";
 
     bindings = mkOption {
-      default = {};
+      default = { };
       type = types.attrsOf types.str;
-      example = { "\C-h" = "backward-kill-word"; };
+      example = { "\\C-h" = "backward-kill-word"; };
       description = "Readline bindings.";
     };
 
     variables = mkOption {
       type = with types; attrsOf (either str (either int bool));
-      default = {};
+      default = { };
       example = { expand-tilde = true; };
       description = ''
         Readline customization variable assignments.
@@ -58,19 +60,16 @@ in
   };
 
   config = mkIf cfg.enable {
-    home.file.".inputrc".text =
-      let
-        configStr = concatStringsSep "\n" (
-          optional cfg.includeSystemConfig "$include /etc/inputrc"
+    home.file.".inputrc".text = let
+      configStr = concatStringsSep "\n"
+        (optional cfg.includeSystemConfig "$include /etc/inputrc"
           ++ mapAttrsToList mkSetVariableStr cfg.variables
-          ++ mapAttrsToList mkBindingStr cfg.bindings
-        );
-      in
-        ''
-          # Generated by Home Manager.
+          ++ mapAttrsToList mkBindingStr cfg.bindings);
+    in ''
+      # Generated by Home Manager.
 
-          ${configStr}
-          ${cfg.extraConfig}
-        '';
+      ${configStr}
+      ${cfg.extraConfig}
+    '';
   };
 }
diff --git a/modules/programs/rofi.nix b/modules/programs/rofi.nix
index e64e5d478..f344e88e2 100644
--- a/modules/programs/rofi.nix
+++ b/modules/programs/rofi.nix
@@ -7,10 +7,11 @@ let
 
   cfg = config.programs.rofi;
 
-  colorOption = description: mkOption {
-    type = types.str;
-    description = description;
-  };
+  colorOption = description:
+    mkOption {
+      type = types.str;
+      description = description;
+    };
 
   rowColorSubmodule = types.submodule {
     options = {
@@ -71,72 +72,64 @@ let
   };
 
   valueToString = value:
-    if isBool value
-      then (if value then "true" else "else")
-      else toString value;
+    if isBool value then (if value then "true" else "else") else toString value;
 
-  windowColorsToString = window: concatStringsSep ", " (with window; [
-    background
-    border
-    separator
-  ]);
+  windowColorsToString = window:
+    concatStringsSep ", " (with window; [ background border separator ]);
 
   rowsColorsToString = rows: ''
-    ${optionalString
-        (rows.normal != null)
-        (setOption "color-normal" (rowColorsToString rows.normal))}
-    ${optionalString
-        (rows.active != null)
-        (setOption "color-active" (rowColorsToString rows.active))}
-    ${optionalString
-        (rows.urgent != null)
-        (setOption "color-urgent" (rowColorsToString rows.urgent))}
+    ${optionalString (rows.normal != null)
+    (setOption "color-normal" (rowColorsToString rows.normal))}
+    ${optionalString (rows.active != null)
+    (setOption "color-active" (rowColorsToString rows.active))}
+    ${optionalString (rows.urgent != null)
+    (setOption "color-urgent" (rowColorsToString rows.urgent))}
   '';
 
-  rowColorsToString = row: concatStringsSep ", " (with row; [
-    background
-    foreground
-    backgroundAlt
-    highlight.background
-    highlight.foreground
-  ]);
+  rowColorsToString = row:
+    concatStringsSep ", " (with row; [
+      background
+      foreground
+      backgroundAlt
+      highlight.background
+      highlight.foreground
+    ]);
 
   setOption = name: value:
     optionalString (value != null) "rofi.${name}: ${valueToString value}";
 
-  setColorScheme = colors: optionalString (colors != null) ''
-    ${optionalString
-        (colors.window != null)
-        setOption "color-window" (windowColorsToString colors.window)}
-    ${optionalString
-        (colors.rows != null)
-        (rowsColorsToString colors.rows)}
-  '';
+  setColorScheme = colors:
+    optionalString (colors != null) ''
+      ${optionalString (colors.window != null) setOption "color-window"
+      (windowColorsToString colors.window)}
+      ${optionalString (colors.rows != null) (rowsColorsToString colors.rows)}
+    '';
 
   locationsMap = {
-    center       = 0;
-    top-left     = 1;
-    top          = 2;
-    top-right    = 3;
-    right        = 4;
+    center = 0;
+    top-left = 1;
+    top = 2;
+    top-right = 3;
+    right = 4;
     bottom-right = 5;
-    bottom       = 6;
-    bottom-left  = 7;
-    left         = 8;
+    bottom = 6;
+    bottom-left = 7;
+    left = 8;
   };
 
-  themeName =
-    if (cfg.theme == null) then null
-    else if (lib.isString cfg.theme) then cfg.theme
-    else lib.removeSuffix ".rasi" (baseNameOf cfg.theme);
+  themeName = if (cfg.theme == null) then
+    null
+  else if (lib.isString cfg.theme) then
+    cfg.theme
+  else
+    lib.removeSuffix ".rasi" (baseNameOf cfg.theme);
 
   themePath = if (lib.isString cfg.theme) then null else cfg.theme;
 
-in
-
-{
+in {
   options.programs.rofi = {
-    enable = mkEnableOption "Rofi: A window switcher, application launcher and dmenu replacement";
+    enable = mkEnableOption
+      "Rofi: A window switcher, application launcher and dmenu replacement";
 
     width = mkOption {
       default = null;
@@ -295,14 +288,12 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions = [
-      {
-        assertion = cfg.theme == null || cfg.colors == null;
-        message = ''
-          Cannot use the rofi options 'theme' and 'colors' simultaneously.
-        '';
-      }
-    ];
+    assertions = [{
+      assertion = cfg.theme == null || cfg.colors == null;
+      message = ''
+        Cannot use the rofi options 'theme' and 'colors' simultaneously.
+      '';
+    }];
 
     home.packages = [ pkgs.rofi ];
 
@@ -314,11 +305,8 @@ in
       ${setOption "eh" cfg.rowHeight}
       ${setOption "padding" cfg.padding}
       ${setOption "separator-style" cfg.separator}
-      ${setOption "hide-scrollbar" (
-        if (cfg.scrollbar != null)
-        then (! cfg.scrollbar)
-        else cfg.scrollbar
-      )}
+      ${setOption "hide-scrollbar"
+      (if (cfg.scrollbar != null) then (!cfg.scrollbar) else cfg.scrollbar)}
       ${setOption "terminal" cfg.terminal}
       ${setOption "cycle" cfg.cycle}
       ${setOption "fullscreen" cfg.fullscreen}
@@ -333,7 +321,7 @@ in
     '';
 
     xdg.dataFile = mkIf (themePath != null) {
-      "rofi/themes/${themeName}.rasi".source =  themePath;
+      "rofi/themes/${themeName}.rasi".source = themePath;
     };
   };
 }
diff --git a/modules/programs/rtorrent.nix b/modules/programs/rtorrent.nix
index 6300969a5..7beeb2e42 100644
--- a/modules/programs/rtorrent.nix
+++ b/modules/programs/rtorrent.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.rtorrent;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.rtorrent = {
@@ -30,8 +28,7 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.rtorrent ];
 
-    xdg.configFile."rtorrent/rtorrent.rc" = mkIf (cfg.settings != "") {
-      text = cfg.settings;
-    };
+    xdg.configFile."rtorrent/rtorrent.rc" =
+      mkIf (cfg.settings != "") { text = cfg.settings; };
   };
 }
diff --git a/modules/programs/skim.nix b/modules/programs/skim.nix
index de1bff30f..c90fe1b1a 100644
--- a/modules/programs/skim.nix
+++ b/modules/programs/skim.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.skim;
 
-in
-
-{
+in {
   options.programs.skim = {
     enable = mkEnableOption "skim - a command-line fuzzy finder";
 
@@ -24,7 +22,7 @@ in
 
     defaultOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--height 40%" "--prompt ⟫" ];
       description = ''
         Extra command line options given to skim by default.
@@ -43,7 +41,7 @@ in
 
     fileWidgetOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--preview 'head {}'" ];
       description = ''
         Command line options for the CTRL-T keybinding.
@@ -53,7 +51,7 @@ in
     changeDirWidgetCommand = mkOption {
       type = types.nullOr types.str;
       default = null;
-      example = "fd --type d" ;
+      example = "fd --type d";
       description = ''
         The command that gets executed as the source for skim for the
         ALT-C keybinding.
@@ -62,7 +60,7 @@ in
 
     changeDirWidgetOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--preview 'tree -C {} | head -200'" ];
       description = ''
         Command line options for the ALT-C keybinding.
@@ -71,7 +69,7 @@ in
 
     historyWidgetOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "--tac" "--exact" ];
       description = ''
         Command line options for the CTRL-R keybinding.
@@ -98,18 +96,16 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.skim ];
 
-    home.sessionVariables =
-      mapAttrs (n: v: toString v) (
-        filterAttrs (n: v: v != [] && v != null) {
-          SKIM_ALT_C_COMMAND = cfg.changeDirWidgetCommand;
-          SKIM_ALT_C_OPTS = cfg.changeDirWidgetOptions;
-          SKIM_CTRL_R_OPTS = cfg.historyWidgetOptions;
-          SKIM_CTRL_T_COMMAND = cfg.fileWidgetCommand;
-          SKIM_CTRL_T_OPTS = cfg.fileWidgetOptions;
-          SKIM_DEFAULT_COMMAND = cfg.defaultCommand;
-          SKIM_DEFAULT_OPTIONS = cfg.defaultOptions;
-        }
-      );
+    home.sessionVariables = mapAttrs (n: v: toString v)
+      (filterAttrs (n: v: v != [ ] && v != null) {
+        SKIM_ALT_C_COMMAND = cfg.changeDirWidgetCommand;
+        SKIM_ALT_C_OPTS = cfg.changeDirWidgetOptions;
+        SKIM_CTRL_R_OPTS = cfg.historyWidgetOptions;
+        SKIM_CTRL_T_COMMAND = cfg.fileWidgetCommand;
+        SKIM_CTRL_T_OPTS = cfg.fileWidgetOptions;
+        SKIM_DEFAULT_COMMAND = cfg.defaultCommand;
+        SKIM_DEFAULT_OPTIONS = cfg.defaultOptions;
+      });
 
     programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
       if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
diff --git a/modules/programs/starship.nix b/modules/programs/starship.nix
index db7cf9262..7c7819865 100644
--- a/modules/programs/starship.nix
+++ b/modules/programs/starship.nix
@@ -7,20 +7,17 @@ let
   cfg = config.programs.starship;
 
   configFile = config:
-    pkgs.runCommand "config.toml"
-      {
-        buildInputs = [ pkgs.remarshal ];
-        preferLocalBuild = true;
-        allowSubstitutes = false;
-      }
-      ''
-        remarshal -if json -of toml \
-          < ${pkgs.writeText "config.json" (builtins.toJSON config)} \
-          > $out
-      '';
-in
+    pkgs.runCommand "config.toml" {
+      buildInputs = [ pkgs.remarshal ];
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+    } ''
+      remarshal -if json -of toml \
+        < ${pkgs.writeText "config.json" (builtins.toJSON config)} \
+        > $out
+    '';
 
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.starship = {
@@ -35,7 +32,7 @@ in
 
     settings = mkOption {
       type = types.attrs;
-      default = {};
+      default = { };
       description = ''
         Configuration written to
         <filename>~/.config/starship.toml</filename>.
@@ -73,9 +70,8 @@ in
   config = mkIf cfg.enable {
     home.packages = [ cfg.package ];
 
-    xdg.configFile."starship.toml" = mkIf (cfg.settings != {}) {
-      source = configFile cfg.settings;
-    };
+    xdg.configFile."starship.toml" =
+      mkIf (cfg.settings != { }) { source = configFile cfg.settings; };
 
     programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
       if [[ -z $INSIDE_EMACS ]]; then
diff --git a/modules/programs/taskwarrior.nix b/modules/programs/taskwarrior.nix
index eeacc77da..cf95511f8 100644
--- a/modules/programs/taskwarrior.nix
+++ b/modules/programs/taskwarrior.nix
@@ -9,38 +9,39 @@ let
   themePath = theme: "${pkgs.taskwarrior}/share/doc/task/rc/${theme}.theme";
 
   includeTheme = location:
-    if location == null then ""
-    else if isString location then "include ${themePath location}"
-    else "include ${location}";
+    if location == null then
+      ""
+    else if isString location then
+      "include ${themePath location}"
+    else
+      "include ${location}";
 
   formatValue = value:
-    if isBool value then if value then "true" else "false"
-    else if isList value then concatMapStringsSep "," formatValue value
-    else toString value;
+    if isBool value then
+      if value then "true" else "false"
+    else if isList value then
+      concatMapStringsSep "," formatValue value
+    else
+      toString value;
 
-  formatLine = key: value:
-    "${key}=${formatValue value}";
+  formatLine = key: value: "${key}=${formatValue value}";
 
   formatSet = key: values:
     (concatStringsSep "\n"
-      (mapAttrsToList
-        (subKey: subValue: formatPair "${key}.${subKey}" subValue)
+      (mapAttrsToList (subKey: subValue: formatPair "${key}.${subKey}" subValue)
         values));
 
   formatPair = key: value:
-    if isAttrs value then formatSet key value
-    else formatLine key value;
+    if isAttrs value then formatSet key value else formatLine key value;
 
-in
-
-{
+in {
   options = {
     programs.taskwarrior = {
       enable = mkEnableOption "Task Warrior";
 
       config = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             confirmation = false;
@@ -103,8 +104,7 @@ in
       data.location=${cfg.dataLocation}
       ${includeTheme cfg.colorTheme}
 
-      ${concatStringsSep "\n" (
-        mapAttrsToList formatPair cfg.config)}
+      ${concatStringsSep "\n" (mapAttrsToList formatPair cfg.config)}
 
       ${cfg.extraConfig}
     '';
diff --git a/modules/programs/termite.nix b/modules/programs/termite.nix
index 4d66fc42d..8a05db035 100644
--- a/modules/programs/termite.nix
+++ b/modules/programs/termite.nix
@@ -13,9 +13,7 @@ let
     fi
   '';
 
-in
-
-{
+in {
   options = {
     programs.termite = {
       enable = mkEnableOption "Termite VTE-based terminal";
@@ -61,7 +59,9 @@ in
       mouseAutohide = mkOption {
         default = null;
         type = types.nullOr types.bool;
-        description = "Automatically hide the mouse pointer when you start typing.";
+        description = ''
+          Automatically hide the mouse pointer when you start typing.
+        '';
       };
 
       scrollOnOutput = mkOption {
@@ -73,7 +73,9 @@ in
       scrollOnKeystroke = mkOption {
         default = null;
         type = types.nullOr types.bool;
-        description = "Scroll to the bottom automatically when a key is pressed.";
+        description = ''
+          Scroll to the bottom automatically when a key is pressed.
+        '';
       };
 
       searchWrap = mkOption {
@@ -106,14 +108,16 @@ in
         default = null;
         example = "terminal";
         type = types.nullOr types.str;
-        description = "The name of the icon to be used for the terminal process.";
+        description =
+          "The name of the icon to be used for the terminal process.";
       };
 
       scrollbackLines = mkOption {
         default = null;
         example = 10000;
         type = types.nullOr types.int;
-        description = "Set the number of lines to limit the terminal's scrollback.";
+        description =
+          "Set the number of lines to limit the terminal's scrollback.";
       };
 
       browser = mkOption {
@@ -149,7 +153,8 @@ in
       filterUnmatchedUrls = mkOption {
         default = null;
         type = types.nullOr types.bool;
-        description = "Whether to hide url hints not matching input in url hints mode.";
+        description =
+          "Whether to hide url hints not matching input in url hints mode.";
       };
 
       modifyOtherKeys = mkOption {
@@ -290,7 +295,8 @@ in
         default = "";
         example = "fullscreen = true";
         type = types.lines;
-        description = "Extra options that should be added to [options] section.";
+        description =
+          "Extra options that should be added to [options] section.";
       };
 
       colorsExtra = mkOption {
@@ -301,78 +307,81 @@ in
           color2 = #60b48a
         '';
         type = types.lines;
-        description = "Extra colors options that should be added to [colors] section.";
+        description =
+          "Extra colors options that should be added to [colors] section.";
       };
 
       hintsExtra = mkOption {
         default = "";
         example = "border = #3f3f3f";
         type = types.lines;
-        description = "Extra hints options that should be added to [hints] section.";
+        description =
+          "Extra hints options that should be added to [hints] section.";
       };
     };
   };
 
-  config = (
-    let
-      boolToString = v: if v then "true" else "false";
-      optionalBoolean = name: val: lib.optionalString (val != null) "${name} = ${boolToString val}";
-      optionalInteger = name: val: lib.optionalString (val != null) "${name} = ${toString val}";
-      optionalString = name: val: lib.optionalString (val != null) "${name} = ${val}";
-    in mkIf cfg.enable {
-      home.packages = [ pkgs.termite ];
-      xdg.configFile."termite/config".text = ''
-        [options]
-        ${optionalBoolean "allow_bold" cfg.allowBold}
-        ${optionalBoolean "audible_bell" cfg.audibleBell}
-        ${optionalString "browser" cfg.browser}
-        ${optionalBoolean "clickable_url" cfg.clickableUrl}
-        ${optionalString "cursor_blink" cfg.cursorBlink}
-        ${optionalString "cursor_shape" cfg.cursorShape}
-        ${optionalBoolean "dynamic_title" cfg.dynamicTitle}
-        ${optionalBoolean "filter_unmatched_urls" cfg.filterUnmatchedUrls}
-        ${optionalString "font" cfg.font}
-        ${optionalBoolean "fullscreen" cfg.fullscreen}
-        ${optionalString "geometry" cfg.geometry}
-        ${optionalString "icon_name" cfg.iconName}
-        ${optionalBoolean "modify_other_keys" cfg.modifyOtherKeys}
-        ${optionalBoolean "mouse_autohide" cfg.mouseAutohide}
-        ${optionalBoolean "scroll_on_keystroke" cfg.scrollOnKeystroke}
-        ${optionalBoolean "scroll_on_output" cfg.scrollOnOutput}
-        ${optionalInteger "scrollback_lines" cfg.scrollbackLines}
-        ${optionalString "scrollbar" cfg.scrollbar}
-        ${optionalBoolean "search_wrap" cfg.searchWrap}
-        ${optionalBoolean "size_hints" cfg.sizeHints}
-        ${optionalBoolean "urgent_on_bell" cfg.urgentOnBell}
+  config = (let
+    boolToString = v: if v then "true" else "false";
+    optionalBoolean = name: val:
+      lib.optionalString (val != null) "${name} = ${boolToString val}";
+    optionalInteger = name: val:
+      lib.optionalString (val != null) "${name} = ${toString val}";
+    optionalString = name: val:
+      lib.optionalString (val != null) "${name} = ${val}";
+  in mkIf cfg.enable {
+    home.packages = [ pkgs.termite ];
+    xdg.configFile."termite/config".text = ''
+      [options]
+      ${optionalBoolean "allow_bold" cfg.allowBold}
+      ${optionalBoolean "audible_bell" cfg.audibleBell}
+      ${optionalString "browser" cfg.browser}
+      ${optionalBoolean "clickable_url" cfg.clickableUrl}
+      ${optionalString "cursor_blink" cfg.cursorBlink}
+      ${optionalString "cursor_shape" cfg.cursorShape}
+      ${optionalBoolean "dynamic_title" cfg.dynamicTitle}
+      ${optionalBoolean "filter_unmatched_urls" cfg.filterUnmatchedUrls}
+      ${optionalString "font" cfg.font}
+      ${optionalBoolean "fullscreen" cfg.fullscreen}
+      ${optionalString "geometry" cfg.geometry}
+      ${optionalString "icon_name" cfg.iconName}
+      ${optionalBoolean "modify_other_keys" cfg.modifyOtherKeys}
+      ${optionalBoolean "mouse_autohide" cfg.mouseAutohide}
+      ${optionalBoolean "scroll_on_keystroke" cfg.scrollOnKeystroke}
+      ${optionalBoolean "scroll_on_output" cfg.scrollOnOutput}
+      ${optionalInteger "scrollback_lines" cfg.scrollbackLines}
+      ${optionalString "scrollbar" cfg.scrollbar}
+      ${optionalBoolean "search_wrap" cfg.searchWrap}
+      ${optionalBoolean "size_hints" cfg.sizeHints}
+      ${optionalBoolean "urgent_on_bell" cfg.urgentOnBell}
 
-        ${cfg.optionsExtra}
+      ${cfg.optionsExtra}
 
-        [colors]
-        ${optionalString "background" cfg.backgroundColor}
-        ${optionalString "cursor" cfg.cursorColor}
-        ${optionalString "cursor_foreground" cfg.cursorForegroundColor}
-        ${optionalString "foreground" cfg.foregroundColor}
-        ${optionalString "foregroundBold" cfg.foregroundBoldColor}
-        ${optionalString "highlight" cfg.highlightColor}
+      [colors]
+      ${optionalString "background" cfg.backgroundColor}
+      ${optionalString "cursor" cfg.cursorColor}
+      ${optionalString "cursor_foreground" cfg.cursorForegroundColor}
+      ${optionalString "foreground" cfg.foregroundColor}
+      ${optionalString "foregroundBold" cfg.foregroundBoldColor}
+      ${optionalString "highlight" cfg.highlightColor}
 
-        ${cfg.colorsExtra}
+      ${cfg.colorsExtra}
 
-        [hints]
-        ${optionalString "active_background" cfg.hintsActiveBackgroundColor}
-        ${optionalString "active_foreground" cfg.hintsActiveForegroundColor}
-        ${optionalString "background" cfg.hintsBackgroundColor}
-        ${optionalString "border" cfg.hintsBorderColor}
-        ${optionalInteger "border_width" cfg.hintsBorderWidth}
-        ${optionalString "font" cfg.hintsFont}
-        ${optionalString "foreground" cfg.hintsForegroundColor}
-        ${optionalInteger "padding" cfg.hintsPadding}
-        ${optionalInteger "roundness" cfg.hintsRoundness}
+      [hints]
+      ${optionalString "active_background" cfg.hintsActiveBackgroundColor}
+      ${optionalString "active_foreground" cfg.hintsActiveForegroundColor}
+      ${optionalString "background" cfg.hintsBackgroundColor}
+      ${optionalString "border" cfg.hintsBorderColor}
+      ${optionalInteger "border_width" cfg.hintsBorderWidth}
+      ${optionalString "font" cfg.hintsFont}
+      ${optionalString "foreground" cfg.hintsForegroundColor}
+      ${optionalInteger "padding" cfg.hintsPadding}
+      ${optionalInteger "roundness" cfg.hintsRoundness}
 
-        ${cfg.hintsExtra}
-      '';
+      ${cfg.hintsExtra}
+    '';
 
-      programs.bash.initExtra = vteInitStr;
-      programs.zsh.initExtra = vteInitStr;
-    }
-  );
+    programs.bash.initExtra = vteInitStr;
+    programs.zsh.initExtra = vteInitStr;
+  });
 }
diff --git a/modules/programs/texlive.nix b/modules/programs/texlive.nix
index 0f8953e9f..08a376d65 100644
--- a/modules/programs/texlive.nix
+++ b/modules/programs/texlive.nix
@@ -8,9 +8,7 @@ let
 
   texlivePkgs = cfg.extraPackages pkgs.texlive;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -35,13 +33,11 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions = [
-      {
-        assertion = texlivePkgs != {};
-        message = "Must provide at least one extra package in"
-          + " 'programs.texlive.extraPackages'.";
-      }
-    ];
+    assertions = [{
+      assertion = texlivePkgs != { };
+      message = "Must provide at least one extra package in"
+        + " 'programs.texlive.extraPackages'.";
+    }];
 
     home.packages = [ cfg.package ];
 
diff --git a/modules/programs/urxvt.nix b/modules/programs/urxvt.nix
index 6f4eb3ff7..e4c72bfe2 100644
--- a/modules/programs/urxvt.nix
+++ b/modules/programs/urxvt.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.programs.urxvt;
 
-in
-
-{
+in {
   options.programs.urxvt = {
     enable = mkEnableOption "rxvt-unicode terminal emulator";
 
@@ -21,14 +19,14 @@ in
 
     fonts = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       description = "List of fonts to be used.";
       example = [ "xft:Droid Sans Mono Nerd Font:size=9" ];
     };
 
     keybindings = mkOption {
       type = types.attrsOf types.str;
-      default = {};
+      default = { };
       description = "Mapping of keybindings to actions";
       example = literalExample ''
         {
@@ -41,7 +39,8 @@ in
     iso14755 = mkOption {
       type = types.bool;
       default = true;
-      description = "ISO14755 support for viewing and entering unicode characters.";
+      description =
+        "ISO14755 support for viewing and entering unicode characters.";
     };
 
     scroll = {
@@ -75,11 +74,12 @@ in
             floating = mkOption {
               type = types.bool;
               default = true;
-              description = "Whether to display an rxvt scrollbar without a trough.";
+              description =
+                "Whether to display an rxvt scrollbar without a trough.";
             };
           };
         };
-        default = {};
+        default = { };
         description = "Scrollbar settings.";
       };
 
@@ -92,7 +92,8 @@ in
       keepPosition = mkOption {
         type = types.bool;
         default = true;
-        description = "Whether to keep a scroll position when TTY receives new lines.";
+        description =
+          "Whether to keep a scroll position when TTY receives new lines.";
       };
 
       scrollOnKeystroke = mkOption {
@@ -117,11 +118,12 @@ in
     shading = mkOption {
       type = types.ints.between 0 200;
       default = 100;
-      description = "Darken (0 .. 99) or lighten (101 .. 200) the transparent background.";
+      description =
+        "Darken (0 .. 99) or lighten (101 .. 200) the transparent background.";
     };
 
     extraConfig = mkOption {
-      default = {};
+      default = { };
       type = types.attrs;
       description = "Additional configuration to add.";
       example = { "shading" = 15; };
@@ -145,12 +147,10 @@ in
       "URxvt.transparent" = cfg.transparent;
       "URxvt.shading" = cfg.shading;
       "URxvt.iso14755" = cfg.iso14755;
-    } // flip mapAttrs' cfg.keybindings (kb: action:
-     nameValuePair "URxvt.keysym.${kb}" action
-    ) // optionalAttrs (cfg.fonts != []) {
-      "URxvt.font" = concatStringsSep "," cfg.fonts;
-    } // flip mapAttrs' cfg.extraConfig (k: v:
-      nameValuePair "URxvt.${k}" v
-    );
+    } // flip mapAttrs' cfg.keybindings
+      (kb: action: nameValuePair "URxvt.keysym.${kb}" action)
+      // optionalAttrs (cfg.fonts != [ ]) {
+        "URxvt.font" = concatStringsSep "," cfg.fonts;
+      } // flip mapAttrs' cfg.extraConfig (k: v: nameValuePair "URxvt.${k}" v);
   };
 }
diff --git a/modules/programs/vim.nix b/modules/programs/vim.nix
index a14a9562a..39826a9a5 100644
--- a/modules/programs/vim.nix
+++ b/modules/programs/vim.nix
@@ -31,43 +31,36 @@ let
   };
 
   vimSettingsType = types.submodule {
-    options =
-      let
-        opt = name: type: mkOption {
+    options = let
+      opt = name: type:
+        mkOption {
           type = types.nullOr type;
           default = null;
           visible = false;
         };
-      in
-        mapAttrs opt knownSettings;
+    in mapAttrs opt knownSettings;
   };
 
   setExpr = name: value:
     let
-      v =
-        if isBool value then (if value then "" else "no") + name
-        else
-          "${name}=${
-            if isList value
-            then concatStringsSep "," value
-            else toString value
-          }";
-    in
-      optionalString (value != null) ("set " + v);
+      v = if isBool value then
+        (if value then "" else "no") + name
+      else
+        "${name}=${
+          if isList value then concatStringsSep "," value else toString value
+        }";
+    in optionalString (value != null) ("set " + v);
 
-  plugins =
-    let
-      vpkgs = pkgs.vimPlugins;
-      getPkg = p:
-        if isDerivation p
-        then [ p ]
-        else optional (isString p && hasAttr p vpkgs) vpkgs.${p};
-    in
-      concatMap getPkg cfg.plugins;
+  plugins = let
+    vpkgs = pkgs.vimPlugins;
+    getPkg = p:
+      if isDerivation p then
+        [ p ]
+      else
+        optional (isString p && hasAttr p vpkgs) vpkgs.${p};
+  in concatMap getPkg cfg.plugins;
 
-in
-
-{
+in {
   options = {
     programs.vim = {
       enable = mkEnableOption "Vim";
@@ -75,7 +68,7 @@ in
       plugins = mkOption {
         type = with types; listOf (either str package);
         default = defaultPlugins;
-        example = literalExample ''[ pkgs.vimPlugins.YankRing ]'';
+        example = literalExample "[ pkgs.vimPlugins.YankRing ]";
         description = ''
           List of vim plugins to install. To get a list of supported plugins run:
           <command>nix-env -f '&lt;nixpkgs&gt;' -qaP -A vimPlugins</command>.
@@ -88,7 +81,7 @@ in
 
       settings = mkOption {
         type = vimSettingsType;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             expandtab = true;
@@ -102,14 +95,12 @@ in
           options.
 
           <informaltable frame="none"><tgroup cols="1"><tbody>
-          ${concatStringsSep "\n" (
-            mapAttrsToList (n: v: ''
-              <row>
-                <entry><varname>${n}</varname></entry>
-                <entry>${v.description}</entry>
-              </row>
-            '') knownSettings
-          )}
+          ${concatStringsSep "\n" (mapAttrsToList (n: v: ''
+            <row>
+              <entry><varname>${n}</varname></entry>
+              <entry>${v.description}</entry>
+            </row>
+          '') knownSettings)}
           </tbody></tgroup></informaltable>
 
           See the Vim documentation for detailed descriptions of these
@@ -136,56 +127,45 @@ in
     };
   };
 
-  config = (
-    let
-      customRC = ''
-        ${concatStringsSep "\n" (
-          filter (v: v != "") (
-          mapAttrsToList setExpr (
-          builtins.intersectAttrs knownSettings cfg.settings)))}
+  config = (let
+    customRC = ''
+      ${concatStringsSep "\n" (filter (v: v != "") (mapAttrsToList setExpr
+        (builtins.intersectAttrs knownSettings cfg.settings)))}
 
-        ${cfg.extraConfig}
-      '';
+      ${cfg.extraConfig}
+    '';
 
-      vim = pkgs.vim_configurable.customize {
-        name = "vim";
-        vimrcConfig = {
-          inherit customRC;
+    vim = pkgs.vim_configurable.customize {
+      name = "vim";
+      vimrcConfig = {
+        inherit customRC;
 
-          packages.home-manager.start = plugins;
-        };
+        packages.home-manager.start = plugins;
       };
-    in
-      mkIf cfg.enable {
-        assertions =
-          let
-            packagesNotFound = filter (p: isString p && (!hasAttr p pkgs.vimPlugins)) cfg.plugins;
-          in
-            [
-              {
-                assertion = packagesNotFound == [];
-                message = "Following VIM plugin not found in pkgs.vimPlugins: ${
-                  concatMapStringsSep ", " (p: ''"${p}"'') packagesNotFound
-                }";
-              }
-            ];
+    };
+  in mkIf cfg.enable {
+    assertions = let
+      packagesNotFound =
+        filter (p: isString p && (!hasAttr p pkgs.vimPlugins)) cfg.plugins;
+    in [{
+      assertion = packagesNotFound == [ ];
+      message = "Following VIM plugin not found in pkgs.vimPlugins: ${
+          concatMapStringsSep ", " (p: ''"${p}"'') packagesNotFound
+        }";
+    }];
 
-        warnings =
-          let
-            stringPlugins = filter isString cfg.plugins;
-          in
-            optional (stringPlugins != []) ''
-              Specifying VIM plugins using strings is deprecated, found ${
-                concatMapStringsSep ", " (p: ''"${p}"'') stringPlugins
-              } as strings.
-            '';
+    warnings = let stringPlugins = filter isString cfg.plugins;
+    in optional (stringPlugins != [ ]) ''
+      Specifying VIM plugins using strings is deprecated, found ${
+        concatMapStringsSep ", " (p: ''"${p}"'') stringPlugins
+      } as strings.
+    '';
 
-        home.packages = [ cfg.package ];
+    home.packages = [ cfg.package ];
 
-        programs.vim = {
-          package = vim;
-          plugins = defaultPlugins;
-        };
-      }
-  );
+    programs.vim = {
+      package = vim;
+      plugins = defaultPlugins;
+    };
+  });
 }
diff --git a/modules/programs/vscode/haskell.nix b/modules/programs/vscode/haskell.nix
index c8ea10d47..ee84e7071 100644
--- a/modules/programs/vscode/haskell.nix
+++ b/modules/programs/vscode/haskell.nix
@@ -7,8 +7,8 @@ let
   cfg = config.programs.vscode.haskell;
 
   defaultHieNixExe = hie-nix.hies + "/bin/hie-wrapper";
-  defaultHieNixExeText = literalExample
-    "\"\${pkgs.hie-nix.hies}/bin/hie-wrapper\"";
+  defaultHieNixExeText =
+    literalExample ''"''${pkgs.hie-nix.hies}/bin/hie-wrapper"'';
 
   hie-nix = pkgs.hie-nix or (abort ''
     vscode.haskell: pkgs.hie-nix missing. Please add an overlay such as:
@@ -21,9 +21,7 @@ let
     ]
   '';
 
-in
-
-{
+in {
   options.programs.vscode.haskell = {
     enable = mkEnableOption "Haskell integration for Visual Studio Code";
 
@@ -57,10 +55,8 @@ in
     };
 
     programs.vscode.extensions =
-      [
-        pkgs.vscode-extensions.justusadam.language-haskell
-      ]
+      [ pkgs.vscode-extensions.justusadam.language-haskell ]
       ++ lib.optional cfg.hie.enable
-        pkgs.vscode-extensions.alanz.vscode-hie-server;
+      pkgs.vscode-extensions.alanz.vscode-hie-server;
   };
 }
diff --git a/modules/programs/z-lua.nix b/modules/programs/z-lua.nix
index 245eff6a5..d722ac6a2 100644
--- a/modules/programs/z-lua.nix
+++ b/modules/programs/z-lua.nix
@@ -7,16 +7,14 @@ let
   cfg = config.programs.z-lua;
 
   aliases = {
-    zz = "z -c";         # restrict matches to subdirs of $PWD
-    zi = "z -i";         # cd with interactive selection
-    zf = "z -I";         # use fzf to select in multiple matches
-    zb = "z -b";         # quickly cd to the parent directory
-    zh = "z -I -t .";    # fzf
+    zz = "z -c"; # restrict matches to subdirs of $PWD
+    zi = "z -i"; # cd with interactive selection
+    zf = "z -I"; # use fzf to select in multiple matches
+    zb = "z -b"; # quickly cd to the parent directory
+    zh = "z -I -t ."; # fzf
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.marsam ];
 
   options.programs.z-lua = {
@@ -24,7 +22,7 @@ in
 
     options = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "enhanced" "once" "fzf" ];
       description = ''
         List of options to pass to z.lua.
@@ -68,15 +66,21 @@ in
     home.packages = [ pkgs.z-lua ];
 
     programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
-      eval "$(${pkgs.z-lua}/bin/z --init bash ${concatStringsSep " " cfg.options})"
+      eval "$(${pkgs.z-lua}/bin/z --init bash ${
+        concatStringsSep " " cfg.options
+      })"
     '';
 
     programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
-      eval "$(${pkgs.z-lua}/bin/z --init zsh ${concatStringsSep " " cfg.options})"
+      eval "$(${pkgs.z-lua}/bin/z --init zsh ${
+        concatStringsSep " " cfg.options
+      })"
     '';
 
     programs.fish.shellInit = mkIf cfg.enableFishIntegration ''
-      source (${pkgs.z-lua}/bin/z --init fish ${concatStringsSep " " cfg.options} | psub)
+      source (${pkgs.z-lua}/bin/z --init fish ${
+        concatStringsSep " " cfg.options
+      } | psub)
     '';
 
     programs.bash.shellAliases = mkIf cfg.enableAliases aliases;
diff --git a/modules/programs/zathura.nix b/modules/programs/zathura.nix
index f01bd501c..d9f3c1af1 100644
--- a/modules/programs/zathura.nix
+++ b/modules/programs/zathura.nix
@@ -1,4 +1,4 @@
-{ config, lib, pkgs, ...}:
+{ config, lib, pkgs, ... }:
 
 with lib;
 
@@ -9,14 +9,10 @@ let
   formatLine = n: v:
     let
       formatValue = v:
-        if isBool v then (if v then "true" else "false")
-        else toString v;
-    in
-      "set ${n}\t\"${formatValue v}\"";
+        if isBool v then (if v then "true" else "false") else toString v;
+    in ''set ${n}	"${formatValue v}"'';
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rprospero ];
 
   options.programs.zathura = {
@@ -25,7 +21,7 @@ in
       focused on keyboard interaction'';
 
     options = mkOption {
-      default = {};
+      default = { };
       type = with types; attrsOf (either str (either bool int));
       description = ''
         Add <option>:set</option> command options to zathura and make
@@ -36,7 +32,10 @@ in
         </citerefentry>
         for the full list of options.
       '';
-      example = { default-bg = "#000000"; default-fg = "#FFFFFF"; };
+      example = {
+        default-bg = "#000000";
+        default-fg = "#FFFFFF";
+      };
     };
 
     extraConfig = mkOption {
@@ -52,10 +51,8 @@ in
   config = mkIf cfg.enable {
     home.packages = [ pkgs.zathura ];
 
-    xdg.configFile."zathura/zathurarc".text =
-      concatStringsSep "\n" ([]
-        ++ optional (cfg.extraConfig != "") cfg.extraConfig
-        ++ mapAttrsToList formatLine cfg.options
-      ) + "\n";
+    xdg.configFile."zathura/zathurarc".text = concatStringsSep "\n" ([ ]
+      ++ optional (cfg.extraConfig != "") cfg.extraConfig
+      ++ mapAttrsToList formatLine cfg.options) + "\n";
   };
 }
diff --git a/modules/services/blueman-applet.nix b/modules/services/blueman-applet.nix
index 0a071f083..5a57acccc 100644
--- a/modules/services/blueman-applet.nix
+++ b/modules/services/blueman-applet.nix
@@ -22,19 +22,15 @@ with lib;
 
   config = mkIf config.services.blueman-applet.enable {
     systemd.user.services.blueman-applet = {
-        Unit = {
-          Description = "Blueman applet";
-          After = [ "graphical-session-pre.target" ];
-          PartOf = [ "graphical-session.target" ];
-        };
+      Unit = {
+        Description = "Blueman applet";
+        After = [ "graphical-session-pre.target" ];
+        PartOf = [ "graphical-session.target" ];
+      };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
-        Service = {
-          ExecStart = "${pkgs.blueman}/bin/blueman-applet";
-        };
+      Service = { ExecStart = "${pkgs.blueman}/bin/blueman-applet"; };
     };
   };
 }
diff --git a/modules/services/cbatticon.nix b/modules/services/cbatticon.nix
index 7bf3b7055..0de69c5f9 100644
--- a/modules/services/cbatticon.nix
+++ b/modules/services/cbatticon.nix
@@ -9,37 +9,24 @@ let
   package = pkgs.cbatticon;
 
   makeCommand = commandName: commandArg:
-    optional (commandArg != null) (
-      let
-        cmd = pkgs.writeShellScript commandName commandArg;
-      in
-        "--${commandName} ${cmd}"
-    );
+    optional (commandArg != null)
+    (let cmd = pkgs.writeShellScript commandName commandArg;
+    in "--${commandName} ${cmd}");
 
-  commandLine = concatStringsSep " " (
-    [ "${package}/bin/cbatticon" ]
+  commandLine = concatStringsSep " " ([ "${package}/bin/cbatticon" ]
     ++ makeCommand "command-critical-level" cfg.commandCriticalLevel
     ++ makeCommand "command-left-click" cfg.commandLeftClick
-    ++ optional
-      (cfg.iconType != null)
-      "--icon-type ${cfg.iconType}"
-    ++ optional
-      (cfg.lowLevelPercent != null)
-      "--low-level ${toString cfg.lowLevelPercent}"
-    ++ optional
-      (cfg.criticalLevelPercent != null)
-      "--critical-level ${toString cfg.criticalLevelPercent}"
-    ++ optional
-      (cfg.updateIntervalSeconds != null)
-      "--update-interval ${toString cfg.updateIntervalSeconds}"
-    ++ optional
-      (cfg.hideNotification != null && cfg.hideNotification)
-      "--hide-notification"
-  );
+    ++ optional (cfg.iconType != null) "--icon-type ${cfg.iconType}"
+    ++ optional (cfg.lowLevelPercent != null)
+    "--low-level ${toString cfg.lowLevelPercent}"
+    ++ optional (cfg.criticalLevelPercent != null)
+    "--critical-level ${toString cfg.criticalLevelPercent}"
+    ++ optional (cfg.updateIntervalSeconds != null)
+    "--update-interval ${toString cfg.updateIntervalSeconds}"
+    ++ optional (cfg.hideNotification != null && cfg.hideNotification)
+    "--hide-notification");
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.pmiddend ];
 
   options = {
@@ -66,7 +53,8 @@ in
       };
 
       iconType = mkOption {
-        type = types.nullOr (types.enum [ "standard" "notification" "symbolic" ]);
+        type =
+          types.nullOr (types.enum [ "standard" "notification" "symbolic" ]);
         default = null;
         example = "symbolic";
         description = "Icon type to display in the system tray.";
@@ -119,9 +107,7 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         ExecStart = commandLine;
diff --git a/modules/services/compton.nix b/modules/services/compton.nix
index c227f0a8c..c5b96af34 100644
--- a/modules/services/compton.nix
+++ b/modules/services/compton.nix
@@ -7,44 +7,41 @@ let
 
   cfg = config.services.compton;
 
-  configFile = pkgs.writeText "compton.conf"
-    (optionalString cfg.fade ''
-      # fading
-      fading = true;
-      fade-delta    = ${toString cfg.fadeDelta};
-      fade-in-step  = ${elemAt cfg.fadeSteps 0};
-      fade-out-step = ${elemAt cfg.fadeSteps 1};
-      fade-exclude  = ${toJSON cfg.fadeExclude};
-    '' +
-    optionalString cfg.shadow ''
+  configFile = pkgs.writeText "compton.conf" (optionalString cfg.fade ''
+    # fading
+    fading = true;
+    fade-delta    = ${toString cfg.fadeDelta};
+    fade-in-step  = ${elemAt cfg.fadeSteps 0};
+    fade-out-step = ${elemAt cfg.fadeSteps 1};
+    fade-exclude  = ${toJSON cfg.fadeExclude};
+  '' + optionalString cfg.shadow ''
 
-      # shadows
-      shadow = true;
-      shadow-offset-x = ${toString (elemAt cfg.shadowOffsets 0)};
-      shadow-offset-y = ${toString (elemAt cfg.shadowOffsets 1)};
-      shadow-opacity  = ${cfg.shadowOpacity};
-      shadow-exclude  = ${toJSON cfg.shadowExclude};
-      no-dock-shadow  = ${toJSON cfg.noDockShadow};
-      no-dnd-shadow   = ${toJSON cfg.noDNDShadow};
-    '' + 
-    optionalString cfg.blur ''
+    # shadows
+    shadow = true;
+    shadow-offset-x = ${toString (elemAt cfg.shadowOffsets 0)};
+    shadow-offset-y = ${toString (elemAt cfg.shadowOffsets 1)};
+    shadow-opacity  = ${cfg.shadowOpacity};
+    shadow-exclude  = ${toJSON cfg.shadowExclude};
+    no-dock-shadow  = ${toJSON cfg.noDockShadow};
+    no-dnd-shadow   = ${toJSON cfg.noDNDShadow};
+  '' + optionalString cfg.blur ''
 
-      # blur
-      blur-background         = true;
-      blur-background-exclude = ${toJSON cfg.blurExclude};
-    '' + ''
+    # blur
+    blur-background         = true;
+    blur-background-exclude = ${toJSON cfg.blurExclude};
+  '' + ''
 
-      # opacity
-      active-opacity   = ${cfg.activeOpacity};
-      inactive-opacity = ${cfg.inactiveOpacity};
-      menu-opacity     = ${cfg.menuOpacity};
-      opacity-rule     = ${toJSON cfg.opacityRule};
+    # opacity
+    active-opacity   = ${cfg.activeOpacity};
+    inactive-opacity = ${cfg.inactiveOpacity};
+    menu-opacity     = ${cfg.menuOpacity};
+    opacity-rule     = ${toJSON cfg.opacityRule};
 
-      # other options
-      backend = ${toJSON cfg.backend};
-      vsync = ${toJSON cfg.vSync};
-      refresh-rate = ${toString cfg.refreshRate};
-    '' + cfg.extraOptions);
+    # other options
+    backend = ${toJSON cfg.backend};
+    vsync = ${toJSON cfg.vSync};
+    refresh-rate = ${toString cfg.refreshRate};
+  '' + cfg.extraOptions);
 
 in {
 
@@ -61,11 +58,8 @@ in {
 
     blurExclude = mkOption {
       type = types.listOf types.str;
-      default = [];
-      example = [
-        "class_g = 'slop'"
-        "class_i = 'polybar'"
-      ];
+      default = [ ];
+      example = [ "class_g = 'slop'" "class_i = 'polybar'" ];
       description = ''
         List of windows to exclude background blur.
         See the
@@ -105,12 +99,8 @@ in {
 
     fadeExclude = mkOption {
       type = types.listOf types.str;
-      default = [];
-      example = [
-        "window_type *= 'menu'"
-        "name ~= 'Firefox$'"
-        "focused = 1"
-      ];
+      default = [ ];
+      example = [ "window_type *= 'menu'" "name ~= 'Firefox$'" "focused = 1" ];
       description = ''
         List of conditions of windows that should not be faded.
         See the
@@ -150,12 +140,8 @@ in {
 
     shadowExclude = mkOption {
       type = types.listOf types.str;
-      default = [];
-      example = [
-        "window_type *= 'menu'"
-        "name ~= 'Firefox$'"
-        "focused = 1"
-      ];
+      default = [ ];
+      example = [ "window_type *= 'menu'" "name ~= 'Firefox$'" "focused = 1" ];
       description = ''
         List of conditions of windows that should have no shadow.
         See the
@@ -212,11 +198,8 @@ in {
 
     opacityRule = mkOption {
       type = types.listOf types.str;
-      default = [];
-      example = [
-        "87:class_i ?= 'scratchpad'"
-        "91:class_i ?= 'xterm'"
-      ];
+      default = [ ];
+      example = [ "87:class_i ?= 'scratchpad'" "91:class_i ?= 'xterm'" ];
       description = ''
         List of opacity rules.
         See the
@@ -256,7 +239,7 @@ in {
       default = 0;
       example = 60;
       description = ''
-       Screen refresh rate (0 = automatically detect).
+        Screen refresh rate (0 = automatically detect).
       '';
     };
 
@@ -293,16 +276,13 @@ in {
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         ExecStart = "${cfg.package}/bin/compton --config ${configFile}";
         Restart = "always";
         RestartSec = 3;
-      }
-      // optionalAttrs (cfg.backend == "glx") {
+      } // optionalAttrs (cfg.backend == "glx") {
         # Temporarily fixes corrupt colours with Mesa 18.
         Environment = [ "allow_rgb10_configs=false" ];
       };
diff --git a/modules/services/dunst.nix b/modules/services/dunst.nix
index 96b1f71a2..d32e87513 100644
--- a/modules/services/dunst.nix
+++ b/modules/services/dunst.nix
@@ -6,17 +6,19 @@ let
 
   cfg = config.services.dunst;
 
-  eitherStrBoolIntList = with types; either str (either bool (either int (listOf str)));
+  eitherStrBoolIntList = with types;
+    either str (either bool (either int (listOf str)));
 
   toDunstIni = generators.toINI {
     mkKeyValue = key: value:
-    let
-      value' =
-        if isBool value then (if value then "yes" else "no")
-        else if isString value then "\"${value}\""
-        else toString value;
-    in
-      "${key}=${value'}";
+      let
+        value' = if isBool value then
+          (if value then "yes" else "no")
+        else if isString value then
+          ''"${value}"''
+        else
+          toString value;
+      in "${key}=${value'}";
   };
 
   themeType = types.submodule {
@@ -48,9 +50,7 @@ let
     size = "32x32";
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -65,7 +65,7 @@ in
 
       settings = mkOption {
         type = with types; attrsOf (attrsOf eitherStrBoolIntList);
-        default = {};
+        default = { };
         description = "Configuration written to ~/.config/dunstrc";
         example = literalExample ''
           {
@@ -87,86 +87,73 @@ in
     };
   };
 
-  config = mkIf cfg.enable (
-    mkMerge [
-      {
-        xdg.dataFile."dbus-1/services/org.knopwob.dunst.service".source =
-          "${pkgs.dunst}/share/dbus-1/services/org.knopwob.dunst.service";
+  config = mkIf cfg.enable (mkMerge [
+    {
+      xdg.dataFile."dbus-1/services/org.knopwob.dunst.service".source =
+        "${pkgs.dunst}/share/dbus-1/services/org.knopwob.dunst.service";
 
-        services.dunst.settings.global.icon_path =
-          let
-            useCustomTheme =
-              cfg.iconTheme.package != hicolorTheme.package
-              || cfg.iconTheme.name != hicolorTheme.name
-              || cfg.iconTheme.size != hicolorTheme.size;
+      services.dunst.settings.global.icon_path = let
+        useCustomTheme = cfg.iconTheme.package != hicolorTheme.package
+          || cfg.iconTheme.name != hicolorTheme.name || cfg.iconTheme.size
+          != hicolorTheme.size;
 
-            basePaths = [
-              "/run/current-system/sw"
-              config.home.profileDirectory
-              cfg.iconTheme.package
-            ] ++ optional useCustomTheme hicolorTheme.package;
+        basePaths = [
+          "/run/current-system/sw"
+          config.home.profileDirectory
+          cfg.iconTheme.package
+        ] ++ optional useCustomTheme hicolorTheme.package;
 
-            themes =
-              [
-                cfg.iconTheme
-              ] ++ optional useCustomTheme (
-                hicolorTheme // { size = cfg.iconTheme.size; }
-              );
+        themes = [ cfg.iconTheme ] ++ optional useCustomTheme
+          (hicolorTheme // { size = cfg.iconTheme.size; });
 
-            categories = [
-              "actions"
-              "animations"
-              "apps"
-              "categories"
-              "devices"
-              "emblems"
-              "emotes"
-              "filesystem"
-              "intl"
-              "mimetypes"
-              "places"
-              "status"
-              "stock"
-            ];
-          in
-            concatStringsSep ":" (
-              concatMap (theme:
-                concatMap (basePath:
-                  map (category:
-                    "${basePath}/share/icons/${theme.name}/${theme.size}/${category}"
-                  ) categories
-                ) basePaths
-              ) themes
-            );
+        categories = [
+          "actions"
+          "animations"
+          "apps"
+          "categories"
+          "devices"
+          "emblems"
+          "emotes"
+          "filesystem"
+          "intl"
+          "mimetypes"
+          "places"
+          "status"
+          "stock"
+        ];
+      in concatStringsSep ":" (concatMap (theme:
+        concatMap (basePath:
+          map (category:
+            "${basePath}/share/icons/${theme.name}/${theme.size}/${category}")
+          categories) basePaths) themes);
 
-        systemd.user.services.dunst = {
-          Unit = {
-            Description = "Dunst notification daemon";
-            After = [ "graphical-session-pre.target" ];
-            PartOf = [ "graphical-session.target" ];
-          };
-
-          Service = {
-            Type = "dbus";
-            BusName = "org.freedesktop.Notifications";
-            ExecStart = "${pkgs.dunst}/bin/dunst";
-          };
+      systemd.user.services.dunst = {
+        Unit = {
+          Description = "Dunst notification daemon";
+          After = [ "graphical-session-pre.target" ];
+          PartOf = [ "graphical-session.target" ];
         };
-      }
 
-      (mkIf (cfg.settings != {}) {
-        xdg.configFile."dunst/dunstrc" = {
-          text = toDunstIni cfg.settings;
-          onChange = ''
-            pkillVerbose=""
-            if [[ -v VERBOSE ]]; then
-              pkillVerbose="-e"
-            fi
-            $DRY_RUN_CMD ${pkgs.procps}/bin/pkill -u $USER $pkillVerbose dunst || true
-            unset pkillVerbose
-          '';
+        Service = {
+          Type = "dbus";
+          BusName = "org.freedesktop.Notifications";
+          ExecStart = "${pkgs.dunst}/bin/dunst";
         };
-      })
-    ]
-  );
+      };
+    }
+
+    (mkIf (cfg.settings != { }) {
+      xdg.configFile."dunst/dunstrc" = {
+        text = toDunstIni cfg.settings;
+        onChange = ''
+          pkillVerbose=""
+          if [[ -v VERBOSE ]]; then
+            pkillVerbose="-e"
+          fi
+          $DRY_RUN_CMD ${pkgs.procps}/bin/pkill -u $USER $pkillVerbose dunst || true
+          unset pkillVerbose
+        '';
+      };
+    })
+  ]);
 }
diff --git a/modules/services/dwm-status.nix b/modules/services/dwm-status.nix
index 2b010cec1..7a19e5e5f 100644
--- a/modules/services/dwm-status.nix
+++ b/modules/services/dwm-status.nix
@@ -10,9 +10,8 @@ let
   configText = builtins.toJSON ({ inherit (cfg) order; } // cfg.extraConfig);
 
   configFile = pkgs.writeText "dwm-status.json" configText;
-in
 
-{
+in {
   options = {
     services.dwm-status = {
       enable = mkEnableOption "dwm-status user service";
@@ -32,7 +31,7 @@ in
 
       extraConfig = mkOption {
         type = types.attrs;
-        default = {};
+        default = { };
         example = literalExample ''
           {
             separator = "#";
@@ -58,13 +57,9 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
-      Service = {
-        ExecStart = "${cfg.package}/bin/dwm-status ${configFile}";
-      };
+      Service = { ExecStart = "${cfg.package}/bin/dwm-status ${configFile}"; };
     };
   };
 }
diff --git a/modules/services/emacs.nix b/modules/services/emacs.nix
index 33d6871c6..5b0e88db7 100644
--- a/modules/services/emacs.nix
+++ b/modules/services/emacs.nix
@@ -8,26 +8,21 @@ let
   emacsCfg = config.programs.emacs;
   emacsBinPath = "${emacsCfg.finalPackage}/bin";
 
-in
-
-{
-  options.services.emacs = {
-    enable = mkEnableOption "the Emacs daemon";
-  };
+in {
+  options.services.emacs = { enable = mkEnableOption "the Emacs daemon"; };
 
   config = mkIf cfg.enable {
-    assertions = [
-      {
-        assertion = emacsCfg.enable;
-        message = "The Emacs service module requires"
-          + " 'programs.emacs.enable = true'.";
-      }
-    ];
+    assertions = [{
+      assertion = emacsCfg.enable;
+      message = "The Emacs service module requires"
+        + " 'programs.emacs.enable = true'.";
+    }];
 
     systemd.user.services.emacs = {
       Unit = {
         Description = "Emacs: the extensible, self-documenting text editor";
-        Documentation = "info:emacs man:emacs(1) https://gnu.org/software/emacs/";
+        Documentation =
+          "info:emacs man:emacs(1) https://gnu.org/software/emacs/";
 
         # Avoid killing the Emacs session, which may be full of
         # unsaved buffers.
@@ -35,14 +30,13 @@ in
       };
 
       Service = {
-        ExecStart = "${pkgs.runtimeShell} -l -c 'exec ${emacsBinPath}/emacs --fg-daemon'";
+        ExecStart =
+          "${pkgs.runtimeShell} -l -c 'exec ${emacsBinPath}/emacs --fg-daemon'";
         ExecStop = "${emacsBinPath}/emacsclient --eval '(kill-emacs)'";
         Restart = "on-failure";
       };
 
-      Install = {
-        WantedBy = [ "default.target" ];
-      };
+      Install = { WantedBy = [ "default.target" ]; };
     };
   };
 }
diff --git a/modules/services/flameshot.nix b/modules/services/flameshot.nix
index 87b494d0f..c8659d51d 100644
--- a/modules/services/flameshot.nix
+++ b/modules/services/flameshot.nix
@@ -7,16 +7,10 @@ let
   cfg = config.services.flameshot;
   package = pkgs.flameshot;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.hamhut1066 ];
 
-  options = {
-    services.flameshot = {
-      enable = mkEnableOption "Flameshot";
-    };
-  };
+  options = { services.flameshot = { enable = mkEnableOption "Flameshot"; }; };
 
   config = mkIf cfg.enable {
     home.packages = [ package ];
@@ -33,9 +27,7 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         Environment = "PATH=${config.home.profileDirectory}/bin";
diff --git a/modules/services/getmail.nix b/modules/services/getmail.nix
index 46d4c1752..e7a1b1a46 100644
--- a/modules/services/getmail.nix
+++ b/modules/services/getmail.nix
@@ -6,17 +6,19 @@ let
 
   cfg = config.services.getmail;
 
-  accounts = filter (a: a.getmail.enable)
-    (attrValues config.accounts.email.accounts);
+  accounts =
+    filter (a: a.getmail.enable) (attrValues config.accounts.email.accounts);
 
   # Note: The getmail service does not expect a path, but just the filename!
-  renderConfigFilepath = a: if a.primary then "getmailrc" else "getmail${a.name}";
-  configFiles = concatMapStringsSep " " (a: " --rcfile ${renderConfigFilepath a}") accounts;
-in
-{
+  renderConfigFilepath = a:
+    if a.primary then "getmailrc" else "getmail${a.name}";
+  configFiles =
+    concatMapStringsSep " " (a: " --rcfile ${renderConfigFilepath a}") accounts;
+in {
   options = {
     services.getmail = {
-      enable = mkEnableOption "the getmail systemd service to automatically retrieve mail";
+      enable = mkEnableOption
+        "the getmail systemd service to automatically retrieve mail";
 
       frequency = mkOption {
         type = types.str;
@@ -36,25 +38,17 @@ in
 
   config = mkIf cfg.enable {
     systemd.user.services.getmail = {
-      Unit = {
-        Description = "getmail email fetcher";
-      };
-      Service = {
-        ExecStart = "${pkgs.getmail}/bin/getmail ${configFiles}";
-      };
+      Unit = { Description = "getmail email fetcher"; };
+      Service = { ExecStart = "${pkgs.getmail}/bin/getmail ${configFiles}"; };
     };
 
     systemd.user.timers.getmail = {
-      Unit = {
-        Description = "getmail email fetcher";
-      };
+      Unit = { Description = "getmail email fetcher"; };
       Timer = {
         OnCalendar = "${cfg.frequency}";
         Unit = "getmail.service";
       };
-      Install = {
-        WantedBy = [ "timers.target" ];
-      };
+      Install = { WantedBy = [ "timers.target" ]; };
     };
 
   };
diff --git a/modules/services/gnome-keyring.nix b/modules/services/gnome-keyring.nix
index 4ca6c7cac..6d8317dcf 100644
--- a/modules/services/gnome-keyring.nix
+++ b/modules/services/gnome-keyring.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.gnome-keyring;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -16,8 +14,8 @@ in
       enable = mkEnableOption "GNOME Keyring";
 
       components = mkOption {
-        type = types.listOf (types.enum ["pkcs11" "secrets" "ssh"]);
-        default = [];
+        type = types.listOf (types.enum [ "pkcs11" "secrets" "ssh" ]);
+        default = [ ];
         description = ''
           The GNOME keyring components to start. If empty then the
           default set of components will be started.
@@ -34,22 +32,15 @@ in
       };
 
       Service = {
-        ExecStart =
-          let
-            args = concatStringsSep " " (
-              [ "--start" "--foreground" ]
-              ++ optional (cfg.components != []) (
-                "--components=" + concatStringsSep "," cfg.components
-              )
-            );
-          in
-            "${pkgs.gnome3.gnome_keyring}/bin/gnome-keyring-daemon ${args}";
+        ExecStart = let
+          args = concatStringsSep " " ([ "--start" "--foreground" ]
+            ++ optional (cfg.components != [ ])
+            ("--components=" + concatStringsSep "," cfg.components));
+        in "${pkgs.gnome3.gnome_keyring}/bin/gnome-keyring-daemon ${args}";
         Restart = "on-abort";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session-pre.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session-pre.target" ]; };
     };
   };
 }
diff --git a/modules/services/grobi.nix b/modules/services/grobi.nix
index e910bcdfd..4dfc5d633 100644
--- a/modules/services/grobi.nix
+++ b/modules/services/grobi.nix
@@ -6,12 +6,10 @@ let
 
   cfg = config.services.grobi;
 
-  eitherStrBoolIntList =
-    with types; either str (either bool (either int (listOf str)));
+  eitherStrBoolIntList = with types;
+    either str (either bool (either int (listOf str)));
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.mbrgm ];
 
   options = {
@@ -20,7 +18,7 @@ in
 
       executeAfter = mkOption {
         type = with types; listOf str;
-        default = [];
+        default = [ ];
         example = [ "setxkbmap dvorak" ];
         description = ''
           Commands to be run after an output configuration was
@@ -32,7 +30,7 @@ in
 
       rules = mkOption {
         type = with types; listOf (attrsOf eitherStrBoolIntList);
-        default = [];
+        default = [ ];
         example = literalExample ''
           [
             {
@@ -88,9 +86,7 @@ in
         Environment = "PATH=${pkgs.xorg.xrandr}/bin:${pkgs.bash}/bin";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
 
     xdg.configFile."grobi.conf".text = builtins.toJSON {
diff --git a/modules/services/hound.nix b/modules/services/hound.nix
index a252a68d2..00589f340 100644
--- a/modules/services/hound.nix
+++ b/modules/services/hound.nix
@@ -6,23 +6,16 @@ let
 
   cfg = config.services.hound;
 
-  configFile = pkgs.writeText "hound-config.json" (
-    builtins.toJSON {
-      max-concurrent-indexers = cfg.maxConcurrentIndexers;
-      dbpath = cfg.databasePath;
-      repos = cfg.repositories;
-      health-check-url = "/healthz";
-    }
-  );
+  configFile = pkgs.writeText "hound-config.json" (builtins.toJSON {
+    max-concurrent-indexers = cfg.maxConcurrentIndexers;
+    dbpath = cfg.databasePath;
+    repos = cfg.repositories;
+    health-check-url = "/healthz";
+  });
 
-  houndOptions = [
-    "--addr ${cfg.listenAddress}"
-    "--conf ${configFile}"
-  ];
+  houndOptions = [ "--addr ${cfg.listenAddress}" "--conf ${configFile}" ];
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.adisbladis ];
 
   options.services.hound = {
@@ -37,7 +30,7 @@ in
     databasePath = mkOption {
       type = types.path;
       default = "${config.xdg.dataHome}/hound";
-      defaultText = "\$XDG_DATA_HOME/hound";
+      defaultText = "$XDG_DATA_HOME/hound";
       description = "The Hound database path.";
     };
 
@@ -49,7 +42,7 @@ in
 
     repositories = mkOption {
       type = types.attrsOf (types.uniq types.attrs);
-      default = {};
+      default = { };
       example = literalExample ''
         {
           SomeGitRepo = {
@@ -67,17 +60,14 @@ in
     home.packages = [ pkgs.hound ];
 
     systemd.user.services.hound = {
-      Unit = {
-        Description = "Hound source code search engine";
-      };
+      Unit = { Description = "Hound source code search engine"; };
 
-      Install = {
-        WantedBy = [ "default.target" ];
-      };
+      Install = { WantedBy = [ "default.target" ]; };
 
       Service = {
         Environment = "PATH=${makeBinPath [ pkgs.mercurial pkgs.git ]}";
-        ExecStart = "${pkgs.hound}/bin/houndd ${concatStringsSep " " houndOptions}";
+        ExecStart =
+          "${pkgs.hound}/bin/houndd ${concatStringsSep " " houndOptions}";
       };
     };
   };
diff --git a/modules/services/imapnotify-accounts.nix b/modules/services/imapnotify-accounts.nix
index 1c780bf28..94bdce5df 100644
--- a/modules/services/imapnotify-accounts.nix
+++ b/modules/services/imapnotify-accounts.nix
@@ -16,13 +16,16 @@ with lib;
     onNotifyPost = mkOption {
       type = with types; either str (attrsOf str);
       default = "";
-      example = { mail = "\${pkgs.notmuch}/bin/notmuch new && \${pkgs.libnotify}/bin/notify-send 'New mail arrived'"; };
+      example = {
+        mail =
+          "\${pkgs.notmuch}/bin/notmuch new && \${pkgs.libnotify}/bin/notify-send 'New mail arrived'";
+      };
       description = "Shell commands to run after onNotify event.";
     };
 
     boxes = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "Inbox" "[Gmail]/MyLabel" ];
       description = "IMAP folders to watch.";
     };
diff --git a/modules/services/imapnotify.nix b/modules/services/imapnotify.nix
index fbb0713e9..b59b006e3 100644
--- a/modules/services/imapnotify.nix
+++ b/modules/services/imapnotify.nix
@@ -6,102 +6,85 @@ let
 
   cfg = config.services.imapnotify;
 
-  safeName = lib.replaceChars ["@" ":" "\\" "[" "]"] ["-" "-" "-" "" ""];
+  safeName = lib.replaceChars [ "@" ":" "\\" "[" "]" ] [ "-" "-" "-" "" "" ];
 
   imapnotifyAccounts =
-    filter (a: a.imapnotify.enable)
-    (attrValues config.accounts.email.accounts);
+    filter (a: a.imapnotify.enable) (attrValues config.accounts.email.accounts);
 
   genAccountUnit = account:
-    let
-      name = safeName account.name;
-    in
-      {
-        name = "imapnotify-${name}";
-        value = {
-          Unit = {
-            Description = "imapnotify for ${name}";
-          };
+    let name = safeName account.name;
+    in {
+      name = "imapnotify-${name}";
+      value = {
+        Unit = { Description = "imapnotify for ${name}"; };
 
-          Service = {
-            ExecStart = "${pkgs.imapnotify}/bin/imapnotify -c ${genAccountConfig account}";
-          } // optionalAttrs account.notmuch.enable {
-            Environment = "NOTMUCH_CONFIG=${config.xdg.configHome}/notmuch/notmuchrc";
-          };
-
-          Install = {
-            WantedBy = [ "default.target" ];
-          };
+        Service = {
+          ExecStart =
+            "${pkgs.imapnotify}/bin/imapnotify -c ${genAccountConfig account}";
+        } // optionalAttrs account.notmuch.enable {
+          Environment =
+            "NOTMUCH_CONFIG=${config.xdg.configHome}/notmuch/notmuchrc";
         };
+
+        Install = { WantedBy = [ "default.target" ]; };
       };
+    };
 
   genAccountConfig = account:
-    pkgs.writeText "imapnotify-${safeName account.name}-config.js" (
-      let
-        port =
-          if account.imap.port != null then account.imap.port
-          else if account.imap.tls.enable then 993
-          else 143;
+    pkgs.writeText "imapnotify-${safeName account.name}-config.js" (let
+      port = if account.imap.port != null then
+        account.imap.port
+      else if account.imap.tls.enable then
+        993
+      else
+        143;
 
-        toJSON = builtins.toJSON;
-      in
-        ''
-          var child_process = require('child_process');
+      toJSON = builtins.toJSON;
+    in ''
+      var child_process = require('child_process');
 
-          function getStdout(cmd) {
-              var stdout = child_process.execSync(cmd);
-              return stdout.toString().trim();
-          }
+      function getStdout(cmd) {
+          var stdout = child_process.execSync(cmd);
+          return stdout.toString().trim();
+      }
 
-          exports.host = ${toJSON account.imap.host}
-          exports.port = ${toJSON port};
-          exports.tls = ${toJSON account.imap.tls.enable};
-          exports.username = ${toJSON account.userName};
-          exports.password = getStdout("${toString account.passwordCommand}");
-          exports.onNotify = ${toJSON account.imapnotify.onNotify};
-          exports.onNotifyPost = ${toJSON account.imapnotify.onNotifyPost};
-          exports.boxes = ${toJSON account.imapnotify.boxes};
-        ''
-    );
+      exports.host = ${toJSON account.imap.host}
+      exports.port = ${toJSON port};
+      exports.tls = ${toJSON account.imap.tls.enable};
+      exports.username = ${toJSON account.userName};
+      exports.password = getStdout("${toString account.passwordCommand}");
+      exports.onNotify = ${toJSON account.imapnotify.onNotify};
+      exports.onNotifyPost = ${toJSON account.imapnotify.onNotifyPost};
+      exports.boxes = ${toJSON account.imapnotify.boxes};
+    '');
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.nickhu ];
 
   options = {
-    services.imapnotify = {
-      enable = mkEnableOption "imapnotify";
-    };
+    services.imapnotify = { enable = mkEnableOption "imapnotify"; };
 
     accounts.email.accounts = mkOption {
-      type = with types; attrsOf (submodule (
-        import ./imapnotify-accounts.nix
-      ));
+      type = with types; attrsOf (submodule (import ./imapnotify-accounts.nix));
     };
   };
 
   config = mkIf cfg.enable {
-    assertions =
-      let
-        checkAccounts = pred: msg:
-          let
-            badAccounts = filter pred imapnotifyAccounts;
-          in
-            {
-              assertion = badAccounts == [];
-              message = "imapnotify: Missing ${msg} for accounts: "
-                + concatMapStringsSep ", " (a: a.name) badAccounts;
-            };
-      in
-        [
-          (checkAccounts (a: a.maildir == null) "maildir configuration")
-          (checkAccounts (a: a.imap == null) "IMAP configuration")
-          (checkAccounts (a: a.passwordCommand == null) "password command")
-          (checkAccounts (a: a.userName == null) "username")
-        ];
+    assertions = let
+      checkAccounts = pred: msg:
+        let badAccounts = filter pred imapnotifyAccounts;
+        in {
+          assertion = badAccounts == [ ];
+          message = "imapnotify: Missing ${msg} for accounts: "
+            + concatMapStringsSep ", " (a: a.name) badAccounts;
+        };
+    in [
+      (checkAccounts (a: a.maildir == null) "maildir configuration")
+      (checkAccounts (a: a.imap == null) "IMAP configuration")
+      (checkAccounts (a: a.passwordCommand == null) "password command")
+      (checkAccounts (a: a.userName == null) "username")
+    ];
 
-    systemd.user.services =
-      listToAttrs (map genAccountUnit imapnotifyAccounts);
+    systemd.user.services = listToAttrs (map genAccountUnit imapnotifyAccounts);
   };
 }
diff --git a/modules/services/kdeconnect.nix b/modules/services/kdeconnect.nix
index bd698fcf8..82de1f0eb 100644
--- a/modules/services/kdeconnect.nix
+++ b/modules/services/kdeconnect.nix
@@ -7,9 +7,7 @@ let
   cfg = config.services.kdeconnect;
   package = pkgs.kdeconnect;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.adisbladis ];
 
   options = {
@@ -31,14 +29,13 @@ in
 
       systemd.user.services.kdeconnect = {
         Unit = {
-          Description = "Adds communication between your desktop and your smartphone";
+          Description =
+            "Adds communication between your desktop and your smartphone";
           After = [ "graphical-session-pre.target" ];
           PartOf = [ "graphical-session.target" ];
         };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+        Install = { WantedBy = [ "graphical-session.target" ]; };
 
         Service = {
           Environment = "PATH=${config.home.profileDirectory}/bin";
@@ -52,16 +49,16 @@ in
       systemd.user.services.kdeconnect-indicator = {
         Unit = {
           Description = "kdeconnect-indicator";
-          After = [ "graphical-session-pre.target"
-                    "polybar.service"
-                    "taffybar.service"
-                    "stalonetray.service" ];
+          After = [
+            "graphical-session-pre.target"
+            "polybar.service"
+            "taffybar.service"
+            "stalonetray.service"
+          ];
           PartOf = [ "graphical-session.target" ];
         };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+        Install = { WantedBy = [ "graphical-session.target" ]; };
 
         Service = {
           Environment = "PATH=${config.home.profileDirectory}/bin";
diff --git a/modules/services/keepassx.nix b/modules/services/keepassx.nix
index ad791786f..dc37066e2 100644
--- a/modules/services/keepassx.nix
+++ b/modules/services/keepassx.nix
@@ -13,19 +13,15 @@ with lib;
 
   config = mkIf config.services.keepassx.enable {
     systemd.user.services.keepassx = {
-        Unit = {
-          Description = "KeePassX password manager";
-          After = [ "graphical-session-pre.target" ];
-          PartOf = [ "graphical-session.target" ];
-        };
+      Unit = {
+        Description = "KeePassX password manager";
+        After = [ "graphical-session-pre.target" ];
+        PartOf = [ "graphical-session.target" ];
+      };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
-        Service = {
-          ExecStart = "${pkgs.keepassx}/bin/keepassx -min -lock";
-        };
+      Service = { ExecStart = "${pkgs.keepassx}/bin/keepassx -min -lock"; };
     };
   };
 }
diff --git a/modules/services/lorri.nix b/modules/services/lorri.nix
index 351afbc1d..3b2c244e3 100644
--- a/modules/services/lorri.nix
+++ b/modules/services/lorri.nix
@@ -6,14 +6,10 @@ let
 
   cfg = config.services.lorri;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.gerschtli ];
 
-  options = {
-    services.lorri.enable = mkEnableOption "lorri build daemon";
-  };
+  options = { services.lorri.enable = mkEnableOption "lorri build daemon"; };
 
   config = mkIf cfg.enable {
     home.packages = [ pkgs.lorri ];
@@ -33,25 +29,22 @@ in
           ProtectSystem = "strict";
           ProtectHome = "read-only";
           Restart = "on-failure";
-          Environment =
-            let path = with pkgs; makeSearchPath "bin" [ nix gitMinimal gnutar gzip ];
-            in "PATH=${path}";
+          Environment = let
+            path = with pkgs;
+              makeSearchPath "bin" [ nix gitMinimal gnutar gzip ];
+          in "PATH=${path}";
         };
       };
 
       sockets.lorri = {
-        Unit = {
-          Description = "Socket for lorri build daemon";
-        };
+        Unit = { Description = "Socket for lorri build daemon"; };
 
         Socket = {
           ListenStream = "%t/lorri/daemon.socket";
           RuntimeDirectory = "lorri";
         };
 
-        Install = {
-          WantedBy = [ "sockets.target" ];
-        };
+        Install = { WantedBy = [ "sockets.target" ]; };
       };
     };
   };
diff --git a/modules/services/mbsync.nix b/modules/services/mbsync.nix
index 73c3b3266..ac6ac1ef7 100644
--- a/modules/services/mbsync.nix
+++ b/modules/services/mbsync.nix
@@ -6,14 +6,10 @@ let
 
   cfg = config.services.mbsync;
 
-  mbsyncOptions =
-    [ "--all"
-    ] ++ optional (cfg.verbose) "--verbose"
-      ++ optional (cfg.configFile != null) "--config ${cfg.configFile}";
+  mbsyncOptions = [ "--all" ] ++ optional (cfg.verbose) "--verbose"
+    ++ optional (cfg.configFile != null) "--config ${cfg.configFile}";
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.pjones ];
 
   options.services.mbsync = {
@@ -81,30 +77,28 @@ in
 
   config = mkIf cfg.enable {
     systemd.user.services.mbsync = {
-      Unit = {
-        Description = "mbsync mailbox synchronization";
-      };
+      Unit = { Description = "mbsync mailbox synchronization"; };
 
       Service = {
         Type = "oneshot";
-        ExecStart = "${cfg.package}/bin/mbsync ${concatStringsSep " " mbsyncOptions}";
-      } // (optionalAttrs (cfg.postExec != null) { ExecStartPost = cfg.postExec; })
-        // (optionalAttrs (cfg.preExec  != null) { ExecStartPre  = cfg.preExec;  });
+        ExecStart =
+          "${cfg.package}/bin/mbsync ${concatStringsSep " " mbsyncOptions}";
+      } // (optionalAttrs (cfg.postExec != null) {
+        ExecStartPost = cfg.postExec;
+      }) // (optionalAttrs (cfg.preExec != null) {
+        ExecStartPre = cfg.preExec;
+      });
     };
 
     systemd.user.timers.mbsync = {
-      Unit = {
-        Description = "mbsync mailbox synchronization";
-      };
+      Unit = { Description = "mbsync mailbox synchronization"; };
 
       Timer = {
         OnCalendar = cfg.frequency;
         Unit = "mbsync.service";
       };
 
-      Install = {
-        WantedBy = [ "timers.target" ];
-      };
+      Install = { WantedBy = [ "timers.target" ]; };
     };
   };
 }
diff --git a/modules/services/mpdris2.nix b/modules/services/mpdris2.nix
index 9030e0fdb..cb8cefba6 100644
--- a/modules/services/mpdris2.nix
+++ b/modules/services/mpdris2.nix
@@ -9,11 +9,11 @@ let
   toIni = generators.toINI {
     mkKeyValue = key: value:
       let
-        value' =
-          if isBool value then (if value then "True" else "False")
-          else toString value;
-      in
-        "${key} = ${value'}";
+        value' = if isBool value then
+          (if value then "True" else "False")
+        else
+          toString value;
+      in "${key} = ${value'}";
   };
 
   mpdris2Conf = {
@@ -29,9 +29,7 @@ let
     };
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.pjones ];
 
   options.services.mpdris2 = {
@@ -76,19 +74,15 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions = [
-      {
-        assertion = config.services.mpd.enable;
-        message = "The mpdris2 module requires 'services.mpd.enable = true'.";
-      }
-    ];
+    assertions = [{
+      assertion = config.services.mpd.enable;
+      message = "The mpdris2 module requires 'services.mpd.enable = true'.";
+    }];
 
     xdg.configFile."mpDris2/mpDris2.conf".text = toIni mpdris2Conf;
 
     systemd.user.services.mpdris2 = {
-      Install = {
-        WantedBy = [ "default.target" ];
-      };
+      Install = { WantedBy = [ "default.target" ]; };
 
       Unit = {
         Description = "MPRIS 2 support for MPD";
diff --git a/modules/services/muchsync.nix b/modules/services/muchsync.nix
index 72bf737c2..b7004418d 100644
--- a/modules/services/muchsync.nix
+++ b/modules/services/muchsync.nix
@@ -150,23 +150,21 @@ in {
   };
 
   config = let
-    mapRemotes = gen: with attrsets; mapAttrs'
+    mapRemotes = gen:
+      with attrsets;
+      mapAttrs'
       (name: remoteCfg: nameValuePair "muchsync-${name}" (gen name remoteCfg))
       cfg.remotes;
   in mkIf (cfg.remotes != { }) {
-    assertions = [
-      {
-        assertion = config.programs.notmuch.enable;
-        message = ''
-          The muchsync module requires 'programs.notmuch.enable = true'.
-        '';
-      }
-    ];
+    assertions = [{
+      assertion = config.programs.notmuch.enable;
+      message = ''
+        The muchsync module requires 'programs.notmuch.enable = true'.
+      '';
+    }];
 
     systemd.user.services = mapRemotes (name: remoteCfg: {
-      Unit = {
-        Description = "muchsync sync service (${name})";
-      };
+      Unit = { Description = "muchsync sync service (${name})"; };
       Service = {
         CPUSchedulingPolicy = "idle";
         IOSchedulingClass = "idle";
@@ -175,8 +173,7 @@ in {
           ''"NOTMUCH_CONFIG=${config.home.sessionVariables.NOTMUCH_CONFIG}"''
           ''"NMBGIT=${config.home.sessionVariables.NMBGIT}"''
         ];
-        ExecStart = concatStringsSep " " (
-          [ "${pkgs.muchsync}/bin/muchsync" ]
+        ExecStart = concatStringsSep " " ([ "${pkgs.muchsync}/bin/muchsync" ]
           ++ [ "-s ${escapeShellArg remoteCfg.sshCommand}" ]
           ++ optional (!remoteCfg.upload) "--noup"
 
@@ -187,25 +184,20 @@ in {
           # remote configuration
           ++ [ (escapeShellArg remoteCfg.remote.host) ]
           ++ optional (remoteCfg.remote.muchsyncPath != "")
-            "-r ${escapeShellArg remoteCfg.remote.muchsyncPath}"
+          "-r ${escapeShellArg remoteCfg.remote.muchsyncPath}"
           ++ optional remoteCfg.remote.checkForModifiedFiles "-F"
-          ++ optional (!remoteCfg.remote.importNew) "--nonew"
-        );
+          ++ optional (!remoteCfg.remote.importNew) "--nonew");
       };
     });
 
     systemd.user.timers = mapRemotes (name: remoteCfg: {
-      Unit = {
-        Description = "muchsync periodic sync (${name})";
-      };
+      Unit = { Description = "muchsync periodic sync (${name})"; };
       Timer = {
         Unit = "muchsync-${name}.service";
         OnCalendar = remoteCfg.frequency;
         Persistent = true;
       };
-      Install = {
-        WantedBy = [ "timers.target" ];
-      };
+      Install = { WantedBy = [ "timers.target" ]; };
     });
   };
 }
diff --git a/modules/services/network-manager-applet.nix b/modules/services/network-manager-applet.nix
index 72a4711e3..bf57ed650 100644
--- a/modules/services/network-manager-applet.nix
+++ b/modules/services/network-manager-applet.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.network-manager-applet;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -25,17 +23,13 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
-        ExecStart = toString (
-          [
-            "${pkgs.networkmanagerapplet}/bin/nm-applet"
-            "--sm-disable"
-          ] ++ optional config.xsession.preferStatusNotifierItems "--indicator"
-        );
+        ExecStart = toString
+          ([ "${pkgs.networkmanagerapplet}/bin/nm-applet" "--sm-disable" ]
+            ++ optional config.xsession.preferStatusNotifierItems
+            "--indicator");
       };
     };
   };
diff --git a/modules/services/nextcloud-client.nix b/modules/services/nextcloud-client.nix
index 3d8dc0bc8..555ca11ad 100644
--- a/modules/services/nextcloud-client.nix
+++ b/modules/services/nextcloud-client.nix
@@ -4,9 +4,7 @@ with lib;
 
 {
   options = {
-    services.nextcloud-client = {
-      enable = mkEnableOption "Nextcloud Client";
-    };
+    services.nextcloud-client = { enable = mkEnableOption "Nextcloud Client"; };
   };
 
   config = mkIf config.services.nextcloud-client.enable {
@@ -22,9 +20,7 @@ with lib;
         ExecStart = "${pkgs.nextcloud-client}/bin/nextcloud";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/services/owncloud-client.nix b/modules/services/owncloud-client.nix
index d98a508f0..d55d8ffa2 100644
--- a/modules/services/owncloud-client.nix
+++ b/modules/services/owncloud-client.nix
@@ -4,9 +4,7 @@ with lib;
 
 {
   options = {
-    services.owncloud-client = {
-      enable = mkEnableOption "Owncloud Client";
-    };
+    services.owncloud-client = { enable = mkEnableOption "Owncloud Client"; };
   };
 
   config = mkIf config.services.owncloud-client.enable {
@@ -22,9 +20,7 @@ with lib;
         ExecStart = "${pkgs.owncloud-client}/bin/owncloud";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/services/parcellite.nix b/modules/services/parcellite.nix
index 45cb33ea8..ce0423861 100644
--- a/modules/services/parcellite.nix
+++ b/modules/services/parcellite.nix
@@ -7,15 +7,11 @@ let
   cfg = config.services.parcellite;
   package = pkgs.parcellite;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.gleber ];
 
   options = {
-    services.parcellite = {
-      enable = mkEnableOption "Parcellite";
-    };
+    services.parcellite = { enable = mkEnableOption "Parcellite"; };
   };
 
   config = mkIf cfg.enable {
@@ -28,9 +24,7 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         ExecStart = "${package}/bin/parcellite";
diff --git a/modules/services/password-store-sync.nix b/modules/services/password-store-sync.nix
index 32c70ff58..819339149 100644
--- a/modules/services/password-store-sync.nix
+++ b/modules/services/password-store-sync.nix
@@ -7,9 +7,7 @@ let
   serviceCfg = config.services.password-store-sync;
   programCfg = config.programs.password-store;
 
-in
-
-{
+in {
   meta.maintainers = with maintainers; [ pacien ];
 
   options.services.password-store-sync = {
@@ -35,28 +33,22 @@ in
   };
 
   config = mkIf serviceCfg.enable {
-    assertions = [
-      {
-        assertion = programCfg.enable;
-        message = "The 'services.password-store-sync' module requires"
-          + " 'programs.password-store.enable = true'.";
-      }
-    ];
+    assertions = [{
+      assertion = programCfg.enable;
+      message = "The 'services.password-store-sync' module requires"
+        + " 'programs.password-store.enable = true'.";
+    }];
 
     systemd.user.services.password-store-sync = {
-      Unit = {
-        Description = "Password store sync";
-      };
+      Unit = { Description = "Password store sync"; };
 
       Service = {
         CPUSchedulingPolicy = "idle";
         IOSchedulingClass = "idle";
-        Environment =
-          let
-            makeEnvironmentPairs =
-              mapAttrsToList (key: value: "${key}=${builtins.toJSON value}");
-          in
-            makeEnvironmentPairs programCfg.settings;
+        Environment = let
+          makeEnvironmentPairs =
+            mapAttrsToList (key: value: "${key}=${builtins.toJSON value}");
+        in makeEnvironmentPairs programCfg.settings;
         ExecStart = toString (pkgs.writeShellScript "password-store-sync" ''
           ${pkgs.pass}/bin/pass git pull --rebase && \
           ${pkgs.pass}/bin/pass git push
@@ -65,9 +57,7 @@ in
     };
 
     systemd.user.timers.password-store-sync = {
-      Unit = {
-        Description = "Password store periodic sync";
-      };
+      Unit = { Description = "Password store periodic sync"; };
 
       Timer = {
         Unit = "password-store-sync.service";
@@ -75,9 +65,7 @@ in
         Persistent = true;
       };
 
-      Install = {
-        WantedBy = [ "timers.target" ];
-      };
+      Install = { WantedBy = [ "timers.target" ]; };
     };
   };
 }
diff --git a/modules/services/pasystray.nix b/modules/services/pasystray.nix
index 8f92f34c0..7c6651d94 100644
--- a/modules/services/pasystray.nix
+++ b/modules/services/pasystray.nix
@@ -6,31 +6,25 @@ with lib;
   meta.maintainers = [ maintainers.pltanton ];
 
   options = {
-    services.pasystray = {
-      enable = mkEnableOption "PulseAudio system tray";
-    };
+    services.pasystray = { enable = mkEnableOption "PulseAudio system tray"; };
   };
 
   config = mkIf config.services.pasystray.enable {
     systemd.user.services.pasystray = {
-        Unit = {
-          Description = "PulseAudio system tray";
-          After = [ "graphical-session-pre.target" ];
-          PartOf = [ "graphical-session.target" ];
-        };
+      Unit = {
+        Description = "PulseAudio system tray";
+        After = [ "graphical-session-pre.target" ];
+        PartOf = [ "graphical-session.target" ];
+      };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
-        Service = {
-          Environment =
-            let
-              toolPaths = makeBinPath [ pkgs.paprefs pkgs.pavucontrol ];
-            in
-              [ "PATH=${toolPaths}" ];
-          ExecStart = "${pkgs.pasystray}/bin/pasystray";
-        };
+      Service = {
+        Environment =
+          let toolPaths = makeBinPath [ pkgs.paprefs pkgs.pavucontrol ];
+          in [ "PATH=${toolPaths}" ];
+        ExecStart = "${pkgs.pasystray}/bin/pasystray";
+      };
     };
   };
 }
diff --git a/modules/services/polybar.nix b/modules/services/polybar.nix
index 4225ed9b3..934a99063 100644
--- a/modules/services/polybar.nix
+++ b/modules/services/polybar.nix
@@ -6,30 +6,28 @@ let
 
   cfg = config.services.polybar;
 
-  eitherStrBoolIntList = with types; either str (either bool (either int (listOf str)));
+  eitherStrBoolIntList = with types;
+    either str (either bool (either int (listOf str)));
 
   toPolybarIni = generators.toINI {
     mkKeyValue = key: value:
       let
         quoted = v:
-          if hasPrefix " " v || hasSuffix " " v
-          then ''"${v}"''
-          else v;
+          if hasPrefix " " v || hasSuffix " " v then ''"${v}"'' else v;
 
-        value' =
-          if isBool value then (if value then "true" else "false")
-          else if (isString value && key != "include-file") then quoted value
-          else toString value;
-      in
-        "${key}=${value'}";
+        value' = if isBool value then
+          (if value then "true" else "false")
+        else if (isString value && key != "include-file") then
+          quoted value
+        else
+          toString value;
+      in "${key}=${value'}";
   };
 
   configFile = pkgs.writeText "polybar.conf"
     (toPolybarIni cfg.config + "\n" + cfg.extraConfig);
 
-in
-
-{
+in {
   options = {
     services.polybar = {
       enable = mkEnableOption "Polybar status bar";
@@ -39,7 +37,7 @@ in
         default = pkgs.polybar;
         defaultText = literalExample "pkgs.polybar";
         description = "Polybar package to install.";
-        example =  literalExample ''
+        example = literalExample ''
           pkgs.polybar.override {
             i3GapsSupport = true;
             alsaSupport = true;
@@ -50,15 +48,14 @@ in
       };
 
       config = mkOption {
-        type = types.coercedTo
-          types.path
+        type = types.coercedTo types.path
           (p: { "section/base" = { include-file = "${p}"; }; })
           (types.attrsOf (types.attrsOf eitherStrBoolIntList));
         description = ''
           Polybar configuration. Can be either path to a file, or set of attributes
           that will be used to create the final configuration.
         '';
-        default = {};
+        default = { };
         example = literalExample ''
           {
             "bar/top" = {
@@ -118,25 +115,20 @@ in
         Description = "Polybar status bar";
         After = [ "graphical-session-pre.target" ];
         PartOf = [ "graphical-session.target" ];
-        X-Restart-Triggers = [
-          "${config.xdg.configFile."polybar/config".source}"
-        ];
+        X-Restart-Triggers =
+          [ "${config.xdg.configFile."polybar/config".source}" ];
       };
 
       Service = {
         Type = "forking";
         Environment = "PATH=${cfg.package}/bin:/run/wrappers/bin";
         ExecStart =
-          let
-            scriptPkg = pkgs.writeShellScriptBin "polybar-start" cfg.script;
-          in
-            "${scriptPkg}/bin/polybar-start";
+          let scriptPkg = pkgs.writeShellScriptBin "polybar-start" cfg.script;
+          in "${scriptPkg}/bin/polybar-start";
         Restart = "on-failure";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 
diff --git a/modules/services/random-background.nix b/modules/services/random-background.nix
index 885574aff..9deee8deb 100644
--- a/modules/services/random-background.nix
+++ b/modules/services/random-background.nix
@@ -6,18 +6,11 @@ let
 
   cfg = config.services.random-background;
 
-  flags = lib.concatStringsSep " " (
-    [
-      "--bg-${cfg.display}"
-      "--no-fehbg"
-      "--randomize"
-    ]
-    ++ lib.optional (!cfg.enableXinerama) "--no-xinerama"
-  );
+  flags = lib.concatStringsSep " "
+    ([ "--bg-${cfg.display}" "--no-fehbg" "--randomize" ]
+      ++ lib.optional (!cfg.enableXinerama) "--no-xinerama");
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -73,41 +66,32 @@ in
     };
   };
 
-  config = mkIf cfg.enable (
-    mkMerge ([
-      {
-        systemd.user.services.random-background = {
-          Unit = {
-            Description = "Set random desktop background using feh";
-            After = [ "graphical-session-pre.target" ];
-            PartOf = [ "graphical-session.target" ];
-          };
-
-          Service = {
-            Type = "oneshot";
-            ExecStart = "${pkgs.feh}/bin/feh ${flags} ${cfg.imageDirectory}";
-            IOSchedulingClass = "idle";
-          };
-
-          Install = {
-            WantedBy = [ "graphical-session.target" ];
-          };
+  config = mkIf cfg.enable (mkMerge ([
+    {
+      systemd.user.services.random-background = {
+        Unit = {
+          Description = "Set random desktop background using feh";
+          After = [ "graphical-session-pre.target" ];
+          PartOf = [ "graphical-session.target" ];
         };
-      }
-      (mkIf (cfg.interval != null) {
-        systemd.user.timers.random-background = {
-          Unit = {
-            Description = "Set random desktop background using feh";
-          };
 
-          Timer = {
-            OnUnitActiveSec = cfg.interval;
-          };
-
-          Install = {
-            WantedBy = [ "timers.target" ];
-          };
+        Service = {
+          Type = "oneshot";
+          ExecStart = "${pkgs.feh}/bin/feh ${flags} ${cfg.imageDirectory}";
+          IOSchedulingClass = "idle";
         };
-      })
-    ]));
+
+        Install = { WantedBy = [ "graphical-session.target" ]; };
+      };
+    }
+    (mkIf (cfg.interval != null) {
+      systemd.user.timers.random-background = {
+        Unit = { Description = "Set random desktop background using feh"; };
+
+        Timer = { OnUnitActiveSec = cfg.interval; };
+
+        Install = { WantedBy = [ "timers.target" ]; };
+      };
+    })
+  ]));
 }
diff --git a/modules/services/redshift.nix b/modules/services/redshift.nix
index 1452fcc95..86cbab205 100644
--- a/modules/services/redshift.nix
+++ b/modules/services/redshift.nix
@@ -8,9 +8,7 @@ let
 
   cfg = config.services.redshift;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options.services.redshift = {
@@ -113,7 +111,7 @@ in
 
     extraOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       example = [ "-v" "-m randr" ];
       description = ''
         Additional command-line arguments to pass to
@@ -123,17 +121,13 @@ in
   };
 
   config = mkIf cfg.enable {
-    assertions = [
-      {
-        assertion =
-          cfg.provider == "manual"
-          -> cfg.latitude != null && cfg.longitude != null;
-        message =
-          "Must provide services.redshift.latitude and"
-          + " services.redshift.latitude when"
-          + " services.redshift.provider is set to \"manual\".";
-      }
-    ];
+    assertions = [{
+      assertion = cfg.provider == "manual" -> cfg.latitude != null
+        && cfg.longitude != null;
+      message = "Must provide services.redshift.latitude and"
+        + " services.redshift.latitude when"
+        + " services.redshift.provider is set to \"manual\".";
+    }];
 
     systemd.user.services.redshift = {
       Unit = {
@@ -142,27 +136,25 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
-        ExecStart =
-          let
-           providerString =
-             if cfg.provider == "manual"
-             then "${cfg.latitude}:${cfg.longitude}"
-             else cfg.provider;
+        ExecStart = let
+          providerString = if cfg.provider == "manual" then
+            "${cfg.latitude}:${cfg.longitude}"
+          else
+            cfg.provider;
 
-            args = [
-              "-l ${providerString}"
-              "-t ${toString cfg.temperature.day}:${toString cfg.temperature.night}"
-              "-b ${toString cfg.brightness.day}:${toString cfg.brightness.night}"
-            ] ++ cfg.extraOptions;
+          args = [
+            "-l ${providerString}"
+            "-t ${toString cfg.temperature.day}:${
+              toString cfg.temperature.night
+            }"
+            "-b ${toString cfg.brightness.day}:${toString cfg.brightness.night}"
+          ] ++ cfg.extraOptions;
 
-            command = if cfg.tray then "redshift-gtk" else "redshift";
-          in
-            "${cfg.package}/bin/${command} ${concatStringsSep " " args}";
+          command = if cfg.tray then "redshift-gtk" else "redshift";
+        in "${cfg.package}/bin/${command} ${concatStringsSep " " args}";
         RestartSec = 3;
         Restart = "always";
       };
diff --git a/modules/services/rsibreak.nix b/modules/services/rsibreak.nix
index 242e03432..77eaa71f9 100644
--- a/modules/services/rsibreak.nix
+++ b/modules/services/rsibreak.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.rsibreak;
 
-in
-
-{
+in {
   options.services.rsibreak = {
 
     enable = mkEnableOption "rsibreak";
@@ -23,9 +21,7 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         Environment = "PATH=${config.home.profileDirectory}/bin";
diff --git a/modules/services/screen-locker.nix b/modules/services/screen-locker.nix
index e3da14069..2d0fc7588 100644
--- a/modules/services/screen-locker.nix
+++ b/modules/services/screen-locker.nix
@@ -29,7 +29,7 @@ in {
 
     xautolockExtraOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       description = ''
         Extra command-line arguments to pass to <command>xautolock</command>.
       '';
@@ -37,7 +37,7 @@ in {
 
     xssLockExtraOptions = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       description = ''
         Extra command-line arguments to pass to <command>xss-lock</command>.
       '';
@@ -53,9 +53,7 @@ in {
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         ExecStart = concatStringsSep " " ([
@@ -70,7 +68,9 @@ in {
     # xss-lock will run specified screen locker when the session is locked via loginctl
     # can't be started as a systemd service,
     # see https://bitbucket.org/raymonad/xss-lock/issues/13/allow-operation-as-systemd-user-unit
-    xsession.initExtra = "${pkgs.xss-lock}/bin/xss-lock ${concatStringsSep " " cfg.xssLockExtraOptions} -- ${cfg.lockCmd} &";
+    xsession.initExtra = "${pkgs.xss-lock}/bin/xss-lock ${
+        concatStringsSep " " cfg.xssLockExtraOptions
+      } -- ${cfg.lockCmd} &";
   };
 
 }
diff --git a/modules/services/spotifyd.nix b/modules/services/spotifyd.nix
index b9e09126c..bc231814e 100644
--- a/modules/services/spotifyd.nix
+++ b/modules/services/spotifyd.nix
@@ -7,18 +7,16 @@ let
   cfg = config.services.spotifyd;
 
   configFile = pkgs.writeText "spotifyd.conf" ''
-    ${generators.toINI {} cfg.settings}
+    ${generators.toINI { } cfg.settings}
   '';
 
-in
-
-{
+in {
   options.services.spotifyd = {
     enable = mkEnableOption "SpotifyD connect";
 
     settings = mkOption {
       type = types.attrsOf (types.attrsOf types.str);
-      default = {};
+      default = { };
       description = "Configuration for spotifyd";
       example = literalExample ''
         {
@@ -44,7 +42,8 @@ in
       Install.WantedBy = [ "default.target" ];
 
       Service = {
-        ExecStart = "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path ${configFile}";
+        ExecStart =
+          "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path ${configFile}";
         Restart = "always";
         RestartSec = 12;
       };
diff --git a/modules/services/stalonetray.nix b/modules/services/stalonetray.nix
index 934e78c99..cca604989 100644
--- a/modules/services/stalonetray.nix
+++ b/modules/services/stalonetray.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.stalonetray;
 
-in
-
-{
+in {
   options = {
     services.stalonetray = {
       enable = mkEnableOption "Stalonetray system tray";
@@ -22,19 +20,18 @@ in
       };
 
       config = mkOption {
-          type = with types;
-            attrsOf (nullOr (either str (either bool int)));
-          description = ''
-            Stalonetray configuration as a set of attributes.
-          '';
-          default = {};
-          example = {
-            geometry = "3x1-600+0";
-            decorations = null;
-            icon_size = 30;
-            sticky = true;
-            background = "#cccccc";
-          };
+        type = with types; attrsOf (nullOr (either str (either bool int)));
+        description = ''
+          Stalonetray configuration as a set of attributes.
+        '';
+        default = { };
+        example = {
+          geometry = "3x1-600+0";
+          decorations = null;
+          icon_size = 30;
+          sticky = true;
+          background = "#cccccc";
+        };
       };
 
       extraConfig = mkOption {
@@ -42,11 +39,11 @@ in
         description = "Additional configuration lines for stalonetrayrc.";
         default = "";
         example = ''
-            geometry 3x1-600+0
-            decorations none
-            icon_size 30
-            sticky true
-            background "#cccccc"
+          geometry 3x1-600+0
+          decorations none
+          icon_size 30
+          sticky true
+          background "#cccccc"
         '';
       };
     };
@@ -63,9 +60,7 @@ in
           PartOf = [ "graphical-session.target" ];
         };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+        Install = { WantedBy = [ "graphical-session.target" ]; };
 
         Service = {
           ExecStart = "${cfg.package}/bin/stalonetray";
@@ -74,17 +69,18 @@ in
       };
     }
 
-    (mkIf (cfg.config != {}) {
-      home.file.".stalonetrayrc".text =
-        let
-          valueToString = v:
-            if isBool v then (if v then "true" else "false")
-            else if (v==null) then "none"
-            else ''"${toString v}"'';
-        in
-          concatStrings (
-            mapAttrsToList (k: v: "${k} ${valueToString v}\n") cfg.config
-          );
+    (mkIf (cfg.config != { }) {
+      home.file.".stalonetrayrc".text = let
+        valueToString = v:
+          if isBool v then
+            (if v then "true" else "false")
+          else if (v == null) then
+            "none"
+          else
+            ''"${toString v}"'';
+      in concatStrings (mapAttrsToList (k: v: ''
+        ${k} ${valueToString v}
+      '') cfg.config);
     })
 
     (mkIf (cfg.extraConfig != "") {
diff --git a/modules/services/status-notifier-watcher.nix b/modules/services/status-notifier-watcher.nix
index 8a2ded872..3c3e54877 100644
--- a/modules/services/status-notifier-watcher.nix
+++ b/modules/services/status-notifier-watcher.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.status-notifier-watcher;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.pltanton ];
 
   options = {
@@ -17,30 +15,30 @@ in
 
       package = mkOption {
         default = pkgs.haskellPackages.status-notifier-item;
-        defaultText = literalExample "pkgs.haskellPackages.status-notifier-item";
+        defaultText =
+          literalExample "pkgs.haskellPackages.status-notifier-item";
         type = types.package;
         example = literalExample "pkgs.haskellPackages.status-notifier-item";
-        description = "The package to use for the status notifier watcher binary.";
+        description =
+          "The package to use for the status notifier watcher binary.";
       };
     };
   };
 
   config = mkIf cfg.enable {
     systemd.user.services.status-notifier-watcher = {
-        Unit = {
-          Description = "SNI watcher";
-          After = [ "graphical-session-pre.target" ];
-          PartOf = [ "graphical-session.target" ];
-          Before = [ "taffybar.service" ];
-        };
+      Unit = {
+        Description = "SNI watcher";
+        After = [ "graphical-session-pre.target" ];
+        PartOf = [ "graphical-session.target" ];
+        Before = [ "taffybar.service" ];
+      };
 
-        Service = {
-          ExecStart = "${cfg.package}/bin/status-notifier-watcher";
-        };
+      Service = { ExecStart = "${cfg.package}/bin/status-notifier-watcher"; };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" "taffybar.service" ];
-        };
+      Install = {
+        WantedBy = [ "graphical-session.target" "taffybar.service" ];
+      };
     };
   };
 }
diff --git a/modules/services/syncthing.nix b/modules/services/syncthing.nix
index 7fc556c52..2ef105401 100644
--- a/modules/services/syncthing.nix
+++ b/modules/services/syncthing.nix
@@ -22,21 +22,21 @@ with lib;
       systemd.user.services = {
         syncthing = {
           Unit = {
-            Description = "Syncthing - Open Source Continuous File Synchronization";
+            Description =
+              "Syncthing - Open Source Continuous File Synchronization";
             Documentation = "man:syncthing(1)";
             After = [ "network.target" ];
           };
 
           Service = {
-            ExecStart = "${pkgs.syncthing}/bin/syncthing -no-browser -no-restart -logflags=0";
+            ExecStart =
+              "${pkgs.syncthing}/bin/syncthing -no-browser -no-restart -logflags=0";
             Restart = "on-failure";
             SuccessExitStatus = [ 3 4 ];
             RestartForceExitStatus = [ 3 4 ];
           };
 
-          Install = {
-            WantedBy = [ "default.target" ];
-          };
+          Install = { WantedBy = [ "default.target" ]; };
         };
       };
     })
@@ -46,10 +46,12 @@ with lib;
         qsyncthingtray = {
           Unit = {
             Description = "QSyncthingTray";
-            After = [ "graphical-session-pre.target"
-                      "polybar.service"
-                      "taffybar.service"
-                      "stalonetray.service" ];
+            After = [
+              "graphical-session-pre.target"
+              "polybar.service"
+              "taffybar.service"
+              "stalonetray.service"
+            ];
             PartOf = [ "graphical-session.target" ];
           };
 
@@ -58,9 +60,7 @@ with lib;
             ExecStart = "${pkgs.qsyncthingtray}/bin/QSyncthingTray";
           };
 
-          Install = {
-            WantedBy = [ "graphical-session.target" ];
-          };
+          Install = { WantedBy = [ "graphical-session.target" ]; };
         };
       };
     })
diff --git a/modules/services/taffybar.nix b/modules/services/taffybar.nix
index 69531a19d..539275542 100644
--- a/modules/services/taffybar.nix
+++ b/modules/services/taffybar.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.taffybar;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -38,9 +36,7 @@ in
         Restart = "on-failure";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
 
     xsession.importedVariables = [ "GDK_PIXBUF_MODULE_FILE" ];
diff --git a/modules/services/tahoe-lafs.nix b/modules/services/tahoe-lafs.nix
index bb7be8d7d..742b779b2 100644
--- a/modules/services/tahoe-lafs.nix
+++ b/modules/services/tahoe-lafs.nix
@@ -6,20 +6,14 @@ with lib;
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
-    services.tahoe-lafs = {
-      enable = mkEnableOption "Tahoe-LAFS";
-    };
+    services.tahoe-lafs = { enable = mkEnableOption "Tahoe-LAFS"; };
   };
 
   config = mkIf config.services.tahoe-lafs.enable {
     systemd.user.services.tahoe-lafs = {
-        Unit = {
-          Description = "Tahoe-LAFS";
-        };
+      Unit = { Description = "Tahoe-LAFS"; };
 
-        Service = {
-          ExecStart = "${pkgs.tahoelafs}/bin/tahoe run -C %h/.tahoe";
-        };
+      Service = { ExecStart = "${pkgs.tahoelafs}/bin/tahoe run -C %h/.tahoe"; };
     };
   };
 }
diff --git a/modules/services/taskwarrior-sync.nix b/modules/services/taskwarrior-sync.nix
index 4179ac8aa..d16c0681b 100644
--- a/modules/services/taskwarrior-sync.nix
+++ b/modules/services/taskwarrior-sync.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.taskwarrior-sync;
 
-in
-
-{
+in {
   meta.maintainers = with maintainers; [ minijackson pacien ];
 
   options.services.taskwarrior-sync = {
@@ -32,9 +30,7 @@ in
 
   config = mkIf cfg.enable {
     systemd.user.services.taskwarrior-sync = {
-      Unit = {
-        Description = "Taskwarrior sync";
-      };
+      Unit = { Description = "Taskwarrior sync"; };
       Service = {
         CPUSchedulingPolicy = "idle";
         IOSchedulingClass = "idle";
@@ -43,16 +39,12 @@ in
     };
 
     systemd.user.timers.taskwarrior-sync = {
-      Unit = {
-        Description = "Taskwarrior periodic sync";
-      };
+      Unit = { Description = "Taskwarrior periodic sync"; };
       Timer = {
         Unit = "taskwarrior-sync.service";
         OnCalendar = cfg.frequency;
       };
-      Install = {
-        WantedBy = [ "timers.target" ];
-      };
+      Install = { WantedBy = [ "timers.target" ]; };
     };
   };
 }
diff --git a/modules/services/udiskie.nix b/modules/services/udiskie.nix
index c058a23de..2444d68ff 100644
--- a/modules/services/udiskie.nix
+++ b/modules/services/udiskie.nix
@@ -6,19 +6,17 @@ let
 
   cfg = config.services.udiskie;
 
-  commandArgs =
-    concatStringsSep " " (
-      map (opt: "-" + opt) [
-        (if cfg.automount then "a" else "A")
-        (if cfg.notify then "n" else "N")
-        ({ always = "t"; auto = "s"; never = "T"; }.${cfg.tray})
-      ]
-      ++ optional config.xsession.preferStatusNotifierItems "--appindicator"
-    );
+  commandArgs = concatStringsSep " " (map (opt: "-" + opt) [
+    (if cfg.automount then "a" else "A")
+    (if cfg.notify then "n" else "N")
+    ({
+      always = "t";
+      auto = "s";
+      never = "T";
+    }.${cfg.tray})
+  ] ++ optional config.xsession.preferStatusNotifierItems "--appindicator");
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   imports = [
@@ -77,19 +75,17 @@ in
 
   config = mkIf config.services.udiskie.enable {
     systemd.user.services.udiskie = {
-        Unit = {
-          Description = "udiskie mount daemon";
-          After = [ "graphical-session-pre.target" ];
-          PartOf = [ "graphical-session.target" ];
-        };
+      Unit = {
+        Description = "udiskie mount daemon";
+        After = [ "graphical-session-pre.target" ];
+        PartOf = [ "graphical-session.target" ];
+      };
 
-        Service = {
-          ExecStart = "${pkgs.udiskie}/bin/udiskie -2 ${commandArgs}";
-        };
+      Service = {
+        ExecStart = "${pkgs.udiskie}/bin/udiskie -2 ${commandArgs}";
+      };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/services/unclutter.nix b/modules/services/unclutter.nix
index 6b5ac866e..5e7606395 100644
--- a/modules/services/unclutter.nix
+++ b/modules/services/unclutter.nix
@@ -55,9 +55,7 @@ in {
         Restart = "always";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/services/unison.nix b/modules/services/unison.nix
index fc998e39a..93c59e8fd 100644
--- a/modules/services/unison.nix
+++ b/modules/services/unison.nix
@@ -7,10 +7,8 @@ let
   cfg = config.services.unison;
 
   pairOf = t:
-    let
-      list = types.addCheck (types.listOf t) (l: length l == 2);
-    in
-      list // { description = list.description + " of length 2"; };
+    let list = types.addCheck (types.listOf t) (l: length l == 2);
+    in list // { description = list.description + " of length 2"; };
 
   pairOptions = {
     options = {
@@ -64,17 +62,14 @@ let
 
   serialiseArg = key: val: "-${key}=${escapeShellArg val}";
 
-  serialiseArgs = args:
-    concatStringsSep " " (mapAttrsToList serialiseArg args);
+  serialiseArgs = args: concatStringsSep " " (mapAttrsToList serialiseArg args);
 
   makeDefs = gen:
     mapAttrs'
-      (name: pairCfg: nameValuePair "unison-pair-${name}" (gen name pairCfg))
-      cfg.pairs;
+    (name: pairCfg: nameValuePair "unison-pair-${name}" (gen name pairCfg))
+    cfg.pairs;
 
-in
-
-{
+in {
   meta.maintainers = with maintainers; [ pacien ];
 
   options.services.unison = {
@@ -120,9 +115,7 @@ in
         '';
       };
 
-      Install = {
-        WantedBy = [ "default.target" ];
-      };
+      Install = { WantedBy = [ "default.target" ]; };
     });
   };
 }
diff --git a/modules/services/window-managers/awesome.nix b/modules/services/window-managers/awesome.nix
index fe914864e..d2e2903f8 100644
--- a/modules/services/window-managers/awesome.nix
+++ b/modules/services/window-managers/awesome.nix
@@ -9,12 +9,9 @@ let
   getLuaPath = lib: dir: "${lib}/${dir}/lua/${pkgs.luaPackages.lua.luaversion}";
   makeSearchPath = lib.concatMapStrings (path:
     " --search ${getLuaPath path "share"}"
-    + " --search ${getLuaPath path "lib"}"
-  );
+    + " --search ${getLuaPath path "lib"}");
 
-in
-
-{
+in {
   options = {
     xsession.windowManager.awesome = {
       enable = mkEnableOption "Awesome window manager.";
@@ -27,31 +24,29 @@ in
       };
 
       luaModules = mkOption {
-          default = [];
-          type = types.listOf types.package;
-          description = ''
-            List of lua packages available for being
-            used in the Awesome configuration.
-          '';
-          example = literalExample "[ luaPackages.oocairo ]";
+        default = [ ];
+        type = types.listOf types.package;
+        description = ''
+          List of lua packages available for being
+          used in the Awesome configuration.
+        '';
+        example = literalExample "[ luaPackages.oocairo ]";
       };
 
       noArgb = mkOption {
-          default = false;
-          type = types.bool;
-          description = ''
-            Disable client transparency support, which can be greatly
-            detrimental to performance in some setups
-          '';
+        default = false;
+        type = types.bool;
+        description = ''
+          Disable client transparency support, which can be greatly
+          detrimental to performance in some setups
+        '';
       };
     };
   };
 
   config = mkIf cfg.enable {
     home.packages = [ awesome ];
-    xsession.windowManager.command = 
-      "${awesome}/bin/awesome "
-      + optionalString cfg.noArgb "--no-argb "
-      + makeSearchPath cfg.luaModules;
+    xsession.windowManager.command = "${awesome}/bin/awesome "
+      + optionalString cfg.noArgb "--no-argb " + makeSearchPath cfg.luaModules;
   };
 }
diff --git a/modules/services/window-managers/bspwm/default.nix b/modules/services/window-managers/bspwm/default.nix
index e9fa064a8..9ea5adbc8 100644
--- a/modules/services/window-managers/bspwm/default.nix
+++ b/modules/services/window-managers/bspwm/default.nix
@@ -13,59 +13,62 @@ let
   formatConfig = n: v:
     let
       formatList = x:
-        if isList x
-        then throw "can not convert 2-dimensional lists to bspwm format"
-        else formatValue x;
+        if isList x then
+          throw "can not convert 2-dimensional lists to bspwm format"
+        else
+          formatValue x;
 
       formatValue = v:
-        if isBool v then (if v then "true" else "false")
-        else if isList v then concatMapStringsSep ", " formatList v
-        else if isString v then "${lib.strings.escapeShellArg v}"
-        else toString v;
-    in
-      "bspc config ${n} ${formatValue v}";
+        if isBool v then
+          (if v then "true" else "false")
+        else if isList v then
+          concatMapStringsSep ", " formatList v
+        else if isString v then
+          "${lib.strings.escapeShellArg v}"
+        else
+          toString v;
+    in "bspc config ${n} ${formatValue v}";
 
   formatMonitors = n: v: "bspc monitor ${n} -d ${concatStringsSep " " v}";
 
   formatRules = target: directiveOptions:
     let
       formatDirective = n: v:
-        if isBool v then (if v then "${camelToSnake n}=on" else "${camelToSnake n}=off")
-        else if (n == "desktop" || n == "node") then "${camelToSnake n}='${v}'"
-        else "${camelToSnake n}=${lib.strings.escapeShellArg v}";
+        if isBool v then
+          (if v then "${camelToSnake n}=on" else "${camelToSnake n}=off")
+        else if (n == "desktop" || n == "node") then
+          "${camelToSnake n}='${v}'"
+        else
+          "${camelToSnake n}=${lib.strings.escapeShellArg v}";
 
-      directives = filterAttrs (n: v: v != null && !(lib.strings.hasPrefix "_" n)) directiveOptions;
-      directivesStr = builtins.concatStringsSep " " (mapAttrsToList formatDirective directives);
-    in
-      "bspc rule -a ${target} ${directivesStr}";
+      directives =
+        filterAttrs (n: v: v != null && !(lib.strings.hasPrefix "_" n))
+        directiveOptions;
+      directivesStr = builtins.concatStringsSep " "
+        (mapAttrsToList formatDirective directives);
+    in "bspc rule -a ${target} ${directivesStr}";
 
   formatStartupPrograms = map (s: "${s} &");
 
-in
-
-{
-  options = import ./options.nix { inherit pkgs; inherit lib; };
+in {
+  options = import ./options.nix {
+    inherit pkgs;
+    inherit lib;
+  };
 
   config = mkIf cfg.enable {
     home.packages = [ bspwm ];
-    xsession.windowManager.command =
-      let
-        configFile = pkgs.writeShellScript "bspwmrc" (
-          concatStringsSep "\n" (
-            (mapAttrsToList formatMonitors cfg.monitors)
-            ++ (mapAttrsToList formatConfig cfg.settings)
-            ++ (mapAttrsToList formatRules cfg.rules)
-            ++ [ ''
-              # java gui fixes
-              export _JAVA_AWT_WM_NONREPARENTING=1
-              bspc rule -a sun-awt-X11-XDialogPeer state=floating
-            '' ]
-            ++ [ cfg.extraConfig ]
-            ++ (formatStartupPrograms cfg.startupPrograms)
-          )
-        );
-        configCmdOpt = optionalString (cfg.settings != null) "-c ${configFile}";
-      in
-        "${cfg.package}/bin/bspwm ${configCmdOpt}";
+    xsession.windowManager.command = let
+      configFile = pkgs.writeShellScript "bspwmrc" (concatStringsSep "\n"
+        ((mapAttrsToList formatMonitors cfg.monitors)
+          ++ (mapAttrsToList formatConfig cfg.settings)
+          ++ (mapAttrsToList formatRules cfg.rules) ++ [''
+            # java gui fixes
+            export _JAVA_AWT_WM_NONREPARENTING=1
+            bspc rule -a sun-awt-X11-XDialogPeer state=floating
+          ''] ++ [ cfg.extraConfig ]
+          ++ (formatStartupPrograms cfg.startupPrograms)));
+      configCmdOpt = optionalString (cfg.settings != null) "-c ${configFile}";
+    in "${cfg.package}/bin/bspwm ${configCmdOpt}";
   };
 }
diff --git a/modules/services/window-managers/bspwm/options.nix b/modules/services/window-managers/bspwm/options.nix
index 9d1955aa5..58a58a1a7 100644
--- a/modules/services/window-managers/bspwm/options.nix
+++ b/modules/services/window-managers/bspwm/options.nix
@@ -28,7 +28,8 @@ let
       };
 
       state = mkOption {
-        type = types.nullOr (types.enum [ "tiled" "pseudo_tiled" "floating" "fullscreen" ]);
+        type = types.nullOr
+          (types.enum [ "tiled" "pseudo_tiled" "floating" "fullscreen" ]);
         default = null;
         description = "The state in which a new window should spawn.";
         example = "floating";
@@ -61,7 +62,7 @@ let
       hidden = mkOption {
         type = types.nullOr types.bool;
         default = null;
-        description = ''Whether the node should occupy any space.'';
+        description = "Whether the node should occupy any space.";
         example = true;
       };
 
@@ -141,9 +142,7 @@ let
     };
   };
 
-in
-
-{
+in {
   xsession.windowManager.bspwm = {
     enable = mkEnableOption "bspwm window manager.";
 
@@ -156,11 +155,10 @@ in
     };
 
     settings = mkOption {
-      type = with types; let
-          primitive = either bool (either int (either float str));
-        in
-          attrsOf (either primitive (listOf primitive));
-      default = {};
+      type = with types;
+        let primitive = either bool (either int (either float str));
+        in attrsOf (either primitive (listOf primitive));
+      default = { };
       description = "bspwm configuration";
       example = {
         "border_width" = 2;
@@ -180,16 +178,14 @@ in
 
     monitors = mkOption {
       type = types.attrsOf (types.listOf types.str);
-      default = {};
+      default = { };
       description = "bspc monitor configurations";
-      example = {
-        "HDMI-0" = [ "web" "terminal" "III" "IV" ];
-      };
+      example = { "HDMI-0" = [ "web" "terminal" "III" "IV" ]; };
     };
 
     rules = mkOption {
       type = types.attrsOf rule;
-      default = {};
+      default = { };
       description = "bspc rules";
       example = literalExample ''
         {
@@ -210,12 +206,9 @@ in
 
     startupPrograms = mkOption {
       type = types.listOf types.str;
-      default = [];
+      default = [ ];
       description = "Programs to be executed during startup.";
-      example = [
-        "numlockx on"
-        "tilda"
-      ];
+      example = [ "numlockx on" "tilda" ];
     };
   };
 }
diff --git a/modules/services/window-managers/xmonad.nix b/modules/services/window-managers/xmonad.nix
index 6b3426b96..7be03874a 100644
--- a/modules/services/window-managers/xmonad.nix
+++ b/modules/services/window-managers/xmonad.nix
@@ -9,15 +9,13 @@ let
   xmonad = pkgs.xmonad-with-packages.override {
     ghcWithPackages = cfg.haskellPackages.ghcWithPackages;
     packages = self:
-      cfg.extraPackages self
-      ++ optionals cfg.enableContribAndExtras [
-        self.xmonad-contrib self.xmonad-extras
+      cfg.extraPackages self ++ optionals cfg.enableContribAndExtras [
+        self.xmonad-contrib
+        self.xmonad-extras
       ];
   };
 
-in
-
-{
+in {
   options = {
     xsession.windowManager.xmonad = {
       enable = mkEnableOption "xmonad window manager";
@@ -35,7 +33,7 @@ in
       };
 
       extraPackages = mkOption {
-        default = self: [];
+        default = self: [ ];
         defaultText = "self: []";
         example = literalExample ''
           haskellPackages: [
diff --git a/modules/services/xcape.nix b/modules/services/xcape.nix
index 26115a930..f4f77caa3 100644
--- a/modules/services/xcape.nix
+++ b/modules/services/xcape.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.xcape;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.nickhu ];
 
   options = {
@@ -27,8 +25,11 @@ in
 
       mapExpression = mkOption {
         type = types.attrsOf types.str;
-        default = {};
-        example = { Shift_L = "Escape"; Control_L = "Control_L|O"; };
+        default = { };
+        example = {
+          Shift_L = "Escape";
+          Control_L = "Control_L|O";
+        };
         description = ''
           The value has the grammar <literal>Key[|OtherKey]</literal>.
           </para>
@@ -63,14 +64,13 @@ in
         Type = "forking";
         ExecStart = "${pkgs.xcape}/bin/xcape"
           + optionalString (cfg.timeout != null) " -t ${toString cfg.timeout}"
-          + optionalString (cfg.mapExpression != {})
-            " -e '${builtins.concatStringsSep ";"
-              (attrsets.mapAttrsToList (n: v: "${n}=${v}") cfg.mapExpression)}'";
+          + optionalString (cfg.mapExpression != { }) " -e '${
+             builtins.concatStringsSep ";"
+             (attrsets.mapAttrsToList (n: v: "${n}=${v}") cfg.mapExpression)
+           }'";
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/services/xembed-sni-proxy.nix b/modules/services/xembed-sni-proxy.nix
index d9e5ae783..ff63d108b 100644
--- a/modules/services/xembed-sni-proxy.nix
+++ b/modules/services/xembed-sni-proxy.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.xembed-sni-proxy;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -35,9 +33,7 @@ in
         PartOf = [ "graphical-session.target" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
 
       Service = {
         Environment = "PATH=${config.home.profileDirectory}/bin";
diff --git a/modules/services/xscreensaver.nix b/modules/services/xscreensaver.nix
index 4001c294e..73a365aa7 100644
--- a/modules/services/xscreensaver.nix
+++ b/modules/services/xscreensaver.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.services.xscreensaver;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -17,7 +15,7 @@ in
 
       settings = mkOption {
         type = with types; attrsOf (either bool (either int str));
-        default = {};
+        default = { };
         example = {
           mode = "blank";
           lock = false;
@@ -38,19 +36,17 @@ in
       mapAttrs' (n: nameValuePair "xscreensaver.${n}") cfg.settings;
 
     systemd.user.services.xscreensaver = {
-        Unit = {
-          Description = "XScreenSaver";
-          After = [ "graphical-session-pre.target" ];
-          PartOf = [ "graphical-session.target" ];
-        };
+      Unit = {
+        Description = "XScreenSaver";
+        After = [ "graphical-session-pre.target" ];
+        PartOf = [ "graphical-session.target" ];
+      };
 
-        Service = {
-          ExecStart = "${pkgs.xscreensaver}/bin/xscreensaver -no-splash";
-        };
+      Service = {
+        ExecStart = "${pkgs.xscreensaver}/bin/xscreensaver -no-splash";
+      };
 
-        Install = {
-          WantedBy = [ "graphical-session.target" ];
-        };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/services/xsuspender.nix b/modules/services/xsuspender.nix
index 22a5ca536..2eb40f5dd 100644
--- a/modules/services/xsuspender.nix
+++ b/modules/services/xsuspender.nix
@@ -61,7 +61,7 @@ let
         '';
         type = types.nullOr types.str;
         default = null;
-        example = ''echo resuming ...'';
+        example = "echo resuming ...";
       };
 
       sendSignals = mkOption {
@@ -74,7 +74,8 @@ let
       };
 
       suspendSubtreePattern = mkOption {
-        description = "Also suspend descendant processes that match this regex.";
+        description =
+          "Also suspend descendant processes that match this regex.";
         type = types.nullOr types.str;
         default = null;
       };
@@ -105,9 +106,7 @@ let
     };
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.offline ];
 
   options = {
@@ -117,13 +116,13 @@ in
       defaults = mkOption {
         description = "XSuspender defaults.";
         type = xsuspenderOptions;
-        default = {};
+        default = { };
       };
 
       rules = mkOption {
         description = "Attribute set of XSuspender rules.";
         type = types.attrsOf xsuspenderOptions;
-        default = {};
+        default = { };
         example = {
           Chromium = {
             suspendDelay = 10;
@@ -147,9 +146,9 @@ in
   };
 
   config = mkIf cfg.enable {
-    services.xsuspender.iniContent =
-      let
-        mkSection = values: filterAttrs (_: v: v != null) {
+    services.xsuspender.iniContent = let
+      mkSection = values:
+        filterAttrs (_: v: v != null) {
           match_wm_class_contains = values.matchWmClassContains;
           match_wm_class_group_contains = values.matchWmClassGroupContains;
           match_wm_name_contains = values.matchWmNameContains;
@@ -164,25 +163,22 @@ in
           auto_suspend_on_battery = values.autoSuspendOnBattery;
           downclock_on_battery = values.downclockOnBattery;
         };
-      in
-        {
-          Default = mkSection cfg.defaults;
-        }
-        // mapAttrs (_: mkSection) cfg.rules;
+    in {
+      Default = mkSection cfg.defaults;
+    } // mapAttrs (_: mkSection) cfg.rules;
 
     # To make the xsuspender tool available.
     home.packages = [ pkgs.xsuspender ];
 
-    xdg.configFile."xsuspender.conf".text = generators.toINI {} cfg.iniContent;
+    xdg.configFile."xsuspender.conf".text = generators.toINI { } cfg.iniContent;
 
     systemd.user.services.xsuspender = {
       Unit = {
         Description = "XSuspender";
         After = [ "graphical-session-pre.target" ];
         PartOf = [ "graphical-session.target" ];
-        X-Restart-Triggers = [
-          "${config.xdg.configFile."xsuspender.conf".source}"
-        ];
+        X-Restart-Triggers =
+          [ "${config.xdg.configFile."xsuspender.conf".source}" ];
       };
 
       Service = {
@@ -190,9 +186,7 @@ in
         Environment = mkIf cfg.debug [ "G_MESSAGE_DEBUG=all" ];
       };
 
-      Install = {
-        WantedBy = [ "graphical-session.target" ];
-      };
+      Install = { WantedBy = [ "graphical-session.target" ]; };
     };
   };
 }
diff --git a/modules/xcursor.nix b/modules/xcursor.nix
index 171586028..63ceef387 100644
--- a/modules/xcursor.nix
+++ b/modules/xcursor.nix
@@ -36,9 +36,7 @@ let
     };
   };
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.league ];
 
   options = {
@@ -58,15 +56,17 @@ in
 
   config = mkIf (cfg != null) {
 
-    home.packages = [cfg.package];
+    home.packages = [ cfg.package ];
 
     xsession.initExtra = ''
-      ${pkgs.xorg.xsetroot}/bin/xsetroot -xcf ${cfg.package}/share/icons/${cfg.name}/cursors/${cfg.defaultCursor} ${toString cfg.size}
+      ${pkgs.xorg.xsetroot}/bin/xsetroot -xcf ${cfg.package}/share/icons/${cfg.name}/cursors/${cfg.defaultCursor} ${
+        toString cfg.size
+      }
     '';
 
     xresources.properties = {
       "Xcursor.theme" = cfg.name;
-      "Xcursor.size"  = cfg.size;
+      "Xcursor.size" = cfg.size;
     };
 
     gtk.gtk2.extraConfig = ''
diff --git a/modules/xresources.nix b/modules/xresources.nix
index 1e5ec8541..b74d671be 100644
--- a/modules/xresources.nix
+++ b/modules/xresources.nix
@@ -9,20 +9,21 @@ let
   formatLine = n: v:
     let
       formatList = x:
-        if isList x
-        then throw "can not convert 2-dimensional lists to Xresources format"
-        else formatValue x;
+        if isList x then
+          throw "can not convert 2-dimensional lists to Xresources format"
+        else
+          formatValue x;
 
       formatValue = v:
-        if isBool v then (if v then "true" else "false")
-        else if isList v then concatMapStringsSep ", " formatList v
-        else toString v;
-    in
-      "${n}: ${formatValue v}";
+        if isBool v then
+          (if v then "true" else "false")
+        else if isList v then
+          concatMapStringsSep ", " formatList v
+        else
+          toString v;
+    in "${n}: ${formatValue v}";
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -72,11 +73,10 @@ in
 
   config = mkIf (cfg.properties != null || cfg.extraConfig != "") {
     home.file.".Xresources" = {
-      text =
-        concatStringsSep "\n" ([]
-          ++ optional (cfg.extraConfig != "") cfg.extraConfig
-          ++ optionals (cfg.properties != null) (mapAttrsToList formatLine cfg.properties)
-        ) + "\n";
+      text = concatStringsSep "\n" ([ ]
+        ++ optional (cfg.extraConfig != "") cfg.extraConfig
+        ++ optionals (cfg.properties != null)
+        (mapAttrsToList formatLine cfg.properties)) + "\n";
       onChange = ''
         if [[ -v DISPLAY ]] ; then
           $DRY_RUN_CMD ${pkgs.xorg.xrdb}/bin/xrdb -merge $HOME/.Xresources
diff --git a/modules/xsession.nix b/modules/xsession.nix
index e1cf9942e..d32c28491 100644
--- a/modules/xsession.nix
+++ b/modules/xsession.nix
@@ -6,9 +6,7 @@ let
 
   cfg = config.xsession;
 
-in
-
-{
+in {
   meta.maintainers = [ maintainers.rycee ];
 
   options = {
@@ -89,30 +87,25 @@ in
 
     systemd.user = {
       services = mkIf (config.home.keyboard != null) {
-        setxkbmap =  {
+        setxkbmap = {
           Unit = {
             Description = "Set up keyboard in X";
             After = [ "graphical-session-pre.target" ];
             PartOf = [ "graphical-session.target" ];
           };
 
-          Install = {
-            WantedBy = [ "graphical-session.target" ];
-          };
+          Install = { WantedBy = [ "graphical-session.target" ]; };
 
           Service = {
             Type = "oneshot";
             RemainAfterExit = true;
-            ExecStart =
-              with config.home.keyboard;
+            ExecStart = with config.home.keyboard;
               let
-                args =
-                  optional (layout != null) "-layout '${layout}'"
+                args = optional (layout != null) "-layout '${layout}'"
                   ++ optional (variant != null) "-variant '${variant}'"
                   ++ optional (model != null) "-model '${model}'"
                   ++ map (v: "-option '${v}'") options;
-              in
-                "${pkgs.xorg.setxkbmap}/bin/setxkbmap ${toString args}";
+              in "${pkgs.xorg.setxkbmap}/bin/setxkbmap ${toString args}";
           };
         };
       };
@@ -128,25 +121,24 @@ in
     };
 
     home.file.".xprofile".text = ''
-        . "${config.home.profileDirectory}/etc/profile.d/hm-session-vars.sh"
+      . "${config.home.profileDirectory}/etc/profile.d/hm-session-vars.sh"
 
-        if [ -e "$HOME/.profile" ]; then
-          . "$HOME/.profile"
-        fi
+      if [ -e "$HOME/.profile" ]; then
+        . "$HOME/.profile"
+      fi
 
-        # If there are any running services from a previous session.
-        # Need to run this in xprofile because the NixOS xsession
-        # script starts up graphical-session.target.
-        systemctl --user stop graphical-session.target graphical-session-pre.target
+      # If there are any running services from a previous session.
+      # Need to run this in xprofile because the NixOS xsession
+      # script starts up graphical-session.target.
+      systemctl --user stop graphical-session.target graphical-session-pre.target
 
-        ${optionalString (cfg.importedVariables != []) (
-          "systemctl --user import-environment "
-            + toString (unique cfg.importedVariables)
-        )}
+      ${optionalString (cfg.importedVariables != [ ])
+      ("systemctl --user import-environment "
+        + toString (unique cfg.importedVariables))}
 
-        ${cfg.profileExtra}
+      ${cfg.profileExtra}
 
-        export HM_XPROFILE_SOURCED=1
+      export HM_XPROFILE_SOURCED=1
     '';
 
     home.file.${cfg.scriptPath} = {
diff --git a/nixos/default.nix b/nixos/default.nix
index 6b7d559a6..f4e417bda 100644
--- a/nixos/default.nix
+++ b/nixos/default.nix
@@ -10,8 +10,8 @@ let
 
   hmModule = types.submoduleWith {
     specialArgs = { lib = extendedLib; };
-    modules = [(
-      {name, ...}: {
+    modules = [
+      ({ name, ... }: {
         imports = import ../modules/modules.nix {
           inherit pkgs;
           lib = extendedLib;
@@ -23,27 +23,21 @@ let
 
           # The per-user directory inside /etc/profiles is not known by
           # fontconfig by default.
-          fonts.fontconfig.enable =
-            cfg.useUserPackages && config.fonts.fontconfig.enable;
+          fonts.fontconfig.enable = cfg.useUserPackages
+            && config.fonts.fontconfig.enable;
 
           home.username = config.users.users.${name}.name;
           home.homeDirectory = config.users.users.${name}.home;
         };
-      }
-    )];
+      })
+    ];
   };
 
-  serviceEnvironment =
-    optionalAttrs (cfg.backupFileExtension != null) {
-      HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
-    }
-    // optionalAttrs cfg.verbose {
-      VERBOSE = "1";
-    };
+  serviceEnvironment = optionalAttrs (cfg.backupFileExtension != null) {
+    HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
+  } // optionalAttrs cfg.verbose { VERBOSE = "1"; };
 
-in
-
-{
+in {
   options = {
     home-manager = {
       useUserPackages = mkEnableOption ''
@@ -65,7 +59,7 @@ in
 
       users = mkOption {
         type = types.attrsOf hmModule;
-        default = {};
+        default = { };
         description = ''
           Per-user Home Manager configuration.
         '';
@@ -73,57 +67,44 @@ in
     };
   };
 
-  config = mkIf (cfg.users != {}) {
-    warnings =
-      flatten (flip mapAttrsToList cfg.users (user: config:
-        flip map config.warnings (warning:
-          "${user} profile: ${warning}"
-        )
-      ));
+  config = mkIf (cfg.users != { }) {
+    warnings = flatten (flip mapAttrsToList cfg.users (user: config:
+      flip map config.warnings (warning: "${user} profile: ${warning}")));
 
-    assertions =
-      flatten (flip mapAttrsToList cfg.users (user: config:
-        flip map config.assertions (assertion:
-          {
-            inherit (assertion) assertion;
-            message = "${user} profile: ${assertion.message}";
-          }
-        )
-      ));
+    assertions = flatten (flip mapAttrsToList cfg.users (user: config:
+      flip map config.assertions (assertion: {
+        inherit (assertion) assertion;
+        message = "${user} profile: ${assertion.message}";
+      })));
 
-    users.users = mkIf cfg.useUserPackages (
-      mapAttrs (username: usercfg: {
-        packages = usercfg.home.packages;
-      }) cfg.users
-    );
+    users.users = mkIf cfg.useUserPackages
+      (mapAttrs (username: usercfg: { packages = usercfg.home.packages; })
+        cfg.users);
 
     systemd.services = mapAttrs' (_: usercfg:
-      let
-        username = usercfg.home.username;
-      in
-        nameValuePair ("home-manager-${utils.escapeSystemdPath username}") {
-          description = "Home Manager environment for ${username}";
-          wantedBy = [ "multi-user.target" ];
-          wants = [ "nix-daemon.socket" ];
-          after = [ "nix-daemon.socket" ];
+      let username = usercfg.home.username;
+      in nameValuePair ("home-manager-${utils.escapeSystemdPath username}") {
+        description = "Home Manager environment for ${username}";
+        wantedBy = [ "multi-user.target" ];
+        wants = [ "nix-daemon.socket" ];
+        after = [ "nix-daemon.socket" ];
 
-          environment = serviceEnvironment;
+        environment = serviceEnvironment;
 
-          serviceConfig = {
-            User = usercfg.home.username;
-            Type = "oneshot";
-            RemainAfterExit = "yes";
-            SyslogIdentifier = "hm-activate-${username}";
+        serviceConfig = {
+          User = usercfg.home.username;
+          Type = "oneshot";
+          RemainAfterExit = "yes";
+          SyslogIdentifier = "hm-activate-${username}";
 
-            # The activation script is run by a login shell to make sure
-            # that the user is given a sane Nix environment.
-            ExecStart = pkgs.writeScript "activate-${username}" ''
-              #! ${pkgs.runtimeShell} -el
-              echo Activating home-manager configuration for ${username}
-              exec ${usercfg.home.activationPackage}/activate
-            '';
-          };
-        }
-    ) cfg.users;
+          # The activation script is run by a login shell to make sure
+          # that the user is given a sane Nix environment.
+          ExecStart = pkgs.writeScript "activate-${username}" ''
+            #! ${pkgs.runtimeShell} -el
+            echo Activating home-manager configuration for ${username}
+            exec ${usercfg.home.activationPackage}/activate
+          '';
+        };
+      }) cfg.users;
   };
 }
diff --git a/overlay.nix b/overlay.nix
index fa779fe03..35136cc85 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -1,5 +1,3 @@
 self: super: {
-  home-manager = super.callPackage ./home-manager {
-    path = toString ./.;
-  };
+  home-manager = super.callPackage ./home-manager { path = toString ./.; };
 }
diff --git a/tests/lib/types/dag-merge.nix b/tests/lib/types/dag-merge.nix
index 058530ccb..138a0b64f 100644
--- a/tests/lib/types/dag-merge.nix
+++ b/tests/lib/types/dag-merge.nix
@@ -6,25 +6,19 @@ let
 
   dag = config.lib.dag;
 
-  result =
-    let
-      sorted = dag.topoSort config.tested.dag;
-      data = map (e: "${e.name}:${e.data}") sorted.result;
-    in
-      concatStringsSep "\n" data + "\n";
+  result = let
+    sorted = dag.topoSort config.tested.dag;
+    data = map (e: "${e.name}:${e.data}") sorted.result;
+  in concatStringsSep "\n" data + "\n";
 
-in
-
-{
-  options.tested.dag = mkOption {
-    type = hm.types.dagOf types.str;
-  };
+in {
+  options.tested.dag = mkOption { type = hm.types.dagOf types.str; };
 
   config = {
     tested = mkMerge [
       { dag.after = "after"; }
-      { dag.before = dag.entryBefore ["after"] "before"; }
-      { dag.between = dag.entryBetween ["after"] ["before"] "between"; }
+      { dag.before = dag.entryBefore [ "after" ] "before"; }
+      { dag.between = dag.entryBetween [ "after" ] [ "before" ] "between"; }
     ];
 
     home.file."result.txt".text = result;
diff --git a/tests/lib/types/list-or-dag-merge.nix b/tests/lib/types/list-or-dag-merge.nix
index ac592ef35..08216140e 100644
--- a/tests/lib/types/list-or-dag-merge.nix
+++ b/tests/lib/types/list-or-dag-merge.nix
@@ -6,27 +6,21 @@ let
 
   dag = config.lib.dag;
 
-  result =
-    let
-      sorted = dag.topoSort config.tested.dag;
-      data = map (e: "${e.name}:${e.data}") sorted.result;
-    in
-      concatStringsSep "\n" data + "\n";
+  result = let
+    sorted = dag.topoSort config.tested.dag;
+    data = map (e: "${e.name}:${e.data}") sorted.result;
+  in concatStringsSep "\n" data + "\n";
 
-in
-
-{
-  options.tested.dag = mkOption {
-    type = hm.types.listOrDagOf types.str;
-  };
+in {
+  options.tested.dag = mkOption { type = hm.types.listOrDagOf types.str; };
 
   config = {
     tested = mkMerge [
       { dag = [ "k" "l" ]; }
       { dag = [ "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" ]; }
       { dag.after = "after"; }
-      { dag.before = dag.entryBefore ["after"] "before"; }
-      { dag.between = dag.entryBetween ["after"] ["before"] "between"; }
+      { dag.before = dag.entryBefore [ "after" ] "before"; }
+      { dag.between = dag.entryBetween [ "after" ] [ "before" ] "between"; }
     ];
 
     home.file."result.txt".text = result;
diff --git a/tests/modules/files/hidden-source.nix b/tests/modules/files/hidden-source.nix
index a8635398f..8169fedcd 100644
--- a/tests/modules/files/hidden-source.nix
+++ b/tests/modules/files/hidden-source.nix
@@ -9,7 +9,10 @@ with lib;
     nmt.script = ''
       assertFileExists home-files/.hidden;
       assertFileContent home-files/.hidden ${
-        builtins.path { path = ./.hidden; name = "expected"; }
+        builtins.path {
+          path = ./.hidden;
+          name = "expected";
+        }
       }
     '';
   };
diff --git a/tests/modules/misc/pam/default.nix b/tests/modules/misc/pam/default.nix
index 8a64f831c..81c435e76 100644
--- a/tests/modules/misc/pam/default.nix
+++ b/tests/modules/misc/pam/default.nix
@@ -1,3 +1 @@
-{
-  pam-session-variables = ./session-variables.nix;
-}
+{ pam-session-variables = ./session-variables.nix; }
diff --git a/tests/modules/misc/xdg/default.nix b/tests/modules/misc/xdg/default.nix
index 5772becd7..e5d015759 100644
--- a/tests/modules/misc/xdg/default.nix
+++ b/tests/modules/misc/xdg/default.nix
@@ -1,3 +1 @@
-{
-  xdg-mime-apps-basics = ./mime-apps-basics.nix;
-}
+{ xdg-mime-apps-basics = ./mime-apps-basics.nix; }
diff --git a/tests/modules/misc/xdg/mime-apps-basics.nix b/tests/modules/misc/xdg/mime-apps-basics.nix
index 2c3207106..e181e8206 100644
--- a/tests/modules/misc/xdg/mime-apps-basics.nix
+++ b/tests/modules/misc/xdg/mime-apps-basics.nix
@@ -11,9 +11,7 @@ with lib;
           "mimetype1" = [ "foo1.desktop" "foo2.desktop" "foo3.desktop" ];
           "mimetype2" = "foo4.desktop";
         };
-        removed = {
-          mimetype1 = "foo5.desktop";
-        };
+        removed = { mimetype1 = "foo5.desktop"; };
       };
       defaultApplications = {
         "mimetype1" = [ "default1.desktop" "default2.desktop" ];
diff --git a/tests/modules/misc/xsession/basic.nix b/tests/modules/misc/xsession/basic.nix
index d86b57ddb..39df63623 100644
--- a/tests/modules/misc/xsession/basic.nix
+++ b/tests/modules/misc/xsession/basic.nix
@@ -17,11 +17,9 @@ with lib;
     nixpkgs.overlays = [
       (self: super: {
         xorg = super.xorg // {
-          setxkbmap = super.xorg.setxkbmap // {
-            outPath = "@setxkbmap@";
-          };
+          setxkbmap = super.xorg.setxkbmap // { outPath = "@setxkbmap@"; };
         };
-     })
+      })
     ];
 
     nmt.script = ''
diff --git a/tests/modules/misc/xsession/keyboard-without-layout.nix b/tests/modules/misc/xsession/keyboard-without-layout.nix
index 5f89a29ed..015efe615 100644
--- a/tests/modules/misc/xsession/keyboard-without-layout.nix
+++ b/tests/modules/misc/xsession/keyboard-without-layout.nix
@@ -8,9 +8,7 @@ with lib;
 
     home.homeDirectory = "/test-home";
 
-    home.keyboard = {
-      options = [ "ctrl:nocaps" "altwin:no_win" ];
-    };
+    home.keyboard = { options = [ "ctrl:nocaps" "altwin:no_win" ]; };
 
     xsession = {
       enable = true;
@@ -23,11 +21,9 @@ with lib;
     nixpkgs.overlays = [
       (self: super: {
         xorg = super.xorg // {
-          setxkbmap = super.xorg.setxkbmap // {
-            outPath = "@setxkbmap@";
-          };
+          setxkbmap = super.xorg.setxkbmap // { outPath = "@setxkbmap@"; };
         };
-     })
+      })
     ];
 
     nmt.script = ''
diff --git a/tests/modules/programs/alacritty/empty-settings.nix b/tests/modules/programs/alacritty/empty-settings.nix
index 5fd2792a8..65470473c 100644
--- a/tests/modules/programs/alacritty/empty-settings.nix
+++ b/tests/modules/programs/alacritty/empty-settings.nix
@@ -7,9 +7,7 @@ with lib;
     programs.alacritty.enable = true;
 
     nixpkgs.overlays = [
-      (self: super: {
-        alacritty = pkgs.writeScriptBin "dummy-alacritty" "";
-      })
+      (self: super: { alacritty = pkgs.writeScriptBin "dummy-alacritty" ""; })
     ];
 
     nmt.script = ''
diff --git a/tests/modules/programs/alacritty/example-settings.nix b/tests/modules/programs/alacritty/example-settings.nix
index 0caa80258..46be1064c 100644
--- a/tests/modules/programs/alacritty/example-settings.nix
+++ b/tests/modules/programs/alacritty/example-settings.nix
@@ -13,20 +13,16 @@ with lib;
           columns = 200;
         };
 
-        key_bindings = [
-          {
-            key = "K";
-            mods = "Control";
-            chars = "\\x0c";
-          }
-        ];
+        key_bindings = [{
+          key = "K";
+          mods = "Control";
+          chars = "\\x0c";
+        }];
       };
     };
 
     nixpkgs.overlays = [
-      (self: super: {
-        alacritty = pkgs.writeScriptBin "dummy-alacritty" "";
-      })
+      (self: super: { alacritty = pkgs.writeScriptBin "dummy-alacritty" ""; })
     ];
 
     nmt.script = ''
diff --git a/tests/modules/programs/browserpass/browserpass.nix b/tests/modules/programs/browserpass/browserpass.nix
index 229392e17..9189a445a 100644
--- a/tests/modules/programs/browserpass/browserpass.nix
+++ b/tests/modules/programs/browserpass/browserpass.nix
@@ -6,30 +6,24 @@ with lib;
   config = {
     programs.browserpass = {
       enable = true;
-      browsers = [
-        "chrome"
-        "chromium"
-        "firefox"
-        "vivaldi"
-      ];
+      browsers = [ "chrome" "chromium" "firefox" "vivaldi" ];
     };
 
-    nmt.script =
-      if pkgs.stdenv.hostPlatform.isDarwin then ''
-        for dir in "Google/Chrome" "Chromium" "Mozilla" "Vivaldi"; do
-          assertFileExists "home-files/Library/Application Support/$dir/NativeMessagingHosts/com.github.browserpass.native.json"
-        done
+    nmt.script = if pkgs.stdenv.hostPlatform.isDarwin then ''
+      for dir in "Google/Chrome" "Chromium" "Mozilla" "Vivaldi"; do
+        assertFileExists "home-files/Library/Application Support/$dir/NativeMessagingHosts/com.github.browserpass.native.json"
+      done
 
-        for dir in "Google/Chrome" "Chromium" "Vivaldi"; do
-          assertFileExists "home-files/Library/Application Support/$dir/policies/managed/com.github.browserpass.native.json"
-        done
-      '' else ''
-        for dir in "google-chrome" "chromium" "vivaldi"; do
-          assertFileExists "home-files/.config/$dir/NativeMessagingHosts/com.github.browserpass.native.json"
-          assertFileExists "home-files/.config/$dir/policies/managed/com.github.browserpass.native.json"
-        done
+      for dir in "Google/Chrome" "Chromium" "Vivaldi"; do
+        assertFileExists "home-files/Library/Application Support/$dir/policies/managed/com.github.browserpass.native.json"
+      done
+    '' else ''
+      for dir in "google-chrome" "chromium" "vivaldi"; do
+        assertFileExists "home-files/.config/$dir/NativeMessagingHosts/com.github.browserpass.native.json"
+        assertFileExists "home-files/.config/$dir/policies/managed/com.github.browserpass.native.json"
+      done
 
-        assertFileExists "home-files/.mozilla/native-messaging-hosts/com.github.browserpass.native.json"
-      '';
+      assertFileExists "home-files/.mozilla/native-messaging-hosts/com.github.browserpass.native.json"
+    '';
   };
 }
diff --git a/tests/modules/programs/browserpass/default.nix b/tests/modules/programs/browserpass/default.nix
index 478530f78..fa40ddcab 100644
--- a/tests/modules/programs/browserpass/default.nix
+++ b/tests/modules/programs/browserpass/default.nix
@@ -1,3 +1 @@
-{
-  browserpass = ./browserpass.nix;
-}
+{ browserpass = ./browserpass.nix; }
diff --git a/tests/modules/programs/firefox/profile-settings.nix b/tests/modules/programs/firefox/profile-settings.nix
index f1e9be927..8c5fb4ec1 100644
--- a/tests/modules/programs/firefox/profile-settings.nix
+++ b/tests/modules/programs/firefox/profile-settings.nix
@@ -6,26 +6,20 @@ with lib;
   config = {
     programs.firefox = {
       enable = true;
-      profiles.test.settings = {
-        "general.smoothScroll" = false;
-      };
+      profiles.test.settings = { "general.smoothScroll" = false; };
     };
 
     nixpkgs.overlays = [
       (self: super: {
-        firefox-unwrapped =
-          pkgs.runCommand
-            "firefox-0"
-            {
-              meta.description = "I pretend to be Firefox";
-              preferLocalBuild = true;
-              allowSubstitutes = false;
-            }
-            ''
-              mkdir -p "$out/bin"
-              touch "$out/bin/firefox"
-              chmod 755 "$out/bin/firefox"
-            '';
+        firefox-unwrapped = pkgs.runCommand "firefox-0" {
+          meta.description = "I pretend to be Firefox";
+          preferLocalBuild = true;
+          allowSubstitutes = false;
+        } ''
+          mkdir -p "$out/bin"
+          touch "$out/bin/firefox"
+          chmod 755 "$out/bin/firefox"
+        '';
       })
     ];
 
diff --git a/tests/modules/programs/firefox/state-version-19_09.nix b/tests/modules/programs/firefox/state-version-19_09.nix
index 4d65d7a7b..27dc867ad 100644
--- a/tests/modules/programs/firefox/state-version-19_09.nix
+++ b/tests/modules/programs/firefox/state-version-19_09.nix
@@ -10,19 +10,15 @@ with lib;
 
     nixpkgs.overlays = [
       (self: super: {
-        firefox-unwrapped =
-          pkgs.runCommand
-            "firefox-0"
-            {
-              meta.description = "I pretend to be Firefox";
-              preferLocalBuild = true;
-              allowSubstitutes = false;
-            }
-            ''
-              mkdir -p "$out/bin"
-              touch "$out/bin/firefox"
-              chmod 755 "$out/bin/firefox"
-            '';
+        firefox-unwrapped = pkgs.runCommand "firefox-0" {
+          meta.description = "I pretend to be Firefox";
+          preferLocalBuild = true;
+          allowSubstitutes = false;
+        } ''
+          mkdir -p "$out/bin"
+          touch "$out/bin/firefox"
+          chmod 755 "$out/bin/firefox"
+        '';
       })
     ];
 
diff --git a/tests/modules/programs/getmail/default.nix b/tests/modules/programs/getmail/default.nix
index a0d79e7d0..cb789a90d 100644
--- a/tests/modules/programs/getmail/default.nix
+++ b/tests/modules/programs/getmail/default.nix
@@ -1,3 +1 @@
-{
-  getmail = ./getmail.nix;
-}
+{ getmail = ./getmail.nix; }
diff --git a/tests/modules/programs/getmail/getmail.nix b/tests/modules/programs/getmail/getmail.nix
index d72a8d650..fe10b98f9 100644
--- a/tests/modules/programs/getmail/getmail.nix
+++ b/tests/modules/programs/getmail/getmail.nix
@@ -13,7 +13,7 @@ with lib;
       "hm@example.com" = {
         getmail = {
           enable = true;
-          mailboxes = ["INBOX" "Sent" "Work"];
+          mailboxes = [ "INBOX" "Sent" "Work" ];
           destinationCommand = "/bin/maildrop";
           delete = false;
         };
@@ -23,7 +23,9 @@ with lib;
 
     nmt.script = ''
       assertFileExists home-files/.getmail/getmailhm@example.com
-      assertFileContent home-files/.getmail/getmailhm@example.com ${./getmail-expected.conf}
+      assertFileContent home-files/.getmail/getmailhm@example.com ${
+        ./getmail-expected.conf
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/git/git-with-email.nix b/tests/modules/programs/git/git-with-email.nix
index 350921981..ca577eef4 100644
--- a/tests/modules/programs/git/git-with-email.nix
+++ b/tests/modules/programs/git/git-with-email.nix
@@ -25,7 +25,9 @@ with lib;
       }
 
       assertFileExists home-files/.config/git/config
-      assertFileContent home-files/.config/git/config ${./git-with-email-expected.conf}
+      assertFileContent home-files/.config/git/config ${
+        ./git-with-email-expected.conf
+      }
 
       assertGitConfig "sendemail.hm@example.com.from" "hm@example.com"
       assertGitConfig "sendemail.hm-account.from" "hm@example.org"
diff --git a/tests/modules/programs/git/git.nix b/tests/modules/programs/git/git.nix
index 3a84bf77a..7c0bf52de 100644
--- a/tests/modules/programs/git/git.nix
+++ b/tests/modules/programs/git/git.nix
@@ -11,15 +11,15 @@ let
     };
   };
 
-  substituteExpected = path: pkgs.substituteAll {
-    src = path;
+  substituteExpected = path:
+    pkgs.substituteAll {
+      src = path;
 
-    git_include_path = pkgs.writeText "contents" (generators.toINI {} gitInclude);
-  };
+      git_include_path =
+        pkgs.writeText "contents" (generators.toINI { } gitInclude);
+    };
 
-in
-
-{
+in {
   config = {
     programs.git = mkMerge [
       {
@@ -32,7 +32,7 @@ in
         extraConfig = {
           extra = {
             name = "value";
-            multiple = [1];
+            multiple = [ 1 ];
           };
         };
         ignores = [ "*~" "*.swp" ];
@@ -62,14 +62,16 @@ in
         extraConfig."extra \"backcompat.with.dots\"".previously = "worked";
         extraConfig.extra.boolean = true;
         extraConfig.extra.integer = 38;
-        extraConfig.extra.multiple = [2];
+        extraConfig.extra.multiple = [ 2 ];
         extraConfig.extra.subsection.value = "test";
       }
     ];
 
     nmt.script = ''
       assertFileExists home-files/.config/git/config
-      assertFileContent home-files/.config/git/config ${substituteExpected ./git-expected.conf}
+      assertFileContent home-files/.config/git/config ${
+        substituteExpected ./git-expected.conf
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/gpg/default.nix b/tests/modules/programs/gpg/default.nix
index 5cb24817c..7fed2cdcc 100644
--- a/tests/modules/programs/gpg/default.nix
+++ b/tests/modules/programs/gpg/default.nix
@@ -1,3 +1 @@
-{
-  gpg-override-defaults = ./override-defaults.nix;
-}
+{ gpg-override-defaults = ./override-defaults.nix; }
diff --git a/tests/modules/programs/mbsync/default.nix b/tests/modules/programs/mbsync/default.nix
index c31e0dc7a..9c369fa50 100644
--- a/tests/modules/programs/mbsync/default.nix
+++ b/tests/modules/programs/mbsync/default.nix
@@ -1,3 +1 @@
-{
-  mbsync = ./mbsync.nix;
-}
+{ mbsync = ./mbsync.nix; }
diff --git a/tests/modules/programs/mbsync/mbsync.nix b/tests/modules/programs/mbsync/mbsync.nix
index 072a7271f..03a54c178 100644
--- a/tests/modules/programs/mbsync/mbsync.nix
+++ b/tests/modules/programs/mbsync/mbsync.nix
@@ -18,13 +18,9 @@ with lib;
     };
 
     accounts.email.accounts = {
-      "hm@example.com".mbsync = {
-        enable = true;
-      };
+      "hm@example.com".mbsync = { enable = true; };
 
-      hm-account.mbsync = {
-        enable = true;
-      };
+      hm-account.mbsync = { enable = true; };
     };
 
     nmt.script = ''
diff --git a/tests/modules/programs/neomutt/default.nix b/tests/modules/programs/neomutt/default.nix
index 3c778e9ee..289f2705e 100644
--- a/tests/modules/programs/neomutt/default.nix
+++ b/tests/modules/programs/neomutt/default.nix
@@ -1,3 +1 @@
-{
-  neomutt-simple = ./neomutt.nix;
-}
+{ neomutt-simple = ./neomutt.nix; }
diff --git a/tests/modules/programs/neomutt/neomutt.nix b/tests/modules/programs/neomutt/neomutt.nix
index d7ffadd8e..91cb9dca2 100644
--- a/tests/modules/programs/neomutt/neomutt.nix
+++ b/tests/modules/programs/neomutt/neomutt.nix
@@ -30,17 +30,18 @@ with lib;
       vimKeys = false;
     };
 
-    nixpkgs.overlays = [
-      (self: super: {
-        neomutt = pkgs.writeScriptBin "dummy-neomutt" "";
-      })
-    ];
+    nixpkgs.overlays =
+      [ (self: super: { neomutt = pkgs.writeScriptBin "dummy-neomutt" ""; }) ];
 
     nmt.script = ''
       assertFileExists home-files/.config/neomutt/neomuttrc
       assertFileExists home-files/.config/neomutt/hm@example.com
-      assertFileContent home-files/.config/neomutt/neomuttrc ${./neomutt-expected.conf}
-      assertFileContent home-files/.config/neomutt/hm@example.com ${./hm-example.com-expected}
+      assertFileContent home-files/.config/neomutt/neomuttrc ${
+        ./neomutt-expected.conf
+      }
+      assertFileContent home-files/.config/neomutt/hm@example.com ${
+        ./hm-example.com-expected
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/newsboat/default.nix b/tests/modules/programs/newsboat/default.nix
index a9b15a443..27f523a62 100644
--- a/tests/modules/programs/newsboat/default.nix
+++ b/tests/modules/programs/newsboat/default.nix
@@ -1,3 +1 @@
-{
-  newsboat-basics = ./newsboat-basics.nix;
-}
+{ newsboat-basics = ./newsboat-basics.nix; }
diff --git a/tests/modules/programs/newsboat/newsboat-basics.nix b/tests/modules/programs/newsboat/newsboat-basics.nix
index 49a54f6d0..e6eb41517 100644
--- a/tests/modules/programs/newsboat/newsboat-basics.nix
+++ b/tests/modules/programs/newsboat/newsboat-basics.nix
@@ -14,20 +14,14 @@ with lib;
           title = "Cool feed";
         }
 
-        {
-          url = "http://example.org/feed2.xml";
-        }
+        { url = "http://example.org/feed2.xml"; }
       ];
 
-      queries = {
-        "foo" = "rssurl =~ \"example.com\"";
-      };
+      queries = { "foo" = ''rssurl =~ "example.com"''; };
     };
 
     nixpkgs.overlays = [
-      (self: super: {
-        newsboat = pkgs.writeScriptBin "dummy-newsboat" "";
-      })
+      (self: super: { newsboat = pkgs.writeScriptBin "dummy-newsboat" ""; })
     ];
 
     nmt.script = ''
diff --git a/tests/modules/programs/readline/default.nix b/tests/modules/programs/readline/default.nix
index 767d88bfa..c95745d19 100644
--- a/tests/modules/programs/readline/default.nix
+++ b/tests/modules/programs/readline/default.nix
@@ -1,3 +1 @@
-{
-  readline-using-all-options = ./using-all-options.nix;
-}
+{ readline-using-all-options = ./using-all-options.nix; }
diff --git a/tests/modules/programs/readline/using-all-options.nix b/tests/modules/programs/readline/using-all-options.nix
index f50117679..104d08b8a 100644
--- a/tests/modules/programs/readline/using-all-options.nix
+++ b/tests/modules/programs/readline/using-all-options.nix
@@ -7,9 +7,7 @@ with lib;
     programs.readline = {
       enable = true;
 
-      bindings = {
-        "\C-h" = "backward-kill-word";
-      };
+      bindings = { "C-h" = "backward-kill-word"; };
 
       variables = {
         bell-style = "audible";
diff --git a/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix b/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix
index 2558a2583..0f9cfc39a 100644
--- a/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix
+++ b/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix
@@ -13,16 +13,12 @@ with lib;
           border = "border";
           separator = "separator";
         };
-        rows = {
-        };
+        rows = { };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
       assertFileContent \
diff --git a/tests/modules/programs/ssh/default-config.nix b/tests/modules/programs/ssh/default-config.nix
index 266bc9d1f..6d7e5508a 100644
--- a/tests/modules/programs/ssh/default-config.nix
+++ b/tests/modules/programs/ssh/default-config.nix
@@ -4,15 +4,10 @@ with lib;
 
 {
   config = {
-    programs.ssh = {
-      enable = true;
-    };
+    programs.ssh = { enable = true; };
 
-    home.file.assertions.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.assertions.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
       assertFileExists home-files/.ssh/config
diff --git a/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
index 2e9082de3..cf2efe5a5 100644
--- a/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
@@ -8,25 +8,22 @@ with lib;
       enable = true;
       matchBlocks = {
         dynamicBindPathWithPort = {
-          dynamicForwards = [
-            {
-              # Error:
-              address = "/run/user/1000/gnupg/S.gpg-agent.extra";
-              port = 3000;
-            }
-          ];
+          dynamicForwards = [{
+            # Error:
+            address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+            port = 3000;
+          }];
         };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
-      assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+      assertFileContent home-files/result ${
+        ./forwards-paths-with-ports-error.json
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix b/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
index 15ab59e82..d0c3a7322 100644
--- a/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
@@ -8,31 +8,24 @@ with lib;
       enable = true;
       matchBlocks = {
         dynamicBindPathNoPort = {
-          dynamicForwards = [
-            {
-              # OK:
-              address = "/run/user/1000/gnupg/S.gpg-agent.extra";
-            }
-          ];
+          dynamicForwards = [{
+            # OK:
+            address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+          }];
         };
 
         dynamicBindAddressWithPort = {
-          dynamicForwards = [
-            {
-              # OK:
-              address = "127.0.0.1";
-              port = 3000;
-            }
-          ];
+          dynamicForwards = [{
+            # OK:
+            address = "127.0.0.1";
+            port = 3000;
+          }];
         };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
       assertFileExists home-files/.ssh/config
diff --git a/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
index c05cba827..f9d8e2daf 100644
--- a/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
@@ -8,29 +8,26 @@ with lib;
       enable = true;
       matchBlocks = {
         localBindPathWithPort = {
-          localForwards = [
-            {
-              # OK:
-              host.address = "127.0.0.1";
-              host.port = 3000;
+          localForwards = [{
+            # OK:
+            host.address = "127.0.0.1";
+            host.port = 3000;
 
-              # Error:
-              bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
-              bind.port = 3000;
-            }
-          ];
+            # Error:
+            bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+            bind.port = 3000;
+          }];
         };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
-      assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+      assertFileContent home-files/result ${
+        ./forwards-paths-with-ports-error.json
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
index 8cecc5e51..02a7e5b16 100644
--- a/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
@@ -8,29 +8,26 @@ with lib;
       enable = true;
       matchBlocks = {
         localHostPathWithPort = {
-          localForwards = [
-            {
-              # OK:
-              bind.address = "127.0.0.1";
-              bind.port = 3000;
+          localForwards = [{
+            # OK:
+            bind.address = "127.0.0.1";
+            bind.port = 3000;
 
-              # Error:
-              host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
-              host.port = 3000;
-            }
-          ];
+            # Error:
+            host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+            host.port = 3000;
+          }];
         };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
-      assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+      assertFileContent home-files/result ${
+        ./forwards-paths-with-ports-error.json
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
index a0473147b..61ce9ae03 100644
--- a/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
@@ -8,29 +8,26 @@ with lib;
       enable = true;
       matchBlocks = {
         remoteBindPathWithPort = {
-          remoteForwards = [
-            {
-              # OK:
-              host.address = "127.0.0.1";
-              host.port = 3000;
+          remoteForwards = [{
+            # OK:
+            host.address = "127.0.0.1";
+            host.port = 3000;
 
-              # Error:
-              bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
-              bind.port = 3000;
-            }
-          ];
+            # Error:
+            bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+            bind.port = 3000;
+          }];
         };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
-      assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+      assertFileContent home-files/result ${
+        ./forwards-paths-with-ports-error.json
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
index 770b8ab28..71bdbcb70 100644
--- a/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
@@ -8,29 +8,26 @@ with lib;
       enable = true;
       matchBlocks = {
         remoteHostPathWithPort = {
-          remoteForwards = [
-            {
-              # OK:
-              bind.address = "127.0.0.1";
-              bind.port = 3000;
+          remoteForwards = [{
+            # OK:
+            bind.address = "127.0.0.1";
+            bind.port = 3000;
 
-              # Error:
-              host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
-              host.port = 3000;
-            }
-          ];
+            # Error:
+            host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+            host.port = 3000;
+          }];
         };
       };
     };
 
-    home.file.result.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.result.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
-      assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+      assertFileContent home-files/result ${
+        ./forwards-paths-with-ports-error.json
+      }
     '';
   };
 }
diff --git a/tests/modules/programs/ssh/match-blocks-attrs.nix b/tests/modules/programs/ssh/match-blocks-attrs.nix
index 94263ef9d..a84a703e8 100644
--- a/tests/modules/programs/ssh/match-blocks-attrs.nix
+++ b/tests/modules/programs/ssh/match-blocks-attrs.nix
@@ -15,13 +15,11 @@ with lib;
         xyz = {
           identityFile = "file";
           serverAliveInterval = 60;
-          localForwards = [
-            {
-              bind.port = 8080;
-              host.address = "10.0.0.1";
-              host.port = 80;
-            }
-          ];
+          localForwards = [{
+            bind.port = 8080;
+            host.address = "10.0.0.1";
+            host.port = 80;
+          }];
           remoteForwards = [
             {
               bind.port = 8081;
@@ -33,25 +31,18 @@ with lib;
               host.address = "/run/user/1000/gnupg/S.gpg-agent";
             }
           ];
-          dynamicForwards = [
-            {
-              port = 2839;
-            }
-          ];
+          dynamicForwards = [{ port = 2839; }];
         };
 
         "* !github.com" = {
-          identityFile = ["file1" "file2"];
+          identityFile = [ "file1" "file2" ];
           port = 516;
         };
       };
     };
 
-    home.file.assertions.text =
-      builtins.toJSON
-      (map (a: a.message)
-      (filter (a: !a.assertion)
-        config.assertions));
+    home.file.assertions.text = builtins.toJSON
+      (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
     nmt.script = ''
       assertFileExists home-files/.ssh/config
diff --git a/tests/modules/programs/texlive/default.nix b/tests/modules/programs/texlive/default.nix
index e9a6f882b..23bfe2daf 100644
--- a/tests/modules/programs/texlive/default.nix
+++ b/tests/modules/programs/texlive/default.nix
@@ -1,3 +1 @@
-{
-  texlive-minimal = ./texlive-minimal.nix;
-}
+{ texlive-minimal = ./texlive-minimal.nix; }
diff --git a/tests/modules/programs/tmux/vi-all-true.nix b/tests/modules/programs/tmux/vi-all-true.nix
index 70787128a..bce032fd6 100644
--- a/tests/modules/programs/tmux/vi-all-true.nix
+++ b/tests/modules/programs/tmux/vi-all-true.nix
@@ -16,9 +16,7 @@ with lib;
     nixpkgs.overlays = [
       (self: super: {
         tmuxPlugins = super.tmuxPlugins // {
-          sensible = super.tmuxPlugins.sensible // {
-            rtp = "@sensible_rtp@";
-          };
+          sensible = super.tmuxPlugins.sensible // { rtp = "@sensible_rtp@"; };
         };
       })
     ];
diff --git a/tests/modules/programs/zsh/history-path-new-custom.nix b/tests/modules/programs/zsh/history-path-new-custom.nix
index 6a8c7372d..0c052d694 100644
--- a/tests/modules/programs/zsh/history-path-new-custom.nix
+++ b/tests/modules/programs/zsh/history-path-new-custom.nix
@@ -10,11 +10,8 @@ with lib;
       history.path = "$HOME/some/directory/zsh_history";
     };
 
-    nixpkgs.overlays = [
-      (self: super: {
-        zsh = pkgs.writeScriptBin "dummy-zsh" "";
-      })
-    ];
+    nixpkgs.overlays =
+      [ (self: super: { zsh = pkgs.writeScriptBin "dummy-zsh" ""; }) ];
 
     nmt.script = ''
       assertFileRegex home-files/.zshrc '^HISTFILE="$HOME/some/directory/zsh_history"$'
diff --git a/tests/modules/programs/zsh/history-path-new-default.nix b/tests/modules/programs/zsh/history-path-new-default.nix
index b01bd92d6..6d1f58a29 100644
--- a/tests/modules/programs/zsh/history-path-new-default.nix
+++ b/tests/modules/programs/zsh/history-path-new-default.nix
@@ -7,11 +7,8 @@ with lib;
     home.stateVersion = "20.03";
     programs.zsh.enable = true;
 
-    nixpkgs.overlays = [
-      (self: super: {
-        zsh = pkgs.writeScriptBin "dummy-zsh" "";
-      })
-    ];
+    nixpkgs.overlays =
+      [ (self: super: { zsh = pkgs.writeScriptBin "dummy-zsh" ""; }) ];
 
     nmt.script = ''
       assertFileRegex home-files/.zshrc '^HISTFILE="$HOME/.zsh_history"$'
diff --git a/tests/modules/programs/zsh/history-path-old-custom.nix b/tests/modules/programs/zsh/history-path-old-custom.nix
index 672ccc810..f5b178b5e 100644
--- a/tests/modules/programs/zsh/history-path-old-custom.nix
+++ b/tests/modules/programs/zsh/history-path-old-custom.nix
@@ -10,11 +10,8 @@ with lib;
       history.path = "some/directory/zsh_history";
     };
 
-    nixpkgs.overlays = [
-      (self: super: {
-        zsh = pkgs.writeScriptBin "dummy-zsh" "";
-      })
-    ];
+    nixpkgs.overlays =
+      [ (self: super: { zsh = pkgs.writeScriptBin "dummy-zsh" ""; }) ];
 
     nmt.script = ''
       assertFileRegex home-files/.zshrc '^HISTFILE="$HOME/some/directory/zsh_history"$'
diff --git a/tests/modules/programs/zsh/history-path-old-default.nix b/tests/modules/programs/zsh/history-path-old-default.nix
index a89070c90..d880d9664 100644
--- a/tests/modules/programs/zsh/history-path-old-default.nix
+++ b/tests/modules/programs/zsh/history-path-old-default.nix
@@ -7,11 +7,8 @@ with lib;
     home.stateVersion = "19.03";
     programs.zsh.enable = true;
 
-    nixpkgs.overlays = [
-      (self: super: {
-        zsh = pkgs.writeScriptBin "dummy-zsh" "";
-      })
-    ];
+    nixpkgs.overlays =
+      [ (self: super: { zsh = pkgs.writeScriptBin "dummy-zsh" ""; }) ];
 
     nmt.script = ''
       assertFileRegex home-files/.zshrc '^HISTFILE="$HOME/.zsh_history"$'
diff --git a/tests/modules/services/sxhkd/configuration.nix b/tests/modules/services/sxhkd/configuration.nix
index ac04a7ecf..992c4b18a 100644
--- a/tests/modules/services/sxhkd/configuration.nix
+++ b/tests/modules/services/sxhkd/configuration.nix
@@ -1,5 +1,4 @@
-{ config, ... }:
-{
+{ config, ... }: {
   config = {
     services.sxhkd = {
       enable = true;
@@ -13,7 +12,7 @@
       extraConfig = ''
         super + c
           call command c
- 
+
         # comment
         super + d
           call command d
diff --git a/tests/modules/services/window-managers/i3/default.nix b/tests/modules/services/window-managers/i3/default.nix
index 6105eb415..e239d6c07 100644
--- a/tests/modules/services/window-managers/i3/default.nix
+++ b/tests/modules/services/window-managers/i3/default.nix
@@ -1,3 +1 @@
-{
-  i3-keybindings = ./i3-keybindings.nix;
-}
+{ i3-keybindings = ./i3-keybindings.nix; }
diff --git a/tests/modules/services/window-managers/i3/i3-keybindings.nix b/tests/modules/services/window-managers/i3/i3-keybindings.nix
index 89e545be9..4f8515e61 100644
--- a/tests/modules/services/window-managers/i3/i3-keybindings.nix
+++ b/tests/modules/services/window-managers/i3/i3-keybindings.nix
@@ -8,29 +8,21 @@ with lib;
       enable = true;
 
       config.keybindings =
-        let
-          modifier = config.xsession.windowManager.i3.config.modifier;
-        in
-          lib.mkOptionDefault {
-            "${modifier}+Left" = "overridden-command";
-            "${modifier}+Right" = null;
-            "${modifier}+Invented" = "invented-key-command";
-          };
+        let modifier = config.xsession.windowManager.i3.config.modifier;
+        in lib.mkOptionDefault {
+          "${modifier}+Left" = "overridden-command";
+          "${modifier}+Right" = null;
+          "${modifier}+Invented" = "invented-key-command";
+        };
     };
 
     nixpkgs.overlays = [
       (self: super: {
-        dmenu = super.dmenu // {
-          outPath = "@dmenu@";
-        };
+        dmenu = super.dmenu // { outPath = "@dmenu@"; };
 
-        i3 = super.i3 // {
-          outPath = "@i3@";
-        };
+        i3 = super.i3 // { outPath = "@i3@"; };
 
-        i3status = super.i3status // {
-          outPath = "@i3status@";
-        };
+        i3status = super.i3status // { outPath = "@i3status@"; };
       })
     ];
 
diff --git a/tests/modules/systemd/timers.nix b/tests/modules/systemd/timers.nix
index 0fa0070cd..eaa43f176 100644
--- a/tests/modules/systemd/timers.nix
+++ b/tests/modules/systemd/timers.nix
@@ -5,17 +5,11 @@ with lib;
 {
   config = {
     systemd.user.timers.test-timer = {
-      Unit = {
-        Description = "A basic test timer";
-      };
+      Unit = { Description = "A basic test timer"; };
 
-      Timer = {
-        OnUnitActiveSec = "1h 30m";
-      };
+      Timer = { OnUnitActiveSec = "1h 30m"; };
 
-      Install = {
-        WantedBy = [ "timers.target" ];
-      };
+      Install = { WantedBy = [ "timers.target" ]; };
     };
 
     nmt.script = ''
diff --git a/tests/modules/xresources/default.nix b/tests/modules/xresources/default.nix
index 0e96aef9f..afd15fbd3 100644
--- a/tests/modules/xresources/default.nix
+++ b/tests/modules/xresources/default.nix
@@ -1,3 +1 @@
-{
-  xresources = ./xresources.nix;
-}
+{ xresources = ./xresources.nix; }

From 70af3b126a0ca281526e328f32c4009a2804aa21 Mon Sep 17 00:00:00 2001
From: Robert Helgesson <robert@rycee.net>
Date: Sat, 1 Feb 2020 20:59:49 +0100
Subject: [PATCH 2/3] ci: add format script and use in CI pipeline

The format script can be used to automatically format the Nix source
files and also verify that the files are formatted using the `-c`
command argument.

At the moment some files are exempt from the formatting to avoid
causing merge conflicts in active pull requests.

Finally, update the contribution guidelines to note that `nixfmt`
should be used.
---
 .travis.yml     |  1 +
 CONTRIBUTING.md | 17 +++++++-----
 format          | 70 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+), 7 deletions(-)
 create mode 100755 format

diff --git a/.travis.yml b/.travis.yml
index df9c468be..e0712e1e4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,5 +8,6 @@ before_script:
   - mkdir -m 0755 -p /nix/var/nix/{profiles,gcroots}/per-user/$USER
 
 script:
+  - ./format -c
   - nix-shell . -A install
   - nix-shell tests -A run.all
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d441aef06..8e64b3b45 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -91,12 +91,15 @@ In addition to the above commit message guidelines, try to follow the
 
 ### Style guidelines ###
 
-The code in Home Manager should follow the [Nixpkgs syntax
-guidelines][]. Note, we prefer `lowerCamelCase` for variable and
-attribute names with the accepted exception of variables directly
-referencing packages in Nixpkgs which use a hyphenated style. For
-example, the Home Manager option `services.gpg-agent.enableSshSupport`
-references the `gpg-agent` package in Nixpkgs.
+The code in Home Manager is formatted by the [nixfmt][] tool and the
+formatting is checked in the pull request tests. Run the `format` tool
+inside the project repository before submitting your pull request.
+
+Note, we prefer `lowerCamelCase` for variable and attribute names with
+the accepted exception of variables directly referencing packages in
+Nixpkgs which use a hyphenated style. For example, the Home Manager
+option `services.gpg-agent.enableSshSupport` references the
+`gpg-agent` package in Nixpkgs.
 
 ### News ###
 
@@ -158,4 +161,4 @@ If you do have a change worthy of a news entry then please add one in
 [create a pull request]: https://help.github.com/articles/creating-a-pull-request/
 [seven rules]: https://chris.beams.io/posts/git-commit/#seven-rules
 [`news.nix`]: https://github.com/rycee/home-manager/blob/master/modules/misc/news.nix
-[Nixpkgs syntax guidelines]: https://nixos.org/nixpkgs/manual/#sec-syntax
+[nixfmt]: https://github.com/serokell/nixfmt/
diff --git a/format b/format
new file mode 100755
index 000000000..539ae60de
--- /dev/null
+++ b/format
@@ -0,0 +1,70 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p findutils nixfmt
+
+CHECK_ARG=
+
+case $1 in
+    -h)
+        echo "$0 [-c]"
+        ;;
+    -c)
+        CHECK_ARG=-c
+        ;;
+esac
+
+# The first block of excludes are files where nixfmt does a poor job,
+# IMHO. The second block of excludes are files touched by open pull
+# requests and we want to avoid merge conflicts.
+find . -name '*.nix' \
+  ! -path ./modules/programs/irssi.nix \
+  \
+  ! -path ./home-manager/default.nix \
+  ! -path ./home-manager/home-manager.nix \
+  ! -path ./modules/accounts/email.nix \
+  ! -path ./modules/default.nix \
+  ! -path ./modules/files.nix \
+  ! -path ./modules/home-environment.nix \
+  ! -path ./modules/lib/default.nix \
+  ! -path ./modules/lib/file-type.nix \
+  ! -path ./modules/lib/types.nix \
+  ! -path ./modules/manual.nix \
+  ! -path ./modules/misc/dconf.nix \
+  ! -path ./modules/misc/gtk.nix \
+  ! -path ./modules/misc/news.nix \
+  ! -path ./modules/misc/nixpkgs.nix \
+  ! -path ./modules/misc/xdg.nix \
+  ! -path ./modules/modules.nix \
+  ! -path ./modules/programs/afew.nix \
+  ! -path ./modules/programs/alot.nix \
+  ! -path ./modules/programs/bash.nix \
+  ! -path ./modules/programs/emacs.nix \
+  ! -path ./modules/programs/firefox.nix \
+  ! -path ./modules/programs/fish.nix \
+  ! -path ./modules/programs/gpg.nix \
+  ! -path ./modules/programs/lesspipe.nix \
+  ! -path ./modules/programs/neovim.nix \
+  ! -path ./modules/programs/ssh.nix \
+  ! -path ./modules/programs/tmux.nix \
+  ! -path ./modules/programs/vscode.nix \
+  ! -path ./modules/programs/zsh.nix \
+  ! -path ./modules/services/gpg-agent.nix \
+  ! -path ./modules/services/kbfs.nix \
+  ! -path ./modules/services/keybase.nix \
+  ! -path ./modules/services/mpd.nix \
+  ! -path ./modules/services/sxhkd.nix \
+  ! -path ./modules/services/window-managers/i3.nix \
+  ! -path ./modules/systemd.nix \
+  ! -path ./nix-darwin/default.nix \
+  ! -path ./tests/default.nix \
+  ! -path ./tests/modules/home-environment/default.nix \
+  ! -path ./tests/modules/home-environment/session-variables.nix \
+  ! -path ./tests/modules/programs/gpg/override-defaults.nix \
+  ! -path ./tests/modules/programs/tmux/default.nix \
+  ! -path ./tests/modules/programs/tmux/disable-confirmation-prompt.nix \
+  ! -path ./tests/modules/programs/tmux/secure-socket-enabled.nix \
+  ! -path ./tests/modules/programs/zsh/session-variables.nix \
+  ! -path ./tests/modules/services/sxhkd/service.nix \
+  ! -path ./tests/modules/systemd/default.nix \
+  ! -path ./tests/modules/systemd/services.nix \
+  ! -path ./tests/modules/systemd/session-variables.nix \
+  -exec nixfmt $CHECK_ARG {} +

From a4a07ba996cc74e58aa22772ad69b50670c8b24f Mon Sep 17 00:00:00 2001
From: Robert Helgesson <robert@rycee.net>
Date: Sun, 2 Feb 2020 00:58:06 +0100
Subject: [PATCH 3/3] readline: fix example

---
 modules/programs/readline.nix                         | 4 +++-
 tests/modules/programs/readline/using-all-options.nix | 2 +-
 tests/modules/programs/readline/using-all-options.txt | 2 +-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/modules/programs/readline.nix b/modules/programs/readline.nix
index a7ff5f594..2f79df6e1 100644
--- a/modules/programs/readline.nix
+++ b/modules/programs/readline.nix
@@ -30,7 +30,9 @@ in {
     bindings = mkOption {
       default = { };
       type = types.attrsOf types.str;
-      example = { "\\C-h" = "backward-kill-word"; };
+      example = literalExample ''
+        { "\\C-h" = "backward-kill-word"; }
+      '';
       description = "Readline bindings.";
     };
 
diff --git a/tests/modules/programs/readline/using-all-options.nix b/tests/modules/programs/readline/using-all-options.nix
index 104d08b8a..ab851020c 100644
--- a/tests/modules/programs/readline/using-all-options.nix
+++ b/tests/modules/programs/readline/using-all-options.nix
@@ -7,7 +7,7 @@ with lib;
     programs.readline = {
       enable = true;
 
-      bindings = { "C-h" = "backward-kill-word"; };
+      bindings = { "\\C-h" = "backward-kill-word"; };
 
       variables = {
         bell-style = "audible";
diff --git a/tests/modules/programs/readline/using-all-options.txt b/tests/modules/programs/readline/using-all-options.txt
index da9f7df68..6b4aef51e 100644
--- a/tests/modules/programs/readline/using-all-options.txt
+++ b/tests/modules/programs/readline/using-all-options.txt
@@ -4,7 +4,7 @@ $include /etc/inputrc
 set bell-style audible
 set completion-map-case on
 set completion-prefix-display-length 2
-"C-h": backward-kill-word
+"\C-h": backward-kill-word
 $if mode=emacs
 "\e[1~": beginning-of-line
 $endif