From a9f4ad7586bfb543cdcdeacf93b71bdce506621a Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Tue, 20 Jun 2017 19:30:14 +0200
Subject: [PATCH] concat: RIP

---
 krebs/5pkgs/writers.nix | 26 ----------------
 lass/1systems/iso.nix   | 31 +++++++++++--------
 lass/2configs/htop.nix  | 67 +++++++++++++++++++++--------------------
 lass/2configs/mail.nix  | 15 +++++----
 lass/2configs/mc.nix    | 25 ++++++++-------
 lass/2configs/mpv.nix   | 15 +++++----
 lass/2configs/vim.nix   | 19 +++++++-----
 makefu/1systems/iso.nix | 31 +++++++++++--------
 tv/2configs/htop.nix    | 67 +++++++++++++++++++++--------------------
 tv/2configs/vim.nix     | 27 +++++++++--------
 10 files changed, 164 insertions(+), 159 deletions(-)

diff --git a/krebs/5pkgs/writers.nix b/krebs/5pkgs/writers.nix
index 8ea9c37d5..c4fb8cd83 100644
--- a/krebs/5pkgs/writers.nix
+++ b/krebs/5pkgs/writers.nix
@@ -1,32 +1,6 @@
 pkgs: oldpkgs:
 with import <stockholm/lib>;
   {
-
-    # Combine a list of derivations using symlinks.  Paths in later derivations
-    # take precedence over earlier ones.
-    #
-    # Example: create wrapper but retain all other files (man pages etc.)
-    #
-    # {
-    #   nixpkgs.config.packageOverrides = super: {
-    #     hello = pkgs.concat "hello" [
-    #       super.hello
-    #       (pkgs.writeDashBin "hello" ''
-    #         echo OMG
-    #         echo exec ${super.hello}/bin/hello "$@"
-    #       '')
-    #     ];
-    #   };
-    # }
-    #
-    concat = name: xs: pkgs.runCommand name {} ''
-      mkdir $out
-      ${flip concatMapStrings xs (x: ''
-        cp --remove-destination -vrs ${x}/* $out
-        find $out -type d -exec chmod -v u+rwx {} +
-      '')}
-    '';
-
     execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
     in pkgs.writeC name { inherit destination; } /* c */ ''
       #include <unistd.h>
diff --git a/lass/1systems/iso.nix b/lass/1systems/iso.nix
index eaeb1991f..8b2e82d31 100644
--- a/lass/1systems/iso.nix
+++ b/lass/1systems/iso.nix
@@ -17,19 +17,24 @@ with import <stockholm/lib>;
       # my life sucks
       nixpkgs.config.packageOverrides = super: {
         irc-announce = super.callPackage <stockholm/krebs/5pkgs/simple/irc-announce> {
-          pkgs = pkgs // { coreutils = pkgs.concat "coreutils-hack" [
-            pkgs.coreutils
-            (pkgs.writeDashBin "tee" ''
-              if test "$1" = /dev/stderr; then
-                while read -r line; do
-                  echo "$line"
-                  echo "$line" >&2
-                done
-              else
-                ${super.coreutils}/bin/tee "$@"
-              fi
-            '')
-          ];};
+          pkgs = pkgs // {
+            coreutils = pkgs.symlinkJoin {
+              name = "coreutils-hack";
+              paths = [
+                pkgs.coreutils
+                (pkgs.writeDashBin "tee" ''
+                  if test "$1" = /dev/stderr; then
+                    while read -r line; do
+                      echo "$line"
+                      echo "$line" >&2
+                    done
+                  else
+                    ${super.coreutils}/bin/tee "$@"
+                  fi
+                '')
+              ];
+            };
+          };
         };
       };
       boot.kernelParams = [ "copytoram" ];
