diff --git a/home-manager/common/software/cli/nixvim-small.nix b/home-manager/common/software/cli/nixvim-small.nix new file mode 100644 index 00000000..0f5f409e --- /dev/null +++ b/home-manager/common/software/cli/nixvim-small.nix @@ -0,0 +1,188 @@ +{ inputs, pkgs, config, lib, theme, ... }: { + imports = [ + inputs.nixvim.homeManagerModules.nixvim + ] ++ lib.optional (builtins.isString theme) ../../../../stylix/${theme}/home-manager/nixvim.nix; + + programs.nixvim = { + enable = true; + viAlias = true; + vimAlias = true; + + globals.mapleader = " "; + globals.maplocalleader = " "; + + 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" // silent) + (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") + # ToggleTerm + (nmap "<leader>t" "<Nop>" // desc "[T]oggleTerm" // silent) + (nmap "<leader>tt" ":ToggleTerm<CR>" // desc "[T]oggle Terminal") + # Fugitive + (nmap "<leader>gc" ":Git commit -a<CR>" // desc "[C]ommit" ) + (nmap "<leader>gp" ":Git push<CR>" // desc "[P]ush") + ]; + + options = { + number = true; + shiftwidth = 2; + # Indent wrapped text. + breakindent = true; + colorcolumn = "100"; + showmode = false; + }; + plugins = { + # Parser generator tool + treesitter.enable = true; + # Snippet engine for neovim + luasnip.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; + # Popup to show shortcuts + which-key.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; + + # Airline / Powerline alternative + lualine = { + enable = true; + componentSeparators = { + left = "|"; + right = "|"; + }; + }; + + 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>b" = { + action = "buffers"; + desc = "Search open [B]uffers by file name"; + }; + "<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>r" = { + action = "oldfiles"; + desc = "Search [R]ecently opened files by name"; + }; + }; + }; + + 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_lsp"; } + { name = "path"; } + { name = "buffer"; } + ]; + }; + }; + + colorschemes = { + tokyonight.enable = true; + gruvbox.enable = true; + catppuccin.enable = true; + dracula.enable = true; + oxocarbon.enable = true; + + }; + extraPlugins = with pkgs.vimPlugins; [ + everforest + onehalf + rose-pine + ]; + }; +} diff --git a/home-manager/small.nix b/home-manager/small.nix index a8c7b6cc..8b02fbea 100644 --- a/home-manager/small.nix +++ b/home-manager/small.nix @@ -3,13 +3,13 @@ # Common configs ./common/software/cli/bash.nix ./common/software/cli/git.nix - ./common/software/cli/nixvim.nix + ./common/software/cli/nixvim-small.nix ./common/software/cli/ssh.nix ./common/software/cli/btop.nix # User configs ./users/${username} - + # Theming inputs.stylix.homeManagerModules.stylix ../stylix/${theme}