mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
plugins/auto-session: init + tests
This commit is contained in:
parent
24b145ff35
commit
9fd431366a
3 changed files with 234 additions and 0 deletions
|
@ -75,6 +75,7 @@
|
||||||
|
|
||||||
./utils/alpha.nix
|
./utils/alpha.nix
|
||||||
./utils/auto-save.nix
|
./utils/auto-save.nix
|
||||||
|
./utils/auto-session.nix
|
||||||
./utils/comment-nvim.nix
|
./utils/comment-nvim.nix
|
||||||
./utils/commentary.nix
|
./utils/commentary.nix
|
||||||
./utils/conjure.nix
|
./utils/conjure.nix
|
||||||
|
|
187
plugins/utils/auto-session.nix
Normal file
187
plugins/utils/auto-session.nix
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.plugins.auto-session;
|
||||||
|
helpers = import ../helpers.nix {inherit lib;};
|
||||||
|
in {
|
||||||
|
options.plugins.auto-session =
|
||||||
|
helpers.extraOptionsOptions
|
||||||
|
// {
|
||||||
|
enable = mkEnableOption "auto-session";
|
||||||
|
|
||||||
|
package = helpers.mkPackageOption "auto-session" pkgs.vimPlugins.auto-session;
|
||||||
|
|
||||||
|
logLevel =
|
||||||
|
helpers.defaultNullOpts.mkEnum
|
||||||
|
["debug" "info" "warn" "error"]
|
||||||
|
"error"
|
||||||
|
"Sets the log level of the plugin.";
|
||||||
|
|
||||||
|
autoSession = {
|
||||||
|
enabled = helpers.defaultNullOpts.mkBool true ''
|
||||||
|
Enables/disables auto creating, saving and restoring.
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableLastSession = helpers.defaultNullOpts.mkBool false ''
|
||||||
|
Whether to enable the "last session" feature.
|
||||||
|
'';
|
||||||
|
|
||||||
|
rootDir =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(with types; either str helpers.rawType)
|
||||||
|
"{__raw = \"vim.fn.stdpath 'data' .. '/sessions/'\";}"
|
||||||
|
''
|
||||||
|
Root directory for session files.
|
||||||
|
Can be either a string or lua code (using `{__raw = 'foo';}`).
|
||||||
|
'';
|
||||||
|
|
||||||
|
createEnabled = helpers.mkNullOrOption types.bool ''
|
||||||
|
Whether to enable auto creating new sessions
|
||||||
|
'';
|
||||||
|
|
||||||
|
suppressDirs = helpers.mkNullOrOption (with types; listOf str) ''
|
||||||
|
Suppress session create/restore if in one of the list of dirs.
|
||||||
|
'';
|
||||||
|
|
||||||
|
allowedDirs = helpers.mkNullOrOption (with types; listOf str) ''
|
||||||
|
Allow session create/restore if in one of the list of dirs.
|
||||||
|
'';
|
||||||
|
|
||||||
|
useGitBranch = helpers.mkNullOrOption types.bool ''
|
||||||
|
Include git branch name in session name to differentiate between sessions for different
|
||||||
|
git branches.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
autoSave = {
|
||||||
|
enabled = helpers.defaultNullOpts.mkNullable types.bool "null" ''
|
||||||
|
Whether to enable auto saving session.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
autoRestore = {
|
||||||
|
enabled = helpers.defaultNullOpts.mkNullable types.bool "null" ''
|
||||||
|
Whether to enable auto restoring session.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
cwdChangeHandling =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(
|
||||||
|
with types;
|
||||||
|
either
|
||||||
|
(enum [false])
|
||||||
|
(submodule {
|
||||||
|
options = {
|
||||||
|
restoreUpcomingSession = helpers.defaultNullOpts.mkBool true ''
|
||||||
|
Restore session for upcoming cwd on cwd change.
|
||||||
|
'';
|
||||||
|
|
||||||
|
preCwdChangedHook = helpers.mkNullOrOption types.str ''
|
||||||
|
lua function hook.
|
||||||
|
This is called after auto_session code runs for the `DirChangedPre` autocmd.
|
||||||
|
'';
|
||||||
|
|
||||||
|
postCwdChangedHook = helpers.mkNullOrOption types.str ''
|
||||||
|
lua function hook.
|
||||||
|
This is called after auto_session code runs for the `DirChanged` autocmd.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
})
|
||||||
|
)
|
||||||
|
"false"
|
||||||
|
''
|
||||||
|
Config for handling the DirChangePre and DirChanged autocmds.
|
||||||
|
Set to `false` to disable the feature.
|
||||||
|
'';
|
||||||
|
|
||||||
|
bypassSessionSaveFileTypes = helpers.mkNullOrOption (with types; listOf str) ''
|
||||||
|
List of file types to bypass auto save when the only buffer open is one of the file types
|
||||||
|
listed.
|
||||||
|
'';
|
||||||
|
|
||||||
|
sessionLens = {
|
||||||
|
loadOnSetup = helpers.defaultNullOpts.mkBool true ''
|
||||||
|
If `loadOnSetup` is set to false, one needs to eventually call
|
||||||
|
`require("auto-session").setup_session_lens()` if they want to use session-lens.
|
||||||
|
'';
|
||||||
|
|
||||||
|
themeConf =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
types.attrs
|
||||||
|
"{winblend = 10; border = true;}"
|
||||||
|
"Theme configuration.";
|
||||||
|
|
||||||
|
previewer = helpers.defaultNullOpts.mkBool false ''
|
||||||
|
Use default previewer config by setting the value to `null` if some sets previewer to
|
||||||
|
true in the custom config.
|
||||||
|
Passing in the boolean value errors out in the telescope code with the picker trying to
|
||||||
|
index a boolean instead of a table.
|
||||||
|
This fixes it but also allows for someone to pass in a table with the actual preview
|
||||||
|
configs if they want to.
|
||||||
|
'';
|
||||||
|
|
||||||
|
sessionControl = {
|
||||||
|
controlDir =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(with types; either str helpers.rawType)
|
||||||
|
"\"vim.fn.stdpath 'data' .. '/auto_session/'\""
|
||||||
|
''
|
||||||
|
Auto session control dir, for control files, like alternating between two sessions
|
||||||
|
with session-lens.
|
||||||
|
'';
|
||||||
|
|
||||||
|
controlFilename = helpers.defaultNullOpts.mkStr "session_control.json" ''
|
||||||
|
File name of the session control file.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
setupOptions =
|
||||||
|
{
|
||||||
|
log_level = cfg.logLevel;
|
||||||
|
auto_session_enable_last_session = cfg.autoSession.enableLastSession;
|
||||||
|
auto_session_root_dir = cfg.autoSession.rootDir;
|
||||||
|
auto_session_enabled = cfg.autoSession.enabled;
|
||||||
|
auto_session_create_enabled = cfg.autoSession.createEnabled;
|
||||||
|
auto_save_enabled = cfg.autoSave.enabled;
|
||||||
|
auto_restore_enabled = cfg.autoRestore.enabled;
|
||||||
|
auto_session_suppress_dirs = cfg.autoSession.suppressDirs;
|
||||||
|
auto_session_allowed_dirs = cfg.autoSession.allowedDirs;
|
||||||
|
auto_session_use_git_branch = cfg.autoSession.useGitBranch;
|
||||||
|
cwd_change_handling =
|
||||||
|
if isAttrs cfg.cwdChangeHandling
|
||||||
|
then
|
||||||
|
with cfg.cwdChangeHandling; {
|
||||||
|
restore_upcoming_session = restoreUpcomingSession;
|
||||||
|
pre_cwd_changed_hook = helpers.ifNonNull' preCwdChangedHook (helpers.mkRaw preCwdChangedHook);
|
||||||
|
post_cwd_changed_hook = helpers.ifNonNull' postCwdChangedHook (helpers.mkRaw postCwdChangedHook);
|
||||||
|
}
|
||||||
|
else cfg.cwdChangeHandling;
|
||||||
|
bypass_session_save_file_types = cfg.bypassSessionSaveFileTypes;
|
||||||
|
session_lens = with cfg.sessionLens; {
|
||||||
|
load_on_setup = loadOnSetup;
|
||||||
|
theme_conf = themeConf;
|
||||||
|
inherit previewer;
|
||||||
|
sessionControl = with sessionControl; {
|
||||||
|
control_dir = controlDir;
|
||||||
|
control_filename = controlFilename;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// cfg.extraOptions;
|
||||||
|
in
|
||||||
|
mkIf cfg.enable {
|
||||||
|
extraPlugins = [cfg.package];
|
||||||
|
|
||||||
|
extraConfigLua = ''
|
||||||
|
require('auto-session').setup(${helpers.toLuaObject setupOptions})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
46
tests/test-sources/plugins/utils/auto-session.nix
Normal file
46
tests/test-sources/plugins/utils/auto-session.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
empty = {
|
||||||
|
plugins.auto-session.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
example = {
|
||||||
|
plugins.auto-session = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
logLevel = "error";
|
||||||
|
autoSession = {
|
||||||
|
enabled = true;
|
||||||
|
enableLastSession = false;
|
||||||
|
rootDir = {__raw = "vim.fn.stdpath 'data' .. '/sessions/'";};
|
||||||
|
createEnabled = true;
|
||||||
|
suppressDirs = null;
|
||||||
|
allowedDirs = [];
|
||||||
|
useGitBranch = true;
|
||||||
|
};
|
||||||
|
autoSave = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
autoRestore = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
cwdChangeHandling = {
|
||||||
|
restoreUpcomingSession = true;
|
||||||
|
preCwdChangedHook = null;
|
||||||
|
postCwdChangedHook = null;
|
||||||
|
};
|
||||||
|
bypassSessionSaveFileTypes = [];
|
||||||
|
sessionLens = {
|
||||||
|
loadOnSetup = true;
|
||||||
|
themeConf = {
|
||||||
|
winblend = 10;
|
||||||
|
border = true;
|
||||||
|
};
|
||||||
|
previewer = false;
|
||||||
|
sessionControl = {
|
||||||
|
controlDir = "vim.fn.stdpath 'data' .. '/auto_session/'";
|
||||||
|
controlFilename = "session_control.json";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue