Add utils.readFile and utils.interpolateFile, use them in xmonad config

- Add utils.readFile which reads a file and evaluates any nix in ${{null}}
  brackets like that, returning a string. This should be a drop-in replacement
  for builtins.readFile
- Add utils.interpolateFile which does the same as readFile but also writes to
  the store and returns a store path for the new file. This should be a drop-in
  wrapper for a path
- Use utils.interpolateFile on the xmonad config file
- Use a relative file path contained in nix interpolation brackets in the xmonad
  config file
- Use package paths inside the included file (all included paths are also
  interpolated)
- Update xmonad to have better volume change support
- Update xmonad to have better multi-display support (actually start polybar,
  display different colors for second displays)
diff --git a/modules/xmonad/XMonadLog.hs b/modules/xmonad/XMonadLog.hs
index b07485c..fb5bbe7 100644
--- a/modules/xmonad/XMonadLog.hs
+++ b/modules/xmonad/XMonadLog.hs
@@ -33,11 +33,12 @@
       grey   = "#474e5d"
       orange = "#e5c07b"
       purple = "#c678dd"
+      green  = "#98c379"
       red    = "#e06c75"
   in def { ppOutput          = dbusOutput dbus
          , ppCurrent         = wrapper red
-         , ppVisible         = wrapper blue
-         , ppUrgent          = wrapper orange
+         , ppVisible         = wrapper orange
+         , ppUrgent          = wrapper green
          , ppHidden          = wrapper blue
          , ppHiddenNoWindows = wrapper grey
          , ppTitle           = shorten 100 . wrapper purple