summaryrefslogtreecommitdiffstats
path: root/krebs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2017-03-07 21:48:25 +0100
committertv <tv@krebsco.de>2017-03-07 21:48:25 +0100
commit0edb13f3fc16e6456e5deb4e006595491a6b197e (patch)
tree981ab325c32ef18286c75383ee1f1904599fb39d /krebs
parentc05db2409061f721ba454f4bf79e635ee13a6f11 (diff)
concat: init
Diffstat (limited to 'krebs')
-rw-r--r--krebs/5pkgs/writers.nix26
1 files changed, 26 insertions, 0 deletions
diff --git a/krebs/5pkgs/writers.nix b/krebs/5pkgs/writers.nix
index 65ee14485..e1dbed5c7 100644
--- a/krebs/5pkgs/writers.nix
+++ b/krebs/5pkgs/writers.nix
@@ -2,6 +2,32 @@
with import <stockholm/lib>;
{
nixpkgs.config.packageOverrides = _: {
+
+ # 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>