Преглед изворни кода

making my initial nvim setup

Leon Versteeg пре 3 година
комит
25fd5170a8

+ 14 - 0
UltiSnips/markdown.snippets

@@ -0,0 +1,14 @@
+snippet img "Image"
+<Img
+	src="/images/posts/"
+	alt=""
+	width={}
+	height={}
+/>
+endsnippet
+
+snippet flt "Float"
+<Float>
+	$1
+</Float>
+endsnippet

+ 35 - 0
UltiSnips/typescript.snippets

@@ -0,0 +1,35 @@
+snippet cl "console.log" b
+console.log('$1: ', $1);
+endsnippet
+
+snippet ec "export const " b
+export const 
+endsnippet
+
+snippet ce "console.error" b
+if (process.env.NODE_ENV !== 'production') console.error(error)
+endsnippet
+
+snippet des "description" b
+describe("$1", () => {
+	$2
+})
+endsnippet
+
+snippet it "it" b
+it("$1", async () => {
+	$2
+})
+endsnippet
+
+snippet bf "before" b
+before(() => {
+	$1
+})
+endsnippet
+
+snippet bfe "before each" b
+beforeEach(() => {
+	$1
+})
+endsnippet

+ 154 - 0
UltiSnips/typescriptreact.snippets

@@ -0,0 +1,154 @@
+# React
+# - - - - - - - - - - - - - - - - - - 
+snippet fc "Functional Component" b
+import React from "react";
+
+const $1: React.FC = () => {
+	return (
+		$2
+	)
+}
+
+export default $1;
+endsnippet
+
+snippet ue "use effect" b
+useEffect(() => {
+	$1
+}, []);
+endsnippet
+
+snippet us "use state" b
+const [$1, $2] = useState();
+endsnippet
+
+snippet um "use memo" b
+const $1 = useMemo(() => {
+	$2
+}, [$3]);
+endsnippet
+
+snippet ul "use loading state" b
+const [loading, setLoading] = useLoading();
+endsnippet
+
+snippet dis "eslint disable next line exhaustive deps" b
+// eslint-disable-next-line react-hooks/exhaustive-deps
+endsnippet
+
+snippet input "Form Input"
+<Input
+	name="$1"
+	register={register}
+	error={errors.$1?.message}
+/>
+endsnippet
+
+snippet cn "class name property"
+className="$1"
+endsnippet
+
+snippet d "class name property" b
+<div className="$1">
+	$2
+</div>
+endsnippet
+
+snippet cl "console.log" b
+console.log('$1: ', $1);
+endsnippet
+
+# Node
+# - - - - - - - - - - - - - - - - - - 
+
+snippet ce "console.error" b
+if (process.env.NODE_ENV !== 'production') console.error(error)
+endsnippet
+
+# TailwindCSS
+# - - - - - - - - - - - - - - - - - - 
+
+snippet tp "text-primary"
+text-primary-light dark:text-primary-dark
+endsnippet
+
+snippet tg1 "text-gray-100"
+text-gray-100 dark:text-gray-900
+endsnippet
+
+snippet tg2 "text-gray-200"
+text-gray-200 dark:text-gray-800
+endsnippet
+
+snippet tg3 "text-gray-300"
+text-gray-300 dark:text-gray-700
+endsnippet
+
+snippet tg4 "text-gray-400"
+text-gray-400 dark:text-gray-600
+endsnippet
+
+snippet tg5 "text-gray-500"
+text-gray-500
+endsnippet
+
+snippet tg6 "text-gray-600"
+text-gray-600 dark:text-gray-400
+endsnippet
+
+snippet tg7 "text-gray-700"
+text-gray-700 dark:text-gray-300
+endsnippet
+
+snippet tg8 "text-gray-800"
+text-gray-800 dark:text-gray-200
+endsnippet
+
+snippet tg9 "text-gray-900"
+text-gray-900 dark:text-gray-100
+endsnippet
+
+snippet tw "text-white"
+text-white dark:text-black
+endsnippet
+
+snippet tw "text-white"
+text-white dark:text-black
+endsnippet
+
+# NextJS
+# - - - - - - - - - - - - - - - - - - 
+
+snippet np "NextJS Page" b
+import { NextPage } from "next";
+
+const $1: NextPage = () => {
+	return (
+		$2
+	);
+};
+
+export default $1;
+endsnippet
+
+snippet ed "export default" b
+export default $1
+endsnippet
+
+# Remix
+# - - - - - - - - - - - - - - - - - - 
+
+snippet loader "remix loader" b
+export const loader = async ({ params }: LoaderArgs) => {
+  return {}
+}
+endsnippet
+
+
+# Other
+# - - - - - - - - - - - - - - - - - - 
+
+snippet inv "invariant" b
+	invariant($1, 'expected $1')
+endsnippet
+

