summaryrefslogtreecommitdiff
path: root/files/config/nvim/init.lua
diff options
context:
space:
mode:
authorfreya <Freya Murphy>2025-01-21 02:43:35 +0000
committerFreya Murphy <freya@freyacat.org>2025-01-21 02:45:29 +0000
commit05ea082c5fed25655e59ed7851c0cd53b0624b35 (patch)
tree87390bf699e04027f042ccfc10743a42bf768788 /files/config/nvim/init.lua
downloaddotfiles-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.lua298
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
+})