diff --git a/modules/programs/neovim.nix b/modules/programs/neovim/default.nix similarity index 99% rename from modules/programs/neovim.nix rename to modules/programs/neovim/default.nix index 949bebb3f..e9ca3d01c 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim/default.nix @@ -21,7 +21,7 @@ let inherit ( - (import ../lib/file-type.nix { + (import ../../lib/file-type.nix { inherit (config.home) homeDirectory; inherit lib pkgs; }) @@ -50,6 +50,7 @@ in meta.maintainers = with lib.maintainers; [ khaneliman ]; imports = [ + ./fennel.nix (lib.mkRenamedOptionModule [ "programs" "neovim" "extraLuaConfig" ] [ "programs" "neovim" "initLua" ] diff --git a/modules/programs/neovim/fennel.nix b/modules/programs/neovim/fennel.nix new file mode 100644 index 000000000..98c88fbe9 --- /dev/null +++ b/modules/programs/neovim/fennel.nix @@ -0,0 +1,40 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.neovim; +in +{ + config = lib.mkIf cfg.enable { + programs.neovim.initLua = + lib.mkIf (lib.hasAttr "fennel" cfg.generatedConfigs && cfg.generatedConfigs.fennel != "") + ( + lib.mkAfter '' + -- user-associated fennel plugin config {{{ + require('fennel-plugins') + -- }}} + '' + ); + + xdg.configFile."nvim/lua/fennel-plugins.lua" = + let + compiledFennel = + pkgs.runCommand "fennel-plugins.lua" + { + fnlSrc = cfg.generatedConfigs.fennel; + __structuredAttrs = true; + } + '' + ${lib.getExe pkgs.jq} -rj '.fnlSrc' "$NIX_ATTRS_JSON_FILE" > fnlSrc + ${lib.getExe cfg.package.lua.pkgs.fennel} --compile fnlSrc > "$out" + ''; + in + lib.mkIf (lib.hasAttr "fennel" cfg.generatedConfigs && cfg.generatedConfigs.fennel != "") { + source = compiledFennel; + }; + }; +} diff --git a/tests/modules/programs/neovim/default.nix b/tests/modules/programs/neovim/default.nix index ee3c0707a..85c694699 100644 --- a/tests/modules/programs/neovim/default.nix +++ b/tests/modules/programs/neovim/default.nix @@ -9,4 +9,5 @@ neovim-extra-lua-default = ./extra-lua-default.nix; neovim-extra-lua-empty-plugin = ./extra-lua-empty-plugin.nix; neovim-plugin-type-warning = ./plugin-type-warning.nix; + neovim-fennel-plugin-config = ./plugin-fennel-config.nix; } diff --git a/tests/modules/programs/neovim/plugin-fennel-config.nix b/tests/modules/programs/neovim/plugin-fennel-config.nix new file mode 100644 index 000000000..6798f4a3b --- /dev/null +++ b/tests/modules/programs/neovim/plugin-fennel-config.nix @@ -0,0 +1,36 @@ +{ + config, + lib, + pkgs, + realPkgs, + ... +}: + +lib.mkIf config.test.enableBig { + programs.neovim = { + enable = true; + withRuby = false; + plugins = with pkgs.vimPlugins; [ + { + plugin = vim-nix; + type = "fennel"; + config = ''(vim.cmd "let g:hmFennelPlugin='HM_FENNEL_PLUGIN'")''; + } + ]; + }; + + _module.args.pkgs = lib.mkForce realPkgs; + + nmt.script = '' + export PATH="$TESTED/home-path/bin:$PATH" + export HOME=$TMPDIR/hm-user + export XDG_CONFIG_HOME="$TESTED/home-files/.config" + initLua="$TESTED/home-files/.config/nvim/init.lua" + + assertFileContains "$initLua" "require('fennel-plugins')" + + vimout=$(mktemp) + nvim --headless +'lua print(vim.g.hmFennelPlugin)' +q! 2&> $vimout + assertFileContains "$vimout" "HM_FENNEL_PLUGIN" + ''; +}