# ========================================== # NEOVIM CONFIGURATION (via Nixvim) # ========================================== # Gruvbox theme, LSP, Treesitter, Telescope, file tree. # ========================================== { config, pkgs, ... }: { programs.nixvim = { enable = true; opts = { number = true; relativenumber = true; shiftwidth = 2; tabstop = 2; expandtab = true; smartindent = true; wrap = false; swapfile = false; backup = false; undofile = true; hlsearch = false; incsearch = true; termguicolors = true; scrolloff = 8; signcolumn = "yes"; updatetime = 50; clipboard = "unnamedplus"; }; globals = { mapleader = " "; maplocalleader = " "; }; # Gruvbox colorscheme — matches omarchy aesthetic colorschemes.gruvbox = { enable = true; settings = { contrast_dark = "hard"; transparent_mode = true; }; }; # Treesitter (syntax highlighting) plugins.treesitter = { enable = true; settings.highlight.enable = true; settings.indent.enable = true; }; # Telescope (fuzzy finder) plugins.telescope = { enable = true; keymaps = { "ff" = { action = "find_files"; options.desc = "Find files"; }; "fg" = { action = "live_grep"; options.desc = "Live grep"; }; "fb" = { action = "buffers"; options.desc = "Buffers"; }; "fh" = { action = "help_tags"; options.desc = "Help tags"; }; "fr" = { action = "oldfiles"; options.desc = "Recent files"; }; }; }; # Neo-tree (file tree) plugins.neo-tree = { enable = true; }; # LSP plugins.lsp = { enable = true; servers = { nil_ls.enable = true; # Nix pyright.enable = true; # Python ts_ls.enable = true; # TypeScript/JavaScript bashls.enable = true; # Bash jsonls.enable = true; # JSON yamlls.enable = true; # YAML html.enable = true; # HTML cssls.enable = true; # CSS }; }; # Autocompletion plugins.cmp = { enable = true; autoEnableSources = true; settings = { sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; mapping = { "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping.complete()"; }; }; }; # Status line plugins.lualine = { enable = true; settings.options.theme = "gruvbox"; }; # Autopairs plugins.nvim-autopairs.enable = true; # Git signs in the gutter plugins.gitsigns.enable = true; # Which-key (show keybindings) plugins.which-key.enable = true; # Keymaps keymaps = [ { key = "e"; action = "Neotree toggle"; options.desc = "Toggle file tree"; } { key = "w"; action = "w"; options.desc = "Save"; } { key = "q"; action = "q"; options.desc = "Quit"; } # Window navigation { key = ""; action = "h"; options.desc = "Move left"; } { key = ""; action = "j"; options.desc = "Move down"; } { key = ""; action = "k"; options.desc = "Move up"; } { key = ""; action = "l"; options.desc = "Move right"; } ]; }; }