diff options
66 files changed, 1257 insertions, 1533 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f19f9e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/lua diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b4e3caa --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +.POSIX: + +install: + $(which nvim >/dev/null 2>&1 || @echo "Neovim not installed!" && exit 1) + $(hich luarocks >/dev/null 2>&1 || @echo "Luarocks not installed!" && exit 1) + $(huarocks list | @grep "fennel" || @echo "fennel is not installed" && exit 1) + nvim --headless +qa && nvim --headless -c "autocmd User PackerComplete quitall" -c "PackerSync" + +.PHONY: install @@ -24,3 +24,7 @@ fnm and node for lsp ├── plugins.lua # Table of all plugins. └── settings # Neovim settings. ``` + +## TODO +-[ ] autocmd +-[ ] cmp check if anything is missing 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}}})) diff --git a/fnl/init.fnl b/fnl/init.fnl new file mode 100644 index 0000000..4862b16 --- /dev/null +++ b/fnl/init.fnl @@ -0,0 +1,6 @@ +;; Install, load settings, and load plugin configs. +(module init {autoload {util util}}) +(require :settings) +(require :install) +(if (> util.num-plugins 3) + (require :config)) diff --git a/fnl/install.fnl b/fnl/install.fnl new file mode 100644 index 0000000..50fbe24 --- /dev/null +++ b/fnl/install.fnl @@ -0,0 +1,15 @@ +;; Installs plugins with packer. +(module install {autoload {a aniseed.core + plugins plugins + packer packer + bootstrap bootstrap + util util}}) + +(defn- install-plugins [plgs] + (packer.startup (fn [use] + (each [plugin opts (pairs plgs)] + (use (a.assoc opts 1 plugin)))))) + +(install-plugins plugins.plugins) +(if (= util.num-plugins 3) + (packer.sync)) diff --git a/fnl/plugins.fnl b/fnl/plugins.fnl new file mode 100644 index 0000000..23bf9cb --- /dev/null +++ b/fnl/plugins.fnl @@ -0,0 +1,64 @@ +;; List of plugins +(module plugins) + +(def plugins {:wbthomason/packer.nvim {} + ;; Have packer manage itself + :lewis6991/impatient.nvim {} + :Olical/aniseed {} + :nvim-lua/popup.nvim {} + ;; An implementation of the Popup API from vim in Neovim + :nvim-lua/plenary.nvim {} + ;; Useful lua functions used ny lots of plugins + ;; Colorschemes + :aktersnurra/no-clown-fiesta.nvim {} + ;; LSP + :hrsh7th/nvim-cmp {} + ;; The completion plugin + :hrsh7th/cmp-buffer {} + ;; buffer completions + :hrsh7th/cmp-path {} + ;; path completions + :hrsh7th/cmp-cmdline {} + ;; cmdline completions + :saadparwaiz1/cmp_luasnip {} + ;; snippet completions + :onsails/lspkind-nvim {} + :hrsh7th/cmp-nvim-lsp {} + :neovim/nvim-lspconfig {} + :williamboman/nvim-lsp-installer {} + :tamago324/nlsp-settings.nvim {} + :jose-elias-alvarez/null-ls.nvim {} + :b0o/SchemaStore.nvim {} + ;; Snippets + :L3MON4D3/LuaSnip {} + :rafamadriz/friendly-snippets {} + ;; Telescope + :nvim-telescope/telescope.nvim {:requires :nvim-lua/plenary.nvim} + :nvim-telescope/telescope-fzf-native.nvim {:run :make} + :nvim-telescope/telescope-file-browser.nvim {} + ;; Treesitter + :nvim-treesitter/nvim-treesitter {:run ":TSUpdate"} + :JoosepAlviste/nvim-ts-context-commentstring {} + :nvim-treesitter/playground {} + ;; Miscellaneous plugins + :windwp/nvim-autopairs {} + :numToStr/Comment.nvim {} + :lewis6991/gitsigns.nvim {} + :kyazdani42/nvim-web-devicons {} + :kyazdani42/nvim-tree.lua {} + :akinsho/bufferline.nvim {} + :moll/vim-bbye {} + :nvim-lualine/lualine.nvim {:requires {1 :kyazdani42/nvim-web-devicons + :opt true}} + :ahmedkhalf/project.nvim {} + :goolord/alpha-nvim {} + :antoinemadec/FixCursorHold.nvim {} + ;; This is needed to fix lsp doc highlight + :folke/which-key.nvim {} + :folke/zen-mode.nvim {} + :windwp/nvim-spectre {} + :phaazon/hop.nvim {} + :kevinhwang91/nvim-bqf {:event :BufRead} + :norcalli/nvim-colorizer.lua {} + :max397574/better-escape.nvim {} + :nvim-orgmode/orgmode {}}) diff --git a/fnl/settings/init.fnl b/fnl/settings/init.fnl new file mode 100644 index 0000000..bff9c86 --- /dev/null +++ b/fnl/settings/init.fnl @@ -0,0 +1,2 @@ +;; Load nvim settings +(module settings {require {_ settings.options _ settings.keymaps}}) diff --git a/fnl/settings/keymaps.fnl b/fnl/settings/keymaps.fnl new file mode 100644 index 0000000..52254cd --- /dev/null +++ b/fnl/settings/keymaps.fnl @@ -0,0 +1,52 @@ +;; Custom keymappings. +(module settings.keymaps {autoload {nvim aniseed.nvim}}) + +(def- opts {:noremap true :silent true}) +(defn- map [mode lhs rhs opt] (nvim.set_keymap mode lhs rhs opt)) + +;;Remap space as leader key +(map "" :<Space> :<Nop> opts) +(set nvim.g.mapleader " ") +(set nvim.g.maplocalleader " ") + +;; Modes +;; normal_mode = "n" +;; insert_mode = "i" +;; visual_mode = "v" +;; visual_block_mode = "x" +;; term_mode = "t" +;; command_mode = "c" + +;; Normal ;; +;; Better window navigation +(map :n :<C-h> :<C-w>h opts) +(map :n :<C-j> :<C-w>j opts) +(map :n :<C-k> :<C-w>k opts) +(map :n :<C-l> :<C-w>l opts) + +;; Resize with arrows +(map :n :<C-Up> ":resize -2<CR>" opts) +(map :n :<C-Down> ":resize +2<CR>" opts) +(map :n :<C-Left> ":vertical resize -2<CR>" opts) +(map :n :<C-Right> ":vertical resize +2<CR>" opts) + +;; Navigate buffers +(map :n :<S-l> ":bnext<CR>" opts) +(map :n :<S-h> ":bprevious<CR>" opts) + +;; Visual ;; +;; Stay in indent mode +(map :v "<" :<gv opts) +(map :v ">" :>gv opts) + +;; Visual Block ;; +;; Move text up and down +(map :x :J ":move '>+1<CR>gv-gv" opts) +(map :x :K ":move '<-2<CR>gv-gv" opts) +(map :x :<A-j> ":move '>+1<CR>gv-gv" opts) +(map :x :<A-k> ":move '<-2<CR>gv-gv" opts) + +;; Move text up and down +(map :v :<A-j> ":m .+1<CR>==" opts) +(map :v :<A-k> ":m .-2<CR>==" opts) +(map :v :p "\"_dP" opts) diff --git a/fnl/settings/options.fnl b/fnl/settings/options.fnl new file mode 100644 index 0000000..f49867e --- /dev/null +++ b/fnl/settings/options.fnl @@ -0,0 +1,80 @@ +;; Sets options in neovim +(module settings.options {autoload {nvim aniseed.nvim}}) + +(def- opts {:backup false + ;; creates a backup file + :clipboard :unnamedplus + ;; allows neovim to access the system clipboard + :cmdheight 2 + ;; more space in the neovim command line for displaying messages + :completeopt {:menuone :noselect} + ;; mostly just for cmp + :conceallevel 0 + ;; so that `` is visible in markdown files + :fileencoding :utf-8 + ;; the encoding written to a file + :hlsearch true + ;; highlight all matches on previous search pattern + :ignorecase true + ;; ignore case in search patterns + :mouse "" + ;; disable the mouse to be used in neovim + :pumheight 10 + ;; pop up menu height + :showmode false + ;; we don't need to see things like ;; INSERT ;; anymore + :showtabline 2 + ;; always show tabs + :smartcase true + ;; smart case + :smartindent true + ;; make indenting smarter again + :splitbelow true + ;; force all horizontal splits to go below current window + :splitright true + ;; force all vertical splits to go to the right of current window + :swapfile false + ;; creates a swapfile + :termguicolors true + ;; set term gui colors (most terminals support this) + :timeoutlen 1000 + ;; time to wait for a mapped sequence to complete (in milliseconds) + :undofile true + ;; enable persistent undo + :updatetime 300 + ;; faster completion (4000ms default) + :writebackup false + ;; if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited + :expandtab true + ;; convert tabs to spaces + :shiftwidth 2 + ;; the number of spaces inserted for each indentation + :tabstop 2 + ;; insert 2 spaces for a tab + :cursorline true + ;; highlight the current line + :number true + ;; set numbered lines + :relativenumber true + ;; set relative numbered lines + :numberwidth 4 + ;; set number column width to 2 {default 4} + :signcolumn :yes + ;; always show the sign column, otherwise it would shift the text each time + :wrap false + ;; display lines as one long line + :scrolloff 8 + ;; is one of my fav + :sidescrolloff 8 + :guifont "monospace:h17" + ;; the font used in graphical neovim applications + }) + +(defn- apply-opts [] (each [k v (pairs opts)] + (tset vim.opt k v))) + +(apply-opts) +(vim.cmd "set whichwrap+=<,>,[,],h,l") +(vim.cmd "set iskeyword+=-") +(vim.cmd "set formatoptions-=cro") +(nvim.ex.set :shortmess+=c) diff --git a/fnl/util.fnl b/fnl/util.fnl new file mode 100644 index 0000000..8bb3754 --- /dev/null +++ b/fnl/util.fnl @@ -0,0 +1,12 @@ +;; Utility functions. +(module util {autoload {nvim aniseed.nvim}}) + +(def- path (.. (vim.fn.stdpath :data) :/site/pack/packer/start)) +(def num-plugins (length (vim.fn.readdir path))) + +(defn load-plugin [name] + (let [(ok? val-or-err) (pcall require name)] + (if ok? + val-or-err + (vim.notify (.. "Could not load config: " val-or-err) + vim.log.levels.WARN)))) @@ -1,5 +1,31 @@ --- Loads plugins for Neovim. +-- Bootstrap nvim with essential plugins. +local fn = vim.fn +local fmt = string.format +local execute = vim.api.nvim_command +local packer_path = fn.stdpath "data" .. "/site/pack/packer/start" -require "settings" -require "install" -require "config" +local function ensure(user, repository) + local ensure_path = fmt("%s/%s", packer_path, repository) + if fn.empty(fn.glob(ensure_path)) > 0 then + execute( + fmt( + "!git clone --depth 1 https://github.com/%s/%s %s", + user, + repository, + ensure_path + ) + ) + execute(fmt("packadd %s", repository)) + end +end + +-- Bootstrap install essential modules if not present +ensure("wbthomason", "packer.nvim") +ensure("Olical", "aniseed") +ensure("lewis6991", "impatient.nvim") + +-- Loads plugins for Neovim with fennel. +vim.g["aniseed#env"] = { + module = "init", + compile = true, +} diff --git a/lua/config/alpha.lua b/lua/config/alpha.lua deleted file mode 100644 index fa12693..0000000 --- a/lua/config/alpha.lua +++ /dev/null @@ -1,44 +0,0 @@ --- A customizable greeter. - -local status_ok, alpha = pcall(require, "alpha") -if not status_ok then - return -end - -local dashboard = require "alpha.themes.dashboard" -dashboard.section.header.val = { - [[ ##############..... ############## ]], - [[ ##############......############## ]], - [[ ##########..........########## ]], - [[ ##########........########## ]], - [[ ##########.......########## ]], - [[ ##########.....##########.. ]], - [[ ##########....##########..... ]], - [[ ..##########..##########......... ]], - [[ ....##########.#########............. ]], - [[ ..################JJJ............ ]], - [[ ################............. ]], - [[ ##############.JJJ.JJJJJJJJJJ ]], - [[ ############...JJ...JJ..JJ JJ ]], - [[ ##########....JJ...JJ..JJ JJ ]], - [[ ########......JJJ..JJJ JJJ JJJ ]], - [[ ###### ......... ]], - [[ ..... ]], - [[ . ]], -} -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>"), -} - -dashboard.section.header.opts.hl = "AlphaHeader" -dashboard.section.buttons.opts.hl = "AlphaButtons" - -dashboard.opts.opts.noautocmd = true --- vim.cmd([[autocmd User AlphaReady echo 'ready']]) -alpha.setup(dashboard.opts) diff --git a/lua/config/autocommands.lua b/lua/config/autocommands.lua deleted file mode 100644 index ef144d9..0000000 --- a/lua/config/autocommands.lua +++ /dev/null @@ -1,33 +0,0 @@ --- autocmd! remove all autocommands, if entered under a group it will clear that group - -vim.cmd [[ - augroup _general_settings - autocmd! - autocmd FileType qf,help,man,lspinfo nnoremap <silent> <buffer> q :close<CR> - autocmd TextYankPost * silent!lua require('vim.highlight').on_yank({higroup = 'Search', timeout = 200}) - autocmd BufWinEnter * :set formatoptions-=cro - autocmd FileType qf set nobuflisted - augroup end - - augroup _git - autocmd! - autocmd FileType gitcommit setlocal wrap - autocmd FileType gitcommit setlocal spell - augroup end - - augroup _markdown - autocmd! - autocmd FileType markdown setlocal wrap - autocmd FileType markdown setlocal spell - augroup end - - augroup _auto_resize - autocmd! - autocmd VimResized * tabdo wincmd = - augroup end - - augroup _alpha - autocmd! - autocmd User AlphaReady set showtabline=0 | autocmd BufUnload <buffer> set showtabline=2 - augroup end -]] diff --git a/lua/config/autopairs.lua b/lua/config/autopairs.lua deleted file mode 100644 index e218aff..0000000 --- a/lua/config/autopairs.lua +++ /dev/null @@ -1,34 +0,0 @@ --- Autopair for brackets and quote symbols. - -local status_ok, npairs = pcall(require, "nvim-autopairs") -if not status_ok then - return -end - -npairs.setup { - check_ts = true, - ts_config = { - lua = { "string", "source" }, - javascript = { "string", "template_string" }, - java = false, - }, - disable_filetype = { "TelescopePrompt", "spectre_panel" }, - fast_wrap = { - map = "<M-e>", - chars = { "{", "[", "(", '"', "'" }, - pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""), - offset = 0, -- Offset from pattern match - end_key = "$", - keys = "qwertyuiopzxcvbnmasdfghjkl", - check_comma = true, - highlight = "PmenuSel", - highlight_grey = "LineNr", - }, -} - -local cmp_autopairs = require "nvim-autopairs.completion.cmp" -local cmp_status_ok, cmp = pcall(require, "cmp") -if not cmp_status_ok then - return -end -cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done { map_char = { tex = "" } }) diff --git a/lua/config/bufferline.lua b/lua/config/bufferline.lua deleted file mode 100644 index 04a2e79..0000000 --- a/lua/config/bufferline.lua +++ /dev/null @@ -1,167 +0,0 @@ --- Adds a bar that displays open buffers. - -local status_ok, bufferline = pcall(require, "bufferline") -if not status_ok then - return -end - -bufferline.setup { - options = { - numbers = "none", -- | "ordinal" | "buffer_id" | "both" | function({ ordinal, id, lower, raise }): string, - close_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" - right_mouse_command = nil, -- can be a string | function, see "Mouse actions" - left_mouse_command = nil, -- can be a string | function, see "Mouse actions" - middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" - -- NOTE: this plugin is designed with this icon in mind, - -- and so changing this is NOT recommended, this is intended - -- as an escape hatch for people who cannot bear it for whatever reason - indicator_icon = "", - buffer_close_icon = "", - modified_icon = "●", - close_icon = "", - left_trunc_marker = "", - right_trunc_marker = "", - --- name_formatter can be used to change the buffer's label in the bufferline. - --- Please note some names can/will break the - --- bufferline so use this at your discretion knowing that it has - --- some limitations that will *NOT* be fixed. - -- name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr" - -- -- remove extension from markdown files for example - -- if buf.name:match('%.md') then - -- return vim.fn.fnamemodify(buf.name, ':t:r') - -- end - -- end, - max_name_length = 30, - max_prefix_length = 30, -- prefix used when a buffer is de-duplicated - tab_size = 21, - diagnostics = false, -- | "nvim_lsp" | "coc", - diagnostics_update_in_insert = false, - -- diagnostics_indicator = function(count, level, diagnostics_dict, context) - -- return "("..count..")" - -- end, - -- NOTE: this will be called a lot so don't do any heavy processing here - -- custom_filter = function(buf_number) - -- -- filter out filetypes you don't want to see - -- if vim.bo[buf_number].filetype ~= "<i-dont-want-to-see-this>" then - -- return true - -- end - -- -- filter out by buffer name - -- if vim.fn.bufname(buf_number) ~= "<buffer-name-I-dont-want>" then - -- return true - -- end - -- -- filter out based on arbitrary rules - -- -- e.g. filter out vim wiki buffer from tabline in your work repo - -- if vim.fn.getcwd() == "<work-repo>" and vim.bo[buf_number].filetype ~= "wiki" then - -- return true - -- end - -- end, - 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, -- whether or not custom sorted buffers should persist - -- can also be a table containing 2 custom separators - -- [focused and unfocused]. eg: { '|', '|' } - separator_style = "thin", -- | "thick" | "thin" | { 'any', 'any' }, - enforce_regular_tabs = true, - always_show_bufferline = true, - -- sort_by = 'id' | 'extension' | 'relative_directory' | 'directory' | 'tabs' | function(buffer_a, buffer_b) - -- -- add custom logic - -- return buffer_a.modified > buffer_b.modified - -- end - }, - highlights = { - fill = { - guifg = { attribute = "fg", highlight = "#ff0000" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - background = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - - -- buffer_selected = { - -- guifg = {attribute='fg',highlight='#ff0000'}, - -- guibg = {attribute='bg',highlight='#0000ff'}, - -- gui = 'none' - -- }, - buffer_visible = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - - close_button = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - close_button_visible = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - -- close_button_selected = { - -- guifg = {attribute='fg',highlight='TabLineSel'}, - -- guibg ={attribute='bg',highlight='TabLineSel'} - -- }, - - tab_selected = { - guifg = { attribute = "fg", highlight = "Normal" }, - guibg = { attribute = "bg", highlight = "Normal" }, - }, - tab = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - tab_close = { - -- guifg = {attribute='fg',highlight='LspDiagnosticsDefaultError'}, - guifg = { attribute = "fg", highlight = "TabLineSel" }, - guibg = { attribute = "bg", highlight = "Normal" }, - }, - - duplicate_selected = { - guifg = { attribute = "fg", highlight = "TabLineSel" }, - guibg = { attribute = "bg", highlight = "TabLineSel" }, - gui = "italic", - }, - duplicate_visible = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - gui = "italic", - }, - duplicate = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - gui = "italic", - }, - - modified = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - modified_selected = { - guifg = { attribute = "fg", highlight = "Normal" }, - guibg = { attribute = "bg", highlight = "Normal" }, - }, - modified_visible = { - guifg = { attribute = "fg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - - separator = { - guifg = { attribute = "bg", highlight = "TabLine" }, - guibg = { attribute = "bg", highlight = "TabLine" }, - }, - separator_selected = { - guifg = { attribute = "bg", highlight = "Normal" }, - guibg = { attribute = "bg", highlight = "Normal" }, - }, - -- separator_visible = { - -- guifg = {attribute='bg',highlight='TabLine'}, - -- guibg = {attribute='bg',highlight='TabLine'} - -- }, - indicator_selected = { - guifg = { attribute = "fg", highlight = "LspDiagnosticsDefaultHint" }, - guibg = { attribute = "bg", highlight = "Normal" }, - }, - }, -} diff --git a/lua/config/cmp.lua b/lua/config/cmp.lua deleted file mode 100644 index 6f136b2..0000000 --- a/lua/config/cmp.lua +++ /dev/null @@ -1,133 +0,0 @@ --- Configuration for completion plugin. - -local cmp_status_ok, cmp = pcall(require, "cmp") -if not cmp_status_ok then - return -end - -local snip_status_ok, luasnip = pcall(require, "luasnip") -if not snip_status_ok then - return -end - -require("luasnip/loaders/from_vscode").lazy_load() - -local check_backspace = function() - local col = vim.fn.col "." - 1 - return col == 0 or vim.fn.getline("."):sub(col, col):match "%s" -end - -local kind_icons = { - Text = "", - Method = "m", - Function = "", - Constructor = "", - Field = "", - Variable = "", - Class = "", - Interface = "", - Module = "", - Property = "", - Unit = "", - Value = "", - Enum = "", - Keyword = "", - Snippet = "", - Color = "", - File = "", - Reference = "", - Folder = "", - EnumMember = "", - Constant = "", - Struct = "", - Event = "", - Operator = "", - TypeParameter = "", -} - -cmp.setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) -- For `luasnip` users. - end, - }, - 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-y>"] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping. - ["<C-e>"] = cmp.mapping { - i = cmp.mapping.abort(), - c = cmp.mapping.close(), - }, - -- Accept currently selected item. If none selected, `select` first item. - -- Set `select` to `false` to only confirm explicitly selected items. - ["<CR>"] = cmp.mapping.confirm { select = true }, - ["<Tab>"] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expandable() then - luasnip.expand() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif check_backspace() then - fallback() - else - fallback() - end - end, { - "i", - "s", - }), - ["<S-Tab>"] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { - "i", - "s", - }), - }, - formatting = { - fields = { "kind", "abbr", "menu" }, - format = function(entry, vim_item) - -- Kind icons - vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) - -- vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind - vim_item.menu = ({ - nvim_lsp = "[LSP]", - nvim_lua = "[NVIM_LUA]", - luasnip = "[Snippet]", - buffer = "[Buffer]", - path = "[Path]", - })[entry.source.name] - return vim_item - end, - }, - -- TODO: check out more sources - sources = { - { name = "nvim_lsp" }, - { name = "nvim_lua" }, - { name = "luasnip" }, - { name = "buffer" }, - { name = "path" }, - { name = "orgmode" }, - }, - confirm_opts = { - behavior = cmp.ConfirmBehavior.Replace, - select = false, - }, - documentation = { - border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, - }, - experimental = { - ghost_text = false, - native_menu = false, - }, -} diff --git a/lua/config/colorizer.lua b/lua/config/colorizer.lua deleted file mode 100644 index a964c94..0000000 --- a/lua/config/colorizer.lua +++ /dev/null @@ -1,16 +0,0 @@ --- Enables colorization of color codes in source files. - -local status_ok, colorizer = pcall(require, "colorizer") -if not status_ok then - return -end - -colorizer.setup({ "*" }, { - RGB = true, -- #RGB hex codes - RRGGBB = true, -- #RRGGBB hex codes - RRGGBBAA = true, -- #RRGGBBAA hex codes - rgb_fn = true, -- CSS rgb() and rgba() functions - hsl_fn = true, -- CSS hsl() and hsla() functions - css = true, -- Enable all CSS features: rgb_fn, hsl_fn, names, RGB, RRGGBB - css_fn = true, -- Enable all CSS *functions*: rgb_fn, hsl_fn -}) diff --git a/lua/config/colorscheme.lua b/lua/config/colorscheme.lua deleted file mode 100644 index 8fe7c27..0000000 --- a/lua/config/colorscheme.lua +++ /dev/null @@ -1,9 +0,0 @@ --- Neovim colorscheme. - -local colorscheme = "no-clown-fiesta" - -local status_ok, _ = pcall(vim.cmd, "colorscheme " .. colorscheme) -if not status_ok then - vim.notify("colorscheme " .. colorscheme .. " not found!") - return -end diff --git a/lua/config/comment.lua b/lua/config/comment.lua deleted file mode 100644 index 4968314..0000000 --- a/lua/config/comment.lua +++ /dev/null @@ -1,24 +0,0 @@ --- Language aware commenting. - -local status_ok, comment = pcall(require, "Comment") -if not status_ok then - return -end - -comment.setup { - pre_hook = function(ctx) - local U = require "Comment.utils" - - local location = nil - if ctx.ctype == U.ctype.block then - location = require("ts_context_commentstring.utils").get_cursor_location() - elseif ctx.cmotion == U.cmotion.v or ctx.cmotion == U.cmotion.V then - location = require("ts_context_commentstring.utils").get_visual_start_location() - end - - return require("ts_context_commentstring.internal").calculate_commentstring { - key = ctx.ctype == U.ctype.line and "__default" or "__multiline", - location = location, - } - end, -} diff --git a/lua/config/gitsigns.lua b/lua/config/gitsigns.lua deleted file mode 100644 index 3a5ce9d..0000000 --- a/lua/config/gitsigns.lua +++ /dev/null @@ -1,75 +0,0 @@ --- Add git signs to source files. - -local status_ok, gitsigns = pcall(require, "gitsigns") -if not status_ok then - return -end - -gitsigns.setup { - 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", - }, - }, - signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` - numhl = false, -- Toggle with `:Gitsigns toggle_numhl` - linehl = false, -- Toggle with `:Gitsigns toggle_linehl` - word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` - watch_gitdir = { - interval = 1000, - follow_files = true, - }, - attach_to_untracked = true, - current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` - current_line_blame_opts = { - virt_text = true, - virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align' - delay = 1000, - ignore_whitespace = false, - }, - current_line_blame_formatter_opts = { - relative_time = false, - }, - sign_priority = 6, - update_debounce = 100, - status_formatter = nil, -- Use default - max_file_length = 40000, - preview_config = { - -- Options passed to nvim_open_win - border = "single", - style = "minimal", - relative = "cursor", - row = 0, - col = 1, - }, - yadm = { - enable = false, - }, -} diff --git a/lua/config/hop.lua b/lua/config/hop.lua deleted file mode 100644 index 65fd792..0000000 --- a/lua/config/hop.lua +++ /dev/null @@ -1,8 +0,0 @@ -local status_ok, hop = pcall(require, "hop") -if not status_ok then - return -end - -hop.setup() -vim.api.nvim_set_keymap("n", "s", ":HopChar2<cr>", { silent = true }) -vim.api.nvim_set_keymap("n", "S", ":HopWord<cr>", { silent = true }) diff --git a/lua/config/lsp/handlers.lua b/lua/config/lsp/handlers.lua deleted file mode 100644 index ba38faa..0000000 --- a/lua/config/lsp/handlers.lua +++ /dev/null @@ -1,170 +0,0 @@ --- Handler for LSP servers. - -local M = {} - --- TODO: backfill this to template -M.setup = function() - local signs = { - { name = "DiagnosticSignError", text = "" }, - { name = "DiagnosticSignWarn", text = "" }, - { name = "DiagnosticSignHint", text = "" }, - { name = "DiagnosticSignInfo", text = "" }, - } - - for _, sign in ipairs(signs) do - vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) - end - - local config = { - -- disable virtual text - virtual_text = false, - -- show signs - signs = { - active = signs, - }, - update_in_insert = true, - underline = true, - severity_sort = true, - float = { - focusable = false, - style = "minimal", - border = "rounded", - source = "always", - header = "", - prefix = "", - }, - } - - vim.diagnostic.config(config) - - vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { - border = "rounded", - }) - - vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with( - vim.lsp.handlers.signature_help, - { - border = "rounded", - } - ) -end - -local function lsp_highlight_document(client) - -- Set autocommands conditional on server_capabilities - if client.resolved_capabilities.document_highlight then - vim.api.nvim_exec( - [[ - let ftToIgnore = ['html'] - augroup lsp_document_highlight - autocmd! * <buffer> - autocmd CursorHold <buffer> if index(ftToIgnore, &ft) < 0 | lua vim.lsp.buf.document_highlight() - autocmd CursorMoved <buffer> if index(ftToIgnore, &ft) < 0 | lua vim.lsp.buf.clear_references() - augroup END - ]], - false - ) - end -end -local function lsp_keymaps(bufnr) - local 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", "K", "<cmd>lua vim.lsp.buf.hover()<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", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts) - -- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<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", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<CR>", opts) - -- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>f", "<cmd>lua vim.diagnostic.open_float()<CR>", opts) - -- vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({ border = "rounded" })<CR>', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({ border = "rounded" })<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", - "<leader>q", - "<cmd>lua vim.diagnostic.setloclist()<CR>", - opts - ) - vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]] -end - -M.on_attach = function(client, bufnr) - if client.name == "tsserver" then - client.resolved_capabilities.document_formatting = false - end - lsp_keymaps(bufnr) - lsp_highlight_document(client) -end - -local capabilities = vim.lsp.protocol.make_client_capabilities() - -local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") -if not status_ok then - return -end - -M.capabilities = cmp_nvim_lsp.update_capabilities(capabilities) - -function M.enable_format_on_save() - vim.cmd [[ - augroup format_on_save - autocmd! - autocmd BufWritePre * lua vim.lsp.buf.formatting() - augroup end - ]] - vim.notify "Enabled format on save" -end - -function M.disable_format_on_save() - M.remove_augroup "format_on_save" - vim.notify "Disabled format on save" -end - -function M.toggle_format_on_save() - if vim.fn.exists "#format_on_save#BufWritePre" == 0 then - M.enable_format_on_save() - else - M.disable_format_on_save() - end -end - -function M.remove_augroup(name) - if vim.fn.exists("#" .. name) == 1 then - vim.cmd("au! " .. name) - end -end - -vim.cmd [[ command! LspToggleAutoFormat execute 'lua require("user.lsp.handlers").toggle_format_on_save()' ]] - -return M diff --git a/lua/config/lsp/init.lua b/lua/config/lsp/init.lua deleted file mode 100644 index a0bb068..0000000 --- a/lua/config/lsp/init.lua +++ /dev/null @@ -1,10 +0,0 @@ --- Loads the LSP module. - -local status_ok, _ = pcall(require, "lspconfig") -if not status_ok then - return -end - -require "config.lsp.lsp-installer" -require("config.lsp.handlers").setup() -require "config.lsp.null-ls" diff --git a/lua/config/lsp/lsp-installer.lua b/lua/config/lsp/lsp-installer.lua deleted file mode 100644 index 8bd6b98..0000000 --- a/lua/config/lsp/lsp-installer.lua +++ /dev/null @@ -1,34 +0,0 @@ --- LSP installer. - -local status_ok, lsp_installer = pcall(require, "nvim-lsp-installer") -if not status_ok then - return -end - --- Register a handler that will be called for all installed servers. --- Alternatively, you may also register handlers on specific server instances instead (see example below). -lsp_installer.on_server_ready(function(server) - local opts = { - on_attach = require("config.lsp.handlers").on_attach, - capabilities = require("config.lsp.handlers").capabilities, - } - - if server.name == "jsonls" then - local jsonls_opts = require "config.lsp.settings.jsonls" - opts = vim.tbl_deep_extend("force", jsonls_opts, opts) - end - - if server.name == "sumneko_lua" then - local sumneko_opts = require "config.lsp.settings.sumneko_lua" - opts = vim.tbl_deep_extend("force", sumneko_opts, opts) - end - - if server.name == "pyright" then - local pyright_opts = require "config.lsp.settings.pyright" - opts = vim.tbl_deep_extend("force", pyright_opts, opts) - end - - -- This setup() function is exactly the same as lspconfig's setup function. - -- Refer to https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md - server:setup(opts) -end) diff --git a/lua/config/lsp/null-ls.lua b/lua/config/lsp/null-ls.lua deleted file mode 100644 index 662d429..0000000 --- a/lua/config/lsp/null-ls.lua +++ /dev/null @@ -1,38 +0,0 @@ --- Adds LSP diagnostics and formatting. - -local null_ls_status_ok, null_ls = pcall(require, "null-ls") -if not null_ls_status_ok then - return -end - --- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting -local formatting = null_ls.builtins.formatting - --- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics -local diagnostics = null_ls.builtins.diagnostics - -null_ls.setup { - debug = false, - sources = { - diagnostics.cppcheck, - 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/lua/config/lsp/settings/pyright.lua b/lua/config/lsp/settings/pyright.lua deleted file mode 100644 index 780495e..0000000 --- a/lua/config/lsp/settings/pyright.lua +++ /dev/null @@ -1,12 +0,0 @@ --- Config for pyright language server. - -return { - settings = { - - python = { - analysis = { - typeCheckingMode = "off", - }, - }, - }, -} diff --git a/lua/config/lsp/settings/sumneko_lua.lua b/lua/config/lsp/settings/sumneko_lua.lua deleted file mode 100644 index ebf039f..0000000 --- a/lua/config/lsp/settings/sumneko_lua.lua +++ /dev/null @@ -1,18 +0,0 @@ --- Config for a Lua language server. - -return { - settings = { - - Lua = { - diagnostics = { - globals = { "vim" }, - }, - workspace = { - library = { - [vim.fn.expand "$VIMRUNTIME/lua"] = true, - [vim.fn.stdpath "config" .. "/lua"] = true, - }, - }, - }, - }, -} diff --git a/lua/config/lualine.lua b/lua/config/lualine.lua deleted file mode 100644 index 15ca449..0000000 --- a/lua/config/lualine.lua +++ /dev/null @@ -1,64 +0,0 @@ --- Statusbar - -local status_ok, lualine = pcall(require, "lualine") -if not status_ok then - return -end - -local hide_in_width = function() - return vim.fn.winwidth(0) > 80 -end - -local diagnostics = { - "diagnostics", - sources = { "nvim_diagnostic" }, - sections = { "error", "warn" }, - symbols = { error = " ", warn = " " }, - colored = false, - update_in_insert = false, - always_visible = true, -} - -local diff = { - "diff", - colored = false, - symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols - cond = hide_in_width, -} - -local branch = { - "b:gitsigns_head", - icon = " ", - cond = hide_in_width, -} - -local filetype = { "filetype", cond = hide_in_width, color = {} } - -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/lua/config/spectre.lua b/lua/config/spectre.lua deleted file mode 100644 index 0ee0d34..0000000 --- a/lua/config/spectre.lua +++ /dev/null @@ -1,135 +0,0 @@ -local status_ok, spectre = pcall(require, "spectre") -if not status_ok then - return -end -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", - }, - -- you can put your mapping here it only use normal mode - }, - find_engine = { - -- rg is map with finder_cmd - ["rg"] = { - cmd = "rg", - -- default args - 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]", - }, - -- you can put any option you want here it can toggle with - -- show_option function - }, - }, - ["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 = { - --pick one of item in find_engine - cmd = "rg", - options = { "ignore-case" }, - }, - replace = { - --pick one of item in replace_engine - cmd = "sed", - }, - }, - replace_vim_cmd = "cdo", - is_open_target_win = true, --open file on opener window - is_insert_mode = false, -- start open panel on is_insert_mode -} diff --git a/lua/config/telescope.lua b/lua/config/telescope.lua deleted file mode 100644 index b7ef6e4..0000000 --- a/lua/config/telescope.lua +++ /dev/null @@ -1,120 +0,0 @@ --- Telescope a highly extendable fuzzy finder over lists. - -local status_ok, telescope = pcall(require, "telescope") -if not status_ok then - return -end - -local 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, -- keys from pressing <C-/> - }, - 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, - }, - }, - }, - pickers = { - -- Default configuration for builtin pickers goes here: - -- picker_name = { - -- picker_config_key = value, - -- ... - -- } - -- Now the picker_config_key will be applied every time you call this - -- builtin picker - }, - extensions = { - fzf = { - fuzzy = true, -- false will only do exact matching - override_generic_sorter = true, -- override the generic sorter - override_file_sorter = true, -- override the file sorter - case_mode = "smart_case", -- or "ignore_case" or "respect_case" - -- the default case_mode is "smart_case" - }, - }, -} - -telescope.load_extension "fzf" -telescope.load_extension "file_browser" diff --git a/lua/config/treesitter.lua b/lua/config/treesitter.lua deleted file mode 100644 index ec914fe..0000000 --- a/lua/config/treesitter.lua +++ /dev/null @@ -1,29 +0,0 @@ --- Treesitter is a tool for building syntax trees for source files. --- In the neovim context it helps with better coloring. - -local status_ok, treesitter = pcall(require, "nvim-treesitter.configs") -if not status_ok then - return -end - -treesitter.setup { - ensure_installed = "maintained", - sync_install = false, - ignore_install = { "" }, -- List of parsers to ignore installing - autopairs = { - enable = true, - }, - highlight = { - enable = true, -- false will disable the whole extension - disable = { "org" }, -- list of language that will be disabled - 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/lua/config/whichkey.lua b/lua/config/whichkey.lua deleted file mode 100644 index f68cdc9..0000000 --- a/lua/config/whichkey.lua +++ /dev/null @@ -1,217 +0,0 @@ -local status_ok, which_key = pcall(require, "which-key") -if not status_ok then - return -end - -local setup = { - plugins = { - marks = true, -- shows a list of your marks on ' and ` - registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode - spelling = { - enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions - suggestions = 20, -- how many suggestions should be shown in the list? - }, - -- the presets plugin, adds help for a bunch of default keybindings in Neovim - -- No actual key bindings are created - presets = { - operators = false, -- adds help for operators like d, y, ... and registers them for motion / text object completion - motions = false, -- adds help for motions - text_objects = false, -- help for text objects triggered after entering an operator - windows = true, -- default bindings on <c-w> - nav = true, -- misc bindings to work with windows - z = true, -- bindings for folds, spelling and others prefixed with z - g = true, -- bindings for prefixed with g - }, - }, - -- add operators that will trigger motion and text object completion - -- to enable all native operators, set the preset / operators plugin above - -- operators = { gc = "Comments" }, - key_labels = { - -- override the label used to display some keys. It doesn't effect WK in any other way. - -- For example: - -- ["<space>"] = "SPC", - -- ["<cr>"] = "RET", - -- ["<tab>"] = "TAB", - }, - icons = { - breadcrumb = "»", -- symbol used in the command line area that shows your active key combo - separator = "", -- symbol used between a key and it's label - group = "+", -- symbol prepended to a group - }, - popup_mappings = { - scroll_down = "<c-d>", -- binding to scroll down inside the popup - scroll_up = "<c-u>", -- binding to scroll up inside the popup - }, - window = { - border = "rounded", -- none, single, double, shadow - position = "bottom", -- bottom, top - margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left] - padding = { 2, 2, 2, 2 }, -- extra window padding [top, right, bottom, left] - winblend = 0, - }, - layout = { - height = { min = 4, max = 25 }, -- min and max height of the columns - width = { min = 20, max = 50 }, -- min and max width of the columns - spacing = 3, -- spacing between columns - align = "left", -- align columns left, center or right - }, - ignore_missing = true, -- enable this to hide mappings for which you didn't specify a label - hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "call", "lua", "^:", "^ " }, -- hide mapping boilerplate - show_help = true, -- show help message on the command line when the popup is visible - triggers = "auto", -- automatically setup triggers - -- triggers = {"<leader>"} -- or specify a list manually - triggers_blacklist = { - -- list of mode / prefixes that should never be hooked by WhichKey - -- this is mostly relevant for key maps that start with a native binding - -- most people should not need to change this - i = { "j", "k" }, - v = { "j", "k" }, - }, -} - -local opts = { - mode = "n", -- NORMAL mode - prefix = "<leader>", - buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings - silent = true, -- use `silent` when creating keymaps - noremap = true, -- use `noremap` when creating keymaps - nowait = true, -- use `nowait` when creating keymaps -} - -local 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" }, - }, -} - -local vopts = { - mode = "v", -- VISUAL mode - prefix = "<leader>", - buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings - silent = true, -- use `silent` when creating keymaps - noremap = true, -- use `noremap` when creating keymaps - nowait = true, -- use `nowait` when creating keymaps -} -local vmappings = { - ["k"] = { - '<ESC><CMD>lua require("Comment.api").toggle_linewise_op(vim.fn.visualmode())<CR>', - "Comment", - }, -} - -which_key.setup(setup) -which_key.register(mappings, opts) -which_key.register(vmappings, vopts) diff --git a/lua/config/zen.lua b/lua/config/zen.lua deleted file mode 100644 index b54442d..0000000 --- a/lua/config/zen.lua +++ /dev/null @@ -1,28 +0,0 @@ --- Zen mode - -local status_ok, zen_mode = pcall(require, "zen-mode") -if not status_ok then - return -end - -zen_mode.setup { - window = { - backdrop = 1, - height = 1, -- height of the Zen window - width = 120, - options = { - signcolumn = "no", -- disable signcolumn - number = false, -- disable number column - relativenumber = false, -- disable relative numbers - -- cursorline = false, -- disable cursorline - -- cursorcolumn = false, -- disable cursor column - -- foldcolumn = "0", -- disable fold column - -- list = false, -- disable whitespace characters - }, - }, - plugins = { - gitsigns = { enabled = false }, -- disables git signs - tmux = { enabled = true }, - twilight = { enabled = true }, - }, -} diff --git a/lua/settings/init.lua b/lua/settings/init.lua deleted file mode 100644 index dfcaf8f..0000000 --- a/lua/settings/init.lua +++ /dev/null @@ -1,4 +0,0 @@ --- Load nvim settings - -require "settings.options" -require "settings.keymaps" diff --git a/lua/settings/keymaps.lua b/lua/settings/keymaps.lua deleted file mode 100644 index 8d8ed73..0000000 --- a/lua/settings/keymaps.lua +++ /dev/null @@ -1,59 +0,0 @@ --- Custom keymappings. - -local opts = { noremap = true, silent = true } - --- Shorten function name -local keymap = vim.api.nvim_set_keymap - ---Remap space as leader key -keymap("", "<Space>", "<Nop>", opts) -vim.g.mapleader = " " -vim.g.maplocalleader = " " - --- Modes --- normal_mode = "n", --- insert_mode = "i", --- visual_mode = "v", --- visual_block_mode = "x", --- term_mode = "t", --- command_mode = "c", - --- Normal -- --- Better window navigation -keymap("n", "<C-h>", "<C-w>h", opts) -keymap("n", "<C-j>", "<C-w>j", opts) -keymap("n", "<C-k>", "<C-w>k", opts) -keymap("n", "<C-l>", "<C-w>l", opts) - -keymap("n", "<leader>e", ":Lex 30<cr>", opts) - --- Resize with arrows -keymap("n", "<C-Up>", ":resize +2<CR>", opts) -keymap("n", "<C-Down>", ":resize -2<CR>", opts) -keymap("n", "<C-Left>", ":vertical resize -2<CR>", opts) -keymap("n", "<C-Right>", ":vertical resize +2<CR>", opts) - --- Navigate buffers -keymap("n", "<S-l>", ":bnext<CR>", opts) -keymap("n", "<S-h>", ":bprevious<CR>", opts) - --- Insert -- --- Press jk fast to enter -keymap("i", "jk", "<ESC>", opts) - --- Visual -- --- Stay in indent mode -keymap("v", "<", "<gv", opts) -keymap("v", ">", ">gv", opts) - --- Move text up and down -keymap("v", "<A-j>", ":m .+1<CR>==", opts) -keymap("v", "<A-k>", ":m .-2<CR>==", opts) -keymap("v", "p", '"_dP', opts) - --- Visual Block -- --- Move text up and down -keymap("x", "J", ":move '>+1<CR>gv-gv", opts) -keymap("x", "K", ":move '<-2<CR>gv-gv", opts) -keymap("x", "<A-j>", ":move '>+1<CR>gv-gv", opts) -keymap("x", "<A-k>", ":move '<-2<CR>gv-gv", opts) diff --git a/lua/settings/options.lua b/lua/settings/options.lua deleted file mode 100644 index 65a4143..0000000 --- a/lua/settings/options.lua +++ /dev/null @@ -1,48 +0,0 @@ --- Sets options in neovim - -local options = { - backup = false, -- creates a backup file - clipboard = "unnamedplus", -- allows neovim to access the system clipboard - cmdheight = 2, -- more space in the neovim command line for displaying messages - completeopt = { "menuone", "noselect" }, -- mostly just for cmp - conceallevel = 0, -- so that `` is visible in markdown files - fileencoding = "utf-8", -- the encoding written to a file - hlsearch = true, -- highlight all matches on previous search pattern - ignorecase = true, -- ignore case in search patterns - mouse = "", -- disable the mouse to be used in neovim - pumheight = 10, -- pop up menu height - showmode = false, -- we don't need to see things like -- INSERT -- anymore - showtabline = 2, -- always show tabs - smartcase = true, -- smart case - smartindent = true, -- make indenting smarter again - splitbelow = true, -- force all horizontal splits to go below current window - splitright = true, -- force all vertical splits to go to the right of current window - swapfile = false, -- creates a swapfile - termguicolors = true, -- set term gui colors (most terminals support this) - timeoutlen = 1000, -- time to wait for a mapped sequence to complete (in milliseconds) - undofile = true, -- enable persistent undo - updatetime = 300, -- faster completion (4000ms default) - writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited - expandtab = true, -- convert tabs to spaces - shiftwidth = 2, -- the number of spaces inserted for each indentation - tabstop = 2, -- insert 2 spaces for a tab - cursorline = true, -- highlight the current line - number = true, -- set numbered lines - relativenumber = true, -- set relative numbered lines - numberwidth = 4, -- set number column width to 2 {default 4} - signcolumn = "yes", -- always show the sign column, otherwise it would shift the text each time - wrap = false, -- display lines as one long line - scrolloff = 8, -- is one of my fav - sidescrolloff = 8, - guifont = "monospace:h17", -- the font used in graphical neovim applications -} - -vim.opt.shortmess:append "c" - -for k, v in pairs(options) do - vim.opt[k] = v -end - -vim.cmd "set whichwrap+=<,>,[,],h,l" -vim.cmd [[set iskeyword+=-]] -vim.cmd [[set formatoptions-=cro]] |