diff --git a/configuration.nix b/configuration.nix index 98b99998..a3ab7bf2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -77,17 +77,20 @@ isMaximal: { }; visuals = { - nvim-scrollbar.enable = isMaximal; - nvim-web-devicons.enable = true; - nvim-cursorline.enable = true; - cinnamon-nvim.enable = true; + enable = true; + nvimWebDevicons.enable = true; + scrollBar.enable = isMaximal; + smoothScroll.enable = true; + cellularAutomaton.enable = false; fidget-nvim.enable = true; - highlight-undo.enable = true; - indent-blankline.enable = true; - # Fun - cellular-automaton.enable = false; + indentBlankline.enable = true; + + cursorline = { + enable = true; + lineTimeout = 0; + }; }; statusline = { @@ -161,7 +164,6 @@ 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 00cfdac0..1a2a089f 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -322,8 +322,3 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to [](#opt-vim.languages.svelte.format.type) respectively. - Replace [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt) with [nixfmt](https://github.com/NixOS/nixfmt) (nixfmt-rfc-style). - -[Nowaaru](https://github.com/Nowaaru): - -- Add `precognition-nvim`. - diff --git a/flake.lock b/flake.lock index 414478d4..f387d4ad 100644 --- a/flake.lock +++ b/flake.lock @@ -98,11 +98,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730958623, - "narHash": "sha256-JwQZIGSYnRNOgDDoIgqKITrPVil+RMWHsZH1eE1VGN0=", + "lastModified": 1726871744, + "narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "85f7e662eda4fa3a995556527c87b2524b691933", + "rev": "a1d92660c6b3b7c26fb883500a80ea9d33321be2", "type": "github" }, "original": { @@ -1390,22 +1390,6 @@ "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": { @@ -1630,22 +1614,6 @@ "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": { @@ -1726,6 +1694,22 @@ "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,7 +2071,6 @@ "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", @@ -2102,12 +2085,12 @@ "plugin-oxocarbon": "plugin-oxocarbon", "plugin-pathlib-nvim": "plugin-pathlib-nvim", "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", "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 144e136c..d8efa3b8 100644 --- a/flake.nix +++ b/flake.nix @@ -443,7 +443,7 @@ flake = false; }; - plugin-nvim-scrollbar = { + plugin-scrollbar-nvim = { url = "github:petertriho/nvim-scrollbar"; flake = false; }; @@ -566,11 +566,6 @@ 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/flake/packages.nix b/flake/packages.nix index 1f382927..84514a26 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; + inherit (pkgs) bash gitFull buildEnv dockerTools; inherit (config.legacyPackages) neovim-nix; in - pkgs.dockerTools.buildImage { + dockerTools.buildImage { name = "nvf"; tag = "latest"; diff --git a/modules/plugins/tabline/nvim-bufferline/config.nix b/modules/plugins/tabline/nvim-bufferline/config.nix index 4989e991..fe54efbe 100644 --- a/modules/plugins/tabline/nvim-bufferline/config.nix +++ b/modules/plugins/tabline/nvim-bufferline/config.nix @@ -15,14 +15,10 @@ in { config = mkIf cfg.enable { vim = { startPlugins = [ - "nvim-bufferline-lua" + (assert config.vim.visuals.nvimWebDevicons.enable; "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) diff --git a/modules/plugins/utility/motion/default.nix b/modules/plugins/utility/motion/default.nix index 838fec78..925a33e8 100644 --- a/modules/plugins/utility/motion/default.nix +++ b/modules/plugins/utility/motion/default.nix @@ -2,6 +2,5 @@ _: { imports = [ ./hop ./leap - ./precognition ]; } diff --git a/modules/plugins/utility/motion/precognition/config.nix b/modules/plugins/utility/motion/precognition/config.nix deleted file mode 100644 index cd4ef4c4..00000000 --- a/modules/plugins/utility/motion/precognition/config.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - 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 deleted file mode 100644 index 85d223cc..00000000 --- a/modules/plugins/utility/motion/precognition/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./precognition.nix - ./config.nix - ]; -} diff --git a/modules/plugins/utility/motion/precognition/precognition.nix b/modules/plugins/utility/motion/precognition/precognition.nix deleted file mode 100644 index 9bccf8e1..00000000 --- a/modules/plugins/utility/motion/precognition/precognition.nix +++ /dev/null @@ -1,66 +0,0 @@ -{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 - ''; - }; - }; -} diff --git a/modules/plugins/visuals/cellular-automaton/cellular-automaton.nix b/modules/plugins/visuals/cellular-automaton/cellular-automaton.nix deleted file mode 100644 index 6d432e7b..00000000 --- a/modules/plugins/visuals/cellular-automaton/cellular-automaton.nix +++ /dev/null @@ -1,60 +0,0 @@ -{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 deleted file mode 100644 index 2c0c4669..00000000 --- a/modules/plugins/visuals/cellular-automaton/config.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - 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 deleted file mode 100644 index 4bb43af7..00000000 --- a/modules/plugins/visuals/cellular-automaton/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - 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 deleted file mode 100644 index 109b06f0..00000000 --- a/modules/plugins/visuals/cinnamon-nvim/cinnamon-nvim.nix +++ /dev/null @@ -1,35 +0,0 @@ -{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 deleted file mode 100644 index 8e420221..00000000 --- a/modules/plugins/visuals/cinnamon-nvim/config.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index 29ced8e8..00000000 --- a/modules/plugins/visuals/cinnamon-nvim/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./config.nix - ./cinnamon-nvim.nix - ]; -} diff --git a/modules/plugins/visuals/config.nix b/modules/plugins/visuals/config.nix new file mode 100644 index 00000000..1457ff3a --- /dev/null +++ b/modules/plugins/visuals/config.nix @@ -0,0 +1,118 @@ +{ + 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 7b413c30..3c977cba 100644 --- a/modules/plugins/visuals/default.nix +++ b/modules/plugins/visuals/default.nix @@ -1,19 +1,7 @@ -{lib, ...}: let - inherit (lib.modules) mkRemovedOptionModule; -in { +{...}: { imports = [ - (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 + ./config.nix + ./visuals.nix + ./fidget ]; } diff --git a/modules/plugins/visuals/fidget-nvim/config.nix b/modules/plugins/visuals/fidget/config.nix similarity index 100% rename from modules/plugins/visuals/fidget-nvim/config.nix rename to modules/plugins/visuals/fidget/config.nix diff --git a/modules/plugins/visuals/fidget-nvim/default.nix b/modules/plugins/visuals/fidget/default.nix similarity index 100% rename from modules/plugins/visuals/fidget-nvim/default.nix rename to modules/plugins/visuals/fidget/default.nix diff --git a/modules/plugins/visuals/fidget-nvim/fidget.nix b/modules/plugins/visuals/fidget/fidget.nix similarity index 98% rename from modules/plugins/visuals/fidget-nvim/fidget.nix rename to modules/plugins/visuals/fidget/fidget.nix index fa2ecb44..79974bd1 100644 --- a/modules/plugins/visuals/fidget-nvim/fidget.nix +++ b/modules/plugins/visuals/fidget/fidget.nix @@ -12,11 +12,8 @@ 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. Please remove - it from your 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.") ]; options.vim.visuals.fidget-nvim = { diff --git a/modules/plugins/visuals/highlight-undo/config.nix b/modules/plugins/visuals/highlight-undo/config.nix deleted file mode 100644 index d41c6a69..00000000 --- a/modules/plugins/visuals/highlight-undo/config.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index b8624889..00000000 --- a/modules/plugins/visuals/highlight-undo/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - 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 deleted file mode 100644 index fc5d7226..00000000 --- a/modules/plugins/visuals/highlight-undo/highlight-undo.nix +++ /dev/null @@ -1,32 +0,0 @@ -{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 deleted file mode 100644 index 581bd136..00000000 --- a/modules/plugins/visuals/indent-blankline/config.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index 57ebc6ac..00000000 --- a/modules/plugins/visuals/indent-blankline/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - 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 deleted file mode 100644 index ff9bccc7..00000000 --- a/modules/plugins/visuals/indent-blankline/indent-blankline.nix +++ /dev/null @@ -1,195 +0,0 @@ -{ - 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 deleted file mode 100644 index 487c9af4..00000000 --- a/modules/plugins/visuals/nvim-cursorline/config.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index b09014dd..00000000 --- a/modules/plugins/visuals/nvim-cursorline/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - 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 deleted file mode 100644 index 7e9e1242..00000000 --- a/modules/plugins/visuals/nvim-cursorline/nvim-cursorline.nix +++ /dev/null @@ -1,65 +0,0 @@ -{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 deleted file mode 100644 index 1d0ebc76..00000000 --- a/modules/plugins/visuals/nvim-scrollbar/config.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index 3341c65e..00000000 --- a/modules/plugins/visuals/nvim-scrollbar/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - 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 deleted file mode 100644 index bdf48cb4..00000000 --- a/modules/plugins/visuals/nvim-scrollbar/scrollbar-nvim.nix +++ /dev/null @@ -1,21 +0,0 @@ -{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 deleted file mode 100644 index 9c8e9418..00000000 --- a/modules/plugins/visuals/nvim-web-devicons/config.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index 57a3dbc1..00000000 --- a/modules/plugins/visuals/nvim-web-devicons/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - 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 deleted file mode 100644 index 7883486c..00000000 --- a/modules/plugins/visuals/nvim-web-devicons/nvim-web-devicons.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - 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 new file mode 100644 index 00000000..d3cfac1c --- /dev/null +++ b/modules/plugins/visuals/visuals.nix @@ -0,0 +1,261 @@ +{ + 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"; + }; + }; + }; + }; +}