From 8899663b5928c1326a4d8f721430da7e947f4dc1 Mon Sep 17 00:00:00 2001 From: Johan Larsson <jolars@posteo.com> Date: Wed, 8 Jan 2025 14:44:58 +0100 Subject: [PATCH] plugins/persistence: convert to mkNeovimPlugin and fix settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restrict no nonnegative numbers Co-authored-by: Gaétan Lepage <33058747+GaetanLepage@users.noreply.github.com> chore: include optionsRenamedToSettings in TODO Merge imports Co-authored-by: Gaétan Lepage <33058747+GaetanLepage@users.noreply.github.com> --- plugins/by-name/persistence/default.nix | 118 +++++++----------- .../plugins/by-name/persistence/default.nix | 14 +-- 2 files changed, 53 insertions(+), 79 deletions(-) diff --git a/plugins/by-name/persistence/default.nix b/plugins/by-name/persistence/default.nix index 9a64c6b313..c97360e0e3 100644 --- a/plugins/by-name/persistence/default.nix +++ b/plugins/by-name/persistence/default.nix @@ -1,79 +1,57 @@ -{ - lib, - helpers, - config, - pkgs, - ... -}: -with lib; -{ - options.plugins.persistence = lib.nixvim.plugins.neovim.extraOptionsOptions // { - enable = mkEnableOption "persistence.nvim"; +{ lib, ... }: +let + inherit (lib.nixvim) defaultNullOpts literalLua; +in +lib.nixvim.plugins.mkNeovimPlugin { + name = "persistence"; + packPathName = "persistence.nvim"; + package = "persistence-nvim"; + description = "A simple lua plugin for automated session management."; - package = lib.mkPackageOption pkgs "persistence.nvim" { - default = [ - "vimPlugins" - "persistence-nvim" - ]; - }; + maintainers = [ lib.maintainers.jolars ]; - dir = helpers.defaultNullOpts.mkStr { - __raw = ''vim.fn.expand(vim.fn.stdpath("state") .. "/sessions/")''; - } "directory where session files are saved"; + # TODO: introduced 2025-01-08: remove after 25.05 + optionsRenamedToSettings = [ + "dir" + ]; + imports = + let + basePluginPath = [ + "plugins" + "persistence" + ]; + in + map + ( + option: + lib.mkRemovedOptionModule (basePluginPath ++ [ option ]) '' + This option has been deprecated upstream. The plugin now provides + user events to hook into instead. + '' + ) + [ + "options" + "preSave" + "saveEmpty" + ]; - options = - let - # https://neovim.io/doc/user/options.html#'sessionoptions' - sessionOpts = [ - "blank" - "buffers" - "curdir" - "folds" - "globals" - "help" - "localoptions" - "options" - "skiprtp" - "resize" - "sesdir" - "tabpages" - "terminal" - "winpos" - "winsize" - ]; - in - helpers.defaultNullOpts.mkListOf (types.enum sessionOpts) [ - "buffers" - "curdir" - "tabpages" - "winsize" - "skiprtp" - ] "sessionoptions used for saving"; + settingsOptions = { + branch = defaultNullOpts.mkBool true '' + Use git branch to save session. + ''; - preSave = helpers.defaultNullOpts.mkLuaFn "nil" "a function to call before saving the session"; + dir = defaultNullOpts.mkStr (literalLua "vim.fn.expand(vim.fn.stdpath('state') .. '/sessions/')") '' + Directory where session files are saved. + ''; - saveEmpty = helpers.defaultNullOpts.mkBool false '' - don't save if there are no open file buffers + need = defaultNullOpts.mkUnsignedInt 1 '' + Minimum number of file buffers that need to be open to save. Set to + 0 to always save. ''; }; - config = - let - cfg = config.plugins.persistence; - in - mkIf cfg.enable { - extraPlugins = [ cfg.package ]; - - extraConfigLua = - let - opts = { - inherit (cfg) dir options; - pre_save = cfg.preSave; - save_empty = cfg.saveEmpty; - }; - in - '' - require('persistence').setup(${lib.nixvim.toLuaObject opts}) - ''; - }; + settingsExample = { + need = 0; + branch = false; + }; } diff --git a/tests/test-sources/plugins/by-name/persistence/default.nix b/tests/test-sources/plugins/by-name/persistence/default.nix index 412a3e341f..587d64f523 100644 --- a/tests/test-sources/plugins/by-name/persistence/default.nix +++ b/tests/test-sources/plugins/by-name/persistence/default.nix @@ -7,15 +7,11 @@ plugins.persistence = { enable = true; - dir.__raw = ''vim.fn.expand(vim.fn.stdpath("state") .. "/sessions/")''; - options = [ - "buffers" - "curdir" - "tabpages" - "winsize" - ]; - preSave = null; - saveEmpty = false; + settings = { + branch = true; + dir.__raw = ''vim.fn.expand(vim.fn.stdpath("state") .. "/sessions/")''; + need = 1; + }; }; }; }