diff options
author | freya <Freya Murphy> | 2025-01-21 02:43:35 +0000 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-01-21 02:45:29 +0000 |
commit | 05ea082c5fed25655e59ed7851c0cd53b0624b35 (patch) | |
tree | 87390bf699e04027f042ccfc10743a42bf768788 /files/config/nvim/init.lua | |
download | dotfiles-nix-05ea082c5fed25655e59ed7851c0cd53b0624b35.tar.gz dotfiles-nix-05ea082c5fed25655e59ed7851c0cd53b0624b35.tar.bz2 dotfiles-nix-05ea082c5fed25655e59ed7851c0cd53b0624b35.zip |
initial
Diffstat (limited to 'files/config/nvim/init.lua')
-rw-r--r-- | files/config/nvim/init.lua | 298 |
1 files changed, 298 insertions, 0 deletions
diff --git a/files/config/nvim/init.lua b/files/config/nvim/init.lua new file mode 100644 index 0000000..f920e1a --- /dev/null +++ b/files/config/nvim/init.lua @@ -0,0 +1,298 @@ +--[[ CONFIG ]]-- + +-- global config for iris configuration +config = { + -- colorscheme for nvim + colorscheme = "catppuccin", + 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', + }, + -- treesitter languages + treesitter = { + "c", + "lua", + "rust", + "typescript", + "javascript", + "python", + "vim", + "vimdoc", + "query", + }, + -- lsp servers + lsps = { + -- rust + rust_analyzer = {}, + -- c / c++ + clangd = {}, + -- java + jdtls = {}, + }, +}; + +vim.call('iris#load') + +--[[ IMPORTS ]]-- + +local catppuccin = require('catppuccin') + +--[[ 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 ]]-- + +catppuccin.setup({ + flavour = config.flavour, + transparent_background = true, + integrations = { + cmp = true, + illuminate = { + enabled = true, + lsp = false + }, + nvimtree = true, + nvim_surround = true, + lsp_trouble = true, + telescope = { + enabled = true, + }, + treesitter = true, + }, +}) + +vim.cmd('colorscheme ' .. config.colorscheme) +vim.o.background = "dark" +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" }) + +--[[ 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 + +-- treesitter +require'nvim-treesitter.configs'.setup { + ensure_installed = config.treesitter, + sync_install = false, + auto_install = true, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + indent = { + enable = true + }, +} + +-- 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 +}) |