diff --git a/plugins/default.nix b/plugins/default.nix index 10c22713..0a0c7d2d 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -74,6 +74,7 @@ ./utils/harpoon.nix ./utils/indent-blankline.nix ./utils/intellitab.nix + ./utils/lastplace.nix ./utils/mark-radar.nix ./utils/neorg.nix ./utils/notify.nix diff --git a/plugins/utils/lastplace.nix b/plugins/utils/lastplace.nix new file mode 100644 index 00000000..b33eec2c --- /dev/null +++ b/plugins/utils/lastplace.nix @@ -0,0 +1,49 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.plugins.lastplace; + helpers = import ../helpers.nix {inherit lib;}; +in + with lib; { + options.plugins.lastplace = + helpers.extraOptionsOptions + // { + enable = mkEnableOption "lastplace"; + + package = helpers.mkPackageOption "lastplace" pkgs.vimPlugins.nvim-lastplace; + + ignoreBuftype = + helpers.defaultNullOpts.mkNullable (types.listOf types.str) + ''["quickfix" "nofix" "help"]'' + "The list of buffer types to ignore by lastplace."; + + ignoreFiletype = + helpers.defaultNullOpts.mkNullable (types.listOf types.str) + ''["gitcommit" "gitrebase" "svn" "hgcommit"]'' + "The list of file types to ignore by lastplace."; + + openFolds = + helpers.defaultNullOpts.mkBool true + "Whether closed folds are automatically opened when jumping to the last edit position."; + }; + + config = let + options = + { + lastplace_ignore_buftype = cfg.ignoreBuftype; + lastplace_ignore_filetype = cfg.ignoreFiletype; + lastplace_open_folds = cfg.openFolds; + } + // cfg.extraOptions; + in + mkIf cfg.enable { + extraPlugins = [cfg.package]; + + extraConfigLua = '' + require('nvim-lastplace').setup(${helpers.toLuaObject options}) + ''; + }; + } diff --git a/tests/test-sources/plugins/utils/lastplace.nix b/tests/test-sources/plugins/utils/lastplace.nix new file mode 100644 index 00000000..30bfc979 --- /dev/null +++ b/tests/test-sources/plugins/utils/lastplace.nix @@ -0,0 +1,16 @@ +{ + empty = { + plugins.lastplace.enable = true; + }; + + # All the upstream default options of lastplace + defaults = { + plugins.lastplace = { + enable = true; + + ignoreBuftype = ["quickfix" "nofix" "help"]; + ignoreFiletype = ["gitcommit" "gitrebase" "svn" "hgcommit"]; + openFolds = true; + }; + }; +}