nix-community.nixvim/plugins/by-name/projections/default.nix
2025-01-12 20:00:49 +00:00

120 lines
3 KiB
Nix

{ lib, ... }:
let
inherit (lib) types;
inherit (lib.nixvim) defaultNullOpts literalLua;
in
lib.nixvim.plugins.mkNeovimPlugin {
name = "projections";
packPathName = "projections.nvim";
package = "projections-nvim";
maintainers = [ lib.maintainers.GaetanLepage ];
settingsOptions =
let
hookGroupType =
action:
types.maybeRaw (
types.submodule {
options = {
pre = defaultNullOpts.mkRaw null ''
Callback to execute before `${action}`.
'';
post = defaultNullOpts.mkRaw null ''
Callback to execute after `${action}`.
'';
};
}
);
defaultHookGroup = {
pre = null;
post = null;
};
in
{
store_hooks = defaultNullOpts.mkNullable' {
type = hookGroupType "store_session";
pluginDefault = defaultHookGroup;
description = ''
Pre and post hooks for `store_session`.
'';
example = {
pre.__raw = ''
function()
-- nvim-tree
local nvim_tree_present, api = pcall(require, "nvim-tree.api")
if nvim_tree_present then api.tree.close() end
-- neo-tree
if pcall(require, "neo-tree") then vim.cmd [[Neotree action=close]] end
end
'';
};
};
restore_hooks = defaultNullOpts.mkNullable (hookGroupType "restore_session") defaultHookGroup ''
Pre and post hooks for `restore_session`.
'';
workspaces = defaultNullOpts.mkListOf' {
type = with types; either str (listOf (either str (listOf str)));
pluginDefault = [ ];
example = [
[
"~/Documents/dev"
[ ".git" ]
]
[
"~/repos"
[ ]
]
"~/dev"
];
description = ''
Default workspaces to search for.
'';
};
patterns = defaultNullOpts.mkListOf types.str [ ".git" ".svn" ".hg" ] ''
Default patterns to use if none were specified. These are NOT regexps.
'';
workspaces_file = defaultNullOpts.mkStr' {
pluginDefault = literalLua "vim.fn.stdpath('data') .. 'projections_workspaces.json'";
example = "path/to/file";
description = ''
Path to workspaces json file.
'';
};
sessions_directory = defaultNullOpts.mkStr' {
pluginDefault = literalLua "vim.fn.stdpath('cache') .. 'projections_sessions'";
example = "path/to/dir";
description = ''
Directory where sessions are stored.
'';
};
};
settingsExample = {
workspaces = [
[
"~/Documents/dev"
[ ".git" ]
]
[
"~/repos"
[ ]
]
"~/dev"
];
patterns = [
".git"
".svn"
".hg"
];
workspaces_file = "path/to/file";
sessions_directory = "path/to/dir";
};
}