Files
dotfiles/pkgs/nattovim/init.lua
2024-05-28 05:14:11 +05:30

411 lines
11 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--i do not really maintain this anymore since emacs is my main editor now
vim.api.nvim_set_option("termguicolors", true)
local bind = vim.keymap.set
--SETTINGS
vim.o.cmdheight = 1
vim.o.modifiable = true
vim.o.cursorline = true
vim.o.hidden = true
vim.o.encoding= "utf-8"
vim.o.pumheight = 10
vim.o.fileencoding = "utf-8"
vim.o.ruler = true
vim.o.cmdheight = 1
vim.o.mouse = "a"
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.conceallevel = 0
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.smarttab = true
vim.o.expandtab = true
vim.o.smartindent = true
vim.o.autoindent = true
vim.o.number = true
vim.o.relativenumber = true
vim.o.showtabline = 2
vim.o.updatetime = 300
vim.o.lazyredraw = true
vim.o.timeoutlen = 100
vim.o.clipboard = "unnamedplus"
vim.o.completeopt = "menuone,noselect"
vim.o.cursorcolumn = true
--KEYBINDS
--[[
A relic of the past
--Colemak-DH bind fuction for hjkl [mnei])
local function cdhbind(a, b)
bind('', a:lower(), b:lower())
bind('', a:upper(), b:upper())
end
cdhbind('m', 'h')
cdhbind('n', 'j')
cdhbind('e', 'k')
cdhbind('i', 'l')
cdhbind('u', 'i')
cdhbind('l', 'u')
cdhbind('k', 'n')
cdhbind('f', 'e')
cdhbind('t', 'f')
cdhbind('j', 't')
bind('n', "<M-n>", ":resize -2<CR>")
bind('n', "<M-e>", ":resize +2<CR>")
bind('n', "<M-m>", ":vertical resize -2<CR>")
bind('n', "<M-i>", ":vertical resize +2<CR>")
bind('v', '<', "<gv")
bind('v', '>', ">gv")
bind('n', "<C-q>", "<C-w>q")
bind('n', "<C-m>", "<C-w>h")
bind('n', "<C-n>", "<C-w>j")
bind('n', "<C-e>", "<C-w>k")
bind('n', "<C-i>", "<C-w>l")
bind('n', "<M-v>", ":vsplit<CR>")
bind('n', "<M-h>", ":split<CR>")
]]--
--RUN AND REPL (using vim-floaterm)
function _G.CompileRun()
local file = vim.fn.expand('%:p')
local noext = vim.fn.expand('%:p:r')
local commandMap = {
['java'] = 'java ' .. file,
['lisp'] = 'clisp ' .. file,
['python'] = 'python3 ' .. file,
['c'] = 'gcc ' .. file .. ' -o ' .. noext .. ' -Wno-unused-result ' .. ' && ' .. noext .. ' && rm ' .. noext,
['rust'] = 'rustc ' .. file .. ' -o ' .. noext .. ' && ' .. noext .. ' && rm ' .. noext,
['cpp'] = 'g++ -std=c++17 ' .. file .. ' -o ' .. noext .. ' -Wno-unused-result ' .. ' && ' .. noext .. ' && rm ' .. noext,
['haskell'] = 'runhaskell ' .. file,
['sh'] = 'sh ' .. file,
['javascript']= 'node ' .. file,
['typescript']= 'tsc ' .. file .. ' && node ' .. noext .. '.js && rm ' .. noext .. '.js'
}
filetype = vim.api.nvim_buf_get_option(0, "filetype")
if commandMap[filetype] ~= nil then vim.cmd("FloatermNew --autoclose=0 " .. commandMap[filetype]) end
end
function _G.Repl()
local file = vim.fn.expand('%:p')
local commandMap = {
['lisp'] = 'clisp',
['python'] = 'python3',
['haskell'] = 'ghci ' .. file,
['sh'] = 'sh',
['javascript']= 'node',
['typescript']= 'ts-node',
['nix'] = 'nix repl',
['lua'] = 'lua'
}
filetype = vim.api.nvim_buf_get_option(0, "filetype")
if commandMap[filetype] ~= nil then vim.cmd("FloatermNew " .. commandMap[filetype]) end
end
bind('n', "<F5>", ":call v:lua.CompileRun()<CR>")
bind('n', "<F6>", ":call v:lua.Repl()<CR>")
--PLUGINS CONFIG
--nvim-tree.lua
require'nvim-tree'.setup {
diagnostics = {
enable = true,
},
update_focused_file = {
enable = true,
update_root = true,
},
renderer = {
highlight_opened_files = "all",
highlight_git = true
},
git = {
enable = true,
ignore = true,
show_on_dirs = true,
},
actions = {
open_file = {
quit_on_open = true,
resize_window = true,
window_picker = {
enable = true,
exclude = {
filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" },
buftype = { "nofile", "terminal", "help" },
},
},
},
},
view = {
adaptive_size = true,
mappings = {
list = {
{ key = "e", action = "" },
{ key = "m", action = "" },
{ key = "f", action = "rename_basename" }
},
},
},
}
bind('n', "<M-o>", ":NvimTreeToggle<CR>")
bind('n', "<Space>r", ":NvimTreeRefresh<CR>")
bind('n', "<Space>f", ":NvimTreeFindFile<CR>")
bind('n', "<Space>f", ":NvimTreeFindFile<CR>")
--floaterm
vim.g.floaterm_keymap_toggle = '<F1>'
vim.g.floaterm_keymap_next = '<F2>'
vim.g.floaterm_keymap_prev = '<F3>'
vim.g.floaterm_keymap_new = '<F4>'
vim.g.floaterm_gitcommit='floaterm'
vim.g.floaterm_autoinsert=1
vim.g.floaterm_position="bottom"
vim.g.floaterm_width=0.99
vim.g.floaterm_height=0.6
--closetag
vim.g.closetag_filenames = "*.html,*.xhtml,*.phtml,*.js,*.erb,*.jsx"
vim.g.closetag_xhtml_filenames = "*.xhtml,*.jsx,*.js,*.erb"
vim.g.closetag_emptyTags_caseSensitive = 1
vim.g.closetag_shortcut = '>'
--nerdcommenter
bind('n',"<M-c>","<plug>NERDCommenterToggle")
bind('n',"<M-d>","<plug>NERDCommenterSexy")
--barbar
bind('n', "<M-,>", ":BufferPrevious<CR>")
bind('n', "<M-.>", ":BufferNext<CR>")
bind('n', "<M-<>", ":BufferMovePrevious<CR>")
bind('n', "<M->>", ":BufferMoveNext<CR>")
bind('n', "<M-w>", ":BufferClose<CR>")
for i = 1,8,1
do
bind('n', string.format("<M-%d>", i), string.format(":BufferGoto %d<CR>", i))
end
--presence.nvim
vim.g.presence_neovim_image_text = "Ballin"
vim.g.presence_main_image = "file"
--treesitter-nvim
require'nvim-treesitter.configs'.setup {
ensure_install = "all",
highlight = {
enable = true,
additional_vim_regex_highlighting = true,
},
indent = {
enable = true
}
}
--vim-latex-live-preview
vim.g.livepreview_previewer = "zathura"
require'colorizer'.setup()
local on_attach = function(client, bufnr)
local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', '<M-k>', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', "<M-C-f>", function() vim.lsp.buf.format { async = true } end, bufopts)
end
local servers = { "clangd", "rust_analyzer", "tsserver", "hls", "pylsp", "texlab", "rnix", "terraform_lsp", "html", "cssls", "jsonls", "svelte", "gopls" }
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true
capabilities.textDocument.completion.completionItem.resolveSupport = {
properties = {
'documentation',
'detail',
'additionalTextEdits',
}
}
local nvimlsp = require('lspconfig')
for _, lsp in ipairs(servers) do
nvimlsp[lsp].setup { capabilities = capabilities, on_attach = on_attach }
end
--luasnip
local luasnip = require 'luasnip'
luasnip.snippets = {
html = {}
}
luasnip.snippets.javascript = luasnip.snippets.html
luasnip.snippets.javascriptreact = luasnip.snippets.html
require("luasnip/loaders/from_vscode").lazy_load()
local cmp = require 'cmp'
cmp.setup {
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<C-e>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-q>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end,
['<S-Tab>'] = function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end
},
sources = {
{ name = 'nvim_lsp'},
{ name = 'path'},
{ name = 'nvim_lua'},
{ name = 'luasnip'},
{ name = 'calc'},
{ name = 'emoji'},
{ name = 'buffer'},
{ name = 'look'},
},
formatting = {
format = require('lspkind').cmp_format({
with_text = true,
menu = ({
buffer = "[Buffer]",
nvim_lsp = "[LSP]",
luasnip = "[LuaSnip]",
nvim_lua = "[Lua]",
latex_symbols = "[Latex]",
})
}),
},
}
vim.cmd("set shortmess+=c")
--STATUSLINE
vim.cmd("set noruler")
vim.o.laststatus = 2
local function mode()
local mode_map = {
['n'] = 'normal ',
['v'] = 'visual ',
['V'] = 'v·line ',
[''] = 'v·block ',
['s'] = 'select ',
['S'] = 's·line ',
[''] = 's·block ',
['i'] = 'insert ',
['Rv'] = 'v·replace ',
['c'] = 'command ',
['!'] = 'shell ',
['t'] = 'terminal '
}
local m = vim.api.nvim_get_mode().mode
if mode_map[m] == nil then return m end
return mode_map[m]
end
--theming
local dark = true
require("catppuccin").setup({
flavour = "mocha",
background = {
light = "latte",
dark = "mocha",
},
})
vim.cmd("colorscheme catppuccin")
function hi(hi_var, hi_value)
vim.cmd("hi " .. hi_var .. " " .. hi_value)
end
local colors = require("catppuccin.palettes").get_palette "latte"
hi("Light", "guibg=" .. colors.text .. " guifg=" .. colors.crust)
hi("Misc", "guibg=" .. colors.pink .. " guifg=" .. colors.base)
hi("Dark", "guibg=" .. colors.crust .. " guifg=" .. colors.text)
local function git()
local branch = io.popen([[git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n']]):read("*a")
return string.len(branch) > 0 and ''.. branch or ''
end
local statusline = {
'%#Light# ',
mode():upper() .. ' ',
'%#Misc#',
string.len(git()) > 0 and ' ' .. git() .. ' ' or '',
'%#Dark# ',
'%f ',
'%#Light#',
'%=',
'%#Dark# ',
'%y ',
'%#Light# ',
'%p%% ',
'',
'%l/%L ',
'',
'%c '
}
vim.o.statusline = table.concat(statusline)
function _G.ToggleTheme()
if dark then
vim.cmd("set background=light")
local colors = require("catppuccin.palettes").get_palette "latte"
hi("Light", "guibg=" .. colors.crust .. " guifg=" .. colors.text)
hi("Misc", "guibg=" .. colors.peach .. " guifg=" .. colors.text)
hi("Dark", "guibg=" .. colors.text .. " guifg=" .. colors.crust)
vim.o.statusline = table.concat(statusline)
else
vim.cmd("set background=dark")
local colors = require("catppuccin.palettes").get_palette "mocha"
hi("Light", "guibg=" .. colors.text .. " guifg=" .. colors.crust)
hi("Misc", "guibg=" .. colors.pink .. " guifg=" .. colors.base)
hi("Dark", "guibg=" .. colors.crust .. " guifg=" .. colors.text)
vim.o.statusline = table.concat(statusline)
end
dark = not dark
end
bind('n', "<F7>", ":call v:lua.ToggleTheme()<CR>")
vim.g.tex_flavor = "latex"