Init:start-nix

This commit is contained in:
dichgrem
2025-07-22 12:18:15 +08:00
parent 7ce7214a74
commit e57cdd246c
178 changed files with 22667 additions and 1 deletions

View File

@@ -0,0 +1,10 @@
_: {
programs.nixvim = {
plugins.nvim-autopairs = {
enable = true;
};
extraConfigLua = ''
require('cmp').event:on('confirm_done', require('nvim-autopairs.completion.cmp').on_confirm_done())
'';
};
}

View File

@@ -0,0 +1,175 @@
_: {
programs.nixvim = {
plugins = {
bufferline = {
enable = true;
settings = {
highlights = {
background = {
bg = "#252434";
fg = "#605f6f";
};
buffer_selected = {
bg = "#1E1D2D";
fg = "#D9E0EE";
};
buffer_visible = {
fg = "#605f6f";
bg = "#252434";
};
close_button = {
fg = "#605f6f";
bg = "#252434";
};
close_button_visible = {
fg = "#605f6f";
bg = "#252434";
};
duplicate = {
fg = "NONE";
bg = "#252434";
};
duplicate_selected = {
fg = "#F38BA8";
bg = "#1E1D2D";
};
duplicate_visible = {
fg = "#89B4FA";
bg = "#252434";
};
error = {
fg = "#605f6f";
bg = "#252434";
};
error_diagnostic = {
fg = "#605f6f";
bg = "#252434";
};
fill = {
bg = "#1E1D2D";
fg = "#605f6f";
};
indicator_selected = {
bg = "#1E1D2D";
fg = "#1E1D2D";
};
modified = {
fg = "#F38BA8";
bg = "#252434";
};
modified_visible = {
fg = "#F38BA8";
bg = "#252434";
};
modified_selected = {
fg = "#ABE9B3";
bg = "#1E1D2D";
};
separator = {
bg = "#252434";
fg = "#252434";
};
separator_visible = {
bg = "#252434";
fg = "#252434";
};
separator_selected = {
bg = "#252434";
fg = "#252434";
};
};
options.offsets = [
{
filetype = "neo-tree";
text = "Neo-tree";
highlight = "Directory";
text_align = "left";
}
];
};
};
};
keymaps = [
{
mode = "n";
key = "<C-Tab>";
action = "<cmd>BufferLineCycleNext<cr>";
options = {
desc = "Cycle to next buffer";
};
}
{
mode = "n";
key = "<C-S-Tab>";
action = "<cmd>BufferLineCyclePrev<cr>";
options = {
desc = "Cycle to previous buffer";
};
}
{
mode = "n";
key = "<C-x>";
action = "<cmd>:bp | bd #<cr>";
options = {
desc = "Delete buffer";
};
}
{
mode = "n";
key = "<leader>br";
action = "<cmd>BufferLineCloseRight<cr>";
options = {
desc = "Delete buffers to the right";
};
}
{
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";
};
}
];
};
}

View File

@@ -0,0 +1,44 @@
{pkgs, ...}: {
programs.nixvim = {
extraPackages = with pkgs; [
stylua
];
plugins.conform-nvim = {
enable = true;
settings = {
notify_on_error = false;
format_on_save = ''
function(bufnr)
-- Disable "format_on_save lsp_fallback" for lanuages that don't
-- have a well standardized coding style. You can add additional
-- lanuages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
return {
timeout_ms = 500,
lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype]
}
end
'';
formatters_by_ft = {
lua = ["stylua"];
};
};
};
keymaps = [
{
mode = "";
key = "<leader>f";
action.__raw = ''
function()
require('conform').format { async = true, lsp_fallback = true }
end
'';
options = {
desc = "[F]ormat buffer";
};
}
];
};
}

View File

@@ -0,0 +1,7 @@
_: {
programs.nixvim = {
plugins.edgy = {
enable = true;
};
};
}

View File

@@ -0,0 +1,7 @@
_: {
programs.nixvim = {
plugins.indent-blankline = {
enable = true;
};
};
}

View File