+ 36 - 0
init.vim

@@ -0,0 +1,36 @@
+" cSpell:words goyo floaterm
+call plug#begin()
+source $HOME/.config/nvim/nvim-config/plugins.vim
+call plug#end()
+
+source $HOME/.config/nvim/nvim-config/general.vim
+source $HOME/.config/nvim/nvim-config/theme.vim
+
+source $HOME/.config/nvim/nvim-config/init.lua
+source $HOME/.config/nvim/nvim-config/lualine.lua
+source $HOME/.config/nvim/nvim-config/nvim-treesitter.lua
+
+source $HOME/.config/nvim/nvim-config/abbreviations.vim
+source $HOME/.config/nvim/nvim-config/coc.vim
+source $HOME/.config/nvim/nvim-config/goyo.vim
+source $HOME/.config/nvim/nvim-config/start-screen.vim
+source $HOME/.config/nvim/nvim-config/vim-test.vim
+
+source $HOME/.config/nvim/nvim-config/leader.vim
+
+" Miscellaneous
+let g:python3_host_prog='/usr/local/bin/python3'
+
+command! LF FloatermNew lf
+let g:airline#extensions#tabline#enabled=1
+let g:vim_markdown_folding_disabled = 1
+
+let g:rooter_patterns = ['.git']
+
+" lf Config
+let g:lf_replace_netrw = 1 " Open lf when vim opens a directory
+let g:lf_width = 0.9
+let g:lf_height = 0.7
+
+" Write all buffers before navigating from Vim to tmux pane
+let g:tmux_navigator_save_on_switch = 2

+ 3 - 0
nvim-config/abbreviations.vim

@@ -0,0 +1,3 @@
+ab cl console.log()<Left>
+ab ce console.error()<Left>
+ab cn className=""<Left>

+ 58 - 0
nvim-config/coc.vim

@@ -0,0 +1,58 @@
+" Thanks https://www.chrisatmachine.com/Neovim/17-snippets/
+" Use <C-l> for trigger snippet expand.
+imap <C-l> <Plug>(coc-snippets-expand)
+
+" Use <C-j> for select text for visual placeholder of snippet.
+vmap <C-j> <Plug>(coc-snippets-select)
+
+" Use <C-j> for jump to next placeholder, it's default of coc.nvim
+let g:coc_snippet_next = '<c-j>'
+
+" Use <C-k> for jump to previous placeholder, it's default of coc.nvim
+let g:coc_snippet_prev = '<c-k>'
+
+" Use <C-j> for both expand and jump (make expand higher priority.)
+imap <C-j> <Plug>(coc-snippets-expand-jump)
+
+" Use `[g` and `]g` to navigate diagnostics
+" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
+nmap <silent> [g <Plug>(coc-diagnostic-prev)
+nmap <silent> ]g <Plug>(coc-diagnostic-next)
+
+" GoTo code navigation.
+nmap <silent> gd <Plug>(coc-definition)
+nmap <silent> gy <Plug>(coc-type-definition)
+nmap <silent> gi <Plug>(coc-implementation)
+nmap <silent> gr <Plug>(coc-references)
+
+inoremap <silent><expr> <Tab>
+
+" Use K to show documentation in preview window.
+nnoremap <silent> K :call <SID>show_documentation()<CR>
+
+function! s:show_documentation()
+  if CocAction('hasProvider', 'hover')
+    call CocActionAsync('doHover')
+  else
+    call feedkeys('K', 'in')
+  endif
+endfunction
+
+" MDX
+" Thanks https://github.com/neoclide/coc-prettier/issues/127#issuecomment-850598753
+let g:coc_filetype_map = { 'markdown.mdx': 'mdx' }
+
+" use <tab> for trigger completion and navigate to the next complete item
+function! s:check_back_space() abort
+  let col = col('.') - 1
+  return !col || getline('.')[col - 1]  =~ '\s'
+endfunction
+
+" Use tab for trigger completion with characters ahead and navigate.
+" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
+" other plugin before putting this into your config.
+inoremap <silent><expr> <TAB>
+      \ pumvisible() ? "\<C-n>" :
+      \ <SID>check_back_space() ? "\<TAB>" :
+      \ coc#refresh()
+inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"

