diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index c1b05bc..138a1db 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -55,6 +55,7 @@ configuration formats. longer filtered and thus should be used instead. - Add dap-go for better dap configurations - Make noice.nvim customizable +- Standardize border style options and add custom borders [rust-tools.nvim]: https://github.com/simrat39/rust-tools.nvim [rustaceanvim]: https://github.com/mrcjkb/rustaceanvim diff --git a/lib/types/default.nix b/lib/types/default.nix index 928bbae..6751229 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -9,7 +9,7 @@ typesCustom = import ./custom.nix {inherit lib;}; in { inherit (typesDag) dagOf; - inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType; + inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; inherit (typesLanguage) diagnostics mkGrammarOption; inherit (typesCustom) anythingConcatLists char; } diff --git a/lib/types/plugins.nix b/lib/types/plugins.nix index c0e89d6..7d24163 100644 --- a/lib/types/plugins.nix +++ b/lib/types/plugins.nix @@ -51,9 +51,13 @@ }; }; }; + + borderPresets = ["none" "single" "double" "rounded" "solid" "shadow"]; in { inherit extraPluginType fromInputs pluginType; + borderType = either (enum borderPresets) (listOf (either str (listOf str))); + pluginsOpt = { description, example, diff --git a/modules/plugins/lsp/lspconfig/config.nix b/modules/plugins/lsp/lspconfig/config.nix index 15d42fd..1c1f0a0 100644 --- a/modules/plugins/lsp/lspconfig/config.nix +++ b/modules/plugins/lsp/lspconfig/config.nix @@ -7,6 +7,7 @@ inherit (lib.strings) optionalString; inherit (lib.attrsets) mapAttrs; inherit (lib.nvim.dag) entryAfter; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.lsp; in { @@ -22,7 +23,7 @@ in { ${ optionalString config.vim.ui.borders.enable '' - require('lspconfig.ui.windows').default_options.border = '${config.vim.ui.borders.globalStyle}' + require('lspconfig.ui.windows').default_options.border = ${toLuaObject config.vim.ui.borders.globalStyle} '' } ''; diff --git a/modules/plugins/lsp/nvim-code-action-menu/config.nix b/modules/plugins/lsp/nvim-code-action-menu/config.nix index 9acc34d..145cb60 100644 --- a/modules/plugins/lsp/nvim-code-action-menu/config.nix +++ b/modules/plugins/lsp/nvim-code-action-menu/config.nix @@ -6,6 +6,7 @@ inherit (lib.modules) mkIf; inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.binds) mkSetBinding addDescriptionsToMappings pushDownDefault; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.lsp; @@ -25,7 +26,7 @@ in { pluginRC.code-action-menu = entryAnywhere '' -- border configuration - vim.g.code_action_menu_window_border = '${config.vim.ui.borders.plugins.code-action-menu.style}' + vim.g.code_action_menu_window_border = ${toLuaObject config.vim.ui.borders.plugins.code-action-menu.style} -- show individual sections of the code action menu ${lib.optionalString cfg.nvimCodeActionMenu.show.details "vim.g.code_action_menu_show_details = true"} diff --git a/modules/plugins/ui/borders/borders.nix b/modules/plugins/ui/borders/borders.nix index 37589dc..9951591 100644 --- a/modules/plugins/ui/borders/borders.nix +++ b/modules/plugins/ui/borders/borders.nix @@ -4,31 +4,34 @@ ... }: let inherit (lib.options) mkOption mkEnableOption; - inherit (lib.lists) optionals; - inherit (lib.types) enum; + inherit (lib.nvim.types) borderType; cfg = config.vim.ui.borders; - - defaultStyles = ["none" "single" "double" "rounded"]; in { options.vim.ui.borders = { enable = mkEnableOption "visible borders for most windows"; globalStyle = mkOption { - type = enum defaultStyles; + type = borderType; default = "rounded"; description = '' The global border style to use. + + If a list is given, it should have a length of eight or any divisor of + eight. The array will specify the eight chars building up the border in + a clockwise fashion starting with the top-left corner. You can specify + a different highlight group for each character by passing a + [char, "YourHighlightGroup"] instead ''; + example = ["╔" "═" "╗" "║" "╝" "═" "╚" "║"]; }; - # TODO: make per-plugin borders configurable plugins = let mkPluginStyleOption = name: { enable = mkEnableOption "borders for the ${name} plugin" // {default = cfg.enable;}; style = mkOption { - type = enum (defaultStyles ++ optionals (name != "which-key") ["shadow"]); + type = borderType; default = cfg.globalStyle; description = "The border style to use for the ${name} plugin"; }; diff --git a/modules/plugins/ui/breadcrumbs/breadcrumbs.nix b/modules/plugins/ui/breadcrumbs/breadcrumbs.nix index 18df8c0..e173688 100644 --- a/modules/plugins/ui/breadcrumbs/breadcrumbs.nix +++ b/modules/plugins/ui/breadcrumbs/breadcrumbs.nix @@ -4,9 +4,9 @@ ... }: let inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) nullOr listOf enum bool str int; + inherit (lib.types) nullOr listOf enum bool str int either; inherit (lib.modules) mkRenamedOptionModule; - inherit (lib.nvim.types) mkPluginSetupOption; + inherit (lib.nvim.types) mkPluginSetupOption borderType; mkSimpleIconOption = default: mkOption { inherit default; @@ -212,8 +212,7 @@ in { # position = {} border = mkOption { - # TODO: let this type accept a custom string - type = enum ["single" "rounded" "double" "solid" "none"]; + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use"; }; @@ -236,8 +235,7 @@ in { */ border = mkOption { - # TODO: let this type accept a custom string - type = nullOr (enum ["single" "rounded" "double" "solid" "none"]); + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use for the left section of Navbuddy UI"; }; @@ -254,8 +252,7 @@ in { */ border = mkOption { - # TODO: let this type accept a custom string - type = nullOr (enum ["single" "rounded" "double" "solid" "none"]); + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use for the middle section of Navbuddy UI"; }; @@ -265,8 +262,7 @@ in { # there is no size option for the right section, it fills the remaining space right = { border = mkOption { - # TODO: let this type accept a custom string - type = nullOr (enum ["single" "rounded" "double" "solid" "none"]); + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use for the right section of Navbuddy UI"; }; diff --git a/modules/plugins/utility/binds/which-key/config.nix b/modules/plugins/utility/binds/which-key/config.nix index 03c85b4..d729688 100644 --- a/modules/plugins/utility/binds/which-key/config.nix +++ b/modules/plugins/utility/binds/which-key/config.nix @@ -25,7 +25,7 @@ in { ${optionalString config.vim.ui.borders.plugins.which-key.enable '' window = { - border = "${config.vim.ui.borders.plugins.which-key.style}", + border = ${toLuaObject config.vim.ui.borders.plugins.which-key.style}, }, ''} }) diff --git a/modules/plugins/visuals/fidget/fidget.nix b/modules/plugins/visuals/fidget/fidget.nix index c5f4eb6..79974bd 100644 --- a/modules/plugins/visuals/fidget/fidget.nix +++ b/modules/plugins/visuals/fidget/fidget.nix @@ -7,7 +7,7 @@ inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.strings) toUpper; inherit (lib.types) int float bool str enum listOf attrsOf oneOf nullOr submodule; - inherit (lib.nvim.types) mkPluginSetupOption luaInline; + inherit (lib.nvim.types) mkPluginSetupOption luaInline borderType; inherit (lib.generators) mkLuaInline; in { imports = [ @@ -453,7 +453,7 @@ in { }; border = mkOption { description = "Border style of the notification window"; - type = enum ["none" "single" "double" "rounded" "solid" "shadow"]; + type = borderType; default = if config.vim.ui.borders.enable then config.vim.ui.borders.globalStyle