{
  config,
  lib,
  ...
}:
with lib;
with builtins; {
  options.vim.projects.project-nvim = {
    enable = mkEnableOption "project-nvim for project management";

    manualMode = mkOption {
      type = types.bool;
      default = true;
      description = "don't automatically change the root directory so the user has the option to manually do so using `:ProjectRoot` command";
    };

    # detection methods should accept one or more strings from a list
    detectionMethods = mkOption {
      type = types.listOf types.str;
      default = ["lsp" "pattern"];
      description = "Detection methods to use";
    };

    # patterns
    patterns = mkOption {
      type = types.listOf types.str;
      default = [".git" "_darcs" ".hg" ".bzr" ".svn" "Makefile" "package.json" "flake.nix" "cargo.toml"];
      description = "Patterns to use for pattern detection method";
    };

    # table of lsp servers to ignore by name
    lspIgnored = mkOption {
      type = types.listOf types.str;
      default = [];
      description = "LSP servers no ignore by name";
    };

    excludeDirs = mkOption {
      type = types.listOf types.str;
      default = [];
      description = "Directories to exclude from project root search";
    };

    showHidden = mkOption {
      type = types.bool;
      default = false;
      description = "Show hidden files in telescope picker";
    };

    silentChdir = mkOption {
      type = types.bool;
      default = true;
      description = "Silently change directory when changing project";
    };

    scopeChdir = mkOption {
      type = types.enum ["global" "tab" "win"];
      default = "global";
      description = "What scope to change the directory";
    };
  };
}