@@ -0,0 +1,34 @@
_: {
programs.nixvim = {
plugins.lint = {
autoCmd = {
callback.__raw = ''
function()
require('lint').try_lint()
end
'';
group = "lint";
event = [
"BufEnter"
"BufWritePost"
"InsertLeave"
];
};
enable = true;
lintersByFt = {
nix = ["nix"];
markdown = [
"markdownlint"
];
};
};
autoGroups = {
lint = {
clear = true;
};
};
};
}

125
home/tui/nixvim/plugins/lsp.nix Executable file
View File

@@ -0,0 +1,125 @@
_: {
programs.nixvim = {
autoGroups = {
"kickstart-lsp-attach" = {
clear = true;
};
};
plugins = {
cmp-nvim-lsp.enable = true;
fidget.enable = true;
lsp = {
enable = true;
keymaps = {
diagnostic = {
"<leader>q" = {
action = "setloclist";
desc = "Open diagnostic [Q]uickfix list";
};
};
extra = [
{
mode = "n";
key = "gd";
action.__raw = "require('telescope.builtin').lsp_definitions";
options = {
desc = "LSP: [G]oto [D]efinition";
};
}
{
mode = "n";
key = "gr";
action.__raw = "require('telescope.builtin').lsp_references";
options = {
desc = "LSP: [G]oto [R]eferences";
};
}
{
mode = "n";
key = "gI";
action.__raw = "require('telescope.builtin').lsp_implementations";
options = {
desc = "LSP: [G]oto [I]mplementation";
};
}
{
mode = "n";
key = "<leader>D";
action.__raw = "require('telescope.builtin').lsp_type_definitions";
options = {
desc = "LSP: Type [D]efinition";
};
}
{
mode = "n";
key = "<leader>ds";
action.__raw = "require('telescope.builtin').lsp_document_symbols";
options = {
desc = "LSP: [D]ocument [S]ymbols";
};
}
{
mode = "n";
key = "<leader>ws";
action.__raw = "require('telescope.builtin').lsp_dynamic_workspace_symbols";
options = {
desc = "LSP: [W]orkspace [S]ymbols";
};
}
];
lspBuf = {
"<leader>rn" = {
action = "rename";
desc = "LSP: [R]e[n]ame";
};
"<leader>ca" = {
action = "code_action";
desc = "LSP: [C]ode [A]ction";
};
"gD" = {
action = "declaration";
desc = "LSP: [G]oto [D]eclaration";
};
};
};
servers = {
# clangd = {
# enable = true;
# };
# lua_ls = {
# enable = true;
# settings = {
# completion = {
# callSnippet = "Replace";
# };
# };
# };
# gopls = {
# enable = true;
# };
# pyright = {
# enable = true;
# };
# rust_analyzer = {
# enable = true;
# };
# ...etc. See `https://nix-community.github.io/nixvim/plugins/lsp` for a list of pre-configured LSPs
# Some languages (like typscript) have entire language plugins that can be useful:
# `https://nix-community.github.io/nixvim/plugins/typescript-tools/index.html?highlight=typescript-tools#pluginstypescript-toolspackage`
# But for many setups the LSP (`ts_ls`) will work just fine
ts_ls = {
enable = true;
};
};
};
};
};
}

View File

@@ -0,0 +1,23 @@
_: {
programs.nixvim = {
plugins.mini = {
enable = true;
modules = {
ai = {
n_lines = 500;
};
statusline = {
use_icons.__raw = "vim.g.have_nerd_font";
};
surround = {
};
};
};
extraConfigLua = ''
require('mini.statusline').section_location = function()
return '%2l:%-2v'
end
'';
};
}

View File

@@ -0,0 +1,56 @@
_: {
programs.nixvim = {
plugins.cmp = {
enable = true;
settings = {
completion = {
completeopt = "menu,menuone,noinsert";
};
mapping = {
"<C-n>" = "cmp.mapping.select_next_item()";
"<C-p>" = "cmp.mapping.select_prev_item()";
"<C-b>" = "cmp.mapping.scroll_docs(-4)";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<C-y>" = "cmp.mapping.confirm { select = true }";
"<C-Space>" = "cmp.mapping.complete {}";
"<C-l>" = ''
cmp.mapping(function()
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end
end, { 'i', 's' })
'';
"<C-h>" = ''
cmp.mapping(function()
if luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
end
end, { 'i', 's' })
'';
};
snippet = {
expand = ''
function(args)
require('luasnip').lsp_expand(args.body)
end
'';
};
sources = [
{
name = "luasnip";
}
{
name = "nvim_lsp";
}
{
name = "path";
}
];
};
};
};
}

