Skip to content

Commit 21b1f4e

Browse files
committed
ci(flake): improve flake.nix
improve overlay creation
1 parent 71b0331 commit 21b1f4e

2 files changed

Lines changed: 45 additions & 43 deletions

File tree

flake.nix

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,56 +14,50 @@
1414
overlays = (if builtins.isList overlays then overlays else []) ++ inputs.pkgs.overlays or [];
1515
config = inputs.pkgs.config or {};
1616
};
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";
26-
};
2717
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) (old: {
38-
packageOverrides = luaself: luaprev: (
39-
(if old ? packageOverrides then old.packageOverrides luaself luaprev else {}) // {
40-
${APPNAME} = luaself.callPackage luaCallPackageFn {};
41-
}
42-
);
43-
})
44-
) l_pkg_enum;
45-
# lua51Packages = final.lua5_1.pkgs;
46-
l_pkg_sets = builtins.listToAttrs (
47-
mapAttrsToList (
48-
n: v: {
49-
name = v;
50-
value = prev.lib.attrByPath [ n "pkgs" ] null final;
18+
l_pkg_enum = [ "lua5_1" "lua5_2" "lua5_3" "lua5_4" "lua5_5" "luajit" "lua" ];
19+
mkLuaOverlay = { packageOverrides, vimPlugins ? null, versions ? [], controlType ? "exclude", ... }:
20+
assert builtins.isList versions || throw "lua versions must be a list of strings containing `lua.luaAttr` names corresponding to `pkgs.luaInterpreters`!";
21+
assert controlType == "build" || controlType == "exclude" || throw ''controlType must be "build" or "exclude"'';
22+
final: prev: {
23+
luaInterpreters = prev.luaInterpreters // prev.lib.pipe (
24+
if controlType == "build" then
25+
prev.lib.intersectLists versions (builtins.attrNames prev.luaInterpreters)
26+
else
27+
builtins.filter (x: !builtins.elem x versions) (builtins.attrNames prev.luaInterpreters)
28+
) [
29+
(map (v: prev.lib.nameValuePair v packageOverrides))
30+
builtins.listToAttrs
31+
(builtins.mapAttrs (
32+
n: new: prev.luaInterpreters.${n}.override (old: {
33+
packageOverrides = prev.lib.composeExtensions (old.packageOverrides or (_: _: {})) new;
34+
})
35+
))
36+
];
37+
${if prev.lib.isFunction vimPlugins then "vimPlugins" else null} = prev.vimPlugins // vimPlugins final prev;
38+
};
39+
overlay = mkLuaOverlay {
40+
packageOverrides = luaself: luaprev: {
41+
${APPNAME} = luaself.callPackage (
42+
{ buildLuarocksPackage, }: buildLuarocksPackage {
43+
pname = APPNAME;
44+
version = "scm-1";
45+
src = self;
5146
}
52-
) l_pkg_enum
53-
);
54-
in l_pkg_main // l_pkg_sets // {
55-
vimPlugins = prev.vimPlugins // {
47+
) {};
48+
};
49+
vimPlugins = final: prev: {
5650
${APPNAME} = final.neovimUtils.buildNeovimPlugin { pname = APPNAME; };
5751
};
5852
};
5953
packages = forAllSys (system: let
6054
pkgs = getPkgs system [ overlay ];
6155
in (
62-
with builtins; listToAttrs (
56+
builtins.listToAttrs (
6357
map (n: {
6458
name = "she${n}";
6559
value = pkgs.lib.attrByPath [ n "pkgs" APPNAME ] null pkgs;
66-
}) (attrNames l_pkg_enum)
60+
}) l_pkg_enum
6761
)
6862
) // {
6963
default = pkgs.vimPlugins.${APPNAME};
@@ -75,7 +69,7 @@
7569
overlays.runLuaCommand = runLuaCommandOverlay;
7670
legacyPackages = forAllSys (system: { inherit (getPkgs system [ runLuaCommandOverlay ]) runLuaCommand; });
7771
inherit packages;
78-
checks = forAllSys (system: import ./tests/tests.nix (getPkgs system [ overlay runLuaCommandOverlay ]));
72+
checks = forAllSys (system: import ./tests/tests.nix (getPkgs system [ overlay runLuaCommandOverlay ]) l_pkg_enum);
7973
devShells = forAllSys (system: let
8074
pkgs = getPkgs system [];
8175
lua = pkgs.luajit.withPackages (lp: [ lp.inspect lp.cjson lp.toml-edit lp.luarocks ]);
@@ -87,7 +81,15 @@
8781
LUA = lua.interpreter;
8882
BEAR = "${pkgs.bear}/bin/bear";
8983
shellHook = ''
90-
[ "$(whoami)" == "birdee" ] && exec zsh
84+
ogdir=$(pwd)
85+
gitdir="$(git rev-parse --show-toplevel)"
86+
if [ -n "$gitdir" ]; then
87+
export PREFIX="$gitdir/build/test"
88+
cd "$gitdir"
89+
make bear
90+
cd "$ogdir"
91+
fi
92+
unset gitdir ogdir
9193
'';
9294
};
9395
});

tests/tests.nix

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pkgs: let
1+
pkgs: l_pkg_enum: let
22
mkBuildTest = lua: let
33
luapath = (lua.withPackages (ps: with ps; [ inspect shelua ])).interpreter;
44
in pkgs.runCommand ("shelua_package_test-" + lua.luaAttr) {} ''
@@ -37,7 +37,7 @@ pkgs: let
3737
require("example")
3838
require("test")
3939
'';
40-
run_on = with pkgs; [ lua5_1 lua5_2 lua5_3 lua5_4 lua5_5 luajit ];
40+
run_on = map (n: pkgs.${n}) l_pkg_enum;
4141
in pkgs.lib.pipe run_on [
4242
(map (li: { name = "runLuaCommand-" + li.luaAttr; value = mkCmdTest li; }))
4343
builtins.listToAttrs

0 commit comments

Comments
 (0)