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
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 = "";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
13
plugins/common/illuminate.nix
Normal file
13
plugins/common/illuminate.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
plugins.illuminate = {
|
||||
enable = true;
|
||||
underCursor = false;
|
||||
filetypesDenylist = [
|
||||
"Outline"
|
||||
"TelescopePrompt"
|
||||
"alpha"
|
||||
"harpoon"
|
||||
"reason"
|
||||
];
|
||||
};
|
||||
}
|
||||
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")
|
||||
|
||||
];
|
||||
}
|
||||
7
plugins/lang/csv.nix
Normal file
7
plugins/lang/csv.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
plugins = {
|
||||
csvview = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
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