feat: breadcrumbs

This commit is contained in:
raf 2023-07-19 22:49:06 +03:00
parent eaab87d151
commit 14179505b3
No known key found for this signature in database
GPG key ID: 02D1DD3FA08B6B29
8 changed files with 222 additions and 1 deletions

View file

@ -54,7 +54,10 @@ inputs: let
nix.enable = true; nix.enable = true;
html.enable = isMaximal; html.enable = isMaximal;
clang.enable = isMaximal; clang = {
enable = isMaximal;
lsp.server = "clangd";
};
sql.enable = isMaximal; sql.enable = isMaximal;
rust = { rust = {
enable = isMaximal; enable = isMaximal;
@ -189,6 +192,7 @@ inputs: let
colorizer.enable = true; colorizer.enable = true;
modes-nvim.enable = false; # the theme looks terrible with catppuccin modes-nvim.enable = false; # the theme looks terrible with catppuccin
illuminate.enable = true; illuminate.enable = true;
breadcrumbs.enable = true;
smartcolumn = { smartcolumn = {
enable = true; enable = true;
columnAt.languages = { columnAt.languages = {

View file

@ -1077,6 +1077,38 @@
"type": "github" "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": { "nvim-neoclip": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -1397,6 +1429,8 @@
"nvim-dap-ui": "nvim-dap-ui", "nvim-dap-ui": "nvim-dap-ui",
"nvim-lightbulb": "nvim-lightbulb", "nvim-lightbulb": "nvim-lightbulb",
"nvim-lspconfig": "nvim-lspconfig", "nvim-lspconfig": "nvim-lspconfig",
"nvim-navbuddy": "nvim-navbuddy",
"nvim-navic": "nvim-navic",
"nvim-neoclip": "nvim-neoclip", "nvim-neoclip": "nvim-neoclip",
"nvim-notify": "nvim-notify", "nvim-notify": "nvim-notify",
"nvim-session-manager": "nvim-session-manager", "nvim-session-manager": "nvim-session-manager",

View file

@ -143,6 +143,7 @@
url = "github:tversteeg/registers.nvim"; url = "github:tversteeg/registers.nvim";
flake = false; flake = false;
}; };
nvim-neoclip = { nvim-neoclip = {
url = "github:AckslD/nvim-neoclip.lua"; url = "github:AckslD/nvim-neoclip.lua";
flake = false; flake = false;
@ -248,6 +249,7 @@
url = "github:b3nj5m1n/kommentary"; url = "github:b3nj5m1n/kommentary";
flake = false; flake = false;
}; };
comment-nvim = { comment-nvim = {
url = "github:numToStr/Comment.nvim"; url = "github:numToStr/Comment.nvim";
flake = false; flake = false;
@ -455,6 +457,16 @@
}; };
# UI # UI
nvim-navbuddy = {
url = "github:SmiteshP/nvim-navbuddy";
flake = false;
};
nvim-navic = {
url = "github:SmiteshP/nvim-navic";
flake = false;
};
noice-nvim = { noice-nvim = {
url = "github:folke/noice.nvim"; url = "github:folke/noice.nvim";
flake = false; flake = false;

View file

@ -87,6 +87,8 @@ with lib; let
"nvim-surround" "nvim-surround"
"nvim-dap" "nvim-dap"
"nvim-dap-ui" "nvim-dap-ui"
"nvim-navic"
"nvim-navbuddy"
]; ];
# You can either use the name of the plugin or a package. # You can either use the name of the plugin or a package.
pluginsType = with types; pluginsType = with types;

View file

@ -0,0 +1,5 @@
{lib, ...}: {
options.vim.ui.breadcrumbs = {
enable = lib.mkEnableOption "breadcrumbs";
};
}

View 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
}
}
'';
};
}

View file

@ -0,0 +1,6 @@
_: {
imports = [
./config.nix
./breadcrumbs.nix
];
}

View file

@ -6,5 +6,6 @@ _: {
./smartcolumn ./smartcolumn
./colorizer ./colorizer
./illuminate ./illuminate
./breadcrumbs
]; ];
} }