summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-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
-rw-r--r--init.fnl34
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)