From 2409647272b5c1c332b48ba8263bd237296f2c69 Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sat, 11 Nov 2017 23:47:52 +0100
Subject: [PATCH 1/5] tv xmonad: make XMONAD_STARTUP_HOOK optional

---
 tv/5pkgs/simple/xmonad-tv/default.nix | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/tv/5pkgs/simple/xmonad-tv/default.nix b/tv/5pkgs/simple/xmonad-tv/default.nix
index f73175bb1..94554f57c 100644
--- a/tv/5pkgs/simple/xmonad-tv/default.nix
+++ b/tv/5pkgs/simple/xmonad-tv/default.nix
@@ -3,6 +3,7 @@ pkgs.writeHaskell "xmonad-tv" {
   executables.xmonad = {
     extra-depends = [
       "containers"
+      "extra"
       "unix"
       "X11"
       "xmonad"
@@ -19,11 +20,12 @@ pkgs.writeHaskell "xmonad-tv" {
 module Main where
 
 import Control.Exception
+import Control.Monad.Extra (whenJustM)
 import Graphics.X11.ExtraTypes.XF86
 import Text.Read (readEither)
 import XMonad
 import System.IO (hPutStrLn, stderr)
-import System.Environment (getArgs, withArgs, getEnv, getEnvironment)
+import System.Environment (getArgs, withArgs, getEnv, getEnvironment, lookupEnv)
 import System.Posix.Process (executeFile)
 import XMonad.Actions.DynamicWorkspaces ( addWorkspacePrompt, renameWorkspace
                                         , removeEmptyWorkspace)
@@ -84,9 +86,9 @@ mainNoArgs = do
             -- , handleEventHook   = myHandleEventHooks <+> handleTimerEvent
             --, handleEventHook   = handleTimerEvent
             , manageHook        = placeHook (smart (1,0)) <+> floatNextHook
-            , startupHook = do
-                path <- liftIO (getEnv "XMONAD_STARTUP_HOOK")
-                forkFile path [] Nothing
+            , startupHook =
+                whenJustM (liftIO (lookupEnv "XMONAD_STARTUP_HOOK"))
+                          (\path -> forkFile path [] Nothing)
             , normalBorderColor  = "#1c1c1c"
             , focusedBorderColor = "#f000b0"
             , handleEventHook = handleShutdownEvent

From ae4cb860ea2bd99d80e66e48480e0d2a9731c2bd Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sun, 12 Nov 2017 09:43:25 +0100
Subject: [PATCH 2/5] per-user module: factor away api and imp

---
 krebs/3modules/per-user.nix | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/krebs/3modules/per-user.nix b/krebs/3modules/per-user.nix
index 1b8d092bb..9cbd9e1ea 100644
--- a/krebs/3modules/per-user.nix
+++ b/krebs/3modules/per-user.nix
@@ -1,28 +1,19 @@
-{ config, lib, pkgs, ... }:
-
 with import <stockholm/lib>;
-
-let
+{ config, pkgs, ... }: let
   cfg = config.krebs.per-user;
-
-  out = {
-    options.krebs.per-user = api;
-    config = imp;
-  };
-
-  api = mkOption {
-    type = with types; attrsOf (submodule {
+in {
+  options.krebs.per-user = mkOption {
+    type = types.attrsOf (types.submodule {
       options = {
         packages = mkOption {
-          type = listOf path;
+          type = types.listOf types.path;
           default = [];
         };
       };
     });
     default = {};
   };
-
-  imp = {
+  config = {
     environment = {
       etc = flip mapAttrs' cfg (name: { packages, ... }: {
         name = "per-user/${name}";
@@ -34,5 +25,4 @@ let
       profiles = ["/etc/per-user/$LOGNAME"];
     };
   };
-
-in out
+}

From 9c8680981fc93c7bce3c4a5198d1d4cb36bd876a Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sun, 12 Nov 2017 09:57:07 +0100
Subject: [PATCH 3/5] per-user module: symlinkJoin -> buildEnv

Refs https://github.com/NixOS/nixpkgs/pull/31283
---
 krebs/3modules/per-user.nix | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/krebs/3modules/per-user.nix b/krebs/3modules/per-user.nix
index 9cbd9e1ea..9080e3b44 100644
--- a/krebs/3modules/per-user.nix
+++ b/krebs/3modules/per-user.nix
@@ -17,9 +17,12 @@ in {
     environment = {
       etc = flip mapAttrs' cfg (name: { packages, ... }: {
         name = "per-user/${name}";
-        value.source = pkgs.symlinkJoin {
+        value.source = pkgs.buildEnv {
           name = "per-user.${name}";
           paths = packages;
+          pathsToLink = [
+            "/bin"
+          ];
         };
       });
       profiles = ["/etc/per-user/$LOGNAME"];

From 7393d245d61eac3f0c4f9f79865f8c9e8aea4839 Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sun, 12 Nov 2017 10:47:36 +0100
Subject: [PATCH 4/5] per-user module: create profiles only when needed

Refs https://github.com/NixOS/nixpkgs/pull/25712
---
 krebs/3modules/per-user.nix | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/krebs/3modules/per-user.nix b/krebs/3modules/per-user.nix
index 9080e3b44..a7a07a8e6 100644
--- a/krebs/3modules/per-user.nix
+++ b/krebs/3modules/per-user.nix
@@ -15,16 +15,19 @@ in {
   };
   config = {
     environment = {
-      etc = flip mapAttrs' cfg (name: { packages, ... }: {
-        name = "per-user/${name}";
-        value.source = pkgs.buildEnv {
-          name = "per-user.${name}";
-          paths = packages;
-          pathsToLink = [
-            "/bin"
-          ];
-        };
-      });
+      etc =
+        mapAttrs'
+          (name: per-user: {
+            name = "per-user/${name}";
+            value.source = pkgs.buildEnv {
+              name = "per-user.${name}";
+              paths = per-user.packages;
+              pathsToLink = [
+                "/bin"
+              ];
+            };
+          })
+          (filterAttrs (_: per-user: per-user.packages != []) cfg);
       profiles = ["/etc/per-user/$LOGNAME"];
     };
   };

From 1f50c4e068294bba196695394660527963e7690b Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sun, 12 Nov 2017 11:35:11 +0100
Subject: [PATCH 5/5] urlwatch: 2.6 -> 2.7

---
 krebs/5pkgs/simple/urlwatch/default.nix | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/krebs/5pkgs/simple/urlwatch/default.nix b/krebs/5pkgs/simple/urlwatch/default.nix
index adaefbc4d..ebf872568 100644
--- a/krebs/5pkgs/simple/urlwatch/default.nix
+++ b/krebs/5pkgs/simple/urlwatch/default.nix
@@ -1,14 +1,18 @@
-{ stdenv, fetchurl, python3Packages }:
+{ stdenv, fetchFromGitHub, python3Packages }:
 
-python3Packages.buildPythonPackage rec {
-  name = "urlwatch-${meta.version}";
+python3Packages.buildPythonApplication rec {
+  name = "urlwatch-${version}";
+  version = "2.7";
 
-  src = fetchurl {
-    url = "https://github.com/thp/urlwatch/archive/${meta.version}.tar.gz";
-    sha256 = "09bn31gn03swi7yr3s1ql8x07hx96gap1ka77kk44kk0lvfxn55b";
+  src = fetchFromGitHub {
+    owner  = "thp";
+    repo   = "urlwatch";
+    rev    = version;
+    sha256 = "0fx964z73yv08b1lpymmjsigf6929zx9ax5bp34rcf2c5gk11l5m";
   };
 
   propagatedBuildInputs = with python3Packages; [
+    appdirs
     keyring
     minidb
     pycodestyle
@@ -16,11 +20,10 @@ python3Packages.buildPythonPackage rec {
     requests
   ];
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "A tool for monitoring webpages for updates";
     homepage = https://thp.io/2008/urlwatch/;
-    license = stdenv.lib.licenses.bsd3;
-    maintainers = [ stdenv.lib.maintainers.tv ];
-    version = "2.6";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ tv ];
   };
 }