From d51a0936abfbc5b4a99ddff1cf274d55c959bfe4 Mon Sep 17 00:00:00 2001 From: caandt Date: Fri, 20 Dec 2024 13:15:08 -0500 Subject: [PATCH] nvim conf --- system/configuration.nix | 2 +- user/config/default.nix | 1 + user/config/nvim/default.nix | 32 ++++++++++++++++ user/config/nvim/lua/init.lua | 4 ++ user/config/nvim/lua/u/bindings.lua | 4 ++ user/config/nvim/lua/u/cmp.lua | 39 +++++++++++++++++++ user/config/nvim/lua/u/lsp.lua | 16 ++++++++ user/config/nvim/lua/u/options.lua | 59 +++++++++++++++++++++++++++++ 8 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 user/config/nvim/default.nix create mode 100644 user/config/nvim/lua/init.lua create mode 100644 user/config/nvim/lua/u/bindings.lua create mode 100644 user/config/nvim/lua/u/cmp.lua create mode 100644 user/config/nvim/lua/u/lsp.lua create mode 100644 user/config/nvim/lua/u/options.lua diff --git a/system/configuration.nix b/system/configuration.nix index cf3d0fd..84677a7 100644 --- a/system/configuration.nix +++ b/system/configuration.nix @@ -19,7 +19,7 @@ networking.networkmanager.enable = true; environment.systemPackages = with pkgs; [ - neovim + (neovim.override { withRuby = false; }) wget tree tmux diff --git a/user/config/default.nix b/user/config/default.nix index 7313b85..d2fc861 100644 --- a/user/config/default.nix +++ b/user/config/default.nix @@ -9,6 +9,7 @@ in { imports = [ ./kde ./tmux + ./nvim ]; fonts.fontconfig.enable = false; diff --git a/user/config/nvim/default.nix b/user/config/nvim/default.nix new file mode 100644 index 0000000..e5ed2a2 --- /dev/null +++ b/user/config/nvim/default.nix @@ -0,0 +1,32 @@ +{ + config, + pkgs, + ... +}: { + programs.neovim = { + enable = true; + plugins = with pkgs.vimPlugins; [ + vim-tmux-navigator + which-key-nvim + telescope-nvim + nvim-treesitter.withAllGrammars + nvim-lspconfig + fidget-nvim + nvim-cmp + luasnip + cmp_luasnip + cmp-nvim-lsp + mini-nvim + vim-sleuth + catppuccin-nvim + tokyonight-nvim + ]; + extraPackages = with pkgs; [ + basedpyright + clang-tools + ]; + withRuby = false; + }; + xdg.configFile."nvim/init.lua".text = "require('init')"; + xdg.configFile."nvim/lua".source = config.u.lib.lnn "user/config/nvim/lua"; +} diff --git a/user/config/nvim/lua/init.lua b/user/config/nvim/lua/init.lua new file mode 100644 index 0000000..d037cf7 --- /dev/null +++ b/user/config/nvim/lua/init.lua @@ -0,0 +1,4 @@ +require('u.bindings') +require('u.options') +require('u.lsp') +require('u.cmp') diff --git a/user/config/nvim/lua/u/bindings.lua b/user/config/nvim/lua/u/bindings.lua new file mode 100644 index 0000000..9c8e3fb --- /dev/null +++ b/user/config/nvim/lua/u/bindings.lua @@ -0,0 +1,4 @@ +vim.keymap.set('n', '', 'nohlsearch') + +require('mini.move').setup() +require('mini.ai').setup() diff --git a/user/config/nvim/lua/u/cmp.lua b/user/config/nvim/lua/u/cmp.lua new file mode 100644 index 0000000..c40b0e7 --- /dev/null +++ b/user/config/nvim/lua/u/cmp.lua @@ -0,0 +1,39 @@ +local cmp = require('cmp') +local luasnip = require('luasnip') +luasnip.config.setup() + +cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + + [''] = cmp.mapping.confirm { select = true }, + + [''] = cmp.mapping.complete {}, + + [''] = cmp.mapping(function() + if luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function() + if luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + end + end, { 'i', 's' }), + }, + completion = { completeopt = 'menu,menuone,noinsert' }, + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'path' }, + }, +}) diff --git a/user/config/nvim/lua/u/lsp.lua b/user/config/nvim/lua/u/lsp.lua new file mode 100644 index 0000000..cfb2912 --- /dev/null +++ b/user/config/nvim/lua/u/lsp.lua @@ -0,0 +1,16 @@ +local lspconfig = require('lspconfig') +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) + +lspconfig.clangd.setup({ + cmd = { + "clangd", + "--background-index", + "--clang-tidy", + "--completion-style=bundled", + "--cross-file-rename", + "--header-insertion=iwyu", + }, + capabilities=capabilities +}) +lspconfig.basedpyright.setup{} diff --git a/user/config/nvim/lua/u/options.lua b/user/config/nvim/lua/u/options.lua new file mode 100644 index 0000000..dd480ad --- /dev/null +++ b/user/config/nvim/lua/u/options.lua @@ -0,0 +1,59 @@ +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +vim.g.have_nerd_font = true + +vim.opt.number = true + +vim.opt.mouse = 'a' + +vim.opt.showmode = false + +vim.schedule(function() + vim.opt.clipboard = 'unnamedplus' +end) + +vim.opt.shiftwidth = 2 +vim.opt.tabstop = 2 +vim.opt.smartindent = true +vim.opt.expandtab = true + +vim.opt.breakindent = true + +vim.opt.undofile = true + +vim.opt.ignorecase = true +vim.opt.smartcase = true + +vim.opt.signcolumn = 'yes' + +vim.opt.updatetime = 250 + +vim.opt.timeoutlen = 300 + +vim.opt.splitright = true +vim.opt.splitbelow = true + +vim.opt.list = true +vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } + +vim.opt.inccommand = 'split' + +vim.opt.cursorline = true + +vim.opt.scrolloff = 8 + +vim.api.nvim_create_autocmd('TextYankPost', { + desc = 'Highlight when yanking (copying) text', + group = vim.api.nvim_create_augroup('highlight-yank', { clear = true }), + callback = function() + vim.highlight.on_yank() + end, +}) + +local statusline = require('mini.statusline') +statusline.setup() +statusline.section_location = function() + return '%2l:%-2v' +end +vim.cmd.colorscheme 'tokyonight-storm'