Nix-writers: Difference between revisions
imported>Lassulus Add nix-writers skeleton |
m Add category nix language |
||
(7 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
Nix-writers are a way to write other programming languages inline in nix-code. | Nix-writers are a way to write other programming languages inline in nix-code. | ||
They are like writeScript/writeScriptBin but for other languages. | |||
Every writer has a ...Bin variant which can be used inside environment.systemPackages. | Every writer has a ...Bin variant which can be used inside environment.systemPackages. | ||
Most of the writers take an attrributeset where one can add libraries. | Most of the writers take an attrributeset where one can add libraries. | ||
These are declared in [https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/writers/scripts.nix <code>/pkgs/build-support/writers/scripts.nix</code>]. | |||
== Languages == | == Languages == | ||
Line 14: | Line 16: | ||
pkgs.writers.writeBash "hello_world" '' | pkgs.writers.writeBash "hello_world" '' | ||
echo 'hello world!' | echo 'hello world!' | ||
'' | '' | ||
</syntaxHighlight> | </syntaxHighlight> | ||
Line 41: | Line 29: | ||
===Haskell=== | ===Haskell=== | ||
<syntaxHighlight lang=nix> | |||
writeHaskell "missiles" { | |||
libraries = [ pkgs.haskellPackages.acme-missiles ]; | |||
} '' | |||
import Acme.Missiles | |||
main = launchMissiles | |||
'' | |||
</syntaxHighlight> | |||
===JavaScript=== | ===JavaScript=== | ||
<syntaxHighlight lang=nix> | |||
writeJS "example" { | |||
libraries = [ 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); | |||
'' | |||
</syntaxHighlight> | |||
===Perl=== | ===Perl=== | ||
<syntaxHighlight lang=nix> | |||
writePerl "example" { | |||
libraries = [ pkgs.perlPackages.boolean ]; | |||
} '' | |||
use boolean; | |||
print "Howdy!\n" if true; | |||
'' | |||
</syntaxHighlight> | |||
===Python2=== | ===Python2=== | ||
<syntaxHighlight lang=nix> | |||
writePython2 "test_python2" { | |||
deps = [ pkgs.python2Packages.enum ]; | |||
} '' | |||
from enum import Enum | |||
class Test(Enum): | |||
a = "success" | |||
print Test.a | |||
'' | |||
</syntaxHighlight> | |||
===Python3=== | ===Python3=== | ||
<syntaxHighlight lang=nix> | |||
writePython3 "test_python3" { | |||
libraries = [ pkgs.python3Packages.pyyaml ]; | |||
} '' | |||
import yaml | |||
y = yaml.load(""" | |||
- test: success | |||
""") | |||
print(y[0]['test']) | |||
'' | |||
</syntaxHighlight> | |||
To disable errors use 'flakeIgnore' like this: | |||
<syntaxHighlight lang=nix> | |||
writePython3 "test_python3" { | |||
libraries = [ pkgs.python3Packages.pyyaml ]; | |||
flakeIgnore = [ "E265" "E225" ]; | |||
} '' | |||
import yaml | |||
y = yaml.load(""" | |||
- test: success | |||
""") | |||
print(y[0]['test']) | |||
'' | |||
</syntaxHighlight> | |||
[[Category:Nix Language]] |