diff --git a/lass/2configs/htop.nix b/lass/2configs/htop.nix
index 69e04a05b..ec86d4120 100644
--- a/lass/2configs/htop.nix
+++ b/lass/2configs/htop.nix
@@ -5,37 +5,40 @@ with import <stockholm/lib>;
 {
   security.hideProcessInformation = true;
   nixpkgs.config.packageOverrides = super: {
-    htop = pkgs.concat "htop" [
-      super.htop
-      (pkgs.writeDashBin "htop" ''
-        export HTOPRC=${pkgs.writeText "htoprc" ''
-          fields=0 48 17 18 38 39 40 2 46 47 49 1
-          sort_key=46
-          sort_direction=1
-          hide_threads=0
-          hide_kernel_threads=1
-          hide_userland_threads=0
-          shadow_other_users=1
-          show_thread_names=1
-          show_program_path=1
-          highlight_base_name=1
-          highlight_megabytes=1
-          highlight_threads=1
-          tree_view=1
-          header_margin=1
-          detailed_cpu_time=0
-          cpu_count_from_zero=0
-          update_process_names=0
-          account_guest_in_cpu_meter=1
-          color_scheme=6
-          delay=15
-          left_meters=LeftCPUs2 RightCPUs2 Memory Swap
-          left_meter_modes=1 1 1 1
-          right_meters=Uptime Tasks LoadAverage Battery
-          right_meter_modes=2 2 2 2
-        ''}
-        exec ${super.htop}/bin/htop "$@"
-      '')
-    ];
+    htop = pkgs.symlinkJoin {
+      name = "htop";
+      paths = [
+        super.htop
+        (pkgs.writeDashBin "htop" ''
+          export HTOPRC=${pkgs.writeText "htoprc" ''
+            fields=0 48 17 18 38 39 40 2 46 47 49 1
+            sort_key=46
+            sort_direction=1
+            hide_threads=0
+            hide_kernel_threads=1
+            hide_userland_threads=0
+            shadow_other_users=1
+            show_thread_names=1
+            show_program_path=1
+            highlight_base_name=1
+            highlight_megabytes=1
+            highlight_threads=1
+            tree_view=1
+            header_margin=1
+            detailed_cpu_time=0
+            cpu_count_from_zero=0
+            update_process_names=0
+            account_guest_in_cpu_meter=1
+            color_scheme=6
+            delay=15
+            left_meters=LeftCPUs2 RightCPUs2 Memory Swap
+            left_meter_modes=1 1 1 1
+            right_meters=Uptime Tasks LoadAverage Battery
+            right_meter_modes=2 2 2 2
+          ''}
+          exec ${super.htop}/bin/htop "$@"
+        '')
+      ];
+    };
   };
 }
