|
1 | 1 | { |
2 | | - description = '' |
3 | | - Tiny lua module to write shell scripts with lua (inspired by zserge/luash) |
4 | | -
|
5 | | - Also exports runLuaCommand, which is pkgs.runCommand but the command is in lua and uses shelua |
6 | | - ''; |
7 | | - inputs = { |
8 | | - nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; |
9 | | - n2l.url = "github:BirdeeHub/nixToLua"; |
10 | | - }; |
11 | | - outputs = { nixpkgs, n2l, ... }: let |
12 | | - forAllSys = nixpkgs.lib.genAttrs nixpkgs.lib.platforms.all; |
13 | | - overlay = final: prev: { |
14 | | - shelua = prev.callPackage ./. { lua = prev.lua5_2; }; |
15 | | - runLuaCommand = prev.callPackage ./nix { inherit n2l; }; |
16 | | - }; |
17 | | - overlay1 = final: prev: { |
18 | | - shelua = prev.callPackage ./. { lua = prev.lua5_2; }; |
| 2 | + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; |
| 3 | + outputs = { self, ... }@inputs: let |
| 4 | + lib = inputs.pkgs.lib or inputs.nixpkgs.lib or (import "${inputs.nixpkgs or <nixpkgs>}/lib"); |
| 5 | + forAllSys = lib.genAttrs lib.platforms.all; |
| 6 | + getPkgs = system: overlays: if inputs.pkgs.stdenv.hostPlatform.system or null == system then |
| 7 | + if builtins.isList overlays && overlays != [] then |
| 8 | + inputs.pkgs.appendOverlays overlays |
| 9 | + else |
| 10 | + inputs.pkgs |
| 11 | + else |
| 12 | + import (inputs.pkgs.path or inputs.nixpkgs or <nixpkgs>) { |
| 13 | + inherit system; |
| 14 | + overlays = (if builtins.isList overlays then overlays else []) ++ inputs.pkgs.overlays or []; |
| 15 | + config = inputs.pkgs.config or {}; |
| 16 | + }; |
| 17 | + mapAttrsToList = f: attrs: builtins.attrValues (builtins.mapAttrs f attrs); |
| 18 | + l_pkg_enum = { |
| 19 | + lua5_1 = "lua51Packages"; |
| 20 | + lua5_2 = "lua52Packages"; |
| 21 | + lua5_3 = "lua53Packages"; |
| 22 | + lua5_4 = "lua54Packages"; |
| 23 | + lua5_5 = "lua55Packages"; |
| 24 | + luajit = "luajitPackages"; |
| 25 | + lua = "luaPackages"; |
19 | 26 | }; |
20 | | - overlay2 = final: prev: { |
21 | | - runLuaCommand = prev.callPackage ./nix { inherit n2l; }; |
| 27 | + APPNAME = "shelua"; |
| 28 | + overlay = final: prev: let |
| 29 | + luaCallPackageFn = { buildLuarocksPackage, }: |
| 30 | + buildLuarocksPackage { |
| 31 | + pname = APPNAME; |
| 32 | + version = "scm-1"; |
| 33 | + src = self; |
| 34 | + }; |
| 35 | + # lua5_1 = prev.lua5_1.override { packageOverrides }; |
| 36 | + l_pkg_main = builtins.mapAttrs ( |
| 37 | + n: _: (prev.lib.attrByPath [ n "override" ] null prev) { |
| 38 | + packageOverrides = luaself: luaprev: { |
| 39 | + ${APPNAME} = luaself.callPackage luaCallPackageFn {}; |
| 40 | + }; |
| 41 | + } |
| 42 | + ) l_pkg_enum; |
| 43 | + # lua51Packages = final.lua5_1.pkgs; |
| 44 | + l_pkg_sets = builtins.listToAttrs ( |
| 45 | + mapAttrsToList ( |
| 46 | + n: v: { |
| 47 | + name = v; |
| 48 | + value = prev.lib.attrByPath [ n "pkgs" ] null final; |
| 49 | + } |
| 50 | + ) l_pkg_enum |
| 51 | + ); |
| 52 | + in l_pkg_main // l_pkg_sets // { |
| 53 | + vimPlugins = prev.vimPlugins // { |
| 54 | + ${APPNAME} = (final.neovimUtils.buildNeovimPlugin { pname = APPNAME; }).overrideAttrs { |
| 55 | + luarocksConfig = { |
| 56 | + lua_modules_path = "lua"; |
| 57 | + lib_modules_path = "lua"; |
| 58 | + }; |
| 59 | + }; |
| 60 | + }; |
22 | 61 | }; |
23 | | - in { |
24 | | - overlays.default = overlay; |
25 | | - overlays.shelua = overlay1; |
26 | | - overlays.runLuaCommand = overlay2; |
27 | | - legacyPackages = forAllSys (system: let |
28 | | - pkgs = import nixpkgs { inherit system; overlays = [ overlay2 ]; }; |
29 | | - in { |
30 | | - inherit (pkgs) runLuaCommand; |
31 | | - }); |
32 | 62 | packages = forAllSys (system: let |
33 | | - pkgs = import nixpkgs { inherit system; overlays = [ overlay1 ]; }; |
34 | | - in nixpkgs.lib.pipe (with pkgs; [ lua5_1 lua5_2 lua5_3 lua5_4 luajit ]) [ |
35 | | - (builtins.map (li: { name = "she" + li.luaAttr; value = pkgs.shelua.override { lua = li; }; })) |
36 | | - builtins.listToAttrs |
37 | | - ] // { |
38 | | - default = pkgs.shelua; |
| 63 | + pkgs = getPkgs system [ overlay ]; |
| 64 | + in ( |
| 65 | + with builtins; listToAttrs ( |
| 66 | + map (n: { |
| 67 | + name = "she${n}"; |
| 68 | + value = pkgs.lib.attrByPath [ n "pkgs" APPNAME ] null pkgs; |
| 69 | + }) (attrNames l_pkg_enum) |
| 70 | + ) |
| 71 | + ) // { |
| 72 | + default = pkgs.vimPlugins.${APPNAME}; |
| 73 | + "vimPlugins-${APPNAME}" = pkgs.vimPlugins.${APPNAME}; |
39 | 74 | }); |
| 75 | + runLuaCommandOverlay = final: prev: { runLuaCommand = final.callPackage ./nix {}; }; |
| 76 | + in { |
| 77 | + overlays.default = overlay; |
| 78 | + overlays.runLuaCommand = runLuaCommandOverlay; |
| 79 | + legacyPackages = forAllSys (system: { inherit (getPkgs system [ runLuaCommandOverlay ]) runLuaCommand; }); |
| 80 | + inherit packages; |
| 81 | + checks = forAllSys (system: import ./tests/tests.nix (getPkgs system [ overlay runLuaCommandOverlay ])); |
40 | 82 | devShells = forAllSys (system: let |
41 | | - pkgs = import nixpkgs { inherit system; overlays = [ overlay ]; }; |
| 83 | + pkgs = getPkgs system []; |
| 84 | + lua = pkgs.luajit.withPackages (lp: [ lp.inspect lp.cjson lp.toml-edit lp.luarocks ]); |
42 | 85 | in { |
43 | 86 | default = pkgs.mkShell { |
44 | | - name = "testshell"; |
45 | | - packages = with pkgs; [ bear ]; |
46 | | - inputsFrom = [ ]; |
47 | | - luaInterpreter = (pkgs.lua5_2.withPackages (ps: with ps; [inspect])).interpreter; |
| 87 | + name = "${APPNAME}-dev"; |
| 88 | + packages = [ lua ]; |
| 89 | + LUA_INCDIR = "${lua}/include"; |
| 90 | + LUA = lua.interpreter; |
| 91 | + BEAR = "${pkgs.bear}/bin/bear"; |
48 | 92 | shellHook = '' |
49 | | - make_cc() { |
50 | | - pushd "$(git rev-parse --show-toplevel || echo ".")" |
51 | | - mkdir -p ./build |
52 | | - bear -- $CC -O2 -fPIC -shared -o ./build/env.so ./nix/env.c -I"$(dirname $luaInterpreter)/../include" "$@" |
53 | | - popd |
54 | | - } |
| 93 | + [ "$(whoami)" == "birdee" ] && exec zsh |
55 | 94 | ''; |
56 | 95 | }; |
57 | 96 | }); |
58 | | - checks = forAllSys (system: let |
59 | | - pkgs = import nixpkgs { inherit system; overlays = [ overlay ]; }; |
60 | | - mkBuildTest = lua: let |
61 | | - luapath = (lua.withPackages (ps: with ps; [inspect (pkgs.shelua.override { luapkgs = ps; })])).interpreter; |
62 | | - in pkgs.runCommand ("shelua_package_test-" + lua.luaAttr) {} '' |
63 | | - echo 'package.path = package.path .. ";${./tests}/?.lua"; require("test")' | ${luapath} - > "$out" |
64 | | - ''; |
65 | | - mkCmdTest = lua: pkgs.runLuaCommand ("runLuaCommand_test-" + lua.luaAttr) (lua.withPackages (ps: with ps; [inspect])).interpreter { |
66 | | - nativeBuildInputs = [ pkgs.makeWrapper ]; |
67 | | - passthru = { |
68 | | - testdata = [ "some" "values" ]; |
69 | | - notincluded = system: builtins.trace system system; |
70 | | - }; |
71 | | - } /*lua*/'' |
72 | | - local inspect = require('inspect') |
73 | | - local outbin = out .. "/bin" |
74 | | - local outfile = outbin .. "/testpkg" |
75 | | - local outdrv = outbin .. "/testdrv" |
76 | | - local outcat = outbin .. "/newcat" |
77 | | - local outecho = outbin .. "/newecho" |
78 | | - sh.mkdir("-p", outbin) |
79 | | - os.env.FRIEND = "everyone" |
80 | | - assert(os.getenv("FRIEND") == os.env.FRIEND, "os.env failed") |
81 | | - print(os.getenv("FRIEND")) |
82 | | - os.write_file({}, outfile, [[#!${pkgs.bash}/bin/bash]]) |
83 | | - os.write_file({ append = true, }, outfile, [[echo "hello world!"]]) |
84 | | - os.write_file({ append = true, }, outfile, [[cat ]] .. outdrv) |
85 | | - os.write_file({ append = true, }, outfile, outcat) |
86 | | - os.write_file({}, outdrv, inspect(drv)) |
87 | | - sh.escape_args = true |
88 | | - sh.makeWrapper([[${pkgs.writeShellScript "testscript" ''echo "$@"''}]], outecho, "--add-flags", "testingtesting '1 2' 3") |
89 | | - sh.escape_args = false |
90 | | - sh.makeWrapper([[${pkgs.coreutils}/bin/cat]], outcat, "--add-flags", outecho) |
91 | | - sh.chmod("+x", outfile) |
92 | | - dofile("${./example.lua}") |
93 | | - package.path = package.path .. ";${./tests}/?.lua" |
94 | | - require("test") |
95 | | - ''; |
96 | | - run_on = with pkgs; [ lua5_1 lua5_2 lua5_3 lua5_4 luajit ]; |
97 | | - in nixpkgs.lib.pipe run_on [ |
98 | | - (builtins.map (li: { name = "runLuaCommand-" + li.luaAttr; value = mkCmdTest li; })) |
99 | | - builtins.listToAttrs |
100 | | - ] // (nixpkgs.lib.pipe run_on [ |
101 | | - (builtins.map (li: { name = "withPackages-" + li.luaAttr; value = mkBuildTest li; })) |
102 | | - builtins.listToAttrs |
103 | | - ])); |
104 | 97 | }; |
105 | 98 | } |
0 commit comments