diff options
-rw-r--r-- | pkgs/default.nix | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix index a56042c..084702d 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -54,6 +54,14 @@ pkgs: oldpkgs: { execBin = name: cfg: pkgs.exec name (cfg // { destination = "/bin/${name}"; }); + /* Base implementation for non-compiled executables. + Takes an interpreter, for example `${pkgs.bash}/bin/bash` + + Examples: + writebash = makeScriptWriter { interpreter = "${pkgs.bash}/bin/bash"; } + makeScriptWriter { interpreter = "${pkgs.dash}/bin/dash"; } "hello" "echo hello world" + */ + makeScriptWriter = { interpreter, check ? null }: name: text: assert (with types; either absolute-pathname filename).check name; pkgs.write (baseNameOf name) { @@ -64,6 +72,22 @@ pkgs: oldpkgs: { }; }; + /* Take a name and specification and build a derivation out of it + Examples: + write "name" { "/etc/test" = { text = "hello world"; }; } + + write "name" { "" = { executable = true; text = "echo hello world"; }; } + + write "name" { "/bin/test" = { executable = true; text = "echo hello world"; }; } + + write "name" { "" = { executable = true; + check = "${pkgs.shellcheck}/bin/shellcheck"; + text = '' + #!/bin/sh + echo hello world + ''; + }; } + */ write = name: specs0: let env = filevars // { passAsFile = attrNames filevars; }; @@ -133,6 +157,13 @@ pkgs: oldpkgs: { ) ''; + /* Like writeScript but the first line is a shebang to bash + + Example: + writeBash "example" '' + echo hello world + '' + */ writeBash = name: text: assert (with types; either absolute-pathname filename).check name; pkgs.write (baseNameOf name) { |