diff --git a/lib/lua.nix b/lib/lua.nix index 1d4cdb9..c5c2ae5 100644 --- a/lib/lua.nix +++ b/lib/lua.nix @@ -13,7 +13,6 @@ else "'${value}'"; # convert an expression to lua - expToLua = exp: if builtins.isList exp then listToLuaTable exp # if list, convert to lua table diff --git a/modules/ui/breadcrumbs/config.nix b/modules/ui/breadcrumbs/config.nix index 18e84f0..0d988ca 100644 --- a/modules/ui/breadcrumbs/config.nix +++ b/modules/ui/breadcrumbs/config.nix @@ -3,161 +3,165 @@ lib, ... }: -with lib; with builtins; let + inherit (lib) optionalString boolToString mkIf optionals; + inherit (lib.nvim.lua) nullString; + cfg = config.vim.ui.breadcrumbs; nb = cfg.navbuddy; - - nilOrStr = v: - if v == null - then "nil" - else toString v; in { config = mkIf cfg.enable { vim.startPlugins = [ "nvim-lspconfig" ] - ++ lib.optionals (config.vim.lsp.lspsaga.enable && cfg.source == "lspsaga") [ + ++ optionals (cfg.source == "nvim-navic") [ + "nvim-navic" + ] + ++ optionals (config.vim.lsp.lspsaga.enable && cfg.source == "lspsaga") [ "lspsaga" ] - ++ lib.optionals (cfg.navbuddy.enable || cfg.source == "nvim-navic") [ + ++ optionals cfg.navbuddy.enable [ "nvim-navbuddy" + "nui-nvim" "nvim-navic" ]; - vim.luaConfigRC.breadcrumbs = nvim.dag.entryAfter ["lspconfig"] '' - local navbuddy = require("nvim-navbuddy") - local navic = require("nvim-navic") - local actions = require("nvim-navbuddy.actions") + vim.luaConfigRC.breadcrumbs = lib.nvim.dag.entryAfter ["lspconfig"] '' - require("nvim-navic").setup { - highlight = true - } - - -- TODO: wrap this in an optional string with navbuddy as the enable condition - navbuddy.setup { - window = { - border = "${nb.window.border}", -- "rounded", "double", "solid", "none" - size = "60%", - position = "50%", - scrolloff = ${(nilOrStr nb.window.scrolloff)}, - sections = { - left = { - size = "20%", - border = ${(nilOrStr nb.window.sections.left.border)}, - }, - - mid = { - size = "40%", - border = ${(nilOrStr nb.window.sections.mid.border)}, - }, - - right = { - border = ${(nilOrStr nb.window.sections.right.border)}, - preview = "leaf", - } - }, - }, - node_markers = { - enabled = ${boolToString nb.nodeMarkers.enable}, - icons = { - leaf = "${nb.nodeMarkers.icons.leaf}", - leaf_selected = "${nb.nodeMarkers.icons.leafSelected}", - branch = "${nb.nodeMarkers.icons.branch}", - }, - }, - - lsp = { - auto_attach = ${boolToString nb.lsp.autoAttach}, - -- preference = nil, -- TODO: convert list to lua table if not null - }, - - source_buffer = { - follow_node = ${boolToString nb.sourceBuffer.followNode}, - highlight = ${boolToString nb.sourceBuffer.highlight}, - reorient = "${nb.sourceBuffer.reorient}", - scrolloff = ${nilOrStr nb.sourceBuffer.scrolloff} - }, - - icons = { - File = "${cfg.navbuddy.icons.file}", - Module = "${cfg.navbuddy.icons.module}", - Namespace = "${cfg.navbuddy.icons.namespace}", - Package = "${cfg.navbuddy.icons.package}", - Class = "${cfg.navbuddy.icons.class}", - Method = "${cfg.navbuddy.icons.method}", - Property = "${cfg.navbuddy.icons.property}", - Field = "${cfg.navbuddy.icons.field}", - Constructor = "${cfg.navbuddy.icons.constructor}", - Enum = "${cfg.navbuddy.icons.enum}", - Interface = "${cfg.navbuddy.icons.interface}", - Function = "${cfg.navbuddy.icons.function}", - Variable = "${cfg.navbuddy.icons.variable}", - Constant = "${cfg.navbuddy.icons.constant}", - String = "${cfg.navbuddy.icons.string}", - Number = "${cfg.navbuddy.icons.number}", - Boolean = "${cfg.navbuddy.icons.boolean}", - Array = "${cfg.navbuddy.icons.array}", - Object = "${cfg.navbuddy.icons.object}", - Key = "${cfg.navbuddy.icons.key}", - Null = "${cfg.navbuddy.icons.null}", - EnumMember = "${cfg.navbuddy.icons.enumMember}", - Struct = "${cfg.navbuddy.icons.struct}", - Event = "${cfg.navbuddy.icons.event}", - Operator = "${cfg.navbuddy.icons.operator}", - TypeParameter = "${cfg.navbuddy.icons.typeParameter}" - }, - - -- make those configurable - use_default_mappings = ${toString (cfg.navbuddy.useDefaultMappings)}, - mappings = { - ["${cfg.navbuddy.mappings.close}"] = actions.close(), - ["${cfg.navbuddy.mappings.nextSibling}"] = actions.next_sibling(), - ["${cfg.navbuddy.mappings.previousSibling}"] = actions.previous_sibling(), - ["${cfg.navbuddy.mappings.close}"] = actions.parent(), - ["${cfg.navbuddy.mappings.children}"] = actions.children(), - ["${cfg.navbuddy.mappings.root}"] = actions.root(), - - ["${cfg.navbuddy.mappings.visualName}"] = actions.visual_name(), - ["${cfg.navbuddy.mappings.visualScope}"] = actions.visual_scope(), - - ["${cfg.navbuddy.mappings.yankName}"] = actions.yank_name(), - ["${cfg.navbuddy.mappings.yankScope}"] = actions.yank_scope(), - - ["${cfg.navbuddy.mappings.insertName}"] = actions.insert_name(), - ["${cfg.navbuddy.mappings.insertScope}"] = actions.insert_scope(), - - ["${cfg.navbuddy.mappings.appendName}"] = actions.append_name(), - ["${cfg.navbuddy.mappings.appendScope}"] = actions.append_scope(), - - ["${cfg.navbuddy.mappings.rename}"] = actions.rename(), - - ["${cfg.navbuddy.mappings.delete}"] = actions.delete(), - - ["${cfg.navbuddy.mappings.foldCreate}"] = actions.fold_create(), - ["${cfg.navbuddy.mappings.foldDelete}"] = actions.fold_delete(), - - ["${cfg.navbuddy.mappings.comment}"] = actions.comment(), - - ["${cfg.navbuddy.mappings.select}"] = actions.select(), - - ["${cfg.navbuddy.mappings.moveDown}"] = actions.move_down(), - ["${cfg.navbuddy.mappings.moveUp}"] = actions.move_up(), - - ["${cfg.navbuddy.mappings.telescope}"] = actions.telescope({ - layout_strategy = "horizontal", - layout_config = { - height = 0.60, - width = 0.75, - prompt_position = "top", - preview_width = 0.50 - }, - }), - - ["${cfg.navbuddy.mappings.help}"] = actions.help(), -- Open mappings help window - }, + ${optionalString (cfg.source == "nvim-navic") '' + local navic = require("nvim-navic") + require("nvim-navic").setup { + highlight = true } + ''} + + ${optionalString cfg.navbuddy.enable '' + local navbuddy = require("nvim-navbuddy") + local actions = require("nvim-navbuddy.actions") + navbuddy.setup { + window = { + border = "${nb.window.border}", -- "rounded", "double", "solid", "none" + size = "60%", + position = "50%", + scrolloff = ${(nullString nb.window.scrolloff)}, + sections = { + left = { + size = "20%", + border = ${(nullString nb.window.sections.left.border)}, + }, + + mid = { + size = "40%", + border = ${(nullString nb.window.sections.mid.border)}, + }, + + right = { + border = ${(nullString nb.window.sections.right.border)}, + preview = "leaf", + } + }, + }, + node_markers = { + enabled = ${boolToString nb.nodeMarkers.enable}, + icons = { + leaf = "${nb.nodeMarkers.icons.leaf}", + leaf_selected = "${nb.nodeMarkers.icons.leafSelected}", + branch = "${nb.nodeMarkers.icons.branch}", + }, + }, + + lsp = { + auto_attach = ${boolToString nb.lsp.autoAttach}, + -- preference = nil, -- TODO: convert list to lua table if not null + }, + + source_buffer = { + follow_node = ${boolToString nb.sourceBuffer.followNode}, + highlight = ${boolToString nb.sourceBuffer.highlight}, + reorient = "${nb.sourceBuffer.reorient}", + scrolloff = ${nullString nb.sourceBuffer.scrolloff} + }, + + icons = { + File = "${cfg.navbuddy.icons.file}", + Module = "${cfg.navbuddy.icons.module}", + Namespace = "${cfg.navbuddy.icons.namespace}", + Package = "${cfg.navbuddy.icons.package}", + Class = "${cfg.navbuddy.icons.class}", + Method = "${cfg.navbuddy.icons.method}", + Property = "${cfg.navbuddy.icons.property}", + Field = "${cfg.navbuddy.icons.field}", + Constructor = "${cfg.navbuddy.icons.constructor}", + Enum = "${cfg.navbuddy.icons.enum}", + Interface = "${cfg.navbuddy.icons.interface}", + Function = "${cfg.navbuddy.icons.function}", + Variable = "${cfg.navbuddy.icons.variable}", + Constant = "${cfg.navbuddy.icons.constant}", + String = "${cfg.navbuddy.icons.string}", + Number = "${cfg.navbuddy.icons.number}", + Boolean = "${cfg.navbuddy.icons.boolean}", + Array = "${cfg.navbuddy.icons.array}", + Object = "${cfg.navbuddy.icons.object}", + Key = "${cfg.navbuddy.icons.key}", + Null = "${cfg.navbuddy.icons.null}", + EnumMember = "${cfg.navbuddy.icons.enumMember}", + Struct = "${cfg.navbuddy.icons.struct}", + Event = "${cfg.navbuddy.icons.event}", + Operator = "${cfg.navbuddy.icons.operator}", + TypeParameter = "${cfg.navbuddy.icons.typeParameter}" + }, + + -- make those configurable + use_default_mappings = ${boolToString cfg.navbuddy.useDefaultMappings}, + mappings = { + ["${cfg.navbuddy.mappings.close}"] = actions.close(), + ["${cfg.navbuddy.mappings.nextSibling}"] = actions.next_sibling(), + ["${cfg.navbuddy.mappings.previousSibling}"] = actions.previous_sibling(), + ["${cfg.navbuddy.mappings.close}"] = actions.parent(), + ["${cfg.navbuddy.mappings.children}"] = actions.children(), + ["${cfg.navbuddy.mappings.root}"] = actions.root(), + + ["${cfg.navbuddy.mappings.visualName}"] = actions.visual_name(), + ["${cfg.navbuddy.mappings.visualScope}"] = actions.visual_scope(), + + ["${cfg.navbuddy.mappings.yankName}"] = actions.yank_name(), + ["${cfg.navbuddy.mappings.yankScope}"] = actions.yank_scope(), + + ["${cfg.navbuddy.mappings.insertName}"] = actions.insert_name(), + ["${cfg.navbuddy.mappings.insertScope}"] = actions.insert_scope(), + + ["${cfg.navbuddy.mappings.appendName}"] = actions.append_name(), + ["${cfg.navbuddy.mappings.appendScope}"] = actions.append_scope(), + + ["${cfg.navbuddy.mappings.rename}"] = actions.rename(), + + ["${cfg.navbuddy.mappings.delete}"] = actions.delete(), + + ["${cfg.navbuddy.mappings.foldCreate}"] = actions.fold_create(), + ["${cfg.navbuddy.mappings.foldDelete}"] = actions.fold_delete(), + + ["${cfg.navbuddy.mappings.comment}"] = actions.comment(), + + ["${cfg.navbuddy.mappings.select}"] = actions.select(), + + ["${cfg.navbuddy.mappings.moveDown}"] = actions.move_down(), + ["${cfg.navbuddy.mappings.moveUp}"] = actions.move_up(), + + ["${cfg.navbuddy.mappings.telescope}"] = actions.telescope({ + layout_strategy = "horizontal", + layout_config = { + height = 0.60, + width = 0.75, + prompt_position = "top", + preview_width = 0.50 + }, + }), + + ["${cfg.navbuddy.mappings.help}"] = actions.help(), -- Open mappings help window + }, + } + ''} ''; }; }