refactor: complete overhaul
Complete overhaul of repo structure based on nvix. See https://github.com/niksingh710/nvix Signed-off-by: Lander Van den Bulcke <landervandenbulcke@gmail.com>
This commit is contained in:
parent
ff2c59724a
commit
61feed4086
75 changed files with 2916 additions and 2314 deletions
|
|
@ -1,75 +0,0 @@
|
|||
{
|
||||
autoGroups = {
|
||||
highlight_yank = { };
|
||||
vim_enter = { };
|
||||
indentscope = { };
|
||||
restore_cursor = { };
|
||||
};
|
||||
|
||||
autoCmd = [
|
||||
{
|
||||
group = "highlight_yank";
|
||||
event = [ "TextYankPost" ];
|
||||
pattern = "*";
|
||||
callback = {
|
||||
__raw = ''
|
||||
function()
|
||||
vim.highlight.on_yank()
|
||||
end
|
||||
'';
|
||||
};
|
||||
}
|
||||
{
|
||||
group = "vim_enter";
|
||||
event = [ "VimEnter" ];
|
||||
pattern = "*";
|
||||
callback = {
|
||||
__raw = ''
|
||||
function()
|
||||
vim.cmd('Startup')
|
||||
end
|
||||
'';
|
||||
};
|
||||
}
|
||||
{
|
||||
group = "indentscope";
|
||||
event = [ "FileType" ];
|
||||
pattern = [
|
||||
"help"
|
||||
"Startup"
|
||||
"startup"
|
||||
"neo-tree"
|
||||
"Trouble"
|
||||
"trouble"
|
||||
"notify"
|
||||
];
|
||||
callback = {
|
||||
__raw = ''
|
||||
function()
|
||||
vim.b.miniindentscope_disable = true
|
||||
end
|
||||
'';
|
||||
};
|
||||
}
|
||||
## from NVChad https://nvchad.com/docs/recipes (this autocmd will restore the cursor position when opening a file)
|
||||
{
|
||||
group = "restore_cursor";
|
||||
event = [ "BufReadPost" ];
|
||||
pattern = "*";
|
||||
callback = {
|
||||
__raw = ''
|
||||
function()
|
||||
if
|
||||
vim.fn.line "'\"" > 1
|
||||
and vim.fn.line "'\"" <= vim.fn.line "$"
|
||||
and vim.bo.filetype ~= "commit"
|
||||
and vim.fn.index({ "xxd", "gitrebase" }, vim.bo.filetype) == -1
|
||||
then
|
||||
vim.cmd "normal! g`\""
|
||||
end
|
||||
end
|
||||
'';
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
_: {
|
||||
imports = [
|
||||
# General Configuration
|
||||
./settings.nix
|
||||
./keymaps.nix
|
||||
./auto_cmds.nix
|
||||
./file_types.nix
|
||||
|
||||
# Themes
|
||||
./plugins/themes
|
||||
|
||||
# Completion
|
||||
./plugins/cmp/cmp.nix
|
||||
./plugins/cmp/autopairs.nix
|
||||
./plugins/cmp/schemastore.nix
|
||||
|
||||
# Snippets
|
||||
./plugins/snippets/luasnip.nix
|
||||
|
||||
# Editor plugins and configurations
|
||||
./plugins/editor/csvview.nix
|
||||
./plugins/editor/neo-tree.nix
|
||||
./plugins/editor/treesitter.nix
|
||||
./plugins/editor/undotree.nix
|
||||
./plugins/editor/illuminate.nix
|
||||
./plugins/editor/indent-blankline.nix
|
||||
./plugins/editor/todo-comments.nix
|
||||
./plugins/editor/navic.nix
|
||||
|
||||
# UI plugins
|
||||
./plugins/ui/bufferline.nix
|
||||
./plugins/ui/lualine.nix
|
||||
./plugins/ui/startup.nix
|
||||
|
||||
# LSP and formatting
|
||||
./plugins/lsp/lsp.nix
|
||||
./plugins/lsp/conform.nix
|
||||
./plugins/lsp/fidget.nix
|
||||
|
||||
# Git
|
||||
./plugins/git/lazygit.nix
|
||||
./plugins/git/gitsigns.nix
|
||||
|
||||
# Utils
|
||||
./plugins/utils/telescope.nix
|
||||
./plugins/utils/whichkey.nix
|
||||
./plugins/utils/extra_plugins.nix
|
||||
./plugins/utils/mini.nix
|
||||
./plugins/utils/markdown-preview.nix
|
||||
./plugins/utils/obsidian.nix
|
||||
./plugins/utils/toggleterm.nix
|
||||
./plugins/utils/web-devicons.nix
|
||||
];
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
autoGroups = {
|
||||
filetypes = { };
|
||||
};
|
||||
|
||||
files."ftdetect/terraformft.lua".autoCmd = [
|
||||
{
|
||||
group = "filetypes";
|
||||
event = [
|
||||
"BufRead"
|
||||
"BufNewFile"
|
||||
];
|
||||
pattern = [
|
||||
"*.tf"
|
||||
" *.tfvars"
|
||||
" *.hcl"
|
||||
];
|
||||
command = "set ft=terraform";
|
||||
}
|
||||
];
|
||||
|
||||
files."ftdetect/bicepft.lua".autoCmd = [
|
||||
{
|
||||
group = "filetypes";
|
||||
event = [
|
||||
"BufRead"
|
||||
"BufNewFile"
|
||||
];
|
||||
pattern = [
|
||||
"*.bicep"
|
||||
"*.bicepparam"
|
||||
];
|
||||
command = "set ft=bicep";
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,501 +0,0 @@
|
|||
{
|
||||
globals.mapleader = " ";
|
||||
|
||||
keymaps = [
|
||||
{
|
||||
mode = [
|
||||
"n"
|
||||
"x"
|
||||
];
|
||||
key = "j";
|
||||
action = "v:count == 0 ? 'gj' : 'j'";
|
||||
options = {
|
||||
expr = true;
|
||||
silent = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = [
|
||||
"n"
|
||||
"x"
|
||||
];
|
||||
key = "<Down>";
|
||||
action = "v:count == 0 ? 'gj' : 'j'";
|
||||
options = {
|
||||
expr = true;
|
||||
silent = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = [
|
||||
"n"
|
||||
"x"
|
||||
];
|
||||
key = "k";
|
||||
action = "v:count == 0 ? 'gk' : 'k'";
|
||||
options = {
|
||||
expr = true;
|
||||
silent = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = [
|
||||
"n"
|
||||
"x"
|
||||
];
|
||||
key = "<Up>";
|
||||
action = "v:count == 0 ? 'gk' : 'k'";
|
||||
options = {
|
||||
expr = true;
|
||||
silent = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-h>";
|
||||
action = "<C-w>h";
|
||||
options = {
|
||||
desc = "Go to Left Window";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-j>";
|
||||
action = "<C-w>j";
|
||||
options = {
|
||||
desc = "Go to Lower Window";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-k>";
|
||||
action = "<C-w>k";
|
||||
options = {
|
||||
desc = "Go to Upper Window";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-l>";
|
||||
action = "<C-w>l";
|
||||
options = {
|
||||
desc = "Go to Right Window";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-Up>";
|
||||
action = "<cmd>resize +2<cr>";
|
||||
options = {
|
||||
desc = "Increase Window Height";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-Down>";
|
||||
action = "<cmd>resize -2<cr>";
|
||||
options = {
|
||||
desc = "Decrease Window Height";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-Left>";
|
||||
action = "<cmd>vertical resize -2<cr>";
|
||||
options = {
|
||||
desc = "Decrease Window Width";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-Right>";
|
||||
action = "<cmd>vertical resize +2<cr>";
|
||||
options = {
|
||||
desc = "Increase Window Width";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<A-j>";
|
||||
action = "<cmd>m .+1<cr>==";
|
||||
options = {
|
||||
desc = "Move Down";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<A-k>";
|
||||
action = "<cmd>m .-2<cr>==";
|
||||
options = {
|
||||
desc = "Move Up";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "i";
|
||||
key = "<A-j>";
|
||||
action = "<esc><cmd>m .+1<cr>==gi";
|
||||
options = {
|
||||
desc = "Move Down";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "i";
|
||||
key = "<A-k>";
|
||||
action = "<esc><cmd>m .-2<cr>==gi";
|
||||
options = {
|
||||
desc = "Move Up";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "v";
|
||||
key = "<A-j>";
|
||||
action = ":m '>+1<cr>gv=gv";
|
||||
options = {
|
||||
desc = "Move Down";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "v";
|
||||
key = "<A-k>";
|
||||
action = ":m '<-2<cr>gv=gv";
|
||||
options = {
|
||||
desc = "Move Up";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "i";
|
||||
key = ";";
|
||||
action = ";<c-g>u";
|
||||
}
|
||||
{
|
||||
mode = "i";
|
||||
key = ".";
|
||||
action = ".<c-g>u";
|
||||
}
|
||||
{
|
||||
mode = "i";
|
||||
key = ";";
|
||||
action = ";<c-g>u";
|
||||
}
|
||||
{
|
||||
mode = [
|
||||
"i"
|
||||
"x"
|
||||
"n"
|
||||
"s"
|
||||
];
|
||||
key = "<C-s>";
|
||||
action = "<cmd>w<cr><esc>";
|
||||
options = {
|
||||
desc = "Save File";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = [
|
||||
"i"
|
||||
"n"
|
||||
];
|
||||
key = "<esc>";
|
||||
action = "<cmd>noh<cr><esc>";
|
||||
options = {
|
||||
desc = "Escape and Clear hlsearch";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>ur";
|
||||
action = "<Cmd>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>";
|
||||
options = {
|
||||
desc = "Redraw / Clear hlsearch / Diff Update";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "n";
|
||||
action = "'Nn'[v:searchforward].'zv'";
|
||||
options = {
|
||||
expr = true;
|
||||
desc = "Next Search Result";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "x";
|
||||
key = "n";
|
||||
action = "'Nn'[v:searchforward]";
|
||||
options = {
|
||||
expr = true;
|
||||
desc = "Next Search Result";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "o";
|
||||
key = "n";
|
||||
action = "'Nn'[v:searchforward]";
|
||||
options = {
|
||||
expr = true;
|
||||
desc = "Next Search Result";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "N";
|
||||
action = "'nN'[v:searchforward].'zv'";
|
||||
options = {
|
||||
expr = true;
|
||||
desc = "Prev Search Result";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "x";
|
||||
key = "N";
|
||||
action = "'nN'[v:searchforward]";
|
||||
options = {
|
||||
expr = true;
|
||||
desc = "Prev Search Result";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "o";
|
||||
key = "N";
|
||||
action = "'nN'[v:searchforward]";
|
||||
options = {
|
||||
expr = true;
|
||||
desc = "Prev Search Result";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>cd";
|
||||
action = "vim.diagnostic.open_float";
|
||||
options = {
|
||||
desc = "Line Diagnostics";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "]d";
|
||||
action = "diagnostic_goto(true)";
|
||||
options = {
|
||||
desc = "Next Diagnostic";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "[d";
|
||||
action = "diagnostic_goto(false)";
|
||||
options = {
|
||||
desc = "Prev Diagnostic";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "]e";
|
||||
action = "diagnostic_goto(true 'ERROR')";
|
||||
options = {
|
||||
desc = "Next Error";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "[e";
|
||||
action = "diagnostic_goto(false 'ERROR')";
|
||||
options = {
|
||||
desc = "Prev Error";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "]w";
|
||||
action = "diagnostic_goto(true 'WARN')";
|
||||
options = {
|
||||
desc = "Next Warning";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "[w";
|
||||
action = "diagnostic_goto(false 'WARN')";
|
||||
options = {
|
||||
desc = "Prev Warning";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>qq";
|
||||
action = "<cmd>qa<cr>";
|
||||
options = {
|
||||
desc = "Quit All";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>ui";
|
||||
action = "vim.show_pos";
|
||||
options = {
|
||||
desc = "Inspect Pos";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "t";
|
||||
key = "<esc><esc>";
|
||||
action = "<c-\\><c-n>";
|
||||
options = {
|
||||
desc = "Enter Normal Mode";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "t";
|
||||
key = "<C-h>";
|
||||
action = "<cmd>wincmd h<cr>";
|
||||
options = {
|
||||
desc = "Go to Left Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "t";
|
||||
key = "<C-j>";
|
||||
action = "<cmd>wincmd j<cr>";
|
||||
options = {
|
||||
desc = "Go to Lower Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "t";
|
||||
key = "<C-k>";
|
||||
action = "<cmd>wincmd k<cr>";
|
||||
options = {
|
||||
desc = "Go to Upper Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "t";
|
||||
key = "<C-l>";
|
||||
action = "<cmd>wincmd l<cr>";
|
||||
options = {
|
||||
desc = "Go to Right Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "t";
|
||||
key = "<C-/>";
|
||||
action = "<cmd>close<cr>";
|
||||
options = {
|
||||
desc = "Hide Terminal";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>ww";
|
||||
action = "<C-W>p";
|
||||
options = {
|
||||
desc = "Other Window";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>wd";
|
||||
action = "<C-W>c";
|
||||
options = {
|
||||
desc = "Delete Window";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>w-";
|
||||
action = "<C-W>s";
|
||||
options = {
|
||||
desc = "Split Window Below";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>w|";
|
||||
action = "<C-W>v";
|
||||
options = {
|
||||
desc = "Split Window Right";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>-";
|
||||
action = "<C-W>s";
|
||||
options = {
|
||||
desc = "Split Window Below";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>|";
|
||||
action = "<C-W>v";
|
||||
options = {
|
||||
desc = "Split Window Right";
|
||||
remap = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader><tab>l";
|
||||
action = "<cmd>tablast<cr>";
|
||||
options = {
|
||||
desc = "Last Tab";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader><tab>f";
|
||||
action = "<cmd>tabfirst<cr>";
|
||||
options = {
|
||||
desc = "First Tab";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader><tab><tab>";
|
||||
action = "<cmd>tabnew<cr>";
|
||||
options = {
|
||||
desc = "New Tab";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader><tab>]";
|
||||
action = "<cmd>tabnext<cr>";
|
||||
options = {
|
||||
desc = "Next Tab";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader><tab>d";
|
||||
action = "<cmd>tabclose<cr>";
|
||||
options = {
|
||||
desc = "Close Tab";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader><tab>[";
|
||||
action = "<cmd>tabprevious<cr>";
|
||||
options = {
|
||||
desc = "Previous Tab";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>ca";
|
||||
action = ":Lspsaga code_action<cr>";
|
||||
options = {
|
||||
desc = "Code Action";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
plugins.nvim-autopairs = {
|
||||
enable = true;
|
||||
settings = {
|
||||
disable_filetype = [
|
||||
"TelescopePrompt"
|
||||
"vim"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
plugins = {
|
||||
blink-cmp = {
|
||||
enable = true;
|
||||
settings = {
|
||||
signature = {
|
||||
enabled = true;
|
||||
trigger = {
|
||||
enabled = true;
|
||||
show_on_keyword = true;
|
||||
show_on_insert = true;
|
||||
};
|
||||
window = {
|
||||
show_documentation = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
plugins.schemastore = {
|
||||
enable = true;
|
||||
|
||||
json = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
yaml = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
plugins = {
|
||||
indent-blankline = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
_: {
|
||||
plugins.navic = {
|
||||
enable = true;
|
||||
settings = {
|
||||
separator = " ";
|
||||
highlight = true;
|
||||
depthLimit = 5;
|
||||
lsp = {
|
||||
autoAttach = true;
|
||||
};
|
||||
icons = {
|
||||
Array = " ";
|
||||
Boolean = " ";
|
||||
Class = " ";
|
||||
Constant = " ";
|
||||
Constructor = " ";
|
||||
Enum = " ";
|
||||
EnumMember = " ";
|
||||
Event = " ";
|
||||
Field = " ";
|
||||
File = " ";
|
||||
Function = " ";
|
||||
Interface = " ";
|
||||
Key = " ";
|
||||
Method = " ";
|
||||
Module = " ";
|
||||
Namespace = " ";
|
||||
Null = " ";
|
||||
Number = " ";
|
||||
Object = " ";
|
||||
Operator = " ";
|
||||
Package = " ";
|
||||
String = " ";
|
||||
Struct = " ";
|
||||
TypeParameter = " ";
|
||||
Variable = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
{
|
||||
plugins.neo-tree = {
|
||||
enable = true;
|
||||
sources = [
|
||||
"filesystem"
|
||||
"buffers"
|
||||
"git_status"
|
||||
"document_symbols"
|
||||
];
|
||||
addBlankLineAtTop = false;
|
||||
|
||||
filesystem = {
|
||||
bindToCwd = false;
|
||||
followCurrentFile = {
|
||||
enabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
defaultComponentConfigs = {
|
||||
indent = {
|
||||
withExpanders = true;
|
||||
expanderCollapsed = "";
|
||||
expanderExpanded = "";
|
||||
expanderHighlight = "NeoTreeExpander";
|
||||
};
|
||||
|
||||
gitStatus = {
|
||||
symbols = {
|
||||
added = " ";
|
||||
conflict = " ";
|
||||
deleted = "";
|
||||
ignored = " ";
|
||||
modified = " ";
|
||||
renamed = "";
|
||||
staged = "";
|
||||
unstaged = "";
|
||||
untracked = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keymaps = [
|
||||
{
|
||||
mode = [ "n" ];
|
||||
key = "<leader>e";
|
||||
action = "<cmd>Neotree toggle<cr>";
|
||||
options = {
|
||||
desc = "Open/Close Neotree";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
_: {
|
||||
plugins.todo-comments = {
|
||||
enable = true;
|
||||
settings = {
|
||||
colors = {
|
||||
error = [
|
||||
"DiagnosticError"
|
||||
"ErrorMsg"
|
||||
"#ED8796"
|
||||
];
|
||||
warning = [
|
||||
"DiagnosticWarn"
|
||||
"WarningMsg"
|
||||
"#EED49F"
|
||||
];
|
||||
info = [
|
||||
"DiagnosticInfo"
|
||||
"#EED49F"
|
||||
];
|
||||
default = [
|
||||
"Identifier"
|
||||
"#F5A97F"
|
||||
];
|
||||
test = [
|
||||
"Identifier"
|
||||
"#8AADF4"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
plugins.treesitter = {
|
||||
enable = true;
|
||||
settings = {
|
||||
indent.enable = true;
|
||||
highlight.enable = true;
|
||||
};
|
||||
folding = false;
|
||||
nixvimInjections = true;
|
||||
grammarPackages = pkgs.vimPlugins.nvim-treesitter.allGrammars;
|
||||
};
|
||||
|
||||
plugins.treesitter-textobjects = {
|
||||
enable = false;
|
||||
select = {
|
||||
enable = true;
|
||||
lookahead = true;
|
||||
keymaps = {
|
||||
"aa" = "@parameter.outer";
|
||||
"ia" = "@parameter.inner";
|
||||
"af" = "@function.outer";
|
||||
"if" = "@function.inner";
|
||||
"ac" = "@class.outer";
|
||||
"ic" = "@class.inner";
|
||||
"ii" = "@conditional.inner";
|
||||
"ai" = "@conditional.outer";
|
||||
"il" = "@loop.inner";
|
||||
"al" = "@loop.outer";
|
||||
"at" = "@comment.outer";
|
||||
};
|
||||
};
|
||||
move = {
|
||||
enable = true;
|
||||
gotoNextStart = {
|
||||
"]m" = "@function.outer";
|
||||
"]]" = "@class.outer";
|
||||
};
|
||||
gotoNextEnd = {
|
||||
"]M" = "@function.outer";
|
||||
"][" = "@class.outer";
|
||||
};
|
||||
gotoPreviousStart = {
|
||||
"[m" = "@function.outer";
|
||||
"[[" = "@class.outer";
|
||||
};
|
||||
gotoPreviousEnd = {
|
||||
"[M" = "@function.outer";
|
||||
"[]" = "@class.outer";
|
||||
};
|
||||
};
|
||||
swap = {
|
||||
enable = true;
|
||||
swapNext = {
|
||||
"<leader>a" = "@parameters.inner";
|
||||
};
|
||||
swapPrevious = {
|
||||
"<leader>A" = "@parameter.outer";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
plugins.undotree = {
|
||||
enable = true;
|
||||
settings = {
|
||||
autoOpenDiff = true;
|
||||
focusOnToggle = true;
|
||||
};
|
||||
};
|
||||
keymaps = [
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>ut";
|
||||
action = "<cmd>UndotreeToggle<CR>";
|
||||
options = {
|
||||
silent = true;
|
||||
desc = "Undotree";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
_: {
|
||||
plugins.gitsigns = {
|
||||
enable = true;
|
||||
settings = {
|
||||
signs = {
|
||||
add = {
|
||||
text = " ";
|
||||
};
|
||||
change = {
|
||||
text = " ";
|
||||
};
|
||||
delete = {
|
||||
text = " ";
|
||||
};
|
||||
untracked = {
|
||||
text = "";
|
||||
};
|
||||
topdelete = {
|
||||
text = " ";
|
||||
};
|
||||
changedelete = {
|
||||
text = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
extraPlugins = with pkgs.vimPlugins; [
|
||||
lazygit-nvim
|
||||
];
|
||||
|
||||
extraConfigLua = ''
|
||||
require("telescope").load_extension("lazygit")
|
||||
'';
|
||||
|
||||
keymaps = [
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>gg";
|
||||
action = "<cmd>LazyGit<CR>";
|
||||
options = {
|
||||
desc = "LazyGit (root dir)";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,169 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
config = {
|
||||
extraConfigLuaPre =
|
||||
# lua
|
||||
''
|
||||
local slow_format_filetypes = {}
|
||||
|
||||
vim.api.nvim_create_user_command("FormatDisable", function(args)
|
||||
if args.bang then
|
||||
-- FormatDisable! will disable formatting just for this buffer
|
||||
vim.b.disable_autoformat = true
|
||||
else
|
||||
vim.g.disable_autoformat = true
|
||||
end
|
||||
end, {
|
||||
desc = "Disable autoformat-on-save",
|
||||
bang = true,
|
||||
})
|
||||
vim.api.nvim_create_user_command("FormatEnable", function()
|
||||
vim.b.disable_autoformat = false
|
||||
vim.g.disable_autoformat = false
|
||||
end, {
|
||||
desc = "Re-enable autoformat-on-save",
|
||||
})
|
||||
vim.api.nvim_create_user_command("FormatToggle", function(args)
|
||||
if args.bang then
|
||||
-- Toggle formatting for current buffer
|
||||
vim.b.disable_autoformat = not vim.b.disable_autoformat
|
||||
else
|
||||
-- Toggle formatting globally
|
||||
vim.g.disable_autoformat = not vim.g.disable_autoformat
|
||||
end
|
||||
end, {
|
||||
desc = "Toggle autoformat-on-save",
|
||||
bang = true,
|
||||
})
|
||||
'';
|
||||
plugins.conform-nvim = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format_on_save = ''
|
||||
function(bufnr)
|
||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||
return
|
||||
end
|
||||
|
||||
if slow_format_filetypes[vim.bo[bufnr].filetype] then
|
||||
return
|
||||
end
|
||||
|
||||
local function on_format(err)
|
||||
if err and err:match("timeout$") then
|
||||
slow_format_filetypes[vim.bo[bufnr].filetype] = true
|
||||
end
|
||||
end
|
||||
|
||||
return { timeout_ms = 200, lsp_fallback = true }, on_format
|
||||
end
|
||||
'';
|
||||
|
||||
format_after_save = ''
|
||||
function(bufnr)
|
||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||
return
|
||||
end
|
||||
|
||||
if not slow_format_filetypes[vim.bo[bufnr].filetype] then
|
||||
return
|
||||
end
|
||||
|
||||
return { lsp_fallback = true }
|
||||
end
|
||||
'';
|
||||
notify_on_error = true;
|
||||
formatters_by_ft = {
|
||||
html = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
css = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
javascript = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
typescript = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
python = [
|
||||
"black"
|
||||
"isort"
|
||||
];
|
||||
lua = [ "stylua" ];
|
||||
nix = [ "nixfmt-rfc-style" ];
|
||||
markdown = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
yaml = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
terraform = [ "terraform_fmt" ];
|
||||
bicep = [ "bicep" ];
|
||||
bash = [
|
||||
"shellcheck"
|
||||
"shellharden"
|
||||
"shfmt"
|
||||
];
|
||||
json = [ "jq" ];
|
||||
"_" = [ "trim_whitespace" ];
|
||||
};
|
||||
|
||||
formatters = {
|
||||
black = {
|
||||
command = "${lib.getExe pkgs.black}";
|
||||
};
|
||||
isort = {
|
||||
command = "${lib.getExe pkgs.isort}";
|
||||
};
|
||||
nixfmt-rfc-style = {
|
||||
command = "${lib.getExe pkgs.nixfmt-rfc-style}";
|
||||
};
|
||||
alejandra = {
|
||||
command = "${lib.getExe pkgs.alejandra}";
|
||||
};
|
||||
jq = {
|
||||
command = "${lib.getExe pkgs.jq}";
|
||||
};
|
||||
prettierd = {
|
||||
command = "${lib.getExe pkgs.prettierd}";
|
||||
};
|
||||
stylua = {
|
||||
command = "${lib.getExe pkgs.stylua}";
|
||||
};
|
||||
shellcheck = {
|
||||
command = "${lib.getExe pkgs.shellcheck}";
|
||||
};
|
||||
shfmt = {
|
||||
command = "${lib.getExe pkgs.shfmt}";
|
||||
};
|
||||
shellharden = {
|
||||
command = "${lib.getExe pkgs.shellharden}";
|
||||
};
|
||||
bicep = {
|
||||
command = "${lib.getExe pkgs.bicep}";
|
||||
};
|
||||
#yamlfmt = {
|
||||
# command = "${lib.getExe pkgs.yamlfmt}";
|
||||
#};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,110 +0,0 @@
|
|||
{
|
||||
plugins.fidget = {
|
||||
enable = true;
|
||||
settings = {
|
||||
logger = {
|
||||
level = "warn"; # "off", "error", "warn", "info", "debug", "trace"
|
||||
float_precision = 1.0e-2; # Limit the number of decimals displayed for floats
|
||||
};
|
||||
progress = {
|
||||
poll_rate = 0; # How and when to poll for progress messages
|
||||
suppress_on_insert = true; # Suppress new messages while in insert mode
|
||||
ignore_done_already = false; # Ignore new tasks that are already complete
|
||||
ignore_empty_message = false; # Ignore new tasks that don't contain a message
|
||||
clear_on_detach =
|
||||
# Clear notification group when LSP server detaches
|
||||
''
|
||||
function(client_id)
|
||||
local client = vim.lsp.get_client_by_id(client_id)
|
||||
return client and client.name or nil
|
||||
end
|
||||
'';
|
||||
notification_group =
|
||||
# How to get a progress message's notification group key
|
||||
''
|
||||
function(msg) return msg.lsp_client.name end
|
||||
'';
|
||||
ignore = [ ]; # List of LSP servers to ignore
|
||||
lsp = {
|
||||
progress_ringbuf_size = 0; # Configure the nvim's LSP progress ring buffer size
|
||||
};
|
||||
display = {
|
||||
render_limit = 16; # How many LSP messages to show at once
|
||||
done_ttl = 3; # How long a message should persist after completion
|
||||
done_icon = "✔"; # Icon shown when all LSP progress tasks are complete
|
||||
done_style = "Constant"; # Highlight group for completed LSP tasks
|
||||
progress_ttl = 10; # How long a message should persist when in progress
|
||||
progress_icon = {
|
||||
pattern = "dots";
|
||||
period = 1;
|
||||
}; # Icon shown when LSP progress tasks are in progress
|
||||
progress_style = "WarningMsg"; # Highlight group for in-progress LSP tasks
|
||||
group_style = "Title"; # Highlight group for group name (LSP server name)
|
||||
icon_style = "Question"; # Highlight group for group icons
|
||||
priority = 30; # Ordering priority for LSP notification group
|
||||
skip_history = true; # Whether progress notifications should be omitted from history
|
||||
format_message = ''
|
||||
require ("fidget.progress.display").default_format_message
|
||||
''; # How to format a progress message
|
||||
format_annote = ''
|
||||
function (msg) return msg.title end
|
||||
''; # How to format a progress annotation
|
||||
format_group_name = ''
|
||||
function (group) return tostring (group) end
|
||||
''; # How to format a progress notification group's name
|
||||
overrides = {
|
||||
rust_analyzer = {
|
||||
name = "rust-analyzer";
|
||||
};
|
||||
}; # Override options from the default notification config
|
||||
};
|
||||
};
|
||||
notification = {
|
||||
poll_rate = 10; # How frequently to update and render notifications
|
||||
filter = "info"; # "off", "error", "warn", "info", "debug", "trace"
|
||||
history_size = 128; # Number of removed messages to retain in history
|
||||
override_vim_notify = true;
|
||||
redirect = {
|
||||
__raw = ''
|
||||
function(msg, level, opts)
|
||||
if opts and opts.on_open then
|
||||
return require("fidget.integration.nvim-notify").delegate(msg, level, opts)
|
||||
end
|
||||
end
|
||||
'';
|
||||
};
|
||||
configs = {
|
||||
default = {
|
||||
name = "Notifications";
|
||||
icon = "";
|
||||
group = "Notifications";
|
||||
annote = true;
|
||||
debug = false;
|
||||
debug_rate = 0.25;
|
||||
};
|
||||
};
|
||||
|
||||
window = {
|
||||
normal_hl = "Comment";
|
||||
winblend = 0;
|
||||
border = "none"; # none, single, double, rounded, solid, shadow
|
||||
zindex = 45;
|
||||
max_width = 0;
|
||||
max_height = 0;
|
||||
x_padding = 1;
|
||||
y_padding = 0;
|
||||
align = "bottom";
|
||||
relative = "editor";
|
||||
};
|
||||
view = {
|
||||
stack_upwards = true; # Display notification items from bottom to top
|
||||
icon_separator = " "; # Separator between group name and icon
|
||||
group_separator = "---"; # Separator between notification groups
|
||||
group_separator_hl =
|
||||
# Highlight group used for group separator
|
||||
"Comment";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
let
|
||||
puppet-editor-services = pkgs.callPackage ../../../pkgs/puppet-editor-services/package.nix { };
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
lspconfig = {
|
||||
enable = true;
|
||||
};
|
||||
lsp-lines = {
|
||||
enable = true;
|
||||
};
|
||||
lsp-format = {
|
||||
enable = true;
|
||||
};
|
||||
helm = {
|
||||
enable = true;
|
||||
};
|
||||
lspsaga = {
|
||||
enable = true;
|
||||
settings = {
|
||||
lightbulb = {
|
||||
sign = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
lsp = {
|
||||
inlayHints = {
|
||||
enable = true;
|
||||
};
|
||||
servers = {
|
||||
html = {
|
||||
enable = true;
|
||||
};
|
||||
lua_ls = {
|
||||
enable = true;
|
||||
};
|
||||
nil_ls = {
|
||||
enable = true;
|
||||
};
|
||||
ts_ls = {
|
||||
enable = true;
|
||||
};
|
||||
marksman = {
|
||||
enable = true;
|
||||
};
|
||||
pyright = {
|
||||
enable = true;
|
||||
};
|
||||
gopls = {
|
||||
enable = true;
|
||||
};
|
||||
terraformls = {
|
||||
enable = true;
|
||||
settings = {
|
||||
terraform.path = "${pkgs.opentofu}/bin/tofu";
|
||||
};
|
||||
};
|
||||
jsonls = {
|
||||
enable = true;
|
||||
};
|
||||
hls = {
|
||||
enable = true;
|
||||
};
|
||||
rubocop = {
|
||||
enable = true;
|
||||
};
|
||||
ruby_lsp = {
|
||||
enable = true;
|
||||
};
|
||||
texlab = {
|
||||
enable = true;
|
||||
};
|
||||
puppet = {
|
||||
enable = true;
|
||||
package = puppet-editor-services;
|
||||
settings.cmd = [
|
||||
"${puppet-editor-services}/bin/puppet-languageserver"
|
||||
"--stdio"
|
||||
];
|
||||
};
|
||||
helm_ls = {
|
||||
enable = true;
|
||||
settings = {
|
||||
"helm_ls" = {
|
||||
yamlls = {
|
||||
path = "${pkgs.yaml-language-server}/bin/yaml-language-server";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
yamlls = {
|
||||
enable = true;
|
||||
settings = {
|
||||
yaml = {
|
||||
format = {
|
||||
singleQuote = true;
|
||||
};
|
||||
schemas = {
|
||||
kubernetes = "'*.yaml";
|
||||
"http://json.schemastore.org/github-workflow" = ".github/workflows/*";
|
||||
"http://json.schemastore.org/github-action" = ".github/action.{yml,yaml}";
|
||||
"http://json.schemastore.org/ansible-stable-2.9" = "roles/tasks/*.{yml,yaml}";
|
||||
"http://json.schemastore.org/kustomization" = "kustomization.{yml,yaml}";
|
||||
"http://json.schemastore.org/ansible-playbook" = "*play*.{yml,yaml}";
|
||||
"http://json.schemastore.org/chart" = "Chart.{yml,yaml}";
|
||||
"https://json.schemastore.org/dependabot-v2" = ".github/dependabot.{yml,yaml}";
|
||||
"https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json" =
|
||||
"*docker-compose*.{yml,yaml}";
|
||||
"https://raw.githubusercontent.com/argoproj/argo-workflows/master/api/jsonschema/schema.json" =
|
||||
"*flow*.{yml,yaml}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keymaps = [
|
||||
{
|
||||
key = "gd";
|
||||
lspBufAction = "definition";
|
||||
}
|
||||
{
|
||||
key = "gr";
|
||||
lspBufAction = "references";
|
||||
}
|
||||
{
|
||||
key = "gD";
|
||||
lspBufAction = "declaration";
|
||||
}
|
||||
{
|
||||
key = "gI";
|
||||
lspBufAction = "implementation";
|
||||
}
|
||||
{
|
||||
key = "gT";
|
||||
lspBufAction = "type_definition";
|
||||
}
|
||||
{
|
||||
key = "K";
|
||||
lspBufAction = "hover";
|
||||
}
|
||||
{
|
||||
key = "<leader>cw";
|
||||
lspBufAction = "workspace_symbol";
|
||||
}
|
||||
{
|
||||
key = "<leader>cr";
|
||||
lspBufAction = "rename";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
_: {
|
||||
plugins.luasnip = {
|
||||
enable = true;
|
||||
settings = {
|
||||
enable_autosnippets = true;
|
||||
store_selection_keys = "<Tab>";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
{
|
||||
colorschemes = {
|
||||
catppuccin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
background = {
|
||||
light = "macchiato";
|
||||
dark = "mocha";
|
||||
};
|
||||
custom_highlights = ''
|
||||
function(highlights)
|
||||
return {
|
||||
CursorLineNr = { fg = highlights.peach, style = {} },
|
||||
NavicText = { fg = highlights.text },
|
||||
}
|
||||
end
|
||||
'';
|
||||
flavour = "macchiato"; # "latte", "mocha", "frappe", "macchiato" or raw lua code
|
||||
no_bold = false;
|
||||
no_italic = false;
|
||||
no_underline = false;
|
||||
transparent_background = true;
|
||||
integrations = {
|
||||
cmp = true;
|
||||
notify = true;
|
||||
gitsigns = true;
|
||||
neotree = true;
|
||||
which_key = true;
|
||||
illuminate = {
|
||||
enabled = true;
|
||||
lsp = true;
|
||||
};
|
||||
navic = {
|
||||
enabled = true;
|
||||
custom_bg = "NONE";
|
||||
};
|
||||
treesitter = true;
|
||||
telescope.enabled = true;
|
||||
indent_blankline.enabled = true;
|
||||
mini = {
|
||||
enabled = true;
|
||||
indentscope_color = "rosewater";
|
||||
};
|
||||
native_lsp = {
|
||||
enabled = true;
|
||||
inlay_hints = {
|
||||
background = true;
|
||||
};
|
||||
virtual_text = {
|
||||
errors = [ "italic" ];
|
||||
hints = [ "italic" ];
|
||||
information = [ "italic" ];
|
||||
warnings = [ "italic" ];
|
||||
ok = [ "italic" ];
|
||||
};
|
||||
underlines = {
|
||||
errors = [ "underline" ];
|
||||
hints = [ "underline" ];
|
||||
information = [ "underline" ];
|
||||
warnings = [ "underline" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
{
|
||||
plugins = {
|
||||
bufferline = {
|
||||
enable = true;
|
||||
settings = {
|
||||
options = {
|
||||
diagnostics = "nvim_lsp";
|
||||
mode = "buffers";
|
||||
|
||||
close_icon = " ";
|
||||
buffer_close_icon = " ";
|
||||
modified_icon = " ";
|
||||
|
||||
offsets = [
|
||||
{
|
||||
filetype = "neo-tree";
|
||||
text = "Neo-tree";
|
||||
highlight = "Directory";
|
||||
text_align = "left";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keymaps = [
|
||||
{
|
||||
mode = "n";
|
||||
key = "]b";
|
||||
action = "<cmd>BufferLineCycleNext<cr>";
|
||||
options = {
|
||||
desc = "Cycle to next buffer";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "[b";
|
||||
action = "<cmd>BufferLineCyclePrev<cr>";
|
||||
options = {
|
||||
desc = "Cycle to previous buffer";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<S-l>";
|
||||
action = "<cmd>BufferLineCycleNext<cr>";
|
||||
options = {
|
||||
desc = "Cycle to next buffer";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<S-h>";
|
||||
action = "<cmd>BufferLineCyclePrev<cr>";
|
||||
options = {
|
||||
desc = "Cycle to previous buffer";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>bd";
|
||||
action = "<cmd>bdelete<cr>";
|
||||
options = {
|
||||
desc = "Delete buffer";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>bl";
|
||||
action = "<cmd>BufferLineCloseLeft<cr>";
|
||||
options = {
|
||||
desc = "Delete buffers to the left";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>bo";
|
||||
action = "<cmd>BufferLineCloseOthers<cr>";
|
||||
options = {
|
||||
desc = "Delete other buffers";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>bp";
|
||||
action = "<cmd>BufferLineTogglePin<cr>";
|
||||
options = {
|
||||
desc = "Toggle pin";
|
||||
};
|
||||
}
|
||||
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>bP";
|
||||
action = "<Cmd>BufferLineGroupClose ungrouped<CR>";
|
||||
options = {
|
||||
desc = "Delete non-pinned buffers";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
_: {
|
||||
plugins.lualine = {
|
||||
enable = true;
|
||||
settings = {
|
||||
options = {
|
||||
globalstatus = true;
|
||||
extensions = [
|
||||
"fzf"
|
||||
"neo-tree"
|
||||
];
|
||||
disabledFiletypes = {
|
||||
statusline = [
|
||||
"startup"
|
||||
"alpha"
|
||||
];
|
||||
};
|
||||
theme = "catppuccin";
|
||||
};
|
||||
sections = {
|
||||
lualine_a = [
|
||||
{
|
||||
__unkeyed-1 = "mode";
|
||||
icon = "";
|
||||
}
|
||||
];
|
||||
lualine_b = [
|
||||
{
|
||||
__unkeyed-1 = "branch";
|
||||
icon = "";
|
||||
}
|
||||
{
|
||||
__unkeyed-1 = "diff";
|
||||
symbols = {
|
||||
added = " ";
|
||||
modified = " ";
|
||||
removed = " ";
|
||||
};
|
||||
}
|
||||
];
|
||||
lualine_c = [
|
||||
{
|
||||
__unkeyed-1 = "diagnostics";
|
||||
sources = [ "nvim_lsp" ];
|
||||
symbols = {
|
||||
error = " ";
|
||||
warn = " ";
|
||||
info = " ";
|
||||
hint = " ";
|
||||
};
|
||||
}
|
||||
{
|
||||
__unkeyed-1 = "navic";
|
||||
}
|
||||
];
|
||||
lualine_x = [
|
||||
{
|
||||
__unkeyed-1 = "filetype";
|
||||
icon_only = true;
|
||||
separator = "";
|
||||
padding = {
|
||||
left = 1;
|
||||
right = 0;
|
||||
};
|
||||
}
|
||||
{
|
||||
__unkeyed-1 = "filename";
|
||||
path = 1;
|
||||
}
|
||||
];
|
||||
lualine_y = [
|
||||
{
|
||||
__unkeyed-1 = "progress";
|
||||
}
|
||||
];
|
||||
lualine_z = [
|
||||
{
|
||||
__unkeyed-1 = "location";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
{
|
||||
plugins.startup = {
|
||||
enable = true;
|
||||
|
||||
colors = {
|
||||
background = "#ffffff";
|
||||
foldedSection = "#ffffff";
|
||||
};
|
||||
|
||||
sections = {
|
||||
header = {
|
||||
type = "text";
|
||||
oldfilesDirectory = false;
|
||||
align = "center";
|
||||
foldSection = false;
|
||||
title = "Header";
|
||||
margin = 5;
|
||||
content = [
|
||||
"███████╗███████╗ ██████╗ █████╗ ██████╗ ███████╗ █████╗ ███╗ ██╗ ██████╗ ██╗ ███████╗"
|
||||
"██╔════╝██╔════╝██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗████╗ ██║██╔════╝ ██║ ██╔════╝"
|
||||
"█████╗ ███████╗██║ ███████║██████╔╝█████╗ ███████║██╔██╗ ██║██║ ███╗██║ █████╗ "
|
||||
"██╔══╝ ╚════██║██║ ██╔══██║██╔═══╝ ██╔══╝ ██╔══██║██║╚██╗██║██║ ██║██║ ██╔══╝ "
|
||||
"███████╗███████║╚██████╗██║ ██║██║ ███████╗██║ ██║██║ ╚████║╚██████╔╝███████╗███████╗"
|
||||
"╚══════╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚══════╝"
|
||||
];
|
||||
highlight = "Statement";
|
||||
defaultColor = "";
|
||||
oldfilesAmount = 0;
|
||||
};
|
||||
|
||||
body = {
|
||||
type = "mapping";
|
||||
oldfilesDirectory = false;
|
||||
align = "center";
|
||||
foldSection = false;
|
||||
title = "Menu";
|
||||
margin = 5;
|
||||
content = [
|
||||
[
|
||||
" Find File"
|
||||
"Telescope find_files"
|
||||
"ff"
|
||||
]
|
||||
[
|
||||
" Find Word"
|
||||
"Telescope live_grep"
|
||||
"fr"
|
||||
]
|
||||
[
|
||||
" Recent Files"
|
||||
"Telescope oldfiles"
|
||||
"fg"
|
||||
]
|
||||
[
|
||||
" File Browser"
|
||||
"Telescope file_browser"
|
||||
"fe"
|
||||
]
|
||||
[
|
||||
" Copilot Chat"
|
||||
"CopilotChat"
|
||||
"ct"
|
||||
]
|
||||
[
|
||||
" SecondBrain"
|
||||
"edit ~/projects/personal/SecondBrain"
|
||||
"sb"
|
||||
]
|
||||
];
|
||||
highlight = "string";
|
||||
defaultColor = "";
|
||||
oldfilesAmount = 0;
|
||||
};
|
||||
};
|
||||
|
||||
options = {
|
||||
paddings = [
|
||||
1
|
||||
3
|
||||
];
|
||||
};
|
||||
|
||||
parts = [
|
||||
"header"
|
||||
"body"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
extraPlugins =
|
||||
with pkgs.vimPlugins;
|
||||
[
|
||||
];
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
_: {
|
||||
plugins = {
|
||||
markdown-preview = {
|
||||
enable = true;
|
||||
settings = {
|
||||
browser = "firefox";
|
||||
echo_preview_url = 1;
|
||||
port = "6969";
|
||||
preview_options = {
|
||||
disable_filename = 1;
|
||||
disable_sync_scroll = 1;
|
||||
sync_scroll_type = "middle";
|
||||
};
|
||||
theme = "dark";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keymaps = [
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>mp";
|
||||
action = "<cmd>MarkdownPreview<cr>";
|
||||
options = {
|
||||
desc = "Toggle Markdown Preview";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
plugins.mini = {
|
||||
enable = true;
|
||||
|
||||
modules = {
|
||||
indentscope = {
|
||||
symbol = "│";
|
||||
options = {
|
||||
try_as_border = true;
|
||||
};
|
||||
};
|
||||
surround = { };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
{
|
||||
plugins.obsidian = {
|
||||
enable = false;
|
||||
settings = {
|
||||
workspaces = [
|
||||
{
|
||||
name = "SecondBrain";
|
||||
path = "~/projects/personal/SecondBrain";
|
||||
}
|
||||
];
|
||||
templates = {
|
||||
subdir = "templates";
|
||||
dateFormat = "%Y-%m-%d";
|
||||
timeFormat = "%H:%M";
|
||||
substitutions = { };
|
||||
};
|
||||
|
||||
dailyNotes = {
|
||||
folder = "0_Daily_Notes";
|
||||
dateFormat = "%Y-%m-%d";
|
||||
aliasFormat = "%B %-d, %Y";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,210 +0,0 @@
|
|||
{
|
||||
plugins.telescope = {
|
||||
enable = true;
|
||||
extensions = {
|
||||
file-browser = {
|
||||
enable = true;
|
||||
};
|
||||
fzf-native = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
settings = {
|
||||
defaults = {
|
||||
layout_config = {
|
||||
horizontal = {
|
||||
prompt_position = "top";
|
||||
};
|
||||
};
|
||||
sorting_strategy = "ascending";
|
||||
};
|
||||
};
|
||||
keymaps = {
|
||||
"<leader><space>" = {
|
||||
action = "find_files";
|
||||
options = {
|
||||
desc = "Find project files";
|
||||
};
|
||||
};
|
||||
"<leader>/" = {
|
||||
action = "live_grep";
|
||||
options = {
|
||||
desc = "Grep (root dir)";
|
||||
};
|
||||
};
|
||||
"<leader>:" = {
|
||||
action = "command_history";
|
||||
options = {
|
||||
desc = "Command History";
|
||||
};
|
||||
};
|
||||
"<leader>b" = {
|
||||
action = "buffers";
|
||||
options = {
|
||||
desc = "+buffer";
|
||||
};
|
||||
};
|
||||
"<leader>ff" = {
|
||||
action = "find_files";
|
||||
options = {
|
||||
desc = "Find project files";
|
||||
};
|
||||
};
|
||||
"<leader>fr" = {
|
||||
action = "live_grep";
|
||||
options = {
|
||||
desc = "Find text";
|
||||
};
|
||||
};
|
||||
"<leader>fR" = {
|
||||
action = "resume";
|
||||
options = {
|
||||
desc = "Resume";
|
||||
};
|
||||
};
|
||||
"<leader>fg" = {
|
||||
action = "oldfiles";
|
||||
options = {
|
||||
desc = "Recent";
|
||||
};
|
||||
};
|
||||
"<leader>fb" = {
|
||||
action = "buffers";
|
||||
options = {
|
||||
desc = "Buffers";
|
||||
};
|
||||
};
|
||||
"<C-p>" = {
|
||||
action = "git_files";
|
||||
options = {
|
||||
desc = "Search git files";
|
||||
};
|
||||
};
|
||||
"<leader>gc" = {
|
||||
action = "git_commits";
|
||||
options = {
|
||||
desc = "Commits";
|
||||
};
|
||||
};
|
||||
"<leader>gs" = {
|
||||
action = "git_status";
|
||||
options = {
|
||||
desc = "Status";
|
||||
};
|
||||
};
|
||||
"<leader>sa" = {
|
||||
action = "autocommands";
|
||||
options = {
|
||||
desc = "Auto Commands";
|
||||
};
|
||||
};
|
||||
"<leader>sb" = {
|
||||
action = "current_buffer_fuzzy_find";
|
||||
options = {
|
||||
desc = "Buffer";
|
||||
};
|
||||
};
|
||||
"<leader>sc" = {
|
||||
action = "command_history";
|
||||
options = {
|
||||
desc = "Command History";
|
||||
};
|
||||
};
|
||||
"<leader>sC" = {
|
||||
action = "commands";
|
||||
options = {
|
||||
desc = "Commands";
|
||||
};
|
||||
};
|
||||
"<leader>sD" = {
|
||||
action = "diagnostics";
|
||||
options = {
|
||||
desc = "Workspace diagnostics";
|
||||
};
|
||||
};
|
||||
"<leader>sh" = {
|
||||
action = "help_tags";
|
||||
options = {
|
||||
desc = "Help pages";
|
||||
};
|
||||
};
|
||||
"<leader>sH" = {
|
||||
action = "highlights";
|
||||
options = {
|
||||
desc = "Search Highlight Groups";
|
||||
};
|
||||
};
|
||||
"<leader>sk" = {
|
||||
action = "keymaps";
|
||||
options = {
|
||||
desc = "Keymaps";
|
||||
};
|
||||
};
|
||||
"<leader>sM" = {
|
||||
action = "man_pages";
|
||||
options = {
|
||||
desc = "Man pages";
|
||||
};
|
||||
};
|
||||
"<leader>sm" = {
|
||||
action = "marks";
|
||||
options = {
|
||||
desc = "Jump to Mark";
|
||||
};
|
||||
};
|
||||
"<leader>so" = {
|
||||
action = "vim_options";
|
||||
options = {
|
||||
desc = "Options";
|
||||
};
|
||||
};
|
||||
"<leader>sR" = {
|
||||
action = "resume";
|
||||
options = {
|
||||
desc = "Resume";
|
||||
};
|
||||
};
|
||||
"<leader>uC" = {
|
||||
action = "colorscheme";
|
||||
options = {
|
||||
desc = "Colorscheme preview";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
keymaps = [
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>sd";
|
||||
action = "<cmd>Telescope diagnostics bufnr=0<cr>";
|
||||
options = {
|
||||
desc = "Document diagnostics";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>fe";
|
||||
action = "<cmd>Telescope file_browser<cr>";
|
||||
options = {
|
||||
desc = "File browser";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>fE";
|
||||
action = "<cmd>Telescope file_browser path=%:p:h select_buffer=true<cr>";
|
||||
options = {
|
||||
desc = "File browser";
|
||||
};
|
||||
}
|
||||
];
|
||||
extraConfigLua = ''
|
||||
require("telescope").setup{
|
||||
pickers = {
|
||||
colorscheme = {
|
||||
enable_preview = true
|
||||
}
|
||||
}
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
_: {
|
||||
plugins.toggleterm = {
|
||||
enable = true;
|
||||
settings = {
|
||||
size = 20;
|
||||
};
|
||||
};
|
||||
keymaps = [
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>t";
|
||||
action = "<cmd>ToggleTerm<cr>";
|
||||
options = {
|
||||
desc = "Toggle Terminal Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>tv";
|
||||
action = "<cmd>ToggleTerm direction=vertical<cr>";
|
||||
options = {
|
||||
desc = "Toggle Vertical Terminal Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>th";
|
||||
action = "<cmd>ToggleTerm direction=horizontal<cr>";
|
||||
options = {
|
||||
desc = "Toggle Horizontal Terminal Window";
|
||||
};
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>tf";
|
||||
action = "<cmd>ToggleTerm direction=float<cr>";
|
||||
options = {
|
||||
desc = "Toggle Floating Terminal Window";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
plugins.web-devicons = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
plugins.which-key = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,107 +0,0 @@
|
|||
{
|
||||
config = {
|
||||
extraConfigLuaPre =
|
||||
# lua
|
||||
''
|
||||
vim.fn.sign_define("diagnosticsignerror", { text = " ", texthl = "diagnosticerror", linehl = "", numhl = "" })
|
||||
vim.fn.sign_define("diagnosticsignwarn", { text = " ", texthl = "diagnosticwarn", linehl = "", numhl = "" })
|
||||
vim.fn.sign_define("diagnosticsignhint", { text = "", texthl = "diagnostichint", linehl = "", numhl = "" })
|
||||
vim.fn.sign_define("diagnosticsigninfo", { text = " ", texthl = "diagnosticinfo", linehl = "", numhl = "" })
|
||||
'';
|
||||
|
||||
clipboard = {
|
||||
providers.wl-copy.enable = true;
|
||||
};
|
||||
|
||||
editorconfig = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
diagnostic.settings = {
|
||||
virtual_lines = {
|
||||
virtual_lines = true;
|
||||
};
|
||||
virtual_text = false;
|
||||
};
|
||||
|
||||
opts = {
|
||||
# Show line numbers
|
||||
number = true;
|
||||
|
||||
# Show relative line numbers
|
||||
relativenumber = true;
|
||||
|
||||
# Use the system clipboard
|
||||
clipboard = "unnamedplus";
|
||||
|
||||
# Number of spaces that represent a <TAB>
|
||||
tabstop = 2;
|
||||
softtabstop = 2;
|
||||
|
||||
# Show tabline always
|
||||
showtabline = 2;
|
||||
|
||||
# Use spaces instead of tabs
|
||||
expandtab = true;
|
||||
|
||||
# Enable smart indentation
|
||||
smartindent = true;
|
||||
|
||||
# Number of spaces to use for each step of (auto)indent
|
||||
shiftwidth = 2;
|
||||
|
||||
# Enable break indent
|
||||
breakindent = true;
|
||||
|
||||
# Highlight the screen line of the cursor
|
||||
cursorline = true;
|
||||
|
||||
# Minimum number of screen lines to keep above and below the cursor
|
||||
scrolloff = 8;
|
||||
|
||||
# Enable mouse support
|
||||
mouse = "a";
|
||||
|
||||
# Set folding method to manual
|
||||
foldmethod = "manual";
|
||||
|
||||
# Disable folding by default
|
||||
foldenable = false;
|
||||
|
||||
# Wrap long lines at a character in 'breakat'
|
||||
linebreak = true;
|
||||
|
||||
# Disable spell checking
|
||||
spell = false;
|
||||
|
||||
# Disable swap file creation
|
||||
swapfile = false;
|
||||
|
||||
# Time in milliseconds to wait for a mapped sequence to complete
|
||||
timeoutlen = 300;
|
||||
|
||||
# Enable 24-bit RGB color in the TUI
|
||||
termguicolors = true;
|
||||
|
||||
# Don't show mode in the command line
|
||||
showmode = false;
|
||||
|
||||
# Open new split below the current window
|
||||
splitbelow = true;
|
||||
|
||||
# Keep the screen when splitting
|
||||
splitkeep = "screen";
|
||||
|
||||
# Open new split to the right of the current window
|
||||
splitright = true;
|
||||
|
||||
# Hide command line unless needed
|
||||
cmdheight = 0;
|
||||
|
||||
# Remove EOB
|
||||
fillchars = {
|
||||
eob = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
125
flake.lock
generated
125
flake.lock
generated
|
|
@ -73,10 +73,30 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1759523803,
|
||||
"narHash": "sha256-PTod9NG+i3XbbnBKMl/e5uHDBYpwIWivQ3gOWSEuIEM=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "cfc9f7bb163ad8542029d303e599c0f7eee09835",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"pre-commit-hooks",
|
||||
"git-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
|
|
@ -124,16 +144,16 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1759036355,
|
||||
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
|
||||
"owner": "nixos",
|
||||
"lastModified": 1759070547,
|
||||
"narHash": "sha256-JVZl8NaVRYb0+381nl7LvPE+A774/dRpif01FKLrYFQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
|
||||
"rev": "647e5c14cbd5067f44ac86b74f014962df460840",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
|
|
@ -153,7 +173,39 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1759735786,
|
||||
"narHash": "sha256-a0+h02lyP2KwSNrZz4wLJTu9ikujNsTWIC874Bv7IJ0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "20c4598c84a671783f741e02bf05cbfaf4907cff",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1759036355,
|
||||
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1758763312,
|
||||
"narHash": "sha256-puBMviZhYlqOdUUgEmMVJpXqC/ToEqSvkyZ30qQ09xM=",
|
||||
|
|
@ -169,26 +221,10 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1758029226,
|
||||
"narHash": "sha256-TjqVmbpoCqWywY9xIZLTf6ANFvDCXdctCjoYuYPYdMI=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "08b8f92ac6354983f5382124fef6006cade4a1c1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixvim": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_2",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"nuschtosSearch": "nuschtosSearch",
|
||||
"systems": "systems_2"
|
||||
},
|
||||
|
|
@ -229,32 +265,14 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1758108966,
|
||||
"narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=",
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"git-hooks": "git-hooks",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"nixvim": "nixvim",
|
||||
"pre-commit-hooks": "pre-commit-hooks"
|
||||
"systems": "systems_3"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
|
|
@ -286,6 +304,21 @@
|
|||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
|
|
|||
76
flake.nix
76
flake.nix
|
|
@ -1,75 +1,25 @@
|
|||
{
|
||||
description = "deCort.tech NeoVim configuration";
|
||||
description = "EscapeAngle NeoVim configuration";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
nixvim = {
|
||||
url = "github:nix-community/nixvim";
|
||||
};
|
||||
pre-commit-hooks = {
|
||||
url = "github:cachix/pre-commit-hooks.nix";
|
||||
};
|
||||
nixvim.url = "github:nix-community/nixvim";
|
||||
systems.url = "github:nix-systems/default";
|
||||
git-hooks.url = "github:cachix/git-hooks.nix";
|
||||
git-hooks.flake = false;
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
nixpkgs,
|
||||
nixvim,
|
||||
flake-parts,
|
||||
pre-commit-hooks,
|
||||
...
|
||||
}@inputs:
|
||||
inputs@{ flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
systems = [
|
||||
"aarch64-linux"
|
||||
"x86_64-linux"
|
||||
"aarch64-darwin"
|
||||
"x86_64-darwin"
|
||||
systems = import inputs.systems;
|
||||
_module.args = { inherit inputs; };
|
||||
imports = [
|
||||
./modules/flake
|
||||
./overlays
|
||||
./plugins
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{
|
||||
pkgs,
|
||||
system,
|
||||
self',
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
nixvimLib = nixvim.lib.${system};
|
||||
nixvim' = nixvim.legacyPackages.${system};
|
||||
nixvimModule = {
|
||||
inherit pkgs;
|
||||
module = import ./config; # import the module directly
|
||||
# You can use `extraSpecialArgs` to pass additional arguments to your module files
|
||||
extraSpecialArgs = {
|
||||
# inherit (inputs) foo;
|
||||
};
|
||||
};
|
||||
nvim = nixvim'.makeNixvimWithModule nixvimModule;
|
||||
in
|
||||
{
|
||||
checks = {
|
||||
default = nixvimLib.check.mkTestDerivationFromNixvimModule nixvimModule;
|
||||
pre-commit-check = pre-commit-hooks.lib.${system}.run {
|
||||
src = ./.;
|
||||
hooks = {
|
||||
statix.enable = true;
|
||||
nixfmt-rfc-style.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
formatter = pkgs.nixfmt-rfc-style;
|
||||
|
||||
packages = {
|
||||
default = nvim;
|
||||
};
|
||||
|
||||
devShells = {
|
||||
default = with pkgs; mkShell { inherit (self'.checks.pre-commit-check) shellHook; };
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
23
modules/flake/default.nix
Normal file
23
modules/flake/default.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{ inputs, self, ... }:
|
||||
{
|
||||
debug = true;
|
||||
|
||||
imports = [ ./devshell.nix ];
|
||||
|
||||
perSystem =
|
||||
{ lib, system, ... }:
|
||||
{
|
||||
_module.args = {
|
||||
flake = { inherit inputs self; };
|
||||
pkgs = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = lib.attrValues self.overlays;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
(self + /packages)
|
||||
];
|
||||
};
|
||||
}
|
||||
32
modules/flake/devshell.nix
Normal file
32
modules/flake/devshell.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
(inputs.git-hooks + /flake-module.nix)
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
devShells.default = pkgs.mkShell rec {
|
||||
name = "nixvim";
|
||||
meta.description = "Dev environment for nixvim configuration";
|
||||
|
||||
inputsFrom = [ config.pre-commit.devShell ];
|
||||
|
||||
packages = with pkgs; [
|
||||
nil
|
||||
nix-output-monitor
|
||||
nixfmt-rfc-style
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo 1>&2 "🐼: $(id -un) | 🧬: $(nix eval --raw --impure --expr 'builtins.currentSystem') | 🐧: $(uname -r) "
|
||||
echo 1>&2 "Ready to work on ${name}!"
|
||||
'';
|
||||
};
|
||||
|
||||
pre-commit.settings = {
|
||||
hooks.nixfmt-rfc-style.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
12
overlays/default.nix
Normal file
12
overlays/default.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{ inputs, self, ... }:
|
||||
{
|
||||
flake.overlays.default = (
|
||||
final: prev: {
|
||||
stable = import inputs.nixpkgs-stable {
|
||||
allowUnfree = true;
|
||||
inherit (prev) system;
|
||||
overlays = prev.lib.attrValues self.overlays;
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
39
packages/default.nix
Normal file
39
packages/default.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
flake,
|
||||
inputs',
|
||||
self',
|
||||
...
|
||||
}:
|
||||
let
|
||||
mkNixVim =
|
||||
module:
|
||||
inputs'.nixvim.legacyPackages.makeNixvimWithModule {
|
||||
extraSpecialArgs = { inherit inputs self; };
|
||||
inherit module;
|
||||
};
|
||||
inherit (flake) inputs self;
|
||||
bareModules = [
|
||||
self.myvimPlugins.common
|
||||
self.myvimPlugins.buffer
|
||||
self.myvimPlugins.snacks
|
||||
self.myvimPlugins.ux
|
||||
];
|
||||
coreModules = bareModules ++ [
|
||||
self.myvimPlugins.autosession
|
||||
self.myvimPlugins.blink-cmp
|
||||
self.myvimPlugins.git
|
||||
self.myvimPlugins.lang
|
||||
self.myvimPlugins.lsp
|
||||
self.myvimPlugins.lualine
|
||||
self.myvimPlugins.neotree
|
||||
self.myvimPlugins.noice
|
||||
self.myvimPlugins.treesitter
|
||||
];
|
||||
in
|
||||
{
|
||||
packages = {
|
||||
default = self'.packages.core;
|
||||
bare = mkNixVim bareModules;
|
||||
core = mkNixVim coreModules;
|
||||
};
|
||||
}
|
||||
23
plugins/autosession.nix
Normal file
23
plugins/autosession.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{ config, ... }:
|
||||
let
|
||||
inherit (config.myvim.mkKey) mkKeymap;
|
||||
in
|
||||
{
|
||||
plugins.auto-session = {
|
||||
enable = true;
|
||||
autoLoad = true;
|
||||
|
||||
settings = {
|
||||
use_git_branch = true;
|
||||
session_lens.previewer = true;
|
||||
};
|
||||
};
|
||||
|
||||
keymaps = [
|
||||
(mkKeymap "n" "<leader>q." "<cmd>SessionRestore<CR>" "Last Session")
|
||||
(mkKeymap "n" "<leader>ql" "<cmd>Autosession search<CR>" "List Session")
|
||||
(mkKeymap "n" "<leader>qd" "<cmd>Autosession delete<CR>" "Delete Session")
|
||||
(mkKeymap "n" "<leader>qs" "<cmd>SessionSave<CR>" "Save Session")
|
||||
(mkKeymap "n" "<leader>qD" "<cmd>SessionPurgeOrphaned<CR>" "Purge Orphaned Sessions")
|
||||
];
|
||||
}
|
||||
95
plugins/blink-cmp.nix
Normal file
95
plugins/blink-cmp.nix
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
blink-cmp = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
completion.menu.border = "rounded";
|
||||
|
||||
signature = {
|
||||
enabled = true;
|
||||
|
||||
trigger = {
|
||||
enabled = true;
|
||||
show_on_keyword = true;
|
||||
show_on_insert = true;
|
||||
};
|
||||
|
||||
window = {
|
||||
show_documentation = true;
|
||||
};
|
||||
};
|
||||
|
||||
keymap = {
|
||||
"<C-j>" = [
|
||||
"select_next"
|
||||
"fallback"
|
||||
];
|
||||
"<C-k>" = [
|
||||
"select_prev"
|
||||
"fallback"
|
||||
];
|
||||
|
||||
"<c-l>" = [
|
||||
"snippet_forward"
|
||||
"fallback"
|
||||
];
|
||||
"<c-h>" = [
|
||||
"snippet_backward"
|
||||
"fallback"
|
||||
];
|
||||
"<c-u>" = [
|
||||
"scroll_documentation_up"
|
||||
"fallback"
|
||||
];
|
||||
"<c-d>" = [
|
||||
"scroll_documentation_down"
|
||||
"fallback"
|
||||
];
|
||||
"<C-space>" = [
|
||||
(
|
||||
# lua
|
||||
mkRaw ''
|
||||
function(cmp)
|
||||
local ok,_ = pcall(require, "copilot")
|
||||
if ok then
|
||||
vim.g.copilot_no_tab_map = true
|
||||
vim.g.copilot_assume_mapped = true
|
||||
vim.g.copilot_tab_fallback = ""
|
||||
|
||||
local suggestion = require("copilot.suggestion")
|
||||
if suggestion.is_visible() then
|
||||
suggestion.accept()
|
||||
else
|
||||
if cmp.snippet_active() then
|
||||
return cmp.select_and_accept()
|
||||
else
|
||||
return cmp.accept()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
''
|
||||
)
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
schemastore = {
|
||||
enable = true;
|
||||
|
||||
json = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
yaml = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
86
plugins/buffer.nix
Normal file
86
plugins/buffer.nix
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (config.myvim.mkKey) mkKeymap wKeyObj;
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
bufferline = {
|
||||
enable = true;
|
||||
settings.options = rec {
|
||||
diagnostics = "nvim_lsp";
|
||||
buffer_close_icon = "";
|
||||
close_icon = buffer_close_icon;
|
||||
always_show_bufferline = true;
|
||||
hover = {
|
||||
enabled = true;
|
||||
delay = 200;
|
||||
reveal = [ "close" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
harpoon.enable = true;
|
||||
};
|
||||
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>b"
|
||||
""
|
||||
"buffers"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader><tab>"
|
||||
""
|
||||
"tabs"
|
||||
])
|
||||
];
|
||||
|
||||
keymaps = [
|
||||
(mkKeymap "n" "<leader>b." (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
harpoon = require("harpoon")
|
||||
harpoon:list():add()
|
||||
end
|
||||
''
|
||||
) "Add File to Harpoon")
|
||||
(mkKeymap "n" "<leader>bb" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
harpoon = require("harpoon")
|
||||
harpoon.ui:toggle_quick_menu(harpoon:list())
|
||||
end
|
||||
''
|
||||
) "Harpoon ui")
|
||||
|
||||
(mkKeymap "n" "<leader>bp" "<cmd>:BufferLinePick<cr>" "Buffer Line Pick")
|
||||
(mkKeymap "n" "<leader>qc" "<cmd>:bp | bd #<cr>" "Buffer close")
|
||||
|
||||
(mkKeymap "n" "<leader>bP" "<cmd>BufferLineTogglePin<cr>" "Buffer Pin")
|
||||
(mkKeymap "n" "<leader>bd" "<cmd>BufferLineSortByDirectory<cr>" "Buffer Sort by dir")
|
||||
(mkKeymap "n" "<leader>be" "<cmd>BufferLineSortByExtension<cr>" "Buffer Sort by ext")
|
||||
(mkKeymap "n" "<leader>bt" "<cmd>BufferLineSortByTabs<cr>" "Buffer Sort by Tabs")
|
||||
(mkKeymap "n" "<leader>bL" "<cmd>BufferLineCloseRight<cr>" "Buffer close all to right")
|
||||
(mkKeymap "n" "<leader>bH" "<cmd>BufferLineCloseLeft<cr>" "Buffer close all to left")
|
||||
(mkKeymap "n" "<leader>bc" "<cmd>BufferLineCloseOther<cr>"
|
||||
"Buffer close all except the current buffer"
|
||||
)
|
||||
(mkKeymap "n" "<a-s-h>" "<cmd>BufferLineMovePrev<cr>" "Move buffer to left")
|
||||
(mkKeymap "n" "<a-s-l>" "<cmd>BufferLineMoveNext<cr>" "Move buffer to right")
|
||||
|
||||
(mkKeymap "n" "<s-h>" ":BufferLineCyclePrev<cr>" "Buffer Previous")
|
||||
(mkKeymap "n" "<s-l>" ":BufferLineCycleNext<cr>" "Buffer Next")
|
||||
|
||||
(mkKeymap "n" "<leader><tab>j" "<cmd>tabn<cr>" "Next Tab")
|
||||
(mkKeymap "n" "<leader><tab>k" "<cmd>tabp<cr>" "Previous Tab")
|
||||
(mkKeymap "n" "<leader><tab>l" "<cmd>tabn<cr>" "Next Tab")
|
||||
(mkKeymap "n" "<leader><tab>h" "<cmd>tabp<cr>" "Previous Tab")
|
||||
|
||||
(mkKeymap "n" "<leader>qt" "<cmd>tabclose<cr>" "Close Tab")
|
||||
(mkKeymap "n" "<leader><tab>q" "<cmd>tabclose<cr>" "Close Tab")
|
||||
(mkKeymap "n" "<leader><tab>n" "<cmd>tabnew<cr>" "New Tab")
|
||||
];
|
||||
}
|
||||
43
plugins/common/colorscheme.nix
Normal file
43
plugins/common/colorscheme.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{ config, ... }:
|
||||
{
|
||||
colorschemes = {
|
||||
catppuccin = {
|
||||
enable = false;
|
||||
settings = {
|
||||
integrations.native_lsp = {
|
||||
enabled = true;
|
||||
underlines = {
|
||||
errors = [ "undercurl" ];
|
||||
hints = [ "undercurl" ];
|
||||
warnings = [ "undercurl" ];
|
||||
information = [ "undercurl" ];
|
||||
};
|
||||
};
|
||||
flavor = "mocha";
|
||||
italic = true;
|
||||
bold = true;
|
||||
dimInactive = false;
|
||||
transparent_background = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
colorschemes.tokyonight = {
|
||||
enable = true;
|
||||
settings = {
|
||||
style = "night";
|
||||
transparent = config.myvim.transparent;
|
||||
styles = {
|
||||
floats = if config.myvim.transparent then "transparent" else "dark";
|
||||
sidebars = if config.myvim.transparent then "transparent" else "dark";
|
||||
comments.italic = true;
|
||||
functions.italic = true;
|
||||
variables.italic = true;
|
||||
keyword = {
|
||||
italic = true;
|
||||
bold = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
149
plugins/common/default.nix
Normal file
149
plugins/common/default.nix
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (config.myvim) icons;
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
in
|
||||
{
|
||||
imports =
|
||||
with builtins;
|
||||
with lib;
|
||||
map (fn: ./${fn}) (
|
||||
filter (fn: (fn != "default.nix" && hasSuffix ".nix" "${fn}")) (attrNames (readDir ./.))
|
||||
);
|
||||
|
||||
luaLoader.enable = false;
|
||||
|
||||
extraConfigLua =
|
||||
with icons.diagnostics;
|
||||
# lua
|
||||
''
|
||||
local function my_paste(reg)
|
||||
return function(lines)
|
||||
local content = vim.fn.getreg('"')
|
||||
return vim.split(content, '\n')
|
||||
end
|
||||
end
|
||||
if (os.getenv('SSH_TTY') ~= nil)
|
||||
then
|
||||
vim.g.clipboard = {
|
||||
name = 'OSC 52',
|
||||
copy = {
|
||||
['+'] = require('vim.ui.clipboard.osc52').copy('+'),
|
||||
['*'] = require('vim.ui.clipboard.osc52').copy('*'),
|
||||
},
|
||||
paste = {
|
||||
["+"] = my_paste("+"),
|
||||
["*"] = my_paste("*"),
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
|
||||
vim.opt.whichwrap:append("<>[]hl")
|
||||
vim.opt.listchars:append("space:·")
|
||||
|
||||
-- below part set's the Diagnostic icons/colors
|
||||
local signs = {
|
||||
Hint = "${BoldHint}",
|
||||
Info = "${BoldInformation}",
|
||||
Warn = "${BoldWarning}",
|
||||
Error = "${BoldError}",
|
||||
}
|
||||
|
||||
for type, icon in pairs(signs) do
|
||||
local hl = "DiagnosticSign" .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
|
||||
end
|
||||
'';
|
||||
|
||||
globals = {
|
||||
mapleader = config.myvim.leader;
|
||||
floating_window_options.border = config.myvim.border;
|
||||
};
|
||||
|
||||
opts = {
|
||||
clipboard = "unnamedplus";
|
||||
cursorline = true;
|
||||
cursorlineopt = "number";
|
||||
|
||||
pumblend = 0;
|
||||
pumheight = 10;
|
||||
|
||||
expandtab = true;
|
||||
shiftwidth = 2;
|
||||
smartindent = true;
|
||||
tabstop = 2;
|
||||
softtabstop = 2;
|
||||
|
||||
ignorecase = true;
|
||||
smartcase = true;
|
||||
mouse = "a";
|
||||
cmdheight = 0;
|
||||
|
||||
number = true;
|
||||
relativenumber = true;
|
||||
numberwidth = 2;
|
||||
ruler = false;
|
||||
|
||||
signcolumn = "yes";
|
||||
splitbelow = true;
|
||||
splitright = true;
|
||||
splitkeep = "screen";
|
||||
termguicolors = true;
|
||||
|
||||
conceallevel = 2;
|
||||
|
||||
undofile = true;
|
||||
|
||||
wrap = false;
|
||||
|
||||
virtualedit = "block";
|
||||
winminwidth = 5;
|
||||
fileencoding = "utf-8";
|
||||
list = true;
|
||||
smoothscroll = true;
|
||||
autoread = true;
|
||||
autowrite = true;
|
||||
swapfile = false;
|
||||
fillchars = {
|
||||
eob = " ";
|
||||
};
|
||||
|
||||
updatetime = 500;
|
||||
};
|
||||
|
||||
autoCmd = [
|
||||
{
|
||||
desc = "Highlight on yank";
|
||||
event = [ "TextYankPost" ];
|
||||
callback =
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
vim.highlight.on_yank()
|
||||
end
|
||||
'';
|
||||
}
|
||||
{
|
||||
desc = "Check file changes";
|
||||
event = [
|
||||
"FocusGained"
|
||||
"BufEnter"
|
||||
"CursorHold"
|
||||
];
|
||||
pattern = [ "*" ];
|
||||
callback =
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
if vim.fn.mode() ~= "c" then
|
||||
vim.cmd("checktime")
|
||||
end
|
||||
end
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
extraLuaPackages = lp: with lp; [ luarocks ];
|
||||
}
|
||||
40
plugins/common/functions.nix
Normal file
40
plugins/common/functions.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
myvim.mkKey = rec {
|
||||
# set of functions that returns attrs for keymap list
|
||||
mkKeymap = mode: key: action: desc: {
|
||||
inherit mode key action;
|
||||
|
||||
options = {
|
||||
inherit desc;
|
||||
silent = true;
|
||||
noremap = true;
|
||||
remap = true;
|
||||
};
|
||||
};
|
||||
|
||||
# use when no description is to be passed
|
||||
mkKeymap' =
|
||||
mode: key: action:
|
||||
mkKeymap mode key action null;
|
||||
|
||||
mkKeymapWithOpts =
|
||||
mode: key: action: desc: opts:
|
||||
(mkKeymap mode key action desc) // { options = opts; };
|
||||
|
||||
# for which-key icon generation
|
||||
# accepts a list of strings and returns a list of objects
|
||||
# [{ __unkeyed, icon, group, hidden <optional boolean> }]
|
||||
wKeyObj =
|
||||
with builtins;
|
||||
list:
|
||||
{
|
||||
__unkeyed = elemAt list 0;
|
||||
icon = elemAt list 1;
|
||||
group = elemAt list 2;
|
||||
}
|
||||
// lib.optionalAttrs (length list > 3) {
|
||||
hidden = elemAt list 3;
|
||||
};
|
||||
};
|
||||
}
|
||||
193
plugins/common/icons.nix
Normal file
193
plugins/common/icons.nix
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
{
|
||||
config.myvim.icons = {
|
||||
kind = {
|
||||
Array = "";
|
||||
Boolean = "";
|
||||
Class = "";
|
||||
Color = "";
|
||||
Constant = "";
|
||||
Constructor = "";
|
||||
Enum = "";
|
||||
EnumMember = "";
|
||||
Event = "";
|
||||
Field = "";
|
||||
File = "";
|
||||
Folder = "";
|
||||
Function = "";
|
||||
Interface = "";
|
||||
Key = "";
|
||||
Keyword = "";
|
||||
Method = "";
|
||||
Module = "";
|
||||
Namespace = "";
|
||||
Null = "ﳠ";
|
||||
Number = "";
|
||||
Object = "";
|
||||
Operator = "";
|
||||
Package = "";
|
||||
Property = "";
|
||||
Reference = "";
|
||||
Snippet = "";
|
||||
String = "";
|
||||
Struct = "";
|
||||
Text = "";
|
||||
TypeParameter = "";
|
||||
Unit = "";
|
||||
Value = "";
|
||||
Variable = "";
|
||||
Copilot = "";
|
||||
TabNine = "⌬";
|
||||
};
|
||||
git = {
|
||||
LineAdded = "";
|
||||
LineModified = "";
|
||||
LineRemoved = "";
|
||||
FileDeleted = "";
|
||||
FileIgnored = "";
|
||||
FileRenamed = "";
|
||||
FileStaged = "✓";
|
||||
FileUnmerged = "";
|
||||
FileMerged = "";
|
||||
FileUnstaged = "";
|
||||
FileUntracked = "◌";
|
||||
FileChanged = "";
|
||||
Copied = "";
|
||||
Diff = "";
|
||||
Repo = "";
|
||||
Octoface = "";
|
||||
Branch = "";
|
||||
Added = " ";
|
||||
Conflict = " ";
|
||||
Deleted = "";
|
||||
Ignored = " ";
|
||||
Modified = " ";
|
||||
Renamed = "";
|
||||
Staged = "";
|
||||
Unstaged = "";
|
||||
Untracked = " ";
|
||||
};
|
||||
ui = {
|
||||
lazy = {
|
||||
ft = "";
|
||||
lazy = " ";
|
||||
loaded = "";
|
||||
not_loaded = "";
|
||||
};
|
||||
ArrowCircleDown = "";
|
||||
ArrowCircleLeft = "";
|
||||
ArrowCircleRight = "";
|
||||
ArrowCircleUp = "";
|
||||
BoldArrowDown = "";
|
||||
BoldArrowLeft = "";
|
||||
BoldArrowRight = "";
|
||||
BoldArrowUp = "";
|
||||
BoldClose = "";
|
||||
BoldDividerLeft = "";
|
||||
BoldDividerRight = "";
|
||||
BoldLineLeft = "▎";
|
||||
BookMark = "";
|
||||
BoxChecked = "";
|
||||
Bug = "";
|
||||
Stacks = "";
|
||||
Scopes = "";
|
||||
Watches = "";
|
||||
DebugConsole = "";
|
||||
Calendar = "";
|
||||
Check = "";
|
||||
ChevronRight = ">";
|
||||
ChevronShortDown = "";
|
||||
ChevronShortLeft = "";
|
||||
ChevronShortRight = "";
|
||||
ChevronShortUp = "";
|
||||
Circle = "";
|
||||
Close = "";
|
||||
CloudDownload = "";
|
||||
Code = "";
|
||||
Comment = "";
|
||||
Dashboard = "";
|
||||
DividerLeft = "";
|
||||
DividerRight = "";
|
||||
DoubleChevronRight = "»";
|
||||
Ellipsis = "";
|
||||
EmptyFolder = "";
|
||||
EmptyFolderOpen = "";
|
||||
ExitCircle = "";
|
||||
File = "";
|
||||
FileSymlink = "";
|
||||
Files = "";
|
||||
FileRename = "";
|
||||
FindFile = "";
|
||||
FindText = "";
|
||||
Fire = "";
|
||||
Folder = "";
|
||||
FolderOpen = "";
|
||||
FolderSymlink = "";
|
||||
Forward = "";
|
||||
Gear = "";
|
||||
History = "";
|
||||
Lightbulb = "";
|
||||
LineLeft = "▏";
|
||||
LineMiddle = "│";
|
||||
List = "";
|
||||
Lock = "";
|
||||
NewFile = "";
|
||||
Note = "";
|
||||
Package = "";
|
||||
Pencil = "";
|
||||
Plus = "";
|
||||
Project = "";
|
||||
Search = "";
|
||||
SignIn = "";
|
||||
SignOut = "";
|
||||
Tab = "";
|
||||
Table = "";
|
||||
Target = "";
|
||||
Telescope = "";
|
||||
Text = "";
|
||||
Tree = "";
|
||||
Triangle = "";
|
||||
TriangleShortArrowDown = "";
|
||||
TriangleShortArrowLeft = "";
|
||||
TriangleShortArrowRight = "";
|
||||
TriangleShortArrowUp = "";
|
||||
};
|
||||
diagnostics = {
|
||||
BoldError = "";
|
||||
Error = "";
|
||||
BoldWarning = "";
|
||||
Warning = "";
|
||||
BoldInformation = "";
|
||||
Information = "";
|
||||
BoldQuestion = "";
|
||||
Question = "";
|
||||
BoldHint = "";
|
||||
Hint = "";
|
||||
Debug = "";
|
||||
Trace = "✎";
|
||||
};
|
||||
misc = {
|
||||
Robot = "ﮧ";
|
||||
Squirrel = "";
|
||||
Tag = "";
|
||||
Watch = "";
|
||||
Smiley = "";
|
||||
Package = "";
|
||||
CircuitBoard = "";
|
||||
LualineFmt = "";
|
||||
};
|
||||
nvtree_chad = {
|
||||
default = "";
|
||||
symlink = "";
|
||||
folder = {
|
||||
default = "";
|
||||
empty = "";
|
||||
empty_open = "";
|
||||
open = "";
|
||||
symlink = "";
|
||||
symlink_open = "";
|
||||
arrow_open = "";
|
||||
arrow_closed = "";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
309
plugins/common/mappings.nix
Normal file
309
plugins/common/mappings.nix
Normal file
|
|
@ -0,0 +1,309 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (config.myvim.mkKey) mkKeymap mkKeymapWithOpts wKeyObj;
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
|
||||
# general mappings
|
||||
v = [
|
||||
(mkKeymap "v" "<c-s>" "<esc>:w<cr>" "Saving File")
|
||||
(mkKeymap "v" "<c-c>" "<esc>" "Escape")
|
||||
|
||||
(mkKeymap "v" "<a-j>" ":m '>+1<cr>gv-gv" "Move Selected Line Down")
|
||||
(mkKeymap "v" "<a-k>" ":m '<lt>-2<CR>gv-gv" "Move Selected Line Up")
|
||||
|
||||
(mkKeymap "v" "<" "<gv" "Indent out")
|
||||
(mkKeymap "v" ">" ">gv" "Indent in")
|
||||
|
||||
(mkKeymap "v" "<space>" "<Nop>" "Mapped to Nothing")
|
||||
];
|
||||
|
||||
xv = [
|
||||
(mkKeymapWithOpts "x" "j" ''v:count || mode(1)[0:1] == "no" ? "j" : "gj"'' "Move down" {
|
||||
expr = true;
|
||||
})
|
||||
(mkKeymapWithOpts "x" "k" ''v:count || mode(1)[0:1] == "no" ? "k" : "gk"'' "Move up" {
|
||||
expr = true;
|
||||
})
|
||||
];
|
||||
|
||||
insert = [
|
||||
(mkKeymap "i" "jk" "<esc>" "Normal Mode")
|
||||
(mkKeymap "i" "<c-s>" "<esc>:w ++p<cr>" "Save file")
|
||||
(mkKeymap "i" "<a-j>" "<esc>:m .+1<cr>==gi" "Move Line Down")
|
||||
(mkKeymap "i" "<a-k>" "<esc>:m .-2<cr>==gi" "Move Line Up")
|
||||
];
|
||||
|
||||
normal = [
|
||||
(mkKeymap "n" "<c-a-h>" ":lua require('smart-splits').resize_left()<cr>" "Resize Left")
|
||||
(mkKeymap "n" "<c-a-j>" ":lua require('smart-splits').resize_down()<cr>" "Resize Down")
|
||||
(mkKeymap "n" "<c-a-k>" ":lua require('smart-splits').resize_up()<cr>" "Resize Up")
|
||||
(mkKeymap "n" "<c-a-l>" ":lua require('smart-splits').resize_right()<cr>" "Resize Right")
|
||||
(mkKeymap "n" "?" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
require('flash').jump({
|
||||
forward = true, wrap = true, multi_window = true
|
||||
})
|
||||
end
|
||||
''
|
||||
) "Flash Search")
|
||||
|
||||
(mkKeymap "n" "<c-h>" ":lua require('smart-splits').move_cursor_left()<cr>" "Move Cursor Left")
|
||||
(mkKeymap "n" "<c-j>" ":lua require('smart-splits').move_cursor_down()<cr>" "Move Cursor Down")
|
||||
(mkKeymap "n" "<c-k>" ":lua require('smart-splits').move_cursor_up()<cr>" "Move Cursor Up")
|
||||
(mkKeymap "n" "<c-l>" ":lua require('smart-splits').move_cursor_right()<cr>" "Move Cursor Right")
|
||||
(mkKeymap "n" "<c-\\>" ":lua require('smart-splits').move_cursor_previous()<cr>"
|
||||
"Move Cursor Previous"
|
||||
)
|
||||
(mkKeymap "n" "<leader>dd"
|
||||
(
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local any_diff = false
|
||||
for _, w in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
|
||||
if vim.api.nvim_win_get_option(w, "diff") then
|
||||
any_diff = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if any_diff then
|
||||
vim.cmd("windo diffoff")
|
||||
else
|
||||
vim.cmd("windo diffthis")
|
||||
end
|
||||
end
|
||||
''
|
||||
)
|
||||
|
||||
"Toggle Diff the opened windows"
|
||||
)
|
||||
|
||||
(mkKeymap "n" "<c-s>" "<cmd>w ++p<cr>" "Save the file")
|
||||
(mkKeymap "n" "<a-+>" "<C-a>" "Increase Number")
|
||||
(mkKeymap "n" "<a-->" "<C-x>" "Decrease Number")
|
||||
|
||||
(mkKeymap "n" "<a-j>" "<cmd>m .+1<cr>==" "Move line Down")
|
||||
(mkKeymap "n" "<a-k>" "<cmd>m .-2<cr>==" "Move line up")
|
||||
|
||||
(mkKeymap "n" "<leader>qq" "<cmd>quitall!<cr>" "Quit!")
|
||||
(mkKeymap "n" "<leader>qw" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local wins = vim.api.nvim_tabpage_list_wins(0)
|
||||
if #wins > 1 then
|
||||
local ok, err = pcall(vim.cmd, 'close')
|
||||
if not ok then
|
||||
vim.notify("Cannot close the last window!", vim.log.levels.WARN)
|
||||
end
|
||||
else
|
||||
vim.notify("Cannot close the last window!", vim.log.levels.WARN)
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Close Window!")
|
||||
|
||||
(mkKeymap "n" "<leader><leader>" "<cmd>nohl<cr>" "no highlight!")
|
||||
(mkKeymap "n" "<esc>" "<esc>:nohlsearch<cr>" "escape")
|
||||
(mkKeymap "n" "<leader>A" "ggVG" "select All")
|
||||
|
||||
(mkKeymap "n" "<leader>|" "<cmd>vsplit<cr>" "vertical split")
|
||||
(mkKeymap "n" "<leader>-" "<cmd>split<cr>" "horizontal split")
|
||||
|
||||
# quickfix
|
||||
(mkKeymap "n" "<leader>cn" "<cmd>cnext<cr>" "quickfix next")
|
||||
(mkKeymap "n" "<leader>cp" "<cmd>cprev<cr>" "quickfix prev")
|
||||
(mkKeymap "n" "<leader>cq" "<cmd>cclose<cr>" "quit quickfix")
|
||||
|
||||
(mkKeymap "n" "<leader>id" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local date = "# " .. os.date("%d-%m-%y")
|
||||
local row, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||
local line = vim.api.nvim_get_current_line()
|
||||
|
||||
-- Insert date at cursor position
|
||||
local new_line = line:sub(1, col) .. date .. line:sub(col + 1)
|
||||
vim.api.nvim_set_current_line(new_line)
|
||||
|
||||
-- Move cursor to next line
|
||||
vim.api.nvim_win_set_cursor(0, { row + 1, 0 })
|
||||
end
|
||||
''
|
||||
) "Insert Date at cursor position")
|
||||
|
||||
(mkKeymap "n" "n" "nzzzv" "Move to center")
|
||||
(mkKeymap "n" "N" "Nzzzv" "Moving to center")
|
||||
(mkKeymap "n" "<leader>uC" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
require('stay-centered').toggle
|
||||
''
|
||||
) "Toggle stay-centered.nvim")
|
||||
(mkKeymap "n" "<leader>ft" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
vim.ui.input({ prompt = "Enter FileType: " }, function(input)
|
||||
local ft = input
|
||||
if not input or input == "" then
|
||||
ft = vim.bo.filetype
|
||||
end
|
||||
vim.o.filetype = ft
|
||||
end)
|
||||
end
|
||||
''
|
||||
) "Set Filetype")
|
||||
|
||||
(mkKeymap "n" "<leader>o" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local word = vim.fn.expand("<cfile>") -- Gets file-like word under cursor
|
||||
|
||||
if word:match("^https?://") then
|
||||
-- Detect OS and choose browser opener
|
||||
local open_cmd
|
||||
if vim.fn.has("macunix") == 1 then
|
||||
open_cmd = "open"
|
||||
elseif vim.fn.has("unix") == 1 then
|
||||
open_cmd = "xdg-open"
|
||||
elseif vim.fn.has("win32") == 1 or vim.fn.has("win64") == 1 then
|
||||
open_cmd = "start"
|
||||
else
|
||||
print("Unsupported OS")
|
||||
return
|
||||
end
|
||||
|
||||
vim.fn.jobstart({ open_cmd, word }, { detach = true })
|
||||
|
||||
elseif vim.fn.filereadable(word) == 1 or vim.fn.isdirectory(word) == 1 then
|
||||
-- It's a file or directory; open in current window
|
||||
vim.cmd("edit " .. vim.fn.fnameescape(word))
|
||||
else
|
||||
print("Not a valid file or URL: " .. word)
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Open")
|
||||
|
||||
(mkKeymapWithOpts "n" "j" ''v:count || mode(1)[0:1] == "no" ? "j" : "gj"'' "Move down" {
|
||||
expr = true;
|
||||
})
|
||||
(mkKeymapWithOpts "n" "k" ''v:count || mode(1)[0:1] == "no" ? "k" : "gk"'' "Move up" {
|
||||
expr = true;
|
||||
})
|
||||
|
||||
];
|
||||
in
|
||||
{
|
||||
keymaps = insert ++ normal ++ v ++ xv;
|
||||
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>A"
|
||||
""
|
||||
""
|
||||
"true"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader><leader>"
|
||||
""
|
||||
""
|
||||
"true"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>q"
|
||||
""
|
||||
"quit/session"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>i"
|
||||
""
|
||||
"Insert"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>v"
|
||||
""
|
||||
"Insert"
|
||||
])
|
||||
(wKeyObj [
|
||||
"z"
|
||||
""
|
||||
"fold"
|
||||
])
|
||||
(wKeyObj [
|
||||
"g"
|
||||
""
|
||||
"goto"
|
||||
])
|
||||
(wKeyObj [
|
||||
"["
|
||||
""
|
||||
"next"
|
||||
])
|
||||
(wKeyObj [
|
||||
"]"
|
||||
""
|
||||
"prev"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>u"
|
||||
""
|
||||
"ui"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>o"
|
||||
""
|
||||
"Open"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>d"
|
||||
""
|
||||
"diff"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>|"
|
||||
""
|
||||
"vsplit"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>-"
|
||||
""
|
||||
"split"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>c"
|
||||
""
|
||||
"quickfix"
|
||||
])
|
||||
];
|
||||
|
||||
extraConfigLua = # lua
|
||||
''
|
||||
-- Use black hole register for 'x', 'X', 'c', 'C'
|
||||
vim.api.nvim_set_keymap('n', 'x', '"_x', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('n', 'X', '"_X', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('n', 'c', '"_c', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('n', 'C', '"_C', { noremap = true, silent = true })
|
||||
|
||||
-- Visual mode
|
||||
vim.api.nvim_set_keymap('v', 'x', '"_d', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('v', 'X', '"_d', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('v', 'c', '"_c', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('v', 'C', '"_c', { noremap = true, silent = true })
|
||||
|
||||
-- In visual mode, paste from the clipboard without overwriting it
|
||||
vim.api.nvim_set_keymap("v", "p", '"_dP', { noremap = true, silent = true })
|
||||
|
||||
-- Only this hack works in command mode
|
||||
vim.cmd([[
|
||||
cnoremap <C-j> <C-n>
|
||||
cnoremap <C-k> <C-p>
|
||||
]])
|
||||
'';
|
||||
}
|
||||
46
plugins/common/options.nix
Normal file
46
plugins/common/options.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{ lib, ... }:
|
||||
with lib;
|
||||
{
|
||||
options = {
|
||||
wKeyList = mkOption {
|
||||
type = types.listOf types.attrs;
|
||||
};
|
||||
|
||||
myvim = {
|
||||
mkKey = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
};
|
||||
|
||||
icons = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
};
|
||||
|
||||
leader = mkOption {
|
||||
description = "The leader key for nvim.";
|
||||
type = types.str;
|
||||
default = " ";
|
||||
};
|
||||
|
||||
border = mkOption {
|
||||
description = "The border style for nvim.";
|
||||
type = types.enum [
|
||||
"single"
|
||||
"double"
|
||||
"rounded"
|
||||
"solid"
|
||||
"shadow"
|
||||
"curved"
|
||||
"bold"
|
||||
"none"
|
||||
];
|
||||
default = "rounded";
|
||||
};
|
||||
|
||||
transparent = mkEnableOption "transparent" // {
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
52
plugins/common/plugins.nix
Normal file
52
plugins/common/plugins.nix
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{ pkgs, config, ... }:
|
||||
let
|
||||
inherit (config.myvim.mkKey) mkKeymap;
|
||||
in
|
||||
{
|
||||
extraPlugins = with pkgs.vimPlugins; [
|
||||
stay-centered-nvim
|
||||
];
|
||||
|
||||
plugins = {
|
||||
comment = {
|
||||
enable = true;
|
||||
settings = {
|
||||
toggler.line = "<leader>/";
|
||||
opleader.line = "<leader>/";
|
||||
};
|
||||
};
|
||||
|
||||
flash = {
|
||||
enable = true;
|
||||
settings = {
|
||||
modes.char.enabled = false;
|
||||
};
|
||||
};
|
||||
|
||||
lz-n.enable = true;
|
||||
nvim-autopairs.enable = true;
|
||||
nvim-surround.enable = true;
|
||||
smart-splits.enable = true;
|
||||
trim.enable = true;
|
||||
visual-multi.enable = true;
|
||||
web-devicons.enable = true;
|
||||
|
||||
which-key = {
|
||||
enable = true;
|
||||
settings = {
|
||||
spec = config.wKeyList;
|
||||
preset = "helix";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
opts = {
|
||||
timeout = true;
|
||||
timeoutlen = 250;
|
||||
};
|
||||
|
||||
keymaps = [
|
||||
(mkKeymap "n" "<leader>vt" "<cmd>:lua require('flash').treesitter()<cr>" "Select Treesitter Node")
|
||||
(mkKeymap "n" "<leader>ut" ":TrimToggle<cr>" "Toggle Trim")
|
||||
];
|
||||
}
|
||||
33
plugins/default.nix
Normal file
33
plugins/default.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
mapAttrsMaybe =
|
||||
f: attrs:
|
||||
lib.pipe attrs [
|
||||
(lib.mapAttrsToList f)
|
||||
(builtins.filter (x: x != null))
|
||||
builtins.listToAttrs
|
||||
];
|
||||
forAllNixFiles =
|
||||
dir: f:
|
||||
if builtins.pathExists dir then
|
||||
lib.pipe dir [
|
||||
builtins.readDir
|
||||
(mapAttrsMaybe (
|
||||
fn: type:
|
||||
if type == "regular" then
|
||||
let
|
||||
name = lib.removeSuffix ".nix" fn;
|
||||
in
|
||||
lib.nameValuePair name (f "${dir}/${fn}")
|
||||
else if type == "directory" && builtins.pathExists "${dir}/${fn}/default.nix" then
|
||||
lib.nameValuePair fn (f "${dir}/${fn}")
|
||||
else
|
||||
null
|
||||
))
|
||||
]
|
||||
else
|
||||
{ };
|
||||
in
|
||||
{
|
||||
flake.myvimPlugins = forAllNixFiles ./. (fn: fn);
|
||||
}
|
||||
150
plugins/git.nix
Normal file
150
plugins/git.nix
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
inherit (config.myvim) icons;
|
||||
inherit (config.myvim.mkKey) mkKeymap wKeyObj;
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
git-conflict = {
|
||||
enable = true;
|
||||
settings.default_mappings = true;
|
||||
};
|
||||
|
||||
gitsigns = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
current_line_blame = true;
|
||||
preview_config = {
|
||||
border = "rounded";
|
||||
};
|
||||
signs = with icons.ui; {
|
||||
add.text = "${LineLeft}";
|
||||
change.text = "${LineLeft}";
|
||||
delete.text = "${LineLeft}";
|
||||
topdelete.text = "${Triangle}";
|
||||
changedelete.text = "${BoldLineLeft}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>g"
|
||||
""
|
||||
"git"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>gh"
|
||||
""
|
||||
"hunks"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>gb"
|
||||
""
|
||||
"blame"
|
||||
])
|
||||
];
|
||||
|
||||
keymaps = [
|
||||
|
||||
# Navigation
|
||||
(mkKeymap "n" "]h" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function ()
|
||||
if vim.wo.diff then
|
||||
vim.cmd.normal ({ ' ]c', bang = true})
|
||||
else
|
||||
require('gitsigns').nav_hunk('next')
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Next Hunk")
|
||||
|
||||
(mkKeymap "n" "[h" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
if vim.wo.diff then
|
||||
vim.cmd.normal({'[c', bang = true})
|
||||
else
|
||||
require('gitsigns').nav_hunk('prev')
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Prev Hunk")
|
||||
|
||||
(mkKeymap "n" "]H" (mkRaw "function() require('gitsigns').nav_hunk('last') end") "Last Hunk")
|
||||
|
||||
(mkKeymap "n" "[H" (mkRaw "function() require('gitsigns').nav_hunk('first') end") "First Hunk")
|
||||
|
||||
# Stage / Reset
|
||||
(mkKeymap "n" "<leader>gs" "<cmd>lua require('gitsigns').stage_buffer()<CR>" "Stage Buffer")
|
||||
(mkKeymap "v" "<leader>gs" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
require('gitsigns').stage_hunk({ vim.fn.line('.'), vim.fn.line('v') })
|
||||
end
|
||||
''
|
||||
) "Stage/Unstage Selection")
|
||||
|
||||
(mkKeymap "n" "<leader>gr" "<cmd>lua require('gitsigns').reset_buffer()<CR>" "Reset Buffer")
|
||||
(mkKeymap "v" "<leader>gr" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
require('gitsigns').reset_hunk({ vim.fn.line('.'), vim.fn.line('v') })
|
||||
end
|
||||
''
|
||||
) "Reset Selection")
|
||||
|
||||
# Undo
|
||||
(mkKeymap "n" "<leader>gu" "<cmd>lua require('gitsigns').undo_stage_hunk()<CR>" "Undo Stage Hunk")
|
||||
|
||||
# Preview / Diff
|
||||
(mkKeymap "n" "<leader>gp" "<cmd>lua require('gitsigns').preview_hunk_inline()<CR>"
|
||||
"Preview Hunk Inline"
|
||||
)
|
||||
(mkKeymap "n" "<leader>gP" "<cmd>lua require('gitsigns').preview_hunk()<CR>" "Preview Hunk (Popup)")
|
||||
(mkKeymap "v" "<leader>gp" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
require('gitsigns').preview_hunk_inline({ vim.fn.line('.'), vim.fn.line('v') })
|
||||
end
|
||||
''
|
||||
) "Preview Selection")
|
||||
|
||||
(mkKeymap "n" "<leader>dg" "<cmd>lua require('gitsigns').diffthis()<CR>" "Git Diff ")
|
||||
(mkKeymap "n" "<leader>dG" (mkRaw "function() require('gitsigns').diffthis('~') end")
|
||||
"Git diff last commit (HEAD~)"
|
||||
)
|
||||
|
||||
# Blame
|
||||
(mkKeymap "n" "<leader>gk" (mkRaw "function() require('gitsigns').blame_line({ full = true }) end")
|
||||
"Blame Line (Full)"
|
||||
)
|
||||
(mkKeymap "n" "<leader>gK" ":lua require('gitsigns').blame()<CR>" "Blame File")
|
||||
|
||||
# Quickfix
|
||||
(mkKeymap "n" "<leader>gq" ":lua require('gitsigns').setqflist()<CR>" "Hunks to Quickfix")
|
||||
(mkKeymap "n" "<leader>gQ" (mkRaw "function() require('gitsigns').setqflist('all') end")
|
||||
"All Hunks to Quickfix"
|
||||
)
|
||||
|
||||
# Toggles
|
||||
(mkKeymap "n" "<leader>gb" "<cmd>lua require('gitsigns').toggle_current_line_blame()<CR>"
|
||||
"Toggle Blame (Line)"
|
||||
)
|
||||
(mkKeymap "n" "<leader>gw" "<cmd>lua require('gitsigns').toggle_word_diff()<CR>" "Toggle Word Diff")
|
||||
|
||||
# Text object
|
||||
(mkKeymap "o" "ih" ":<C-U>Gitsigns select_hunk<CR>" "Select Hunk")
|
||||
(mkKeymap "x" "ih" ":<C-U>Gitsigns select_hunk<CR>" "Select Hunk")
|
||||
|
||||
];
|
||||
}
|
||||
9
plugins/lang/default.nix
Normal file
9
plugins/lang/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
imports =
|
||||
with builtins;
|
||||
with lib;
|
||||
map (fn: ./${fn}) (
|
||||
filter (fn: (fn != "default.nix" && !hasSuffix ".md" "${fn}")) (attrNames (readDir ./.))
|
||||
);
|
||||
}
|
||||
3
plugins/lang/go.nix
Normal file
3
plugins/lang/go.nix
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
plugins.lsp.servers.gopls.enable = true;
|
||||
}
|
||||
7
plugins/lang/haskell.nix
Normal file
7
plugins/lang/haskell.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
plugins.lsp.servers.hls = {
|
||||
enable = true;
|
||||
installGhc = false;
|
||||
packageFallback = true;
|
||||
};
|
||||
}
|
||||
33
plugins/lang/lua.nix
Normal file
33
plugins/lang/lua.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{ lib, pkgs, ... }:
|
||||
{
|
||||
plugins = {
|
||||
lsp.servers = {
|
||||
lua_ls = {
|
||||
enable = true;
|
||||
settings.diagnostics = {
|
||||
disable = [ "miss-name" ];
|
||||
globals = [
|
||||
"vim"
|
||||
"cmp"
|
||||
"Snacks"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
conform-nvim = {
|
||||
enable = true;
|
||||
settings = {
|
||||
formatters_by_ft = {
|
||||
lua = [ "stylua" ];
|
||||
};
|
||||
|
||||
formatters = {
|
||||
stylua = {
|
||||
command = "${lib.getExe pkgs.stylua}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
85
plugins/lang/md.nix
Normal file
85
plugins/lang/md.nix
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (config.myvim.mkKey) wKeyObj;
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
img-clip.enable = true;
|
||||
markdown-preview.enable = true;
|
||||
render-markdown.enable = true;
|
||||
|
||||
mkdnflow = {
|
||||
enable = true;
|
||||
toDo.symbols = [
|
||||
" "
|
||||
"⧖"
|
||||
"x"
|
||||
];
|
||||
mappings = {
|
||||
MkdnEnter = {
|
||||
key = "<cr>";
|
||||
modes = [
|
||||
"n"
|
||||
"i"
|
||||
];
|
||||
};
|
||||
MkdnToggleToDo = {
|
||||
key = "<c-space>";
|
||||
modes = [
|
||||
"n"
|
||||
"i"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
glow = {
|
||||
enable = true;
|
||||
lazyLoad.settings = {
|
||||
ft = "markdown";
|
||||
cmd = "Glow";
|
||||
};
|
||||
};
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
markdown = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
autoCmd = [
|
||||
{
|
||||
desc = "Setup Markdown mappings";
|
||||
event = "Filetype";
|
||||
pattern = "markdown";
|
||||
callback =
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
-- Set keymap: <leader>p to save and convert to PDF using pandoc
|
||||
vim.api.nvim_buf_set_keymap(0, 'n', '<leader>pg', '<cmd>Glow<CR>', { desc = "Markdown Glow preview", noremap = true, silent = true })
|
||||
vim.api.nvim_buf_set_keymap(0, 'n', '<leader>pb', '<cmd>MarkdownPreview<CR>', { desc = "Markdown Browser Preview", noremap = true, silent = true })
|
||||
vim.api.nvim_buf_set_keymap(0, 'n', '<leader>pp', '<cmd> lua require("md-pdf").convert_md_to_pdf()<CR>', { desc = "Markdown Print pdf", noremap = true, silent = true })
|
||||
end
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>p"
|
||||
""
|
||||
"preview"
|
||||
])
|
||||
];
|
||||
}
|
||||
26
plugins/lang/nix.nix
Normal file
26
plugins/lang/nix.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{ lib, pkgs, ... }:
|
||||
{
|
||||
plugins = {
|
||||
lsp.servers = {
|
||||
nil_ls = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
statix = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
nix = [ "nixfmt-rfc-style" ];
|
||||
};
|
||||
|
||||
formatters = {
|
||||
nixfmt-rfc-style = {
|
||||
command = "${lib.getExe pkgs.nixfmt-rfc-style}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
35
plugins/lang/python.nix
Normal file
35
plugins/lang/python.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{ lib, pkgs, ... }:
|
||||
{
|
||||
plugins = {
|
||||
lsp.servers = {
|
||||
pyright = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
pyright.diseableOrganizeInputs = true;
|
||||
python.analysis.ignore = [ "*" ];
|
||||
};
|
||||
};
|
||||
|
||||
ruff.enable = true;
|
||||
};
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
python = [
|
||||
"black"
|
||||
"isort"
|
||||
];
|
||||
};
|
||||
|
||||
formatters = {
|
||||
black = {
|
||||
command = "${lib.getExe pkgs.black}";
|
||||
};
|
||||
isort = {
|
||||
command = "${lib.getExe pkgs.isort}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
6
plugins/lang/ruby.nix
Normal file
6
plugins/lang/ruby.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
plugins.lsp.servers = {
|
||||
rubocop.enable = true;
|
||||
ruby_lsp.enable = true;
|
||||
};
|
||||
}
|
||||
33
plugins/lang/shell.nix
Normal file
33
plugins/lang/shell.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{ lib, pkgs, ... }:
|
||||
let
|
||||
formatter = [
|
||||
"shellcheck"
|
||||
"shellharden"
|
||||
"shfmt"
|
||||
];
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
lsp.servers.bashls.enable = true;
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
bash = formatter;
|
||||
sh = formatter;
|
||||
zsh = formatter;
|
||||
};
|
||||
|
||||
formatters = {
|
||||
shellcheck = {
|
||||
command = lib.getExe pkgs.shellcheck;
|
||||
};
|
||||
shellharden = {
|
||||
command = lib.getExe pkgs.shellharden;
|
||||
};
|
||||
shfmt = {
|
||||
command = lib.getExe pkgs.shfmt;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
18
plugins/lang/tofu.nix
Normal file
18
plugins/lang/tofu.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{ lib, pkgs, ... }:
|
||||
{
|
||||
plugins = {
|
||||
lsp.servers.terraformls = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
terraform.path = lib.getExe pkgs.opentofu;
|
||||
};
|
||||
};
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
terraform = [ "terraform_fmt" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
51
plugins/lang/webdev.nix
Normal file
51
plugins/lang/webdev.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{ lib, pkgs, ... }:
|
||||
{
|
||||
plugins = {
|
||||
lsp.servers = {
|
||||
cssls.enable = true;
|
||||
eslint.enable = true;
|
||||
html.enable = true;
|
||||
jsonls.enable = true;
|
||||
ts_ls.enable = true;
|
||||
tailwindcss.enable = true;
|
||||
};
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
css = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
html = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
javascript = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
json = [ "jq" ];
|
||||
typescript = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
};
|
||||
|
||||
formatters = {
|
||||
jq = {
|
||||
command = "${lib.getExe pkgs.jq}";
|
||||
};
|
||||
prettierd = {
|
||||
command = "${lib.getExe pkgs.prettierd}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ts-autotag.enable = true;
|
||||
ts-comments.enable = true;
|
||||
};
|
||||
}
|
||||
36
plugins/lang/yaml.nix
Normal file
36
plugins/lang/yaml.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
plugins = {
|
||||
lsp.servers = {
|
||||
yamlls = {
|
||||
enable = true;
|
||||
|
||||
settings.yaml = {
|
||||
schemas = {
|
||||
kubernetes = "'*.yaml";
|
||||
"http://json.schemastore.org/github-workflow" = ".github/workflows/*";
|
||||
"http://json.schemastore.org/github-action" = ".github/action.{yml,yaml}";
|
||||
"http://json.schemastore.org/ansible-stable-2.9" = "roles/tasks/*.{yml,yaml}";
|
||||
"http://json.schemastore.org/kustomization" = "kustomization.{yml,yaml}";
|
||||
"http://json.schemastore.org/ansible-playbook" = "*play*.{yml,yaml}";
|
||||
"http://json.schemastore.org/chart" = "Chart.{yml,yaml}";
|
||||
"https://json.schemastore.org/dependabot-v2" = ".github/dependabot.{yml,yaml}";
|
||||
"https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json" =
|
||||
"*docker-compose*.{yml,yaml}";
|
||||
"https://raw.githubusercontent.com/argoproj/argo-workflows/master/api/jsonschema/schema.json" =
|
||||
"*flow*.{yml,yaml}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
conform-nvim.settings = {
|
||||
formatters_by_ft = {
|
||||
yaml = {
|
||||
__unkeyed-1 = "prettierd";
|
||||
__unkeyed-2 = "prettier";
|
||||
stop_after_first = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
56
plugins/lsp/conform.nix
Normal file
56
plugins/lsp/conform.nix
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# formatter with lsp fallback
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
plugins.conform-nvim = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
default_format_opts.lsp_format = "prefer";
|
||||
notify_on_error = true;
|
||||
|
||||
format_on_save = ''
|
||||
function(bufnr)
|
||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||
return
|
||||
end
|
||||
|
||||
if slow_format_filetypes[vim.bo[bufnr].filetype] then
|
||||
return
|
||||
end
|
||||
|
||||
local function on_format(err)
|
||||
if err and err:match("timeout$") then
|
||||
slow_format_filetypes[vim.bo[bufnr].filetype] = true
|
||||
end
|
||||
end
|
||||
|
||||
return { timeout_ms = 200, lsp_fallback = true }, on_format
|
||||
end
|
||||
'';
|
||||
|
||||
format_after_save = ''
|
||||
function(bufnr)
|
||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||
return
|
||||
end
|
||||
|
||||
if not slow_format_filetypes[vim.bo[bufnr].filetype] then
|
||||
return
|
||||
end
|
||||
|
||||
return { lsp_fallback = true }
|
||||
end
|
||||
'';
|
||||
|
||||
formatters_by_ft = {
|
||||
"_" = [
|
||||
"squeeze_blanks"
|
||||
"trim_whitespace"
|
||||
"trim_newlines"
|
||||
];
|
||||
};
|
||||
|
||||
formatters.squeeze_blanks.command = lib.getExe' pkgs.coreutils "cat";
|
||||
};
|
||||
};
|
||||
}
|
||||
108
plugins/lsp/default.nix
Normal file
108
plugins/lsp/default.nix
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (config.myvim.mkKey) mkKeymap;
|
||||
in
|
||||
{
|
||||
opts = {
|
||||
foldcolumn = "1";
|
||||
foldlevel = 99;
|
||||
foldlevelstart = -1;
|
||||
foldenable = true;
|
||||
};
|
||||
|
||||
diagnostic.settings = {
|
||||
virtual_text = false;
|
||||
underline = true;
|
||||
signs = true;
|
||||
severity_sort = true;
|
||||
|
||||
float = {
|
||||
border = config.myvim.border;
|
||||
source = "always";
|
||||
focusable = false;
|
||||
};
|
||||
};
|
||||
|
||||
plugins = {
|
||||
lsp = {
|
||||
enable = true;
|
||||
|
||||
keymaps.extra = [
|
||||
(mkKeymap "n" "<leader>lO" "<cmd>lua require('otter').activate()<cr>" "Force Otter")
|
||||
];
|
||||
|
||||
inlayHints = true;
|
||||
|
||||
servers = {
|
||||
typos_lsp = {
|
||||
enable = true;
|
||||
extraOptions.init_options.diagnosticSeverity = "Hint";
|
||||
};
|
||||
};
|
||||
|
||||
keymaps = {
|
||||
silent = true;
|
||||
|
||||
diagnostic = {
|
||||
"<leader>lj" = "goto_next";
|
||||
"<leader>lk" = "goto_prev";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
lspsaga = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
lightbulb = {
|
||||
enable = false;
|
||||
virtualText = false;
|
||||
};
|
||||
|
||||
outline.keys.jump = "<cr>";
|
||||
ui.bortder = config.myvim.border;
|
||||
|
||||
scrollPreview = {
|
||||
scrollDown = "<c-d>";
|
||||
scrollUp = "<c-u>";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nvim-ufo = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
provider_selector = # lua
|
||||
''
|
||||
function()
|
||||
return { "lsp", "indent" }
|
||||
end
|
||||
'';
|
||||
|
||||
preview.mappings = {
|
||||
close = "q";
|
||||
switch = "K";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
otter = {
|
||||
enable = true;
|
||||
|
||||
settings.buffers = {
|
||||
set_filetype = true;
|
||||
};
|
||||
};
|
||||
|
||||
tiny-inline-diagnostic.enable = true;
|
||||
trouble.enable = true;
|
||||
};
|
||||
|
||||
imports =
|
||||
with builtins;
|
||||
with lib;
|
||||
map (fn: ./${fn}) (
|
||||
filter (fn: (fn != "default.nix" && !hasSuffix ".md" "${fn}")) (attrNames (readDir ./.))
|
||||
);
|
||||
}
|
||||
120
plugins/lsp/mappings.nix
Normal file
120
plugins/lsp/mappings.nix
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
inherit (config.myvim.mkKey) mkKeymap wKeyObj;
|
||||
in
|
||||
{
|
||||
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>lg"
|
||||
""
|
||||
"goto"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>l"
|
||||
""
|
||||
"lsp"
|
||||
])
|
||||
];
|
||||
|
||||
plugins.lsp.keymaps.extra = [
|
||||
(mkKeymap "n" "<leader>lO" "<cmd>lua require('otter').activate()<cr>" "Force Otter")
|
||||
|
||||
# Lspsaga
|
||||
|
||||
(mkKeymap "n" "<leader>la" "<cmd>:Lspsaga code_action<cr>" "Code Action")
|
||||
(mkKeymap "n" "<leader>lo" "<cmd>Lspsaga outline<cr>" "Outline")
|
||||
(mkKeymap "n" "<leader>lw" "<cmd>Lspsaga show_workspace_diagnostics<cr>" "Workspace Diagnostics")
|
||||
(mkKeymap "n" "gd" "<cmd>Lspsaga goto_definition<cr>" "Definitions")
|
||||
(mkKeymap "n" "<leader>lr" "<cmd>Lspsaga rename ++project<cr>" "Rename")
|
||||
(mkKeymap "n" "gt" "<cmd>Lspsaga goto_type_definition<cr>" "Type Definitions")
|
||||
(mkKeymap "n" "<leader>l." "<cmd>Lspsaga show_line_diagnostics<cr>" "Line Diagnostics")
|
||||
(mkKeymap "n" "gpd" "<cmd>Lspsaga peek_definition<cr>" "Peek Definition")
|
||||
(mkKeymap "n" "gpt" "<cmd>Lspsaga peek_type_definition<cr>" "Peek Type Definition")
|
||||
(mkKeymap "n" "[e" "<cmd>Lspsaga diagnostic_jump_prev<cr>" "Jump Prev Diagnostic")
|
||||
(mkKeymap "n" "]e" "<cmd>Lspsaga diagnostic_jump_next<cr>" "Jump Next Diagnostic")
|
||||
(mkKeymap "n" "K" (mkRaw ''
|
||||
function()
|
||||
local ok, ufo = pcall(require, "ufo")
|
||||
if ok then
|
||||
winid = ufo.peekFoldedLinesUnderCursor()
|
||||
end
|
||||
if not winid then
|
||||
vim.cmd("Lspsaga hover_doc")
|
||||
end
|
||||
end
|
||||
'') "Hover Doc")
|
||||
|
||||
# UFO
|
||||
(mkKeymap "n" "zR" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
require("ufo").openAllFolds()
|
||||
end
|
||||
''
|
||||
) "Open all folds")
|
||||
(mkKeymap "n" "zM" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
require("ufo").closeAllFolds()
|
||||
end
|
||||
''
|
||||
) "Close All Folds")
|
||||
(mkKeymap "n" "zK" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local winid = require("ufo").peekFoldedLinesUnderCursor()
|
||||
if not winid then
|
||||
vim.lsp.buf.hover()
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Peek Folded Lines")
|
||||
|
||||
(mkKeymap "n" "<leader>lq" "<CMD>LspStop<Enter>" "Stop LSP")
|
||||
(mkKeymap "n" "<leader>li" "<cmd>LspInfo<cr>" "LSP Info")
|
||||
(mkKeymap "n" "<leader>ls" "<CMD>LspStart<Enter>" "Start LSP")
|
||||
(mkKeymap "n" "<leader>lR" "<CMD>LspRestart<Enter>" "Restart LSP")
|
||||
|
||||
(mkKeymap "n" "<C-s-k>" "<cmd>:lua vim.lsp.buf.signature_help()<cr>" "Signature Help")
|
||||
(mkKeymap "n" "<leader>lD" "<cmd>:lua Snacks.picker.lsp_definitions()<cr>" "Definitions list")
|
||||
(mkKeymap "n" "<leader>ls" "<cmd>:lua Snacks.picker.lsp_symbols()<cr>" "Definitions list")
|
||||
|
||||
(mkKeymap "n" "<leader>lf" "<cmd>:lua require('conform').format()<cr>" "Format file")
|
||||
(mkKeymap "x" "<leader>lf" "<cmd>:lua require('conform').format()<cr>" "Format File")
|
||||
(mkKeymap "v" "<leader>lf" "<cmd>:lua require('conform').format()<cr>" "Format File")
|
||||
|
||||
(mkKeymap "n" "[d" "<cmd>:lua vim.diagnostic.goto_prev()<cr>" "Previous Diagnostic")
|
||||
(mkKeymap "n" "]d" "<cmd>:lua vim.diagnostic.goto_next()<cr>" "Next Diagnostic")
|
||||
(mkKeymap "n" "<leader>lL" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
if vim.g.diagnostics_visible == nil or vim.g.diagnostics_visible then
|
||||
vim.g.diagnostics_visible = false
|
||||
vim.diagnostic.disable()
|
||||
else
|
||||
vim.g.diagnostics_visible = true
|
||||
vim.diagnostic.enable()
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Toggle Diagnostics")
|
||||
(mkKeymap "n" "<leader>ll" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
if vim.diagnostic.config().virtual_text == false then
|
||||
vim.diagnostic.config({ virtual_text = { source = "always" } })
|
||||
else
|
||||
vim.diagnostic.config({ virtual_text = false })
|
||||
end
|
||||
end
|
||||
''
|
||||
) "Toggle Virtual Text")
|
||||
];
|
||||
}
|
||||
54
plugins/lualine/default.nix
Normal file
54
plugins/lualine/default.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
extraConfigLua = # lua
|
||||
''
|
||||
vim.cmd([[hi StatusLine guibg=NONE ctermbg=NONE]])
|
||||
'';
|
||||
|
||||
plugins.lualine = {
|
||||
enable = true;
|
||||
|
||||
settings =
|
||||
let
|
||||
separators = {
|
||||
left = "";
|
||||
right = "";
|
||||
};
|
||||
transparent = {
|
||||
a.fg = "none";
|
||||
c.bg = "none";
|
||||
};
|
||||
in
|
||||
{
|
||||
options = {
|
||||
theme = {
|
||||
normal = transparent;
|
||||
insert = transparent;
|
||||
visual = transparent;
|
||||
replace = transparent;
|
||||
command = transparent;
|
||||
inactive = transparent;
|
||||
};
|
||||
always_divide_middle = true;
|
||||
globalstatus = true;
|
||||
icons_enable = true;
|
||||
component_separators = separators;
|
||||
section_separatros = separators;
|
||||
disabled_filetypes = [
|
||||
"Outline"
|
||||
"neo-tree"
|
||||
"dashboard"
|
||||
"snacks_dashboard"
|
||||
"snacks_terminal"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
imports =
|
||||
with builtins;
|
||||
with lib;
|
||||
map (fn: ./${fn}) (
|
||||
filter (fn: (fn != "default.nix" && !hasSuffix ".md" "${fn}")) (attrNames (readDir ./.))
|
||||
);
|
||||
}
|
||||
150
plugins/lualine/sections.nix
Normal file
150
plugins/lualine/sections.nix
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (config.myvim) icons;
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
in
|
||||
{
|
||||
plugins.lualine.settings.sections = {
|
||||
lualine_a = [
|
||||
{
|
||||
__unkeyed = "fileformat";
|
||||
cond = null;
|
||||
padding = {
|
||||
left = 1;
|
||||
right = 1;
|
||||
};
|
||||
color = "SLGreen";
|
||||
}
|
||||
];
|
||||
lualine_b = [ "encoding" ];
|
||||
lualine_c = [
|
||||
{
|
||||
__unkeyed = "b:gitsigns_head";
|
||||
icon = "${icons.git.Branch}";
|
||||
color.gui = "bold";
|
||||
}
|
||||
{
|
||||
__unkeyed = "diff";
|
||||
source =
|
||||
# lua
|
||||
mkRaw ''
|
||||
(function()
|
||||
local gitsigns = vim.b.gitsigns_status_dict
|
||||
if vim.b.gitsigns_status_dict then
|
||||
return {
|
||||
added = gitsigns.added,
|
||||
modified = gitsigns.changed,
|
||||
removed = gitsigns.removed,
|
||||
}
|
||||
end
|
||||
end)
|
||||
'';
|
||||
symbols = {
|
||||
added = mkRaw ''"${icons.git.LineAdded}" .. " " '';
|
||||
modified = mkRaw ''"${icons.git.LineModified}".. " "'';
|
||||
removed = mkRaw ''"${icons.git.LineRemoved}".. " "'';
|
||||
};
|
||||
}
|
||||
{
|
||||
__unkeyed = "diagnostics";
|
||||
sources = {
|
||||
__unkeyed = "nvim_diagnostic";
|
||||
};
|
||||
symbols = {
|
||||
error = mkRaw ''"${icons.diagnostics.BoldError}" .. " "'';
|
||||
warn = mkRaw ''"${icons.diagnostics.BoldWarning}" .. " "'';
|
||||
info = mkRaw ''"${icons.diagnostics.BoldInformation}" .. " "'';
|
||||
hint = mkRaw ''"${icons.diagnostics.BoldHint}" .. " "'';
|
||||
};
|
||||
}
|
||||
];
|
||||
lualine_x = [
|
||||
{
|
||||
color = {
|
||||
fg = "#ff9e64";
|
||||
};
|
||||
cond = mkRaw ''
|
||||
function()
|
||||
local ok, noice = pcall(require, "noice")
|
||||
if not ok then
|
||||
return false
|
||||
end
|
||||
return noice.api.status.mode.has()
|
||||
end
|
||||
'';
|
||||
__unkeyed =
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local ok, noice = pcall(require, "noice")
|
||||
if not ok then
|
||||
return false
|
||||
end
|
||||
return noice.api.status.mode.get()
|
||||
end
|
||||
'';
|
||||
}
|
||||
{
|
||||
__unkeyed =
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local clients = vim.lsp.get_clients()
|
||||
local lsp_names = {}
|
||||
if next(clients) == nil then
|
||||
return "Ls Inactive"
|
||||
end
|
||||
for _, client in ipairs(clients) do
|
||||
if client.name ~= "copilot" and client.name ~= "null-ls" and client.name ~= "typos_lsp" then
|
||||
local name = client.name:gsub("%[%d+%]", "") -- makes otter-ls[number] -> otter-ls
|
||||
table.insert(lsp_names, name)
|
||||
end
|
||||
end
|
||||
|
||||
local formatters = require("conform").list_formatters()
|
||||
local con_names = {}
|
||||
|
||||
for _, formatter in ipairs(formatters) do
|
||||
local name = formatter.name
|
||||
if formatter.available and (name ~= "squeeze_blanks" and name ~= "trim_whitespace" and name ~= "trim_newlines") then
|
||||
table.insert(con_names, formatter.name)
|
||||
end
|
||||
end
|
||||
local names = {}
|
||||
vim.list_extend(names, lsp_names)
|
||||
vim.list_extend(names, con_names)
|
||||
return "[" .. table.concat(vim.fn.uniq(names), ", ") .. "]"
|
||||
end
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
__unkeyed = "filetype";
|
||||
cond = null;
|
||||
padding = {
|
||||
left = 1;
|
||||
right = 1;
|
||||
};
|
||||
}
|
||||
];
|
||||
lualine_y = [ "progress" ];
|
||||
lualine_z = [
|
||||
"location"
|
||||
{
|
||||
__unkeyed =
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
local lsp_clients = vim.lsp.get_clients()
|
||||
for _, client in ipairs(lsp_clients) do
|
||||
if client.name == "copilot" then
|
||||
return "%#SLGreen#" .. "${icons.kind.Copilot}"
|
||||
end
|
||||
end
|
||||
return ""
|
||||
end
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
60
plugins/neotree.nix
Normal file
60
plugins/neotree.nix
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
{ config, ... }:
|
||||
let
|
||||
inherit (config.myvim) icons;
|
||||
inherit (config.myvim.mkKey) mkKeymap wKeyObj;
|
||||
in
|
||||
{
|
||||
plugins.neo-tree = {
|
||||
enable = true;
|
||||
|
||||
sources = [
|
||||
"filesystem"
|
||||
"buffers"
|
||||
"git_status"
|
||||
"document_symbols"
|
||||
];
|
||||
addBlankLineAtTop = false;
|
||||
|
||||
filesystem = {
|
||||
bindToCwd = false;
|
||||
followCurrentFile = {
|
||||
enabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
defaultComponentConfigs = {
|
||||
indent = {
|
||||
withExpanders = true;
|
||||
expanderCollapsed = "";
|
||||
expanderExpanded = "";
|
||||
expanderHighlight = "NeoTreeExpander";
|
||||
};
|
||||
|
||||
gitStatus = with icons.git; {
|
||||
symbols = {
|
||||
added = "${Added}";
|
||||
conflict = "${Conflict}";
|
||||
deleted = "${Deleted}";
|
||||
ignored = "${Ignored}";
|
||||
modified = "${Modified}";
|
||||
renamed = "${Renamed}";
|
||||
staged = "${Staged}";
|
||||
unstaged = "${Unstaged}";
|
||||
untracked = "${Untracked}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>e"
|
||||
""
|
||||
"Neotree"
|
||||
])
|
||||
];
|
||||
|
||||
keymaps = [
|
||||
(mkKeymap "n" "<leader>e" "<cmd>Neotree toggle<cr>" "Open/Close Neotree")
|
||||
];
|
||||
}
|
||||
63
plugins/noice.nix
Normal file
63
plugins/noice.nix
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
plugins.noice = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
presets.bottom_search = true;
|
||||
|
||||
routes = [
|
||||
# FIXME: <https://github.com/folke/noice.nvim/issues/1097>
|
||||
{
|
||||
filter = {
|
||||
event = "msg_show";
|
||||
kind = [ "shell_out" ];
|
||||
};
|
||||
view = "notify";
|
||||
opts = {
|
||||
level = "info";
|
||||
title = "stdout";
|
||||
};
|
||||
}
|
||||
{
|
||||
filter = {
|
||||
event = "msg_show";
|
||||
kind = [ "shell_err" ];
|
||||
};
|
||||
view = "notify";
|
||||
opts = {
|
||||
level = "error";
|
||||
title = "stderr";
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
views = {
|
||||
cmdline_popup = {
|
||||
position = {
|
||||
row = -2;
|
||||
col = "50%";
|
||||
};
|
||||
};
|
||||
cmdline_popupmenu = {
|
||||
position = {
|
||||
row = -5;
|
||||
col = "50%";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
lsp = {
|
||||
override = {
|
||||
"vim.lsp.util.convert_input_to_markdown_lines" = true;
|
||||
"vim.lsp.util.stylize_markdown" = true;
|
||||
"cmp.entry.get_documentation" = true;
|
||||
};
|
||||
|
||||
hover.enabled = false;
|
||||
message.enabled = false;
|
||||
signature.enabled = false;
|
||||
progress.eabled = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
323
plugins/snacks/default.nix
Normal file
323
plugins/snacks/default.nix
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
{ lib, pkgs, ... }:
|
||||
let
|
||||
inherit (lib.nixvim) utils mkRaw;
|
||||
in
|
||||
{
|
||||
plugins = {
|
||||
neoscroll.enable = true;
|
||||
todo-comments.enable = true;
|
||||
|
||||
snacks = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
bigfile.enabled = true;
|
||||
dim.enabled = true;
|
||||
scroll.enabled = false;
|
||||
lazygit.config.os.edit =
|
||||
# lua
|
||||
mkRaw ''
|
||||
'[ -z "\"$NVIM\"" ] && (nvim -- {{filename}}) || (nvim --server "\"$NVIM\"" --remote-send "\"q\"" && nvim --server "\"$NVIM\"" --remote {{filename}})'
|
||||
'';
|
||||
quickfile.enbled = true;
|
||||
indent.enabled = true;
|
||||
words.enabled = true;
|
||||
statuscolumn.enabled = true;
|
||||
|
||||
dashboard = {
|
||||
enabled = true;
|
||||
sections =
|
||||
# lua
|
||||
mkRaw ''
|
||||
{
|
||||
{ section = "header" },
|
||||
{
|
||||
pane = 2,
|
||||
section = "terminal",
|
||||
cmd = "colorscript -e square",
|
||||
height = 5,
|
||||
padding = 1,
|
||||
},
|
||||
{ section = "keys", gap = 1, padding = 1 },
|
||||
{
|
||||
pane = 2,
|
||||
icon = " ",
|
||||
desc = "Browse Repo",
|
||||
padding = 1,
|
||||
key = "b",
|
||||
action = function()
|
||||
Snacks.gitbrowse()
|
||||
end,
|
||||
},
|
||||
function()
|
||||
local in_git = Snacks.git.get_root() ~= nil
|
||||
local cmds = {
|
||||
{
|
||||
title = "Notifications",
|
||||
cmd = "gh notify -s -a -n5",
|
||||
action = function()
|
||||
vim.ui.open("https://github.com/notifications")
|
||||
end,
|
||||
key = "n",
|
||||
icon = " ",
|
||||
height = 5,
|
||||
enabled = true,
|
||||
},
|
||||
{
|
||||
title = "Open Issues",
|
||||
cmd = "gh issue list -L 3",
|
||||
key = "i",
|
||||
action = function()
|
||||
vim.fn.jobstart("gh issue list --web", { detach = true })
|
||||
end,
|
||||
icon = " ",
|
||||
height = 7,
|
||||
},
|
||||
{
|
||||
icon = " ",
|
||||
title = "Open PRs",
|
||||
cmd = "gh pr list -L 3",
|
||||
key = "P",
|
||||
action = function()
|
||||
vim.fn.jobstart("gh pr list --web", { detach = true })
|
||||
end,
|
||||
height = 7,
|
||||
},
|
||||
{
|
||||
icon = " ",
|
||||
title = "Git Status",
|
||||
cmd = "git --no-pager diff --stat -B -M -C",
|
||||
height = 10,
|
||||
},
|
||||
}
|
||||
return vim.tbl_map(function(cmd)
|
||||
return vim.tbl_extend("force", {
|
||||
pane = 2,
|
||||
section = "terminal",
|
||||
enabled = in_git,
|
||||
padding = 1,
|
||||
ttl = 5 * 60,
|
||||
indent = 3,
|
||||
}, cmd)
|
||||
end, cmds)
|
||||
end,
|
||||
-- { section = "startup" },
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
picker =
|
||||
let
|
||||
keys = {
|
||||
"<c-d>" = (utils.listToUnkeyedAttrs [ "preview_scroll_down" ]) // {
|
||||
mode = "n";
|
||||
};
|
||||
"<c-u>" = (utils.listToUnkeyedAttrs [ "preview_scroll_up" ]) // {
|
||||
mode = "n";
|
||||
};
|
||||
"-" = (utils.listToUnkeyedAttrs [ "edit_split" ]) // {
|
||||
mode = "n";
|
||||
};
|
||||
"|" = (utils.listToUnkeyedAttrs [ "edit_vsplit" ]) // {
|
||||
mode = "n";
|
||||
};
|
||||
"<cr>" =
|
||||
# lua
|
||||
mkRaw ''
|
||||
{ { "pick_win", "jump" } }
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
enabled = true;
|
||||
actions.pick_win =
|
||||
# lua FIXME: on non overridden theme the picker window opens buffer with bg
|
||||
mkRaw ''
|
||||
function(picker)
|
||||
if not picker.layout.split then
|
||||
picker.layout:hide()
|
||||
end
|
||||
local win = Snacks.picker.util.pick_win {
|
||||
main = picker.main,
|
||||
float = false,
|
||||
filter = function(_, buf)
|
||||
local ft = vim.bo[buf].ft
|
||||
return ft == 'snacks_dashboard' or not ft:find '^snacks'
|
||||
end,
|
||||
}
|
||||
if not win then
|
||||
if not picker.layout.split then
|
||||
picker.layout:unhide()
|
||||
end
|
||||
return true
|
||||
end
|
||||
picker.main = win
|
||||
if not picker.layout.split then
|
||||
vim.defer_fn(function()
|
||||
if not picker.closed then
|
||||
picker.layout:unhide()
|
||||
end
|
||||
end, 100)
|
||||
end
|
||||
end
|
||||
'';
|
||||
sources.explorer =
|
||||
# lua
|
||||
mkRaw ''
|
||||
{
|
||||
on_show = function(picker)
|
||||
local show = false
|
||||
local gap = 1
|
||||
local clamp_width = function(value)
|
||||
return math.max(20, math.min(100, value))
|
||||
end
|
||||
--
|
||||
local position = picker.resolved_layout.layout.position
|
||||
local rel = picker.layout.root
|
||||
local update = function(win) ---@param win snacks.win
|
||||
local border = win:border_size().left + win:border_size().right
|
||||
win.opts.row = vim.api.nvim_win_get_position(rel.win)[1]
|
||||
win.opts.height = 0.8
|
||||
if position == 'left' then
|
||||
win.opts.col = vim.api.nvim_win_get_width(rel.win) + gap
|
||||
win.opts.width = clamp_width(vim.o.columns - border - win.opts.col)
|
||||
end
|
||||
if position == 'right' then
|
||||
win.opts.col = -vim.api.nvim_win_get_width(rel.win) - gap
|
||||
win.opts.width = clamp_width(vim.o.columns - border + win.opts.col)
|
||||
end
|
||||
win:update()
|
||||
end
|
||||
local preview_win = Snacks.win.new {
|
||||
relative = 'editor',
|
||||
external = false,
|
||||
focusable = false,
|
||||
border = 'rounded',
|
||||
backdrop = false,
|
||||
show = show,
|
||||
bo = {
|
||||
filetype = 'snacks_float_preview',
|
||||
buftype = 'nofile',
|
||||
buflisted = false,
|
||||
swapfile = false,
|
||||
undofile = false,
|
||||
},
|
||||
on_win = function(win)
|
||||
update(win)
|
||||
picker:show_preview()
|
||||
end,
|
||||
}
|
||||
rel:on('WinLeave', function()
|
||||
vim.schedule(function()
|
||||
if not picker:is_focused() then
|
||||
picker.preview.win:close()
|
||||
end
|
||||
end)
|
||||
end)
|
||||
rel:on('WinResized', function()
|
||||
update(preview_win)
|
||||
end)
|
||||
picker.preview.win = preview_win
|
||||
picker.main = preview_win.win
|
||||
end,
|
||||
on_close = function(picker)
|
||||
picker.preview.win:close()
|
||||
end,
|
||||
layout = {
|
||||
preset = 'sidebar',
|
||||
layout = {
|
||||
backdrop = false,
|
||||
width = 40, -- Pfff.. 40. I have 60!
|
||||
min_width = 40,
|
||||
height = 0,
|
||||
position = 'right',
|
||||
border = 'none',
|
||||
box = 'vertical',
|
||||
{ win = 'list', border = 'none' },
|
||||
{ win = 'preview', title = '{preview}', height = 0.4, border = 'top' },
|
||||
},
|
||||
preview = false, ---@diagnostic disable-line
|
||||
},
|
||||
actions = {
|
||||
toggle_preview = function(picker) --[[Override]]
|
||||
picker.preview.win:toggle()
|
||||
end,
|
||||
},
|
||||
}
|
||||
'';
|
||||
win = {
|
||||
input.keys = keys;
|
||||
list.keys = keys;
|
||||
};
|
||||
};
|
||||
|
||||
image = {
|
||||
enabled = true;
|
||||
border = "none";
|
||||
doc.inline = false;
|
||||
};
|
||||
|
||||
notifier = {
|
||||
enabled = true;
|
||||
style = "minimal";
|
||||
top_down = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
gh
|
||||
imagemagick
|
||||
ghostscript_headless
|
||||
tectonic
|
||||
mermaid-cli
|
||||
dwt1-shell-color-scripts
|
||||
]; # for image support
|
||||
|
||||
autoCmd = [
|
||||
{
|
||||
desc = "Pre init Function";
|
||||
event = [ "VimEnter" ];
|
||||
callback =
|
||||
# lua
|
||||
mkRaw ''
|
||||
-- Taken from https://github.com/folke/snacks.nvim?tab=readme-ov-file#-usage
|
||||
function()
|
||||
-- Setup some globals for debugging (lazy-loaded)
|
||||
_G.dd = function (...)
|
||||
Snacks.debug.inspect
|
||||
(...)
|
||||
end
|
||||
_G.bt = function()
|
||||
Snacks.debug.backtrace()
|
||||
end
|
||||
vim.print = _G.dd -- Override print to use snacks for `:=` command
|
||||
|
||||
-- Create some toggle mappings
|
||||
Snacks.toggle.diagnostics():map("<leader>ud")
|
||||
Snacks.toggle.line_number():map("<leader>ul")
|
||||
Snacks.toggle.inlay_hints():map("<leader>uh")
|
||||
Snacks.toggle.treesitter():map("<leader>uT")
|
||||
Snacks.toggle.option("spell",
|
||||
{ name = "Spelling" }):map("<leader>us")
|
||||
Snacks.toggle.option("wrap",
|
||||
{ name = "Wrap" }):map("<leader>uw")
|
||||
Snacks.toggle.option("relativenumber",
|
||||
{ name = "Relative Number" }):map("<leader>uL")
|
||||
Snacks.toggle.option("conceallevel",
|
||||
{ off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map("<leader>uc")
|
||||
Snacks.toggle.option("background",
|
||||
{ off = "light", on = "dark", name = "Dark Background" }):map("<leader>ub")
|
||||
end
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
imports =
|
||||
with builtins;
|
||||
with lib;
|
||||
map (fn: ./${fn}) (
|
||||
filter (fn: (fn != "default.nix" && !hasSuffix ".md" "${fn}")) (attrNames (readDir ./.))
|
||||
);
|
||||
}
|
||||
120
plugins/snacks/mappings.nix
Normal file
120
plugins/snacks/mappings.nix
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (lib.nixvim) mkRaw;
|
||||
inherit (config.myvim.mkKey) mkKeymap wKeyObj;
|
||||
in
|
||||
{
|
||||
wKeyList = [
|
||||
(wKeyObj [
|
||||
"<leader>."
|
||||
""
|
||||
"Scratch Buffer"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>:"
|
||||
""
|
||||
""
|
||||
true
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>s"
|
||||
""
|
||||
"search"
|
||||
])
|
||||
(wKeyObj [
|
||||
"<leader>f"
|
||||
""
|
||||
"file/find"
|
||||
])
|
||||
];
|
||||
|
||||
keymaps = [
|
||||
(mkKeymap "n" "<leader>.." "<cmd>:lua Snacks.scratch()<cr>" "Toggle Scratch Buffer")
|
||||
(mkKeymap "n" "<leader>.s" "<cmd>:lua Snacks.scratch.select()<cr>" "Select Scratch Buffer")
|
||||
(mkKeymap "n" "<leader>sn" "<cmd>:lua Snacks.notifier.show_history()<cr>" "Notification History")
|
||||
(mkKeymap "n" "<leader>.r" "<cmd>:lua Snacks.rename.rename_file()<cr>" "Rename file/variable +lsp")
|
||||
(mkKeymap "n" "<leader>gB" "<cmd>:lua Snacks.gitbrowse()<cr>" "Git Browse")
|
||||
(mkKeymap "n" "<leader>gf" "<cmd>:lua Snacks.lazygit.log_file()<cr>" "Lazygit Current File History")
|
||||
(mkKeymap "n" "<leader>gB" "<cmd>:lua Snacks.gitbrowse()<cr>" "Git Browse")
|
||||
(mkKeymap "n" "<leader>gf" "<cmd>:lua Snacks.lazygit.log_file()<cr>" "Lazygit Current File History")
|
||||
(mkKeymap "n" "<leader>gg" "<cmd>:lua Snacks.lazygit()<cr>" "Lazygit")
|
||||
(mkKeymap "n" "<leader>gl" "<cmd>:lua Snacks.lazygit.log()<cr>" "Lazygit Log (cwd)")
|
||||
(mkKeymap "n" "<leader>gL" "<cmd>:lua Snacks.picker.git_log()<cr>" "Git Log (cwd)")
|
||||
(mkKeymap "n" "<leader>un" "<cmd>:lua Snacks.notifier.hide()<cr>" "Dismiss All Notifications")
|
||||
|
||||
(mkKeymap "n" "<leader>sb" "<cmd>:lua Snacks.picker.lines() <cr>" "Buffer Lines")
|
||||
(mkKeymap "n" "<leader>sB" "<cmd>:lua Snacks.picker.grep_buffers() <cr>" "Grep Open Buffers")
|
||||
(mkKeymap "n" "<leader>sg" "<cmd>:lua Snacks.picker.grep() <cr>" "Grep")
|
||||
(mkKeymap "n" "<leader>sw" "<cmd>:lua Snacks.picker.grep_word() <cr>" "Visual selection or word")
|
||||
(mkKeymap "x" "<leader>sw" "<cmd>:lua Snacks.picker.grep_word() <cr>" "Visual selection or word")
|
||||
(mkKeymap "n" ''<leader>s"'' "<cmd>:lua Snacks.picker.registers() <cr>" "Registers")
|
||||
(mkKeymap "n" "<leader>sa" "<cmd>:lua Snacks.picker.autocmds() <cr>" "Autocmds")
|
||||
(mkKeymap "n" "<leader>sb" "<cmd>:lua Snacks.picker.lines() <cr>" "Buffer Lines")
|
||||
(mkKeymap "n" "<leader>sc" "<cmd>:lua Snacks.picker.command_history() <cr>" "Command History")
|
||||
(mkKeymap "n" "<leader>sC" "<cmd>:lua Snacks.picker.commands() <cr>" "Commands")
|
||||
(mkKeymap "n" "<leader>sd" "<cmd>:lua Snacks.picker.diagnostics() <cr>" "Diagnostics")
|
||||
(mkKeymap "n" "<leader>sD" "<cmd>:lua Snacks.picker.diagnostics_buffer() <cr>" "Buffer Diagnostics")
|
||||
(mkKeymap "n" "<leader>sH" "<cmd>:lua Snacks.picker.highlights() <cr>" "Highlights")
|
||||
(mkKeymap "n" "<leader>si" "<cmd>:lua Snacks.picker.icons() <cr>" "Icons")
|
||||
(mkKeymap "n" "<leader>sj" "<cmd>:lua Snacks.picker.jumps() <cr>" "Jumps")
|
||||
(mkKeymap "n" "<leader>sl" "<cmd>:lua Snacks.picker.loclist() <cr>" "Location List")
|
||||
(mkKeymap "n" "<leader>sm" "<cmd>:lua Snacks.picker.marks() <cr>" "Marks")
|
||||
(mkKeymap "n" "<leader>sM" "<cmd>:lua Snacks.picker.man() <cr>" "Man Pages")
|
||||
(mkKeymap "n" "<leader>sq" "<cmd>:lua Snacks.picker.qflist() <cr>" "Quickfix List")
|
||||
(mkKeymap "n" "<leader>sR" "<cmd>:lua Snacks.picker.resume() <cr>" "Resume")
|
||||
(mkKeymap "n" "<leader>su" "<cmd>:lua Snacks.picker.undo() <cr>" "Undo History")
|
||||
|
||||
(mkKeymap "n" "gd" "<cmd>:lua Snacks.picker.lsp_definitions() <cr>" "Goto Definition")
|
||||
(mkKeymap "n" "gD" "<cmd>:lua Snacks.picker.lsp_declarations() <cr>" "Goto Declaration")
|
||||
(mkKeymap "n" "gr" "<cmd>:lua Snacks.picker.lsp_references() <cr>" "References")
|
||||
(mkKeymap "n" "gI" "<cmd>:lua Snacks.picker.lsp_implementations() <cr>" "Goto Implementation")
|
||||
(mkKeymap "n" "gy" "<cmd>:lua Snacks.picker.lsp_type_definitions() <cr>" "Goto T[y]pe Definition")
|
||||
(mkKeymap "n" "<leader>ss" "<cmd>:lua Snacks.picker.lsp_symbols() <cr>" "LSP Symbols")
|
||||
(mkKeymap "n" "<leader>sS" "<cmd>:lua Snacks.picker.lsp_workspace_symbols() <cr>"
|
||||
"LSP Workspace Symbols"
|
||||
)
|
||||
|
||||
# Telescope replacement
|
||||
(mkKeymap "n" "<leader>sP" "<cmd>:lua Snacks.picker()<cr>" "Pickers")
|
||||
(mkKeymap "n" "<leader>ss" "<cmd>:lua Snacks.picker.smart()<cr>" "Smart")
|
||||
(mkKeymap "n" "<leader>st" "<cmd>:lua Snacks.picker.todo_comments({layout = 'ivy'})<cr>" "Todo")
|
||||
(mkKeymap "n" "<leader>sT"
|
||||
''<cmd>:lua Snacks.picker.todo_comments({keywords = {"TODO", "FIX", "FIXME"}, layout = 'ivy'})<cr>''
|
||||
"Todo"
|
||||
)
|
||||
(mkKeymap "n" "<leader>s:" ''<cmd>:lua Snacks.picker.command_history({ layout = 'ivy'})<cr>''
|
||||
"Command History"
|
||||
)
|
||||
(mkKeymap "n" "<leader>s," "<cmd>:lua Snacks.picker.buffers({layout = 'ivy'})<cr>" "Buffers")
|
||||
(mkKeymap "n" "<leader>sh" ''<cmd>:lua Snacks.picker.help()<cr>'' "Help Pages")
|
||||
(mkKeymap "n" "<leader>sk" ''<cmd>:lua Snacks.picker.keymaps({layout = 'vscode'})<cr>'' "Keymaps")
|
||||
|
||||
(mkKeymap "n" "<leader>su" (
|
||||
# lua
|
||||
mkRaw ''
|
||||
function()
|
||||
Snacks.picker.undo({
|
||||
win = {
|
||||
input = {
|
||||
keys = {
|
||||
["y"] = { "yank_add", mode = "n" },
|
||||
["Y"] = { "yank_del", mode = "n" },
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
''
|
||||
) "Undo")
|
||||
|
||||
(mkKeymap "n" "<leader>ff" "<cmd>:lua Snacks.picker.files()<cr>" "Find Files")
|
||||
(mkKeymap "n" "<leader>fF" "<cmd>:lua Snacks.picker.smart()<cr>" "Smart")
|
||||
(mkKeymap "n" "<leader>f/" "<cmd>:lua Snacks.picker.grep()<cr>" "Grep")
|
||||
(mkKeymap "n" "<leader>f?"
|
||||
"<cmd>:lua Snacks.picker.grep({layout = 'ivy', args = { '--vimgrep', '--smart-case', '--fixed-strings' } })<cr>"
|
||||
"Grep"
|
||||
)
|
||||
(mkKeymap "n" "<leader>fr" "<cmd>:lua Snacks.picker.recent()<cr>" "Recent")
|
||||
(mkKeymap "n" "<leader>fp" "<cmd>:lua Snacks.picker.projects()<cr>" "Projects")
|
||||
];
|
||||
}
|
||||
39
plugins/treesitter.nix
Normal file
39
plugins/treesitter.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
plugins = {
|
||||
mini-ai.enable = true;
|
||||
sleuth.enable = true;
|
||||
|
||||
treesitter = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
highlight = {
|
||||
enable = true;
|
||||
|
||||
disable = [
|
||||
"latex"
|
||||
"markdown"
|
||||
];
|
||||
};
|
||||
|
||||
auto_install = true;
|
||||
indent_enable = true;
|
||||
folding = true;
|
||||
autoLoad = true;
|
||||
incremental_selection.enable = true;
|
||||
nixvimInjections = true;
|
||||
grammarPackages = pkgs.vimPlugins.nvim-treesitter.allGrammars;
|
||||
};
|
||||
};
|
||||
|
||||
treesitter-context = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
max_lines = 4;
|
||||
min_window_height = 40;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
64
plugins/ux.nix
Normal file
64
plugins/ux.nix
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
{ pkgs, config, ... }:
|
||||
{
|
||||
extraPlugins = [
|
||||
pkgs.vimPlugins.windows-nvim
|
||||
];
|
||||
|
||||
extraConfigLua = ''
|
||||
vim.o.winwidth = 10
|
||||
vim.o.winminwidth = 10
|
||||
vim.o.equalalways = false
|
||||
require('windows').setup({
|
||||
ignore = {
|
||||
filetype = { "snacks_picker_list", "snacks_layout_box" },
|
||||
},
|
||||
})
|
||||
'';
|
||||
|
||||
plugins = {
|
||||
colorizer = {
|
||||
enable = true;
|
||||
settings = {
|
||||
filetypes = {
|
||||
__unkeyed = "*";
|
||||
};
|
||||
user_default_options = {
|
||||
names = true;
|
||||
RRGGBBAA = true;
|
||||
AARRGGBB = true;
|
||||
rgb_fn = true;
|
||||
hsl_fn = true;
|
||||
css = true;
|
||||
css_fn = true;
|
||||
tailwind = true;
|
||||
mode = "virtualtext";
|
||||
virtualtext = "■";
|
||||
always_update = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dressing = {
|
||||
enable = true;
|
||||
settings.input.mappings.n = {
|
||||
"q" = "Close";
|
||||
"k" = "HistoryPrev";
|
||||
"j" = "HistoryNext";
|
||||
};
|
||||
};
|
||||
|
||||
fidget = {
|
||||
enable = true;
|
||||
settings = {
|
||||
progress.display.progress_icon = [ "moon" ];
|
||||
notification.window = {
|
||||
relative = "editor";
|
||||
winblend = 0;
|
||||
border = "none";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
lastplace.enable = true;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue