Nix-writers: Difference between revisions

imported>Lassulus
Add nix-writers skeleton
 
Pigs (talk | contribs)
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.
Basically it's like writeScript/writeScriptBin but for other Languages.
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>
===C===
<syntaxHighlight lang=nix>
pkgs.writers.writeC "hello-world-ncurses" { libraries = [ pkgs.ncurses ]; } ''
  #include <ncurses.h>
  int main() {
    initscr();
    printw("Hello World !!!");
    refresh(); endwin();
    return 0;
  }
''
''
</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]]