(vim.cmd "colorscheme paramount") (set vim.opt.foldlevel 1) (set vim.opt.linebreak true) (set vim.opt.list true) ;; fnlfmt: skip (set vim.opt.listchars {:tab "\\u21e5 " :trail "\\u2423" :extends "\\u21c9" :precedes "\\u21c7" :nbsp "\\u00b7"}) (set vim.opt.number true) (set vim.opt.showmode false) (set vim.opt.termguicolors true) (set vim.opt.virtualedit :block) (set vim.opt.wildmode "longest:full") ;; search (set vim.opt.gdefault true) (set vim.opt.ignorecase true) (set vim.opt.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") ;; clear highlight (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)) ;;; 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} :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"}}}})) (set vim.opt.foldmethod :expr) (set vim.opt.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")