diff options
Diffstat (limited to 'fnl/plugins')
44 files changed, 1217 insertions, 0 deletions
diff --git a/fnl/plugins/alpha.fnl b/fnl/plugins/alpha.fnl new file mode 100644 index 0000000..87c45e0 --- /dev/null +++ b/fnl/plugins/alpha.fnl @@ -0,0 +1,47 @@ +;; A customizable greeter. + +(local ascii-art [" ##############..... ############## " + " ##############......############## " + " ##########..........########## " + " ##########........########## " + " ##########.......########## " + " ##########.....##########.. " + " ##########....##########..... " + " ..##########..##########......... " + " ....##########.#########............. " + " ..################JJJ............ " + " ################............. " + " ##############.JJJ.JJJJJJJJJJ " + " ############...JJ...JJ..JJ JJ " + " ##########....JJ...JJ..JJ JJ " + " ########......JJJ..JJJ JJJ JJJ " + " ###### ......... " + " ..... " + " . "]) + +(fn setup [] + (let [alpha (require :alpha)] + (let [dashboard (require :alpha.themes.dashboard)] + (set dashboard.section.header.val ascii-art) + (set dashboard.section.buttons.val + [(dashboard.button :e " New file" ":ene <BAR> startinsert <CR>") + (dashboard.button :f " Find file" + ":Telescope find_files theme=dropdown<CR>") + (dashboard.button :t " Find text" + ":Telescope live_grep theme=dropdown<CR>") + (dashboard.button :p " Find project" + ":Telescope projects theme=dropdown<CR>") + (dashboard.button :r " Recently used files" + ":Telescope oldfiles theme=dropdown<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)))) + +{1 :goolord/alpha-nvim + :event :VimEnter + :config (fn [] + (setup))} diff --git a/fnl/plugins/autopairs.fnl b/fnl/plugins/autopairs.fnl new file mode 100644 index 0000000..d1aabf6 --- /dev/null +++ b/fnl/plugins/autopairs.fnl @@ -0,0 +1,20 @@ +;; Autopairs for brackets and quote symbols. + +{1 :windwp/nvim-autopairs + :event :InsertEnter + :opts {: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/plugins/better-escape.fnl b/fnl/plugins/better-escape.fnl new file mode 100644 index 0000000..cde61bc --- /dev/null +++ b/fnl/plugins/better-escape.fnl @@ -0,0 +1,8 @@ +;; Better escape without nasty delay. + +{1 :max397574/better-escape.nvim + :event :BufReadPost + :opts {:mapping [:kk :jj] + :timeout vim.o.timeoutlen + :clear_empty_lines false + :keys :<Esc>}} diff --git a/fnl/plugins/bqf.fnl b/fnl/plugins/bqf.fnl new file mode 100644 index 0000000..e2b0791 --- /dev/null +++ b/fnl/plugins/bqf.fnl @@ -0,0 +1,3 @@ +;; Make Neovim's quickfix window better. + +{1 :kevinhwang91/nvim-bqf :event :BufReadPost :config true} diff --git a/fnl/plugins/bufdel.fnl b/fnl/plugins/bufdel.fnl new file mode 100644 index 0000000..4719a53 --- /dev/null +++ b/fnl/plugins/bufdel.fnl @@ -0,0 +1,3 @@ +;; Delete buffers. + +{1 :ojroques/nvim-bufdel :cmd :BufDel} diff --git a/fnl/plugins/cmp.fnl b/fnl/plugins/cmp.fnl new file mode 100644 index 0000000..a062d92 --- /dev/null +++ b/fnl/plugins/cmp.fnl @@ -0,0 +1,65 @@ +;; Configuration for completion plugin. + +(fn setup [] + (let [cmp (require :cmp) + lspkind (require :lspkind) + luasnip (require :luasnip) + luasnip-vscode (require :luasnip.loaders.from_vscode)] + (luasnip-vscode.lazy_load) + (lspkind.init) + (cmp.setup {:snippet {:expand (fn [args] + (luasnip.lsp_expand args.body))} + :completion {:completopt "menu,menuone,noinsert"} + :mapping (cmp.mapping.preset.insert {:<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 :spell} + {:name :orgmode} + {:name :buffer :keyword_length 4} + {:name :path :keyword_length 6}] + :formatting {:format (lspkind.cmp_format {:with_text true + :menu {:buffer "" + :nvim_lsp "" + :nvim_lua "" + :path "" + :luasnip ""}})} + :window {:documentation {:border ["╭" + "─" + "╮" + "│" + "╯" + "─" + "╰" + "│"]}} + :confirm_opts {:behavior cmp.ConfirmBehavior.Replace + :select false} + :experimental {:ghost_text false :native_menu false}}))) + +{1 :hrsh7th/nvim-cmp + :dependencies [:hrsh7th/cmp-buffer + :onsails/lspkind-nvim + :hrsh7th/cmp-nvim-lsp + :hrsh7th/cmp-cmdline + :L3MON4D3/LuaSnip + :rafamadriz/friendly-snippets + :hrsh7th/cmp-path + :saadparwaiz1/cmp_luasnip + :f3fora/cmp-spell] + :event :InsertEnter + :config (fn [] + (setup))} diff --git a/fnl/plugins/colorizer.fnl b/fnl/plugins/colorizer.fnl new file mode 100644 index 0000000..553024b --- /dev/null +++ b/fnl/plugins/colorizer.fnl @@ -0,0 +1,3 @@ +;; Display colors of hex numbers. + +{1 :norcalli/nvim-colorizer.lua :cmd :ColorizerToggle :config true} diff --git a/fnl/plugins/colorscheme.fnl b/fnl/plugins/colorscheme.fnl new file mode 100644 index 0000000..bc708ab --- /dev/null +++ b/fnl/plugins/colorscheme.fnl @@ -0,0 +1,11 @@ +;; Load neovim colorscheme. + +{1 :aktersnurra/no-clown-fiesta.nvim + ;; :lazy false + ;; :priority 1000 + :opts {:styles {:type {:bold true}}} + :config (lambda [_ opts] + (let [plugin (require :no-clown-fiesta)] + (plugin.setup opts) + (plugin.load))) + } diff --git a/fnl/plugins/comment.fnl b/fnl/plugins/comment.fnl new file mode 100644 index 0000000..63401a0 --- /dev/null +++ b/fnl/plugins/comment.fnl @@ -0,0 +1,20 @@ +;; Language aware commenting. + +{1 :numToStr/Comment.nvim + :event :BufReadPost + :opts {:toggler {;; Line-comment toggle keymap + :line :mcc + ;; Block-comment toggle keymap + :block :mbc} + ;; LHS of operator-pending mappings in NORMAL and VISUAL mode + :opleader {;; Line-comment keymap + :line :mc + ;; Block-comment keymap + :block :mb} + ;; LHS of extra mappings + :extra {;; Add comment on the line above + :above :mcO + ;; Add comment on the line below + :below :mco + ;; Add comment at the end of line + :eol :mcA}}} diff --git a/fnl/plugins/diffview.fnl b/fnl/plugins/diffview.fnl new file mode 100644 index 0000000..9978c2e --- /dev/null +++ b/fnl/plugins/diffview.fnl @@ -0,0 +1,5 @@ +;; Inspect commits. + +{1 :sindrets/diffview.nvim + :cmd [:DiffviewFileHistory :DiffviewOpen] + :config true} diff --git a/fnl/plugins/gitsigns.fnl b/fnl/plugins/gitsigns.fnl new file mode 100644 index 0000000..1ef8cbc --- /dev/null +++ b/fnl/plugins/gitsigns.fnl @@ -0,0 +1,48 @@ +;; Add git signs to source files. + +(local 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}}) + +(local opts {: 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}}) + +{1 :lewis6991/gitsigns.nvim :event :BufReadPost : opts} diff --git a/fnl/plugins/harpoon.fnl b/fnl/plugins/harpoon.fnl new file mode 100644 index 0000000..7674f0b --- /dev/null +++ b/fnl/plugins/harpoon.fnl @@ -0,0 +1,25 @@ +;; Harpoon files for navigation. + +(fn telescope-ext [ext fun opts] + (let [telescope (require :telescope) + themes (require :telescope.themes) + theme (. opts :theme)] + ((. (. (. telescope :extensions) ext) fun) ((. themes theme) opts)))) + +(fn setup [] + (vim.keymap.set :n :<tab> + (fn [] + (telescope-ext :harpoon :marks + {:theme :get_dropdown + :previewer false + :initial_mode :normal + :prompt_title :Harpoon})) + {}) + (vim.keymap.set :n :<s-tab> + "<cmd>Telescope buffers theme=dropdown previewer=false initial_mode=normal<cr>" + {})) + +{1 :ThePrimeagen/harpoon + :event :BufReadPost + :config (fn [] + (setup))} diff --git a/fnl/plugins/hotpot.fnl b/fnl/plugins/hotpot.fnl new file mode 100644 index 0000000..9c2dbce --- /dev/null +++ b/fnl/plugins/hotpot.fnl @@ -0,0 +1,2 @@ +;; Transpiler for fnl. +{1 :rktjmp/hotpot.nvim} diff --git a/fnl/plugins/init.fnl b/fnl/plugins/init.fnl new file mode 100644 index 0000000..9fea347 --- /dev/null +++ b/fnl/plugins/init.fnl @@ -0,0 +1,10 @@ +(let [plugins (require :plugins.lsp) + path (.. (vim.fn.stdpath :config) :/fnl/plugins)] + (if (vim.loop.fs_stat path) + (do + (each [fname (vim.fs.dir path)] + (let [fname (fname:match "^(.*)%.fnl$")] + (if (and (not= fname nil) (not= fname :init) (not= fname :lazy)) + (table.insert plugins (require (.. :plugins. fname)))))) + )) + plugins) diff --git a/fnl/plugins/lazy.fnl b/fnl/plugins/lazy.fnl new file mode 100644 index 0000000..faa53c2 --- /dev/null +++ b/fnl/plugins/lazy.fnl @@ -0,0 +1,27 @@ +;; Lazy opts. + +{:install {:colorscheme [:no-clown-fiesta]} + :performance {:rtp {:disabled_plugins [:gzip + :matchit + :matchparen + :netrwPlugin + :tarPlugin + :tohtml + :tutor + :zipPlugin]}} + :ui {:icons {:cmd " " + :config " " + :event " " + :ft " " + :init " " + :import " " + :keys " " + :lazy "鈴 " + :loaded "● " + :not_loaded "○ " + :plugin " " + :runtime " " + :source " " + :start " " + :task " " + :list ["● " " " " " "‒ "]}}} diff --git a/fnl/plugins/leap.fnl b/fnl/plugins/leap.fnl new file mode 100644 index 0000000..6c2eb53 --- /dev/null +++ b/fnl/plugins/leap.fnl @@ -0,0 +1,17 @@ +;; Leap through text. + +(fn setup [] + (let [leap (require :leap)] + (leap.setup {}) + (leap.set_default_keymaps))) + +{1 :ggandor/leap.nvim + :dependencies {1 :ggandor/flit.nvim + :event :BufReadPost + :opts {:keys {:f :f :F :F :t :t :T :T} + :labeled_modes :v + :multiline true + :opts {}}} + :event :BufReadPost + :config (fn [] + (setup))} diff --git a/fnl/plugins/lir.fnl b/fnl/plugins/lir.fnl new file mode 100644 index 0000000..b23d439 --- /dev/null +++ b/fnl/plugins/lir.fnl @@ -0,0 +1,52 @@ +;; Simple file manager. + +(fn opts [actions mark-actions clipboard-actions] + {:show_hidden_files false + :devicons_enable true + :mappings {:l actions.edit + :<C-s> actions.split + :v actions.vsplit + :<C-t> actions.tabedit + :h actions.up + :q actions.quit + :A actions.mkdir + :a actions.newfile + :r actions.rename + "@" actions.cd + :Y actions.yank_path + :i actions.toggle_show_hidden + :d actions.delete + :J (fn [] + (mark-actions.toggle_mark) + (vim.cmd "normal! j")) + :c clipboard-actions.copy + :x clipboard-actions.cut + :p clipboard-actions.paste} + :float {:winblend 0 + :curdir_window {:enable false :highlight_dirname true} + :win_opts (fn [] + (let [width (math.floor (* vim.o.columns 0.7)) + height (math.floor (* vim.o.lines 0.7))] + {:border :rounded : width : height}))} + :hide_cursor false + :on_init (fn [] + (vim.api.nvim_buf_set_keymap 0 :x :J + ":<C-u>lua require(\"lir.mark.actions\").toggle_mark(\"v\")<CR>" + {:noremap true :silent true}))}) + +(fn setup [] + (let [actions (require :lir.actions) + clipboard-actions (require :lir.clipboard.actions) + mark-actions (require :lir.mark.actions) + lir (require :lir)] + (tset vim.g :loaded_netrw 1) + (tset vim.g :loaded_netrwPlugin 1) + (lir.setup (opts actions mark-actions clipboard-actions)) + (vim.keymap.set :n "-" ":lua require'lir.float'.toggle()<cr>" + {:noremap true :silent true}))) + +{1 :tamago324/lir.nvim + :keys "-" + :config (fn [] + (setup)) + :dependencies [:kyazdani42/nvim-web-devicons]} diff --git a/fnl/plugins/lsp/diagnostics.fnl b/fnl/plugins/lsp/diagnostics.fnl new file mode 100644 index 0000000..1ac2e42 --- /dev/null +++ b/fnl/plugins/lsp/diagnostics.fnl @@ -0,0 +1,33 @@ +;; Handlers for the requests and responses from and to the lsp server. + +(local signs [{:name :DiagnosticSignError :text ""} + {:name :DiagnosticSignWarn :text ""} + {:name :DiagnosticSignHint :text ""} + {:name :DiagnosticSignInfo :text ""}]) + +(fn apply-signs [] + (each [_ sign (ipairs signs)] + (vim.fn.sign_define sign.name {:texthl sign.name :text sign.text :numhl ""}))) + +(local config {:virtual_text false + :signs {:active signs} + :update_in_insert false + :underline true + :severity_sort true + :float {:focusable false + :style :minimal + :border :rounded + :source :always + :header "" + :prefix ""}}) + +(fn setup [] + (apply-signs) + (vim.diagnostic.config config) + (set vim.lsp.handlers.textDocument/hover + (vim.lsp.with {:border :rounded :width 60})) + (set vim.lsp.handlers.textDocument/signatureHelp + (vim.lsp.with vim.lsp.handlers.signature_help + {:border :rounded :width 60}))) + +{: setup} diff --git a/fnl/plugins/lsp/init.fnl b/fnl/plugins/lsp/init.fnl new file mode 100644 index 0000000..bef4141 --- /dev/null +++ b/fnl/plugins/lsp/init.fnl @@ -0,0 +1,5 @@ +;; Lsp plugins. + +[(require :plugins.lsp.lspconfig) + (require :plugins.lsp.mason) + (require :plugins.lsp.null-ls)] diff --git a/fnl/plugins/lsp/keymaps.fnl b/fnl/plugins/lsp/keymaps.fnl new file mode 100644 index 0000000..a7fac89 --- /dev/null +++ b/fnl/plugins/lsp/keymaps.fnl @@ -0,0 +1,23 @@ +;; Key mappings for lsp. + +(fn on-attach [bufnr] (let [opts {:noremap true :silent true}] + (vim.api.nvim_buf_set_keymap bufnr :n :gD + "<cmd>lua vim.lsp.buf.declaration()<CR>" + opts) + (vim.api.nvim_buf_set_keymap bufnr :n :gd + "<cmd>lua vim.lsp.buf.definition()<CR>" + opts) + (vim.api.nvim_buf_set_keymap bufnr :n :gI + "<cmd>lua vim.lsp.buf.implementation()<CR>" + opts) + (vim.api.nvim_buf_set_keymap bufnr :n :gr + "<cmd>lua vim.lsp.buf.references()<CR>" + opts) + (vim.api.nvim_buf_set_keymap bufnr :n :gl + "<cmd>lua vim.diagnostic.open_float()<CR>" + opts) + (vim.api.nvim_buf_set_keymap bufnr :n :gs + "<cmd>lua vim.lsp.buf.signature_help()<CR>" + opts))) + +{: on-attach} diff --git a/fnl/plugins/lsp/lspconfig.fnl b/fnl/plugins/lsp/lspconfig.fnl new file mode 100644 index 0000000..b2ee792 --- /dev/null +++ b/fnl/plugins/lsp/lspconfig.fnl @@ -0,0 +1,42 @@ +;; Setup of lsps. + +(fn on-attach [] + (vim.api.nvim_create_autocmd :LspAttach + {:callback (fn [args] + (let [keymaps (require :plugins.lsp.keymaps) + bufnr (. args :buf)] + (keymaps.on-attach bufnr)))})) + +(fn capabilities [] + (let [cmp-lsp (require :cmp_nvim_lsp)] + (cmp-lsp.default_capabilities (vim.lsp.protocol.make_client_capabilities)))) + +(fn mason-opts [servers] + {:ensure_installed (vim.tbl_keys servers) :automatic_installation true}) + +(fn setup [] + + (let [diagnostics (require :plugins.lsp.diagnostics) + lspconfig (require :lspconfig) + mason-lspconfig (require :mason-lspconfig) + servers (require :plugins.lsp.servers)] + (diagnostics.setup) + (on-attach) + (mason-lspconfig.setup (mason-opts servers)) + (mason-lspconfig.setup_handlers [(fn [server-name] + (let [server-config (. lspconfig + server-name) + opts (or (. servers server-name) + {})] + (tset opts :capabilities + (capabilities)) + (server-config.setup opts)))]))) + +{1 :neovim/nvim-lspconfig + :event :BufReadPre + :dependencies [:mason.nvim + :williamboman/mason-lspconfig.nvim + :b0o/SchemaStore.nvim + :hrsh7th/cmp-nvim-lsp] + :config (fn [] + (setup))} diff --git a/fnl/plugins/lsp/mason.fnl b/fnl/plugins/lsp/mason.fnl new file mode 100644 index 0000000..bf57de5 --- /dev/null +++ b/fnl/plugins/lsp/mason.fnl @@ -0,0 +1,11 @@ +;; Mason manages external tooling, e.g. lsp, formatters, and linters. + +(local opts {:ui {:icons {:package_installed " " + :package_pending " " + :package_uninstalled " "}} + :max_concurrent_installers 10}) + +{1 :williamboman/mason.nvim + :cmd :Mason + :keys [{1 :<leader>m 2 :<cmd>Mason<cr> :desc :Mason}] + : opts} diff --git a/fnl/plugins/lsp/null-ls.fnl b/fnl/plugins/lsp/null-ls.fnl new file mode 100644 index 0000000..13dd493 --- /dev/null +++ b/fnl/plugins/lsp/null-ls.fnl @@ -0,0 +1,43 @@ +;; Adds LSP diagnostics and formatting. + +(local mason-opts {:ensure_installed nil + :automatic_installation true + :automatic_setup false}) + +(fn setup [] + (let [null-ls (require :null-ls) + mason-null-ls (require :mason-null-ls)] + (let [formatting null-ls.builtins.formatting + diagnostics null-ls.builtins.diagnostics] + (null-ls.setup {:debug false + :sources [diagnostics.codespell + diagnostics.cpplint + diagnostics.gitlint + diagnostics.hadolint + diagnostics.jsonlint + diagnostics.misspell + diagnostics.ruff + diagnostics.selene + diagnostics.shellcheck + diagnostics.sqlfluff + diagnostics.write_good + diagnostics.yamllint + formatting.fnlfmt + formatting.markdownlint + formatting.prettierd + formatting.ruff + formatting.rustfmt + formatting.shellharden + formatting.shfmt + formatting.sqlfluff + formatting.stylua + formatting.terraform_fmt]})) + (mason-null-ls.setup mason-opts))) + +{1 :jose-elias-alvarez/null-ls.nvim + :dependencies [:mason.nvim + :jayp0521/mason-null-ls.nvim + :nvim-lua/plenary.nvim] + :event :BufReadPre + :config (fn [] + (setup))} diff --git a/fnl/plugins/lsp/servers.fnl b/fnl/plugins/lsp/servers.fnl new file mode 100644 index 0000000..2403c1a --- /dev/null +++ b/fnl/plugins/lsp/servers.fnl @@ -0,0 +1,29 @@ +;; List of lsp that should be automatically installed and supported. + +{:bashls {} + :clangd {} + :cssls {} + :dockerls {} + :hls {} + :html {} + :jsonls {:init_options {:providerFormatter false} + :settings {:json {:schemas (let [schemastore (require :schemastore)] + (schemastore.json.schemas))}} + :setup {:commands {:Format [(fn [] + (vim.lsp.buf.range_formatting [] [0 0] + [(vim.fn.line "$" + 0)]))]}}} + :pyright {} + :rust_analyzer {:settings {:rust-analyzer {:lens {:enable true} + :checkOnSave {:command :clippy}}}} + :sqls {} + :sumneko_lua {:settings {:Lua {:completion {:callSnippet :Replace} + :workspace {:checkThirdParty false} + :runtime {:version :LuaJIT + :path (vim.split package.path ";")}}}} + :taplo {} + :terraformls {} + :texlab {} + :tflint {} + :yamlls {} + :zk {}} diff --git a/fnl/plugins/lualine.fnl b/fnl/plugins/lualine.fnl new file mode 100644 index 0000000..7373704 --- /dev/null +++ b/fnl/plugins/lualine.fnl @@ -0,0 +1,87 @@ +;; Statusbar. + +(local disable [:neogitstatus + :netrw + :lir + :lazy + :alpha + :Outline + :NeogitStatus + :NeogitCommitMessage]) + +(local ignore [:help :packer :spectre_panel :TelescopePrompt]) + +(fn active-clients [] + (let [clients (vim.lsp.buf_get_clients) + client_names []] + (each [_ client (pairs clients)] + (if (not= client.name :null-ls) + (table.insert client_names client.name))) + (if (> (length client_names) 0) + (table.concat client_names ", ") + ""))) + +(fn hide-in-width [] + (> (vim.fn.winwidth 0) 80)) + +(local diagnostics {1 :diagnostics + :sources [:nvim_diagnostic] + :sections [:error :warn] + :symbols {:error " " :warn " "} + :colored false + :disabled_buftypes [:nvim-tree] + :padding 0 + :update_in_insert false + :always_visible true}) + +(local diff {1 :diff + :colored false + :disabled_buftypes [:nvim-tree] + :cond hide-in-width}) + +(local branch {1 "b:gitsigns_head" + :icon " " + :disabled_buftypes [:nvim-tree] + :cond hide-in-width}) + +(local filetype {1 :filetype + :icon_only true + :disabled_buftypes [:nvim-tree] + :colored false + :cond hide_in_width}) + +(local language-server {1 active-clients + :disabled_buftypes [:nvim-tree] + :cond hide_in_width}) + +(local lsp-progress + {1 :lsp_progress + :display_components [[:title :percentage :message]] + :timer {:progress_enddelay 500 :lsp_client_name_enddelay 500}}) + +(local opts {:options {:icons_enabled true + :theme :auto + :component_separators "" + :section_separators {:left "" :right ""} + :disabled_filetypes disable + :ignore_focus ignore + :always_divide_middle true + :globalstatus true} + :sections {:lualine_a [:mode] + :lualine_b [branch diff] + :lualine_c {} + :lualine_x [lsp_progress language-server diagnostics] + :lualine_y [filetype] + :lualine_z [:location :progress]} + :inactive_sections {:lualine_a [:mode] + :lualine_b {} + :lualine_c {} + :lualine_x {} + :lualine_y {} + :lualine_z [:location :progress]} + :extensions []}) + +{1 :nvim-lualine/lualine.nvim + :event :BufReadPost + : opts + :dependencies [:kyazdani42/nvim-web-devicons :arkav/lualine-lsp-progress]} diff --git a/fnl/plugins/minibar.fnl b/fnl/plugins/minibar.fnl new file mode 100644 index 0000000..0dff6d6 --- /dev/null +++ b/fnl/plugins/minibar.fnl @@ -0,0 +1,30 @@ +;; Show the filename in the top left corner. + +{1 :aktersnurra/minibar.nvim + :event :BufReadPre + :opts {:ignore-filetypes [:help + :harpoon + :startify + :dashboard + :lir + :alpha + :packer + :neogitstatus + :Trouble + :org + :lazy + :netrw + :Outline + :NeogitStatus + :NeogitCommitMessage + :NeogitNotification + :NeogitCommitView + :spectre_panel + ""] + :events [:CursorMoved + :TermOpen + :DirChanged + :BufWinEnter + :BufFilePost + :InsertEnter + :BufWritePost]}} diff --git a/fnl/plugins/neogit.fnl b/fnl/plugins/neogit.fnl new file mode 100644 index 0000000..b7c1633 --- /dev/null +++ b/fnl/plugins/neogit.fnl @@ -0,0 +1,6 @@ +;; Git ui. + +{1 :TimUntersberger/neogit + :cmd :Neogit + :dependencies [:nvim-lua/plenary.nvim] + :config true} diff --git a/fnl/plugins/orgmode.fnl b/fnl/plugins/orgmode.fnl new file mode 100644 index 0000000..99e55be --- /dev/null +++ b/fnl/plugins/orgmode.fnl @@ -0,0 +1,24 @@ +;; Orgmode for nvim. + +(local templates + {:t {:description :Task :template "* TODO %?\n %u\n DEADLINE: %T\n"} + :m {:description :Meeting :template "* Meeting %?"} + :n {:description :Note :template "* NOTE %? :NOTE:\n %u\n"}}) + +(local opts {:org_agenda_files ["~/.local/share/org/**/*"] + :org_hide_emphasis_markers true + :org_agenda_start_on_weekday false + :org_default_notes_file "~/.local/share/org/refile.org" + :org_agenda_templates templates}) + +(fn setup [] + (let [orgmode (require :orgmode)] + (tset vim.opt :conceallevel 2) + (tset vim.opt :concealcursor :nc) + (orgmode.setup_ts_grammar) + (orgmode.setup opts))) + +{1 :nvim-orgmode/orgmode + :event :BufReadPost + :config (fn [] + (setup))} diff --git a/fnl/plugins/persistence.fnl b/fnl/plugins/persistence.fnl new file mode 100644 index 0000000..4cde73e --- /dev/null +++ b/fnl/plugins/persistence.fnl @@ -0,0 +1,5 @@ +;; Session manager. + +{1 :folke/persistence.nvim + :event :VeryLazy + :opts {:options [:buffers :curdir :tabpages :winsize :help]}} diff --git a/fnl/plugins/project.fnl b/fnl/plugins/project.fnl new file mode 100644 index 0000000..4361e06 --- /dev/null +++ b/fnl/plugins/project.fnl @@ -0,0 +1,16 @@ +;; Provides project management. + +{1 :ahmedkhalf/project.nvim + :cmd :Telescope + :opts {: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)} + :config (lambda [_ opts] + (let [project (require :project_nvim)] + (project.setup opts)))} diff --git a/fnl/plugins/spectre.fnl b/fnl/plugins/spectre.fnl new file mode 100644 index 0000000..92a33ba --- /dev/null +++ b/fnl/plugins/spectre.fnl @@ -0,0 +1,54 @@ +;; Find and replace. + +(local opts {: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]"}}}} + :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}) + +{1 :windwp/nvim-spectre :event :BufReadPost : opts} diff --git a/fnl/plugins/stay-in-place.fnl b/fnl/plugins/stay-in-place.fnl new file mode 100644 index 0000000..b264a05 --- /dev/null +++ b/fnl/plugins/stay-in-place.fnl @@ -0,0 +1,3 @@ +;; Keep cursor at character when indenting. + +{1 :gbprod/stay-in-place.nvim :event :BufReadPost :config true} diff --git a/fnl/plugins/surround.fnl b/fnl/plugins/surround.fnl new file mode 100644 index 0000000..e8fda32 --- /dev/null +++ b/fnl/plugins/surround.fnl @@ -0,0 +1,3 @@ +;; Surround selections. + +{1 :kylechui/nvim-surround :event :InsertEnter :config true} diff --git a/fnl/plugins/symbols-outline.fnl b/fnl/plugins/symbols-outline.fnl new file mode 100644 index 0000000..4195de0 --- /dev/null +++ b/fnl/plugins/symbols-outline.fnl @@ -0,0 +1,3 @@ +;; List tree of symbols. + +{1 :simrat39/symbols-outline.nvim :cmd :SymbolsOutline :config true} diff --git a/fnl/plugins/telescope.fnl b/fnl/plugins/telescope.fnl new file mode 100644 index 0000000..7f782e1 --- /dev/null +++ b/fnl/plugins/telescope.fnl @@ -0,0 +1,94 @@ +;; Telescope a highly extendable fuzzy finder over lists. + +(fn setup [] + (let [telescope (require :telescope) + actions (require :telescope.actions)] + (telescope.setup {:defaults {:prompt_prefix " " + :selection_caret "> " + :path_display [:smart] + :color_devicons 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 + :q actions.close + :<C-u> actions.preview_scrolling_up + :<C-d> actions.preview_scrolling_down + :<PageUp> actions.results_scrolling_up + :<PageDown> actions.results_scrolling_down + :dd actions.delete_buffer + :? 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 :frecency) + (telescope.load_extension :orgmode) + (telescope.load_extension :projects) + (telescope.load_extension :harpoon))) + +{1 :nvim-telescope/telescope.nvim + :cmd :Telescope + :dependencies [:nvim-lua/popup.nvim + :nvim-telescope/telescope-frecency.nvim + {1 :nvim-telescope/telescope-fzf-native.nvim :build :make} + :tami5/sqlite.lua + :ahmedkhalf/project.nvim + :nvim-lua/plenary.nvim + :nvim-telescope/telescope-fzf-native.nvim + :nvim-telescope/telescope-frecency.nvim + :joaomsa/telescope-orgmode.nvim] + :config (fn [] + (setup))} diff --git a/fnl/plugins/toggleterm.fnl b/fnl/plugins/toggleterm.fnl new file mode 100644 index 0000000..d75aea1 --- /dev/null +++ b/fnl/plugins/toggleterm.fnl @@ -0,0 +1,5 @@ +;; Terminal inside nvim. + +{1 :akinsho/toggleterm.nvim + :cmd :ToggleTerm + :opts {:size 16 :shade_terminals false}} diff --git a/fnl/plugins/treesitter.fnl b/fnl/plugins/treesitter.fnl new file mode 100644 index 0000000..1d96a13 --- /dev/null +++ b/fnl/plugins/treesitter.fnl @@ -0,0 +1,39 @@ +;; Treesitter is a tool for building syntax trees for source files. +;; In the neovim context it helps with better coloring. + +(local opts {:ensure_installed [:c + :rust + :lua + :hcl + :org + :haskell + :python + :fennel + :make + :go + :ocaml + :erlang + :vim + :yaml + :html + :toml + :dockerfile + :markdown + :latex] + :sync_install false + :ignore_install [""] + :autopairs {:enable true} + :highlight {:enable true :disable [:org]} + :context_commentstring {:enable true :enable_autocmd false} + :indent {:enable true :disable [:yaml :python :css]} + :playground {:enable true}}) + +(fn setup [] + (let [treesitter (require :nvim-treesitter.configs)] + (treesitter.setup opts))) + +{1 :nvim-treesitter/nvim-treesitter + :build ":TSUpdate" + :event :BufReadPost + :config (fn [] + (setup))} diff --git a/fnl/plugins/trim.fnl b/fnl/plugins/trim.fnl new file mode 100644 index 0000000..7f224bc --- /dev/null +++ b/fnl/plugins/trim.fnl @@ -0,0 +1,3 @@ +;; Trim whitespaces on save. + +{1 :cappyzawa/trim.nvim :event :BufFilePre :opts {:disable [:python]}} diff --git a/fnl/plugins/trouble.fnl b/fnl/plugins/trouble.fnl new file mode 100644 index 0000000..3f736bb --- /dev/null +++ b/fnl/plugins/trouble.fnl @@ -0,0 +1,81 @@ +;; Pretty diagnostics. + +(local opts {:position :bottom + ;; position of the list can be: bottom, top, left, right + :height 10 + ;; height of the trouble list when position is top or bottom + :width 50 + ;; width of the list when position is left or right + :icons true + ;; use devicons for filenames + :mode :workspace_diagnostics + ;; "workspace_diagnostics", "document_diagnostics", "quickfix", "lsp_references", "loclist" + :fold_open "" + ;; icon used for open folds + :fold_closed "" + ;; icon used for closed folds + :group true + ;; group results by file + :padding true + ;; add an extra new line on top of the list + :action_keys {;; key mappings for actions in the trouble list + ;; map to {} to remove a mapping for example: + ;; close {} + :close :q + ;; close the list + :cancel :<esc> + ;; cancel the preview and get back to your last window / buffer / cursor + :refresh :r + ;; manually refresh + :jump [:<cr> :<tab>] + ;; jump to the diagnostic or open / close folds + :open_split [:<c-x>] + ;; open buffer in new split + :open_vsplit [:<c-v>] + ;; open buffer in new vsplit + :open_tab [:<c-t>] + ;; open buffer in new tab + :jump_close [:o] + ;; jump to the diagnostic and close the list + :toggle_mode :m + ;; toggle between "workspace" and "document" diagnostics mode + :toggle_preview :P + ;; toggle auto_preview + :hover :K + ;; opens a small popup with the full multiline message + :preview :p + ;; preview the diagnostic location + :close_folds [:zM :zm] + ;; close all folds + :open_folds [:zR :zr] + ;; open all folds + :toggle_fold [:zA :za] + ;; toggle fold of current file + :previous :k + ;; previous item + :next :j + ;; next item + } + :indent_lines true + ;; add an indent guide below the fold icons + :auto_open false + ;; automatically open the list when you have diagnostics + :auto_close false + ;; automatically close the list when you have no diagnostics + :auto_preview true + ;; automatically preview the location of the diagnostic. <esc> to close preview and go back to last window + :auto_fold false + ;; automatically fold a file trouble list at creation + :auto_jump [:lsp_definitions] + ;; for the given modes, automatically jump if there is only a single result + :signs {;; icons / text used for a diagnostic + :error "" + :warning "" + :hint "" + :information "" + :other ""} + :use_diagnostic_signs false + ;; enabling this will use the signs defined in your lsp client + }) + +{1 :folke/trouble.nvim :cmd :TroubleToggle : opts} diff --git a/fnl/plugins/undotree.fnl b/fnl/plugins/undotree.fnl new file mode 100644 index 0000000..9aa8114 --- /dev/null +++ b/fnl/plugins/undotree.fnl @@ -0,0 +1,3 @@ +;; Tree of undo history. + +{1 :mbbill/undotree :cmd :UndotreeToggle} diff --git a/fnl/plugins/vim-slash.fnl b/fnl/plugins/vim-slash.fnl new file mode 100644 index 0000000..6f50ae4 --- /dev/null +++ b/fnl/plugins/vim-slash.fnl @@ -0,0 +1,6 @@ +;; Provides a set of mappings for enhancing in-buffer search experience. + +{1 :junegunn/vim-slash + :event :BufReadPost + :config (fn [] + (vim.cmd "noremap <plug>(slash-after) zz"))} diff --git a/fnl/plugins/which-key.fnl b/fnl/plugins/which-key.fnl new file mode 100644 index 0000000..e31507b --- /dev/null +++ b/fnl/plugins/which-key.fnl @@ -0,0 +1,173 @@ +;; Which-key provides a pop-up menu for some key mappings. + +(local opts {: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 :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 + :disable {:filetypes [:netrw]} + :triggers_blacklist {:i [:j :k] :v [:j :k]}}) + +(local mopts {:mode :n + :prefix :m + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local mmappings {:a [:<cmd>HarpoonAdd<cr> :Harpoon] + :d [:<cmd>DiffviewFileHistory<cr> :DiffviewFileHistory] + :f [:<cmd>FindFiles<cr> "Find files"] + :g ["<cmd>Telescope live_grep theme=dropdown<cr>" + "Find text"] + :n [:<cmd>Neogit<cr> :Neogit] + :p [:<cmd>SaveSession<cr> "Save Session"] + :q ["<cmd>Gitsigns diffthis HEAD<cr>" "Gitsigns diff"] + :r [:<cmd>HarpoonUI<cr> "Harpoon UI"] + :s [:<cmd>HarpoonPrev<cr> "Harpoon Prev"] + :t [:<cmd>HarpoonNext<cr> "Harpoon Next"] + :v ["<cmd>lua vim.lsp.buf.rename()<cr>" :Rename] + :x ["<cmd>DiffviewOpen -uno<cr>" :DiffviewOpen] + :z [:<cmd>DiffviewClose<cr> :DiffviewClose]}) + +(local nopts {:mode :n + :prefix :<leader> + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local find + {:name :find + :C ["<cmd>Telescope commands theme=dropdown<cr>" :Commands] + :H ["<cmd>Telescope highlights<cr>" :Highlights] + :R ["<cmd>Telescope registers theme=dropdown<cr>" :Registers] + :S ["<cmd>Telescope grep_string theme=dropdown<cr>" "Find String"] + :b ["<cmd>Telescope git_branches theme=dropdown<cr>" "Checkout branch"] + :c ["<cmd>Telescope colorscheme theme=dropdown<cr>" :Colorscheme] + :f [:<cmd>FindFiles<cr> "Find files"] + :h ["<cmd>Telescope help_tags theme=dropdown<cr>" :Help] + :k ["<cmd>Telescope keymaps theme=dropdown<cr>" :Keymaps] + :l ["<cmd>Telescope resume theme=dropdown<cr>" "Last Search"] + :p ["<cmd>Telescope projects theme=dropdown<cr>" "Find project"] + :r ["<cmd>Telescope oldfiles theme=dropdown<cr>" "Recent File"] + :s [:<cmd>SearchSession<cr> "Find Session"] + :t ["<cmd>Telescope live_grep theme=dropdown<cr>" "Find text"]}) + +(local diagnostics {:name :diagnostics + :t [:<cmd>TroubleToggle<cr> :Trouble] + :g ["<cmd>Telescope diagnostics theme=dropdown<cr>" + "Telescope diagnostics"]}) + +(local git {:name :git + :R ["<cmd>lua require 'gitsigns'.reset_buffer()<cr>" + "Reset Buffer"] + :b ["<cmd>Telescope git_branches theme=dropdown<cr>" + "Checkout branch"] + :c ["<cmd>Telescope git_commits theme=dropdown<cr>" + "Checkout commit"] + :d ["<cmd>Gitsigns diffthis HEAD<cr>" :Diff] + :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] + :o ["<cmd>Telescope git_status theme=dropdown<cr>" + "Open changed file"] + :p ["<cmd>lua require 'gitsigns'.preview_hunk()<cr>" + "Preview Hunk"] + :r ["<cmd>lua require 'gitsigns'.reset_hunk()<cr>" "Reset Hunk"] + :s ["<cmd>lua require 'gitsigns'.stage_hunk()<cr>" "Stage Hunk"] + :u ["<cmd>lua require 'gitsigns'.undo_stage_hunk()<cr>" + "Undo Stage Hunk"]}) + +(local lsp + {:name :lsp + :S ["<cmd>Telescope lsp_dynamic_workspace_symbols<cr>" + "Workspace Symbols"] + :a ["<cmd>lua vim.lsp.buf.code_action()<cr>" "Code Action"] + :f ["<cmd>lua vim.lsp.buf.format { async = true }<cr>" :Format] + :i [:<cmd>LspInfo<cr> :Info] + :l ["<cmd>lua vim.lsp.codelens.run()<cr>" "CodeLens Action"] + :r ["<cmd>lua vim.lsp.buf.rename()<cr>" :Rename] + :s ["<cmd>Telescope lsp_document_symbols<cr>" "Document Symbols"]}) + +(local replace {:name :replace + :m [:<cmd>ReplaceInBuf<cr> "Replace in Buffer"] + :n [:<cmd>Replace<cr> :Replace] + :e [:<cmd>ReplaceWord<cr> "Replace Word"]}) + +(local session + {:name :session + :m [:<cmd>RestoreSession<cr> "Restore session"] + :n [:<cmd>RestoreLastSession<cr> "Restore last session"] + :e [:<cmd>IgnoreSession<cr> "Ignore current session"]}) + +(local treesitter + {:name :Treesitter :p [:<cmd>TSPlaygroundToggle<cr> :Playground]}) + +(local nmappings {:a ["<cmd>Telescope lsp_document_symbols theme=dropdown<cr>" + "Document Symbols"] + :T treesitter + :<BS> [:<cmd>BufDel<CR> "Close Buffer"] + :j diagnostics + :f find + :g git + :h [:<cmd>ColorizerToggle<cr> :Colorizer] + :l lsp + :m [:<cmd>Mason<cr> :Mason] + :n [:<cmd>SymbolsOutline<cr> "Symbols outline"] + :r replace + :s session + :t [:<cmd>ToggleTerm<cr> :Terminal] + :u [:<cmd>UndotreeToggle<cr> :Undotree] + :y ["<cmd>Lazy home<cr>" :Home] + :z [:<cmd>ZenMode<cr> "Zen Mode"]}) + +(local vopts {:mode :v + :prefix :<leader> + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local vmappings {:n [:<esc><cmd>CommentVisual<cr> :Comment]}) + +(local gopts {:mode :n + :prefix :g + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local gmappings {:a [:<cmd>OrgAgendaPrompt<cr> "Open agenda prompt"] + :c [:<cmd>OrgCapturePrompt<cr> "Open capture prompt"] + :m ["<cmd>Telescope orgmode search_headings theme=dropdown<cr>" + "Search headings"]}) + +(fn setup [] + (let [which-key (require :which-key)] + (which-key.setup opts) + (which-key.register mmappings mopts) + (which-key.register nmappings nopts) + (which-key.register vmappings vopts) + (which-key.register gmappings gopts))) + +{1 :folke/which-key.nvim + :event :VeryLazy + :config (fn [] + (setup))} diff --git a/fnl/plugins/window-picker.fnl b/fnl/plugins/window-picker.fnl new file mode 100644 index 0000000..2820409 --- /dev/null +++ b/fnl/plugins/window-picker.fnl @@ -0,0 +1,19 @@ +;; Trim whitespaces on save. + +(fn pick-window [opts] + (let [window-picker (require :window-picker)] + (let [win (window-picker.pick_window)] + (if (not= win nil) + (vim.api.nvim_set_current_win win))))) + +{1 :s1n7ax/nvim-window-picker + :event :BufReadPost + :opts {:other_win_hl_color "#171717" + :fg_color "#E1E1E1" + :selection_chars :MNEIOARSTG} + :config (lambda [_ opts] + (let [window-picker (require :window-picker)] + (window-picker.setup opts) + (vim.keymap.set :n :<C-s> + (fn [] + (pick-window)) {})))} diff --git a/fnl/plugins/zen.fnl b/fnl/plugins/zen.fnl new file mode 100644 index 0000000..6e9bee7 --- /dev/null +++ b/fnl/plugins/zen.fnl @@ -0,0 +1,11 @@ +;; Zen mode. + +{1 :folke/zen-mode.nvim + :cmd :ZenMode + :opts {:window {:backdrop 1 + :height 1 + :width 120 + :options {:signcolumn :no :number false :relativenumber false}} + :plugins {:gitsigns {:enabled false} + :tmux {:enabled true} + :twilight {:enabled true}}}} |