Skip to content

Instantly share code, notes, and snippets.

@cab404
Created August 24, 2022 15:53
Show Gist options
  • Save cab404/970841d4dac4bf430fbe0e30d1e1e319 to your computer and use it in GitHub Desktop.
Save cab404/970841d4dac4bf430fbe0e30d1e1e319 to your computer and use it in GitHub Desktop.
{ 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