dotfiles/.config/nvim/fnl/settings.fnl

185 lines
3.9 KiB
Fennel

(import-macros {: hl! : augroup! : set+ : set! : rem! : g! : exec : has! : map!} :macros)
; better :find
(set+ path "**")
(set! wildmenu)
(set! ignorecase) ; case insensitive search
(set! smartcase) ; but case sensitive when uppercase present
(set! scrolljump 1)
(set! scrolloff 5)
(set! splitright)
(set! splitbelow)
(set! autowrite) ; automatically write a file when leaving a modified buffer
(set! hidden) ; allow buffer switching without saving
; no swapfile/backup
(set! nobackup)
(set! noswapfile)
(set! nowritebackup)
;; undofile
(set! undofile)
; default tabs/space
(set! shiftwidth 4)
(set! tabstop 4)
(set! expandtab) ; tabs are spaces
; With a map leader it's possible to do extra key combinations
; like <leader>w saves the current file
(g! mapleader ",")
; Oh well
(map! [n] "<leader>;" "A;<ESC>")
; => Moving around, tabs, windows and buffers
; Smart way to move between windows
(map! [n] :<C-j> :<C-W>j)
(map! [n] :<C-k> :<C-W>k)
(map! [n] :<C-h> :<C-W>h)
(map! [n] :<C-l> :<C-W>l)
(map! [n] :<leader>k ":bnext<cr>")
(map! [n] :<leader>j ":bprevious<cr>")
; Switch CWD to the directory of the open buffer
(map! [n] :<leader>cd ":cd %:p:h<cr>:pwd<cr>")
; Let remember.nvim deal with it
(g! leave_my_cursor_position_alone "")
; => Status line
; Always show the status line
(set! laststatus 3)
; => Editing mappings
; Remap VIM 0 to first non-blank character
(map! [n] :0 :^)
(map! [n :noremap] :H :^)
(map! [n :noremap] :L :$)
; Move a line of text using ALT+[jk] or Command+[jk] on mac
(map! [n] :<M-j> "mz:m+<cr>`z")
(map! [n] :<M-k> "mz:m-2<cr>`z")
(map! [v] :<M-j> ":m'>+<cr>`<my`>mzgv`yo`z")
(map! [v] :<M-k> ":m'<-2<cr>`>my`<mzgv`yo`z")
(when (or (vim.fn.has :mac) (vim.fn.has :macunix))
(map! [nv] :<D-j> :<M-j>)
(map! [nv] :<D-k> :<M-k>))
; => Spell checking
; Pressing ,ss will toggle and untoggle spell checking
(map! [n] :<leader>ss ":setlocal spell!<cr>")
; Shortcuts using <leader>
(map! [n] :<leader>sn "]s")
(map! [n] :<leader>sp "[s")
(map! [n] :<leader>sa :zg)
(map! [n] :<leader>s? :z=)
; set python interpreter path
(g! python3_host_prog :python3)
; Remove the Windows ^M - when the encodings gets messed up
(map! [n] :<Leader>m "mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm")
; turn off highlighting
(map! [n] :<leader>h ":noh<CR>")
; copy line to clipboard
(map! [n :noremap] :<C-c> "\"+yy")
(map! [v :noremap] :<C-c> "\"+y")
; file completion
(map! [i] :<C-f> :<C-x><C-f>)
; tag completion
(map! [i] "<C-]>" "<C-x><C-]>")
; create line above
(map! [i] :<S-Enter> :<Esc>O)
; run commands
(map! [n] :<leader>x :<cmd>.!sh<cr>)
; User Interface
(set! number)
(set! relativenumber)
(set! nosplitscroll)
; Height of the command bar
(set! cmdheight 1)
; always show sign column
(set! signcolumn :yes)
(set! colorcolumn "100,120")
; don't redraw while executing macros
(set! lazyredraw)
(set! mouse :nv)
(set! mousehide)
(set! nomodeline)
(set! list)
(set! listchars "tab:│\\x20,nbsp: ,trail:~,extends:>,space:\x20")
(set! showcmd)
(set! ruler)
(set! showmode)
(set! showmatch)
(set! matchtime 5)
(set! report 0)
(set! linespace 0)
(set! pumheight 20)
; How many tenths of a second to blink when matching brackets
(set! mat 2)
(set! filetype "on")
; wrap long lines
(set! wrap)
(set! linebreak)
(set! breakindent) ; keep indentation when wrapping
; disable wrapping the input
(set! textwidth 0)
(set! wrapmargin 0)
(rem! formatoptions :t)
; GUI settings
(set! guifont "monospace:h12")
; use true colors
(set! termguicolors)
(set! background :light)
(set! cursorline)
(set! cursorlineopt "number,screenline")
(set! shell "/bin/sh")
; autoreload changed files
(set! updatetime 300)
(set! autoread)
(augroup! :autoread-hold [[CursorHold] * :checktime])
(set! loadplugins false)
;; some ridiculous bindings
(map! [i] "<C-;>" "<")
(map! [i] "<C-:>" ">")
(map! [i] "<C-j>" "(")
(map! [i] "<C-k>" ")")
(map! [i] "<C-S-j>" "{")
(map! [i] "<C-S-k>" "}")
(map! [i] "<C-h>" "[")
(map! [i] "<C-l>" "]")