diff --git a/plugins/by-name/diffview/default.nix b/plugins/by-name/diffview/default.nix index 4ef172da74..2ce3da3922 100644 --- a/plugins/by-name/diffview/default.nix +++ b/plugins/by-name/diffview/default.nix @@ -1,145 +1,138 @@ { lib, - helpers, config, - pkgs, - options, ... }: -with lib; let - cfg = config.plugins.diffview; - mkWinConfig = - { - type ? null, - width ? null, - height ? null, - position ? null, - }: - with helpers.defaultNullOpts; - { - type = - mkEnum - [ - "split" - "float" - ] - type - '' - Determines whether the window should be a float or a normal - split. - ''; + inherit (lib.nixvim) defaultNullOpts; + inherit (lib) types; +in +lib.nixvim.neovim-plugin.mkNeovimPlugin { + name = "diffview"; + originalName = "diffview.nvim"; + package = "diffview-nvim"; - width = mkInt width '' - The width of the window (in character cells). If `type` is - `"split"` then this is only applicable when `position` is - `"left"|"right"`. - ''; + maintainers = [ lib.maintainers.khaneliman ]; - height = mkInt height '' - The height of the window (in character cells). If `type` is - `"split"` then this is only applicable when `position` is - `"top"|"bottom"`. - ''; + settingsOptions = + let + mkWinConfig = + { + type ? null, + width ? null, + height ? null, + position ? null, + }: + { + type = + defaultNullOpts.mkEnum + [ + "split" + "float" + ] + type + '' + Determines whether the window should be a float or a normal + split. + ''; - position = - mkEnum - [ - "left" - "top" - "right" - "bottom" - ] - position - '' - Determines where the panel is positioned (only when - `type="split"`). + width = defaultNullOpts.mkInt width '' + The width of the window (in character cells). If `type` is + `"split"` then this is only applicable when `position` is + `"left"|"right"`. ''; - relative = - mkEnum - [ - "editor" - "win" - ] - "editor" - '' - Determines what the `position` is relative to (when - `type="split"`). + height = defaultNullOpts.mkInt height '' + The height of the window (in character cells). If `type` is + `"split"` then this is only applicable when `position` is + `"top"|"bottom"`. ''; - win = mkInt 0 '' - The window handle of the target relative window (when - `type="split"`. Only when `relative="win"`). Use `0` for - current window. - ''; + position = + defaultNullOpts.mkEnum + [ + "left" + "top" + "right" + "bottom" + ] + position + '' + Determines where the panel is positioned (only when + `type="split"`). + ''; - winOpts = mkAttributeSet { } '' - Table of window local options (see |vim.opt_local|). - These options are applied whenever the window is opened. - ''; - }; -in -{ - options.plugins.diffview = - with helpers.defaultNullOpts; - lib.nixvim.plugins.neovim.extraOptionsOptions - // { - enable = mkEnableOption "diffview"; - - package = lib.mkPackageOption pkgs "diffview" { - default = [ - "vimPlugins" - "diffview-nvim" - ]; - }; + relative = + defaultNullOpts.mkEnum + [ + "editor" + "win" + ] + "editor" + '' + Determines what the `position` is relative to (when + `type="split"`). + ''; - diffBinaries = mkBool false '' + win = defaultNullOpts.mkInt 0 '' + The window handle of the target relative window (when + `type="split"`. Only when `relative="win"`). Use `0` for + current window. + ''; + + win_opts = defaultNullOpts.mkAttributeSet { } '' + Table of window local options (see |vim.opt_local|). + These options are applied whenever the window is opened. + ''; + }; + in + { + diff_binaries = defaultNullOpts.mkBool false '' Show diffs for binaries ''; - enhancedDiffHl = mkBool false '' + enhanced_diff_hl = defaultNullOpts.mkBool false '' See ':h diffview-config-enhanced_diff_hl' ''; - gitCmd = mkListOf types.str [ "git" ] '' + git_cmd = defaultNullOpts.mkListOf types.str [ "git" ] '' The git executable followed by default args. ''; - hgCmd = mkListOf types.str [ "hg" ] '' + hg_cmd = defaultNullOpts.mkListOf types.str [ "hg" ] '' The hg executable followed by default args. ''; - useIcons = mkOption { + use_icons = lib.lib.mkOption { type = types.bool; description = "Requires nvim-web-devicons"; default = true; }; - showHelpHints = mkBool true '' + show_help_hints = defaultNullOpts.mkBool true '' Show hints for how to open the help panel ''; - watchIndex = mkBool true '' + watch_index = defaultNullOpts.mkBool.true '' Update views and index buffers when the git index changes. ''; icons = { - folderClosed = mkStr "" '' + folder_closed = defaultNullOpts.mkStr "" '' Only applies when use_icons is true. ''; - folderOpen = mkStr "" '' + folder_open = defaultNullOpts.mkStr "" '' Only applies when use_icons is true. ''; }; signs = { - foldClosed = mkStr "" ""; + fold_closed = defaultNullOpts.mkStr "" ""; - foldOpen = mkStr "" ""; + fold_open = defaultNullOpts.mkStr "" ""; - done = mkStr "✓" ""; + done = defaultNullOpts.mkStr "✓" ""; }; view = @@ -167,7 +160,7 @@ in { default = { layout = - mkEnum + defaultNullOpts.mkEnum [ "diff2_horizontal" "diff2_vertical" @@ -184,14 +177,14 @@ in ${diff2VerticalDescription} ''; - winbarInfo = mkBool false '' + winbarInfo = defaultNullOpts.mkBool.false '' See ':h diffview-config-view.x.winbar_info' ''; }; - mergeTool = { + merge_tool = { layout = - mkEnum + defaultNullOpts.mkEnum [ "diff1_plain" "diff3_horizontal" @@ -238,18 +231,18 @@ in ''; - disableDiagnostics = mkBool true '' + disable_diagnostics = defaultNullOpts.mkBool.true '' Temporarily disable diagnostics for conflict buffers while in the view. ''; - winbarInfo = mkBool true '' + winbar_info = defaultNullOpts.mkBool.true '' See ':h diffview-config-view.x.winbar_info' ''; }; - fileHistory = { + file_history = { layout = - mkEnum + defaultNullOpts.mkEnum [ "diff2_horizontal" "diff2_vertical" @@ -266,15 +259,15 @@ in ${diff2VerticalDescription} ''; - winbarInfo = mkBool false '' + winbar_info = defaultNullOpts.mkBool.false '' See ':h diffview-config-view.x.winbar_info' ''; }; }; - filePanel = { - listingStyle = - mkEnum + file_panel = { + listing_style = + defaultNullOpts.mkEnum [ "list" "tree" @@ -284,18 +277,18 @@ in One of 'list' or 'tree' ''; - treeOptions = + tree_options = let commonDesc = "Only applies when listing_style is 'tree'"; in { - flattenDirs = mkBool true '' + flattenDirs = defaultNullOpts.mkBool.true '' Flatten dirs that only contain one single dir ${commonDesc} ''; folderStatuses = - mkEnum + defaultNullOpts.mkEnum [ "never" "only_folded" @@ -307,17 +300,17 @@ in ${commonDesc} ''; }; - winConfig = mkWinConfig { + win_config = mkWinConfig { type = "split"; width = 35; position = "left"; }; }; - fileHistoryPanel = { + file_history_panel = { logOptions = let - mkNullStr = helpers.mkNullOrOption types.str; - mkNullBool = helpers.mkNullOrOption types.bool; + mkNullStr = lib.nixvim.mkNullOrOption types.str; + mkNullBool = lib.nixvim.mkNullOrOption types.bool; logOptions = { base = mkNullStr '' Specify a base git rev from which the right side of the diff @@ -325,11 +318,11 @@ in local version of the file. ''; - revRange = mkNullStr '' + rev_range = mkNullStr '' List only the commits in the specified revision range. ''; - pathArgs = mkListOf types.str [ ] '' + path_args = defaultNullOpts.mkListOf.types.str [ ] '' Limit the target files to only the files matching the given path arguments (git pathspec is supported). ''; @@ -338,11 +331,11 @@ in Follow renames (only for single file). ''; - firstParent = mkNullBool '' + first_parent = mkNullBool '' Follow only the first parent upon seeing a merge commit. ''; - showPulls = mkNullBool '' + show_pulls = mkNullBool '' Show merge commits that are not TREESAME to its first parent, but are to a later parent. ''; @@ -359,7 +352,7 @@ in List only merge commits. ''; - noMerges = mkNullBool '' + no_merges = mkNullBool '' List no merge commits. ''; @@ -367,35 +360,35 @@ in List commits in reverse order. ''; - cherryPick = mkNullBool '' + cherry_pick = mkNullBool '' Omit commits that introduce the same change as another commit on the "other side" when the set of commits are limited with symmetric difference. ''; - leftOnly = mkNullBool '' + left_only = mkNullBool '' List only the commits on the left side of a symmetric difference. ''; - rightOnly = mkNullBool '' + right_only = mkNullBool '' List only the commits on the right side of a symmetric difference. ''; - maxCount = helpers.mkNullOrOption types.int '' + max_count = lib.nixvim.mkNullOrOption types.int '' Limit the number of commits. ''; - l = mkListOf types.str [ ] '' + l = defaultNullOpts.mkListOf.types.str [ ] '' `{ (",:" | "::")... }` Trace the evolution of the line range given by ,, or by the function name regex , within the . ''; - diffMerges = - helpers.mkNullOrOption + diff_merges = + lib.nixvim.mkNullOrOption (types.enum [ "off" "on" @@ -434,43 +427,43 @@ in in { git = { - singleFile = logOptions; + single_file = logOptions; - multiFile = logOptions; + multi_file = logOptions; }; hg = { - singleFile = logOptions; + single_file = logOptions; - multiFile = logOptions; + multi_file = logOptions; }; }; - winConfig = mkWinConfig { + win_config = mkWinConfig { type = "split"; height = 16; position = "bottom"; }; }; - commitLogPanel = { + commit_log_panel = { winConfig = mkWinConfig { type = "float"; }; }; - defaultArgs = + default_args = let commonDesc = "Default args prepended to the arg-list for the listed commands"; in { - diffviewOpen = mkListOf types.str [ ] commonDesc; + DiffviewOpen = defaultNullOpts.mkListOf.types.str [ ] commonDesc; - diffviewFileHistory = mkListOf types.str [ ] commonDesc; + DiffviewFileHistory = defaultNullOpts.mkListOf.types.str [ ] commonDesc; }; hooks = let - mkNullStr = helpers.mkNullOrOption types.str; + mkNullStr = lib.nixvim.mkNullOrOption types.str; in { - viewOpened = mkNullStr '' + view_opened = mkNullStr '' {view_opened} (`fun(view: View)`) Emitted after a new view has been opened. It's called after @@ -482,7 +475,7 @@ in The `View` instance that was opened. ''; - viewClosed = mkNullStr '' + view_closed = mkNullStr '' {view_closed} (`fun(view: View)`) Emitted after closing a view. @@ -492,7 +485,7 @@ in The `View` instance that was closed. ''; - viewEnter = mkNullStr '' + view_enter = mkNullStr '' {view_enter} (`fun(view: View)`) Emitted just after entering the tabpage of a view. @@ -502,7 +495,7 @@ in The `View` instance that was entered. ''; - viewLeave = mkNullStr '' + view_leave = mkNullStr '' {view_leave} (`fun(view: View)`) Emitted just before leaving the tabpage of a view. @@ -512,7 +505,7 @@ in The `View` instance that's about to be left. ''; - viewPostLayout = mkNullStr '' + view_post_layout = mkNullStr '' {view_post_layout} (`fun(view: View)`) Emitted after the window layout in a view has been adjusted. @@ -522,7 +515,7 @@ in The `View` whose layout was adjusted. ''; - diffBufRead = mkNullStr '' + diff_buf_read = mkNullStr '' {diff_buf_read} (`fun(bufnr: integer, ctx: table)`) Emitted after a new diff buffer is ready (the first time it's @@ -547,7 +540,7 @@ in The name of the current layout. ''; - diffBufWinEnter = mkNullStr '' + diff_buf_win_enter = mkNullStr '' {diff_buf_win_enter} (`fun(bufnr: integer, winid: integer, ctx: table)`) Emitted after a diff buffer is displayed in a window. @@ -577,26 +570,26 @@ in let keymapList = desc: - mkOption { + lib.mkOption { type = types.listOf ( types.submodule { options = { - mode = mkOption { + mode = lib.mkOption { type = types.str; description = "mode to bind keybinding to"; example = "n"; }; - key = mkOption { + key = lib.mkOption { type = types.str; description = "key to bind keybinding to"; example = ""; }; - action = mkOption { + action = lib.mkOption { type = types.str; description = "action for keybinding"; example = "action.select_next_entry"; }; - description = mkOption { + description = lib.mkOption { type = types.nullOr types.str; description = "description for keybinding"; default = null; @@ -620,7 +613,7 @@ in }; in { - disableDefaults = mkBool false '' + disable_defaults = defaultNullOpts.mkBool.false '' Disable the default keymaps. ''; @@ -642,163 +635,29 @@ in diff4 = keymapList '' Mappings in 4-way diff layouts ''; - filePanel = keymapList '' + file_panel = keymapList '' Mappings in file panel. ''; - fileHistoryPanel = keymapList '' + file_history_panel = keymapList '' Mappings in file history panel. ''; - optionPanel = keymapList '' + option_panel = keymapList '' Mappings in options panel. ''; - helpPanel = keymapList '' + help_panel = keymapList '' Mappings in help panel. ''; }; - disableDefaultKeymaps = mkBool false '' + disable_default_keymaps = defaultNullOpts.mkBool.false '' Disable the default keymaps; ''; }; - config = + extraConfig = + cfg: let setupOptions = with cfg; { - diff_binaries = diffBinaries; - enhanced_diff_hl = enhancedDiffHl; - git_cmd = gitCmd; - hg_cmd = hgCmd; - use_icons = useIcons; - show_help_hints = showHelpHints; - watch_index = watchIndex; - - icons = { - folder_closed = icons.folderClosed; - folder_open = icons.folderOpen; - }; - - signs = with signs; { - fold_closed = foldClosed; - fold_open = foldOpen; - inherit done; - }; - - view = with view; { - default = with default; { - inherit layout; - winbar_info = winbarInfo; - }; - - merge_tool = with mergeTool; { - inherit layout; - disable_diagnostics = disableDiagnostics; - winbar_info = winbarInfo; - }; - - file_history = with fileHistory; { - inherit layout; - winbar_info = winbarInfo; - }; - }; - - file_panel = with filePanel; { - listing_style = listingStyle; - - tree_options = with treeOptions; { - flatten_dirs = flattenDirs; - folder_statuses = folderStatuses; - }; - - win_config = with winConfig; { - inherit type; - inherit width; - inherit height; - inherit position; - inherit relative; - inherit win; - win_opts = winOpts; - }; - }; - - file_history_panel = with fileHistoryPanel; { - log_options = - with logOptions; - let - setupLogOptions = - opts: with opts; { - inherit base; - rev_range = revRange; - path_args = pathArgs; - inherit follow; - first_parent = firstParent; - show_pulls = showPulls; - inherit reflog; - inherit all; - inherit merges; - no_merges = noMerges; - inherit reverse; - cherry_pick = cherryPick; - left_only = leftOnly; - right_only = rightOnly; - max_count = maxCount; - L = l; - diff_merges = diffMerges; - inherit author; - inherit grep; - G = g; - S = s; - }; - in - { - git = with git; { - single_file = setupLogOptions singleFile; - multi_file = setupLogOptions multiFile; - }; - - hg = with hg; { - single_file = setupLogOptions singleFile; - multi_file = setupLogOptions multiFile; - }; - }; - - win_config = with winConfig; { - inherit type; - inherit width; - inherit height; - inherit position; - inherit relative; - inherit win; - win_opts = winOpts; - }; - }; - - commit_log_panel = with commitLogPanel; { - win_config = with winConfig; { - inherit type; - inherit width; - inherit height; - inherit position; - inherit relative; - inherit win; - win_opts = winOpts; - }; - }; - - default_args = with defaultArgs; { - DiffviewOpen = diffviewOpen; - DiffviewFileHistory = diffviewFileHistory; - }; - - hooks = with hooks; { - view_opened = viewOpened; - view_closed = viewClosed; - view_enter = viewEnter; - view_leave = viewLeave; - view_post_layout = viewPostLayout; - diff_buf_read = diffBufRead; - diff_buf_win_enter = diffBufWinEnter; - }; - keymaps = with keymaps; let @@ -822,20 +681,20 @@ in }; }; in - mkIf cfg.enable { + lib.mkIf cfg.enable { # TODO: added 2024-09-20 remove after 24.11 - plugins.web-devicons = mkIf ( + plugins.web-devicons = lib.mkIf ( !( config.plugins.mini.enable && config.plugins.mini.modules ? icons && config.plugins.mini.mockDevIcons ) - ) { enable = mkOverride 1490 true; }; - - extraPlugins = [ cfg.package ]; - - extraConfigLua = '' - require("diffview").setup(${lib.nixvim.toLuaObject setupOptions}) - ''; + ) { enable = lib.mkOverride 1490 true; }; }; + + inherit (import ./deprecations.nix { inherit lib; }) + imports + optionsRenamedToSettings + deprecateExtraOptions + ; } diff --git a/plugins/by-name/diffview/deprecations.nix b/plugins/by-name/diffview/deprecations.nix new file mode 100644 index 0000000000..00b4e0202c --- /dev/null +++ b/plugins/by-name/diffview/deprecations.nix @@ -0,0 +1,196 @@ +{ + # TODO: added 2024-09-04 remove after 24.11 + deprecateExtraOptions = true; + optionsRenamedToSettings = [ + "diffBinaries" + "enhancedDiffHl" + "gitCmd" + "hgCmd" + "useIcons" + "showHelpHints" + "watchIndex" + [ + "icons" + "folderClosed" + ] + [ + "icons" + "folderOpen" + ] + [ + "signs" + "folderClosed" + ] + [ + "signs" + "folderOpen" + ] + [ + "signs" + "done" + ] + [ + "view" + "default" + "layout" + ] + [ + "view" + "default" + "disableDiagnostics" + ] + [ + "view" + "default" + "winbarInfo" + ] + [ + "view" + "mergeTool" + "layout" + ] + [ + "view" + "mergeTool" + "disableDiagnostics" + ] + [ + "view" + "mergeTool" + "winbarInfo" + ] + [ + "filePanel" + "listingStyle" + ] + [ + "filePanel" + "treeOptions" + "flattenDirs" + ] + [ + "filePanel" + "treeOptions" + "folderStatuses" + ] + [ + "filePanel" + "winConfig" + "type" + ] + [ + "filePanel" + "winConfig" + "width" + ] + [ + "filePanel" + "winConfig" + "height" + ] + [ + "filePanel" + "winConfig" + "position" + ] + [ + "filePanel" + "winConfig" + "relative" + ] + [ + "filePanel" + "winConfig" + "win" + ] + [ + "filePanel" + "winConfig" + "winOpts" + ] + [ + "hooks" + "viewOpened" + ] + [ + "hooks" + "viewClosed" + ] + [ + "hooks" + "viewEnter" + ] + [ + "hooks" + "viewLeave" + ] + [ + "hooks" + "viewPostLayout" + ] + [ + "hooks" + "diffBufRead" + ] + [ + "hooks" + "diffBufWinEnter" + ] + [ + "fileHistoryPanel" + "logOptions" + "git" + "multiFile" + ] + [ + "fileHistoryPanel" + "logOptions" + "git" + "singleFile" + ] + [ + "fileHistoryPanel" + "logOptions" + "hg" + "multiFile" + ] + [ + "fileHistoryPanel" + "logOptions" + "hg" + "singleFile" + ] + (map + (optionName: [ + "fileHistoryPanel" + "logOptions" + "git" + "singleFile" + optionName + ]) + [ + "base" + "revRange" + "pathArgs" + "follow" + "firstParent" + "showPulls" + "reflog" + "all" + "merges" + "noMerges" + "reverse" + "cherryPick" + "leftOnly" + "rightOnly" + "maxCount" + "l" + "diffMerges" + "author" + "grep" + "g" + "s" + ] + ) + ]; +}