View File

@@ -0,0 +1,17 @@
_: {
programs.nixvim = {
plugins.nvim-tree = {
enable = true;
};
keymaps = [
{
key = "<C-\\>";
action = "<cmd>NvimTreeToggle<cr>";
options = {
desc = "NvimTree Toggle";
};
}
];
};
}

View File

@@ -0,0 +1,137 @@
_: {
programs.nixvim = {
plugins.telescope = {
enable = true;
extensions = {
fzf-native.enable = true;
ui-select.enable = true;
};
keymaps = {
"<leader>sh" = {
mode = "n";
action = "help_tags";
options = {
desc = "[S]earch [H]elp";
};
};
"<leader>sk" = {
mode = "n";
action = "keymaps";
options = {
desc = "[S]earch [K]eymaps";
};
};
"<leader>sf" = {
mode = "n";
action = "find_files";
options = {
desc = "[S]earch [F]iles";
};
};
"<leader>ss" = {
mode = "n";
action = "builtin";
options = {
desc = "[S]earch [S]elect Telescope";
};
};
"<leader>sw" = {
mode = "n";
action = "grep_string";
options = {
desc = "[S]earch current [W]ord";
};
};
"<leader>sg" = {
mode = "n";
action = "live_grep";
options = {
desc = "[S]earch by [G]rep";
};
};
"<leader>sd" = {
mode = "n";
action = "diagnostics";
options = {
desc = "[S]earch [D]iagnostics";
};
};
"<leader>sr" = {
mode = "n";
action = "resume";
options = {
desc = "[S]earch [R]esume";
};
};
"<leader>s" = {
mode = "n";
action = "oldfiles";
options = {
desc = "[S]earch Recent Files ('.' for repeat)";
};
};
"<leader><leader>" = {
mode = "n";
action = "buffers";
options = {
desc = "[ ] Find existing buffers";
};
};
};
settings = {
extensions.__raw = "{ ['ui-select'] = { require('telescope.themes').get_dropdown() } }";
};
};
keymaps = [
{
mode = "n";
key = "<leader>/";
action.__raw = ''
function()
require('telescope.builtin').current_buffer_fuzzy_find(
require('telescope.themes').get_dropdown {
winblend = 10,
previewer = false
}
)
end
'';
options = {
desc = "[/] Fuzzily search in current buffer";
};
}
{
mode = "n";
key = "<leader>s/";
action.__raw = ''
function()
require('telescope.builtin').live_grep {
grep_open_files = true,
prompt_title = 'Live Grep in Open Files'
}
end
'';
options = {
desc = "[S]earch [/] in Open Files";
};
}
{
mode = "n";
key = "<leader>sn";
action.__raw = ''
function()
require('telescope.builtin').find_files {
cwd = vim.fn.stdpath 'config'
}
end
'';
options = {
desc = "[S]earch [N]eovim files";
};
}
];
};
}

View File

@@ -0,0 +1,66 @@
_: {
programs.nixvim = {
keymaps = [
{
action = "<cmd>2ToggleTerm<cr>";
key = "<C-g>";
mode = "t";
options.desc = "Open/Close Terminal 2";
}
{
action = "<cmd>wincmd j<cr>";
key = "<C-Down>";
mode = "t";
options.desc = "Go to Down window";
}
{
action = "<cmd>wincmd h<cr>";
key = "<C-Left>";
mode = "t";
options.desc = "Go to Left window";
}
{
action = "<cmd>wincmd l<cr>";
key = "<C-Right>";
mode = "t";
options.desc = "Go to Right window";
}
{
action = "<cmd>wincmd k<cr>";
key = "<C-Up>";
mode = "t";
options.desc = "Go to Up window";
}
];
plugins.toggleterm = {
enable = true;
settings = {
close_on_exit = true;
direction = "horizontal"; # 'vertical' | 'horizontal' | 'tab' | 'float'
float_opts = {
border = "single"; # 'single' | 'double' | 'shadow' | 'curved' | ... other options supported by win open
height = 20;
width = 80;
winblend = 0;
};
hide_numbers = true;
insert_mappings = true;
open_mapping = "[[<C-/>]]";
persist_mode = true;
shade_terminals = true;
shell = "nu";
size = ''
function(term)
if term.direction == "horizontal" then
return 30
elseif term.direction == "vertical" then
return vim.o.columns * 0.4
end
end
'';
start_in_insert = true;
terminal_mappings = true;
};
};
};
}

