Created
August 24, 2022 15:53
-
-
Save cab404/970841d4dac4bf430fbe0e30d1e1e319 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ pkgs ? import <nixpkgs> { }, ... }: rec { | |
appendDerivation = f: f // { | |
__functor = self: arg: pkgs.runCommand "${f.pname}/S" self arg; | |
}; | |
runList = prev: cmd: pkgs.runCommand "command-list" | |
{ | |
# __functor = self: nextCommand: (if nextCommand == null then self else (runList self nextCommand)); | |
} '' | |
${restoreEnv prev} | |
${startEnv} | |
${cmd} | |
${saveEnv} | |
''; | |
dockerlike = { first ? startList, list }: | |
if list == [ ] | |
then first | |
else dockerlike { first = runList first (builtins.head list); list = builtins.tail list; } | |
; | |
startList = pkgs.runCommand "command-name" | |
{ } | |
'' | |
${startEnv} | |
${saveEnv} | |
''; | |
testList = dockerlike | |
{ | |
list = [ | |
"ls -hal > $out/test" | |
"export a=12" | |
"export b=42" | |
"echo $((a + b)) > $out/test2" | |
]; | |
}; | |
buildSomething = [ | |
"touch test" | |
"export A=12" | |
"echo $A > $out" | |
]; | |
system = "x86_64-linux"; | |
startEnv = '' | |
env | sort > $TMP/.startenv | |
''; | |
saveEnv = '' | |
mkdir -p $out | |
env | sort | comm - $TMP/.startenv -23 >> $out/.envdiff | |
''; | |
restoreEnv = from: '' | |
# having a fuse-overlayfs would be way better. | |
cp -r ${from} $out | |
chmod -R u+w $out | |
source ${from}/.envdiff | |
''; | |
testSaving = with pkgs; runCommand "agdaa" | |
{ } '' | |
${startEnv} | |
export ALEPH=mowmow | |
${saveEnv} | |
''; | |
runScript = { shell ? "/bin/sh", script, name ? "script", extra ? { } }: derivation | |
{ | |
inherit name system; | |
builder = shell; | |
args = [ | |
(builtins.toFile "builder-${name}.sh" script) | |
]; | |
} // extra; | |
runShScript = runScript { | |
name = "asdf"; | |
script = '' | |
export PATH=$PATH:${pkgs.coreutils} | |
touch test | |
''; | |
extra = { | |
buildInputs = [ pkgs.coreutils ]; | |
}; | |
}; | |
} | |
1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment