summaryrefslogtreecommitdiff
path: root/fnl
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2022-11-29 00:12:25 +0100
committerMike Vink <mike1994vink@gmail.com>2022-11-29 00:12:25 +0100
commitde3f5a8d268de01d3252f2689a7f1ffcaf7d7ec7 (patch)
treecdcbf8bc8fee98834b3cd0296a20856684c1f7c6 /fnl
neovim fennel config
Diffstat (limited to 'fnl')
-rw-r--r--fnl/conf/events.fnl13
-rw-r--r--fnl/conf/init.fnl8
-rw-r--r--fnl/conf/log.fnl39
-rw-r--r--fnl/conf/lsp.fnl41
-rw-r--r--fnl/conf/macros.fnl48
-rw-r--r--fnl/conf/pkgs.fnl6
-rw-r--r--fnl/conf/pkgs/cmp.fnl14
-rw-r--r--fnl/conf/pkgs/neotest.fnl4
-rw-r--r--fnl/conf/pkgs/null-ls.fnl17
-rw-r--r--fnl/conf/pkgs/treesitter.fnl3
-rw-r--r--fnl/conf/settings.fnl63
11 files changed, 256 insertions, 0 deletions
diff --git a/fnl/conf/events.fnl b/fnl/conf/events.fnl
new file mode 100644
index 0000000..082a274
--- /dev/null
+++ b/fnl/conf/events.fnl
@@ -0,0 +1,13 @@
+;; vim.cmd([[augroup vimrc_plugin_buffers]])
+;; vim.cmd([[au!]])
+;; vim.cmd(
+;; [[autocmd BufWritePre *.md,*.hcl,*.tf,*.py,*.cpp,*.qml,*.js,*.txt,*.json,*.html,*.lua,*.yaml,*.yml,*.bash,*.sh,*.go :lua require"vimrc.buffers".clean_trailing_spaces()]])
+;;
+;; vim.cmd(
+;; [[autocmd BufReadPost * lua require"vimrc.buffers".setup_white_space_highlight(vim.fn.bufnr())]])
+;;
+;; vim.cmd(
+;; [[autocmd BufReadPre *.tf,*.hcl packadd vim-terraform]])
+;;
+;; vim.cmd([[augroup END]])
+
diff --git a/fnl/conf/init.fnl b/fnl/conf/init.fnl
new file mode 100644
index 0000000..388139f
--- /dev/null
+++ b/fnl/conf/init.fnl
@@ -0,0 +1,8 @@
+(vim.cmd "colorscheme gruvbox-material")
+(vim.cmd "filetype plugin on")
+(vim.cmd "filetype indent on")
+(vim.cmd "highlight WinSeparator guibg=None")
+
+(require :conf.lsp)
+(require :conf.pkgs)
+(require :conf.settings)
diff --git a/fnl/conf/log.fnl b/fnl/conf/log.fnl
new file mode 100644
index 0000000..cf859f2
--- /dev/null
+++ b/fnl/conf/log.fnl
@@ -0,0 +1,39 @@
+(import-macros {: P} :conf.macros)
+
+(local scratches {})
+(fn scratch-buffer [name ft]
+ (fn setopt [buf opt value]
+ (vim.api.nvim_buf_set_option buf opt value)
+ buf)
+
+ (fn track [buf]
+ (tset scratches name buf)
+ buf)
+
+ (track (-> (vim.api.nvim_create_buf true false)
+ (setopt :filetype ft)
+ (setopt :buftype :nofile)
+ (setopt :bufhidden :hide)
+ (setopt :swapfile false))))
+
+(let [log (fn [...]
+ (P [...]))]
+ (vim.api.nvim_create_user_command :Scratch
+ (fn [c]
+ (let [name c.args]
+ (fn exists? [buf]
+ (not= buf nil))
+
+ (fn get []
+ (. scratches c.args))
+
+ (fn goto [buf]
+ (vim.api.nvim_set_current_buf buf))
+
+ (let [buf (get)
+ current (vim.api.nvim_get_current_buf)]
+ (if (exists? buf) (goto buf)
+ (goto (scratch-buffer name
+ (vim.api.nvim_buf_get_option current
+ :filetype)))))))
+ {:complete log :nargs 1}))
diff --git a/fnl/conf/lsp.fnl b/fnl/conf/lsp.fnl
new file mode 100644
index 0000000..9b945e1
--- /dev/null
+++ b/fnl/conf/lsp.fnl
@@ -0,0 +1,41 @@
+(fn map-to-capabilities [{: client : buf}]
+ (fn bo [name value]
+ (vim.api.nvim_buf_set_option buf name value))
+
+ (fn bm [mode key cb]
+ (vim.keymap.set mode key cb {:silent true :noremap true :buffer buf}))
+
+ (fn lspdo [action]
+ (. vim.lsp action))
+
+ (fn use [cpb]
+ (match cpb
+ :completion (bo :omnifunc "v:lua.vim.lsp.omnifunc")
+ :rename (bm :n :<leader>gr (lspdo :rename))
+ :signature_help (bm :n :<leader>gs (lspdo :signature_help))
+ :goto_definition (bm :n :<leader>gd (lspdo :definition))
+ :declaration (bm :n :<leader>gD (lspdo :declaration))
+ :implementation (bm :n :<leader>gi (lspdo :implementation))
+ :find_references (bm :n :<leader>gi (lspdo :references))
+ :document_symbol (bm :n :<leader>gds (lspdo :workspace_symbol))
+ :code_action (bm :n :<leader>ga (lspdo :code_action))
+ :document_range_formatting (bm :v :<leader>gq (lspdo :range_formatting))
+ :hover (bo :keywordprg ":LspHover")
+ :documentFormattingProvider ((fn []
+ (bo :formatexpr "v:lua.vim.lsp.format()")
+ (bm :n :<leader>gq
+ #(vim.lsp.buf.format {:async true}))))))
+
+ (each [cpb enabled? (pairs client.server_capabilities)]
+ (if enabled?
+ (use cpb))))
+
+(fn attach [client buf]
+ (fn P [p]
+ (print (vim.inspect p))
+ p)
+
+ (-> {: client : buf}
+ (map-to-capabilities)))
+
+{: attach}
diff --git a/fnl/conf/macros.fnl b/fnl/conf/macros.fnl
new file mode 100644
index 0000000..04a7251
--- /dev/null
+++ b/fnl/conf/macros.fnl
@@ -0,0 +1,48 @@
+(fn by-two [l]
+ (fn iter [t i]
+ (let [k (. l (- i 1))
+ v (. l i)]
+ (when (and (not= k nil) (not= v nil))
+ (values (+ i 2) [k v]))))
+
+ (values iter l 2))
+
+(fn decode-opt-value [v]
+ (fn symbol-luatype [s]
+ (let [t (tostring s)]
+ (match t
+ :on true
+ :off false
+ _ t)))
+
+ (if (sym? v) (symbol-luatype v) v))
+
+(fn opt-template [o]
+ (fn remove/append [target value mode]
+ `(let [target# (. vim :opt ,target)
+ value# ,value]
+ ,(match mode
+ :append `(target#:append value#)
+ :remove `(target#:remove value#))))
+
+ (fn [v]
+ (match (string.sub o 1 1)
+ "-" (remove/append (string.sub o 2) v :remove)
+ "+" (remove/append (string.sub o 2) v :append)
+ _ `(tset (. vim :opt) ,o ,v))))
+
+(fn settings [...]
+ `,(icollect [_ [o v] (by-two [...])]
+ ((opt-template (tostring o)) (decode-opt-value v))))
+
+(fn globals [...]
+ (local globa (icollect [_ [k v] (by-two [...])]
+ [(tostring k) v]))
+ `(let [l# ,globa]
+ (each [a# b# (ipairs l#)]
+ (tset (. vim :g) (. b# 1) (. b# 2)))))
+
+(fn P [...]
+ `(print (vim.inspect [...])))
+
+{: P : settings : globals}
diff --git a/fnl/conf/pkgs.fnl b/fnl/conf/pkgs.fnl
new file mode 100644
index 0000000..e97c038
--- /dev/null
+++ b/fnl/conf/pkgs.fnl
@@ -0,0 +1,6 @@
+(require :conf.pkgs.cmp)
+
+;; seems broken: (require :conf.pkgs.neotest)
+
+(require :conf.pkgs.null-ls)
+(require :conf.pkgs.treesitter)
diff --git a/fnl/conf/pkgs/cmp.fnl b/fnl/conf/pkgs/cmp.fnl
new file mode 100644
index 0000000..db3cbf9
--- /dev/null
+++ b/fnl/conf/pkgs/cmp.fnl
@@ -0,0 +1,14 @@
+(let [cmp (require :cmp)
+ luasnip (require :luasnip)
+ snip (fn [args]
+ (luasnip.lsp_expand (. args :body)))]
+ (cmp.setup {:snippet {:expand snip}
+ :completion {:autocomplete false}
+ :mapping (cmp.mapping.preset.insert {:<C-b> (cmp.mapping.scroll_docs -4)
+ :<C-f> (cmp.mapping.scroll_docs 4)
+ :<C-A> (cmp.mapping.complete)
+ :<C-e> (cmp.mapping.confirm {:select true})})
+ :sources (cmp.config.sources [{:name :conjure}
+ {:name :nvim_lsp}
+ {:name :path}
+ {:name :luasnip}])}))
diff --git a/fnl/conf/pkgs/neotest.fnl b/fnl/conf/pkgs/neotest.fnl
new file mode 100644
index 0000000..251cdcb
--- /dev/null
+++ b/fnl/conf/pkgs/neotest.fnl
@@ -0,0 +1,4 @@
+(let [nt (require :neotest)
+ python (require :neotest-python)]
+ (nt.setup {:adapters [(python {:dap {:justMyCode false}})]}))
+
diff --git a/fnl/conf/pkgs/null-ls.fnl b/fnl/conf/pkgs/null-ls.fnl
new file mode 100644
index 0000000..45a507d
--- /dev/null
+++ b/fnl/conf/pkgs/null-ls.fnl
@@ -0,0 +1,17 @@
+(fn reload [mod]
+ (fn loaded? [mod]
+ (not= (. package.loaded mod) nil))
+
+ (fn unload [mod]
+ (tset package.loaded mod nil))
+
+ (if (loaded? mod) (unload mod))
+ (require mod))
+
+(let [null-ls (require :null-ls)]
+ (null-ls.setup {:update_on_insert false
+ :on_attach (. (reload :conf.lsp) :attach)
+ :sources [null-ls.builtins.formatting.black
+ null-ls.builtins.formatting.raco_fmt
+ null-ls.builtins.formatting.alejandra
+ null-ls.builtins.formatting.fnlfmt]}))
diff --git a/fnl/conf/pkgs/treesitter.fnl b/fnl/conf/pkgs/treesitter.fnl
new file mode 100644
index 0000000..a35b7c8
--- /dev/null
+++ b/fnl/conf/pkgs/treesitter.fnl
@@ -0,0 +1,3 @@
+(let [ts (require :nvim-treesitter.configs)]
+ (ts.setup
+ {:highlight {:enable true}}))
diff --git a/fnl/conf/settings.fnl b/fnl/conf/settings.fnl
new file mode 100644
index 0000000..ee8ea2f
--- /dev/null
+++ b/fnl/conf/settings.fnl
@@ -0,0 +1,63 @@
+(import-macros {: settings : globals} :conf.macros)
+
+(globals
+ loaded_2html_plugin true
+ loaded_fzf false
+ loaded_man false
+ loaded_gzip false
+ loaded_health false
+ loaded_matchit false
+ loaded_matchparen false
+ loaded_netrwPlugin false
+ loaded_rplugin false
+ loaded_shada false
+ loaded_spellfile false
+ loaded_tarPlugin false
+ loaded_tohtml false
+ loaded_tutor false
+ loaded_zipPlugin false
+
+ mapleader " "
+ maplocalleader " "
+ dirvish_mode ":sort | sort ,^.*[^/]$, r")
+
+(settings
+ +shortmess "c"
+ +diffopt vertical
+ +isfname "@-@"
+ wmw 10
+ inccommand split
+ signcolumn yes
+ smd off
+ scrolloff 8
+ termguicolors on
+ incsearch on
+ undofile on
+ undodir (.. (os.getenv :HOME) :/.local/share/nvim/undo)
+ backup off
+ backupcopy yes
+ swapfile off
+ wrap off
+ splitbelow on
+ magic on
+ showbreak "﬋"
+ listchars { :tab " " :eol "﬋"}
+ list on
+ autoindent on
+ smartindent on
+ expandtab on
+ tabstop 4
+ softtabstop 4
+ shiftwidth 4
+ hidden on
+ number on
+ relativenumber on
+ exrc on
+ secure on
+ completeopt "menuone,noselect"
+ complete ".,w,k,kspell,b"
+ foldopen "block,hor,jump,mark,percent,quickfix,search,tag"
+ laststatus 3
+ winbar "%=%m %f"
+ hlsearch off
+ clipboard "")