View File

@@ -0,0 +1,35 @@
_: {
programs.nixvim = {
plugins.treesitter = {
enable = true;
settings = {
ensureInstalled = [
"bash"
"c"
"diff"
"html"
"lua"
"luadoc"
"markdown"
"markdown_inline"
"query"
"vim"
"vimdoc"
];
highlight = {
additional_vim_regex_highlighting = true;
enable = true;
};
indent = {
enable = true;
disable = [
"ruby"
];
};
};
};
};
}

View File

@@ -0,0 +1,189 @@
_: {
programs.nixvim = {
plugins = {
alpha = {
enable = true;
layout = let
padding = val: {
type = "padding";
inherit val;
};
in [
(padding 4)
{
opts = {
hl = "AlphaHeader";
position = "center";
};
type = "text";
val = [
" "
" "
" "
" "
" "
" "
];
}
(padding 6)
{
type = "button";
val = " Find File";
on_press.raw = "require('telescope.builtin').find_files";
opts = {
keymap = [
"n"
"f"
":Telescope find_files <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
shortcut = "f";
position = "center";
cursor = 3;
width = 40;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
(padding 1)
{
type = "button";
val = " New File";
on_press.__raw = "function() vim.cmd[[ene]] end";
opts = {
keymap = [
"n"
"n"
":ene <BAR> startinsert <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
shortcut = "n";
position = "center";
cursor = 3;
width = 40;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
(padding 1)
{
type = "button";
val = " Recent Files";
on_press.raw = "require('telescope.builtin').oldfiles";
opts = {
keymap = [
"n"
"r"
":Telescope oldfiles <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
shortcut = "r";
position = "center";
cursor = 3;
width = 40;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
(padding 1)
{
type = "button";
val = " Find Word";
on_press.raw = "require('telescope.builtin').live_grep";
opts = {
keymap = [
"n"
"w"
":Telescope live_grep <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
shortcut = "w";
position = "center";
cursor = 3;
width = 40;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
(padding 1)
{
type = "button";
val = "󱀸 Restore Session";
on_press.raw = "require('persistence').load()";
opts = {
keymap = [
"n"
"s"
":lua require('persistence').load()<cr>"
{
noremap = true;
silent = true;
nowait = true;
}
];
shortcut = "s";
position = "center";
cursor = 3;
width = 40;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
(padding 1)
{
type = "button";
val = "󰈆 Quit Neovim";
on_press.__raw = "function() vim.cmd[[qa]] end";
opts = {
keymap = [
"n"
"q"
":qa<CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
shortcut = "q";
position = "center";
cursor = 3;
width = 40;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
];
};
dressing.enable = true;
neoscroll.enable = true;
nui.enable = true;
persistence.enable = true;
todo-comments.enable = true;
trim.enable = true;
web-devicons.enable = true;
};
};
}

View File

@@ -0,0 +1,43 @@
_: {
programs.nixvim = {
plugins.which-key = {
enable = true;
settings = {
spec = [
{
__unkeyed-1 = "<leader>c";
group = "[C]ode";
}
{
__unkeyed-1 = "<leader>d";
group = "[D]ocument";
}
{
__unkeyed-1 = "<leader>h";
group = "Git [H]unk";
mode = [
"n"
"v"
];
}
{
__unkeyed-1 = "<leader>r";
group = "[R]ename";
}
{
__unkeyed-1 = "<leader>s";
group = "[S]earch";
}
{
__unkeyed-1 = "<leader>t";
group = "[T]oggle";
}
{
__unkeyed-1 = "<leader>w";
group = "[W]orkspace";
}
];
};
};
};
}