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