From 10b175f252104458d7478d8a2822818850cfdf92 Mon Sep 17 00:00:00 2001 From: Gustaf Rydholm Date: Sun, 15 Jan 2023 22:47:30 +0100 Subject: Refactor file structure --- fnl/plugins/editor/autopairs.fnl | 20 ++++ fnl/plugins/editor/better-escape.fnl | 8 ++ fnl/plugins/editor/bufdel.fnl | 3 + fnl/plugins/editor/cmp.fnl | 65 +++++++++++++ fnl/plugins/editor/colorizer.fnl | 3 + fnl/plugins/editor/colorscheme.fnl | 8 ++ fnl/plugins/editor/comment.fnl | 20 ++++ fnl/plugins/editor/gitsigns.fnl | 48 ++++++++++ fnl/plugins/editor/harpoon.fnl | 25 +++++ fnl/plugins/editor/leap.fnl | 17 ++++ fnl/plugins/editor/lir.fnl | 52 ++++++++++ fnl/plugins/editor/persistence.fnl | 5 + fnl/plugins/editor/spectre.fnl | 54 +++++++++++ fnl/plugins/editor/stay-in-place.fnl | 3 + fnl/plugins/editor/surround.fnl | 3 + fnl/plugins/editor/symbols-outline.fnl | 3 + fnl/plugins/editor/telescope.fnl | 113 ++++++++++++++++++++++ fnl/plugins/editor/toggleterm.fnl | 5 + fnl/plugins/editor/treesitter.fnl | 39 ++++++++ fnl/plugins/editor/trim.fnl | 3 + fnl/plugins/editor/trouble.fnl | 81 ++++++++++++++++ fnl/plugins/editor/undotree.fnl | 3 + fnl/plugins/editor/vim-slash.fnl | 6 ++ fnl/plugins/editor/which-key.fnl | 168 +++++++++++++++++++++++++++++++++ fnl/plugins/editor/window-picker.fnl | 19 ++++ fnl/plugins/editor/zen.fnl | 11 +++ 26 files changed, 785 insertions(+) create mode 100644 fnl/plugins/editor/autopairs.fnl create mode 100644 fnl/plugins/editor/better-escape.fnl create mode 100644 fnl/plugins/editor/bufdel.fnl create mode 100644 fnl/plugins/editor/cmp.fnl create mode 100644 fnl/plugins/editor/colorizer.fnl create mode 100644 fnl/plugins/editor/colorscheme.fnl create mode 100644 fnl/plugins/editor/comment.fnl create mode 100644 fnl/plugins/editor/gitsigns.fnl create mode 100644 fnl/plugins/editor/harpoon.fnl create mode 100644 fnl/plugins/editor/leap.fnl create mode 100644 fnl/plugins/editor/lir.fnl create mode 100644 fnl/plugins/editor/persistence.fnl create mode 100644 fnl/plugins/editor/spectre.fnl create mode 100644 fnl/plugins/editor/stay-in-place.fnl create mode 100644 fnl/plugins/editor/surround.fnl create mode 100644 fnl/plugins/editor/symbols-outline.fnl create mode 100644 fnl/plugins/editor/telescope.fnl create mode 100644 fnl/plugins/editor/toggleterm.fnl create mode 100644 fnl/plugins/editor/treesitter.fnl create mode 100644 fnl/plugins/editor/trim.fnl create mode 100644 fnl/plugins/editor/trouble.fnl create mode 100644 fnl/plugins/editor/undotree.fnl create mode 100644 fnl/plugins/editor/vim-slash.fnl create mode 100644 fnl/plugins/editor/which-key.fnl create mode 100644 fnl/plugins/editor/window-picker.fnl create mode 100644 fnl/plugins/editor/zen.fnl (limited to 'fnl/plugins/editor') diff --git a/fnl/plugins/editor/autopairs.fnl b/fnl/plugins/editor/autopairs.fnl new file mode 100644 index 0000000..d1aabf6 --- /dev/null +++ b/fnl/plugins/editor/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 : + :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/editor/better-escape.fnl b/fnl/plugins/editor/better-escape.fnl new file mode 100644 index 0000000..cde61bc --- /dev/null +++ b/fnl/plugins/editor/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 :}} diff --git a/fnl/plugins/editor/bufdel.fnl b/fnl/plugins/editor/bufdel.fnl new file mode 100644 index 0000000..4719a53 --- /dev/null +++ b/fnl/plugins/editor/bufdel.fnl @@ -0,0 +1,3 @@ +;; Delete buffers. + +{1 :ojroques/nvim-bufdel :cmd :BufDel} diff --git a/fnl/plugins/editor/cmp.fnl b/fnl/plugins/editor/cmp.fnl new file mode 100644 index 0000000..a062d92 --- /dev/null +++ b/fnl/plugins/editor/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 {: (cmp.mapping.select_prev_item) + : (cmp.mapping.select_next_item) + : (cmp.mapping (cmp.mapping.scroll_docs -1) + [:i + :c]) + : (cmp.mapping (cmp.mapping.scroll_docs 1) + [:i + :c]) + : (cmp.mapping (cmp.mapping.complete) + [:i + :c]) + : (cmp.mapping {:i (cmp.mapping.abort) + :c (cmp.mapping.close)}) + : (cmp.mapping.confirm {:select true}) + : (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/editor/colorizer.fnl b/fnl/plugins/editor/colorizer.fnl new file mode 100644 index 0000000..553024b --- /dev/null +++ b/fnl/plugins/editor/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/editor/colorscheme.fnl b/fnl/plugins/editor/colorscheme.fnl new file mode 100644 index 0000000..40802a6 --- /dev/null +++ b/fnl/plugins/editor/colorscheme.fnl @@ -0,0 +1,8 @@ +;; Load neovim colorscheme. + +{1 :aktersnurra/no-clown-fiesta.nvim + :opts {:styles {:type {:bold true}}} + :config (lambda [_ opts] + (let [plugin (require :no-clown-fiesta)] + (plugin.setup opts) + (plugin.load)))} diff --git a/fnl/plugins/editor/comment.fnl b/fnl/plugins/editor/comment.fnl new file mode 100644 index 0000000..63401a0 --- /dev/null +++ b/fnl/plugins/editor/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/editor/gitsigns.fnl b/fnl/plugins/editor/gitsigns.fnl new file mode 100644 index 0000000..1ef8cbc --- /dev/null +++ b/fnl/plugins/editor/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/editor/harpoon.fnl b/fnl/plugins/editor/harpoon.fnl new file mode 100644 index 0000000..7674f0b --- /dev/null +++ b/fnl/plugins/editor/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 : + (fn [] + (telescope-ext :harpoon :marks + {:theme :get_dropdown + :previewer false + :initial_mode :normal + :prompt_title :Harpoon})) + {}) + (vim.keymap.set :n : + "Telescope buffers theme=dropdown previewer=false initial_mode=normal" + {})) + +{1 :ThePrimeagen/harpoon + :event :BufReadPost + :config (fn [] + (setup))} diff --git a/fnl/plugins/editor/leap.fnl b/fnl/plugins/editor/leap.fnl new file mode 100644 index 0000000..6c2eb53 --- /dev/null +++ b/fnl/plugins/editor/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/editor/lir.fnl b/fnl/plugins/editor/lir.fnl new file mode 100644 index 0000000..8caa8e4 --- /dev/null +++ b/fnl/plugins/editor/lir.fnl @@ -0,0 +1,52 @@ +;; Simple file manager. + +(fn opts [actions mark-actions clipboard-actions] + {:show_hidden_files false + :devicons {:enable true :highlight_dirname false} + :mappings {:l actions.edit + : actions.split + :v actions.vsplit + : 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 + ":lua require(\"lir.mark.actions\").toggle_mark(\"v\")" + {: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()" + {:noremap true :silent true}))) + +{1 :tamago324/lir.nvim + :keys "-" + :config (fn [] + (setup)) + :dependencies [:kyazdani42/nvim-web-devicons]} diff --git a/fnl/plugins/editor/persistence.fnl b/fnl/plugins/editor/persistence.fnl new file mode 100644 index 0000000..4cde73e --- /dev/null +++ b/fnl/plugins/editor/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/editor/spectre.fnl b/fnl/plugins/editor/spectre.fnl new file mode 100644 index 0000000..92a33ba --- /dev/null +++ b/fnl/plugins/editor/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 "lua require('spectre').toggle_line()" + :desc "toggle current item"} + :enter_file {:map : + :cmd "lua require('spectre.actions').select_entry()" + :desc "goto current file"} + :send_to_qf {:map :Q + :cmd "lua require('spectre.actions').send_to_qf()" + :desc "send all item to quickfix"} + :replace_cmd {:map :c + :cmd "lua require('spectre.actions').replace_cmd()" + :desc "input replace vim command"} + :show_option_menu {:map :o + :cmd "lua require('spectre').show_options()" + :desc "show option"} + :run_replace {:map :R + :cmd "lua require('spectre.actions').run_replace()" + :desc "replace all"} + :change_view_mode {:map :m + :cmd "lua require('spectre').change_view()" + :desc "change result view mode"} + :toggle_ignore_case {:map :I + :cmd "lua require('spectre').change_options('ignore-case')" + :desc "toggle ignore case"} + :toggle_ignore_hidden {:map :H + :cmd "lua require('spectre').change_options('hidden')" + :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/editor/stay-in-place.fnl b/fnl/plugins/editor/stay-in-place.fnl new file mode 100644 index 0000000..b264a05 --- /dev/null +++ b/fnl/plugins/editor/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/editor/surround.fnl b/fnl/plugins/editor/surround.fnl new file mode 100644 index 0000000..e8fda32 --- /dev/null +++ b/fnl/plugins/editor/surround.fnl @@ -0,0 +1,3 @@ +;; Surround selections. + +{1 :kylechui/nvim-surround :event :InsertEnter :config true} diff --git a/fnl/plugins/editor/symbols-outline.fnl b/fnl/plugins/editor/symbols-outline.fnl new file mode 100644 index 0000000..4195de0 --- /dev/null +++ b/fnl/plugins/editor/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/editor/telescope.fnl b/fnl/plugins/editor/telescope.fnl new file mode 100644 index 0000000..df8c031 --- /dev/null +++ b/fnl/plugins/editor/telescope.fnl @@ -0,0 +1,113 @@ +;; 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 {: actions.cycle_history_next + : actions.cycle_history_prev + : actions.move_selection_next + : actions.move_selection_previous + : actions.close + : actions.move_selection_next + : actions.move_selection_previous + : actions.select_default + : actions.select_horizontal + : actions.select_vertical + : actions.select_tab + : actions.preview_scrolling_up + : actions.preview_scrolling_down + : actions.results_scrolling_up + : actions.results_scrolling_down + : (+ actions.toggle_selection + actions.move_selection_worse) + : (+ actions.toggle_selection + actions.move_selection_better) + : (+ actions.send_to_qflist + actions.open_qflist) + : (+ actions.send_selected_to_qflist + actions.open_qflist) + : actions.complete_tag + : actions.which_key} + :n {: actions.close + : actions.select_default + : actions.select_horizontal + : actions.select_vertical + : actions.select_tab + : (+ actions.toggle_selection + actions.move_selection_worse) + : (+ actions.toggle_selection + actions.move_selection_better) + : (+ actions.send_to_qflist + actions.open_qflist) + : (+ 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 + : actions.move_selection_next + : actions.move_selection_previous + :gg actions.move_to_top + :G actions.move_to_bottom + :q actions.close + : actions.preview_scrolling_up + : actions.preview_scrolling_down + : actions.results_scrolling_up + : 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 + {1 :ahmedkhalf/project.nvim + :event :VeryLazy + :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)))} + :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/editor/toggleterm.fnl b/fnl/plugins/editor/toggleterm.fnl new file mode 100644 index 0000000..d75aea1 --- /dev/null +++ b/fnl/plugins/editor/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/editor/treesitter.fnl b/fnl/plugins/editor/treesitter.fnl new file mode 100644 index 0000000..1d96a13 --- /dev/null +++ b/fnl/plugins/editor/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/editor/trim.fnl b/fnl/plugins/editor/trim.fnl new file mode 100644 index 0000000..7f224bc --- /dev/null +++ b/fnl/plugins/editor/trim.fnl @@ -0,0 +1,3 @@ +;; Trim whitespaces on save. + +{1 :cappyzawa/trim.nvim :event :BufFilePre :opts {:disable [:python]}} diff --git a/fnl/plugins/editor/trouble.fnl b/fnl/plugins/editor/trouble.fnl new file mode 100644 index 0000000..3f736bb --- /dev/null +++ b/fnl/plugins/editor/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 : + ;; cancel the preview and get back to your last window / buffer / cursor + :refresh :r + ;; manually refresh + :jump [: :] + ;; jump to the diagnostic or open / close folds + :open_split [:] + ;; open buffer in new split + :open_vsplit [:] + ;; open buffer in new vsplit + :open_tab [:] + ;; 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. 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/editor/undotree.fnl b/fnl/plugins/editor/undotree.fnl new file mode 100644 index 0000000..9aa8114 --- /dev/null +++ b/fnl/plugins/editor/undotree.fnl @@ -0,0 +1,3 @@ +;; Tree of undo history. + +{1 :mbbill/undotree :cmd :UndotreeToggle} diff --git a/fnl/plugins/editor/vim-slash.fnl b/fnl/plugins/editor/vim-slash.fnl new file mode 100644 index 0000000..6f50ae4 --- /dev/null +++ b/fnl/plugins/editor/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 (slash-after) zz"))} diff --git a/fnl/plugins/editor/which-key.fnl b/fnl/plugins/editor/which-key.fnl new file mode 100644 index 0000000..0b6389c --- /dev/null +++ b/fnl/plugins/editor/which-key.fnl @@ -0,0 +1,168 @@ +;; 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 : :scroll_up :} + :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 [: : : : :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 [:HarpoonAdd :Harpoon] + :d [:DiffviewFileHistory :DiffviewFileHistory] + :f [:FindFiles "Find files"] + :g ["Telescope live_grep theme=dropdown" + "Find text"] + :n [:Neogit :Neogit] + :q ["Gitsigns diffthis HEAD" "Gitsigns diff"] + :r [:HarpoonUI "Harpoon UI"] + :s [:HarpoonPrev "Harpoon Prev"] + :t [:HarpoonNext "Harpoon Next"] + :v ["lua vim.lsp.buf.rename()" :Rename] + :x ["DiffviewOpen -uno" :DiffviewOpen] + :z [:DiffviewClose :DiffviewClose]}) + +(local nopts {:mode :n + :prefix : + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local find + {:name :find + :C ["Telescope commands theme=dropdown" :Commands] + :H ["Telescope highlights" :Highlights] + :R ["Telescope registers theme=dropdown" :Registers] + :S ["Telescope grep_string theme=dropdown" "Find String"] + :b ["Telescope git_branches theme=dropdown" "Checkout branch"] + :c ["Telescope colorscheme theme=dropdown" :Colorscheme] + :f [:FindFiles "Find files"] + :h ["Telescope help_tags theme=dropdown" :Help] + :k ["Telescope keymaps theme=dropdown" :Keymaps] + :l ["Telescope resume theme=dropdown" "Last Search"] + :p ["Telescope projects theme=dropdown" "Find project"] + :r ["Telescope oldfiles theme=dropdown" "Recent File"] + :t ["Telescope live_grep theme=dropdown" "Find text"]}) + +(local diagnostics {:name :diagnostics + :t [:TroubleToggle :Trouble] + :g ["Telescope diagnostics theme=dropdown" + "Telescope diagnostics"]}) + +(local git {:name :git + :R ["lua require 'gitsigns'.reset_buffer()" + "Reset Buffer"] + :b ["Telescope git_branches theme=dropdown" + "Checkout branch"] + :c ["Telescope git_commits theme=dropdown" + "Checkout commit"] + :d ["Gitsigns diffthis HEAD" :Diff] + :j ["lua require 'gitsigns'.next_hunk()" "Next Hunk"] + :k ["lua require 'gitsigns'.prev_hunk()" "Prev Hunk"] + :l ["lua require 'gitsigns'.blame_line()" :Blame] + :o ["Telescope git_status theme=dropdown" + "Open changed file"] + :p ["lua require 'gitsigns'.preview_hunk()" + "Preview Hunk"] + :r ["lua require 'gitsigns'.reset_hunk()" "Reset Hunk"] + :s ["lua require 'gitsigns'.stage_hunk()" "Stage Hunk"] + :u ["lua require 'gitsigns'.undo_stage_hunk()" + "Undo Stage Hunk"]}) + +(local lsp + {:name :lsp + :S ["Telescope lsp_dynamic_workspace_symbols" + "Workspace Symbols"] + :a ["lua vim.lsp.buf.code_action()" "Code Action"] + :f ["lua vim.lsp.buf.format { async = true }" :Format] + :i [:LspInfo :Info] + :l ["lua vim.lsp.codelens.run()" "CodeLens Action"] + :r ["lua vim.lsp.buf.rename()" :Rename] + :s ["Telescope lsp_document_symbols" "Document Symbols"]}) + +(local replace {:name :replace + :m [:ReplaceInBuf "Replace in Buffer"] + :n [:Replace :Replace] + :e [:ReplaceWord "Replace Word"]}) + +(local session + {:name :session + :m [:RestoreSession "Restore session"] + :n [:RestoreLastSession "Restore last session"] + :e [:IgnoreSession "Ignore current session"]}) + +(local treesitter + {:name :Treesitter :p [:TSPlaygroundToggle :Playground]}) + +(local nmappings {:a ["Telescope lsp_document_symbols theme=dropdown" + "Document Symbols"] + :T treesitter + : [:BufDel "Close Buffer"] + :j diagnostics + :f find + :g git + :h [:ColorizerToggle :Colorizer] + :l lsp + :m [:Mason :Mason] + :n [:SymbolsOutline "Symbols outline"] + :r replace + :s session + :t [:ToggleTerm :Terminal] + :u [:UndotreeToggle :Undotree] + :y ["Lazy home" :Home] + :z [:ZenMode "Zen Mode"]}) + +(local vopts {:mode :v + :prefix : + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local gopts {:mode :n + :prefix :g + :buffer nil + :silent true + :noremap true + :nowait true}) + +(local gmappings {:a [:OrgAgendaPrompt "Open agenda prompt"] + :c [:OrgCapturePrompt "Open capture prompt"] + :m ["Telescope orgmode search_headings theme=dropdown" + "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 gmappings gopts))) + +{1 :folke/which-key.nvim + :event :VeryLazy + :config (fn [] + (setup))} diff --git a/fnl/plugins/editor/window-picker.fnl b/fnl/plugins/editor/window-picker.fnl new file mode 100644 index 0000000..2820409 --- /dev/null +++ b/fnl/plugins/editor/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 : + (fn [] + (pick-window)) {})))} diff --git a/fnl/plugins/editor/zen.fnl b/fnl/plugins/editor/zen.fnl new file mode 100644 index 0000000..6e9bee7 --- /dev/null +++ b/fnl/plugins/editor/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}}}} -- cgit v1.2.3-70-g09d2