diff --git a/configuration.nix b/configuration.nix index a3ab7bf2..8de00100 100644 --- a/configuration.nix +++ b/configuration.nix @@ -164,6 +164,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 1a2a089f..00cfdac0 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -322,3 +322,8 @@ 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 ac7c087a..070399c9 100644 --- a/flake.lock +++ b/flake.lock @@ -1614,6 +1614,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": { @@ -2085,6 +2101,7 @@ "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", diff --git a/flake.nix b/flake.nix index d8efa3b8..8ede7ac4 100644 --- a/flake.nix +++ b/flake.nix @@ -566,6 +566,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 + ''; + }; + }; +}