;;; plugin.fnl - plugin configurations (import-macros {: bind! : hook! : use! : setup! : module-call! } :macros) (fn [use] ;; Packer (use! :wbthomason/packer.nvim) ;; tangerine.nvim (auto fennel compile) (use! :udayvir-singh/tangerine.nvim) ;; Treesitter (use! :nvim-treesitter/nvim-treesitter :config (setup! :nvim-treesitter.configs :ensure_installed :all :sync_install false :auto_install true :highlight { :enable true :additional_vim_regex_highlighting false } :indent { :enable true })) ;; nightfox.nvim (colorscheme) (use! :EdenEast/nightfox.nvim :after :nvim-treesitter :config (vim.cmd.colorscheme :carbonfox)) ;; Devicons (use! :kyazdani42/nvim-web-devicons) ;; lualine.nvim (use! :nvim-lualine/lualine.nvim :after [ :nightfox.nvim :nvim-web-devicons ] :config (setup! :lualine :options { :section_separators "" :component_separators "│" } :sections { :lualine_x [ { 1 #(.. "recording @" (vim.fn.reg_recording)) :cond #(not= (# (vim.fn.reg_recording)) 0) } :encoding :fileformat :filetype ]})) ;; bufferline.nvim (use! :akinsho/bufferline.nvim :after [ :nvim-web-devicons :nightfox.nvim ] :config (setup! :bufferline :options { :always_show_bufferline false :mode :tabs :numbers :buffer-id :show_buffer_close_icons false :show_close_icon false })) ;; fzf (a fuzzy finder) (use! :ibhagwan/fzf-lua :cmd :FzfLua :setup (bind! :n :fq "FzfLua quickfix") (bind! :n :fr "FzfLua registers") (bind! :n :fj "FzfLua jumps") (bind! :n :fa "FzfLua marks") (bind! :n :fh "FzfLua help_tags") (bind! :n :g "FzfLua live_grep") (bind! :n :fg "FzfLua live_grep") (bind! :n :G "FzfLua grep") (bind! :n :fG "FzfLua grep") (bind! :n :b "FzfLua buffers") (bind! :n :gb "FzfLua buffers") (bind! :n :fu "FzfLua git_status") (bind! :n :fm "FzfLua man_pages") (bind! :n :fe "FzfLua diagnostics_document") (bind! :n :fE "FzfLua diagnostics_workspace") (bind! :n :d "FzfLua loclist") (bind! :n :fp "FzfLua spell_suggest") (bind! :n :i "FzfLua files") (bind! :n :z= "FzfLua spell_suggest") (bind! :n :ff (fn [] (let [code (os.execute "git rev-parse --is-inside-work-tree >/dev/null 2>&1")] (if (= code 0) (vim.cmd "FzfLua git_files") (vim.cmd "FzfLua files"))))) (fn jump-or-open-terminal [] "If no terminal buffer exists, create one. Otherwise, open new one." (var term_count 0) (var last_id 0) (var terms [ ]) (each [_ id (pairs (vim.api.nvim_list_bufs))] (let [name (vim.api.nvim_buf_get_name id)] (when (vim.startswith name "term://") (table.insert terms name) (set term_count (+ term_count 1)) (set last_id id)))) (if (= term_count 0) (vim.cmd.terminal) (= term_count 1) (vim.cmd.buffer last_id) (vim.cmd "FzfLua buffers query=term://"))) (bind! :n :t jump-or-open-terminal) :config (let [fzf (require :fzf-lua)] (fzf.register_ui_select))) ;; Nvim surround (use! :kylechui/nvim-surround :config (setup! :nvim-surround)) ;; Leap (use! :ggandor/leap.nvim :after :nvim-treesitter :config ((. (require :leap) :add_default_mappings)) (bind! :o :z "(leap-forward-to)") (bind! :o :Z "(leap-backward-to)") (vim.api.nvim_set_hl 0 :LeapBackdrop { :link :Comment })) ;; Leap spooky (remote operations) (use! :ggandor/leap-spooky.nvim :after :leap.nvim :config (setup! :leap-spooky)) ;; Flit (leap for 'till' and 'forward' motions) (use! :ggandor/flit.nvim :after :leap.nvim :config (setup! :flit)) ;; Comment.nvim (use! :numToStr/Comment.nvim :config (setup! :Comment)) ;; nvim-find-other (use! "https://git.zander.im/Zander671/nvim-find-other.git" :config (setup! :nvim-find-other :c [ "h" "H" ] :h [ "c" "C" "cpp" "cxx" "c++" "cc" ] :cpp [ "hpp" "hxx" "h++" "hh" "h" "H" ] :hpp [ "cpp" "cxx" "c++" "cc" ]) (let [find-other (require :nvim-find-other)] (vim.api.nvim_create_user_command "FindOtherFile" find-other.find_other_current_buffer {}) (bind! :n :go find-other.find_other_current_buffer))) ;; illuminate (same symbol highlight) (use! :RRethy/vim-illuminate :config (module-call! :illuminate :configure) { :providers [ "lsp" "treesitter" "ragex" ] :modes_denylist [ :markdown :text :gitconfig :gitignore ] :delay 0 } (hook! :FileType :lua #(vim.api.nvim_set_hl 0 :IlluminatedWordText {}))) ;; vlime (lisp environment) (use! :vlime/vlime :ft :lisp :config (set vim.g.vlime_cl_impl :my_sbcl) (set vim.g.vlime_address [ "127.0.0.1" 52842 ]) (vim.cmd "function! VlimeBuildServerCommandFor_my_sbcl(vlime_loader, vlime_eval) return [ \"/usr/bin/sbcl\", \\ \"--load\", a:vlime_loader, \\ \"--eval\", \"(vlime:main :port 52842)\" ] endfunction")) ;; Snippy (use! :dcampos/nvim-snippy :config (let [map (require :snippy.mapping)] (bind! [ :i :s ] : ((. map :next) :)) (bind! [ :i :s ] : (map.previous :)))) ;; nvim-cmp (autocomplete) (use! :hrsh7th/nvim-cmp :requires [ :hrsh7th/cmp-buffer :hrsh7th/cmp-path :hrsh7th/cmp-cmdline :hrsh7th/cmp-nvim-lsp :HiPhish/nvim-cmp-vlime { 1 :ray-x/cmp-treesitter :after :nvim-cmp } :dcampos/cmp-snippy ] :config (module-call! :plugin.cmp :configure)) ;; does what the name says, lets you pick icons (use! :ziontee113/icon-picker.nvim :cmd [ :IconPickerNormal :IconPickerYank ] :setup (bind! :n :ci "IconPickerNormal") (bind! :n :cy "IconPickerYank") :config (vim.cmd "PackerLoad fzf-lua") (setup! :icon-picker :disable_legacy_commands true)) (use! :jbyuki/nabla.nvim :module :nabla :setup (bind! :n :p #(module-call! :nabla :popup))) ;; guess style from buffer (use! :NMAC427/guess-indent.nvim :config (setup! :guess-indent :auto_cmd true)) ;; lspconfig (use! :neovim/nvim-lspconfig :after :cmp-nvim-lsp :config (module-call! :plugin.lsp :configure)) ;; nvim-jdtls (use! :mfussenegger/nvim-jdtls :after :nvim-lspconfig :config (module-call! :plugin.jdtls :configure)) ;; Sync all packages on first launch (if _G.first_launch (module-call! :packer :sync)))