diff --git a/plugins/default.nix b/plugins/default.nix index b8788df7..e784ca97 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -49,6 +49,7 @@ ./utils/notify.nix ./utils/nvim-autopairs.nix ./utils/nvim-tree.nix + ./utils/project-nvim.nix ./utils/specs.nix ./utils/startify.nix ./utils/surround.nix diff --git a/plugins/helpers.nix b/plugins/helpers.nix index 8bf9abae..be7980dc 100644 --- a/plugins/helpers.nix +++ b/plugins/helpers.nix @@ -105,4 +105,16 @@ rec { }; mkRaw = r: { __raw = r; }; + + rawType = types.submodule { + options = { + __raw = mkOption { + type = types.str; + description = "raw lua code"; + default = ""; + }; + }; + }; + + isRawType = v: lib.isAttrs v && lib.hasAttr "__raw" v && lib.isString v.__raw; } diff --git a/plugins/telescope/default.nix b/plugins/telescope/default.nix index b3a9705d..dd3397c2 100644 --- a/plugins/telescope/default.nix +++ b/plugins/telescope/default.nix @@ -10,6 +10,7 @@ in ./fzf-native.nix ./fzy-native.nix ./media-files.nix + ./project-nvim.nix ]; # TODO:add support for aditional filetypes. This requires autocommands! diff --git a/plugins/telescope/project-nvim.nix b/plugins/telescope/project-nvim.nix new file mode 100644 index 00000000..32f0b771 --- /dev/null +++ b/plugins/telescope/project-nvim.nix @@ -0,0 +1,15 @@ +{ pkgs, config, lib, ...}: +with lib; +let + cfg = config.plugins.telescope.extensions.project-nvim; +in +{ + options.plugins.telescope.extensions.project-nvim = { + enable = mkEnableOption "Enable project-nvim telescope extension"; + + }; + + config = mkIf cfg.enable { + plugins.telescope.enabledExtensions = [ "projects" ]; + }; +} diff --git a/plugins/utils/project-nvim.nix b/plugins/utils/project-nvim.nix new file mode 100644 index 00000000..ff76926f --- /dev/null +++ b/plugins/utils/project-nvim.nix @@ -0,0 +1,78 @@ +{ pkgs, config, lib, ... }: +with lib; +let + cfg = config.plugins.project-nvim; + helpers = import ../helpers.nix { inherit lib; }; +in +{ + options.plugins.project-nvim = { + enable = mkEnableOption "Enable project.nvim"; + + manualMode = mkOption { + type = types.nullOr types.bool; + default = null; + }; + + detectionMethods = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + }; + + patterns = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + }; + + ignoreLsp = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + }; + + excludeDirs = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + }; + + showHidden = mkOption { + type = types.nullOr types.bool; + default = null; + }; + + silentChdir = mkOption { + type = types.nullOr types.bool; + default = null; + }; + + scopeChdir = mkOption { + type = types.nullOr (types.enum [ "global" "tab" "win" ]); + default = null; + }; + + dataPath = mkOption { + type = types.nullOr (types.either types.str helpers.rawType); + default = null; + }; + }; + + config = + let + options = { + manual_mode = cfg.manualMode; + detection_methods = cfg.detectionMethods; + patterns = cfg.patterns; + ignore_lsp = cfg.ignoreLsp; + exclude_dirs = cfg.excludeDirs; + show_hidden = cfg.showHidden; + silent_chdir = cfg.silentChdir; + scope_schdir = cfg.scopeChdir; + data_path = cfg.dataPath; + }; + in + mkIf cfg.enable { + extraPlugins = [ pkgs.vimPlugins.project-nvim ]; + + extraConfigLua = '' + require('project_nvim').setup(${helpers.toLuaObject options}) + ''; + }; +}