Neovim Configurations

Neovim is an incredibly powerful tool for editing documents, editing code, file manipulation, uploading files to GitHub, and more!

Despite Neovim’s utility, getting the most out of it involves spending a great deal of time on configuration and tinkering.

To save others that trouble and to demonstrate more concretely how I use Neovim myself, included here is a copy of my own custom configuration. Simply ensure you have the latest version of Neovim installed on one’s machine, and take care to install any dependencies including Python3, Okular, and latexmk.

nvim/init.vim

" Basic Configuration Options
set nocompatible
set showmatch
set hlsearch
set expandtab
set shiftwidth=4
set autoindent
set number
set wildmode=longest,list
syntax on
syntax enable
set mouse=a
set clipboard=unnamedplus
filetype plugin on
filetype plugin indent on
set cursorline
set ttyfast
set encoding=utf8
" set spell
" set noswapfile
" set backupdir=~/.cache/vim

" Automatically loading Vim-Plug on Startup
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
    silent execute '!curl -fLo '.data_dir. '/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
    autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

" Vim-Plug - Plugin Manager
call plug#begin()
    Plug 'joshdick/onedark.vim'
    Plug 'ryanoasis/vim-devicons'
    Plug 'SirVer/ultisnips'
    Plug 'honza/vim-snippets'
    Plug 'nvim-tree/nvim-web-devicons'
    Plug 'lambdalisue/fern.vim'
    Plug 'lambdalisue/vim-fern-hijack'
    Plug 'mhinz/vim-startify'
    Plug 'ellisonleao/glow.nvim'
    Plug 'tpope/vim-fugitive'
    Plug 'nvim-lua/plenary.nvim'
    Plug 'nvim-telescope/telescope.nvim', {'tag': '0.1.8'}
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
    Plug 'nvim-lua/plenary.nvim'
    Plug 'nvim-neorg/neorg'
    Plug 'nvim-neorocks/rocks.nvim'
    Plug 'lervag/vimtex'
    Plug 'lervag/vimtex', { 'tag': 'v2.15' }
call plug#end()

colorscheme onedark

" Lua Lines - Used for Neorg & Markdown Previews respectively

lua << EOF
    require('glow').setup()
EOF

" Autoinstall New Plugins "
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
    silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
    autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

let g:python3_host_prog = '/usr/bin/python3'
let g:python_host_prog = '/usr/bin/python'


" VimTex Block - Necessary for Tex functions to work properly "
let g:vimtex_view_general_viewer = 'okular'
let g:vimtex_view_general_options = '--unique file:@pdf\#src:@line@tex'
let g:vimtex_compiler_method = 'latexmk'

" Startify Block - Startup Screen "
let g:startify_padding_left = 3
let g:startify_enable_special = 0
let g:startify_fortune_use_unicode = 1

let g:ascii = [     
    \'',
    \'    dMMMMb  dMMMMMP .aMMMb  dMP dMP dMP dMMMMMMMMb ',
    \'    dMP dMP dMP     dMP"dMP dMP dMP amr dMP"dMP"dMP', 
    \'   dMP dMP dMMMP   dMP dMP dMP dMP dMP dMP dMP dMP ',
    \'  dMP dMP dMP     dMP.aMP  YMvAP" dMP dMP dMP dMP  ', 
    \' dMP dMP dMMMMMP  VMMMP"    VP"  dMP dMP dMP dMP   ', 
    \'',
    \]

let g:startify_custom_header = g:ascii

let g:startify_commands = [
    \ {'f': ['File Explorer', ':$tabnew | :Fern /home/gareth']},
    \ {'d': ['Downloads', ':$tabnew | :Fern /home/gareth/Downloads/']},
    \ {'l': ['Documents', ':$tabnew | :Fern /home/gareth/Documents/LaTeX/']},
    \ {'n': ['Notes', ':$tabnew | :Neorg workspace notes']},
    \ {'k': ['Keyboard Firmware', ':$tabnew | :e ~/qmk_firmware/keyboards/kiraibuilds/']},
    \ {'i': ['Install Plugins', ':$tabnew | PlugInstall']},
    \ {'u': ['Update Plugins', ':$tabnew | PlugUpdate | PlugUpgrade']},
    \ {'c': ['Edit Neovim Config', ':$tabnew | :e ~/.config/nvim/init.vim']},
    \ {'p': ['Edit Plugin Config', ':$tabnew | :e ~/.config/nvim/plugin/init.lua']},
    \ {'h': ['Full Documentation', ':$tabnew | :help']},
    \ {'t': ['Neovim Tutorial', ':$tabnew | :Tutor']},
    \ ]

let g:startify_lists = [
    \ {'type': 'files', 'header': ['    Most Recent Files']},
    \ {'type': 'commands', 'header': ['    Quick Options Menu']},
    \ ]

let g:startify_files_number = 6
let g:startify_session_persistence = 1

 

nvim/plugin/init.lua

local rocks_config = {
	rocks_path = vim.env.HOME .. "/.local/share/nvim/rocks",
}

vim.g.rocks_nvim = rocks_config

local luarocks_path = {
	vim.fs.joinpath(rocks_config.rocks_path, "share", "lua", "5.1", "?.lua"),
	vim.fs.joinpath(rocks_config.rocks_path, "share", "lua", "5.1", "?", "init.lua"),
}
package.path = package.path .. ";" .. table.concat(luarocks_path, ";")

local luarocks_cpath = {
	vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.so"),
	vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.so"),
	vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.dylib"),
	vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.dylib"),
	vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.dll"),
	vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.dll"),
}
package.cpath = package.cpath .. ";" .. table.concat(luarocks_cpath, ";")

vim.opt.runtimepath:append(vim.fs.joinpath(rocks_config.rocks_path, "lib", "luarocks", "rocks-5.1", "rocks.nvim", "*"))

require("neorg").setup({
    load = {
        ["core.defaults"] = {},
        ["core.dirman"] = {
            config = {
                workspaces = {
                    notes = "~/notes",
                },
            },
        },
    },
})
Previous
Previous

QR Code Generation in Linux

Next
Next

LaTeX & R Markdown: Data Analysis