diff options
Diffstat (limited to 'dot_config')
| -rw-r--r-- | dot_config/nvim/fnl/plugins/lsp/attach.fnl | 31 | ||||
| -rw-r--r-- | dot_config/nvim/fnl/toast/core.fnl | 55 | ||||
| -rw-r--r-- | dot_config/nvim/fnl/toast/macros.fnl | 7 | ||||
| -rw-r--r-- | dot_config/nvim/fnl/toast/table.fnl | 5 | ||||
| -rw-r--r-- | dot_config/nvim/init.fnl | 28 | ||||
| -rw-r--r-- | dot_config/nvim/init.lua | 52 | ||||
| -rw-r--r-- | dot_config/nvim/lua/plugins/lsp/attach.lua | 66 | ||||
| -rw-r--r-- | dot_config/nvim/lua/plugins/lsp/attach2.lua | 42 | ||||
| -rw-r--r-- | dot_config/nvim/lua/toast/core.lua | 67 | ||||
| -rw-r--r-- | dot_config/nvim/lua/toast/table.lua | 3 | ||||
| -rw-r--r-- | dot_config/nvim/post.fnl | 4 | ||||
| -rw-r--r-- | dot_config/nvim/post.lua | 9 | ||||
| -rw-r--r-- | dot_config/nvim/pre.fnl | 26 | ||||
| -rw-r--r-- | dot_config/nvim/pre.lua | 35 |
14 files changed, 307 insertions, 123 deletions
diff --git a/dot_config/nvim/fnl/plugins/lsp/attach.fnl b/dot_config/nvim/fnl/plugins/lsp/attach.fnl new file mode 100644 index 0000000..1f23015 --- /dev/null +++ b/dot_config/nvim/fnl/plugins/lsp/attach.fnl @@ -0,0 +1,31 @@ +(import-macros {: tbl : recc} :toast.macros) +(local {: assoc : map} (require :toast.core)) +(local {: insert} (require :toast.table)) + +(fn [c b] + (let [lsp vim.lsp + lbf lsp.buf + ll [(tbl "" & :group :+lsp) + (tbl :w & :group :+workspace) + + (tbl :D lbf.declaration & :desc "goto declaration") + (tbl :d lbf.definition & :desc "goto definition") + (tbl :k lbf.hover & :desc "hover") + (tbl :K lbf.signature_help & :desc "signature help") + (tbl :i lbf.implementation & :desc "goto implementation") + (tbl :t lbf.type_definition & :desc "goto type definition") + (tbl :r lbf.rename & :desc "rename") + (tbl :c lbf.code_action & :desc "code action") + (tbl :R lbf.reference & :desc "list references") + + (tbl :wa lbf.add_workspace_folder & :desc "add folder") + (tbl :wr lbf.remove_workspace_folder & :desc "remove folder") + (tbl :wl #(print (vim.inspect (lbf.list_workspace_folders))) & + :desc "list folders")] + ll (map #(assoc $ 1 (.. :<localleader><localleader> (. $ 1))) ll)] + (vim.api.nvim_buf_set_option b :omnifunc :v:lua.vim.lsp.omnifunc) + (recc :which-key :add + (tbl (insert ll + (tbl :<leader>F #(vim.lsp.buf.format {:async true}) & + :desc "run format")) & + :buffer b)))) diff --git a/dot_config/nvim/fnl/toast/core.fnl b/dot_config/nvim/fnl/toast/core.fnl index 3c77e4a..16e69c2 100644 --- a/dot_config/nvim/fnl/toast/core.fnl +++ b/dot_config/nvim/fnl/toast/core.fnl @@ -1,20 +1,31 @@ -(local {: insert} (require :toast.table)) +(local {: insert : unpack} (require :toast.table)) +; math (fn dec [n] "Decrement n by 1." (- n 1)) (fn inc [n] "Increment n by 1." (+ n 1)) + +; checks? +(fn empty? [xs] + "Returns true if the lengthable contains no elements." + (= 0 (length xs))) +(fn nil? [x] + "Returns true if the argument is nil." + (= nil x)) +(fn number? [n] + "Returns true if the argument is a number." + (= :number (type n))) + +; sequences (fn drop [n xs] "Returns a table of all but the first n elements in xs." (let [out []] (each [i v (ipairs xs)] (when (> i n) (insert out v))) out)) -(fn empty? [xs] - "Returns true if the lengthable contains no elements." - (= 0 (length xs))) (fn first [xs] "The first element in a sequential table." (. xs 1)) @@ -36,19 +47,45 @@ (insert out [])) (insert (last out) v out)))))) + +; HOF +(fn assoc [?t ...] + "Sets the key `k` in table `t` to the value `v`. + Accepts an arbitrary amount of `k` and `v` pairs. + Returns the mutated table `t`." + (let [t (or ?t {}) + lt (inc (length t)) ; for numerical keys + [k v & xs] [...]] + (case k + nil nil + (where k (and (number? k) (> lt k))) (tset t k v) ; TODO: (set (. t k) v) + (where k (and (number? k) (= k lt))) (table.insert t k v) + _ (tset t k v)) + (case (length xs) + 0 t + 1 (error "assoc expects even number of arguments after table, found odd number") + _ (assoc t (unpack xs))))) (fn map [f xs] "Returns a sequential table consisting of the result of apply f to every item in xs." (accumulate [out [] - _ v (ipairs xs)] + _ v (ipairs (or xs []))] (let [mapped (f v)] (insert out (if (= 0 (select :# mapped)) nil mapped))))) -{: dec +{;math + : dec : inc - : drop + ; checks? : empty? - : group + : nil? + : number? + ; sequences + : drop : first - : last} + : last + : group + ; HOF + : assoc + : map} diff --git a/dot_config/nvim/fnl/toast/macros.fnl b/dot_config/nvim/fnl/toast/macros.fnl index bb4375b..b81d8e6 100644 --- a/dot_config/nvim/fnl/toast/macros.fnl +++ b/dot_config/nvim/fnl/toast/macros.fnl @@ -2,9 +2,8 @@ (local {: inc : drop - : group} (require :toast.core)) -(local {: from-pairs - : insert} (require :toast.table)) + : assoc} (require :toast.core)) +(local {: insert} (require :toast.table)) (fn tbl [...] "Generate a mixed table. @@ -16,7 +15,7 @@ &until (= v '&)] (insert out v)) post (drop (inc (length pre)) args)] - (from-pairs (group 2 post) pre))) + (assoc pre (unpack post)))) (fn recc [reqspec key ...] "A common lua pattern is `require 'something'.call(arg1, arg2)`. diff --git a/dot_config/nvim/fnl/toast/table.fnl b/dot_config/nvim/fnl/toast/table.fnl index a294b14..fe118e8 100644 --- a/dot_config/nvim/fnl/toast/table.fnl +++ b/dot_config/nvim/fnl/toast/table.fnl @@ -11,5 +11,8 @@ (table.insert t ...) t) +(local unpack (or table.unpack unpack)) + {: from-pairs - : insert} + : insert + : unpack} diff --git a/dot_config/nvim/init.fnl b/dot_config/nvim/init.fnl new file mode 100644 index 0000000..b74dcd1 --- /dev/null +++ b/dot_config/nvim/init.fnl @@ -0,0 +1,28 @@ +; allow running code unconditionally before or after plugins / noplugins are loaded +(fn doif [path] + (let [path (.. (vim.fn.stdpath :config) :/ path) + do? (< 0 (vim.fn.filereadable path))] + (when do? (dofile path)))) + +; leader, localleader, options +(doif :pre.lua) + +; plugins +(if (= 0 (vim.fn.executable :git)) + (doif :noplugins.lua) + (let [lazypath (.. (vim.fn.stdpath :data) :/lazy/lazy.nvim) + fstat (vim.loop.fs_stat lazypath)] + (when (not fstat) + (vim.fn.system [:git + :clone + :--filter=blob:none + :https://github.com/folke/lazy.nvim.git + :--branch=stable ; latest stable release + lazypath])) + (vim.opt.rtp:prepend lazypath) + ((. (require :lazy) :setup) :plugins {}) + (require :bindings) + (vim.cmd "colorscheme starlight"))) + +; custom file associations etc +(doif :post.lua) diff --git a/dot_config/nvim/init.lua b/dot_config/nvim/init.lua index 4dcf175..ec4a55e 100644 --- a/dot_config/nvim/init.lua +++ b/dot_config/nvim/init.lua @@ -1,34 +1,26 @@ --- allow running code unconditionally before or after plugins / noplugins are loaded +-- [nfnl] Compiled from init.fnl by https://github.com/Olical/nfnl, do not edit. local function doif(path) - local cpath = vim.fn.stdpath 'config' .. '/' - if vim.fn.filereadable(cpath .. path) > 0 then - dofile(cpath .. path) - end + local path0 = (vim.fn.stdpath("config") .. "/" .. path) + local do_3f = (0 < vim.fn.filereadable(path0)) + if do_3f then + return dofile(path0) + else + return nil + end end - --- leader, localleader, options -doif 'pre.lua' - --- plugins -if vim.fn.executable 'git' == 0 then - doif 'noplugins.lua' +doif("pre.lua") +if (0 == vim.fn.executable("git")) then + doif("noplugins.lua") else - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not vim.loop.fs_stat(lazypath) then - vim.fn.system({ - "git", - "clone", - "--filter=blob:none", - "https://github.com/folke/lazy.nvim.git", - "--branch=stable", -- latest stable release - lazypath, - }) - end - vim.opt.rtp:prepend(lazypath) - require 'lazy'.setup("plugins", {}) - require 'bindings' - vim.cmd [[colorscheme starlight]] + local lazypath = (vim.fn.stdpath("data") .. "/lazy/lazy.nvim") + local fstat = vim.loop.fs_stat(lazypath) + if not fstat then + vim.fn.system({"git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath}) + else + end + do end (vim.opt.rtp):prepend(lazypath) + do end (require("lazy")).setup("plugins", {}) + require("bindings") + vim.cmd("colorscheme starlight") end - --- custom file associations etc -doif 'post.lua' +return doif("post.lua") diff --git a/dot_config/nvim/lua/plugins/lsp/attach.lua b/dot_config/nvim/lua/plugins/lsp/attach.lua index f81303d..54f60f5 100644 --- a/dot_config/nvim/lua/plugins/lsp/attach.lua +++ b/dot_config/nvim/lua/plugins/lsp/attach.lua @@ -1,42 +1,26 @@ --- TODO: INITIAL PORT -local function helper(opts, ...) - for _, spec in ipairs({...}) do - for _, v in ipairs(spec) do - if opts.prefix then - v[0] = opts.prefix .. v[0] - end - if opts.buffer then - v.buffer = opts.buffer - end - end - end -end - -return function(c, b) - local lsp = vim.lsp - local lbf = lsp.buf - local wk = require 'which-key' - vim.api.nvim_buf_set_option(b, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - wk.add(helper({buffer = b}, { - { '<leader>F', function() vim.lsp.buf.format {async = true} end, - desc = 'run format' }, - }, helper({prefix = '<localleader><localleader>'}, { - { '', group = '+lsp' }, - { 'w', group = '+workspace' }, - - { 'D', lbf.declaration, desc = 'goto declaration' }, - { 'd', lbf.definition, desc = 'goto definition' }, - { 'k', lbf.hover, desc = 'hover' }, - { 'K', lbf.signature_help, desc = 'signature help' }, - { 'i', lbf.implementation, desc = 'goto implementation' }, - { 't', lbf.type_definition, desc = 'goto type definition' }, - { 'r', lbf.rename, desc = 'rename' }, - { 'c', lbf.code_action, desc = 'code action' }, - { 'R', lbf.references, desc = 'list references' }, - - { 'wa', lbf.add_workspace_folder, 'add folder' }, - { 'wr', lbf.remove_workspace_folder, 'remove folder' }, - { 'wl', function() print(vim.inspect(lbf.list_workspace_folders())) end, - desc = 'list folders' }, - }))) +-- [nfnl] Compiled from fnl/plugins/lsp/attach.fnl by https://github.com/Olical/nfnl, do not edit. +local _local_1_ = require("toast.core") +local assoc = _local_1_["assoc"] +local map = _local_1_["map"] +local _local_2_ = require("toast.table") +local insert = _local_2_["insert"] +local function _3_(c, b) + local lsp = vim.lsp + local lbf = lsp.buf + local ll + local function _4_() + return print(vim.inspect(lbf.list_workspace_folders())) + end + ll = {{"", group = "+lsp"}, {"w", group = "+workspace"}, {"D", lbf.declaration, desc = "goto declaration"}, {"d", lbf.definition, desc = "goto definition"}, {"k", lbf.hover, desc = "hover"}, {"K", lbf.signature_help, desc = "signature help"}, {"i", lbf.implementation, desc = "goto implementation"}, {"t", lbf.type_definition, desc = "goto type definition"}, {"r", lbf.rename, desc = "rename"}, {"c", lbf.code_action, desc = "code action"}, {"R", lbf.reference, desc = "list references"}, {"wa", lbf.add_workspace_folder, desc = "add folder"}, {"wr", lbf.remove_workspace_folder, desc = "remove folder"}, {"wl", _4_, desc = "list folders"}} + local ll0 + local function _5_(_241) + return assoc(_241, 1, ("<localleader><localleader>" .. (_241)[1])) + end + ll0 = map(_5_, ll) + vim.api.nvim_buf_set_option(b, "omnifunc", "v:lua.vim.lsp.omnifunc") + local function _6_() + return vim.lsp.buf.format({async = true}) + end + return (require("which-key")).add({insert(ll0, {"<leader>F", _6_, desc = "run format"}), buffer = b}) end +return _3_ diff --git a/dot_config/nvim/lua/plugins/lsp/attach2.lua b/dot_config/nvim/lua/plugins/lsp/attach2.lua new file mode 100644 index 0000000..f81303d --- /dev/null +++ b/dot_config/nvim/lua/plugins/lsp/attach2.lua @@ -0,0 +1,42 @@ +-- TODO: INITIAL PORT +local function helper(opts, ...) + for _, spec in ipairs({...}) do + for _, v in ipairs(spec) do + if opts.prefix then + v[0] = opts.prefix .. v[0] + end + if opts.buffer then + v.buffer = opts.buffer + end + end + end +end + +return function(c, b) + local lsp = vim.lsp + local lbf = lsp.buf + local wk = require 'which-key' + vim.api.nvim_buf_set_option(b, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + wk.add(helper({buffer = b}, { + { '<leader>F', function() vim.lsp.buf.format {async = true} end, + desc = 'run format' }, + }, helper({prefix = '<localleader><localleader>'}, { + { '', group = '+lsp' }, + { 'w', group = '+workspace' }, + + { 'D', lbf.declaration, desc = 'goto declaration' }, + { 'd', lbf.definition, desc = 'goto definition' }, + { 'k', lbf.hover, desc = 'hover' }, + { 'K', lbf.signature_help, desc = 'signature help' }, + { 'i', lbf.implementation, desc = 'goto implementation' }, + { 't', lbf.type_definition, desc = 'goto type definition' }, + { 'r', lbf.rename, desc = 'rename' }, + { 'c', lbf.code_action, desc = 'code action' }, + { 'R', lbf.references, desc = 'list references' }, + + { 'wa', lbf.add_workspace_folder, 'add folder' }, + { 'wr', lbf.remove_workspace_folder, 'remove folder' }, + { 'wl', function() print(vim.inspect(lbf.list_workspace_folders())) end, + desc = 'list folders' }, + }))) +end diff --git a/dot_config/nvim/lua/toast/core.lua b/dot_config/nvim/lua/toast/core.lua index 3313de7..765a29d 100644 --- a/dot_config/nvim/lua/toast/core.lua +++ b/dot_config/nvim/lua/toast/core.lua @@ -1,12 +1,22 @@ -- [nfnl] Compiled from fnl/toast/core.fnl by https://github.com/Olical/nfnl, do not edit. local _local_1_ = require("toast.table") local insert = _local_1_["insert"] +local unpack = _local_1_["unpack"] local function dec(n) return (n - 1) end local function inc(n) return (n + 1) end +local function empty_3f(xs) + return (0 == #xs) +end +local function nil_3f(x) + return (nil == x) +end +local function number_3f(n) + return ("number" == type(n)) +end local function drop(n, xs) local out = {} for i, v in ipairs(xs) do @@ -17,9 +27,6 @@ local function drop(n, xs) end return out end -local function empty_3f(xs) - return (0 == #xs) -end local function first(xs) return xs[1] end @@ -51,19 +58,65 @@ local function group(n, xs) return out end end +local function assoc(_3ft, ...) + local t = (_3ft or {}) + local lt = inc(#t) + local _let_7_ = {...} + local k = _let_7_[1] + local v = _let_7_[2] + local xs = (function (t, k, e) local mt = getmetatable(t) if 'table' == type(mt) and mt.__fennelrest then return mt.__fennelrest(t, k) elseif e then local rest = {} for k, v in pairs(t) do if not e[k] then rest[k] = v end end return rest else return {(table.unpack or unpack)(t, k)} end end)(_let_7_, 3) + do + local _8_ = k + if (_8_ == nil) then + else + local function _9_(...) + local k0 = _8_ + return (number_3f(k0) and (lt > k0)) + end + if ((nil ~= _8_) and _9_(...)) then + local k0 = _8_ + t[k0] = v + else + local function _10_(...) + local k0 = _8_ + return (number_3f(k0) and (k0 == lt)) + end + if ((nil ~= _8_) and _10_(...)) then + local k0 = _8_ + table.insert(t, k0, v) + elseif true then + local _ = _8_ + t[k] = v + else + end + end + end + end + local _12_ = #xs + if (_12_ == 0) then + return t + elseif (_12_ == 1) then + return error("assoc expects even number of arguments after table, found odd number") + elseif true then + local _ = _12_ + return assoc(t, unpack(xs)) + else + return nil + end +end local function map(f, xs) local out = {} - for _, v in ipairs(xs) do + for _, v in ipairs((xs or {})) do local mapped = f(v) - local function _7_() + local function _14_() if (0 == select("#", mapped)) then return nil else return mapped end end - out = insert(out, _7_()) + out = insert(out, _14_()) end return out end -return {dec = dec, inc = inc, drop = drop, ["empty?"] = empty_3f, group = group, first = first, last = last} +return {dec = dec, inc = inc, ["empty?"] = empty_3f, ["nil?"] = nil_3f, ["number?"] = number_3f, drop = drop, first = first, last = last, group = group, assoc = assoc, map = map} diff --git a/dot_config/nvim/lua/toast/table.lua b/dot_config/nvim/lua/toast/table.lua index b2633a2..a898a5e 100644 --- a/dot_config/nvim/lua/toast/table.lua +++ b/dot_config/nvim/lua/toast/table.lua @@ -13,4 +13,5 @@ local function insert(t, ...) table.insert(t, ...) return t end -return {["from-pairs"] = from_pairs, insert = insert} +local unpack = (table.unpack or unpack) +return {["from-pairs"] = from_pairs, insert = insert, unpack = unpack} diff --git a/dot_config/nvim/post.fnl b/dot_config/nvim/post.fnl new file mode 100644 index 0000000..dcde504 --- /dev/null +++ b/dot_config/nvim/post.fnl @@ -0,0 +1,4 @@ +; custom filetypes +(local fts [{:extension {:janet :janet}} + {:extension {:cls :latex}}]) +(each [_ v (ipairs fts)] (vim.filetype.add v)) diff --git a/dot_config/nvim/post.lua b/dot_config/nvim/post.lua index 27ce67e..3650d37 100644 --- a/dot_config/nvim/post.lua +++ b/dot_config/nvim/post.lua @@ -1,3 +1,6 @@ --- custom filetypes -vim.filetype.add {extension = { janet = 'janet' }} -vim.filetype.add {extension = { cls = 'latex' }} +-- [nfnl] Compiled from post.fnl by https://github.com/Olical/nfnl, do not edit. +local fts = {{extension = {janet = "janet"}}, {extension = {cls = "latex"}}} +for _, v in ipairs(fts) do + vim.filetype.add(v) +end +return nil diff --git a/dot_config/nvim/pre.fnl b/dot_config/nvim/pre.fnl new file mode 100644 index 0000000..13fd676 --- /dev/null +++ b/dot_config/nvim/pre.fnl @@ -0,0 +1,26 @@ +(set vim.g.mapleader " ") +(set vim.g.maplocalleader "\\") + +(local options {:timeoutlen 300 + :clipboard :unnamedplus + :completeopt "menu,menuone,noselect" + :mouse :a + :smartcase true + :smartindent true + :backup false + :swapfile false + :termguicolors true + :expandtab false + :shiftwidth 4 + :tabstop 4 + :number true + :numberwidth 2 + :scrolloff 4 + :sidescrolloff 4 + :foldmethod :expr + :foldexpr "nvim_treesitter#foldexpr()" + :foldlevelstart 99 + :wrap true}) + +(each [k v (pairs options)] + (tset vim.opt k v)) diff --git a/dot_config/nvim/pre.lua b/dot_config/nvim/pre.lua index 2c822ad..d6c3f96 100644 --- a/dot_config/nvim/pre.lua +++ b/dot_config/nvim/pre.lua @@ -1,27 +1,8 @@ -vim.g.mapleader = ' ' -vim.g.maplocalleader = '\\' - --- options -local options = { - timeoutlen = 300, - clipboard = 'unnamedplus', - completeopt = 'menu,menuone,noselect', - mouse = 'a', - smartcase = true, - smartindent = true, - backup = false, - swapfile = false, - termguicolors = true, - expandtab = false, - shiftwidth = 4, - tabstop = 4, - number = true, - numberwidth = 2, - scrolloff = 4, - sidescrolloff = 4, - foldmethod = 'expr', - foldexpr = 'nvim_treesitter#foldexpr()', - foldlevelstart = 99, - wrap = true, -} -for k, v in pairs(options) do vim.opt[k] = v end +-- [nfnl] Compiled from pre.fnl by https://github.com/Olical/nfnl, do not edit. +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" +local options = {timeoutlen = 300, clipboard = "unnamedplus", completeopt = "menu,menuone,noselect", mouse = "a", smartcase = true, smartindent = true, termguicolors = true, shiftwidth = 4, tabstop = 4, number = true, numberwidth = 2, scrolloff = 4, sidescrolloff = 4, foldmethod = "expr", foldexpr = "nvim_treesitter#foldexpr()", foldlevelstart = 99, wrap = true, expandtab = false, backup = false, swapfile = false} +for k, v in pairs(options) do + vim.opt[k] = v +end +return nil |
