summaryrefslogtreecommitdiffstats
path: root/init.lua
diff options
context:
space:
mode:
authorSquibid <me@zacharyscheiman.com>2022-12-23 14:02:38 -0500
committerSquibid <me@zacharyscheiman.com>2022-12-23 14:02:38 -0500
commitc157ed7ff69f842f31e462e956257177264d2cd9 (patch)
treeaf55281256382417c69e0fc986c50c311d2e0f18 /init.lua
downloadnvim-c157ed7ff69f842f31e462e956257177264d2cd9.tar.gz
nvim-c157ed7ff69f842f31e462e956257177264d2cd9.tar.bz2
nvim-c157ed7ff69f842f31e462e956257177264d2cd9.zip
initial commit for my nvim config (all in one file for now)
Diffstat (limited to '')
-rw-r--r--init.lua517
1 files changed, 517 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..fafa001
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,517 @@
+local o = vim.opt
+local g = vim.g
+local a = vim.api
+
+g.mapleader = " "
+
+---------------
+-- better ui --
+---------------
+o.number = true
+o.relativenumber = true
+o.numberwidth = 2
+o.cursorline = true
+o.scrolloff = 5 -- # lines below/above cursor
+o.showmode = false
+o.cmdheight = 2
+o.mouse = "" -- no mouse
+
+o.wrap = true
+o.linebreak = true
+o.emoji = false
+o.clipboard = 'unnamedplus' -- use system clipboard
+
+-- intenting & tabing
+o.expandtab = true
+o.smarttab = true
+o.cindent = true
+o.autoindent = true
+o.tabstop = 2
+o.shiftwidth = 2
+o.softtabstop = -1 -- If negative, shiftwidth value is used
+
+-- width line
+o.colorcolumn = { 80 }
+vim.cmd('highlight ColorColumn ctermbg=0 guibg=lightgrey')
+
+-- colors
+o.termguicolors = true
+vim.cmd('colorscheme jellybeans-nvim')
+
+local colors = {
+ black = '#000000',
+ black2 = '#161616',
+ grey = '#1E1E1E',
+ grey2 = '#404040',
+ white = '#ffffff',
+ red = '#E06C75',
+ orange = '#EA936C',
+ yellow = '#E5C07B',
+ green = '#98C379',
+ blue = '#61AFEF',
+ purple = '#C678DD',
+}
+
+-- custom opts
+tablines = 'colored' -- false, colored, wrap
+minimapcolor = colors.grey
+
+------------
+-- saving --
+------------
+o.swapfile = false
+o.undofile = true
+o.confirm = true
+
+------------
+-- search --
+------------
+o.ignorecase = true
+o.smartcase = true
+o.wrapscan = true
+o.showmatch = true
+
+----------------
+-- wild menus --
+----------------
+o.wildoptions = 'pum'
+o.pumblend = 10
+o.pumheight = 20
+
+o.wildignorecase = true
+o.wildignore = '*.o'
+
+-------------------
+-- auto commands --
+-------------------
+a.nvim_create_augroup('bufcheck', {clear = true})
+
+-- highlight yanks
+a.nvim_create_autocmd('TextYankPost', {
+ group = 'bufcheck',
+ pattern = '*',
+ callback = function() vim.highlight.on_yank{timeout = 250} end
+})
+
+-- start terminal in insert mode
+a.nvim_create_autocmd('TermOpen', {
+ group = 'bufcheck',
+ pattern = '*',
+ command = 'startinsert | set winfixheight'
+})
+
+-- start git messages in insert mode
+a.nvim_create_autocmd('FileType', {
+ group = 'bufcheck',
+ pattern = { 'gitcommit', 'gitrebase', },
+ command = 'startinsert | 1'
+})
+
+--------------
+-- keybinds --
+--------------
+local default_opts = { noremap = true, silent = true }
+local expr_opts = { noremap = true, expr = true, silent = true }
+
+-- use esc to close term
+a.nvim_set_keymap("t", "<ESC>", "<C-d>", default_opts)
+
+-- open file viewer
+a.nvim_set_keymap("n", "<C-e>", ":Explore<CR>", default_opts)
+a.nvim_set_keymap("n", "<S-e>", ":Sexplore<CR>", default_opts)
+
+-- clear search
+a.nvim_set_keymap("n", "<ESC>", ":nohlsearch<Bar>:echo<CR>", default_opts)
+
+-- Resizing panes
+a.nvim_set_keymap("n", "<C-h>", ":vertical resize -1<CR>", default_opts)
+a.nvim_set_keymap("n", "<C-l>", ":vertical resize +1<CR>", default_opts)
+a.nvim_set_keymap("n", "<C-k>", ":resize +1<CR>", default_opts)
+a.nvim_set_keymap("n", "<C-j>", ":resize -1<CR>", default_opts)
+
+-- don't blame me pls
+local title = "Nvim"
+a.nvim_set_keymap("n", "<C-g>",
+ ":Gitsigns toggle_current_line_blame<CR>", default_opts
+)
+
+----------------------
+-- plugin functions --
+----------------------
+vim.cmd [[highlight IndentBlanklineIndent1 guifg=#E06C75 gui=nocombine]]
+vim.cmd [[highlight IndentBlanklineIndent2 guifg=#EA936C gui=nocombine]]
+vim.cmd [[highlight IndentBlanklineIndent3 guifg=#E5C07B gui=nocombine]]
+vim.cmd [[highlight IndentBlanklineIndent4 guifg=#98C379 gui=nocombine]]
+vim.cmd [[highlight IndentBlanklineIndent5 guifg=#61AFEF gui=nocombine]]
+vim.cmd [[highlight IndentBlanklineIndent6 guifg=#C678DD gui=nocombine]]
+
+if tablines == 'colored' then
+ require("indent_blankline").setup {
+ space_char_blankline = " ",
+ char_highlight_list = {
+ "IndentBlanklineIndent1",
+ "IndentBlanklineIndent2",
+ "IndentBlanklineIndent3",
+ "IndentBlanklineIndent4",
+ "IndentBlanklineIndent5",
+ "IndentBlanklineIndent6",
+ },
+ }
+elseif tablines == 'wrap' then
+ o.list = true
+
+ require("indent_blankline").setup {
+ space_char_blankline = " ",
+ show_current_context = true,
+ show_current_context_start = true,
+ }
+else
+ g.indent_blankline_char = ' '
+end
+
+-- minimap
+a.nvim_set_hl(0, 'CodewindowBorder', {fg = minimapcolor})
+
+-- lua line
+local custom = require'lualine.themes.auto'
+
+custom.normal = {
+ a = { fg = colors.black, bg = colors.blue, gui = 'bold' },
+ b = { fg = colors.black, bg = colors.blue, gui = 'bold' },
+ c = { fg = colors.white, bg = colors.grey },
+ x = {},
+ y = { fg = colors.blue, bg = colors.black2 },
+ z = { fg = colors.black2, bg = colors.blue, gui = 'bold' },
+}
+custom.insert = {
+ a = { fg = colors.black, bg = colors.green, gui = 'bold' },
+ b = { fg = colors.black, bg = colors.green, gui = 'bold' },
+ c = { fg = colors.white, bg = colors.grey },
+ x = {},
+ y = { fg = colors.green, bg = colors.black2 },
+ z = { fg = colors.black2, bg = colors.green, gui = 'bold' },
+}
+custom.replace = {
+ a = { fg = colors.black, bg = colors.orange, gui = 'bold' },
+ b = { fg = colors.black, bg = colors.orange, gui = 'bold' },
+ c = { fg = colors.white, bg = colors.grey },
+ x = {},
+ y = { fg = colors.orange, bg = colors.black2 },
+ z = { fg = colors.black2, bg = colors.orange, gui = 'bold' },
+}
+custom.visual = {
+ a = { fg = colors.black, bg = colors.purple, gui = 'bold' },
+ b = { fg = colors.black, bg = colors.purple, gui = 'bold' },
+ c = { fg = colors.white, bg = colors.grey },
+ x = {},
+ y = { fg = colors.purple, bg = colors.black2 },
+ z = { fg = colors.black2, bg = colors.purple, gui = 'bold' },
+}
+custom.command = {
+ a = { fg = colors.black, bg = colors.red, gui = 'bold' },
+ b = { fg = colors.black, bg = colors.red, gui = 'bold' },
+ c = { fg = colors.white, bg = colors.grey },
+ x = {},
+ y = { fg = colors.red, bg = colors.black2 },
+ z = { fg = colors.black2, bg = colors.red, gui = 'bold' },
+}
+custom.terminal = {
+ a = { fg = colors.black, bg = colors.yellow, gui = 'bold' },
+ b = { fg = colors.black, bg = colors.yellow, gui = 'bold' },
+ c = { fg = colors.white, bg = colors.grey },
+ x = {},
+ y = { fg = colors.yellow, bg = colors.black2 },
+ z = { fg = colors.black2, bg = colors.yellow, gui = 'bold' },
+}
+custom.inactive = {
+ a = { bg = colors.grey },
+ b = { bg = colors.grey },
+ c = { bg = colors.grey },
+ x = { bg = colors.grey },
+ y = { bg = colors.grey },
+ z = { bg = colors.grey },
+}
+
+require('lualine').setup {
+ options = {
+ icons_enabled = false,
+ component_separators = { left = '', right = '' },
+ section_separators = { left = '', right = '' },
+ disabled_filetypes = {
+ statusline = { "", },
+ winbar = {},
+ },
+ theme = custom,
+ always_divide_middle = false,
+ globalstatus = false,
+ refresh = {
+ statusline = 100,
+ tabline = 1000,
+ winbar = 1000,
+ }
+ },
+ sections = {
+ lualine_a = {'mode'},
+ lualine_b = {
+ { 'filetype',
+ color = { fg = colors.white, bg = colors.grey },
+ },
+ { 'filename',
+ filestatus = true,
+ path = 1,
+
+ symbols = {
+ modified = '[+]',
+ readonly = '[=]',
+ unnamed = 'No Name',
+ newfile = '[New]',
+ }
+ }
+ },
+ lualine_c = {'diff'},
+ lualine_x = {
+ { 'fileformat',
+ color = { gui = 'bold' }
+ }
+ },
+ lualine_y = {'progress'},
+ lualine_z = {
+ { 'location',
+ padding = 1,
+ }
+ }
+ },
+ inactive_sections = {
+ lualine_c = {'filename'},
+ lualine_x = {'location'},
+ },
+}
+
+a.nvim_set_hl(0, "PmenuSel", { bg = colors.grey2 })
+a.nvim_set_hl(0, "Pmenu", { bg = colors.black2 })
+a.nvim_set_hl(0, "CmpItemMenu", { fg = colors.purple, italic = true })
+a.nvim_set_hl(0, "CmpItemKindSnippet", { bg = "#A377BF", bold = true })
+a.nvim_set_hl(0, "CmpItemKindText", { bg = "#63bc47", bold = true })
+
+-- completion
+local has_words_before = function()
+ unpack = unpack or table.unpack
+ local line, col = unpack(a.nvim_win_get_cursor(0))
+ return col ~= 0 and a.nvim_buf_get_lines(0, line - 1, line, true)
+ [1]:sub(col, col):match("%s") == nil
+end
+local luasnip = require('luasnip')
+local cmp = require('cmp')
+local lspkind = require('lspkind')
+require("luasnip.loaders.from_vscode").lazy_load()
+cmp.setup {
+ completion = { autocomplete = false, },
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ sources = cmp.config.sources({
+ { name = 'nvim-lsp', priority = 3, max_item_count = 5 },
+ { name = 'luasnip', priority = 2, max_item_count = 3 },
+ { name = 'path', priority = 1, max_item_count = 3 },
+ { name = 'buffer' },
+ { name = 'calc' },
+ }),
+ window = {
+ completion = {
+ winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
+ col_offset = -3,
+ side_padding = 0,
+ }
+ },
+ formatting = {
+ fields = { "kind", "abbr", "menu" },
+ format = function(entry, vim_item)
+ local kind_icons = {
+ Text = "Tx",
+ Snippet = "<>",
+ }
+ local menu_items = {
+ buffer = "buffer",
+ nvim_lsp = "LSP",
+ luasnip = "luasnip",
+ nvim_lua = "lua",
+ calc = "calc",
+ }
+
+ vim_item.kind = string.format(' %s ', kind_icons[vim_item.kind])
+ vim_item.menu = string.format(' (%s)', menu_items[entry.source.name])
+
+ return vim_item
+ end
+ },
+ mapping = cmp.mapping.preset.insert({
+ ["<Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ elseif has_words_before() then
+ cmp.complete()
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<S-Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ['<CR>'] = cmp.mapping.confirm({ select = true }),
+ ['<ESC>'] = cmp.mapping.close(),
+ }),
+ sorting = {
+ comparators = {
+ cmp.config.compare.offset,
+ cmp.config.compare.exact,
+ cmp.config.compare.score,
+ require "cmp-under-comparator".under,
+ cmp.config.compare.kind,
+ cmp.config.compare.sort_text,
+ cmp.config.compare.length,
+ cmp.config.compare.order,
+ },
+ },
+ enabled = function()
+ local context = require 'cmp.config.context'
+ if a.nvim_get_mode().mode == 'c' then
+ return true
+ else
+ return not context.in_treesitter_capture("comment")
+ and not context.in_syntax_group("Comment")
+ end
+ end
+}
+
+-------------
+-- plugins --
+-------------
+return require('packer').startup(function(use)
+ -- use packer to manage packer :)
+ use 'wbthomason/packer.nvim'
+
+ -- the rest of the plugins
+ use 'lukas-reineke/indent-blankline.nvim'
+ use { 'lukas-reineke/virt-column.nvim',
+ config = function()
+ require('virt-column').setup()
+ end
+ }
+ use { 'nvim-lualine/lualine.nvim' }
+ use { 'nvchad/nvim-colorizer.lua',
+ config = function()
+ require('colorizer').setup {
+ filetypes = { '*' },
+ user_default_options = {
+ names = false,
+ RRGGBBAA = true,
+ AARRGGBB = true,
+ },
+ }
+ end
+ }
+ use { 'nvim-treesitter/nvim-treesitter',
+ config = function()
+ require'nvim-treesitter.configs'.setup {
+ highlight = {
+ enable = true,
+ additional_vim_regex_highlighting = false,
+ },
+ }
+ end,
+ requires = {
+ { 'nvim-treesitter/nvim-treesitter-context',
+ config = function()
+ require'treesitter-context'.setup {
+ enable = true,
+ max_lines = 1,
+ patterns = {
+ default = {
+ 'function',
+ --[[ 'class',
+ 'method', ]]
+ },
+ },
+ }
+ end
+ },
+ }
+
+ }
+ use 'b3nj5m1n/kommentary'
+ use { 'metalelf0/jellybeans-nvim',
+ requires = { 'rktjmp/lush.nvim' },
+ }
+ use { 'gorbit99/codewindow.nvim',
+ config = function()
+ local codewindow = require('codewindow')
+ codewindow.setup({
+ show_cursor = false,
+ minimap_width = 15,
+ window_border = 'double',
+ exclude_filetypes = {
+ "netrw",
+ "help",
+ "packer",
+ },
+ })
+ codewindow.apply_default_keybinds()
+ end,
+ }
+ use 'jghauser/mkdir.nvim'
+ use { 'lewis6991/gitsigns.nvim',
+ config = function() require('gitsigns').setup() end
+ }
+ use { 'chentoast/marks.nvim',
+ config = function() require('marks').setup() end
+ }
+ use { 'nacro90/numb.nvim',
+ config = function() require('numb').setup() end
+ }
+ use { 'stevearc/stickybuf.nvim',
+ config = function() require('stickybuf').setup() end
+ }
+
+ -- completion
+ use { 'hrsh7th/nvim-cmp',
+ requires = {
+ 'hrsh7th/cmp-buffer',
+ 'hrsh7th/cmp-path',
+ 'hrsh7th/cmp-calc',
+ 'saadparwaiz1/cmp_luasnip',
+ 'hrsh7th/cmp-nvim-lua',
+ 'lukas-reineke/cmp-under-comparator',
+ { 'onsails/lspkind.nvim',
+ config = function()
+ require('lspkind').init()
+ end
+ },
+ }
+ }
+ use { 'L3MON4D3/LuaSnip',
+ tag = 'v1.*',
+ requires = {
+ 'rafamadriz/friendly-snippets',
+ },
+ }
+ use { 'doxnit/cmp-luasnip-choice',
+ config = function()
+ require('cmp_luasnip_choice').setup({
+ auto_open = true,
+ })
+ end
+ }
+ use { 'windwp/nvim-autopairs',
+ config = function() require("nvim-autopairs").setup {} end
+ }
+end)