diff --git a/plugins/resession/default.nix b/plugins/resession/default.nix new file mode 100644 index 0000000..12079c0 --- /dev/null +++ b/plugins/resession/default.nix @@ -0,0 +1,100 @@ +# 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 = "Sl"; + action.__raw = "function() require('resession').load 'last' end"; + options.desc = "Load last session"; + } + { + mode = "n"; + key = "Ss"; + action.__raw = "function() require('resession').save() end"; + options.desc = "Save this session"; + } + { + mode = "n"; + key = "SS"; + action.__raw = "function() require('resession').save(vim.fn.getcwd(), { dir = 'dirsession' }) end"; + options.desc = "Save this dirsession"; + } + { + mode = "n"; + key = "St"; + action.__raw = "function() require('resession').save_tab() end"; + options.desc = "Save this tab's session"; + } + { + mode = "n"; + key = "Sd"; + action.__raw = "function() require('resession').delete() end"; + options.desc = "Delete a session"; + } + { + mode = "n"; + key = "SD"; + action.__raw = "function() require('resession').delete(nil, { dir = 'dirsession' }) end"; + options.desc = "Delete a dirsession"; + } + { + mode = "n"; + key = "Sf"; + action.__raw = "function() require('resession').load() end"; + options.desc = "Load a session"; + } + { + mode = "n"; + key = "SF"; + action.__raw = "function() require('resession').load(nil, { dir = 'dirsession' }) end"; + options.desc = "Load a dirsession"; + } + { + mode = "n"; + key = "S."; + action.__raw = "function() require('resession').load(vim.fn.getcwd(), { dir = 'dirsession' }) end"; + options.desc = "Load current dirsession"; + } + ]; + }; +} diff --git a/plugins/resession/package.nix b/plugins/resession/package.nix new file mode 100644 index 0000000..18c0dcd --- /dev/null +++ b/plugins/resession/package.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: + +let + version = "1.2.1"; +in +pkgs.vimUtils.buildVimPlugin { + inherit version; + + name = "resession-nvim"; + + src = pkgs.fetchFromGitHub { + owner = "stevearc"; + repo = "resession.nvim"; + rev = "v${version}"; + hash = "sha256-GXKDuKDMcfl1SHTTdUFdWuWbtq6TDtk0GsyI3fAc1vE="; + }; +}