Merge remote-tracking branch 'lass/master'
This commit is contained in:
27
ci.nix
Normal file
27
ci.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
|
||||
hello_worlds = import examples/hello_world.nix;
|
||||
simples = import examples/simple.nix;
|
||||
|
||||
writeTest = expectedValue: test: pkgs.writeScript "test" ''
|
||||
#!/bin/sh
|
||||
if test "$(${test})" != "${expectedValue}"; then
|
||||
echo 'test ${test} failed'
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
|
||||
in
|
||||
pkgs.lib.mapAttrs' (n: v: pkgs.lib.nameValuePair "hello_${n}" (writeTest "hello world" v)) hello_worlds //
|
||||
pkgs.lib.mapAttrs' (n: v: pkgs.lib.nameValuePair "simple_${n}" v) {
|
||||
bash = writeTest "bash features" simples.bash;
|
||||
dash = writeTest "dash features" simples.dash;
|
||||
haskell = writeTest "Rolf" simples.haskell;
|
||||
js = writeTest "function add(n,d){return n+d}" simples.js;
|
||||
perl = writeTest "Howdy!" simples.perl;
|
||||
python2 = writeTest "['some', 'random', 'variables']" simples.python2;
|
||||
python3 = writeTest "['some', 'random', 'variables']" simples.python3;
|
||||
sed = writeTest "hello world" simples.sed;
|
||||
}
|
||||
|
||||
36
examples/hello_world.nix
Normal file
36
examples/hello_world.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
let
|
||||
pkgs = import <nixpkgs> { overlays = [ (import ../pkgs) ]; };
|
||||
in {
|
||||
bash = pkgs.writeBash "hello-world" ''
|
||||
echo 'hello world'
|
||||
'';
|
||||
c = pkgs.writeC "hello-world" {} ''
|
||||
#include <stdio.h>
|
||||
int main() {
|
||||
printf("hello world\n");
|
||||
return 0;
|
||||
}
|
||||
'';
|
||||
dash = pkgs.writeDash "hello-world" ''
|
||||
echo 'hello world'
|
||||
'';
|
||||
haskell = pkgs.writeHaskell "hello-world" [] ''
|
||||
main = do
|
||||
putStrLn "hello world"
|
||||
'';
|
||||
js = pkgs.writeJS "hello-world" {} ''
|
||||
console.log("hello world")
|
||||
'';
|
||||
perl = pkgs.writePerl "hello-world" {} ''
|
||||
print "hello world\n";
|
||||
'';
|
||||
python2 = pkgs.writePython2 "hello-world" {} ''
|
||||
print "hello world"
|
||||
'';
|
||||
python3 = pkgs.writePython3 "hello-world" {} ''
|
||||
print("hello world")
|
||||
'';
|
||||
sed = pkgs.writeDash "sed-example" ''
|
||||
echo xxx | ${pkgs.writeSed "hello-world" "s/xxx/hello world/"}
|
||||
'';
|
||||
}
|
||||
48
examples/simple.nix
Normal file
48
examples/simple.nix
Normal file
@@ -0,0 +1,48 @@
|
||||
let
|
||||
pkgs = import <nixpkgs> { overlays = [ (import ../pkgs) ]; };
|
||||
in {
|
||||
bash = pkgs.writeBash "simple.sh" ''
|
||||
if [[ "test" == "test" ]]; then echo "bash features"; fi
|
||||
'';
|
||||
# cc -L/nix/store/...blah/lib -I/nix/store/...blah/include
|
||||
dash = pkgs.writeDash "simple" ''
|
||||
test '~' = '~' && echo 'dash features'
|
||||
'';
|
||||
haskell = pkgs.writeHaskell "simple" [ "acme-cuteboy" ] ''
|
||||
import Acme.CuteBoy
|
||||
|
||||
main :: IO ()
|
||||
main = print Rolf
|
||||
'';
|
||||
js = pkgs.writeJS "example-js" { deps = [ pkgs.nodePackages.uglify-js ]; } ''
|
||||
var UglifyJS = require("uglify-js");
|
||||
var code = "function add(first, second) { return first + second; }";
|
||||
var result = UglifyJS.minify(code);
|
||||
console.log(result.code);
|
||||
'';
|
||||
perl = pkgs.writePerl "simple.pl" { deps = [ pkgs.perlPackages.boolean ]; } ''
|
||||
use boolean;
|
||||
print "Howdy!\n" if true;
|
||||
'';
|
||||
python2 = pkgs.writePython2 "simple.py" { deps = [ pkgs.python2Packages.pyyaml ]; } ''
|
||||
import yaml
|
||||
|
||||
print yaml.load("""
|
||||
- some
|
||||
- random
|
||||
- variables
|
||||
""")
|
||||
'';
|
||||
python3 = pkgs.writePython3 "simple.py" { deps = [ pkgs.python3Packages.pyyaml ]; } ''
|
||||
import yaml
|
||||
|
||||
print(yaml.load("""
|
||||
- some
|
||||
- random
|
||||
- variables
|
||||
"""))
|
||||
'';
|
||||
sed = pkgs.writeDash "sed-example" ''
|
||||
echo hello | ${pkgs.writeSed "hello-world" "s/hello/& world/"}
|
||||
'';
|
||||
}
|
||||
@@ -303,6 +303,23 @@ pkgs: oldpkgs: {
|
||||
};
|
||||
};
|
||||
|
||||
writeJS = name: { deps ? [] }: text:
|
||||
let
|
||||
node-env = pkgs.buildEnv {
|
||||
name = "node";
|
||||
paths = deps;
|
||||
pathsToLink = [
|
||||
"/lib/node_modules"
|
||||
];
|
||||
};
|
||||
in pkgs.writeDash name ''
|
||||
export NODE_PATH=${node-env}/lib/node_modules
|
||||
exec ${pkgs.nodejs}/bin/node ${pkgs.writeText "js" text}
|
||||
'';
|
||||
|
||||
writeJSBin = name:
|
||||
pkgs.writeJS "/bin/${name}";
|
||||
|
||||
writeJSON = name: value: pkgs.runCommand name {
|
||||
json = toJSON value;
|
||||
passAsFile = [ "json" ];
|
||||
@@ -319,6 +336,23 @@ pkgs: oldpkgs: {
|
||||
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
||||
'');
|
||||
|
||||
writePerl = name: { deps ? [] }:
|
||||
let
|
||||
perl-env = pkgs.buildEnv {
|
||||
name = "perl-environment";
|
||||
paths = deps;
|
||||
pathsToLink = [
|
||||
"/lib/perl5/site_perl"
|
||||
];
|
||||
};
|
||||
in
|
||||
pkgs.makeScriptWriter {
|
||||
interpreter = "${pkgs.perl}/bin/perl -I ${perl-env}/lib/perl5/site_perl";
|
||||
} name;
|
||||
|
||||
writePerlBin = name:
|
||||
pkgs.writePerl "/bin/${name}";
|
||||
|
||||
writePython2 = name: { deps ? [], flakeIgnore ? [] }:
|
||||
let
|
||||
py = pkgs.python2.withPackages (ps: deps);
|
||||
|
||||
Reference in New Issue
Block a user