294 lines
9.5 KiB
Nix
294 lines
9.5 KiB
Nix
{ inputs, pkgs, lib, theme, ... }: {
|
|
imports = [
|
|
./alpha.nix
|
|
inputs.nixvim.homeManagerModules.nixvim
|
|
] ++ lib.optional (builtins.isString theme) ../../../../../stylix/${theme}/home-manager/nixvim.nix;
|
|
|
|
# https://github.com/nix-community/nixvim
|
|
|
|
# Docs:
|
|
# https://nix-community.github.io/nixvim/
|
|
programs.nixvim = {
|
|
enable = true;
|
|
viAlias = true;
|
|
vimAlias = true;
|
|
|
|
globals.mapleader = " ";
|
|
globals.maplocalleader = " ";
|
|
|
|
options = {
|
|
number = true;
|
|
wrap = false;
|
|
cursorline = true;
|
|
cursorcolumn = true;
|
|
shiftwidth = 2;
|
|
breakindent = true;
|
|
colorcolumn = "100";
|
|
showmode = false;
|
|
};
|
|
|
|
keymaps = let
|
|
map = mode: key: action: { mode = mode; key = key; action = action; };
|
|
nmap = key: action: map [ "n" ] key action;
|
|
nvmap = key: action: map [ "n" "v" ] key action;
|
|
# imap = key: action: map [ "i" ] key action;
|
|
desc = d: { options.desc = d; };
|
|
silent = { options.silent = true; };
|
|
expr = { options.expr = true; };
|
|
in [
|
|
# Unmap keys that aren't useful, or that we want to use for different things
|
|
(nvmap "<Space>" "<Nop>" // silent)
|
|
(nvmap "<Cr>" "<Nop>" // silent)
|
|
(nvmap "s" "<Nop>" // silent)
|
|
# Redo
|
|
(nmap "R" "<C-r>")
|
|
# Copy and paste
|
|
(nvmap "<leader>y" "\"+y" // desc "Cop[y] to clipboard")
|
|
(nvmap "<leader>p" "\"+p" // desc "[P]aste from clipboard")
|
|
# Jump to start/end of line
|
|
(nvmap "H" "0")
|
|
(nvmap "L" "$")
|
|
# Navigate up and down word wrapped text as if it were not word wrapped
|
|
(nmap "k" "v:count == 0 ? 'gk' : 'k'" // silent // expr)
|
|
(nmap "j" "v:count == 0 ? 'gj' : 'j'" // silent // expr)
|
|
# Center cursor when jumping foward or back
|
|
(nmap "<C-o>" "<C-o>zz")
|
|
(nmap "<C-i>" "<C-i>zz")
|
|
# Insert Mode
|
|
|
|
# Normal Mode
|
|
# NVimTree
|
|
(nmap "<leader>n" "<Nop>" // desc "[N]vimTree")
|
|
(nmap "<leader>nf" ":NvimTreeFocus<CR>" // desc "[F]ocus NvimTree")
|
|
(nmap "<leader>nt" ":NvimTreeToggle<CR>" // desc "[T]oggle NvimTree")
|
|
(nmap "<leader>ns" ":NvimTreeFindFile<CR>"// desc "[S]earch NvimTree")
|
|
(nmap "<leader>nc" ":NvimTreeClose<CR>" // desc "[C]lose NvimTree")
|
|
(nmap "<leader>nr" ":NvimTreeRefresh<CR>" // desc "[R]efresh NvimTree")
|
|
# ToggleTerm
|
|
(nmap "<leader>Tt" ":ToggleTerm<CR>" // desc "[T]oggle Terminal")
|
|
(nmap "<leader>Ts" ":TermSelect<CR>" // desc "[S]elect a terminal")
|
|
# Fugitive
|
|
(nmap "<leader>gc" ":Git cam" // desc "[C]ommit" )
|
|
(nmap "<leader>gp" ":Git push<CR>" // desc "Git [p]ush")
|
|
(nmap "<leader>gP" ":Git pull<CR>" // desc "[P]ull")
|
|
(nmap "<leader>ga" ":Git add<CR>" // desc "[A]dd file...")
|
|
(nmap "<leader>gb" ":Git blam<CR>" // desc "[B]lame")
|
|
|
|
# Trouble
|
|
(nmap "<leader>tt" ":TroubleToggle<CR>" // desc "[T]oggle")
|
|
(nmap "<leader>tc" ":TroubleClose<CR>" // desc "[C]lose")
|
|
|
|
# Window Management
|
|
(nmap "<leader>wh" ":wincmd h<CR>" // desc "Move left")
|
|
(nmap "<leader>wl" ":wincmd l<CR>" // desc "Move right")
|
|
(nmap "<leader>wj" ":wincmd j<CR>" // desc "Move down")
|
|
(nmap "<leader>wk" ":wincmd k<CR>" // desc "Move up")
|
|
(nmap "<leader>wn" ":wincmd w<CR>" // desc "Move to next")
|
|
(nmap "<leader>wN" ":wincmd p<CR>" // desc "Move to previous")
|
|
(nmap "<leader>wc" ":wincmd c<CR>" // desc "[C]lose active window")
|
|
(nmap "<leader>woh" ":wincmd n<CR>" // desc "Open [H]orizontal window")
|
|
(nmap "<leader>wov" ":wincmd v<CR>" // desc "Open [V]ertical window")
|
|
# resize window
|
|
(nmap "<leader>wrh" ":resize " // desc "Resize Horizontal")
|
|
(nmap "<leader>wrv" ":vertical resize " // desc "Resize Vertical")
|
|
# Buffer Management
|
|
(nmap "<leader>bn" ":bnext<CR>" // desc "Next buffer")
|
|
(nmap "<leader>bN" ":bNext<CR>" // desc "Previous buffer")
|
|
(nmap "<leader>bc" ":bdelete<CR>" // desc "[c]lose buffer")
|
|
(nmap "<leader>bt" ":enew<CR>" // desc "New [T]ab")
|
|
# Multicursors
|
|
(nmap "<leader>ms" ":MCstart<CR>" // desc "[S]tart Multicorsor")
|
|
(nmap "<leader>mv" ":MCvisual<CR>" // desc "[V]isual Multicorsor")
|
|
(nmap "<leader>mc" ":MCclear<CR>" // desc "[C]lear Multicorsor")
|
|
(nmap "<leader>mu" ":MCunderCursor<CR>" // desc "Select [U]nder Corsor")
|
|
(nmap "<leader>mp" ":MCpattern<CR>" // desc "Select [P]attern")
|
|
];
|
|
|
|
plugins = {
|
|
# Multicursor support
|
|
multicursors.enable = true;
|
|
# auto bracket completion
|
|
nvim-autopairs.enable = true;
|
|
# Parser generator tool
|
|
treesitter.enable = true;
|
|
# Snippet engine for neovim
|
|
luasnip.enable = true;
|
|
# winbar that uses nvim-navic in order to get LSP context from your language server.
|
|
barbecue.enable = true;
|
|
# Nix language syntax highlighting / file type associations
|
|
nix.enable = true;
|
|
# Run nix develop / shell without exiting vim
|
|
nix-develop.enable = true;
|
|
# tab bar like Firefox or Chrome
|
|
bufferline.enable = true;
|
|
# Automatic indent
|
|
intellitab.enable = true;
|
|
# Highlight all entries of the currently selected word
|
|
illuminate.enable = true;
|
|
# sidebar file browser
|
|
nvim-tree.enable = true;
|
|
# Gutter information for git modifications
|
|
gitsigns.enable = true;
|
|
# Terminal in vim
|
|
toggleterm.enable = true;
|
|
# Rainbow matching {} [] () 's
|
|
rainbow-delimiters.enable = true;
|
|
# Colorize hex colors inline
|
|
nvim-colorizer.enable = true;
|
|
# git plugin for vim
|
|
fugitive.enable = true;
|
|
# Alerts / CodActions
|
|
trouble.enable = true;
|
|
# Indentation guides
|
|
indent-blankline.enable = true;
|
|
# Surround text blocks
|
|
surround.enable = true;
|
|
# cmp
|
|
cmp-buffer.enable = true;
|
|
cmp-path.enable = true;
|
|
cmp-nvim-lsp.enable = true;
|
|
|
|
# List of linters for nixvim
|
|
lint = {
|
|
enable = true;
|
|
lintersByFt = {
|
|
text = ["vale"];
|
|
json = ["jsonlint"];
|
|
markdown = ["vale"];
|
|
rst = ["vale"];
|
|
ruby = ["ruby"];
|
|
janet = ["janet"];
|
|
inko = ["inko"];
|
|
clojure = ["clj-kondo"];
|
|
dockerfile = ["hadolint"];
|
|
terraform = ["tflint"];
|
|
yaml = ["yamllint"];
|
|
nix = ["nix"];
|
|
};
|
|
};
|
|
|
|
|
|
# Popup to show shortcuts
|
|
which-key = {
|
|
enable = true;
|
|
registrations = {
|
|
"<leader>b" = "Manage buffers...";
|
|
"<leader>c" = "Colorscheme...";
|
|
"<leader>g" = "Git Options...";
|
|
"<leader>l" = "LSP Options...";
|
|
"<leader>n" = "NvimTree...";
|
|
"<leader>t" = "Trouble...";
|
|
"<leader>T" = "ToggleTerm...";
|
|
"<leader>w" = "Manage Windows...";
|
|
"<leader>wo" = "Open New...";
|
|
"<leader>wr" = "Resize...";
|
|
"<leader>m" = "Multicursor...";
|
|
};
|
|
};
|
|
|
|
# Airline / Powerline alternative
|
|
lualine = {
|
|
enable = true;
|
|
componentSeparators = {
|
|
right = "«";
|
|
left = "»";
|
|
};
|
|
sectionSeparators = {
|
|
right = "";
|
|
left = "";
|
|
};
|
|
};
|
|
|
|
telescope = {
|
|
enable = true;
|
|
extensions.fzf-native.enable = true;
|
|
keymaps = {
|
|
"<leader><leader>" = {
|
|
action = "find_files";
|
|
desc = "Search files by name";
|
|
};
|
|
"<leader>s" = {
|
|
action = "live_grep";
|
|
desc = "Search by live grep";
|
|
};
|
|
"<leader>bl" = {
|
|
action = "buffers";
|
|
desc = "[L]list open [B]uffers";
|
|
};
|
|
"<leader>h" = {
|
|
action = "help_tags";
|
|
desc = "Search [H]elp";
|
|
};
|
|
"<leader>W" = {
|
|
action = "grep_string";
|
|
desc = "Search for [W]ord under cursor";
|
|
};
|
|
"<leader>gs" = {
|
|
action = "git_status";
|
|
desc = "Search [G]it [S]tatus";
|
|
};
|
|
"<leader>gl" = {
|
|
action = "git_commits";
|
|
desc = "View [G]it [L]ogs";
|
|
};
|
|
"<leader>r" = {
|
|
action = "oldfiles";
|
|
desc = "Search [R]ecently opened files by name";
|
|
};
|
|
"<leader>cs" = {
|
|
action = "colorscheme";
|
|
desc = "Change [C]olor[s]cheme";
|
|
};
|
|
};
|
|
};
|
|
|
|
nvim-cmp = {
|
|
enable = true;
|
|
autoEnableSources = true;
|
|
mapping = {
|
|
"<C-Space>" = "cmp.mapping.complete()";
|
|
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
|
|
"<C-e>" = "cmp.mapping.close()";
|
|
"<C-f>" = "cmp.mapping.scroll_docs(4)";
|
|
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
|
"<S-Tab>" = {
|
|
action = "cmp.mapping.select_prev_item()";
|
|
modes = [
|
|
"i"
|
|
"s"
|
|
];
|
|
};
|
|
"<Tab>" = {
|
|
action = "cmp.mapping.select_next_item()";
|
|
modes = [
|
|
"i"
|
|
"s"
|
|
];
|
|
};
|
|
};
|
|
sources = [
|
|
{ name = "nvim_lua"; }
|
|
{ name = "nvim_llsp"; }
|
|
{ name = "path"; }
|
|
{ name = "buffer"; }
|
|
];
|
|
};
|
|
};
|
|
|
|
colorschemes = {
|
|
tokyonight.enable = true;
|
|
gruvbox.enable = true;
|
|
catppuccin.enable = true;
|
|
dracula.enable = true;
|
|
oxocarbon.enable = true;
|
|
|
|
};
|
|
extraPlugins = with pkgs.vimPlugins; [
|
|
awesome-vim-colorschemes
|
|
everforest
|
|
onehalf
|
|
rose-pine
|
|
melange-nvim
|
|
];
|
|
};
|
|
}
|