summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'krebs/5pkgs')
-rw-r--r--krebs/5pkgs/Reaktor/plugins.nix3
-rw-r--r--krebs/5pkgs/builders.nix86
-rw-r--r--krebs/5pkgs/git-hooks/default.nix3
-rw-r--r--krebs/5pkgs/hashPassword/default.nix3
-rw-r--r--krebs/5pkgs/krebspaste/default.nix9
-rw-r--r--krebs/5pkgs/pssh/default.nix5
6 files changed, 53 insertions, 56 deletions
diff --git a/krebs/5pkgs/Reaktor/plugins.nix b/krebs/5pkgs/Reaktor/plugins.nix
index 0f61688e3..a483db32c 100644
--- a/krebs/5pkgs/Reaktor/plugins.nix
+++ b/krebs/5pkgs/Reaktor/plugins.nix
@@ -74,8 +74,7 @@ rec {
};
nixos-version = buildSimpleReaktorPlugin "nixos-version" {
- script = pkgs.writeScript "nixos-version" ''
- #! /bin/sh
+ script = pkgs.writeDash "nixos-version" ''
. /etc/os-release
echo "$PRETTY_NAME"
'';
diff --git a/krebs/5pkgs/builders.nix b/krebs/5pkgs/builders.nix
index 8ba0ab5a7..924e0c086 100644
--- a/krebs/5pkgs/builders.nix
+++ b/krebs/5pkgs/builders.nix
@@ -2,16 +2,16 @@
with config.krebs.lib;
rec {
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
- in writeC name { inherit destination; } ''
+ in writeC name { inherit destination; } /* c */ ''
#include <unistd.h>
static char *const filename = ${toC filename};
${if argv == null
- then /* Propagate arguments */ ''
+ then /* Propagate arguments */ /* c */ ''
#define MAIN_ARGS int argc, char **argv
''
- else /* Provide fixed arguments */ ''
+ else /* Provide fixed arguments */ /* c */ ''
#define MAIN_ARGS void
static char *const argv[] = ${toC (argv ++ [null])};
''}
@@ -28,22 +28,22 @@ rec {
execveBin = name: cfg: execve name (cfg // { destination = "/bin/${name}"; });
- writeBash = name: text: pkgs.writeScript name ''
- #! ${pkgs.bash}/bin/bash
- ${text}
- '';
+ makeScriptWriter = interpreter: name: text:
+ assert (with types; either absolute-pathname filename).check name;
+ pkgs.writeOut (baseNameOf name) {
+ ${optionalString (types.absolute-pathname.check name) name} = {
+ executable = true;
+ text = "#! ${interpreter}\n${text}";
+ };
+ };
- writeBashBin = name: text: pkgs.writeTextFile {
- executable = true;
- destination = "/bin/${name}";
- name = name;
- text = ''
- #! ${pkgs.bash}/bin/bash
- ${text}
- '';
- };
+ writeBash = makeScriptWriter "${pkgs.bash}/bin/bash";
- writeC = name: { destination ? "" }: src: pkgs.runCommand name {} ''
+ writeBashBin = name:
+ assert types.filename.check name;
+ pkgs.writeBash "/bin/${name}";
+
+ writeC = name: { destination ? "" }: src: pkgs.runCommand name {} /* sh */ ''
PATH=${makeBinPath (with pkgs; [
binutils
coreutils
@@ -56,37 +56,39 @@ rec {
strip --strip-unneeded "$exe"
'';
- writeDash = name: text: pkgs.writeScript name ''
- #! ${pkgs.dash}/bin/dash
- ${text}
- '';
+ writeDash = makeScriptWriter "${pkgs.dash}/bin/dash";
- writeDashBin = name: text: pkgs.writeTextFile {
- executable = true;
- destination = "/bin/${name}";
- name = name;
- text = ''
- #! ${pkgs.dash}/bin/dash
- ${text}
- '';
- };
+ writeDashBin = name:
+ assert types.filename.check name;
+ pkgs.writeDash "/bin/${name}";
writeEximConfig = name: text: pkgs.runCommand name {
inherit text;
passAsFile = [ "text" ];
- } ''
+ } /* sh */ ''
# TODO validate exim config even with config.nix.useChroot == true
# currently doing so will fail because "user exim was not found"
#${pkgs.exim}/bin/exim -C "$textPath" -bV >/dev/null
mv "$textPath" $out
'';
- writeFiles = name: specs0:
+ writeOut = name: specs0:
let
- specs = mapAttrsToList (path: spec0: {
- path = assert types.pathname.check path; path;
+ specs = mapAttrsToList (path0: spec0: rec {
+ path = guard {
+ type = types.pathname;
+ value = path0;
+ };
var = "file_${hashString "sha1" path}";
text = spec0.text;
+ executable = guard {
+ type = types.bool;
+ value = spec0.executable or false;
+ };
+ mode = guard {
+ type = types.file-mode;
+ value = spec0.mode or (if executable then "0755" else "0644");
+ };
}) specs0;
filevars = genAttrs' specs (spec: nameValuePair spec.var spec.text);
@@ -97,7 +99,7 @@ rec {
set -efu
PATH=${makeBinPath [pkgs.coreutils]}
${concatMapStrings (spec: /* sh */ ''
- install -D ''$${spec.var}Path $out${spec.path}
+ install -m ${spec.mode} -D ''$${spec.var}Path $out${spec.path}
'') specs}
'';
@@ -119,7 +121,7 @@ rec {
isExecutable = executables != {};
isLibrary = library != null;
- cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
+ cabal-file = pkgs.writeText "${name}-${version}.cabal" /* cabal */ ''
build-type: Simple
cabal-version: >= 1.2
name: ${name}
@@ -135,7 +137,7 @@ rec {
, text
, ... }:
if types.filename.check exe-name
- then "install -D ${file} $out/${relpath}"
+ then /* sh */ "install -D ${file} $out/${relpath}"
else throw "argument ‘exe-name’ is not a ${types.filename.name}";
exe-section =
@@ -145,7 +147,7 @@ rec {
, file ? pkgs.writeText "${name}-${exe-name}.hs" text
, relpath ? "${exe-name}.hs"
, text
- , ... }: ''
+ , ... }: /* cabal */ ''
executable ${exe-name}
build-depends: ${concatStringsSep "," build-depends}
ghc-options: ${toString ghc-options}
@@ -168,7 +170,7 @@ rec {
{ build-depends ? base-depends ++ extra-depends
, extra-depends ? []
, exposed-modules
- , ... }: ''
+ , ... }: /* cabal */ ''
library
build-depends: ${concatStringsSep "," build-depends}
ghc-options: ${toString ghc-options}
@@ -182,7 +184,7 @@ rec {
, text
, ... }:
if types.haskell.modid.check mod-name
- then "install -D ${file} $out/${relpath}"
+ then /* sh */ "install -D ${file} $out/${relpath}"
else throw "argument ‘mod-name’ is not a ${types.haskell.modid.name}";
in
haskellPackages.mkDerivation {
@@ -196,7 +198,7 @@ rec {
(optionals isLibrary (get-depends library))
haskellPackages;
pname = name;
- src = pkgs.runCommand "${name}-${version}-src" {} ''
+ src = pkgs.runCommand "${name}-${version}-src" {} /* sh */ ''
install -D ${cabal-file} $out/${cabal-file.name}
${optionalString isLibrary (lib-install library)}
${concatStringsSep "\n" (mapAttrsToList exe-install executables)}
@@ -208,7 +210,7 @@ rec {
"The function `writeNixFromCabal` has been deprecated in favour of"
"`writeHaskell`."
])
- (name: path: pkgs.runCommand name {} ''
+ (name: path: pkgs.runCommand name {} /* sh */ ''
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
'');
}
diff --git a/krebs/5pkgs/git-hooks/default.nix b/krebs/5pkgs/git-hooks/default.nix
index 3aba90535..c8e8c8f53 100644
--- a/krebs/5pkgs/git-hooks/default.nix
+++ b/krebs/5pkgs/git-hooks/default.nix
@@ -101,8 +101,7 @@ let
fi
'';
- irc-announce-script = pkgs.writeScript "irc-announce-script" ''
- #! /bin/sh
+ irc-announce-script = pkgs.writeDash "irc-announce-script" ''
set -euf
export PATH=${makeSearchPath "bin" (with pkgs; [
diff --git a/krebs/5pkgs/hashPassword/default.nix b/krebs/5pkgs/hashPassword/default.nix
index 6a7c51c57..3da65ad79 100644
--- a/krebs/5pkgs/hashPassword/default.nix
+++ b/krebs/5pkgs/hashPassword/default.nix
@@ -1,7 +1,6 @@
{ lib, pkgs, ... }:
-pkgs.writeScriptBin "hashPassword" ''
- #! /bin/sh
+pkgs.writeDashBin "hashPassword" ''
# usage: hashPassword
set -euf
diff --git a/krebs/5pkgs/krebspaste/default.nix b/krebs/5pkgs/krebspaste/default.nix
index fb318af83..dd7616a05 100644
--- a/krebs/5pkgs/krebspaste/default.nix
+++ b/krebs/5pkgs/krebspaste/default.nix
@@ -1,7 +1,6 @@
-{ writeScriptBin, pkgs }:
+{ writeDashBin, bepasty-client-cli }:
-# TODO: use `wrapProgram --add-flags` instead?
-writeScriptBin "krebspaste" ''
- #! /bin/sh
- exec ${pkgs.bepasty-client-cli}/bin/bepasty-cli --url http://paste.retiolum "$@"
+# TODO use `execve` instead?
+writeDashBin "krebspaste" ''
+ exec ${bepasty-client-cli}/bin/bepasty-cli --url http://paste.retiolum "$@"
''
diff --git a/krebs/5pkgs/pssh/default.nix b/krebs/5pkgs/pssh/default.nix
index fd48d3e7c..2676af0cf 100644
--- a/krebs/5pkgs/pssh/default.nix
+++ b/krebs/5pkgs/pssh/default.nix
@@ -1,7 +1,6 @@
-{ writeScriptBin }:
+{ writeDashBin }:
-writeScriptBin "pssh" ''
- #! /bin/sh
+writeDashBin "pssh" ''
set -efu
case ''${1-} in