+ 80 - 0
nvim-config/general.vim

@@ -0,0 +1,80 @@
+set nocompatible
+filetype indent plugin on
+set updatetime=100
+set cursorline
+set hidden
+set wildmenu
+set showcmd
+set hlsearch
+set incsearch
+set ignorecase
+set smartcase
+set backspace=indent,eol,start
+set lazyredraw
+set autoindent
+set nostartofline
+set ruler
+set cmdheight=1
+set laststatus=2
+set confirm
+set mouse=a
+set number
+set hid
+set notimeout ttimeout ttimeoutlen=200
+set nowrap
+set t_Co=256
+
+" No annoying sound on errors
+set noerrorbells
+set novisualbell
+set t_vb=
+set tm=500
+set encoding=utf8
+
+" Turn backup off
+set nobackup
+set nowb
+set noswapfile
+
+" Indentation 
+set expandtab
+set smarttab
+set shiftwidth=2
+set softtabstop=2
+set tabstop=2
+
+set rtp+=/usr/local/opt/fzf
+
+" Remap yank & paste
+vnoremap <C-c> "+y
+map <C-p> "+P
+
+" Yank to end of line
+nnoremap Y yg_
+
+" Center next search results
+" cspell:disable
+nnoremap n nzzzv
+nnoremap N Nzzzv
+" cspell:enable
+
+" Better J cursor position
+nnoremap J mzJ`z
+
+" Undo break points
+inoremap , ,<c-g>u
+inoremap { {<c-g>u
+inoremap } }<c-g>u
+inoremap [ [<c-g>u
+inoremap ] ]<c-g>u
+inoremap ( (<c-g>u
+inoremap ) )<c-g>u
+
+" Jumplist mutation
+nnoremap <expr> k (v:count > 5 ? "m'" . v:count : "") . 'k'
+nnoremap <expr> j (v:count > 5 ? "m'" . v:count : "") . 'j'
+
+" Moving text
+vnoremap J :m '>+1<CR>gv=gv
+vnoremap K :m '<-2<CR>gv=gv
+

+ 34 - 0
nvim-config/goyo.vim

@@ -0,0 +1,34 @@
+" Color name (:help cterm-colors) or ANSI code
+let g:limelight_conceal_ctermfg = 'gray'
+let g:limelight_conceal_ctermfg = 240
+
+function! s:goyo_enter()
+  if executable('tmux') && strlen($TMUX)
+    silent !tmux set status off
+    silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z
+  endif
+  set noshowcmd
+  set noshowmode
+  set scrolloff=999
+  set spell spelllang=en_us
+  set wrap
+  set nolist
+  set linebreak
+  Limelight
+endfunction
+
+function! s:goyo_leave()
+  if executable('tmux') && strlen($TMUX)
+    silent !tmux set status on
+    silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z
+  endif
+  set nospell
+  set nowrap
+  set scrolloff=5
+  set showcmd
+  set showmode
+  Limelight!
+endfunction
+
+autocmd! User GoyoEnter nested call <SID>goyo_enter()
+autocmd! User GoyoLeave nested call <SID>goyo_leave()

+ 154 - 0
nvim-config/init.lua

@@ -0,0 +1,154 @@
+require('catppuccin').setup {
+  transparent_background = true,
+}
+vim.cmd[[set termguicolors]]
+vim.cmd[[syntax enable]]
+vim.cmd[[colorscheme catppuccin]]
+vim.cmd[[hi CursorLine guibg=none]]
+vim.cmd[[hi CursorLineNr guifg=#F5C2E7]]
+
+-- NOTE: https://github.com/neoclide/coc.nvim/blob/master/doc/coc.txt
+-- NOTE: https://github.com/catppuccin/nvim/blob/main/lua/catppuccin/core/color_palette.lua
+vim.cmd[[hi CocErrorHighlight guifg=#F28FAD]]
+vim.cmd[[hi CocErrorSign guifg=#F28FAD]]
+vim.cmd[[hi CocErrorVirtualText guifg=#F28FAD]]
+-- vim.cmd[[hi CocErrorLine guifg=#F28FAD]]
+
+vim.cmd[[hi CocHintHighlight guifg=#F5E0DC]]
+vim.cmd[[hi CocHintSign guifg=#F5E0DC]]
+vim.cmd[[hi CocHintVirtualText guifg=#F5E0DC]]
+-- vim.cmd[[hi CocHintLine guifg=#F5E0DC]]
+
+vim.cmd[[hi CocInfoHighlight guifg=#89DCEB]]
+vim.cmd[[hi CocInfoSign guifg=#89DCEB]]
+vim.cmd[[hi CocInfoVirtualText guifg=#89DCEB]]
+-- vim.cmd[[hi CocInfoLine guifg=#89DCEB]]
+
+vim.cmd[[hi CocWarningHighlight guifg=#FAE3B0]]
+vim.cmd[[hi CocWarningSign guifg=#FAE3B0]]
+vim.cmd[[hi CocWarningVirtualText guifg=#FAE3B0]]
+-- vim.cmd[[hi CocWarningLine guifg=#FAE3B0]]
+
+-- vim.cmd[[hi CocDeprecatedHighlight guifg=#f28fad]]
+-- vim.cmd[[hi CocFadeOut guifg=#f28fad]]
+-- vim.cmd[[hi CocStrikeThrough guifg=#f28fad]]
+-- vim.cmd[[hi CocUnusedHighlight guifg=#f28fad]]
+
+require("transparent").setup({
+  enable = true,
+  extra_groups = {
+    -- akinsho/nvim-bufferline.lua
+    "BufferLineTabClose",
+    "BufferLineFill",
+    "BufferLineBackground",
+    "BufferLineSeparator",
+    "BufferLineIndicatorSelected",
+  },
+})
+
+require('colorizer').setup()
+require('hop').setup()
+require('Comment').setup()
+require("harpoon").setup({
+  global_settings = {
+    mark_branch = true
+  }
+})
+require'lspconfig'.tailwindcss.setup {}
+
+require("null-ls").setup({
+    sources = { },
+})
+
+require'nvim-web-devicons'.setup()
+
+local telescope = require('telescope')
+
+telescope.setup {
+  defaults = {
+    sorting_strategy = "ascending",
+    prompt_prefix = " ",
+    prompt_position = "top"
+  },
+  pickers = {
+    git_files = {
+      layout_config = {
+        preview_width = 0.6,
+        prompt_position = "top"
+      }
+    },
+    commands = {
+      layout_config = {
+        prompt_position = "top"
+      }
+    },
+    git_status = {
+      layout_config = {
+        prompt_position = "top"
+      }
+    }
+  }
+}
+
+telescope.load_extension('coc')
+telescope.load_extension('harpoon')
+
+require("bufferline").setup {
+  options = {
+    separator_style = {"", ""},
+    indicator_icon = "",
+    show_buffer_close_icons = false,
+    show_close_icon = false,
+    show_tab_indicators = false
+  }
+}
+
+require("todo-comments").setup { }
+
+require('gitsigns').setup {
+  signs = {
+    add = { hl = "GitSignsAdd", text = "", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" },
+    change = { hl = "GitSignsChange", text = "", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
+    delete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
+    topdelete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
+    changedelete = { hl = "GitSignsChange", text = "", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
+  },
+  signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
+  numhl = true, -- Toggle with `:Gitsigns toggle_numhl`
+  linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
+  word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
+  watch_gitdir = {
+    interval = 1000,
+    follow_files = true,
+  },
+  attach_to_untracked = true,
+  current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
+  current_line_blame_opts = {
+    virt_text = true,
+    virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
+    delay = 1000,
+    ignore_whitespace = false,
+  },
+  current_line_blame_formatter_opts = {
+    relative_time = false,
+  },
+  sign_priority = 6,
+  update_debounce = 100,
+  status_formatter = nil, -- Use default
+  max_file_length = 40000,
+  preview_config = {
+    -- Options passed to nvim_open_win
+    border = "single",
+    style = "minimal",
+    relative = "cursor",
+    row = 0,
+    col = 1,
+  },
+  yadm = {
+    enable = false,
+  },
+}
+
+vim.cmd[[command! -nargs=0 GitFiles :Telescope git_files ]]
+vim.cmd[[command! -nargs=0 Commands :Telescope commands ]]
+vim.cmd[[command! -nargs=0 GitStatus :Telescope git_status ]]

+ 64 - 0
nvim-config/leader.vim

@@ -0,0 +1,64 @@
+" cSpell:ignore prevchunk prevconflict lfcd goyo
+let mapleader=" "
+
+" harpoon
+nnoremap <silent><leader><leader> :lua require("harpoon.ui").toggle_quick_menu()<CR>
+nnoremap <silent><leader>' :lua require("harpoon.mark").add_file()<CR>
+nnoremap <silent><leader>1 :lua require("harpoon.ui").nav_file(1)<CR>
+nnoremap <silent><leader>2 :lua require("harpoon.ui").nav_file(2)<CR>
+nnoremap <silent><leader>3 :lua require("harpoon.ui").nav_file(3)<CR>
+nnoremap <silent><leader>4 :lua require("harpoon.ui").nav_file(4)<CR>
+nnoremap <silent><leader>5 :lua require("harpoon.ui").nav_file(5)<CR>
+nnoremap <silent><leader>6 :lua require("harpoon.ui").nav_file(6)<CR>
+nnoremap <silent><leader>7 :lua require("harpoon.ui").nav_file(7)<CR>
+nnoremap <silent><leader>8 :lua require("harpoon.ui").nav_file(8)<CR>
+nnoremap <silent><leader>9 :lua require("harpoon.ui").nav_file(9)<CR>
+
+" coc-git
+nmap <leader>gb <Plug>(coc-git-blame)<cr>
+nmap <leader>gc :CocCommand git.showCommit<cr>
+nmap <leader>gdc :CocCommand git.diffCached<cr>
+nmap <leader>gen <Plug>(coc-git-prevconflict)<cr>
+nmap <leader>gep <Plug>(coc-git-nextconflict)<cr>
+nmap <leader>gg :CocCommand git.chunkStage<cr>
+nmap <leader>gi :CocCommand git.chunkInfo<cr>
+nmap <leader>gn <Plug>(coc-git-nextchunk)<cr>
+nmap <leader>go :CocCommand git.browserOpen<cr>
+nmap <leader>gP :CocCommand git.push<cr>
+nmap <leader>gp <Plug>(coc-git-prevchunk)<cr>
+nmap <leader>gs :GitStatus<cr>
+nmap <leader>gt :CocCommand git.toggleGutters<cr>
+nmap <leader>gu :CocCommand git.chunkUndo<cr>
+nmap <leader>gU :CocCommand git.chunkUnstage<cr>
+nmap <leader>gy :CocCommand git.copyUrl<cr><cr>
+nmap <leader>gz :CocCommand git.foldUnchanged<cr>
+
+" create text object for git chunks
+omap ig <Plug>(coc-git-chunk-inner)
+xmap ig <Plug>(coc-git-chunk-inner)
+omap ag <Plug>(coc-git-chunk-outer)
+xmap ag <Plug>(coc-git-chunk-outer)
+
+" learned
+nmap <leader>% :source %<cr>
+nmap <leader>/ :noh<cr>
+nmap <leader><return> :w!<cr>
+nmap <leader><tab> :bp<cr>
+nmap <leader>a :CocAction<cr>
+nmap <leader>b :Buffers<cr>
+nmap <leader>bb :Buffers<cr>
+nmap <leader>bd :bd<cr>
+nmap <leader>bn :bn<cr>
+nmap <leader>bp :bp<cr>
+nmap <leader>bsd :%bd\|e#\|bd#<cr>\|'"
+nmap <leader>cl <Plug>(coc-codelens-action)
+nmap <leader>en <Plug>(coc-diagnostic-next)
+nmap <leader>ep <Plug>(coc-diagnostic-prev)
+nmap <leader>f :Lfcd<cr>
+nmap <leader>h :HopWord<cr>
+nmap <leader>j :Files<cr>
+nmap <leader>l :HopLine<cr>
+nmap <leader>m :MaximizerToggle!<cr>
+nmap <leader>n :bn<cr>
+nmap <leader>p :bp<cr>
+nmap <leader>r :Rg<cr>

+ 70 - 0
nvim-config/lualine.lua

@@ -0,0 +1,70 @@
+local status_ok, lualine = pcall(require, "lualine")
+if not status_ok then
+	return
+end
+
+local theme = require('lualine.themes.catppuccin')
+theme.normal.c.bg = nil
+
+local hide_in_width = function()
+	return vim.fn.winwidth(0) > 80
+end
+
+local diagnostics = {
+	"diagnostics",
+	sources = { "coc" },
+	sections = { "error", "warn", "info" },
+	symbols = { error = " ", warn = " ", info = " " },
+	colored = true,
+	update_in_insert = false,
+	always_visible = false,
+}
+
+local diff = {
+	"diff",
+	colored = true,
+	symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols
+  cond = hide_in_width
+}
+
+local mode = {
+	"mode",
+	colored = false,
+}
+
+local location = {
+	"location",
+  fmt = function(str)
+    return str .. " "
+  end,
+	padding = 0,
+}
+
+lualine.setup({
+	options = {
+		icons_enabled = true,
+		theme = theme,
+		component_separators = { left = "", right = "" },
+		section_separators = { left = "", right = "" },
+		disabled_filetypes = { "alpha", "dashboard", "NvimTree", "Outline" },
+		always_divide_middle = true,
+	},
+	sections = {
+		lualine_a = { mode },
+		lualine_b = { "filetype" },
+		lualine_c = { diff, diagnostics },
+		lualine_x = {},
+		lualine_y = {},
+		lualine_z = {},
+	},
+	inactive_sections = {
+		lualine_a = { mode },
+		lualine_b = {},
+		lualine_c = {},
+		lualine_x = {},
+		lualine_y = {},
+		lualine_z = {},
+	},
+	tabline = {},
+	extensions = {},
+})

+ 27 - 0
nvim-config/nvim-treesitter.lua

@@ -0,0 +1,27 @@
+require'nvim-treesitter.configs'.setup {
+  -- A list of parser names, or "all"
+  ensure_installed = { "typescript", "lua" },
+
+  -- Install parsers synchronously (only applied to `ensure_installed`)
+  sync_install = false,
+
+  -- List of parsers to ignore installing (for "all")
+  -- ignore_install = { "javascript" },
+
+  highlight = {
+    -- `false` will disable the whole extension
+    enable = true,
+
+    -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to
+    -- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is
+    -- the name of the parser)
+    -- list of language that will be disabled
+    disable = { "c", "rust" },
+
+    -- 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,
+  },
+}

+ 66 - 0
nvim-config/plugins.vim

@@ -0,0 +1,66 @@
+" cSpell:disable
+Plug 'airblade/vim-rooter'
+Plug 'akinsho/bufferline.nvim', { 'tag': 'v2.*' }
+Plug 'arcticicestudio/nord-vim'
+Plug 'catppuccin/nvim', {'as': 'catppuccin'}
+Plug 'chrisbra/vim-autosave'
+Plug 'christoomey/vim-tmux-navigator'
+Plug 'editorconfig/editorconfig-vim'
+Plug 'fannheyward/coc-rust-analyzer', {'do': 'yarn install --frozen-lockfile'}
+Plug 'fannheyward/telescope-coc.nvim'
+Plug 'felippepuhle/coc-graphql', {'do': 'yarn install --frozen-lockfile'}
+Plug 'folke/todo-comments.nvim'
+Plug 'github/copilot.vim'
+Plug 'godlygeek/tabular' " Vim script for text filtering and alignment
+Plug 'iamcco/coc-spell-checker', {'do': 'yarn install --frozen-lockfile'}
+Plug 'josa42/coc-go', {'do': 'yarn install --frozen-lockfile'}
+Plug 'jose-elias-alvarez/null-ls.nvim'
+Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+Plug 'junegunn/fzf.vim'
+Plug 'junegunn/goyo.vim'
+Plug 'justinmk/vim-sneak'
+Plug 'kyazdani42/nvim-web-devicons'
+Plug 'lewis6991/gitsigns.nvim'
+Plug 'mattn/emmet-vim'
+Plug 'mhinz/vim-startify'
+Plug 'nelsyeung/twig.vim'
+Plug 'neoclide/coc-eslint', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-git', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-json', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-prettier', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-snippets', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-sources', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc-yaml', {'do': 'yarn install --frozen-lockfile'}
+Plug 'neoclide/coc.nvim', {'branch': 'release'}
+Plug 'neovim/nvim-lspconfig'
+Plug 'norcalli/nvim-colorizer.lua'
+Plug 'norcalli/nvim-colorizer.lua'
+Plug 'norcalli/nvim-colorizer.lua'
+Plug 'numToStr/Comment.nvim'
+Plug 'nvim-lua/plenary.nvim'
+Plug 'nvim-lualine/lualine.nvim'
+Plug 'nvim-telescope/telescope.nvim'
+Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
+Plug 'oncomouse/coc-fish', {'do': 'yarn install --frozen-lockfile'}
+Plug 'pantharshit00/coc-prisma', {'do': 'yarn install --frozen-lockfile'}
+Plug 'pantharshit00/vim-prisma'
+Plug 'phaazon/hop.nvim'
+Plug 'preservim/vimux'
+Plug 'ptzz/lf.vim'
+Plug 'puremourning/vimspector'
+Plug 'pwntester/octo.nvim'
+Plug 'rhysd/committia.vim'
+Plug 'rodrigore/coc-tailwind-intellisense', {'do': 'npm install'}
+Plug 'roxma/vim-tmux-clipboard'
+Plug 'sheerun/vim-polyglot'
+Plug 'SirVer/ultisnips'
+Plug 'szw/vim-maximizer'
+Plug 'ThePrimeagen/harpoon'
+Plug 'tmux-plugins/vim-tmux'
+Plug 'tpope/vim-fugitive'
+Plug 'tpope/vim-surround'
+Plug 'voldikss/fzf-floaterm'
+Plug 'voldikss/vim-floaterm'
+" Plug 'wakatime/vim-wakatime'
+Plug 'xiyaowong/nvim-transparent'

+ 18 - 0
nvim-config/start-screen.vim

@@ -0,0 +1,18 @@
+let g:startify_session_dir = '~/.config/nvim/sessions'
+let g:startify_enable_special = 0
+
+function! s:gitModified()
+  let files = systemlist('git ls-files -m 2>/dev/null')
+  return map(files, "{'line': v:val, 'path': v:val}")
+endfunction
+
+function! s:gitUntracked()
+  let files = systemlist('git ls-files -o --exclude-standard 2>/dev/null')
+  return map(files, "{'line': v:val, 'path': v:val}")
+endfunction
+
+let g:startify_lists = [
+  \ { 'type': function('s:gitModified'),  'header': ['   Modified']},
+  \ { 'type': function('s:gitUntracked'), 'header': ['   Untracked']},
+  \ { 'type': 'sessions',  'header': ['   Sessions']       },
+\ ]

+ 10 - 0
nvim-config/theme.vim

@@ -0,0 +1,10 @@
+hi BufferLineFill ctermbg=none
+hi ColorColumn ctermbg=black
+hi Comment ctermfg=grey
+hi CursorLine cterm=none ctermbg=none
+hi CursorLineNr ctermfg=magenta
+hi LineNr term=bold ctermfg=gray
+hi Search ctermfg=black ctermbg=yellow
+hi Sneak ctermfg=black ctermbg=yellow
+hi SneakScope ctermfg=black ctermbg=yellow
+hi Visual ctermfg=black ctermbg=yellow

+ 15 - 0
nvim-config/vim-test.vim

@@ -0,0 +1,15 @@
+" vim-test
+" https://github.com/vim-test/vim-test
+" See leader.vim for related snippets
+let g:test#runner_commands = ['Jest']
+let g:test#javascript#runner = 'jest'
+let test#javascript#jest#executable = 'npx vitest'
+
+if has('nvim')
+  let test#strategy = "vimux"
+  let test#neovim#term_position = "belowright"
+else
+  let test#strategy = "vimterminal"
+  let test#vim#term_position = "belowright"
+endif
+

+ 9 - 0
nvim-config/vimspector.vim

@@ -0,0 +1,9 @@
+let g:vimspector_enable_mappings = 'HUMAN'
+nmap <leader>vl :call vimspector#Launch()<CR>
+nmap <leader>vr :VimspectorReset<CR>
+nmap <leader>ve :VimspectorEval
+nmap <leader>vw :VimspectorWatch
+nmap <leader>vo :VimspectorShowOutput
+nmap <leader>vi <Plug>VimspectorBalloonEval
+xmap <leader>vi <Plug>VimspectorBalloonEval
+let g:vimspector_install_gadgets = [ 'vscode-node-debug2' ]