From 1badee81dbaeb73cd9d684c57c3e6a0b9db24917 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 8 Nov 2024 12:07:55 +0300 Subject: [PATCH 1/6] flake: bump nixpkgs --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index f387d4ad..ac7c087a 100644 --- a/flake.lock +++ b/flake.lock @@ -98,11 +98,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1726871744, - "narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=", + "lastModified": 1730958623, + "narHash": "sha256-JwQZIGSYnRNOgDDoIgqKITrPVil+RMWHsZH1eE1VGN0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a1d92660c6b3b7c26fb883500a80ea9d33321be2", + "rev": "85f7e662eda4fa3a995556527c87b2524b691933", "type": "github" }, "original": { From 82c2d4bdd0f3818821056190cf8eddd40e537a24 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 8 Nov 2024 12:30:39 +0300 Subject: [PATCH 2/6] flake/packages: rename deprecated `xdg_utils` --- flake/packages.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake/packages.nix b/flake/packages.nix index 84514a26..1f382927 100644 --- a/flake/packages.nix +++ b/flake/packages.nix @@ -19,7 +19,7 @@ docs-html-wrapped = pkgs.writeScriptBin "docs-html-wrapped" '' #!${pkgs.stdenv.shell} # use xdg-open to open the docs in the browser - ${pkgs.xdg_utils}/bin/xdg-open ${docs.manual.html} + ${pkgs.xdg-utils}/bin/xdg-open ${docs.manual.html} ''; # Exposed neovim configurations @@ -29,10 +29,10 @@ # Published docker images docker-nix = let - inherit (pkgs) bash gitFull buildEnv dockerTools; + inherit (pkgs) bash gitFull buildEnv; inherit (config.legacyPackages) neovim-nix; in - dockerTools.buildImage { + pkgs.dockerTools.buildImage { name = "nvf"; tag = "latest"; From 8997e62b3b00ece6d51685b23949e3062a19dd06 Mon Sep 17 00:00:00 2001 From: Noire Date: Fri, 8 Nov 2024 02:32:02 -0700 Subject: [PATCH 3/6] utility/precognition: init module (#437) * utility/precognition: init * utility/precognition: fix priority example, add default * utility/precognition: add files to default.nix * utility/precognition: fix typos, manual fmt * utility/precognition: remove useless mappings i was going to add binds to toggle/enable/disable but ehhh idk * utility/precognition: fix hints option it broke * utility/precognition: update gutter hints, new description * utility/precognition: add files to motion defaults * utility/precognition: add plugin to flake * utility/precognition: remove comment reference oops * utility/precognition: add precognition to maximal configuration it does work! * utility/precognition: update descriptions needs docs link, desc is somewhat obscure. * docs: add credit to release notes * utility/precognition: format * utility/precognition: de-linkify descriptions * utility/precognition: no more rec * utility/precognition: convert to setupOpts honestly raf was cooking with this one. it's much nicer to use compared to interpolation lol * utility/precognition: remove unnecessary function parameter * utility/precognition: format * utility/precognition: add description to disabled_fts oops * utility/precognition: manual format * utility/precognition: remove periods at the end of descriptions * utility/precognition: fix configuration.nix entry oops lol * utility/precognition: format * utility/precognition: expand `vim` * precognition: consistency changes Just my minor nits. --------- Co-authored-by: NotAShelf --- configuration.nix | 1 + docs/release-notes/rl-0.7.md | 4 ++ flake.lock | 17 +++++ flake.nix | 5 ++ modules/plugins/utility/motion/default.nix | 1 + .../utility/motion/precognition/config.nix | 18 +++++ .../utility/motion/precognition/default.nix | 6 ++ .../motion/precognition/precognition.nix | 66 +++++++++++++++++++ 8 files changed, 118 insertions(+) create mode 100644 modules/plugins/utility/motion/precognition/config.nix create mode 100644 modules/plugins/utility/motion/precognition/default.nix create mode 100644 modules/plugins/utility/motion/precognition/precognition.nix diff --git a/configuration.nix b/configuration.nix index f56061bc..c3e5722f 100644 --- a/configuration.nix +++ b/configuration.nix @@ -165,6 +165,7 @@ isMaximal: { motion = { hop.enable = true; leap.enable = true; + precognition.enable = isMaximal; }; images = { diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 7023371c..a8c2a017 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -216,3 +216,7 @@ everyone. [Bloxx12](https://github.com/Bloxx12): - Fix internal breakage in `elixir-tools` setup. + +[Nowaaru](https://github.com/Nowaaru): + +- Add `precognition-nvim`. diff --git a/flake.lock b/flake.lock index 7775fb1f..0881cae7 100644 --- a/flake.lock +++ b/flake.lock @@ -1421,6 +1421,22 @@ "type": "github" } }, + "plugin-precognition-nvim": { + "flake": false, + "locked": { + "lastModified": 1730325090, + "narHash": "sha256-onY1Aa+dwLR1wRua52hpSXj6zZOZXjkUlDjDa0xEEcE=", + "owner": "tris203", + "repo": "precognition.nvim", + "rev": "0189e8d6f96275a079b2805d68d49414871885cd", + "type": "github" + }, + "original": { + "owner": "tris203", + "repo": "precognition.nvim", + "type": "github" + } + }, "plugin-project-nvim": { "flake": false, "locked": { @@ -1880,6 +1896,7 @@ "plugin-otter-nvim": "plugin-otter-nvim", "plugin-oxocarbon": "plugin-oxocarbon", "plugin-plenary-nvim": "plugin-plenary-nvim", + "plugin-precognition-nvim": "plugin-precognition-nvim", "plugin-project-nvim": "plugin-project-nvim", "plugin-registers": "plugin-registers", "plugin-rose-pine": "plugin-rose-pine", diff --git a/flake.nix b/flake.nix index 987e3e59..ed900937 100644 --- a/flake.nix +++ b/flake.nix @@ -525,6 +525,11 @@ flake = false; }; + plugin-precognition-nvim = { + url = "github:tris203/precognition.nvim"; + flake = false; + }; + # Note-taking plugin-obsidian-nvim = { url = "github:epwalsh/obsidian.nvim"; diff --git a/modules/plugins/utility/motion/default.nix b/modules/plugins/utility/motion/default.nix index 925a33e8..838fec78 100644 --- a/modules/plugins/utility/motion/default.nix +++ b/modules/plugins/utility/motion/default.nix @@ -2,5 +2,6 @@ _: { imports = [ ./hop ./leap + ./precognition ]; } diff --git a/modules/plugins/utility/motion/precognition/config.nix b/modules/plugins/utility/motion/precognition/config.nix new file mode 100644 index 00000000..cd4ef4c4 --- /dev/null +++ b/modules/plugins/utility/motion/precognition/config.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + + cfg = config.vim.utility.motion.precognition; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["precognition-nvim"]; + luaConfigRC.precognition = lib.nvim.dag.entryAnywhere '' + require('precognition').setup(${lib.nvim.lua.toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/utility/motion/precognition/default.nix b/modules/plugins/utility/motion/precognition/default.nix new file mode 100644 index 00000000..85d223cc --- /dev/null +++ b/modules/plugins/utility/motion/precognition/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./precognition.nix + ./config.nix + ]; +} diff --git a/modules/plugins/utility/motion/precognition/precognition.nix b/modules/plugins/utility/motion/precognition/precognition.nix new file mode 100644 index 00000000..9bccf8e1 --- /dev/null +++ b/modules/plugins/utility/motion/precognition/precognition.nix @@ -0,0 +1,66 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption mkOption literalExpression; + inherit (lib.types) attrsOf listOf str bool int submodule; + inherit (lib.nvim.types) mkPluginSetupOption; + + mkHintType = description: + mkOption { + inherit description; + default = {}; + type = attrsOf (submodule { + options = { + text = mkOption { + type = str; + description = "The easier-to-read depiction of the motion"; + }; + + prio = mkOption { + type = int; + default = 1; + description = "The priority of the hint"; + example = 10; + }; + }; + }); + }; +in { + options.vim.utility.motion.precognition = { + enable = mkEnableOption "assisted motion discovery[precognition.nvim]"; + setupOpts = mkPluginSetupOption "precognition.nvim" { + startVisible = mkOption { + type = bool; + default = true; + description = "Whether to start 'precognition' automatically"; + }; + + showBlankVirtLine = mkOption { + type = bool; + default = true; + description = "Whether to show a blank virtual line when no movements are shown"; + }; + + highlightColor = mkOption { + type = attrsOf str; + default = {link = "Comment";}; + example = literalExpression '' + { link = "Comment"; } + # or + { foreground = "#0000FF"; background = "#000000"; }; + ''; + description = "The highlight for the virtual text"; + }; + + disabled_fts = mkOption { + type = listOf str; + default = ["startify"]; + example = literalExpression ''["startify"]''; + description = "Filetypes that automatically disable 'precognition'"; + }; + + hints = mkHintType "What motions display, and at what priority"; + gutterHints = mkHintType '' + What motions display and at what priority. Only appears in gutters + ''; + }; + }; +} From a6bb6e1b3e360a1222bdc877633ac37440f1d4d2 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 8 Nov 2024 12:56:21 +0300 Subject: [PATCH 4/6] modules/visuals: migrate plugins to setupOpts --- configuration.nix | 19 +- .../cellular-automaton/cellular-automaton.nix | 60 ++++ .../visuals/cellular-automaton/config.nix | 39 +++ .../visuals/cellular-automaton/default.nix | 6 + .../visuals/cinnamon-nvim/cinnamon-nvim.nix | 35 +++ .../plugins/visuals/cinnamon-nvim/config.nix | 21 ++ .../plugins/visuals/cinnamon-nvim/default.nix | 6 + modules/plugins/visuals/config.nix | 118 -------- modules/plugins/visuals/default.nix | 20 +- .../{fidget => fidget-nvim}/config.nix | 0 .../{fidget => fidget-nvim}/default.nix | 0 .../{fidget => fidget-nvim}/fidget.nix | 7 +- .../plugins/visuals/highlight-undo/config.nix | 21 ++ .../visuals/highlight-undo/default.nix | 6 + .../visuals/highlight-undo/highlight-undo.nix | 32 +++ .../visuals/indent-blankline/config.nix | 21 ++ .../visuals/indent-blankline/default.nix | 6 + .../indent-blankline/indent-blankline.nix | 195 +++++++++++++ .../visuals/nvim-cursorline/config.nix | 21 ++ .../visuals/nvim-cursorline/default.nix | 6 + .../nvim-cursorline/nvim-cursorline.nix | 65 +++++ .../plugins/visuals/nvim-scrollbar/config.nix | 21 ++ .../visuals/nvim-scrollbar/default.nix | 6 + .../visuals/nvim-scrollbar/scrollbar-nvim.nix | 21 ++ .../visuals/nvim-web-devicons/config.nix | 21 ++ .../visuals/nvim-web-devicons/default.nix | 6 + .../nvim-web-devicons/nvim-web-devicons.nix | 48 ++++ modules/plugins/visuals/visuals.nix | 261 ------------------ 28 files changed, 692 insertions(+), 396 deletions(-) create mode 100644 modules/plugins/visuals/cellular-automaton/cellular-automaton.nix create mode 100644 modules/plugins/visuals/cellular-automaton/config.nix create mode 100644 modules/plugins/visuals/cellular-automaton/default.nix create mode 100644 modules/plugins/visuals/cinnamon-nvim/cinnamon-nvim.nix create mode 100644 modules/plugins/visuals/cinnamon-nvim/config.nix create mode 100644 modules/plugins/visuals/cinnamon-nvim/default.nix delete mode 100644 modules/plugins/visuals/config.nix rename modules/plugins/visuals/{fidget => fidget-nvim}/config.nix (100%) rename modules/plugins/visuals/{fidget => fidget-nvim}/default.nix (100%) rename modules/plugins/visuals/{fidget => fidget-nvim}/fidget.nix (98%) create mode 100644 modules/plugins/visuals/highlight-undo/config.nix create mode 100644 modules/plugins/visuals/highlight-undo/default.nix create mode 100644 modules/plugins/visuals/highlight-undo/highlight-undo.nix create mode 100644 modules/plugins/visuals/indent-blankline/config.nix create mode 100644 modules/plugins/visuals/indent-blankline/default.nix create mode 100644 modules/plugins/visuals/indent-blankline/indent-blankline.nix create mode 100644 modules/plugins/visuals/nvim-cursorline/config.nix create mode 100644 modules/plugins/visuals/nvim-cursorline/default.nix create mode 100644 modules/plugins/visuals/nvim-cursorline/nvim-cursorline.nix create mode 100644 modules/plugins/visuals/nvim-scrollbar/config.nix create mode 100644 modules/plugins/visuals/nvim-scrollbar/default.nix create mode 100644 modules/plugins/visuals/nvim-scrollbar/scrollbar-nvim.nix create mode 100644 modules/plugins/visuals/nvim-web-devicons/config.nix create mode 100644 modules/plugins/visuals/nvim-web-devicons/default.nix create mode 100644 modules/plugins/visuals/nvim-web-devicons/nvim-web-devicons.nix delete mode 100644 modules/plugins/visuals/visuals.nix diff --git a/configuration.nix b/configuration.nix index 8de00100..98b99998 100644 --- a/configuration.nix +++ b/configuration.nix @@ -77,20 +77,17 @@ isMaximal: { }; visuals = { - enable = true; - nvimWebDevicons.enable = true; - scrollBar.enable = isMaximal; - smoothScroll.enable = true; - cellularAutomaton.enable = false; + nvim-scrollbar.enable = isMaximal; + nvim-web-devicons.enable = true; + nvim-cursorline.enable = true; + cinnamon-nvim.enable = true; fidget-nvim.enable = true; + highlight-undo.enable = true; + indent-blankline.enable = true; - indentBlankline.enable = true; - - cursorline = { - enable = true; - lineTimeout = 0; - }; + # Fun + cellular-automaton.enable = false; }; statusline = { diff --git a/modules/plugins/visuals/cellular-automaton/cellular-automaton.nix b/modules/plugins/visuals/cellular-automaton/cellular-automaton.nix new file mode 100644 index 00000000..6d432e7b --- /dev/null +++ b/modules/plugins/visuals/cellular-automaton/cellular-automaton.nix @@ -0,0 +1,60 @@ +{lib, ...}: let + inherit (lib.modules) mkRenamedOptionModule; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.nvim.types) luaInline; + inherit (lib.nvim.binds) mkMappingOption; + inherit (lib.generators) mkLuaInline; +in { + imports = [ + (mkRenamedOptionModule ["vim" "visuals" "cellularAutomaton"] ["vim" "visuals" "cellular-automaton"]) + ]; + + options.vim.visuals.cellular-automaton = { + enable = mkEnableOption "cellular-automaton to help you cope with stubborn code [cellular-automaton]"; + + mappings = { + makeItRain = mkMappingOption "Make it rain [cellular-automaton]" "fml"; + }; + + animation = { + register = mkEnableOption "registering configured animation(s) automatically" // {default = true;}; + setup = mkOption { + type = luaInline; + default = mkLuaInline '' + local ca_config = { + fps = 50, + name = 'slide', + } + + -- init function is invoked only once at the start + -- config.init = function (grid) + -- + -- end + + -- update function + ca_config.update = function (grid) + for i = 1, #grid do + local prev = grid[i][#(grid[i])] + for j = 1, #(grid[i]) do + grid[i][j], prev = prev, grid[i][j] + end + end + return true + end + ''; + description = '' + Configuration used to generate an animation to be registered. + + The final value for `ca_config` will be used to register a new + animation using `require("cellular-automaton").register_animation(ca_config)` + + ::: {.warning} + `ca_config` **must** eval to a valid Lua table. nvf does not and cannot + perform any kind of validation on your Lua code, so bogus values will + result in errors when the animation is registered. + ::: + ''; + }; + }; + }; +} diff --git a/modules/plugins/visuals/cellular-automaton/config.nix b/modules/plugins/visuals/cellular-automaton/config.nix new file mode 100644 index 00000000..2c0c4669 --- /dev/null +++ b/modules/plugins/visuals/cellular-automaton/config.nix @@ -0,0 +1,39 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.strings) optionalString; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere entryAfter; + inherit (lib.nvim.binds) mkBinding; + + cfg = config.vim.visuals.cellular-automaton; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["cellular-automaton"]; + + maps.normal = mkBinding cfg.mappings.makeItRain "CellularAutomaton make_it_rain" "Make it rain"; + + pluginRC = { + # XXX: This has no error handling. User can set + # `animation.setup` to a bogus value, and we would + # have an error in our hands. I don't think there + # is a good way to check for errors, so I'm leaving + # it like this under the assumption that the user + # will not mess it up for no reason. + cellular-automaton-anim = entryAnywhere (optionalString cfg.animation.register '' + -- Coerce user animation config into pluginRC + ${toLuaObject cfg.animation.setup} + ''); + + cellular-automaton = entryAfter ["cellular-automaton-anim"] '' + -- Register the animation + require("cellular-automaton").register_animation(ca_config) + ''; + }; + }; + }; +} diff --git a/modules/plugins/visuals/cellular-automaton/default.nix b/modules/plugins/visuals/cellular-automaton/default.nix new file mode 100644 index 00000000..4bb43af7 --- /dev/null +++ b/modules/plugins/visuals/cellular-automaton/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./cellular-automaton.nix + ]; +} diff --git a/modules/plugins/visuals/cinnamon-nvim/cinnamon-nvim.nix b/modules/plugins/visuals/cinnamon-nvim/cinnamon-nvim.nix new file mode 100644 index 00000000..109b06f0 --- /dev/null +++ b/modules/plugins/visuals/cinnamon-nvim/cinnamon-nvim.nix @@ -0,0 +1,35 @@ +{lib, ...}: let + inherit (lib.modules) mkRemovedOptionModule; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.types) submodule attrs attrsOf; + inherit (lib.nvim.types) mkPluginSetupOption; +in { + imports = [ + (mkRemovedOptionModule ["vim" "visuals" "smoothScroll"] '' + `vim.visuals.smoothScroll` has been removed. You may consider enabling the + option `vim.visuals.cinnamon-nvim` to repliace previous smooth scrolling + behaviour. + '') + ]; + + options.vim.visuals.cinnamon-nvim = { + enable = mkEnableOption "smooth scrolling for ANY command [cinnamon-nvim]"; + setupOpts = mkPluginSetupOption "cinnamon.nvim" { + options = mkOption { + type = attrs; + default = { + # Defaults provided for the sake of documentation only! + # Who would've guessed setupOpts.options would be confusing? + mode = "cursor"; + count_only = false; + }; + description = "Scroll options"; + }; + + keymaps = { + basic = mkEnableOption "basic animation keymaps"; + extra = mkEnableOption "extra animation keymaps"; + }; + }; + }; +} diff --git a/modules/plugins/visuals/cinnamon-nvim/config.nix b/modules/plugins/visuals/cinnamon-nvim/config.nix new file mode 100644 index 00000000..8e420221 --- /dev/null +++ b/modules/plugins/visuals/cinnamon-nvim/config.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere; + + cfg = config.vim.visuals.cinnamon-nvim; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["cinnamon-nvim"]; + + pluginRC.cursorline = entryAnywhere '' + require("cinnamon").setup(${toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/visuals/cinnamon-nvim/default.nix b/modules/plugins/visuals/cinnamon-nvim/default.nix new file mode 100644 index 00000000..29ced8e8 --- /dev/null +++ b/modules/plugins/visuals/cinnamon-nvim/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./cinnamon-nvim.nix + ]; +} diff --git a/modules/plugins/visuals/config.nix b/modules/plugins/visuals/config.nix deleted file mode 100644 index 1457ff3a..00000000 --- a/modules/plugins/visuals/config.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ - config, - lib, - ... -}: let - inherit (lib.modules) mkIf mkMerge; - inherit (lib.trivial) boolToString; - inherit (lib.nvim.binds) mkBinding; - inherit (lib.nvim.dag) entryAnywhere; - inherit (lib.nvim.lua) toLuaObject; - - cfg = config.vim.visuals; -in { - config = mkIf cfg.enable (mkMerge [ - (mkIf cfg.indentBlankline.enable { - vim.startPlugins = ["indent-blankline"]; - vim.pluginRC.indent-blankline = entryAnywhere '' - require("ibl").setup(${toLuaObject cfg.indentBlankline.setupOpts}) - ''; - }) - - (mkIf cfg.cursorline.enable { - vim.startPlugins = ["nvim-cursorline"]; - vim.pluginRC.cursorline = entryAnywhere '' - require('nvim-cursorline').setup { - cursorline = { - timeout = ${toString cfg.cursorline.lineTimeout}, - number = ${boolToString (!cfg.cursorline.lineNumbersOnly)}, - } - } - ''; - }) - - (mkIf cfg.nvimWebDevicons.enable { - vim.startPlugins = ["nvim-web-devicons"]; - }) - - (mkIf cfg.scrollBar.enable { - vim.startPlugins = ["scrollbar-nvim"]; - vim.pluginRC.scrollBar = entryAnywhere '' - require('scrollbar').setup{ - excluded_filetypes = { - 'prompt', - 'TelescopePrompt', - 'noice', - 'NvimTree', - 'alpha', - 'notify', - 'Navbuddy' - }, - } - ''; - }) - - (mkIf cfg.smoothScroll.enable { - vim.startPlugins = ["cinnamon-nvim"]; - vim.pluginRC.smoothScroll = entryAnywhere '' - require('cinnamon').setup() - ''; - }) - - (mkIf cfg.cellularAutomaton.enable { - vim.startPlugins = ["cellular-automaton"]; - - vim.maps.normal = mkBinding cfg.cellularAutomaton.mappings.makeItRain "CellularAutomaton make_it_rain" "Make it rain"; - - vim.pluginRC.cellularAUtomaton = entryAnywhere '' - local config = { - fps = 50, - name = 'slide', - } - - -- init function is invoked only once at the start - -- config.init = function (grid) - -- - -- end - - -- update function - config.update = function (grid) - for i = 1, #grid do - local prev = grid[i][#(grid[i])] - for j = 1, #(grid[i]) do - grid[i][j], prev = prev, grid[i][j] - end - end - return true - end - - require("cellular-automaton").register_animation(config) - ''; - }) - - (mkIf cfg.highlight-undo.enable { - vim.startPlugins = ["highlight-undo"]; - vim.pluginRC.highlight-undo = entryAnywhere '' - require('highlight-undo').setup({ - duration = ${toString cfg.highlight-undo.duration}, - highlight_for_count = ${boolToString cfg.highlight-undo.highlightForCount}, - undo = { - hlgroup = ${cfg.highlight-undo.undo.hlGroup}, - mode = 'n', - lhs = 'u', - map = 'undo', - opts = {} - }, - - redo = { - hlgroup = ${cfg.highlight-undo.redo.hlGroup}, - mode = 'n', - lhs = '', - map = 'redo', - opts = {} - }, - }) - ''; - }) - ]); -} diff --git a/modules/plugins/visuals/default.nix b/modules/plugins/visuals/default.nix index 3c977cba..7b413c30 100644 --- a/modules/plugins/visuals/default.nix +++ b/modules/plugins/visuals/default.nix @@ -1,7 +1,19 @@ -{...}: { +{lib, ...}: let + inherit (lib.modules) mkRemovedOptionModule; +in { imports = [ - ./config.nix - ./visuals.nix - ./fidget + (mkRemovedOptionModule ["vim" "visuals" "enable"] '' + As top-level toggles are being deprecated, you are encouraged + to handle plugin toggles under individual options. + '') + + ./cellular-automaton + ./cinnamon-nvim + ./fidget-nvim + ./highlight-undo + ./indent-blankline + ./nvim-cursorline + ./nvim-scrollbar + ./nvim-web-devicons ]; } diff --git a/modules/plugins/visuals/fidget/config.nix b/modules/plugins/visuals/fidget-nvim/config.nix similarity index 100% rename from modules/plugins/visuals/fidget/config.nix rename to modules/plugins/visuals/fidget-nvim/config.nix diff --git a/modules/plugins/visuals/fidget/default.nix b/modules/plugins/visuals/fidget-nvim/default.nix similarity index 100% rename from modules/plugins/visuals/fidget/default.nix rename to modules/plugins/visuals/fidget-nvim/default.nix diff --git a/modules/plugins/visuals/fidget/fidget.nix b/modules/plugins/visuals/fidget-nvim/fidget.nix similarity index 98% rename from modules/plugins/visuals/fidget/fidget.nix rename to modules/plugins/visuals/fidget-nvim/fidget.nix index 79974bd1..fa2ecb44 100644 --- a/modules/plugins/visuals/fidget/fidget.nix +++ b/modules/plugins/visuals/fidget-nvim/fidget.nix @@ -12,8 +12,11 @@ in { imports = [ (mkRenamedOptionModule ["vim" "visuals" "fidget-nvim" "align" "bottom"] ["vim" "visuals" "fidget-nvim" "setupOpts" "notification" "window" "align"]) - (mkRemovedOptionModule ["vim" "visuals" "fidget-nvim" "align" "right"] - "Option `vim.fidget-nvim.align.right` has been removed and does not have an equivalent replacement in rewritten fidget.nvim configuration.") + (mkRemovedOptionModule ["vim" "visuals" "fidget-nvim" "align" "right"] '' + Option `vim.fidget-nvim.align.right` has been removed and does not have an + equivalent replacement in rewritten fidget.nvim configuration. Please remove + it from your configuration. + '') ]; options.vim.visuals.fidget-nvim = { diff --git a/modules/plugins/visuals/highlight-undo/config.nix b/modules/plugins/visuals/highlight-undo/config.nix new file mode 100644 index 00000000..d41c6a69 --- /dev/null +++ b/modules/plugins/visuals/highlight-undo/config.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere; + + cfg = config.vim.visuals.highlight-undo; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["highlight-undo"]; + + pluginRC.highlight-undo = entryAnywhere '' + require("highlight-undo").setup(${toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/visuals/highlight-undo/default.nix b/modules/plugins/visuals/highlight-undo/default.nix new file mode 100644 index 00000000..b8624889 --- /dev/null +++ b/modules/plugins/visuals/highlight-undo/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./highlight-undo.nix + ]; +} diff --git a/modules/plugins/visuals/highlight-undo/highlight-undo.nix b/modules/plugins/visuals/highlight-undo/highlight-undo.nix new file mode 100644 index 00000000..fc5d7226 --- /dev/null +++ b/modules/plugins/visuals/highlight-undo/highlight-undo.nix @@ -0,0 +1,32 @@ +{lib, ...}: let + inherit (lib.modules) mkRemovedOptionModule; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.types) int; + inherit (lib.nvim.types) mkPluginSetupOption; + + checkDocsMsg = '' + highlight-undo.nvim has deprecated previously used configuration options in + a recent update, so previous values will no longer work as expected. + + Please use `vim.visuals.highlight-undo.setupOpts` with upstream instructions + ''; +in { + imports = [ + # This gives a lot of error messages for those with default values set or modified. Could + # there be a better way to handle his? Perhaps an assertion? + (mkRemovedOptionModule ["vim" "visuals" "highlight-undo" "highlightForCount"] checkDocsMsg) + (mkRemovedOptionModule ["vim" "visuals" "highlight-undo" "undo" "hlGroup"] checkDocsMsg) + (mkRemovedOptionModule ["vim" "visuals" "highlight-undo" "redo" "hlGroup"] checkDocsMsg) + ]; + + options.vim.visuals.highlight-undo = { + enable = mkEnableOption "highlight undo [highlight-undo]"; + setupOpts = mkPluginSetupOption "highlight-undo" { + duration = mkOption { + type = int; + default = 500; + description = "Duration of the highlight"; + }; + }; + }; +} diff --git a/modules/plugins/visuals/indent-blankline/config.nix b/modules/plugins/visuals/indent-blankline/config.nix new file mode 100644 index 00000000..581bd136 --- /dev/null +++ b/modules/plugins/visuals/indent-blankline/config.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere; + + cfg = config.vim.visuals.indent-blankline; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["indent-blankline"]; + + pluginRC.indent-blankline = entryAnywhere '' + require("ibl").setup(${toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/visuals/indent-blankline/default.nix b/modules/plugins/visuals/indent-blankline/default.nix new file mode 100644 index 00000000..57ebc6ac --- /dev/null +++ b/modules/plugins/visuals/indent-blankline/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./indent-blankline.nix + ]; +} diff --git a/modules/plugins/visuals/indent-blankline/indent-blankline.nix b/modules/plugins/visuals/indent-blankline/indent-blankline.nix new file mode 100644 index 00000000..ff9bccc7 --- /dev/null +++ b/modules/plugins/visuals/indent-blankline/indent-blankline.nix @@ -0,0 +1,195 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkRenamedOptionModule; + inherit (lib.options) mkOption mkEnableOption literalExpression; + inherit (lib.types) int bool str nullOr either listOf attrsOf; + + cfg = config.vim.visuals; +in { + imports = [ + (mkRenamedOptionModule ["vim" "visuals" "indentBlankline"] ["vim" "visuals" "indent-blankline"]) + ]; + + options.vim.visuals.indent-blankline = { + enable = mkEnableOption "indentation guides [indent-blankline]"; + setupOpts = { + debounce = mkOption { + type = int; + description = "Debounce time in milliseconds"; + default = 200; + }; + + viewport_buffer = { + min = mkOption { + type = int; + description = "Number of lines above and below of what is currently + visible in the window"; + default = 30; + }; + + max = mkOption { + type = int; + description = "Number of lines above and below of what is currently + visible in the window"; + default = 500; + }; + }; + + indent = { + char = mkOption { + type = either str (listOf str); + description = "Character(s) for indentation guide"; + default = "│"; + }; + + tab_char = mkOption { + type = nullOr (either str (listOf str)); + description = '' + Character(s) for tab indentation guide. + + See `:help ibl.config.indent.tab_char`. + ''; + default = null; + }; + + highlight = mkOption { + type = nullOr (either str (listOf str)); + description = '' + The highlight group(s) applied to the indentation guide. + + See `:help ibl.config.indent.highlight`. + ''; + default = null; + }; + + smart_indent_cap = mkOption { + type = bool; + description = "Caps the number of indentation levels based on surrounding code"; + default = true; + }; + + priority = mkOption { + type = int; + description = "Virtual text priority for the indentation guide"; + default = 1; + }; + + repeat_linebreak = mkOption { + type = bool; + description = "Repeat indentation guides on wrapped lines"; + default = true; + }; + }; + + whitespace = { + highlight = mkOption { + type = nullOr (either str (listOf str)); + description = '' + The highlight group(s) applied to whitespace. + + See `:help ibl.config.whitespace.highlight`. + ''; + default = null; + }; + + remove_blankline_trail = mkOption { + type = bool; + description = "Remove trailing whitespace on blanklines"; + default = true; + }; + }; + + scope = { + enabled = mkOption { + description = "Highlight current scope from treesitter"; + type = bool; + default = config.vim.treesitter.enable; + defaultText = literalExpression "config.vim.treesitter.enable"; + }; + + char = mkOption { + type = either str (listOf str); + description = "The character(s) for the scope indentation guide"; + default = cfg.indent-blankline.setupOpts.indent.char; + defaultText = literalExpression "config.vim.visuals.indent-blankline.setupOpts.indent.char"; + }; + + show_start = mkOption { + type = bool; + description = "Show an underline on the first line of the scope"; + default = false; + }; + + show_end = mkOption { + type = bool; + description = "Show an underline on the last line of the scope"; + default = false; + }; + + show_exact_scope = mkOption { + type = bool; + description = "Show the scope underline at the exact start of the scope, even if that's to the right of the indentation guide"; + default = false; + }; + + injected_languages = mkOption { + type = bool; + description = "Check for injected languages (treesitter)"; + default = config.vim.treesitter.enable; + defaultText = literalExpression "config.vim.treesitter.enable"; + }; + + highlight = mkOption { + type = nullOr (either str (listOf str)); + description = '' + The highlight group(s) applied to the scope. + + See `:help `ibl.config.scope.highlight`. + ''; + default = null; + }; + + priority = mkOption { + type = int; + description = "Virtual text priority for the scope"; + default = 1024; + }; + + include.node_type = mkOption { + type = attrsOf (listOf str); + description = "Additional nodes to be used for scope checking, per language"; + default = {}; + }; + + exclude = { + language = mkOption { + type = listOf str; + description = '' + The list of treesitter languages to disable scope for. + + `*` can be used as a wildcard for every language/node type. + ''; + default = []; + }; + + node_type = mkOption { + type = attrsOf (listOf str); + description = '' + Nodes to ignore in scope checking, per language. + + `*` can be used as a wildcard for every language. + ''; + default = { + "*" = ["source_file" "program"]; + lua = ["chunk"]; + python = ["module"]; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/plugins/visuals/nvim-cursorline/config.nix b/modules/plugins/visuals/nvim-cursorline/config.nix new file mode 100644 index 00000000..487c9af4 --- /dev/null +++ b/modules/plugins/visuals/nvim-cursorline/config.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere; + + cfg = config.vim.visuals.nvim-cursorline; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["nvim-cursorline"]; + + pluginRC.nvim-cursorline = entryAnywhere '' + require("nvim-cursorline").setup(${toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/visuals/nvim-cursorline/default.nix b/modules/plugins/visuals/nvim-cursorline/default.nix new file mode 100644 index 00000000..b09014dd --- /dev/null +++ b/modules/plugins/visuals/nvim-cursorline/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./nvim-cursorline.nix + ]; +} diff --git a/modules/plugins/visuals/nvim-cursorline/nvim-cursorline.nix b/modules/plugins/visuals/nvim-cursorline/nvim-cursorline.nix new file mode 100644 index 00000000..7e9e1242 --- /dev/null +++ b/modules/plugins/visuals/nvim-cursorline/nvim-cursorline.nix @@ -0,0 +1,65 @@ +{lib, ...}: let + inherit (lib.modules) mkRenamedOptionModule mkRemovedOptionModule; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.types) int bool; + inherit (lib.nvim.types) mkPluginSetupOption; +in { + imports = [ + (mkRenamedOptionModule ["vim" "visuals" "cursorline"] ["vim" "visuals" "nvim-cursorline"]) + (mkRenamedOptionModule ["vim" "visuals" "nvim-cursorline" "lineTimeout"] ["vim" "visuals" "nvim-cursorline" "setupOpts" "line_timeout"]) + (mkRemovedOptionModule ["vim" "visuals" "nvim-cursorline" "lineNumbersOnly"] '' + `vim.visuals.nvim-cursorline.lineNumbersOnly` has been removed. Use `vim.visuals.nvim-cursorline.number` instead. + '') + ]; + + options.vim.visuals.nvim-cursorline = { + enable = mkEnableOption "cursor word and line highlighting [nvim-cursorline]"; + + # Upstream has **zero** documentation whatsoever. I'm making wild assumptions + # on what goes into description based don the source code. I'm sorry. Not. + setupOpts = mkPluginSetupOption "nvim-cursorline" { + cursorline = { + enable = mkEnableOption "cursor line highlighting"; + timeout = mkOption { + type = int; + default = 1000; + description = "Cursorline timeout"; + }; + + number = mkOption { + type = bool; + default = false; + description = '' + If true, `vim.wo.cursorlineopt` will be set to "number" + when the trigger conditions are met. + ''; + }; + }; + + cursorword = { + enable = mkEnableOption "cursor word highlighting"; + timeout = mkOption { + type = int; + default = 1000; + description = "Cursorword timeout"; + }; + + min_length = mkOption { + type = int; + default = 3; + description = '' + The min_length option defines the minimum number of characters + a word must have to be highlighted as a "cursor word." Any word + shorter than this value will be ignored and not highlighted. + ''; + }; + + hl.underline = mkOption { + type = bool; + default = true; + description = "Whether to underline matching cursorword"; + }; + }; + }; + }; +} diff --git a/modules/plugins/visuals/nvim-scrollbar/config.nix b/modules/plugins/visuals/nvim-scrollbar/config.nix new file mode 100644 index 00000000..1d0ebc76 --- /dev/null +++ b/modules/plugins/visuals/nvim-scrollbar/config.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere; + + cfg = config.vim.visuals.nvim-scrollbar; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["nvim-scrollbar"]; + + pluginRC.cursorline = entryAnywhere '' + require("scrollbar").setup(${toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/visuals/nvim-scrollbar/default.nix b/modules/plugins/visuals/nvim-scrollbar/default.nix new file mode 100644 index 00000000..3341c65e --- /dev/null +++ b/modules/plugins/visuals/nvim-scrollbar/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./scrollbar-nvim.nix + ]; +} diff --git a/modules/plugins/visuals/nvim-scrollbar/scrollbar-nvim.nix b/modules/plugins/visuals/nvim-scrollbar/scrollbar-nvim.nix new file mode 100644 index 00000000..bdf48cb4 --- /dev/null +++ b/modules/plugins/visuals/nvim-scrollbar/scrollbar-nvim.nix @@ -0,0 +1,21 @@ +{lib, ...}: let + inherit (lib.modules) mkRenamedOptionModule; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.types) listOf str; + inherit (lib.nvim.types) mkPluginSetupOption; +in { + imports = [ + (mkRenamedOptionModule ["vim" "visuals" "scrollBar"] ["vim" "visuals" "nvim-scrollbar"]) + ]; + + options.vim.visuals.nvim-scrollbar = { + enable = mkEnableOption "extensible Neovim Scrollbar [nvim-scrollbar]"; + setupOpts = mkPluginSetupOption "scrollbar-nvim" { + excluded_filetypes = mkOption { + type = listOf str; + default = ["prompt" "TelescopePrompt" "noice" "noice" "NvimTree" "neo-tree" "alpha" "notify" "Navbuddy"]; + description = "Filetypes to hide the scrollbar on"; + }; + }; + }; +} diff --git a/modules/plugins/visuals/nvim-web-devicons/config.nix b/modules/plugins/visuals/nvim-web-devicons/config.nix new file mode 100644 index 00000000..9c8e9418 --- /dev/null +++ b/modules/plugins/visuals/nvim-web-devicons/config.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAnywhere; + + cfg = config.vim.visuals.nvim-web-devicons; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["nvim-web-devicons"]; + + pluginRC.nvim-web-devicons = entryAnywhere '' + require("nvim-web-devicons").setup(${toLuaObject cfg.setupOpts}) + ''; + }; + }; +} diff --git a/modules/plugins/visuals/nvim-web-devicons/default.nix b/modules/plugins/visuals/nvim-web-devicons/default.nix new file mode 100644 index 00000000..57a3dbc1 --- /dev/null +++ b/modules/plugins/visuals/nvim-web-devicons/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./nvim-web-devicons.nix + ]; +} diff --git a/modules/plugins/visuals/nvim-web-devicons/nvim-web-devicons.nix b/modules/plugins/visuals/nvim-web-devicons/nvim-web-devicons.nix new file mode 100644 index 00000000..7883486c --- /dev/null +++ b/modules/plugins/visuals/nvim-web-devicons/nvim-web-devicons.nix @@ -0,0 +1,48 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkRenamedOptionModule; + inherit (lib.options) mkOption mkEnableOption literalExpression; + inherit (lib.types) nullOr attrsOf attrs enum; + inherit (lib.nvim.types) mkPluginSetupOption; +in { + imports = [ + (mkRenamedOptionModule ["vim" "visuals" "nvimWebDevicons"] ["vim" "visuals" "nvim-web-devicons"]) + ]; + + options.vim.visuals.nvim-web-devicons = { + enable = mkEnableOption "Neovim dev icons [nvim-web-devicons]"; + + setupOpts = mkPluginSetupOption "nvim-web-devicons" { + color_icons = mkEnableOption "different highlight colors per icon"; + variant = mkOption { + type = nullOr (enum ["light" "dark"]); + default = null; + description = "Set the light or dark variant manually, instead of relying on `background`"; + }; + + override = mkOption { + type = attrsOf attrs; + default = {}; + example = literalExpression '' + { + zsh = { + name = "Zsh"; + icon = ""; + color = "#428850"; + cterm_color = "65"; + }; + } + ''; + description = '' + Your personal icon overrides. + + You can specify color or cterm_color instead of specifying + both of them. DevIcon will be appended to `name` + ''; + }; + }; + }; +} diff --git a/modules/plugins/visuals/visuals.nix b/modules/plugins/visuals/visuals.nix deleted file mode 100644 index d3cfac1c..00000000 --- a/modules/plugins/visuals/visuals.nix +++ /dev/null @@ -1,261 +0,0 @@ -{ - config, - lib, - ... -}: let - inherit (lib.options) mkEnableOption mkOption literalExpression; - inherit (lib.types) int bool str nullOr either listOf attrsOf; - inherit (lib.nvim.binds) mkMappingOption; - - cfg = config.vim.visuals; -in { - options.vim.visuals = { - enable = mkEnableOption "Visual enhancements."; - - nvimWebDevicons.enable = mkEnableOption "dev icons. Required for certain plugins [nvim-web-devicons]."; - - scrollBar.enable = mkEnableOption "scrollbar [scrollbar.nvim]"; - - smoothScroll.enable = mkEnableOption "smooth scrolling [cinnamon-nvim]"; - - cellularAutomaton = { - enable = mkEnableOption "cellular automaton [cellular-automaton]"; - - mappings = { - makeItRain = mkMappingOption "Make it rain [cellular-automaton]" "fml"; - }; - }; - - cursorline = { - enable = mkEnableOption "line hightlighting on the cursor [nvim-cursorline]"; - - lineTimeout = mkOption { - type = int; - description = "Time in milliseconds for cursorline to appear"; - default = 0; - }; - - lineNumbersOnly = mkOption { - type = bool; - description = "Hightlight only in the presence of line numbers"; - default = true; - }; - }; - - indentBlankline = { - enable = mkEnableOption "indentation guides [indent-blankline]"; - - setupOpts = { - debounce = mkOption { - type = int; - description = "Debounce time in milliseconds"; - default = 200; - }; - - viewport_buffer = { - min = mkOption { - type = int; - description = "Number of lines above and below of what is currently - visible in the window"; - default = 30; - }; - - max = mkOption { - type = int; - description = "Number of lines above and below of what is currently - visible in the window"; - default = 500; - }; - }; - - indent = { - char = mkOption { - type = either str (listOf str); - description = "Character(s) for indentation guide"; - default = "│"; - }; - - tab_char = mkOption { - type = nullOr (either str (listOf str)); - description = '' - Character(s) for tab indentation guide. - - See `:help ibl.config.indent.tab_char`. - ''; - default = null; - }; - - highlight = mkOption { - type = nullOr (either str (listOf str)); - description = '' - The highlight group(s) applied to the indentation guide. - - See `:help ibl.config.indent.highlight`. - ''; - default = null; - }; - - smart_indent_cap = mkOption { - type = bool; - description = "Caps the number of indentation levels based on surrounding code"; - default = true; - }; - - priority = mkOption { - type = int; - description = "Virtual text priority for the indentation guide"; - default = 1; - }; - - repeat_linebreak = mkOption { - type = bool; - description = "Repeat indentation guides on wrapped lines"; - default = true; - }; - }; - - whitespace = { - highlight = mkOption { - type = nullOr (either str (listOf str)); - description = '' - The highlight group(s) applied to whitespace. - - See `:help ibl.config.whitespace.highlight`. - ''; - default = null; - }; - - remove_blankline_trail = mkOption { - type = bool; - description = "Remove trailing whitespace on blanklines"; - default = true; - }; - }; - - scope = { - enabled = mkOption { - description = "Highlight current scope from treesitter"; - type = bool; - default = config.vim.treesitter.enable; - defaultText = literalExpression "config.vim.treesitter.enable"; - }; - - char = mkOption { - type = either str (listOf str); - description = "The character(s) for the scope indentation guide"; - default = cfg.indentBlankline.setupOpts.indent.char; - defaultText = literalExpression "config.vim.visuals.indentBlankline.setuopOpts.indent.char"; - }; - - show_start = mkOption { - type = bool; - description = "Show an underline on the first line of the scope"; - default = false; - }; - - show_end = mkOption { - type = bool; - description = "Show an underline on the last line of the scope"; - default = false; - }; - - show_exact_scope = mkOption { - type = bool; - description = "Show the scope underline at the exact start of the scope, even if that's to the right of the indentation guide"; - default = false; - }; - - injected_languages = mkOption { - type = bool; - description = "Check for injected languages (treesitter)"; - default = config.vim.treesitter.enable; - defaultText = literalExpression "config.vim.treesitter.enable"; - }; - - highlight = mkOption { - type = nullOr (either str (listOf str)); - description = '' - The highlight group(s) applied to the scope. - - See `:help `ibl.config.scope.highlight`. - ''; - default = null; - }; - - priority = mkOption { - type = int; - description = "Virtual text priority for the scope"; - default = 1024; - }; - - include.node_type = mkOption { - type = attrsOf (listOf str); - description = "Additional nodes to be used for scope checking, per language"; - default = {}; - }; - - exclude = { - language = mkOption { - type = listOf str; - description = '' - The list of treesitter languages to disable scope for. - - `*` can be used as a wildcard for every language/node type. - ''; - default = []; - }; - - node_type = mkOption { - type = attrsOf (listOf str); - description = '' - Nodes to ignore in scope checking, per language. - - `*` can be used as a wildcard for every language. - ''; - default = { - "*" = ["source_file" "program"]; - lua = ["chunk"]; - python = ["module"]; - }; - }; - }; - }; - }; - }; - - highlight-undo = { - enable = mkEnableOption "highlight undo [highlight-undo]"; - - highlightForCount = mkOption { - type = bool; - default = true; - description = '' - Enable support for highlighting when a is provided before the key - If set to false it will only highlight when the mapping is not prefixed with a - ''; - }; - - duration = mkOption { - type = int; - description = "Duration of highlight"; - default = 500; - }; - - undo = { - hlGroup = mkOption { - type = str; - description = "Highlight group for undo"; - default = "HighlightUndo"; - }; - }; - - redo = { - hlGroup = mkOption { - type = str; - description = "Highlight group for redo"; - default = "HighlightUndo"; - }; - }; - }; - }; -} From 1b16c6b19fe4d314efeca42d275945713dcb0076 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 8 Nov 2024 12:59:08 +0300 Subject: [PATCH 5/6] tabline/nvim-bufferline: remove assertion; enable nvim-web-devicons by default --- modules/plugins/tabline/nvim-bufferline/config.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/plugins/tabline/nvim-bufferline/config.nix b/modules/plugins/tabline/nvim-bufferline/config.nix index fe54efbe..4989e991 100644 --- a/modules/plugins/tabline/nvim-bufferline/config.nix +++ b/modules/plugins/tabline/nvim-bufferline/config.nix @@ -15,10 +15,14 @@ in { config = mkIf cfg.enable { vim = { startPlugins = [ - (assert config.vim.visuals.nvimWebDevicons.enable; "nvim-bufferline-lua") + "nvim-bufferline-lua" "bufdelete-nvim" ]; + # Soft-dependency for bufferline. + # Recommended by upstream, so enabled here. + visuals.nvim-web-devicons.enable = true; + maps.normal = mkMerge [ (mkLuaBinding cfg.mappings.closeCurrent "require(\"bufdelete\").bufdelete" mappings.closeCurrent.description) (mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext" mappings.cycleNext.description) From 57067e85edda6b6855eb8546b705b9355408534e Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 8 Nov 2024 13:11:53 +0300 Subject: [PATCH 6/6] flake: rename input for nvim-scrollbar --- flake.lock | 34 +++++++++++++++++----------------- flake.nix | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 070399c9..414478d4 100644 --- a/flake.lock +++ b/flake.lock @@ -1390,6 +1390,22 @@ "type": "github" } }, + "plugin-nvim-scrollbar": { + "flake": false, + "locked": { + "lastModified": 1729162132, + "narHash": "sha256-/nB7eP2Rz/A9zMXrNEH4FReo6eZS0C/SEGvKhxV7AUA=", + "owner": "petertriho", + "repo": "nvim-scrollbar", + "rev": "6994eb9f73d5fdc36ee2c8717940e8c853e51a49", + "type": "github" + }, + "original": { + "owner": "petertriho", + "repo": "nvim-scrollbar", + "type": "github" + } + }, "plugin-nvim-session-manager": { "flake": false, "locked": { @@ -1710,22 +1726,6 @@ "type": "github" } }, - "plugin-scrollbar-nvim": { - "flake": false, - "locked": { - "lastModified": 1684886154, - "narHash": "sha256-zLBexSxQCn9HPY04a9w/UCJP1F5ShI2X12I9xE9H0cM=", - "owner": "petertriho", - "repo": "nvim-scrollbar", - "rev": "35f99d559041c7c0eff3a41f9093581ceea534e8", - "type": "github" - }, - "original": { - "owner": "petertriho", - "repo": "nvim-scrollbar", - "type": "github" - } - }, "plugin-smartcolumn": { "flake": false, "locked": { @@ -2087,6 +2087,7 @@ "plugin-nvim-neoclip": "plugin-nvim-neoclip", "plugin-nvim-nio": "plugin-nvim-nio", "plugin-nvim-notify": "plugin-nvim-notify", + "plugin-nvim-scrollbar": "plugin-nvim-scrollbar", "plugin-nvim-session-manager": "plugin-nvim-session-manager", "plugin-nvim-surround": "plugin-nvim-surround", "plugin-nvim-tree-lua": "plugin-nvim-tree-lua", @@ -2107,7 +2108,6 @@ "plugin-rose-pine": "plugin-rose-pine", "plugin-rtp-nvim": "plugin-rtp-nvim", "plugin-rustaceanvim": "plugin-rustaceanvim", - "plugin-scrollbar-nvim": "plugin-scrollbar-nvim", "plugin-smartcolumn": "plugin-smartcolumn", "plugin-sqls-nvim": "plugin-sqls-nvim", "plugin-tabular": "plugin-tabular", diff --git a/flake.nix b/flake.nix index 8ede7ac4..144e136c 100644 --- a/flake.nix +++ b/flake.nix @@ -443,7 +443,7 @@ flake = false; }; - plugin-scrollbar-nvim = { + plugin-nvim-scrollbar = { url = "github:petertriho/nvim-scrollbar"; flake = false; };