diff options
author | Freya Murphy <freya@freyacat.org> | 2025-01-23 09:26:51 -0500 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-01-23 09:26:51 -0500 |
commit | 1a51f2f555b182673e3f9b3e38fb2ab0e57dd6c2 (patch) | |
tree | eecdad132615a4469c22ee6d4ccd1df087b6159d /nix/programs/neovim/init.lua | |
parent | use base16 in neovim and starship (diff) | |
download | dotfiles-nix-1a51f2f555b182673e3f9b3e38fb2ab0e57dd6c2.tar.gz dotfiles-nix-1a51f2f555b182673e3f9b3e38fb2ab0e57dd6c2.tar.bz2 dotfiles-nix-1a51f2f555b182673e3f9b3e38fb2ab0e57dd6c2.zip |
reconfigure
Diffstat (limited to 'nix/programs/neovim/init.lua')
-rw-r--r-- | nix/programs/neovim/init.lua | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/nix/programs/neovim/init.lua b/nix/programs/neovim/init.lua new file mode 100644 index 0000000..50d50c8 --- /dev/null +++ b/nix/programs/neovim/init.lua @@ -0,0 +1,246 @@ +--[[ CONFIG ]]-- + +-- global config for iris configuration +config = { + -- colorscheme for nvim + flavour = "mocha", + -- indentation + tab_width = 4, + expand_tab = false, + -- keybinds to be set to actions + keybinds = { + -- leader key + leader = ' ', + -- toggle menus + menus = { + -- file browser + browser = '<leader>e', + -- active buffers + buffers = '<leader>fb', + -- error list + error = '<leader>t', + -- find files + find = '<leader>ff', + -- grep files + grep = '<leader>fg', + -- help browser + help = '<leader>fh', + -- undo tree + undo = '<leader>u', + }, + -- lsp actions + lsp = { + hover = 'K', + action = '<leader>la', + references = '<leader>lr', + rename = '<leader>ln', + }, + -- completion + cmp = { + -- prev item + prev = '<C-p>', + -- next item + next = '<C-n>', + -- confirm + confirm = '<CR>', + -- complete + complete = '<C-Space>', + }, + -- disable active selection + noh = '<leader>h', + }, + -- lsp servers + lsps = { + -- rust + rust_analyzer = {}, + -- c / c++ + clangd = {}, + -- java + jdtls = {}, + }, +}; + +--[[ VIM ]]-- + +vim.opt.tabstop = config.tab_width +vim.opt.softtabstop = config.tab_width +vim.opt.shiftwidth = config.tab_width +vim.opt.expandtab = config.expand_tab +vim.opt.mouse = "a" +vim.opt.clipboard = "unnamedplus" +vim.opt.hlsearch = true +vim.opt.autoindent = true +vim.opt.ttyfast = true +vim.opt.number = true +vim.opt.relativenumber = true +vim.opt.rnu = true +vim.opt.swapfile = false +vim.opt.termguicolors = true + +-- remove trailing whitespace on save +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = { "*" }, + command = [[%s/\s\+$//e]], +}) + +--[[ THEME ]]-- + +vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) +vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" }) +vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = "none" }) +vim.api.nvim_set_hl(0, "Comment", { fg = colorscheme.colors.base04 }) +vim.api.nvim_set_hl(0, "@comment", { link = "Comment" }) + +--[[ LINES ]]-- + +-- mode line +require('lualine').setup { + options = { + theme = config.colorscheme, + icons_enabled = true, + globalstatus = true, + }, +} + +-- buffer line +require("bufferline").setup {} + +--[[ MENUS ]]-- + +-- file browser +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 +vim.opt.termguicolors = true + +require("nvim-tree").setup { + sort = { + sorter = "case_sensitive", + }, + view = { + width = 30, + }, + renderer = { + group_empty = true, + }, + actions = { + open_file = { + quit_on_open = true, + }, + }, + filters = { + dotfiles = false, + }, +} + +--[[ COMPLETION ]]-- + +-- completion engine +--local cmp = require('cmp') +-- +--local cmp_select = {behavior = cmp.SelectBehavior.Select} +--local cmp_mappings = cmp.mapping.preset.insert({ +-- [config.keybinds.cmp.prev] = cmp.mapping.select_prev_item(cmp_select), +-- [config.keybinds.cmp.next] = cmp.mapping.select_next_item(cmp_select), +-- [config.keybinds.cmp.confirm] = cmp.mapping.confirm({ select = true }), +-- [config.keybinds.cmp.complete] = cmp.mapping.complete(), +--}) +-- +--cmp_mappings['<Tab>'] = nil +--cmp_mappings['<S-Tab>'] = nil +-- +--cmp.setup { +-- snippet = { +-- expand = function(args) +-- vim.fn["vsnip#anonymous"](args.body) +-- end, +-- }, +-- sources = cmp.config.sources({ +-- { name = 'nvim_lsp' }, +-- { name = 'vsnip' }, +-- { name = 'buffer' }, +-- }), +-- mapping = cmp_mappings, +--} +-- +-- delimiter completion +require'nvim-surround'.setup {} + +--[[ LSP ]]-- + +local capabilities = require'cmp_nvim_lsp'.default_capabilities() +for lsp,config in pairs(config.lsps) do + config.capabilities = capabilities + require'lspconfig'[lsp].setup(config) +end + +-- illuminate +require'illuminate'.configure { + providers = { + 'lsp', + 'treesitter', + 'regex', + }, +} + +-- todo comments +require('todo-comments').setup() + +-- auto indentation +require('indent-o-matic').setup { + max_lines = 2048, + standard_widths = { 2, 4, 8 }, + skip_multiline = true, +} + +-- image viewer +--require'hologram'.setup { +-- auto_display = true +--} + +-- 80 col bar +require'virt-column'.setup { + enabled = true, + virtcolumn = "80" +} + +-- notifications +require("fidget").setup { + notification = { + window = { + winblend = 0, + }, + }, +} + +--[[ KEYBINDS ]]-- + +vim.g.mapleader = config.keybinds.leader +vim.g.maplocalleader = config.keybinds.leader +vim.keymap.set('', '<leader>', '<Nop>', { noremap = true, silent = true }) + +local function bind(key, action, opts) + opts = opts or {} + vim.keymap.set('n', key, action, opts) +end + +bind(config.keybinds.noh, vim.cmd.noh) +bind(config.keybinds.menus.browser, vim.cmd.NvimTreeToggle) +bind(config.keybinds.menus.undo, vim.cmd.UndotreeToggle) +bind(config.keybinds.menus.error, function() require'trouble'.toggle() end) + +local telescope = require'telescope.builtin' +bind(config.keybinds.menus.buffers, telescope.buffers) +bind(config.keybinds.menus.find, telescope.find_files) +bind(config.keybinds.menus.grep, telescope.live_grep) +bind(config.keybinds.menus.help, telescope.help_tags) + +vim.api.nvim_create_autocmd('LspAttach', { + desc = 'LSP actions', + callback = function(event) + local opts = {buffer = event.buf} + bind(config.keybinds.lsp.hover, function() vim.lsp.buf.hover() end, opts) + bind(config.keybinds.lsp.action, function() vim.lsp.buf.code_action() end, opts) + bind(config.keybinds.lsp.references, function() vim.lsp.buf.references() end, opts) + bind(config.keybinds.lsp.rename, function() vim.lsp.buf.rename() end, opts) + end +}) |