diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | fnl/conf/events.fnl | 13 | ||||
| -rw-r--r-- | fnl/conf/init.fnl | 8 | ||||
| -rw-r--r-- | fnl/conf/log.fnl | 39 | ||||
| -rw-r--r-- | fnl/conf/lsp.fnl | 41 | ||||
| -rw-r--r-- | fnl/conf/macros.fnl | 48 | ||||
| -rw-r--r-- | fnl/conf/pkgs.fnl | 6 | ||||
| -rw-r--r-- | fnl/conf/pkgs/cmp.fnl | 14 | ||||
| -rw-r--r-- | fnl/conf/pkgs/neotest.fnl | 4 | ||||
| -rw-r--r-- | fnl/conf/pkgs/null-ls.fnl | 17 | ||||
| -rw-r--r-- | fnl/conf/pkgs/treesitter.fnl | 3 | ||||
| -rw-r--r-- | fnl/conf/settings.fnl | 63 | ||||
| -rw-r--r-- | init.fnl | 34 |
13 files changed, 292 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..3a441bd --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# mike_neovim +installs my neovim config on mac or linux 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 "") diff --git a/init.fnl b/init.fnl new file mode 100644 index 0000000..9dfac8d --- /dev/null +++ b/init.fnl @@ -0,0 +1,34 @@ +;; fixes nixpkgs hotpot not adding package path correctly +(tset _G.package :path (.. (vim.fn.stdpath "cache") "/hotpot/hotpot.nvim/lua/?/init.lua;" package.path)) + +(fn build-init [] + (let [{: build} (require :hotpot.api.make) + allowed-globals (icollect [n _ (pairs _G)] + n) + opts {:verbosity 0 + :compiler {:modules {:allowedGlobals allowed-globals}}} + here #(values $1) + config-path (vim.fn.stdpath :config)] + (build config-path opts (.. config-path :/init.fnl) here + (.. config-path :/after/ftdetect/.+) here + (.. config-path :/ftplugin/.+) here + (.. config-path :/after/ftplugin/.+) here))) + +;; Call hotpot.setup and compile again after fs event + +(let [hotpot (require :hotpot) + setup hotpot.setup + build hotpot.api.make.build + uv vim.loop + config-path (vim.fn.stdpath :config)] + (setup {:provide_require_fennel true + :compiler {:modules {:correlate true} + :macros {:env :_COMPILER + :compilerEnv _G + :allowedGlobals false}}}) + (let [handle (uv.new_fs_event) + path (vim.fn.expand (.. config-path :/init.fnl))] + (uv.fs_event_start handle path {} #(vim.schedule build-init)) + (vim.api.nvim_create_autocmd :VimLeavePre {:callback #(uv.close handle)}))) + +(require :conf) |
