Switched to Lua in Neovim. Added ZSH. Updated installation script.
This commit is contained in:
		
							parent
							
								
									9191504dba
								
							
						
					
					
						commit
						2b2219e998
					
				
					 15 changed files with 755 additions and 459 deletions
				
			
		
							
								
								
									
										11
									
								
								.config/nvim/init.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.config/nvim/init.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| require('packer_init') | ||||
| require('general') | ||||
| require('colorscheme') | ||||
| require('keymap') | ||||
| require('plugins/lsp') | ||||
| require('plugins/scala') | ||||
| require('plugins/cmp') | ||||
| require('plugins/lualine') | ||||
| require('plugins/telescope') | ||||
| require('plugins/floaterm') | ||||
| require('plugins/treesitter') | ||||
|  | @ -1,393 +0,0 @@ | |||
| call plug#begin('~/.local/share/nvim/plugged') | ||||
| 
 | ||||
| " ============================================================================= | ||||
| " Key usability plugins | ||||
| " ============================================================================= | ||||
| 
 | ||||
| " FZF Native for Telescope | ||||
| Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' } | ||||
| 
 | ||||
| " Floating terminal support for Neovim | ||||
| Plug 'voldikss/vim-floaterm' | ||||
| 
 | ||||
| " Plenary - lua components used by other plugins | ||||
| Plug 'nvim-lua/plenary.nvim' | ||||
| 
 | ||||
| " Neovim LSP | ||||
| Plug 'neovim/nvim-lspconfig' | ||||
| 
 | ||||
| " Completion | ||||
| Plug 'hrsh7th/cmp-nvim-lsp' " Builtin LSP as a completion source | ||||
| Plug 'hrsh7th/cmp-path'     " Support for path as a completion source | ||||
| Plug 'hrsh7th/cmp-buffer'   " Support for loaded buffers as completion source | ||||
| Plug 'hrsh7th/nvim-cmp'     " Primary plugin | ||||
| 
 | ||||
| " Treesitter | ||||
| Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} | ||||
| 
 | ||||
| " telescope.nvim | ||||
| " Gaze deeply into unknown regions using the power of the moon. | ||||
| Plug 'nvim-telescope/telescope.nvim' | ||||
| 
 | ||||
| " trouble.nvim | ||||
| " A pretty list for showing diagnostics, references, telescope results, quickfix  | ||||
| " and location lists to help you solve all the trouble your code is causing. | ||||
| Plug 'folke/trouble.nvim' | ||||
| 
 | ||||
| " nvim-lint (compatible with Neovim LSP) | ||||
| " nvim-lint is meant to fill the gaps for languages where either no language  | ||||
| " server exists, or where standalone linters provide better results than the  | ||||
| " available language server do. | ||||
| Plug 'mfussenegger/nvim-lint' | ||||
| 
 | ||||
| " vim-gitgutter | ||||
| " A Vim plugin which shows a git diff in the sign column. | ||||
| Plug 'airblade/vim-gitgutter' | ||||
| 
 | ||||
| " ============================================================================= | ||||
| " Languages and project type support. | ||||
| " ============================================================================= | ||||
| 
 | ||||
| " Janet Support | ||||
| Plug 'janet-lang/janet.vim', { 'for': ['janet'] } | ||||
| 
 | ||||
| " Racket Support | ||||
| Plug 'wlangstroth/vim-racket', { 'for': ['rkt'] } | ||||
| 
 | ||||
| " Generalized support for LISPs (Clojure, Racket, Janet) | ||||
| Plug 'Olical/conjure', { 'tag': 'v4.25.0', 'for': ['janet'] } | ||||
| 
 | ||||
| " Zig Support | ||||
| Plug 'ziglang/zig.vim', { 'for': ['zig'] } | ||||
| 
 | ||||
| " Scala Support | ||||
| " Note: Metals should not be configured with the other LSP items. | ||||
| Plug 'scalameta/nvim-metals', { 'for': ['scala', 'sbt'] } | ||||
| 
 | ||||
| " LaTeX Support | ||||
| Plug 'lervag/vimtex', { 'for': ['tex'] } | ||||
| 
 | ||||
| " Odin Support  | ||||
| Plug 'Tetralux/odin.vim' | ||||
| 
 | ||||
| " ============================================================================= | ||||
| " Visual enhancements | ||||
| " ============================================================================= | ||||
| 
 | ||||
| Plug 'sainnhe/gruvbox-material' | ||||
| " Plug 'rebelot/kanagawa.nvim' | ||||
| 
 | ||||
| Plug 'nvim-lualine/lualine.nvim' | ||||
| 
 | ||||
| Plug 'kyazdani42/nvim-web-devicons' | ||||
| Plug 'folke/lsp-colors.nvim' | ||||
| 
 | ||||
| call plug#end() | ||||
| 
 | ||||
| " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
| 
 | ||||
| filetype plugin indent on | ||||
| 
 | ||||
| " Only allow syntax to be set once. | ||||
| if !exists('g:syntax_on') | ||||
|     syntax enable | ||||
| endif | ||||
| 
 | ||||
| let mapleader=',' | ||||
| let maplocalleader=',' | ||||
| 
 | ||||
| " === Color Scheme === {{ | ||||
| set termguicolors | ||||
| set background=dark | ||||
| let g:gruvbox_material_palette = 'mix' | ||||
| let g:gruvbox_material_background = 'hard' | ||||
| let g:gruvbox_material_enable_bold = 1 | ||||
| colorscheme gruvbox-material | ||||
| "colorscheme kanagawa | ||||
| 
 | ||||
| " === History and Undo Levels === {{ | ||||
| set history=512 | ||||
| set undolevels=128 | ||||
| set undofile | ||||
| set undodir=~/.config/nvim/undo | ||||
| " }} | ||||
| 
 | ||||
| " === Assorted Core Settings === {{ | ||||
| set noswapfile | ||||
| set modelines=0 | ||||
| set hidden            " Hide buffers | ||||
| set encoding=utf-8    " Always use UTF-8 explicitly | ||||
| set number            " Show line numbers by default | ||||
| set cursorline        " Highlight the current line | ||||
| set showcmd           " Display incomplete commands at the bottom | ||||
| set noerrorbells      " ... we just don't like beeping | ||||
| set visualbell        " Flash rather than beep | ||||
| set t_vb=             " Don't flash please | ||||
| set ttyfast           " Some optimizations for rendering | ||||
| set ruler             " Show row and column number | ||||
| set laststatus=2      " Last window has a status line | ||||
| set showmatch         " Show matching parens | ||||
| set lazyredraw        " redraw only when necessary, hopefully more efficient. | ||||
| set pastetoggle=<F2>  " Cheap way to paste toggle | ||||
| set colorcolumn=80    " Right margin display | ||||
| set shortmess-=F      " Ensure audocmd works for filetype | ||||
| set shortmess+=c      " Avoid showing extra message when using completion | ||||
| set spelllang=en_us | ||||
| set signcolumn=yes | ||||
| set updatetime=200 | ||||
| " }} | ||||
| 
 | ||||
| " === Basic Completion Settings === {{ | ||||
| " menu = use a popup menu to show possible completions | ||||
| " menuone = show a menu even if there is only one match | ||||
| " noinsert = do not insert text for a match until user selects one | ||||
| " noselect = do not select a match from the menu automatically | ||||
| set completeopt=menu,menuone,noinsert,noselect | ||||
| 
 | ||||
| " Enable completions as you type. | ||||
| let g:completion_enable_auto_popup = 1 | ||||
| " }} | ||||
| 
 | ||||
| " === Indentation === {{ | ||||
| set tabstop=4 | ||||
| set shiftwidth=4 | ||||
| set softtabstop=4 | ||||
| set expandtab | ||||
| set smarttab | ||||
| set autoindent | ||||
| " }} | ||||
| 
 | ||||
| " === Search Settings === {{ | ||||
| set ignorecase | ||||
| set smartcase          | ||||
| set incsearch | ||||
| set showmatch | ||||
| set hlsearch | ||||
| " }} | ||||
| 
 | ||||
| " === General Ignores === {{ | ||||
| set wildignore=*.class,*.pyc,*.swp,*.o,*.jar | ||||
| set wildignore+=*/tmp/*,*.zip,*.tar,*.gz,*.bz2,*.xz | ||||
| set wildignore+=*/.git/* | ||||
| set wildignore+=*/.metals/*,*/.bloop/*,*/.bsp/* | ||||
| set wildignore+=*/node_modules/* | ||||
| " }} | ||||
| 
 | ||||
| " === Key Mappings === {{ | ||||
| 
 | ||||
| " Use Tab and Shift+Tab to navigate popup menus | ||||
| inoremap <expr> <Tab>   pumvisible() ? "\<C-n>" : "\<Tab>" | ||||
| inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>" | ||||
| 
 | ||||
| " Clear search highlighting | ||||
| nmap <silent> <leader>/ :nohlsearch<CR> | ||||
| 
 | ||||
| " Save current buffer | ||||
| nnoremap <leader>s :up<cr> | ||||
| 
 | ||||
| " Move to previous buffer | ||||
| nnoremap <leader>bp :bp<cr> | ||||
| 
 | ||||
| " Move to next buffer | ||||
| nnoremap <leader>bn :bn<cr> | ||||
| 
 | ||||
| " Delete current buffer | ||||
| nnoremap <leader>bd :bd<cr> | ||||
| 
 | ||||
| " Press ; to show a list of active buffers (+ fuzzy search) | ||||
| nmap ; :Buffers<CR> | ||||
| 
 | ||||
| " Press Ctrl+P to show a list of files (+ fuzzy search) | ||||
| nmap <C-p> :Files<CR> | ||||
| 
 | ||||
| " Close the quickfix window (example: this shows up when showing references  | ||||
| " via LSP). | ||||
| nnoremap <leader>cq :ccl<cr> | ||||
| 
 | ||||
| " Telescope Bindings (e.g. file and buffer search) | ||||
| nnoremap <C-p> <cmd>Telescope find_files<cr> | ||||
| nnoremap ; <cmd>Telescope buffers<cr> | ||||
| nnoremap <leader>fg <cmd>Telescope live_grep<cr> | ||||
| nnoremap <leader>fh <cmd>Telescope help_tags<cr> | ||||
| nnoremap <leader>fm <cmd>Telescope metals commands<cr> | ||||
| 
 | ||||
| " Trouble bindings | ||||
| nnoremap <leader>xx <cmd>TroubleToggle<cr> | ||||
| nnoremap <leader>xw <cmd>TroubleToggle workspace_diagnostics<cr> | ||||
| nnoremap <leader>xd <cmd>TroubleToggle document_diagnostics<cr> | ||||
| nnoremap <leader>xq <cmd>TroubleToggle quickfix<cr> | ||||
| nnoremap <leader>xl <cmd>TroubleToggle loclist<cr> | ||||
| nnoremap gR <cmd>TroubleToggle lsp_references<cr> | ||||
| 
 | ||||
| " gitgutter bindings | ||||
| nmap ]h <Plug>(GitGutterNextHunk) | ||||
| nmap [h <Plug>(GitGutterPrevHunk) | ||||
| 
 | ||||
| " LSP key bindings | ||||
| nnoremap <silent> K           <cmd>lua vim.lsp.buf.hover()<CR> | ||||
| nnoremap <silent> gi          <cmd>lua vim.lsp.buf.implementation()<CR> | ||||
| nnoremap <silent> gr          <cmd>lua vim.lsp.buf.references()<CR> | ||||
| nnoremap <silent> gds         <cmd>lua vim.lsp.buf.document_symbol()<CR> | ||||
| nnoremap <silent> gws         <cmd>lua vim.lsp.buf.workspace_symbol()<CR> | ||||
| nnoremap <silent> gd          <cmd>lua vim.lsp.buf.definition()<CR> | ||||
| nnoremap <silent> <leader>cl  <cmd>lua vim.lsp.codelens.run()<CR> | ||||
| nnoremap <silent> <leader>D   <cmd>lua vim.lsp.buf.type_definition()<CR> | ||||
| nnoremap <silent> <leader>rn  <cmd>lua vim.lsp.buf.rename()<CR> | ||||
| nnoremap <silent> <leader>ca  <cmd>lua vim.lsp.buf.code_action()<CR> | ||||
| nnoremap <silent> <leader>q   <cmd>lua vim.lsp.diagnostic.set_loclist()<CR> | ||||
| nnoremap <silent> <leader>e   <cmd>lua vim.lsp.diagnostic.open_float()<CR> | ||||
| nnoremap <silent> [c          <cmd>lua vim.diagnostic.goto_prev { wrap = false }<CR> | ||||
| nnoremap <silent> ]c          <cmd>lua vim.diagnostic.goto_next { wrap = false }<CR> | ||||
| 
 | ||||
| " Window movement | ||||
| map <C-j> <C-w>j | ||||
| map <C-k> <C-w>k | ||||
| map <C-h> <C-w>h | ||||
| map <C-l> <C-w>l | ||||
| " }} | ||||
| 
 | ||||
| " === netrw === {{ | ||||
| let g:netrw_banner = 0 | ||||
| let g:netrw_liststyle = 3 | ||||
| let g:netrw_browse_split = 4 | ||||
| let g:netrw_altv = 1 | ||||
| let g:netrw_winsize = 25 | ||||
| " }} | ||||
| 
 | ||||
| " === floaterm Configuration === {{ | ||||
| let g:floaterm_keymap_new    = '<leader>tc' | ||||
| let g:floaterm_keymap_prev   = '<leader>tp' | ||||
| let g:floaterm_keymap_next   = '<leader>tn' | ||||
| let g:floaterm_keymap_toggle = '<leader>tt' | ||||
| let g:floaterm_width = 0.8 | ||||
| let g:floaterm_height = 0.8 | ||||
| let g:floaterm_gitcommit = 'split' | ||||
| " }} | ||||
| 
 | ||||
| " === nvim-cmp Configuration (Completion Plugin) === {{ | ||||
| lua << EOF | ||||
| local cmp = require("cmp") | ||||
| cmp.setup({ | ||||
|   sources = { | ||||
|     { name = "nvim_lsp" }, | ||||
|     { name = "path" }, | ||||
|     { name = 'buffer', option = { keyword_length = 3 }, }, | ||||
|   }, | ||||
|   mapping = { | ||||
|     ["<CR>"] = cmp.mapping.confirm({}), | ||||
|     ["<Tab>"] = function(fallback) | ||||
|       if cmp.visible() then | ||||
|         cmp.select_next_item() | ||||
|       else | ||||
|         fallback() | ||||
|       end | ||||
|     end, | ||||
|     ["<S-Tab>"] = function(fallback) | ||||
|       if cmp.visible() then | ||||
|         cmp.select_prev_item() | ||||
|       else | ||||
|         fallback() | ||||
|       end | ||||
|     end, | ||||
|   }, | ||||
| }) | ||||
| EOF | ||||
| " }} | ||||
| 
 | ||||
| " === LSP Configuration === {{ | ||||
| lua << EOF | ||||
| local lsp = require('lspconfig') | ||||
| 
 | ||||
| -- Use an on_attach function to configure after LSP attaches to buffer | ||||
| local on_attach = function(client, bufnr) | ||||
|   local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end | ||||
|   buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') | ||||
| end | ||||
| 
 | ||||
| -- advertise the nvim-cmp capabilities to LSP servers | ||||
| local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
| capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) | ||||
| 
 | ||||
| -- zls = zig language server | ||||
| lsp.zls.setup { | ||||
|   on_attach = on_attach, | ||||
|   flags = { | ||||
|     debounce_text_changes = 150 | ||||
|   }, | ||||
|   capabilities = capabilities | ||||
| } | ||||
| 
 | ||||
| -- texlab = latex language server  | ||||
| lsp.texlab.setup{} | ||||
| 
 | ||||
| -- Note that metals is totally separate and doesn't use lspconfig. | ||||
| metals_config = require("metals").bare_config() | ||||
| 
 | ||||
| metals_config.settings = { | ||||
|   showImplicitArguments = true, | ||||
|   showInferredType = true | ||||
| } | ||||
| 
 | ||||
| -- This is a tricky option and _nothing_ will show up unless... | ||||
| -- "However, to enable this you _must_ have the metals status shown in your  | ||||
| --  status bar somehow." | ||||
| metals_config.init_options.statusBarProvider = "on" | ||||
| 
 | ||||
| metals_config.capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities) | ||||
| 
 | ||||
| -- Autocmd that will actually be in charging of starting the whole thing | ||||
| local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true }) | ||||
| vim.api.nvim_create_autocmd("FileType", { | ||||
|   pattern = { "scala", "sbt", "java" }, | ||||
|   callback = function() | ||||
|     require("metals").initialize_or_attach(metals_config) | ||||
|   end, | ||||
|   group = nvim_metals_group, | ||||
| }) | ||||
| EOF | ||||
| " }} | ||||
| 
 | ||||
| " === Treesitter Configuration === {{ | ||||
| lua <<EOF | ||||
| require'nvim-treesitter.configs'.setup { | ||||
|   -- One of "all", "maintained", or a list of languages | ||||
|   ensure_installed = { "c", "zig", "bash", "scala", "yaml" }, | ||||
| 
 | ||||
|   -- Install languages synchronously (only applied to `ensure_installed`) | ||||
|   sync_install = false, | ||||
| 
 | ||||
|   -- List of parsers to ignore installing | ||||
|   ignore_install = { }, | ||||
| 
 | ||||
|   highlight = { | ||||
|     enable = true, | ||||
|     disable = {}, | ||||
|     -- Setting this to true will run `:h syntax` and tree-sitter at the same  | ||||
|     -- time. Set this to `true` if you depend on 'syntax' being enabled (like  | ||||
|     -- for indentation). Using this option may slow down your editor, and you  | ||||
|     -- may see some duplicate highlights. Instead of true it can also be a list  | ||||
|     -- of languages | ||||
|     additional_vim_regex_highlighting = false, | ||||
|   }, | ||||
| 
 | ||||
|   indent = { | ||||
|     enable = true | ||||
|   } | ||||
| } | ||||
| EOF | ||||
| " }} | ||||
| 
 | ||||
| " === Lualine Configuration === {{ | ||||
| lua <<EOF | ||||
| local lualine_gruvbox = require'lualine.themes.gruvbox' | ||||
| 
 | ||||
| local function metals_status_for_lualine() | ||||
|   return vim.g["metals_status"] or "" | ||||
| end | ||||
| 
 | ||||
| require('lualine').setup { | ||||
|   options = { theme = lualine_gruvbox }, | ||||
|   sections = { lualine_c = { 'filename', metals_status_for_lualine } } | ||||
| } | ||||
| EOF | ||||
| " }} | ||||
							
								
								
									
										29
									
								
								.config/nvim/lua/colorscheme.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.config/nvim/lua/colorscheme.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| -- Set the colorscheme and any related options. | ||||
| vim.opt.background = 'dark' | ||||
| 
 | ||||
| -- Settings for gruvbox-material | ||||
| -- vim.g.gruvbox_material_palette = 'mix' | ||||
| -- vim.g.gruvbox_material_background = 'hard' | ||||
| -- vim.g.gruvbox_material_enable_bold = 1 | ||||
| -- vim.cmd 'colorscheme gruvbox-material' | ||||
| 
 | ||||
| -- Settings for material | ||||
| vim.g.material_style = "palenight" | ||||
| 
 | ||||
| require('material').setup({ | ||||
| 
 | ||||
| 	italics = { | ||||
| 		comments = true, -- Enable italic comments | ||||
| 	}, | ||||
| 
 | ||||
| 	plugins = { | ||||
| 		neogit = false, | ||||
| 		sidebar_nvim = false, | ||||
| 		lsp_saga = false, | ||||
| 		nvim_dap = false, | ||||
| 		nvim_navic = false, | ||||
| 		hop = false, | ||||
| 	} | ||||
| }) | ||||
| 
 | ||||
| vim.cmd 'colorscheme material' | ||||
							
								
								
									
										113
									
								
								.config/nvim/lua/general.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								.config/nvim/lua/general.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,113 @@ | |||
| local g = vim.g       -- Global variables | ||||
| local opt = vim.opt   -- Set options (global/buffer/windows-scoped) | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- General | ||||
| ----------------------------------------------------------- | ||||
| opt.mouse = 'a'             -- Enable mouse support | ||||
| opt.swapfile = false        -- Don't use swapfile | ||||
| opt.modelines = 0           -- Disable modelines | ||||
| opt.encoding = 'utf-8'      -- Set default encoding to UTF-8 | ||||
| 
 | ||||
| -- Note that this setting is important for which-key. Also don't reduce it too | ||||
| -- low, or the behavior will start getting wonky and always show which-key. | ||||
| opt.timeoutlen = 500        -- Time in ms to wait for a sequnece to complete | ||||
| 
 | ||||
| opt.shortmess:remove("F"):append("c") | ||||
| 
 | ||||
| opt.wildignore = { | ||||
| 	'*.class', '*.pyc', '*.swp', '*.o', '*.jar', '*/tmp/*', '*.zip', | ||||
| 	'*.tar', '*.gz', '*.bz2', '*.xz', '*/.git/*', '*/.metals/*',  | ||||
| 	'*/.bloop/*', '*/.bsp/*', '*/node_modules/*' | ||||
| } | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Completion | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| -- menu = use a popup menu to show possible completions | ||||
| -- menuone = show a menu even if there is only one match | ||||
| -- noinsert = do not insert text for a match until user selects one | ||||
| -- noselect = do not select a match from the menu automatically | ||||
| opt.completeopt = 'menu,menuone,noinsert,noselect' | ||||
| g.completion_enable_auto_popup = 1 -- Enable completions while typing | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Neovim UI | ||||
| ----------------------------------------------------------- | ||||
| opt.number = true           -- Show line number | ||||
| opt.cursorline = true       -- Highlight the current line | ||||
| opt.showcmd = true          -- Show incomplete commands at the bottom | ||||
| opt.ttyfast = true          -- Rendering optimizations | ||||
| opt.showmatch = true        -- Highlight matching parenthesis | ||||
| opt.colorcolumn = '80'      -- Line length marker at 80 columns | ||||
| opt.ruler = true            -- Show row and column number | ||||
| opt.signcolumn = 'yes'      -- Always show the sign column | ||||
| opt.foldmethod = 'marker'   -- Enable folding (default 'foldmarker') | ||||
| opt.splitright = true       -- Vertical split to the right | ||||
| opt.splitbelow = true       -- Horizontal split to the bottom | ||||
| opt.linebreak = true        -- Wrap on word boundary | ||||
| opt.termguicolors = true    -- Enable 24-bit RGB colors | ||||
| opt.laststatus = 3          -- Set global statusline | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Tabs, indent | ||||
| ----------------------------------------------------------- | ||||
| opt.tabstop = 4 | ||||
| opt.shiftwidth = 4 | ||||
| opt.softtabstop = 4 | ||||
| opt.expandtab = true | ||||
| opt.smarttab = true | ||||
| opt.autoindent = true | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Memory, CPU | ||||
| ----------------------------------------------------------- | ||||
| opt.hidden = true           -- Enable background buffers | ||||
| opt.lazyredraw = true       -- Faster scrolling | ||||
| opt.synmaxcol = 240         -- Max column for syntax highlight | ||||
| opt.updatetime = 500        -- ms to wait for trigger an event | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- History | ||||
| ----------------------------------------------------------- | ||||
| opt.history = 512 | ||||
| opt.undolevels = 128 | ||||
| opt.undofile = true | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Search | ||||
| ----------------------------------------------------------- | ||||
| opt.ignorecase = true | ||||
| opt.smartcase = true | ||||
| opt.incsearch = true | ||||
| opt.showmatch = true | ||||
| opt.hlsearch = true | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Startup | ||||
| ----------------------------------------------------------- | ||||
| -- Disable nvim intro | ||||
| opt.shortmess:append "sI" | ||||
| 
 | ||||
| -- Disable builtins plugins | ||||
| local disabled_built_ins = { | ||||
|   "gzip", | ||||
|   "zip", | ||||
|   "zipPlugin", | ||||
|   "tar", | ||||
|   "tarPlugin", | ||||
|   "getscript", | ||||
|   "getscriptPlugin", | ||||
|   "vimball", | ||||
|   "vimballPlugin", | ||||
|   "2html_plugin", | ||||
|   "logipat", | ||||
|   "rrhelper", | ||||
|   "spellfile_plugin", | ||||
|   "matchit" | ||||
| } | ||||
| 
 | ||||
| for _, plugin in pairs(disabled_built_ins) do | ||||
|   g["loaded_" .. plugin] = 1 | ||||
| end | ||||
							
								
								
									
										129
									
								
								.config/nvim/lua/keymap.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								.config/nvim/lua/keymap.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,129 @@ | |||
| ----------------------------------------------------------- | ||||
| -- Define keymaps for Neovim and plugins. | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| local function map(mode, lhs, rhs, opts) | ||||
|   local options = { noremap = true, silent = true } | ||||
|   if opts then | ||||
|     options = vim.tbl_extend('force', options, opts) | ||||
|   end | ||||
|   vim.api.nvim_set_keymap(mode, lhs, rhs, options) | ||||
| end | ||||
| 
 | ||||
| -- Change leader to a comma | ||||
| vim.g.mapleader = ',' | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- General | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| -- Clear search highlighting | ||||
| map('n', '<leader>/', ':nohlsearch<CR>') | ||||
| 
 | ||||
| -- Save current buffer | ||||
| map('n', '<leader>s', ':up<CR>') | ||||
| 
 | ||||
| -- Move to previous buffer | ||||
| map('n', '<leader>bp', ':bp<CR>') | ||||
| 
 | ||||
| -- Move to next buffer | ||||
| map('n', '<leader>bn', ':bn<CR>') | ||||
| 
 | ||||
| -- Delete current buffer | ||||
| map('n', '<leader>bd', ':bd<CR>') | ||||
| 
 | ||||
| -- Close the quickfix window | ||||
| map('n', '<leader>cq', ':ccl<CR>') | ||||
| 
 | ||||
| -- Use Tab to jump to the next option in a popup menu | ||||
| vim.keymap.set('i', '<Tab>', function() | ||||
|     return vim.fn.pumvisible() == 1 and '<C-N>' or '<Tab>' | ||||
| end, {expr = true}) | ||||
| 
 | ||||
| -- Use Shift+Tab to jump to the previous option in a popup menu | ||||
| vim.keymap.set('i', '<S-Tab>', function() | ||||
|     return vim.fn.pumvisible() == 1 and '<C-P>' or '<Tab>' | ||||
| end, {expr = true}) | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Telescope | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| -- Use ';' to search active buffers | ||||
| map('n', ';', '<cmd>Telescope buffers<CR>') | ||||
| 
 | ||||
| -- Use Ctrl+P to show a list of files | ||||
| map('n', '<C-P>', '<cmd>Telescope find_files<CR>') | ||||
| 
 | ||||
| -- Live Grep | ||||
| map('n', '<leader>fg', '<cmd>Telescope live_grep<CR>') | ||||
| 
 | ||||
| -- Metals commands | ||||
| map('n', '<leader>fm', '<cmd>Telescope metals commands<CR>') | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Trouble | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| -- Show/hide Trouble | ||||
| map('n', '<leader>xx', '<cmd>TroubleToggle<CR>') | ||||
| 
 | ||||
| -- Show workspace diagnostics | ||||
| map('n', '<leader>xw', '<cmd>TroubleToggle workspace_diagnostics<CR>') | ||||
| 
 | ||||
| -- Show document diagnostics | ||||
| map('n', '<leader>xd', '<cmd>TroubleToggle document_diagnostics<CR>') | ||||
| 
 | ||||
| -- Show quickfix | ||||
| map('n', '<leader>xq', '<cmd>TroubleToggle quickfix<CR>') | ||||
| 
 | ||||
| -- Show local list | ||||
| map('n', '<leader>xl', '<cmd>TroubleToggle loclist<CR>') | ||||
| 
 | ||||
| -- Show LSP references | ||||
| map('n', '<leader>xr', '<cmd>TroubleToggle lsp_references<CR>') | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- Floaterm | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| -- Create a new floating terminal | ||||
| vim.g.floaterm_keymap_new = '<leader>tc' | ||||
| 
 | ||||
| -- Move to the previous terminal | ||||
| vim.g.floaterm_keymap_prev = '<leader>tp' | ||||
| 
 | ||||
| -- Move to the next terminal | ||||
| vim.g.floaterm_keymap_next = '<leader>tn' | ||||
| 
 | ||||
| -- Toggle the visibility of the floating terminal | ||||
| vim.g.floaterm_keymap_toggle = '<leader>tt' | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- nnn File Manager | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| -- Toggle the nnn file explorer in a vertical split. | ||||
| map('n', '<C-A>n', '<cmd>NnnExplorer<CR>') | ||||
| 
 | ||||
| -- Toggle the nnn file picker in a floating window. | ||||
| map('n', '<C-A>p', '<cmd>NnnPicker %:p:h<CR>') | ||||
| 
 | ||||
| ----------------------------------------------------------- | ||||
| -- LSP | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>') | ||||
| map('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>') | ||||
| map('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>') | ||||
| map('n', 'gds', '<cmd>lua vim.lsp.buf.document_symbol()<CR>') | ||||
| map('n', 'gws', '<cmd>lua vim.lsp.buf.workspace_symbol()<CR>') | ||||
| map('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>') | ||||
| map('n', '<leader>cl', '<cmd>lua vim.lsp.codelens.run()<CR>') | ||||
| map('n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>') | ||||
| map('n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>') | ||||
| map('n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>') | ||||
| map('n', '<leader>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>') | ||||
| map('n', '<leader>e', '<cmd>lua vim.lsp.diagnostic.open_float()<CR>') | ||||
| map('n', '[c', '<cmd>lua vim.diagnostic.goto_prev { wrap = false }<CR>') | ||||
| map('n', ']c', '<cmd>lua vim.diagnostic.goto_next { wrap = false }<CR>') | ||||
							
								
								
									
										145
									
								
								.config/nvim/lua/packer_init.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								.config/nvim/lua/packer_init.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,145 @@ | |||
| -- Automatically install packer | ||||
| local fn = vim.fn | ||||
| local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' | ||||
| 
 | ||||
| if fn.empty(fn.glob(install_path)) > 0 then | ||||
|   packer_bootstrap = fn.system({ | ||||
|     'git', | ||||
|     'clone', | ||||
|     '--depth', | ||||
|     '1', | ||||
|     'https://github.com/wbthomason/packer.nvim', | ||||
|     install_path | ||||
|   }) | ||||
|   vim.o.runtimepath = vim.fn.stdpath('data') .. '/site/pack/*/start/*,' .. vim.o.runtimepath | ||||
| end | ||||
| 
 | ||||
| -- Use a protected call so we don't error out on first use | ||||
| local status_ok, packer = pcall(require, 'packer') | ||||
| if not status_ok then | ||||
|   return | ||||
| end | ||||
| 
 | ||||
| return require('packer').startup(function(use) | ||||
|     -- Plugin/package manager. | ||||
|     use 'wbthomason/packer.nvim' | ||||
| 
 | ||||
|     -- Required for a number of Lua plugins. | ||||
|     use 'nvim-lua/plenary.nvim' | ||||
| 
 | ||||
|     -- Color schemes | ||||
|     use 'sainnhe/gruvbox-material' | ||||
|     use 'rebelot/kanagawa.nvim' | ||||
|     use 'marko-cerovac/material.nvim' | ||||
| 
 | ||||
|     -- Telescope: fuzzy finder | ||||
|     use { | ||||
|         'nvim-telescope/telescope.nvim', | ||||
|         requires = {  | ||||
|             { 'nvim-lua/plenary.nvim' }  | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     -- Native Telescope implementation based on FZF for performance. | ||||
|     use { | ||||
|         'nvim-telescope/telescope-fzf-native.nvim',  | ||||
|         run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build'  | ||||
|     } | ||||
| 
 | ||||
|     -- A pretty list for showing diagnostics, references, telescope results,  | ||||
|     -- quickfix and location lists to help you solve all the trouble your code  | ||||
|     -- is causing. | ||||
|     use { | ||||
|         'folke/trouble.nvim', | ||||
|         requires = 'kyazdani42/nvim-web-devicons', | ||||
|         config = function() | ||||
|             require('trouble').setup() | ||||
|         end | ||||
|     } | ||||
| 
 | ||||
|     -- Treesitter: Neovim bindings for the Tree-sitter parser generator tool and  | ||||
|     -- incremental parsing library. | ||||
|     use { | ||||
|         'nvim-treesitter/nvim-treesitter', | ||||
|         run = ':TSUpdate' | ||||
|     } | ||||
| 
 | ||||
|     -- Neovim-native LSP Implementation | ||||
|     use 'neovim/nvim-lspconfig' | ||||
| 
 | ||||
|     -- nvim-cmp - completion plugin, used for LSP and Metals | ||||
|     use { | ||||
|         'hrsh7th/nvim-cmp', | ||||
|         requires = { | ||||
|             'hrsh7th/cmp-nvim-lsp', -- add once LSP is supported | ||||
|             'hrsh7th/cmp-path', | ||||
|             'hrsh7th/cmp-buffer' | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     -- Metals, for Scala development. | ||||
|     use { | ||||
|         'scalameta/nvim-metals',  | ||||
|         requires = { 'nvim-lua/plenary.nvim' }, | ||||
|         --ft = { 'scala', 'sbt' } -- this is busted for some reason. | ||||
|     } | ||||
| 
 | ||||
|     -- Lualine (configures the bottom bars) | ||||
|     use { | ||||
|         'nvim-lualine/lualine.nvim', | ||||
|         requires = 'kyazdani42/nvim-web-devicons' | ||||
|     } | ||||
| 
 | ||||
|     -- bufferline - shows a bar at the top with open buffers | ||||
|     -- using packer.nvim | ||||
|     use { | ||||
|         'akinsho/bufferline.nvim',  | ||||
|         requires = 'kyazdani42/nvim-web-devicons', | ||||
|         config = function() | ||||
|             require('bufferline').setup() | ||||
|         end | ||||
|     } | ||||
| 
 | ||||
|     -- Floating terminal | ||||
|     use 'voldikss/vim-floaterm' | ||||
| 
 | ||||
|     -- Show signs for Git | ||||
|     use { | ||||
|         'lewis6991/gitsigns.nvim', | ||||
|         config = function() | ||||
|             require('gitsigns').setup() | ||||
|         end | ||||
|     } | ||||
| 
 | ||||
|     -- Show unobtrusive indentation guides | ||||
|     use { | ||||
|         'lukas-reineke/indent-blankline.nvim', | ||||
|         config = function() | ||||
|             require('indent_blankline').setup() | ||||
|         end | ||||
|     } | ||||
| 
 | ||||
|     -- File manager for Neovim (backed by nnn) | ||||
|     use { | ||||
|         'luukvbaal/nnn.nvim', | ||||
|         config = function()  | ||||
|             require('nnn').setup() | ||||
|         end | ||||
|     } | ||||
| 
 | ||||
|     -- Improve startup time by replacing default filetype autocmds | ||||
|     use 'nathom/filetype.nvim' | ||||
| 
 | ||||
|     -- Improve the core vim.ui | ||||
|     use 'stevearc/dressing.nvim' | ||||
| 
 | ||||
|     -- Special highlighting and tracking for certain notable words | ||||
|     use { | ||||
|         'folke/todo-comments.nvim', | ||||
|         requires = 'nvim-lua/plenary.nvim', | ||||
|         config = function() | ||||
|             require('todo-comments').setup() | ||||
|         end | ||||
|     } | ||||
| 
 | ||||
| end) | ||||
							
								
								
									
										26
									
								
								.config/nvim/lua/plugins/cmp.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.config/nvim/lua/plugins/cmp.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| local cmp = require('cmp') | ||||
| 
 | ||||
| cmp.setup{ | ||||
|     sources = { | ||||
|         { name = 'nvim_lsp' }, | ||||
|         { name = 'path' }, | ||||
|         { name = 'buffer', option = { keyword_length = 3 }, }, | ||||
|     }, | ||||
|     mapping = { | ||||
|         ['<CR>'] = cmp.mapping.confirm({}), | ||||
|         ['<Tab>'] = function(fallback) | ||||
|             if cmp.visible() then | ||||
|                 cmp.select_next_item() | ||||
|             else | ||||
|                 fallback() | ||||
|             end | ||||
|         end, | ||||
|         ['<S-Tab>'] = function(fallback) | ||||
|             if cmp.visible() then | ||||
|                 cmp.select_prev_item() | ||||
|             else | ||||
|                 fallback() | ||||
|             end | ||||
|         end, | ||||
|     }, | ||||
| } | ||||
							
								
								
									
										3
									
								
								.config/nvim/lua/plugins/floaterm.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.config/nvim/lua/plugins/floaterm.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| vim.g.floaterm_width = 0.8 | ||||
| vim.g.floaterm_height = 0.8 | ||||
| vim.g.floaterm_gitcommit = 'split' | ||||
							
								
								
									
										25
									
								
								.config/nvim/lua/plugins/lsp.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.config/nvim/lua/plugins/lsp.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| local lsp = require('lspconfig') | ||||
| 
 | ||||
| -- Use an on_attach function to configure after LSP attaches to buffer | ||||
| local on_attach = function(client, bufnr) | ||||
|   local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end | ||||
|   buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') | ||||
| end | ||||
| 
 | ||||
| -- Advertise the nvim-cmp capabilities to LSP servers | ||||
| local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
| 
 | ||||
| -- nvim-cmp support. | ||||
| capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) | ||||
| 
 | ||||
| -- zls = zig language server | ||||
| lsp.zls.setup { | ||||
|   on_attach = on_attach, | ||||
|   flags = { | ||||
|     debounce_text_changes = 150 | ||||
|   }, | ||||
|   capabilities = capabilities | ||||
| } | ||||
| 
 | ||||
| -- texlab = latex language server  | ||||
| lsp.texlab.setup{} | ||||
							
								
								
									
										16
									
								
								.config/nvim/lua/plugins/lualine.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.config/nvim/lua/plugins/lualine.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| -- Awaiting metals setup | ||||
| local function metals_status_for_lualine() | ||||
|     return vim.g["metals_status"] or "" | ||||
| end | ||||
| 
 | ||||
| require('lualine').setup { | ||||
|     options = { | ||||
|         theme = 'material' | ||||
|     }, | ||||
|     sections = {  | ||||
|         lualine_c = {  | ||||
|             'filename',  | ||||
|             metals_status_for_lualine  | ||||
|         }  | ||||
|     } | ||||
| } | ||||
							
								
								
									
										35
									
								
								.config/nvim/lua/plugins/scala.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								.config/nvim/lua/plugins/scala.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| -- Note that Metals _does not use nvim-lspconfig_. | ||||
| -- It still uses the nvim LSP, however. | ||||
| 
 | ||||
| -- Autocmd that will actually be in charging of starting the whole thing | ||||
| local nvim_metals_group = vim.api.nvim_create_augroup( | ||||
|     'nvim-metals',  | ||||
|     {  | ||||
|         clear = true  | ||||
|     } | ||||
| ) | ||||
| 
 | ||||
| vim.api.nvim_create_autocmd('FileType', { | ||||
|     pattern = { 'scala', 'sbt', 'java' }, | ||||
|     callback = function() | ||||
|         metals_config = require('metals').bare_config() | ||||
| 
 | ||||
|         -- Capabilities for completion. | ||||
|         local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
|         capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) | ||||
| 
 | ||||
|         metals_config.settings = { | ||||
|             showImplicitArguments = true, | ||||
|             showInferredType = true | ||||
|         } | ||||
| 
 | ||||
|         -- This is a tricky option and _nothing_ will show up unless... | ||||
|         -- "However, to enable this you _must_ have the metals status shown in your  | ||||
|         --  status bar somehow." | ||||
|         metals_config.init_options.statusBarProvider = 'on' | ||||
| 
 | ||||
|         metals_config.capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) | ||||
|         require('metals').initialize_or_attach(metals_config) | ||||
|     end, | ||||
|     group = nvim_metals_group, | ||||
| }) | ||||
							
								
								
									
										4
									
								
								.config/nvim/lua/plugins/telescope.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.config/nvim/lua/plugins/telescope.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| require('telescope').setup() | ||||
| 
 | ||||
| -- This is required to use FZF with Telescope. | ||||
| require('telescope').load_extension('fzf') | ||||
							
								
								
									
										28
									
								
								.config/nvim/lua/plugins/treesitter.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.config/nvim/lua/plugins/treesitter.lua
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| require'nvim-treesitter.configs'.setup { | ||||
|   -- One of "all", "maintained", or a list of languages | ||||
|   ensure_installed = {  | ||||
|       "c", "zig", "bash", "scala", "yaml", "html", "css", "javascript", | ||||
|       "latex", "clojure", "lua", "cpp" | ||||
|   }, | ||||
| 
 | ||||
|   -- Install languages synchronously (only applied to `ensure_installed`) | ||||
|   sync_install = false, | ||||
| 
 | ||||
|   -- List of parsers to ignore installing | ||||
|   ignore_install = { }, | ||||
| 
 | ||||
|   highlight = { | ||||
|     enable = true, | ||||
|     disable = {}, | ||||
|     -- Setting this to true will run `:h syntax` and tree-sitter at the same  | ||||
|     -- time. Set this to `true` if you depend on 'syntax' being enabled (like  | ||||
|     -- for indentation). Using this option may slow down your editor, and you  | ||||
|     -- may see some duplicate highlights. Instead of true it can also be a list  | ||||
|     -- of languages | ||||
|     additional_vim_regex_highlighting = false, | ||||
|   }, | ||||
| 
 | ||||
|   indent = { | ||||
|     enable = true | ||||
|   } | ||||
| } | ||||
							
								
								
									
										137
									
								
								.zshrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								.zshrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,137 @@ | |||
| export ZSH="$HOME/.oh-my-zsh" | ||||
| 
 | ||||
| ZSH_THEME="spaceship" | ||||
| SPACESHIP_TIME_SHOW=true | ||||
| SPACESHIP_TIME_FORMAT="%D{%D %r}" | ||||
| SPACESHIP_HG_SHOW=false | ||||
| SPACESHIP_HG_BRANCH_SHOW=false | ||||
| SPACESHIP_HG_STATUS_SHOW=false | ||||
| SPACESHIP_XCODE_SHOW_LOCAL=false | ||||
| SPACESHIP_SWIFT_SHOW_LOCAL=false | ||||
| SPACESHIP_PHP_SHOW=false | ||||
| SPACESHIP_AWS_SHOW=false | ||||
| SPACESHIP_GCLOUD_SHOW=false | ||||
| SPACESHIP_CONDA_SHOW=false | ||||
| SPACESHIP_DOTNET_SHOW=false | ||||
| SPACESHIP_EMBER_SHOW=false | ||||
| SPACESHIP_BATTERY_SHOW=false | ||||
| 
 | ||||
| VI_MODE_RESET_PROMPT_ON_MODE_CHANGE=true | ||||
| 
 | ||||
| # Uncomment the following line if you want to disable marking untracked files | ||||
| # under VCS as dirty. This makes repository status check for large repositories | ||||
| # much, much faster. | ||||
| DISABLE_UNTRACKED_FILES_DIRTY="true" | ||||
| 
 | ||||
| plugins=(gitfast vi-mode) | ||||
| 
 | ||||
| source $ZSH/oh-my-zsh.sh | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # Personalized Logging for Shell Setup | ||||
| # ============================================================================= | ||||
| logging_enabled=false | ||||
| log_dir="$HOME/log/$USER" | ||||
| log_file="$log_dir/shell.log" | ||||
| 
 | ||||
| if [ -d "$log_dir" ]; then | ||||
|     export SHELL_LOG_FILE="$log_file" | ||||
|     logging_enabled=true | ||||
|     touch "$SHELL_LOG_FILE" | ||||
| fi | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # Common Environment Configuration | ||||
| # ============================================================================= | ||||
| export EDITOR=nvim | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # PATH | ||||
| # ============================================================================= | ||||
| if [ -d "$HOME/bin" ]; then | ||||
|     export PATH="$HOME/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| if [ -d "$HOME/.local/bin" ]; then | ||||
|     export PATH="$HOME/.local/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| if [ -f "$HOME/.cargo/env" ]; then | ||||
|     source "$HOME/.cargo/env" | ||||
| fi | ||||
| 
 | ||||
| if [ -f ~/.fzf.zsh ]; then | ||||
|     source ~/.fzf.zsh | ||||
| fi | ||||
| 
 | ||||
| export RACKET_HOME="$HOME/opt/racket" | ||||
| if [ -d "$RACKET_HOME" ]; then | ||||
|     export PATH="$RACKET_HOME/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| export BUILDKIT_HOME="$HOME/opt/buildkit" | ||||
| if [ -d "$BUILDKIT_HOME" ]; then | ||||
|     export PATH="$HOME/opt/buildkit/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| export JAVA_HOME="$HOME/opt/jdk" | ||||
| if [ -d "$JAVA_HOME/bin" ]; then | ||||
|     export PATH="$JAVA_HOME/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| export COURSIER_HOME="$HOME/.local/share/coursier" | ||||
| if [ -d "$COURSIER_HOME/bin" ]; then | ||||
|     export PATH="$COURSIER_HOME/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| export N_PREFIX=/home/pfm/.n | ||||
| if [ -d "$N_PREFIX/bin" ]; then | ||||
|     export PATH="$N_PREFIX/bin:$PATH" | ||||
| fi | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # SSH Agent Management | ||||
| # ============================================================================= | ||||
| ssh_agent_startup_file="$HOME/.startup/start-ssh-agent" | ||||
| if [ -f "$ssh_agent_startup_file" ]; then | ||||
|     source "$ssh_agent_startup_file" | ||||
| else | ||||
|     if $logging_enabled; then | ||||
|         echo "[warn] SSH Agent startup code missing at " \ | ||||
|             "'$ssh_agent_startup_file': " \ | ||||
|             "see git@git.sr.ht:~eidolon/scripts" >> "$log_file" | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # Aliases | ||||
| # ============================================================================= | ||||
| if command -v exa > /dev/null 2>&1; then | ||||
|     alias ls='exa' | ||||
|     alias ll='exa -l' | ||||
| else | ||||
|     if $logging_enabled; then | ||||
|         echo "[warn] exa is not setup! Using the system ls" >> "$log_file" | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| if command -v nvim > /dev/null 2>&1; then | ||||
|     alias vim='nvim' | ||||
| else | ||||
|     if $logging_enabled; then | ||||
|         echo "[warn] Neovim is not setup! Using the system vim" >> "$log_file" | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # Scala/SBT Setup | ||||
| # ============================================================================= | ||||
| if command -v sbt > /dev/null 2>&1; then | ||||
|     export SBT_OPTS="-XX:+UseG1GC -Xmx2048m" | ||||
| fi | ||||
| 
 | ||||
| # ============================================================================= | ||||
| # Enable Command Syntax Highlighting | ||||
| # This must be the last item in this file. | ||||
| # ============================================================================= | ||||
| source $HOME/src/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh | ||||
							
								
								
									
										120
									
								
								install.sh
									
										
									
									
									
								
							
							
						
						
									
										120
									
								
								install.sh
									
										
									
									
									
								
							|  | @ -30,6 +30,12 @@ bashrc_source="${__dir}/${bashrc}" | |||
| bashrc_target="${HOME}/${bashrc}" | ||||
| bashrc_backup="${backup_dir}/${bashrc_name}" | ||||
| 
 | ||||
| zshrc=".zshrc" | ||||
| zshrc_name="zshrc" | ||||
| zshrc_source="${__dir}/${zshrc}" | ||||
| zshrc_target="${HOME}/${zshrc}" | ||||
| zshrc_backup="${backup_dir}/${zshrc_name}" | ||||
| 
 | ||||
| ps1=".startup/ps1" | ||||
| ps1_name="ps1" | ||||
| ps1_source="${__dir}/${ps1}" | ||||
|  | @ -90,64 +96,8 @@ ssh_agent_source="${__dir}/${ssh_agent}" | |||
| ssh_agent_target="${HOME}/${ssh_agent}" | ||||
| ssh_agent_backup="${backup_dir}/${ssh_agent_name}" | ||||
| 
 | ||||
| # Note: neovim is spread across several files, and this might be a rather | ||||
| # inefficient way to do this. Alas, will deal with it for now. | ||||
| nvim=".config/nvim/init.vim" | ||||
| nvim_name="nvim" | ||||
| nvim_source="${__dir}/${nvim}" | ||||
| nvim_target="${HOME}/${nvim}" | ||||
| nvim_backup="${backup_dir}/${nvim_name}" | ||||
| 
 | ||||
| nvim_json=".local/share/nvim/site/ftplugin/json.vim" | ||||
| nvim_json_name="nvim_json" | ||||
| nvim_json_source="${__dir}/${nvim_json}" | ||||
| nvim_json_target="${HOME}/${nvim_json}" | ||||
| nvim_json_backup="${backup_dir}/${nvim_json_name}" | ||||
| 
 | ||||
| nvim_tex=".local/share/nvim/site/ftplugin/tex.vim" | ||||
| nvim_tex_name="nvim_tex" | ||||
| nvim_tex_source="${__dir}/${nvim_tex}" | ||||
| nvim_tex_target="${HOME}/${nvim_tex}" | ||||
| nvim_tex_backup="${backup_dir}/${nvim_tex_name}" | ||||
| 
 | ||||
| nvim_lint=".local/share/nvim/site/plugin/nvim-lint.vim" | ||||
| nvim_lint_name="nvim_lint" | ||||
| nvim_lint_source="${__dir}/${nvim_lint}" | ||||
| nvim_lint_target="${HOME}/${nvim_lint}" | ||||
| nvim_lint_backup="${backup_dir}/${nvim_lint_name}" | ||||
| 
 | ||||
| nvim_web_devicons=".local/share/nvim/site/plugin/nvim-web-devicons.vim" | ||||
| nvim_web_devicons_name="nvim_web_devicons" | ||||
| nvim_web_devicons_source="${__dir}/${nvim_web_devicons}" | ||||
| nvim_web_devicons_target="${HOME}/${nvim_web_devicons}" | ||||
| nvim_web_devicons_backup="${backup_dir}/${nvim_web_devicons_name}" | ||||
| 
 | ||||
| nvim_telescope=".local/share/nvim/site/plugin/telescope.nvim.vim" | ||||
| nvim_telescope_name="nvim_telescope" | ||||
| nvim_telescope_source="${__dir}/${nvim_telescope}" | ||||
| nvim_telescope_target="${HOME}/${nvim_telescope}" | ||||
| nvim_telescope_backup="${backup_dir}/${nvim_telescope_name}" | ||||
| 
 | ||||
| nvim_trouble=".local/share/nvim/site/plugin/trouble.nvim.vim" | ||||
| nvim_trouble_name="nvim_trouble" | ||||
| nvim_trouble_source="${__dir}/${nvim_trouble}" | ||||
| nvim_trouble_target="${HOME}/${nvim_trouble}" | ||||
| nvim_trouble_backup="${backup_dir}/${nvim_trouble_name}" | ||||
| 
 | ||||
| nvim_gitgutter=".local/share/nvim/site/plugin/vim-gitgutter.vim" | ||||
| nvim_gitgutter_name="nvim_gitgutter" | ||||
| nvim_gitgutter_source="${__dir}/${nvim_gitgutter}" | ||||
| nvim_gitgutter_target="${HOME}/${nvim_gitgutter}" | ||||
| nvim_gitgutter_backup="${backup_dir}/${nvim_gitgutter_name}" | ||||
| 
 | ||||
| nvim_vimtex=".local/share/nvim/site/plugin/vimtex.vim" | ||||
| nvim_vimtex_name="nvim_vimtex" | ||||
| nvim_vimtex_source="${__dir}/${nvim_vimtex}" | ||||
| nvim_vimtex_target="${HOME}/${nvim_vimtex}" | ||||
| nvim_vimtex_backup="${backup_dir}/${nvim_vimtex_name}" | ||||
| 
 | ||||
| function display_configs { | ||||
|     echo 'Supported config targets: all, bashrc, ps1, profile, i3, i3status, xresources, gitconfig, gitignore, alacritty, fontconfig, ssh_agent, nvim, nvim_json, nvim_tex, nvim_lint, nvim_web_devicons, nvim_telescope, nvim_trouble, nvim_gitgutter, nvim_vimtex' | ||||
|     echo 'Supported config targets: all, bashrc, zshrc, ps1, profile, i3, i3status, xresources, gitconfig, gitignore, alacritty, fontconfig, ssh_agent, nvim' | ||||
| } | ||||
| 
 | ||||
| function display_usage { | ||||
|  | @ -204,6 +154,51 @@ function install_config { | |||
|     fi | ||||
| } | ||||
| 
 | ||||
| function install_neovim { | ||||
| 
 | ||||
|     # Used for diagnostic purposes only - describes the configuration. | ||||
|     local config_name="nvim" | ||||
| 
 | ||||
|     # The location of the configuration to install. | ||||
|     local config_source=".config/nvim/init.lua" | ||||
| 
 | ||||
|     local lua_source=".config/nvim/lua" | ||||
| 
 | ||||
|     # The destination where the symbolic link should be created. | ||||
|     local config_target="${HOME}/.config/nvim/init.lua" | ||||
| 
 | ||||
|     local lua_target="${HOME}/.config/nvim/lua" | ||||
| 
 | ||||
|     # The backup file for this piece of configuration. | ||||
|     local config_backup="${backup_dir}/${config_name}" | ||||
|     local lua_backup="${backup_dir}/nvim-lua" | ||||
| 
 | ||||
|     if [ "$config_selection" = "all" ] || [ "${config_selection}" = "${config_name}" ]; then | ||||
|         echo -n -e "${COLOR_SUCCESS}[+]${NC} Installing '${config_name}' to '${config_target}'... " | ||||
|         if [ -f "${config_target}" ]; then | ||||
|             if $auto_backup; then | ||||
|                 # The file exists, so create a backup and remove the file. | ||||
|                 echo -e "\n\t${COLOR_NOTIFY}[Note]${NC} creating a backup of '${config_target}' and '${lua_target}'" | ||||
|                 cp "${config_target}" "${config_backup}" | ||||
|                 cp -r "${lua_target}" "${lua_backup}" | ||||
|                 rm "${config_target}" | ||||
|                 rm -r "${lua_target}" | ||||
|                 ln -s "${__dir}/${config_source}" "${config_target}" | ||||
|                 ln -s "${__dir}/${lua_source}" "${lua_target}" | ||||
|                 echo -e "\t${COLOR_SUCCESS}[Success]${NC}" | ||||
|             else | ||||
|                 # The caller does not want backups/deletions, so we must abort. | ||||
|                 echo -e "\n\t${COLOR_ERROR}[Error]${NC} Could not install configuration '${config_name}'. This configuration already exists. Please manually remove it or set --auto-backup" | ||||
|             fi | ||||
|         else | ||||
|             # The file doesn't exist, we can safely create a symlink. | ||||
|             ln -s "${__dir}/${config_source}" "${config_target}" | ||||
|             ln -s "${__dir}/${lua_source}" "${lua_target}" | ||||
|             echo -e "${COLOR_SUCCESS}[Success]${NC}" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| while [[ $# -gt 0 ]] | ||||
| do | ||||
| key="$1" | ||||
|  | @ -247,6 +242,7 @@ fi | |||
| 
 | ||||
| # Install all requested configurations. | ||||
| install_config "${bashrc_name}" "${bashrc_source}" "${bashrc_target}" "${bashrc_backup}" | ||||
| install_config "${zshrc_name}" "${zshrc_source}" "${zshrc_target}" "${zshrc_backup}" | ||||
| install_config "${ps1_name}" "${ps1_source}" "${ps1_target}" "${ps1_backup}" | ||||
| install_config "${profile_name}" "${profile_source}" "${profile_target}" "${profile_backup}" | ||||
| install_config "${i3_name}" "${i3_source}" "${i3_target}" "${i3_backup}" | ||||
|  | @ -259,12 +255,4 @@ install_config "${fontconfig_name}" "${fontconfig_source}" "${fontconfig_target} | |||
| install_config "${ssh_agent_name}" "${ssh_agent_source}" "${ssh_agent_target}" "${ssh_agent_backup}" | ||||
| 
 | ||||
| # Note that all of these configurations are Neovim-related: | ||||
| install_config "${nvim_name}" "${nvim_source}" "${nvim_target}" "${nvim_backup}" | ||||
| install_config "${nvim_json_name}" "${nvim_json_source}" "${nvim_json_target}" "${nvim_json_backup}" | ||||
| install_config "${nvim_tex_name}" "${nvim_tex_source}" "${nvim_tex_target}" "${nvim_tex_backup}" | ||||
| install_config "${nvim_lint_name}" "${nvim_lint_source}" "${nvim_lint_target}" "${nvim_lint_backup}" | ||||
| install_config "${nvim_web_devicons_name}" "${nvim_web_devicons_source}" "${nvim_web_devicons_target}" "${nvim_web_devicons_backup}" | ||||
| install_config "${nvim_telescope_name}" "${nvim_telescope_source}" "${nvim_telescope_target}" "${nvim_telescope_backup}" | ||||
| install_config "${nvim_trouble_name}" "${nvim_trouble_source}" "${nvim_trouble_target}" "${nvim_trouble_backup}" | ||||
| install_config "${nvim_gitgutter_name}" "${nvim_gitgutter_source}" "${nvim_gitgutter_target}" "${nvim_gitgutter_backup}" | ||||
| install_config "${nvim_vimtex_name}" "${nvim_vimtex_source}" "${nvim_vimtex_target}" "${nvim_vimtex_backup}" | ||||
| install_neovim | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 pgfm
						pgfm