summaryrefslogtreecommitdiff
path: root/fnl/config
diff options
context:
space:
mode:
Diffstat (limited to 'fnl/config')
-rw-r--r--fnl/config/alpha.fnl41
-rw-r--r--fnl/config/autocmd.fnl32
-rw-r--r--fnl/config/autopairs.fnl21
-rw-r--r--fnl/config/better-escape.fnl8
-rw-r--r--fnl/config/bufferline.fnl69
-rw-r--r--fnl/config/cmp.fnl42
-rw-r--r--fnl/config/colorizer.fnl5
-rw-r--r--fnl/config/colorscheme.fnl8
-rw-r--r--fnl/config/gitsigns.fnl48
-rw-r--r--fnl/config/hop.fnl8
-rw-r--r--fnl/config/impatient.fnl5
-rw-r--r--fnl/config/init.fnl23
-rw-r--r--fnl/config/lsp/handlers.fnl61
-rw-r--r--fnl/config/lsp/init.fnl7
-rw-r--r--fnl/config/lsp/lsp-installer.fnl22
-rw-r--r--fnl/config/lsp/null-ls.fnl26
-rw-r--r--fnl/config/lsp/settings/jsonls.fnl12
-rw-r--r--fnl/config/lsp/settings/pyright.fnl4
-rw-r--r--fnl/config/lsp/settings/sumneko-lua.fnl23
-rw-r--r--fnl/config/lualine.fnl48
-rw-r--r--fnl/config/ncomment.fnl23
-rw-r--r--fnl/config/nvim-tree.fnl82
-rw-r--r--fnl/config/orgmode.fnl17
-rw-r--r--fnl/config/packer.fnl7
-rw-r--r--fnl/config/project.fnl19
-rw-r--r--fnl/config/spectre.fnl64
-rw-r--r--fnl/config/telescope.fnl83
-rw-r--r--fnl/config/treesitter.fnl32
-rw-r--r--fnl/config/which-key.fnl129
-rw-r--r--fnl/config/zen.fnl13
30 files changed, 982 insertions, 0 deletions
diff --git a/fnl/config/alpha.fnl b/fnl/config/alpha.fnl
new file mode 100644
index 0000000..4fb51ec
--- /dev/null
+++ b/fnl/config/alpha.fnl
@@ -0,0 +1,41 @@
+;; A customizable greeter.
+(module config.alpha {autoload {util util}})
+
+(def- ascii-art [" ##############..... ############## "
+ " ##############......############## "
+ " ##########..........########## "
+ " ##########........########## "
+ " ##########.......########## "
+ " ##########.....##########.. "
+ " ##########....##########..... "
+ " ..##########..##########......... "
+ " ....##########.#########............. "
+ " ..################JJJ............ "
+ " ################............. "
+ " ##############.JJJ.JJJJJJJJJJ "
+ " ############...JJ...JJ..JJ JJ "
+ " ##########....JJ...JJ..JJ JJ "
+ " ########......JJJ..JJJ JJJ JJJ "
+ " ###### ......... "
+ " ..... "
+ " . "])
+
+(let [alpha (util.load-plugin :alpha)]
+ (let [dashboard (require :alpha.themes.dashboard)]
+ (do
+ (set dashboard.section.header.val ascii-art)
+ (set dashboard.section.buttons.val
+ [(dashboard.button :f " Find file"
+ ":Telescope file_browser <CR>")
+ (dashboard.button :e " New file" ":ene <BAR> startinsert <CR>")
+ (dashboard.button :p " Find project" ":Telescope projects <CR>")
+ (dashboard.button :r " Recently used files"
+ ":Telescope oldfiles <CR>")
+ (dashboard.button :t " Find text" ":Telescope live_grep <CR>")
+ (dashboard.button :c " Configuration"
+ ":e ~/.config/nvim/init.lua <CR>")
+ (dashboard.button :q " Quit Neovim" ":qa<CR>")])
+ (set dashboard.section.header.opts.hl :AlphaHeader)
+ (set dashboard.section.buttons.opts.hl :AlphaButtons)
+ (set dashboard.opts.opts.noautocmd true)
+ (alpha.setup dashboard.opts))))
diff --git a/fnl/config/autocmd.fnl b/fnl/config/autocmd.fnl
new file mode 100644
index 0000000..628a670
--- /dev/null
+++ b/fnl/config/autocmd.fnl
@@ -0,0 +1,32 @@
+;; A customizable greeter.
+(module config.autocmd {autoload {nvim aniseed.nvim util util}})
+
+(defn autocmd [group cmds] (nvim.command (.. "augroup " group))
+ (nvim.command :autocmd!)
+ (each [_ cmd (ipairs cmds)]
+ (nvim.command (.. "autocmd " cmd))) (nvim.command "augroup end"))
+
+(def- general-settings ["FileType qf,help,man,lspinfo nnoremap <silent> <buffer> q :close<CR>"
+ "TextYankPost * silent!lua require('vim.highlight').on_yank({higroup = 'Search', timeout = 200})"
+ "BufWinEnter * :set formatoptions-=cro"
+ "FileType qf set nobuflisted"])
+
+(def- git ["FileType gitcommit setlocal wrap"
+ "FileType gitcommit setlocal spell"])
+
+(def- markdown ["FileType markdown setlocal wrap"
+ "FileType markdown setlocal spell"])
+
+(def- auto-resize ["VimResized * tabdo wincmd ="])
+
+(def- alpha
+ ["User AlphaReady set showtabline=0 | autocmd BufUnload <buffer> set showtabline=2"])
+
+(def- packer ["BufWritePost plugins.lua source <afile> | PackerSync"])
+
+(autocmd :_general_settings general-settings)
+(autocmd :_git git)
+(autocmd :_markdown markdown)
+(autocmd :_auto_resize auto-resize)
+(autocmd :_alpha alpha)
+(autocmd :packer_user_config packer)
diff --git a/fnl/config/autopairs.fnl b/fnl/config/autopairs.fnl
new file mode 100644
index 0000000..2b175fa
--- /dev/null
+++ b/fnl/config/autopairs.fnl
@@ -0,0 +1,21 @@
+;; Autopairs for brackets and quote symbols.
+(module config.autopairs {autoload {util util}})
+
+(let [npairs (util.load-plugin :nvim-autopairs)]
+ (npairs.setup {:check_ts true
+ :ts_config {:lua [:string :source]
+ :javascript [:string :template_string]
+ :java false}
+ :disable_filetype [:TelescopePrompt :spectre_panel]
+ :fast_warp {:map :<M-e>
+ :chars ["{" "[" "(" "\"" "'"]
+ :pattern (string.gsub "[%'%\"%)%>%]%)%}%,]" "%s+"
+ "")
+ :check_comma true
+ :highlight :PmenuSel
+ :highlight_grey :LineNr
+ :offset 0
+ :end_key "$"
+ :keys :qwertyuiopzxcvbnmasdfghjkl
+ :highlight :PmenuSel
+ :highlight_grey :LineNr}}))
diff --git a/fnl/config/better-escape.fnl b/fnl/config/better-escape.fnl
new file mode 100644
index 0000000..93ec0a9
--- /dev/null
+++ b/fnl/config/better-escape.fnl
@@ -0,0 +1,8 @@
+;; Better escape without nasty delay
+(module config.better-escape {autoload {util util}})
+
+(let [better-escape (util.load-plugin :better_escape)]
+ (better-escape.setup {:mapping [:jk :jj]
+ :timeout vim.o.timeoutlen
+ :clear_empty_lines false
+ :keys :<Esc>}))
diff --git a/fnl/config/bufferline.fnl b/fnl/config/bufferline.fnl
new file mode 100644
index 0000000..8e6d094
--- /dev/null
+++ b/fnl/config/bufferline.fnl
@@ -0,0 +1,69 @@
+;; Topbar that displays open buffers.
+(module config.bufferline {autoload {util util}})
+
+(def- options {:numbers :none
+ :close_command "Bdelete! %d"
+ :right_mouse_command nil
+ :left_mouse_command nil
+ :middle_mouse_command nil
+ :indicator_icon ""
+ :buffer_close_icon ""
+ :modified_icon "●"
+ :close_icon ""
+ :left_trunc_marker "<"
+ :right_trunc_marker ">"
+ :max_name_length 30
+ :max_prefix_length 30
+ :tab_size 21
+ :diagnostics false
+ :diagnostics_update_in_insert false
+ :offsets [{:filetype :NvimTree :text "" :padding 1}]
+ :show_buffer_icons false
+ :show_buffer_close_icons false
+ :show_close_icon false
+ :show_tab_indicators false
+ :persist_buffer_sort true
+ :separator_style :thin
+ :enforce_regular_tabs true
+ :always_show_bufferline true})
+
+(def- default-bg-tabline {:attribute :bg :highlight :TabLine})
+
+(def- default-bg-normal {:attribute :bg :highlight :Normal})
+
+(def- default-fg-tabline {:attribute :fg :highlight :TabLine})
+
+(def- default-fg-normal {:attribute :fg :highlight :Normal})
+
+(def- highlights
+ {:fill {:guifg {:attribute :fg :highlight "#ff0000"}
+ :guibg default-bg-tabline}
+ :background {:guifg default-fg-tabline :guibg default-bg-tabline}
+ :buffer_visible {:guifg default-fg-tabline :guibg default-bg-tabline}
+ :close_button {:guifg default-fg-tabline :guibg default-bg-tabline}
+ :close_button_visible {:guifg default-fg-tabline
+ :guibg default-bg-tabline}
+ :tab_selected {:guifg default-fg-normal :guibg default-bg-normal}
+ :tab {:guifg default-fg-tabline :guibg default-bg-tabline}
+ :tab_close {:guifg {:attribute :fg :highlight :TabLineSel}
+ :guibg default-bg-normal}
+ :duplicate_selected {:guifg {:attribute :fg :highlight :TabLineSel}
+ :guibg {:attribute :bg :highlight :TabLineSel}
+ :gui :italic}
+ :duplicate_visible {:guifg default-fg-tabline
+ :guibg default-bg-tabline
+ :gui :italic}
+ :duplicate {:guifg default-fg-tabline
+ :guibg default-bg-tabline
+ :gui :italic}
+ :modified {:guifg default-fg-tabline :guibg default-bg-tabline}
+ :modified_selected {:guifg default-fg-normal :guibg default-bg-normal}
+ :modified_visible {:guifg default-fg-tabline :guibg default-bg-tabline}
+ :separator {:guifg default-bg-tabline :guibg default-bg-tabline}
+ :separator_selected {:guifg default-bg-normal :guibg default-bg-normal}
+ :indicator_selected {:guifg {:attribute :fg
+ :highlight :LspDiagnosticsDefaultHint}
+ :guibg default-bg-normal}})
+
+(let [bufferline (util.load-plugin :bufferline)]
+ (bufferline.setup {: options : highlights}))
diff --git a/fnl/config/cmp.fnl b/fnl/config/cmp.fnl
new file mode 100644
index 0000000..50c0d85
--- /dev/null
+++ b/fnl/config/cmp.fnl
@@ -0,0 +1,42 @@
+;; Configuration for completion plugin.
+(module config.cmp {autoload {nvim aniseed.nvim util util}})
+
+(let [cmp (util.load-plugin :cmp)
+ lspkind (util.load-plugin :lspkind)
+ luasnip (util.load-plugin :luasnip)]
+ ;;((require :luasnip/loaders/from_vscode).lazy_load)
+ (lspkind.init)
+ (cmp.setup {:snippet {:expand (fn [args]
+ (luasnip.lsp_expand args.body))}
+ :mapping {:<C-k> (cmp.mapping.select_prev_item)
+ :<C-j> (cmp.mapping.select_next_item)
+ :<C-b> (cmp.mapping (cmp.mapping.scroll_docs -1)
+ [:i :c])
+ :<C-f> (cmp.mapping (cmp.mapping.scroll_docs 1) [:i :c])
+ :<C-space> (cmp.mapping (cmp.mapping.complete) [:i :c])
+ :<C-e> (cmp.mapping {:i (cmp.mapping.abort)
+ :c (cmp.mapping.close)})
+ :<CR> (cmp.mapping.confirm {:select true})
+ :<CR> (cmp.mapping.confirm {:select true})}
+ :sources [{:name :nvim_lsp}
+ {:name :nvim_lua}
+ {:name :luasnip}
+ {:name :buffer :keyword_length 4}
+ {:name :path :keyword_length 6}]
+ :formatting {:format (lspkind.cmp_format {:with_text true
+ :menu {:buffer "[Buf]"
+ :nvim_lsp "[LSP]"
+ :nvim_lua "[api]"
+ :path "[path]"
+ :luasnip "[Snip]"}})}
+ :documentation {:border ["╭"
+ "─"
+ "╮"
+ "│"
+ "╯"
+ "─"
+ "╰"
+ "│"]}
+ :confirm_opts {:behavior cmp.ConfirmBehavior.Replace
+ :select false}
+ :experimental {:ghost_text false :native_menu false}}))
diff --git a/fnl/config/colorizer.fnl b/fnl/config/colorizer.fnl
new file mode 100644
index 0000000..4d0b381
--- /dev/null
+++ b/fnl/config/colorizer.fnl
@@ -0,0 +1,5 @@
+;; Enables colorization of color codes in source files.
+(module config.colorizer {autoload {util util}})
+
+(let [colorizer (util.load-plugin :colorizer)]
+ (colorizer.setup))
diff --git a/fnl/config/colorscheme.fnl b/fnl/config/colorscheme.fnl
new file mode 100644
index 0000000..989ee75
--- /dev/null
+++ b/fnl/config/colorscheme.fnl
@@ -0,0 +1,8 @@
+;; Load neovim colorscheme.
+(module config.colorscheme {autoload {util util}})
+
+(local colorscheme :no-clown-fiesta)
+
+(let [(ok? _) (pcall (vim.cmd (.. "colorscheme " :no-clown-fiesta)))]
+ (if (not ok?)
+ (vim.notify (.. "colorscheme " colorscheme " not found!"))))
diff --git a/fnl/config/gitsigns.fnl b/fnl/config/gitsigns.fnl
new file mode 100644
index 0000000..07b9157
--- /dev/null
+++ b/fnl/config/gitsigns.fnl
@@ -0,0 +1,48 @@
+;; Add git signs to source files.
+(module config.gitsigns {autoload {util util}})
+
+(def- signs {:add {:hl :GitSignsAdd
+ :text "▎"
+ :numhl :GitSignsAddNr
+ :linehl :GitSignsAddLn}
+ :change {:hl :GitSignsChange
+ :text "▎"
+ :numhl :GitSignsChangeNr
+ :linehl :GitSignsChangeLn}
+ :delete {:hl :GitSignsDelete
+ :text "契"
+ :numhl :GitSignsDeleteNr
+ :linehl :GitSignsDeleteLn}
+ :topdelete {:hl :GitSignsDelete
+ :text "契"
+ :numhl :GitSignsDeleteNr
+ :linehl :GitSignsDeleteLn}
+ :changedelete {:hl :GitSignsChange
+ :text "▎"
+ :numhl :GitSignsChangeNr
+ :linehl :GitSignsChangeLn}})
+
+(let [gitsigns (util.load-plugin :gitsigns)]
+ (gitsigns.setup {: signs
+ :signcolumn true
+ :numhl false
+ :linehl false
+ :word_diff false
+ :watch_gitdir {:interval 1000 :follow_files true}
+ :attach_to_untracked true
+ :current_line_blame false
+ :current_line_blame_opts {:virt_text true
+ :virt_text_pos :eol
+ :delay 1000
+ :ignore_whitespace false}
+ :current_line_blame_formatter_opts {:relative_time false}
+ :sign_priority 6
+ :update_debounce 100
+ :status_formatter nil
+ :max_file_length 40000
+ :preview_config {:border :single
+ :style :minimal
+ :relative :cursor
+ :row 0
+ :col 1}
+ :yadm {:enable false}}))
diff --git a/fnl/config/hop.fnl b/fnl/config/hop.fnl
new file mode 100644
index 0000000..f623c0f
--- /dev/null
+++ b/fnl/config/hop.fnl
@@ -0,0 +1,8 @@
+;; Hopping in text.
+(module config.hop {autoload {util util nvim aniseed.nvim}})
+
+(let [hop (util.load-plugin :hop)]
+ (hop.setup {}))
+
+(nvim.set_keymap :n :s ":HopChar2<cr>" {:silent true})
+(nvim.set_keymap :n :S ":HopWord<cr>" {:silent true})
diff --git a/fnl/config/impatient.fnl b/fnl/config/impatient.fnl
new file mode 100644
index 0000000..ab37eb3
--- /dev/null
+++ b/fnl/config/impatient.fnl
@@ -0,0 +1,5 @@
+;; Speeds up loading of plugins.
+(module config.impatient {autoload {util util}})
+
+(let [impatient (util.load-plugin :impatient)]
+ (impatient.enable_profile))
diff --git a/fnl/config/init.fnl b/fnl/config/init.fnl
new file mode 100644
index 0000000..3ccff7d
--- /dev/null
+++ b/fnl/config/init.fnl
@@ -0,0 +1,23 @@
+;; Load all plugin configs.
+(module config.init {require {_ config.impatient
+ _ config.packer
+ _ config.autocmd
+ _ config.alpha
+ _ config.autopairs
+ _ config.better-escape
+ _ config.bufferline
+ _ config.cmp
+ _ config.colorizer
+ _ config.colorscheme
+ _ config.gitsigns
+ _ config.lualine
+ _ config.ncomment
+ _ config.nvim-tree
+ _ config.orgmode
+ _ config.project
+ _ config.spectre
+ _ config.telescope
+ _ config.treesitter
+ _ config.which-key
+ _ config.zen
+ _ config.lsp}})
diff --git a/fnl/config/lsp/handlers.fnl b/fnl/config/lsp/handlers.fnl
new file mode 100644
index 0000000..1e3785b
--- /dev/null
+++ b/fnl/config/lsp/handlers.fnl
@@ -0,0 +1,61 @@
+(module config.lsp.handlers {autoload {util util nvim aniseed.nvim}})
+
+(def- signs [{:name :DiagnosticSignError :text ""}
+ {:name :DiagnosticSignWarn :text ""}
+ {:name :DiagnosticSignHint :text ""}
+ {:name :DiagnosticSignInfo :text ""}])
+
+(defn- apply-signs [] (each [_ sign (ipairs signs)]
+ (vim.fn.sign_define sign.name
+ {:texthl sign.name
+ :text sign.text
+ :numhl ""})))
+
+(def- config {:virtual_text false
+ :signs {:active signs}
+ :update_in_insert true
+ :underline true
+ :severity_sort true
+ :float {:focusable false
+ :style :minimal
+ :border :rounded
+ :source :always
+ :header ""
+ :prefix ""}})
+
+(defn setup [] (apply-signs) (vim.diagnostic.config config)
+ (set vim.lsp.handlers.textDocument/hover
+ (vim.lsp.with {:border :rounded}))
+ (set vim.lsp.handlers.textDocument/signatureHelp
+ (vim.lsp.with vim.lsp.handlers.signature_help {:border :rounded})))
+
+(defn- lsp-keymaps [bufnr]
+ (let [opts {:noremap true :silent true}]
+ (nvim.buf_set_keymap bufnr :n :gD
+ "<cmd>lua vim.lsp.buf.declaration()<CR>" opts)
+ (nvim.buf_set_keymap bufnr :n :gd
+ "<cmd>lua vim.lsp.buf.definition()<CR>" opts)
+ (nvim.buf_set_keymap bufnr :n :K "<cmd>lua vim.lsp.buf.hover()<CR>"
+ opts)
+ (nvim.buf_set_keymap bufnr :n :gI
+ "<cmd>lua vim.lsp.buf.implementation()<CR>" opts)
+ (nvim.buf_set_keymap bufnr :n :gr
+ "<cmd>lua vim.lsp.buf.references()<CR>" opts)
+ (nvim.buf_set_keymap bufnr :n :gl
+ "<cmd>lua vim.diagnostic.open_float()<CR>" opts)
+ (nvim.buf_set_keymap bufnr :n :<leader>q
+ "<cmd>lua vim.diagnostic.setloclist()<CR>" opts)))
+
+(defn on-attach [client bufnr] (if (= client.name :html)
+ (set client.resolved_capabilities.document_formatting
+ false))
+ (lsp-keymaps bufnr))
+
+(defn capabilities [] (let [capabilities (vim.lsp.protocol.make_client_capabilities)]
+ (set capabilities.textDocument.completion.completionItem.snippetSupport
+ true)
+ (let [cmp-nvim-lsp (util.load-plugin :cmp_nvim_lsp)]
+ (cmp-nvim-lsp.update_capabilities capabilities))
+ capabilities))
+
+(setup)
diff --git a/fnl/config/lsp/init.fnl b/fnl/config/lsp/init.fnl
new file mode 100644
index 0000000..c4a461d
--- /dev/null
+++ b/fnl/config/lsp/init.fnl
@@ -0,0 +1,7 @@
+;; Loads the LSP module.
+(module config.lsp.init {autoload {util util}})
+
+(let [_ (util.load-plugin :lspconfig)]
+ (require :config.lsp.lsp-installer)
+ (require :config.lsp.handlers)
+ (require :config.lsp.null-ls))
diff --git a/fnl/config/lsp/lsp-installer.fnl b/fnl/config/lsp/lsp-installer.fnl
new file mode 100644
index 0000000..72bef8e
--- /dev/null
+++ b/fnl/config/lsp/lsp-installer.fnl
@@ -0,0 +1,22 @@
+;; LSP installer.
+(module config.lsp.lsp-installer {autoload {util util}})
+
+(def- opts (let [handlers (require :config.lsp.handlers)]
+ {"on_attach:" handlers.on_attach
+ :capabilities handlers.capabilities}))
+
+(defn- get-server-opts [server]
+ (when (= server.name :jsonls)
+ (let [jsonls-opts (require :config.lsp.settings.jsonls)]
+ (vim.tbl_deep_extend :force jsonls-opts opts)))
+ (when (= server.name :sumneko_lua)
+ (let [sumneko-lua (require :config.lsp.settings.sumneko-lua)]
+ (vim.tbl_deep_extend :force sumneko-lua.opts opts)))
+ (when (= server.name :pyright)
+ (let [pyright (require :config.lsp.settings.pyright)]
+ (vim.tbl_deep_extend :force pyright.opts opts))) opts)
+
+(let [lsp-installer (util.load-plugin :nvim-lsp-installer)]
+ (lsp-installer.on_server_ready (fn [server]
+ (let [opts (get-server-opts server)]
+ (server:setup opts)))))
diff --git a/fnl/config/lsp/null-ls.fnl b/fnl/config/lsp/null-ls.fnl
new file mode 100644
index 0000000..8a95ba9
--- /dev/null
+++ b/fnl/config/lsp/null-ls.fnl
@@ -0,0 +1,26 @@
+;; Adds LSP diagnostics and formatting.
+(module config.lsp.null-ls {autoload {util util}})
+
+(let [null-ls (util.load-plugin :null-ls)]
+ (let [formatting null-ls.builtins.formatting
+ diagnostics null-ls.builtins.diagnostics]
+ (null-ls.setup {:debug false
+ :sources [diagnostics.flake8
+ diagnostics.golangci_lint
+ diagnostics.jsonlint
+ diagnostics.shellcheck
+ diagnostics.yamllint
+ (formatting.black.with {:extra_args [:--fast]})
+ formatting.erlfmt
+ formatting.fourmolu
+ formatting.gofmt
+ formatting.goimports
+ formatting.nixfmt
+ (formatting.prettier.with {:extra_args [:--no-semi
+ :--single-quote
+ :--jsx-single-quote]})
+ formatting.rustfmt
+ formatting.shfmt
+ formatting.sqlformat
+ formatting.stylua
+ formatting.terraform_fmt]})))
diff --git a/fnl/config/lsp/settings/jsonls.fnl b/fnl/config/lsp/settings/jsonls.fnl
new file mode 100644
index 0000000..73e8975
--- /dev/null
+++ b/fnl/config/lsp/settings/jsonls.fnl
@@ -0,0 +1,12 @@
+;; Json schema store catalog language server.
+(module config.lsp.settings.jsonls {autoload {util util}})
+
+(let [schemastore (util.load-plugin :schemastore)]
+ (schemastore.setup {:init_options {:providerFormatter false}
+ :settings {:json {:schemas (schemastore.json.schemas)}}
+ :setup {:commands {:Format [(fn []
+ (vim.lsp.buf.range_formatting []
+ [0
+ 0]
+ [(vim.fn.line "$"
+ 0)]))]}}}))
diff --git a/fnl/config/lsp/settings/pyright.fnl b/fnl/config/lsp/settings/pyright.fnl
new file mode 100644
index 0000000..639ecff
--- /dev/null
+++ b/fnl/config/lsp/settings/pyright.fnl
@@ -0,0 +1,4 @@
+;; Config for pyright language server.
+(module config.lsp.settings.pyright)
+
+(def opts {:settings {:python {:analysis {:typeCheckingMode :off}}}})
diff --git a/fnl/config/lsp/settings/sumneko-lua.fnl b/fnl/config/lsp/settings/sumneko-lua.fnl
new file mode 100644
index 0000000..90c8807
--- /dev/null
+++ b/fnl/config/lsp/settings/sumneko-lua.fnl
@@ -0,0 +1,23 @@
+;; Config for a Lua language server.
+(module config.lsp.settings.sumneko-lua)
+
+(def- workspace
+ {:library {(vim.fn.expand :$VIMRUNTIME/lua) true
+ (vim.fn.expand :$VIMRUNTIME/lua/vim/lsp) true}})
+
+(def- diagnostics {:globals [:vim
+ :map
+ :filter
+ :range
+ :reduce
+ :head
+ :tail
+ :nth
+ :use
+ :describe
+ :it
+ :dump]})
+
+(def- runtime {:version :LuaJIT :path (vim.split package.path ";")})
+
+(def opts {:settings {:Lua {: diagnostics : workspace}}})
diff --git a/fnl/config/lualine.fnl b/fnl/config/lualine.fnl
new file mode 100644
index 0000000..5ab0920
--- /dev/null
+++ b/fnl/config/lualine.fnl
@@ -0,0 +1,48 @@
+;; Statusbar.
+(module config.lualine {autoload {util util}})
+
+(defn- hide-in-width [] (> (vim.fn.winwidth 0) 80))
+
+(def- diagnostics {1 :diagnostics
+ :sources [:nvim_diagnostic]
+ :sections [:error :warn]
+ :symbols {:error " " :warn " "}
+ :colored false
+ :update_in_insert false
+ :always_visible true})
+
+(def- diff {1 :diff
+ :colored false
+ :symbols {:added " " :modified " " :removed " "}
+ :cond hide-in-width})
+
+(def- branch {1 "b:gitsigns_head" :icon " " :cond hide-in-width})
+
+(def- filetype {1 :filetype :cond hide_in_width :color {}})
+
+(let [lualine (util.load-plugin :lualine)]
+ (lualine.setup {:options {:icons_enabled true
+ :theme :auto
+ :component_separators {:left "" :right ""}
+ :section_separators {:left "" :right ""}
+ :disabled_filetypes [:alpha
+ :dashboard
+ :NvimTree
+ :Outline]
+ :always_divide_middle true}
+ :sections {:lualine_a [:mode]
+ :lualine_b [branch :filename]
+ :lualine_c [diff]
+ :lualine_x [diagnostics filetype]
+ :lualine_y {}
+ :lualine_z [:location :progress :encoding]}
+ :inactive_sections {:lualine_a [:mode]
+ :lualine_b [:filename]
+ :lualine_c {}
+ :lualine_x {}
+ :lualine_y {}
+ :lualine_z [:location
+ :progress
+ :encoding]}
+ :tabline {}
+ :extensions {}}))
diff --git a/fnl/config/ncomment.fnl b/fnl/config/ncomment.fnl
new file mode 100644
index 0000000..217ba6d
--- /dev/null
+++ b/fnl/config/ncomment.fnl
@@ -0,0 +1,23 @@
+;; Language aware commenting.
+(module config.ncomment {autoload {util util}})
+
+(defn- get-type [ctx U] (or (and (= ctx.ctype U.ctype.line) :__default)
+ :__multiline))
+
+(defn- get-location [ctx U] (if (= ctx.ctype U.ctype.block)
+ ((require :ts_context_commentstring.utils) .get_cursor_location)
+ (or (= ctx.motion U.motion.v)
+ (= ctx.motion U.cmotion.V))
+ ((require :ts_context_commentstring.utils) .get_visual_start_location)
+ nil))
+
+(defn- pre-hook [ctx]
+ (let [U (require :Comment.utils)]
+ ((require :ts_context_commentstring.internal) .calculate_commentstring
+ {:key (get-type ctx U)
+ :location (get-location ctx
+ U)})))
+
+(let [ncomment (util.load-plugin :Comment)]
+ (ncomment.setup {:pre_hook (fn [ctx]
+ (pre-hook ctx))}))
diff --git a/fnl/config/nvim-tree.fnl b/fnl/config/nvim-tree.fnl
new file mode 100644
index 0000000..672e370
--- /dev/null
+++ b/fnl/config/nvim-tree.fnl
@@ -0,0 +1,82 @@
+;; A file explorer.
+(module config.nvim-tree {autoload {util util nvim aniseed.nvim}})
+
+(set nvim.g.nvim_tree_show_icons
+ {:default ""
+ :symlink ""
+ :git {:unstaged ""
+ :staged :S
+ :unmerged ""
+ :renamed "➜"
+ :deleted ""
+ :untracked :U
+ :ignored "◌"}
+ :folder {:default ""
+ :open ""
+ :empty ""
+ :empty_open ""
+ :symlink ""}})
+
+(let [nvim-tree (util.load-plugin :nvim-tree)
+ nvim-tree-config (util.load-plugin :nvim-tree.config)]
+ (let [tree-cb nvim-tree-config.nvim_tree_callback]
+ (nvim-tree.setup {:auto_reload_on_write true
+ :disable_netrw false
+ :hide_root_folder false
+ :hijack_cursor false
+ :hijack_netrw true
+ :hijack_unnamed_buffer_when_opening false
+ :ignore_buffer_on_setup false
+ :open_on_setup false
+ :open_on_tab false
+ :sort_by :name
+ :update_cwd true
+ :view {:width 30
+ :height 30
+ :side :left
+ :preserve_window_proportions false
+ :number false
+ :relativenumber false
+ :signcolumn :yes
+ :mappings {:custom_only false
+ :list [{:key [:l :<CR> :o]
+ :cb (tree_cb :edit)}
+ {:key :h
+ :cb (tree_cb :close_node)}
+ {:key :v :cb (tree_cb :vsplit)}]}}
+ :hijack_directories {:enable true :auto_open true}
+ :update_focused_file {:enable true
+ :update_cwd true
+ :ignore_list {}}
+ :ignore_ft_on_setup [:startify :dashboard :alpha]
+ :system_open {:cmd nil :args {}}
+ :diagnostics {:enable true
+ :show_on_dirs false
+ :icons {:hint ""
+ :info ""
+ :warning ""
+ :error ""}}
+ :filters {:dotfiles false :custom {} :exclude {}}
+ :git {:enable true :ignore true :timeout 400}
+ :actions {:change_dir {:enable true :global false}
+ :open_file {:quit_on_open false
+ :resize_window false
+ :window_picker {:enable true
+ :chars :ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
+ :exclude {:filetype [:notify
+ :packer
+ :qf
+ :diff
+ :fugitive
+ :fugitiveblame]
+ :buftype [:nofile
+ :terminal
+ :help]}}}}
+ :trash {:cmd :trash :require_confirm true}
+ :log {:enable false
+ :truncate false
+ :types {:all false
+ :config false
+ :copy_paste false
+ :git false
+ :profile false}}})))
diff --git a/fnl/config/orgmode.fnl b/fnl/config/orgmode.fnl
new file mode 100644
index 0000000..e55f2bc
--- /dev/null
+++ b/fnl/config/orgmode.fnl
@@ -0,0 +1,17 @@
+;; Orgmode for nvim.
+(module config.orgmode {autoload {util util}})
+
+(let [orgmode (util.load-plugin :orgmode)]
+ (do
+ (orgmode.setup_ts_grammar)
+ (orgmode.setup {:org_agenda_files ["~/.local/share/org/**/*"]
+ :org_default_notes_file "~/.local/share/org/refile.org"
+ :org_agenda_templates {:t {:description :Task
+ :template "* TODO %?\n %u"}
+ :m {:description :Meeting
+ :template "* MEETING %? :MEETING:
+ :LOGBOOK:
+ CLOCK: %U
+ :END:"}
+ :n {:description :Note
+ :template "* NOTE %? :NOTE:\n %u"}}})))
diff --git a/fnl/config/packer.fnl b/fnl/config/packer.fnl
new file mode 100644
index 0000000..9d6a016
--- /dev/null
+++ b/fnl/config/packer.fnl
@@ -0,0 +1,7 @@
+;; Load packer config
+(module config.packer {autoload {util util}})
+
+(let [packer (util.load-plugin :packer)]
+ (packer.init {:display {:open_fn (fn []
+ ((require :packer.util).float
+ {:border :rounded}))}}))
diff --git a/fnl/config/project.fnl b/fnl/config/project.fnl
new file mode 100644
index 0000000..7d50fee
--- /dev/null
+++ b/fnl/config/project.fnl
@@ -0,0 +1,19 @@
+;; Provides project management.
+(module config.project {autoload {util util}})
+
+(let [project (util.load-plugin :project_nvim)]
+ (project.setup {:active true
+ :on_config_done nil
+ :manual_mode false
+ :detection_methods [:patterns]
+ :patterns [:git
+ :_darcs
+ :.hg
+ :.bzr
+ :.svn
+ :Makefile
+ :package.json]
+ :show_hidden false
+ :silent_chdir true
+ :ignore_lsp {}
+ :datapath (vim.fn.stdpath :data)}))
diff --git a/fnl/config/spectre.fnl b/fnl/config/spectre.fnl
new file mode 100644
index 0000000..5529714
--- /dev/null
+++ b/fnl/config/spectre.fnl
@@ -0,0 +1,64 @@
+;; Find and replace.
+(module config.spectre {autoload {util util}})
+
+(let [spectre (util.load-plugin :spectre)]
+ (spectre.setup {:color_devicons true
+ :highlight {:ui :String
+ :search :DiffChange
+ :replace :DiffDelete}
+ :mapping {:toggle_line {:map :t
+ :cmd "<cmd>lua require('spectre').toggle_line()<CR>"
+ :desc "toggle current item"}
+ :enter_file {:map :<cr>
+ :cmd "<cmd>lua require('spectre.actions').select_entry()<CR>"
+ :desc "goto current file"}
+ :send_to_qf {:map :Q
+ :cmd "<cmd>lua require('spectre.actions').send_to_qf()<CR>"
+ :desc "send all item to quickfix"}
+ :replace_cmd {:map :c
+ :cmd "<cmd>lua require('spectre.actions').replace_cmd()<CR>"
+ :desc "input replace vim command"}
+ :show_option_menu {:map :o
+ :cmd "<cmd>lua require('spectre').show_options()<CR>"
+ :desc "show option"}
+ :run_replace {:map :R
+ :cmd "<cmd>lua require('spectre.actions').run_replace()<CR>"
+ :desc "replace all"}
+ :change_view_mode {:map :m
+ :cmd "<cmd>lua require('spectre').change_view()<CR>"
+ :desc "change result view mode"}
+ :toggle_ignore_case {:map :I
+ :cmd "<cmd>lua require('spectre').change_options('ignore-case')<CR>"
+ :desc "toggle ignore case"}
+ :toggle_ignore_hidden {:map :H
+ :cmd "<cmd>lua require('spectre').change_options('hidden')<CR>"
+ :desc "toggle search hidden"}}
+ :find_engine {:rg {:cmd :rg
+ :args [:--color=never
+ :--no-heading
+ :--with-filename
+ :--line-number
+ :--column]
+ :options {:ignore-case {:value :--ignore-case
+ :icon "[I]"
+ :desc "ignore case"}
+ :hidden {:value :--hidden
+ :desc "hidden file"
+ :icon "[H]"}}}
+ :ag {:cmd :ag
+ :args [:--vimgrep :-s]
+ :options {:ignore-case {:value :-i
+ :icon "[I]"
+ :desc "ignore case"}
+ :hidden {:value :--hidden
+ :desc "hidden file"
+ :icon "[H]"}}}}
+ :replace_engine {:sed {:cmd :sed :args nil}
+ :options {:ignore-case {:value :--ignore-case
+ :icon "[I]"
+ :desc "ignore case"}}}
+ :default {:find {:cmd :rg :options [:ignore-case]}
+ :replace {:cmd :sed}}
+ :replace_vim_cmd :cdo
+ :is_open_target_win true
+ :is_insert_mode false}))
diff --git a/fnl/config/telescope.fnl b/fnl/config/telescope.fnl
new file mode 100644
index 0000000..90a6f71
--- /dev/null
+++ b/fnl/config/telescope.fnl
@@ -0,0 +1,83 @@
+;; Telescope a highly extendable fuzzy finder over lists.
+(module config.telescope {autoload {util util}})
+
+(let [telescope (util.load-plugin :telescope)]
+ (let [actions (require :telescope.actions)]
+ (telescope.setup {:defaults {:prompt_prefix " "
+ :selection_caret " "
+ :path_display [:smart]
+ :initial_mode :insert
+ :selection_strategy :reset
+ :sorting_strategy :ascending
+ :layout_strategy :horizontal
+ :layout_config {:prompt_position :top
+ :preview_cutoff 120
+ :horizontal {:mirror false}
+ :vertical {:mirror false}}
+ :vimgrep_arguments [:rg
+ :--color=never
+ :--no-heading
+ :--with-filename
+ :--line-number
+ :--column
+ :--smart-case
+ :--hidden]
+ :mappings {:i {:<C-n> actions.cycle_history_next
+ :<C-p> actions.cycle_history_prev
+ :<C-j> actions.move_selection_next
+ :<C-k> actions.move_selection_previous
+ :<C-c> actions.close
+ :<Down> actions.move_selection_next
+ :<Up> actions.move_selection_previous
+ :<CR> actions.select_default
+ :<C-x> actions.select_horizontal
+ :<C-v> actions.select_vertical
+ :<C-t> actions.select_tab
+ :<C-u> actions.preview_scrolling_up
+ :<C-d> actions.preview_scrolling_down
+ :<PageUp> actions.results_scrolling_up
+ :<PageDown> actions.results_scrolling_down
+ :<Tab> (+ actions.toggle_selection
+ actions.move_selection_worse)
+ :<S-Tab> (+ actions.toggle_selection
+ actions.move_selection_better)
+ :<C-q> (+ actions.send_to_qflist
+ actions.open_qflist)
+ :<M-q> (+ actions.send_selected_to_qflist
+ actions.open_qflist)
+ :<C-l> actions.complete_tag
+ :<C-_> actions.which_key}
+ :n {:<esc> actions.close
+ :<CR> actions.select_default
+ :<C-x> actions.select_horizontal
+ :<C-v> actions.select_vertical
+ :<C-t> actions.select_tab
+ :<Tab> (+ actions.toggle_selection
+ actions.move_selection_worse)
+ :<S-Tab> (+ actions.toggle_selection
+ actions.move_selection_better)
+ :<C-q> (+ actions.send_to_qflist
+ actions.open_qflist)
+ :<M-q> (+ actions.send_selected_to_qflist
+ actions.open_qflist)
+ :j actions.move_selection_next
+ :k actions.move_selection_previous
+ :H actions.move_to_top
+ :M actions.move_to_middle
+ :L actions.move_to_bottom
+ :<Down> actions.move_selection_next
+ :<Up> actions.move_selection_previous
+ :gg actions.move_to_top
+ :G actions.move_to_bottom
+ :<C-u> actions.preview_scrolling_up
+ :<C-d> actions.preview_scrolling_down
+ :<PageUp> actions.results_scrolling_up
+ :<PageDown> actions.results_scrolling_down
+ :? actions.which_key}}}
+ :extensions {:fzf {:fuzzy true
+ :override_generic_sorter true
+ :override_file_sorter true
+ :case_mode :smart_case}}})
+ (telescope.load_extension :fzf)
+ (telescope.load_extension :file_browser)
+ (telescope.load_extension :projects)))
diff --git a/fnl/config/treesitter.fnl b/fnl/config/treesitter.fnl
new file mode 100644
index 0000000..73ef8a5
--- /dev/null
+++ b/fnl/config/treesitter.fnl
@@ -0,0 +1,32 @@
+;; Treesitter is a tool for building syntax trees for source files.
+;; In the neovim context it helps with better coloring.
+(module config.treesitter {autoload {util util}})
+
+(let [treesitter (util.load-plugin :nvim-treesitter.configs)]
+ (treesitter.setup {:ensure_installed [:c
+ :rust
+ :lua
+ :haskell
+ :python
+ :fennel
+ :org
+ :make
+ :go
+ :ocaml
+ :erlang
+ :vim
+ :yaml
+ :html
+ :toml
+ :dockerfile
+ :markdown
+ :latex]
+ :sync_install false
+ :ignore_install [""]
+ :autopairs {:enable true}
+ :highlight {:enable true
+ :disable [:org]
+ :additional_vim_regex_highlighting [:org]}}
+ :context_commentstring {:enable true :enable_autocmd false}
+ :indent {:enable true :disable [:yaml :python :css]}
+ :playground {:enable true}))
diff --git a/fnl/config/which-key.fnl b/fnl/config/which-key.fnl
new file mode 100644
index 0000000..020acd3
--- /dev/null
+++ b/fnl/config/which-key.fnl
@@ -0,0 +1,129 @@
+;; Which-key provides a pop-up meny for some key mappings.
+(module config.which-key {autoload {util util}})
+
+(def- setup {:plugins {:marks true
+ :registers true
+ :spelling {:enabled true :suggestions 20}
+ :presets {:operators false
+ :motions false
+ :text_objects false
+ :windows true
+ :nav true
+ :z true
+ :g true}}
+ :icons {:breadcrumb "»" :separator "" :group "+"}
+ :popup_mappings {:scroll_down :<c-d> :scroll_up :<c-u>}
+ :window {:border :rounded
+ :position :bottom
+ :margin [1 0 1 0]
+ :padding [2 2 2 2]
+ :winblend 0}
+ :layout {:height {:min 4 :max 25}
+ :width {:min 20 :max 50}
+ :spacing 3
+ :align :left}
+ :ignore_missing true
+ :hidden [:<silent> :<cmd> :<Cmd> :<CR> :call :lua "^:" "^ "]
+ :show_help true
+ :triggers :auto
+ :triggers_blacklist {:i [:j :k] :v [:j :k]}})
+
+(def- opts {:mode :n
+ :prefix :<leader>
+ :buffer nil
+ :silent true
+ :noremap true
+ :nowait true})
+
+(def- mappings
+ {:k ["<cmd>lua require('Comment.api').toggle_current_linewise()<CR>"
+ :Comment]
+ :a [:<cmd>Alpha<cr> :Alpha]
+ :b ["<cmd>lua require('telescope.builtin').buffers(require('telescope.themes').get_dropdown{previewer false})<cr>"
+ :Buffers]
+ :e [:<cmd>NvimTreeToggle<cr> :Explorer]
+ :c [:<cmd>Bdelete!<CR> "Close Buffer"]
+ :n [:<cmd>nohlsearch<CR> "No Highlight"]
+ :f ["<cmd>lua require('telescope.builtin').find_files(require('telescope.themes').get_dropdown{previewer false})<cr>"
+ "Find files"]
+ :F ["<cmd>Telescope file_browser<cr>" "Browse files"]
+ :t ["<cmd>Telescope live_grep theme=ivy<cr>" "Find Text"]
+ :P ["<cmd>Telescope projects<cr>" :Projects]
+ :z [:<cmd>ZenMode<cr> "Zen Mode"]
+ :v [:<cmd>vsplit<cr> "Vertical Split"]
+ :h [:<cmd>split<cr> "Horizontal Split"]
+ :p {:name :Packer
+ :c [:<cmd>PackerCompile<cr> :Compile]
+ :i [:<cmd>PackerInstall<cr> :Install]
+ :s [:<cmd>PackerSync<cr> :Sync]
+ :S [:<cmd>PackerStatus<cr> :Status]
+ :u [:<cmd>PackerUpdate<cr> :Update]}
+ :g {:name :Git
+ :g ["<cmd>lua _LAZYGIT_TOGGLE()<CR>" :Lazygit]
+ :j ["<cmd>lua require 'gitsigns'.next_hunk()<cr>" "Next Hunk"]
+ :k ["<cmd>lua require 'gitsigns'.prev_hunk()<cr>" "Prev Hunk"]
+ :l ["<cmd>lua require 'gitsigns'.blame_line()<cr>" :Blame]
+ :p ["<cmd>lua require 'gitsigns'.preview_hunk()<cr>" "Preview Hunk"]
+ :r ["<cmd>lua require 'gitsigns'.reset_hunk()<cr>" "Reset Hunk"]
+ :R ["<cmd>lua require 'gitsigns'.reset_buffer()<cr>" "Reset Buffer"]
+ :s ["<cmd>lua require 'gitsigns'.stage_hunk()<cr>" "Stage Hunk"]
+ :u ["<cmd>lua require 'gitsigns'.undo_stage_hunk()<cr>"
+ "Undo Stage Hunk"]
+ :o ["<cmd>Telescope git_status<cr>" "Open changed file"]
+ :b ["<cmd>Telescope git_branches<cr>" "Checkout branch"]
+ :c ["<cmd>Telescope git_commits<cr>" "Checkout commit"]
+ :d ["<cmd>Gitsigns diffthis HEAD<cr>" :Diff]}
+ :l {:name :LSP
+ :a ["<cmd>lua vim.lsp.buf.code_action()<cr>" "Code Action"]
+ :d ["<cmd>Telescope lsp_document_diagnostics<cr>"
+ "Document Diagnostics"]
+ :w ["<cmd>Telescope lsp_workspace_diagnostics<cr>"
+ "Workspace Diagnostics"]
+ :f ["<cmd>lua vim.lsp.buf.formatting()<cr>" :Format]
+ :i [:<cmd>LspInfo<cr> :Info]
+ :I [:<cmd>LspInstallInfo<cr> "Installer Info"]
+ :j ["<cmd>lua vim.lsp.diagnostic.goto_next()<CR>" "Next Diagnostic"]
+ :k ["<cmd>lua vim.lsp.diagnostic.goto_prev()<cr>" "Prev Diagnostic"]
+ :l ["<cmd>lua vim.lsp.codelens.run()<cr>" "CodeLens Action"]
+ :q ["<cmd>lua vim.lsp.diagnostic.set_loclist()<cr>" :Quickfix]
+ :r ["<cmd>lua vim.lsp.buf.rename()<cr>" :Rename]
+ :s ["<cmd>Telescope lsp_document_symbols<cr>" "Document Symbols"]
+ :S ["<cmd>Telescope lsp_dynamic_workspace_symbols<cr>"
+ "Workspace Symbols"]}
+ :s {:name :Search
+ :b ["<cmd>Telescope git_branches<cr>" "Checkout branch"]
+ :c ["<cmd>Telescope colorscheme<cr>" :Colorscheme]
+ :h ["<cmd>Telescope help_tags<cr>" "Find Help"]
+ :M ["<cmd>Telescope man_pages<cr>" "Man Pages"]
+ :r ["<cmd>Telescope oldfiles<cr>" "Open Recent File"]
+ :R ["<cmd>Telescope registers<cr>" :Registers]
+ :k ["<cmd>Telescope keymaps<cr>" :Keymaps]
+ :C ["<cmd>Telescope commands<cr>" :Commands]}
+ :o {:name :Orgmode
+ :a ["<cmd>lua require('orgmode').action('agenda.prompt')"
+ "Open agenda prompt"]
+ :c ["<cmd>lua require('orgmode').action('capture.prompt')"
+ "Open capture prompt"]}
+ :r {:name :Replace
+ :r ["<cmd>lua require('spectre').open()<cr>" :Replace]
+ :w ["<cmd>lua require('spectre').open_visual({select_word=true})<cr>"
+ "Replace Word"]
+ :f ["<cmd>lua require('spectre').open_file_search()<cr>"
+ "Replace Buffer"]}
+ :T {:name :Treesitter :p [:<cmd>TSPlaygroundToggle<cr> :Playground]}})
+
+(def- vopts {:mode :v
+ :prefix :<leader>
+ :buffer nil
+ :silent true
+ :noremap true
+ :nowait true})
+
+(def- vmappings {:k ["<ESC><CMD>lua require('Comment.api').toggle_linewise_op(vim.fn.visualmode())<CR>"
+ :Comment]})
+
+(let [which-key (util.load-plugin :which-key)]
+ (do
+ (which-key.setup setup)
+ (which-key.register mappings opts)
+ (which-key.register vmappings vopts)))
diff --git a/fnl/config/zen.fnl b/fnl/config/zen.fnl
new file mode 100644
index 0000000..7133b50
--- /dev/null
+++ b/fnl/config/zen.fnl
@@ -0,0 +1,13 @@
+;; Zen mode.
+(module config.zen {autoload {util util}})
+
+(let [zen-mode (util.load-plugin :zen-mode)]
+ (zen-mode.setup {:window {:backdrop 1
+ :height 1
+ :width 120
+ :options {:signcolumn :no
+ :number false
+ :relativenumber false}}
+ :plugins {:gitsigns {:enabled false}
+ :tmux {:enabled true}
+ :twilight {:enabled true}}}))