(vim.cmd "colorscheme paramount") (set vim.o.foldlevel 1) (set vim.o.linebreak true) (set vim.o.list true) (set vim.o.listchars "tab:\\u21e5 ,trail:\\u2423,extends:\\u21c9,precedes:\\u21c7,nbsp:\\u00b7") (set vim.o.number true) (set vim.o.showmode false) (set vim.o.termguicolors true) (set vim.o.virtualedit :block) (set vim.o.wildmode "longest:full") ;; search (set vim.o.gdefault true) (set vim.o.ignorecase true) (set vim.o.smartcase true) (set vim.g.mapleader " ") ;; disable arrow keys (each [_ v (ipairs [:up :down :left :right])] (vim.keymap.set :n (.. "<" v ">") :)) ;; quick save (vim.keymap.set :n "\\\\" ":write") (vim.keymap.set :i "\\\\" ":write") ;; highlight (set vim.o.hlsearch false) ; (vim.keymap.set :n :/ ":nohlsearch") ;; non-shifted shortcuts for moving the cursor to the start/end of the current line (vim.keymap.set :n :H "^") (vim.keymap.set :n :L "$") ;; re-run the last macro (vim.keymap.set :n :Q "@@") ;;; restore cursor location ;; https://github.com/vim/vim/blob/master/runtime/defaults.vim#L108 (let [{: nvim_command : nvim_create_autocmd : nvim_create_augroup} vim.api au-group (nvim_create_augroup :nvim-startup {}) cb (fn [] (when (and (< 0 (vim.fn.line "'\"")) (<= (vim.fn.line "'\"") (vim.fn.line "$")) (not (string.find vim.bo.filetype :commit))) (nvim_command "normal! g`\"")))] ;; when restoring the cursor, we want to ignore commit filetypes, so ;; we need to manually enable filetype detection to set up those ;; autocommands before creating the autocommand to restore the cursor ;; ;; https://github.com/neovim/neovim/issues/15536#issuecomment-909331778 (nvim_command "filetype plugin indent on") (nvim_create_autocmd :BufReadPost {:callback cb :group au-group})) ;;; filetype (set vim.g.do_filetype_lua true) ;;; ftplugins in fennel ;; https://github.com/rktjmp/hotpot.nvim/discussions/41#discussioncomment-3050564 (let [{: nvim_create_autocmd : nvim_create_augroup} vim.api au-group (nvim_create_augroup :hotpot-ft {}) cb #(pcall require (.. :ftplugin. (vim.fn.expand :)))] (nvim_create_autocmd :FileType {:callback cb :group au-group})) (require :fzf) (require :lsp) ;;; diagnostic (vim.diagnostic.config {:float {:source :if_many :border :rounded}}) ;;; lightline ;; https://github.com/itchyny/lightline.vim/issues/168#issuecomment-232183744 (let [colorscheme :powerline palette-key (.. "lightline#colorscheme#" colorscheme "#palette") palette (. vim.g palette-key)] (set vim.g.lightline {: colorscheme}) (each [_ f (ipairs [:normal :inactive :tabline])] (tset palette f :middle [[:NONE :NONE :NONE :NONE]])) (tset vim.g palette-key palette)) ;;; navic ;; TODO Enable this when 0.8 is released ;; TODO Use fennel for this? ; (set vim.o.winbar "%{%v:lua.require'nvim-navic'.get_location()%}") ;;; netrw ;; https://github.com/tpope/vim-vinegar/issues/13 (set vim.g.netrw_fastbrowse 0) (set vim.g.netrw_home "~/.nvim_tmp") ;;; treesitter (let [configs (require :nvim-treesitter.configs) {: setup} configs] (setup {:ensure_installed [:fennel :lua :ruby :rust :typescript] :sync_install false :highlight {:enable true :additional_vim_regex_highlighting false} ;; disabling since this is super annoying in Ruby ; :indent {:enable true} :incremental_selection {:enable true :keymaps {:init_selection :gnn :node_incremental :grn :scope_incremental :grc :node_decremental :grm}} :textobjects {:select {:enable true :lookahead true :keymaps {:af "@function.outer" :if "@function.inner" :ac "@class.outer" :ic "@class.inner" :ab "@block.outer" :ib "@block.inner" :aa "@parameter.outer" :ia "@parameter.inner"}}}})) (set vim.o.foldmethod :expr) (set vim.o.foldexpr "nvim_treesitter#foldexpr()") ;;; generate help files ;; Load all plugins now. ;; Plugins need to be added to runtimepath before helptags can be generated. (vim.api.nvim_command :packloadall) ;; Load all of the helptags now, after plugins have been loaded. ;; All messages and errors will be ignored. (vim.api.nvim_command "silent! helptags ALL")