101 lines
3.1 KiB
Nix
101 lines
3.1 KiB
Nix
|
|
# homepage: https://github.com/stevearc/resession.nvim
|
||
|
|
{ lib, pkgs, ... }:
|
||
|
|
|
||
|
|
{
|
||
|
|
extra = {
|
||
|
|
packages = [
|
||
|
|
(import ./package.nix { inherit lib pkgs; })
|
||
|
|
];
|
||
|
|
|
||
|
|
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/resession.lua#L45-L49
|
||
|
|
config = ''
|
||
|
|
require("resession").setup({
|
||
|
|
buf_filter = function(bufnr) return require("astrocore.buffer").is_restorable(bufnr) end,
|
||
|
|
tab_buf_filter = function(tabpage, bufnr) return vim.tbl_contains(vim.t[tabpage].bufs, bufnr) end,
|
||
|
|
extensions = { astrocore = { enable_in_tab = true } },
|
||
|
|
})
|
||
|
|
'';
|
||
|
|
};
|
||
|
|
|
||
|
|
rootOpts = {
|
||
|
|
autoGroups.resession = { };
|
||
|
|
autoCmd = [
|
||
|
|
{
|
||
|
|
desc = "Save session on close";
|
||
|
|
event = "VimLeavePre";
|
||
|
|
group = "resession";
|
||
|
|
|
||
|
|
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/resession.lua#L31-L39
|
||
|
|
callback.__raw = ''
|
||
|
|
function()
|
||
|
|
local buf_utils = require "astrocore.buffer"
|
||
|
|
local autosave = buf_utils.sessions.autosave
|
||
|
|
if autosave and buf_utils.is_valid_session() then
|
||
|
|
local save = require("resession").save
|
||
|
|
if autosave.last then save("last", { notify = false }) end
|
||
|
|
if autosave.cwd then save(vim.fn.getcwd(), { dir = "dirsession", notify = false }) end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
'';
|
||
|
|
}
|
||
|
|
];
|
||
|
|
|
||
|
|
keymaps = [
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>Sl";
|
||
|
|
action.__raw = "function() require('resession').load 'last' end";
|
||
|
|
options.desc = "Load last session";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>Ss";
|
||
|
|
action.__raw = "function() require('resession').save() end";
|
||
|
|
options.desc = "Save this session";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>SS";
|
||
|
|
action.__raw = "function() require('resession').save(vim.fn.getcwd(), { dir = 'dirsession' }) end";
|
||
|
|
options.desc = "Save this dirsession";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>St";
|
||
|
|
action.__raw = "function() require('resession').save_tab() end";
|
||
|
|
options.desc = "Save this tab's session";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>Sd";
|
||
|
|
action.__raw = "function() require('resession').delete() end";
|
||
|
|
options.desc = "Delete a session";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>SD";
|
||
|
|
action.__raw = "function() require('resession').delete(nil, { dir = 'dirsession' }) end";
|
||
|
|
options.desc = "Delete a dirsession";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>Sf";
|
||
|
|
action.__raw = "function() require('resession').load() end";
|
||
|
|
options.desc = "Load a session";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>SF";
|
||
|
|
action.__raw = "function() require('resession').load(nil, { dir = 'dirsession' }) end";
|
||
|
|
options.desc = "Load a dirsession";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
mode = "n";
|
||
|
|
key = "<leader>S.";
|
||
|
|
action.__raw = "function() require('resession').load(vim.fn.getcwd(), { dir = 'dirsession' }) end";
|
||
|
|
options.desc = "Load current dirsession";
|
||
|
|
}
|
||
|
|
];
|
||
|
|
};
|
||
|
|
}
|