diff --git a/lass/2configs/mail.nix b/lass/2configs/mail.nix
index 41c7bceb2..5748b6eaf 100644
--- a/lass/2configs/mail.nix
+++ b/lass/2configs/mail.nix
@@ -113,12 +113,15 @@ let
     macro index ~ ,@( 'Toggle sidebar'      # toggle the sidebar
   '';
 
-  mutt = pkgs.concat "mutt" [
-    pkgs.neomutt
-    (pkgs.writeDashBin "mutt" ''
-      exec ${pkgs.neomutt}/bin/mutt -F ${muttrc} $@
-    '')
-  ];
+  mutt = pkgs.symlinkJoin {
+    name = "mutt";
+    paths = [
+      pkgs.neomutt
+      (pkgs.writeDashBin "mutt" ''
+        exec ${pkgs.neomutt}/bin/mutt -F ${muttrc} $@
+      '')
+    ];
+  };
 
 in {
   environment.systemPackages = [
diff --git a/lass/2configs/mc.nix b/lass/2configs/mc.nix
index 513ee1bd0..62fd52f3f 100644
--- a/lass/2configs/mc.nix
+++ b/lass/2configs/mc.nix
@@ -322,17 +322,20 @@ let
 
 in {
   environment.systemPackages = [
-    (pkgs.concat "mc" [
-      pkgs.mc
-      (pkgs.writeDashBin "mc" ''
-        export MC_DATADIR=${pkgs.writeOut "mc-ext" {
-            "/mc.ext".link = mcExt;
-            "/sfs.ini".text = "";
-        }};
-        export TERM=xterm-256color
-        exec ${pkgs.mc}/bin/mc -S xoria256 "$@"
-      '')
-    ])
+    (pkgs.symlinkJoin {
+      name = "mc";
+      paths = [
+        pkgs.mc
+        (pkgs.writeDashBin "mc" ''
+          export MC_DATADIR=${pkgs.writeOut "mc-ext" {
+              "/mc.ext".link = mcExt;
+              "/sfs.ini".text = "";
+          }};
+          export TERM=xterm-256color
+          exec ${pkgs.mc}/bin/mc -S xoria256 "$@"
+        '')
+      ];
+    })
   ];
 }
 
diff --git a/lass/2configs/mpv.nix b/lass/2configs/mpv.nix
index bb068e7a1..c8b590857 100644
--- a/lass/2configs/mpv.nix
+++ b/lass/2configs/mpv.nix
@@ -7,12 +7,15 @@ let
     delete
   ];
 
-  mpv = pkgs.concat "mpv" [
-    pkgs.mpv
-    (pkgs.writeDashBin "mpv" ''
-      exec ${pkgs.mpv}/bin/mpv --no-config --script=${scripts} "$@"
-    '')
-  ];
+  mpv = pkgs.symlinkJoin {
+    name = "mpv";
+    paths = [
+      pkgs.mpv
+      (pkgs.writeDashBin "mpv" ''
+        exec ${pkgs.mpv}/bin/mpv --no-config --script=${scripts} "$@"
+      '')
+    ];
+  };
 
   moveToDir = key: dir: pkgs.writeText "move-with-${key}.lua" ''
     tmp_dir = "${dir}"
diff --git a/lass/2configs/vim.nix b/lass/2configs/vim.nix
index 40f7eedde..b2b0c309a 100644
--- a/lass/2configs/vim.nix
+++ b/lass/2configs/vim.nix
@@ -207,14 +207,17 @@ let
     alldirs = attrValues dirs ++ map dirOf (attrValues files);
   in unique (sort lessThan alldirs);
 
-  vim = pkgs.concat "vim" [
-    pkgs.vim
-    (pkgs.writeDashBin "vim" ''
-      set -efu
-      (umask 0077; exec ${pkgs.coreutils}/bin/mkdir -p ${toString mkdirs})
-      exec ${pkgs.vim}/bin/vim "$@"
-    '')
-  ];
+  vim = pkgs.symlinkJoin {
+    name = "vim";
+    paths = [
+      pkgs.vim
+      (pkgs.writeDashBin "vim" ''
+        set -efu
+        (umask 0077; exec ${pkgs.coreutils}/bin/mkdir -p ${toString mkdirs})
+        exec ${pkgs.vim}/bin/vim "$@"
+      '')
+    ];
+  };
 
   hs.vim = pkgs.writeText "hs.vim" ''
     syn region String start=+\[[[:alnum:]]*|+ end=+|]+
diff --git a/makefu/1systems/iso.nix b/makefu/1systems/iso.nix
index 1e4f9c55f..c679241e5 100644
--- a/makefu/1systems/iso.nix
+++ b/makefu/1systems/iso.nix
@@ -32,19 +32,24 @@ with import <stockholm/lib>;
   # hack `tee` behavior
   nixpkgs.config.packageOverrides = super: {
     irc-announce = super.callPackage <stockholm/krebs/5pkgs/simple/irc-announce> {
-      pkgs = pkgs // { coreutils = pkgs.concat "coreutils-hack" [
-        pkgs.coreutils
-        (pkgs.writeDashBin "tee" ''
-          if test "$1" = /dev/stderr; then
-            while read -r line; do
-              echo "$line"
-              echo "$line" >&2
-            done
-          else
-            ${super.coreutils}/bin/tee "$@"
-          fi
-        '')
-      ];};
+      pkgs = pkgs // {
+        coreutils = pkgs.symlinkJoin {
+          name =  "coreutils-hack";
+          paths = [
+            pkgs.coreutils
+            (pkgs.writeDashBin "tee" ''
+              if test "$1" = /dev/stderr; then
+                while read -r line; do
+                  echo "$line"
+                  echo "$line" >&2
+                done
+              else
+                ${super.coreutils}/bin/tee "$@"
+              fi
+            '')
+          ];
+        };
+      };
     };
   };
 }
