diff --git a/nvim.init.lazy.lua b/nvim.init.lazy.lua new file mode 100644 index 0000000..77ef371 --- /dev/null +++ b/nvim.init.lazy.lua @@ -0,0 +1,224 @@ +-- Install Lazy package +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +-- Lazy setup +require("lazy").setup({ + -- Config + defaults = { + lazy = true + }, + + -- Packages + "asolkar/vim-color-molokini", + "kyazdani42/nvim-web-devicons", + "nvim-lualine/lualine.nvim", + "preservim/nerdtree", + "tpope/vim-fugitive", + "mhinz/vim-signify", + "lewis6991/gitsigns.nvim", + "mg979/vim-visual-multi", + "jiangmiao/auto-pairs", + "luochen1990/rainbow", + "tpope/vim-surround", + "nathanaelkane/vim-indent-guides", + "https://github.com/intel-sandbox/vim-iosf.git", -- intel + "https://github.com/intel-sandbox/vim-pcietrk", -- intel + "vhda/verilog_systemverilog.vim" +}) + +-- LuaLine +require('lualine').setup { + options = { + icons_enabled = false, + theme = 'nightfly', + section_separators = { left = '', right = '' }, + component_separators = { left = '', right = '' } + }, + sections = { + lualine_c = { + { + 'filename', + path = 2, + symbols = { + modified = ' ●', -- Text to show when the buffer is modified + alternate_file = ' ↻', -- Text to show to identify the alternate file + directory = ' ▶', -- Text to show when the buffer is a directory + }, + } + } + }, + tabline = { + lualine_a = { + { + 'buffers', + show_filename_only = true, -- Shows shortened relative path when set to false. + hide_filename_extension = false, -- Hide filename extension when set to true. + show_modified_status = true, -- Shows indicator when the buffer is modified. + + mode = 4, -- 0: Shows buffer name + -- 1: Shows buffer index + -- 2: Shows buffer name + buffer index + -- 3: Shows buffer number + -- 4: Shows buffer name + buffer number + + max_length = vim.o.columns * 2 / 3, -- Maximum width of buffers component, + -- it can also be a function that returns + -- the value of `max_length` dynamically. + + symbols = { + modified = ' ●', -- Text to show when the buffer is modified + alternate_file = ' ↻', -- Text to show to identify the alternate file + directory = ' ▶', -- Text to show when the buffer is a directory + }, + }} + } +} + +-- Gitsigns +-- See `:help gitsigns.txt` +require('gitsigns').setup { + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, +} + +-- [[ Setting options ]] +-- See `:help vim.o` + +-- Set highlight on search +vim.o.hlsearch = true + +-- Highlight problematic whitespace +vim.o.list = true +vim.opt.listchars = { tab = '▶ ', trail = '●', extends = '#', nbsp = '.' } + +-- Whitespace/tab management +vim.opt.expandtab = true +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.colorcolumn = '120' + +-- Make line numbers default +vim.wo.number = true + +-- Enable mouse mode +vim.o.mouse = 'a' + +-- Enable break indent +vim.o.breakindent = true +vim.o.wrap = false + +-- Save undo history +vim.o.undofile = true + +-- Case insensitive searching UNLESS /C or capital in search +vim.o.ignorecase = true +vim.o.smartcase = true + +-- Decrease update time +vim.o.updatetime = 250 +vim.wo.signcolumn = 'yes' + +-- Set colorscheme +vim.o.termguicolors = true +-- vim.cmd [[colorscheme molokini]] +vim.cmd.colorscheme('molokini') + +-- Set completeopt to have a better completion experience +vim.o.completeopt = 'menuone,noselect' + +-- Do not auto read file when in focus +vim.o.autoread = false + +-- [[ Basic Keymaps ]] +-- Set as the leader key +-- See `:help mapleader` +-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) +vim.g.mapleader = ',' +vim.g.maplocalleader = ',' + +-- Keymaps for better default experience +-- See `:help vim.keymap.set()` +vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) + +-- Remap for dealing with word wrap +vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) +vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) + +vim.api.nvim_set_keymap('n', '', ':bn', { noremap = 1 }) +vim.api.nvim_set_keymap('v', '', ':bn', { noremap = 1 }) +vim.api.nvim_set_keymap('n', '', ':bp', { noremap = 1 }) +vim.api.nvim_set_keymap('n', '', ':e', { noremap = 1 }) +vim.api.nvim_set_keymap('n', '', 'w', { noremap = 1 }) +vim.api.nvim_set_keymap('n', '', 'W', { noremap = 1 }) -- S-F6 (F18 defined in ST's config.h) +vim.api.nvim_set_keymap('n', '', 'o', { noremap = 1 }) +vim.api.nvim_set_keymap('n', '', 'v', { noremap = 1 }) +vim.api.nvim_set_keymap('n', '', 's', { noremap = 1 }) -- S-F8 (F20 defined in ST's config.h) +vim.api.nvim_set_keymap('n', '', ':confirm bd', { noremap = 1 }) -- C-F11 (F35 defined in ST's config.h) +vim.api.nvim_set_keymap('v', '','"*ygv', { noremap = 1 }) -- Copy selection to clipboard +vim.api.nvim_set_keymap('v', '<2-LeftRelease>','"*ygv', { noremap = 1 }) -- Copy word selection to clipboard +vim.api.nvim_set_keymap('v', '<3-LeftRelease>','"*ygv', { noremap = 1 }) -- Copy line selection to clipboard +vim.api.nvim_set_keymap('v', '<4-LeftRelease>','"*ygv', { noremap = 1 }) -- Copy column selection to clipboard +vim.api.nvim_set_keymap('v', '', '"hy/h', { noremap = 1 }) -- Search selected text +vim.api.nvim_set_keymap('n', '', 'za', { noremap = 1 }) -- Toggle fold +vim.api.nvim_set_keymap('v', '<', '', '>gv', { noremap = 1 }) -- Preserve selection after right indent +vim.api.nvim_set_keymap('v', 'Q', 'gqa', { noremap = 1 }) -- Reflow visually highlighted lines with Q +vim.api.nvim_set_keymap('n', 'Q', 'gq', { noremap = 1 }) -- Reflow text + +-- Insert time/date stamps +vim.api.nvim_set_keymap('n', 'td', 'i=strftime(\'%Y/%m/%d\')', { noremap = 1 }) -- 'Insert [T]imestamp - [d]ate' +vim.api.nvim_set_keymap('n', 'tt', 'i=strftime(\'%Y/%m/%d %H:%M:%S\')', { noremap = 1 }) -- 'Insert [T]imestamp - date[t]ime' + +vim.g.rainbow_active = 1 -- 0 if you want to enable it later via :RainbowToggle + +vim.g.iosftrk_folddisable = 1 -- intel +vim.g.iosfsbtrk_folddisable = 1 -- intel +vim.g.pcietrk_folddisable = 1 -- intel + +-- [[ Highlight on yank ]] +-- See `:help vim.highlight.on_yank()` +local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) +vim.api.nvim_create_autocmd('TextYankPost', { + callback = function() + vim.highlight.on_yank() + end, + group = highlight_group, + pattern = '*', +}) + +-- NERDTree +vim.api.nvim_set_keymap('n', '', ':NERDTreeToggle %', { noremap = 1 }) +vim.g.NERDTreeShowBookmarks = 1 +vim.g.NERDTreeIgnore = {'\\.py[cd]$', '\\~$', '\\.swo$', '\\.swp$', + '^\\.git$', '^\\.hg$', '^\\.svn$', '\\.bzr$'} +vim.g.NERDTreeChDirMode = 3 +vim.g.NERDTreeQuitOnOpen = 1 +vim.g.NERDTreeMouseMode = 2 +vim.g.NERDTreeShowHidden = 1 +vim.g.NERDTreeKeepTreeInNewTab = 1 +vim.g.nerdtree_tabs_open_on_gui_startup = 0 + +-- Filetype assignments - TODO: Is there an automatic way for this? +vim.cmd("au! BufRead,BufNewFile *.sv,*.svh set filetype=verilog_systemverilog") +vim.cmd("au! BufRead,BufNewFile *iosfsb_trk.out set filetype=iosfsbtrk") +vim.cmd("au! BufRead,BufNewFile *iosf_trk.out set filetype=iosftrk") + +-- The line beneath this is called `modeline`. See `:help modeline` +-- vim: ft=lua ts=4 sts=4 sw=4 et