mirror of
https://github.com/NotAShelf/nvf.git
synced 2024-11-22 21:30:51 +00:00
feat: breadcrumbs
This commit is contained in:
parent
eaab87d151
commit
14179505b3
8 changed files with 222 additions and 1 deletions
|
@ -54,7 +54,10 @@ inputs: let
|
|||
|
||||
nix.enable = true;
|
||||
html.enable = isMaximal;
|
||||
clang.enable = isMaximal;
|
||||
clang = {
|
||||
enable = isMaximal;
|
||||
lsp.server = "clangd";
|
||||
};
|
||||
sql.enable = isMaximal;
|
||||
rust = {
|
||||
enable = isMaximal;
|
||||
|
@ -189,6 +192,7 @@ inputs: let
|
|||
colorizer.enable = true;
|
||||
modes-nvim.enable = false; # the theme looks terrible with catppuccin
|
||||
illuminate.enable = true;
|
||||
breadcrumbs.enable = true;
|
||||
smartcolumn = {
|
||||
enable = true;
|
||||
columnAt.languages = {
|
||||
|
|
34
flake.lock
34
flake.lock
|
@ -1077,6 +1077,38 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nvim-navbuddy": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1688569844,
|
||||
"narHash": "sha256-011RT/wnQdBR1vMrXFwxbicBAgdcd4eQYPbok/o3CIE=",
|
||||
"owner": "SmiteshP",
|
||||
"repo": "nvim-navbuddy",
|
||||
"rev": "244a4cded6f2b568403684131d148048efe4e8af",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "SmiteshP",
|
||||
"repo": "nvim-navbuddy",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nvim-navic": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1689447657,
|
||||
"narHash": "sha256-fcSer6l6oX0qnOcRfNSZImmtkqjdH0WSUkptjaFj0AI=",
|
||||
"owner": "SmiteshP",
|
||||
"repo": "nvim-navic",
|
||||
"rev": "e6da6f74d89de65258ea7e98e22103ff5de6dcf5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "SmiteshP",
|
||||
"repo": "nvim-navic",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nvim-neoclip": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
|
@ -1397,6 +1429,8 @@
|
|||
"nvim-dap-ui": "nvim-dap-ui",
|
||||
"nvim-lightbulb": "nvim-lightbulb",
|
||||
"nvim-lspconfig": "nvim-lspconfig",
|
||||
"nvim-navbuddy": "nvim-navbuddy",
|
||||
"nvim-navic": "nvim-navic",
|
||||
"nvim-neoclip": "nvim-neoclip",
|
||||
"nvim-notify": "nvim-notify",
|
||||
"nvim-session-manager": "nvim-session-manager",
|
||||
|
|
12
flake.nix
12
flake.nix
|
@ -143,6 +143,7 @@
|
|||
url = "github:tversteeg/registers.nvim";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
nvim-neoclip = {
|
||||
url = "github:AckslD/nvim-neoclip.lua";
|
||||
flake = false;
|
||||
|
@ -248,6 +249,7 @@
|
|||
url = "github:b3nj5m1n/kommentary";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
comment-nvim = {
|
||||
url = "github:numToStr/Comment.nvim";
|
||||
flake = false;
|
||||
|
@ -455,6 +457,16 @@
|
|||
};
|
||||
|
||||
# UI
|
||||
nvim-navbuddy = {
|
||||
url = "github:SmiteshP/nvim-navbuddy";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
nvim-navic = {
|
||||
url = "github:SmiteshP/nvim-navic";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
noice-nvim = {
|
||||
url = "github:folke/noice.nvim";
|
||||
flake = false;
|
||||
|
|
|
@ -87,6 +87,8 @@ with lib; let
|
|||
"nvim-surround"
|
||||
"nvim-dap"
|
||||
"nvim-dap-ui"
|
||||
"nvim-navic"
|
||||
"nvim-navbuddy"
|
||||
];
|
||||
# You can either use the name of the plugin or a package.
|
||||
pluginsType = with types;
|
||||
|
|
5
modules/ui/breadcrumbs/breadcrumbs.nix
Normal file
5
modules/ui/breadcrumbs/breadcrumbs.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
{lib, ...}: {
|
||||
options.vim.ui.breadcrumbs = {
|
||||
enable = lib.mkEnableOption "breadcrumbs";
|
||||
};
|
||||
}
|
157
modules/ui/breadcrumbs/config.nix
Normal file
157
modules/ui/breadcrumbs/config.nix
Normal file
|
@ -0,0 +1,157 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with builtins; let
|
||||
cfg = config.vim.ui.breadcrumbs;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim.startPlugins = [
|
||||
"nvim-navbuddy"
|
||||
"nvim-navic"
|
||||
"nvim-lspconfig"
|
||||
];
|
||||
|
||||
vim.luaConfigRC.breadcrumbs = nvim.dag.entryAfter ["lspconfig"] ''
|
||||
local navbuddy = require("nvim-navbuddy")
|
||||
local actions = require("nvim-navbuddy.actions")
|
||||
|
||||
require("lspconfig").clangd.setup {
|
||||
on_attach = function(client, bufnr)
|
||||
navbuddy.attach(client, bufnr)
|
||||
end
|
||||
}
|
||||
|
||||
navbuddy.setup {
|
||||
window = {
|
||||
border = "single", -- "rounded", "double", "solid", "none"
|
||||
-- or an array with eight chars building up the border in a clockwise fashion
|
||||
-- starting with the top-left corner. eg: { "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" }.
|
||||
size = "60%", -- Or table format example: { height = "40%", width = "100%"}
|
||||
position = "50%", -- Or table format example: { row = "100%", col = "0%"}
|
||||
scrolloff = nil, -- scrolloff value within navbuddy window
|
||||
sections = {
|
||||
left = {
|
||||
size = "20%",
|
||||
border = nil, -- You can set border style for each section individually as well.
|
||||
},
|
||||
mid = {
|
||||
size = "40%",
|
||||
border = nil,
|
||||
},
|
||||
right = {
|
||||
-- No size option for right most section. It fills to
|
||||
-- remaining area.
|
||||
border = nil,
|
||||
preview = "leaf", -- Right section can show previews too.
|
||||
-- Options: "leaf", "always" or "never"
|
||||
}
|
||||
},
|
||||
},
|
||||
node_markers = {
|
||||
enabled = true,
|
||||
icons = {
|
||||
leaf = " ",
|
||||
leaf_selected = " → ",
|
||||
branch = " ",
|
||||
},
|
||||
},
|
||||
icons = {
|
||||
File = " ",
|
||||
Module = " ",
|
||||
Namespace = " ",
|
||||
Package = " ",
|
||||
Class = " ",
|
||||
Method = " ",
|
||||
Property = " ",
|
||||
Field = " ",
|
||||
Constructor = " ",
|
||||
Enum = "",
|
||||
Interface = "",
|
||||
Function = " ",
|
||||
Variable = " ",
|
||||
Constant = " ",
|
||||
String = " ",
|
||||
Number = " ",
|
||||
Boolean = "◩ ",
|
||||
Array = " ",
|
||||
Object = " ",
|
||||
Key = " ",
|
||||
Null = " ",
|
||||
EnumMember = " ",
|
||||
Struct = " ",
|
||||
Event = " ",
|
||||
Operator = " ",
|
||||
TypeParameter = " ",
|
||||
},
|
||||
use_default_mappings = true, -- If set to false, only mappings set
|
||||
-- by user are set. Else default
|
||||
-- mappings are used for keys
|
||||
-- that are not set by user
|
||||
mappings = {
|
||||
["<esc>"] = actions.close(), -- Close and cursor to original location
|
||||
["q"] = actions.close(),
|
||||
|
||||
["j"] = actions.next_sibling(), -- down
|
||||
["k"] = actions.previous_sibling(), -- up
|
||||
|
||||
["h"] = actions.parent(), -- Move to left panel
|
||||
["l"] = actions.children(), -- Move to right panel
|
||||
["0"] = actions.root(), -- Move to first panel
|
||||
|
||||
["v"] = actions.visual_name(), -- Visual selection of name
|
||||
["V"] = actions.visual_scope(), -- Visual selection of scope
|
||||
|
||||
["y"] = actions.yank_name(), -- Yank the name to system clipboard "+
|
||||
["Y"] = actions.yank_scope(), -- Yank the scope to system clipboard "+
|
||||
|
||||
["i"] = actions.insert_name(), -- Insert at start of name
|
||||
["I"] = actions.insert_scope(), -- Insert at start of scope
|
||||
|
||||
["a"] = actions.append_name(), -- Insert at end of name
|
||||
["A"] = actions.append_scope(), -- Insert at end of scope
|
||||
|
||||
["r"] = actions.rename(), -- Rename currently focused symbol
|
||||
|
||||
["d"] = actions.delete(), -- Delete scope
|
||||
|
||||
["f"] = actions.fold_create(), -- Create fold of current scope
|
||||
["F"] = actions.fold_delete(), -- Delete fold of current scope
|
||||
|
||||
["c"] = actions.comment(), -- Comment out current scope
|
||||
|
||||
["<enter>"] = actions.select(), -- Goto selected symbol
|
||||
["o"] = actions.select(),
|
||||
|
||||
["J"] = actions.move_down(), -- Move focused node down
|
||||
["K"] = actions.move_up(), -- Move focused node up
|
||||
|
||||
["t"] = actions.telescope({ -- Fuzzy finder at current level.
|
||||
layout_config = { -- All options that can be
|
||||
height = 0.60, -- passed to telescope.nvim's
|
||||
width = 0.60, -- default can be passed here.
|
||||
prompt_position = "top",
|
||||
preview_width = 0.50
|
||||
},
|
||||
layout_strategy = "horizontal"
|
||||
}),
|
||||
|
||||
["g?"] = actions.help(), -- Open mappings help window
|
||||
},
|
||||
lsp = {
|
||||
auto_attach = false, -- If set to true, you don't need to manually use attach function
|
||||
preference = nil, -- list of lsp server names in order of preference
|
||||
},
|
||||
source_buffer = {
|
||||
follow_node = true, -- Keep the current node in focus on the source buffer
|
||||
highlight = true, -- Highlight the currently focused node
|
||||
reorient = "smart", -- "smart", "top", "mid" or "none"
|
||||
scrolloff = nil -- scrolloff value when navbuddy is open
|
||||
}
|
||||
}
|
||||
|
||||
'';
|
||||
};
|
||||
}
|
6
modules/ui/breadcrumbs/default.nix
Normal file
6
modules/ui/breadcrumbs/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
_: {
|
||||
imports = [
|
||||
./config.nix
|
||||
./breadcrumbs.nix
|
||||
];
|
||||
}
|
|
@ -6,5 +6,6 @@ _: {
|
|||
./smartcolumn
|
||||
./colorizer
|
||||
./illuminate
|
||||
./breadcrumbs
|
||||
];
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue