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