feat: add flake.nix

This commit is contained in:
Marc Jakobi 2024-02-22 22:48:54 +01:00
parent bbf568bc04
commit 0dbe093453
2 changed files with 90 additions and 0 deletions

View file

@ -1,6 +1,19 @@
# nix-gen-luarc-json
Generate a .luarc.json for Lua/Neovim devShells
## Usage
Apply this flake's overlay.
It provides a `mk-luarc-json` function,
which takes an attrset with the following arguments:
- `nvim`: The neovim package. Defaults to `neovim-unwrapped`.
- `neodev-types`: neodev.nvim types to add to the `workspace.library`.
Defaults to `"stable"`.
- Plugins: List of Neovim plugins and/or luarocks packages.
Defaults to an empty list.
## License
This flake is [licensed according to GPL version 2](./LICENSE),

77
flake.nix Normal file
View file

@ -0,0 +1,77 @@
{
description = "Generate a .luarc.json for Lua/Neovim devShells";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
};
outputs = inputs @ {
self,
nixpkgs,
flake-parts,
}:
flake-parts.lib.mkFlake {inherit inputs;} {
flake = {
overlays.default = final: prev: {
mk-luarc-json = {
# list of plugins that have a /lua directory
nvim ? final.neovim-unwrapped,
neodev-types ? "stable",
plugins ? [],
}: let
lib = final.lib;
plugin-lib-dirs = lib.lists.map (plugin:
if
builtins.hasAttr "vimPlugin" plugin
&& plugin.vimPlugin
|| plugin.pname == "nvim-treesitter"
then "${plugin}/lua"
else "${plugin}/lib/lua/5.1")
plugins;
luarc = {
runtime.version = "LuaJIT";
Lua = {
globals = [
"vim"
];
workspace = {
library =
[
"${nvim}/share/nvim/runtime/lua"
"${final.vimPlugins.neodev-nvim}/types/${neodev-types}"
"\${3rd}/busted/library"
"\${3rd}/luassert/library"
]
++ plugin-lib-dirs;
ignoreDir = [
".git"
".github"
".direnv"
"result"
"nix"
"doc"
];
};
diagnostics = {
libraryFiles = "Disable";
disable = [];
};
};
};
in
final.runCommand ".luarc.json" {
buildInputs = [
final.jq
];
passAsFile = ["rawJSON"];
rawJSON = builtins.toJSON luarc;
} ''
{
jq . <"$rawJSONPath"
} >$out
'';
};
};
};
}