diff --git a/tv/2configs/htop.nix b/tv/2configs/htop.nix
index 409df2516..5d7e0272b 100644
--- a/tv/2configs/htop.nix
+++ b/tv/2configs/htop.nix
@@ -4,37 +4,40 @@ with import <stockholm/lib>;
 
 {
   nixpkgs.config.packageOverrides = super: {
-    htop = pkgs.concat "htop" [
-      super.htop
-      (pkgs.writeDashBin "htop" ''
-        export HTOPRC=${pkgs.writeText "htoprc" ''
-          fields=0 48 17 18 38 39 40 2 46 47 49 1
-          sort_key=46
-          sort_direction=1
-          hide_threads=0
-          hide_kernel_threads=1
-          hide_userland_threads=0
-          shadow_other_users=1
-          show_thread_names=1
-          show_program_path=1
-          highlight_base_name=1
-          highlight_megabytes=1
-          highlight_threads=1
-          tree_view=1
-          header_margin=1
-          detailed_cpu_time=0
-          cpu_count_from_zero=0
-          update_process_names=0
-          account_guest_in_cpu_meter=1
-          color_scheme=0
-          delay=15
-          left_meters=LeftCPUs2 RightCPUs2 Memory Swap
-          left_meter_modes=1 1 1 1
-          right_meters=Uptime Tasks LoadAverage Battery
-          right_meter_modes=2 2 2 2
-        ''}
-        exec ${super.htop}/bin/htop "$@"
-      '')
-    ];
+    htop = pkgs.symlinkJoin {
+      name = "htop";
+      paths = [
+        super.htop
+        (pkgs.writeDashBin "htop" ''
+          export HTOPRC=${pkgs.writeText "htoprc" ''
+            fields=0 48 17 18 38 39 40 2 46 47 49 1
+            sort_key=46
+            sort_direction=1
+            hide_threads=0
+            hide_kernel_threads=1
+            hide_userland_threads=0
+            shadow_other_users=1
+            show_thread_names=1
+            show_program_path=1
+            highlight_base_name=1
+            highlight_megabytes=1
+            highlight_threads=1
+            tree_view=1
+            header_margin=1
+            detailed_cpu_time=0
+            cpu_count_from_zero=0
+            update_process_names=0
+            account_guest_in_cpu_meter=1
+            color_scheme=0
+            delay=15
+            left_meters=LeftCPUs2 RightCPUs2 Memory Swap
+            left_meter_modes=1 1 1 1
+            right_meters=Uptime Tasks LoadAverage Battery
+            right_meter_modes=2 2 2 2
+          ''}
+          exec ${super.htop}/bin/htop "$@"
+        '')
+      ];
+    };
   };
 }
diff --git a/tv/2configs/vim.nix b/tv/2configs/vim.nix
index b534c3f42..93ed46dc8 100644
--- a/tv/2configs/vim.nix
+++ b/tv/2configs/vim.nix
@@ -297,18 +297,21 @@ let {
     alldirs = attrValues dirs ++ map dirOf (attrValues files);
   in unique (sort lessThan alldirs);
 
-  vim-wrapper = pkgs.concat "vim" [
-    pkgs.vim_configurable
-    (pkgs.writeDashBin "vim" ''
-      set -efu
-      (umask 0077; exec ${pkgs.coreutils}/bin/mkdir -p ${toString mkdirs})
-      if test $# = 0 && test -e "$PWD/.ctrlpignore"; then
-        set -- +CtrlP
-      fi
-      # vim-orgmode needs Python, thus vim_configurable instead of just vim
-      exec ${pkgs.vim_configurable}/bin/vim "$@"
-    '')
-  ];
+  vim-wrapper = pkgs.symlinkJoin {
+    name = "vim";
+    paths = [
+      pkgs.vim_configurable
+      (pkgs.writeDashBin "vim" ''
+        set -efu
+        (umask 0077; exec ${pkgs.coreutils}/bin/mkdir -p ${toString mkdirs})
+        if test $# = 0 && test -e "$PWD/.ctrlpignore"; then
+          set -- +CtrlP
+        fi
+        # vim-orgmode needs Python, thus vim_configurable instead of just vim
+        exec ${pkgs.vim_configurable}/bin/vim "$@"
+      '')
+    ];
+  };
 
   vimrc = pkgs.writeText "vimrc" ''
     set nocompatible