diff --git a/config/nvim/fnl/plugins/barbecue.fnl b/config/nvim/fnl/plugins/barbecue.fnl
new file mode 100644
index 0000000..e13cc45
--- /dev/null
+++ b/config/nvim/fnl/plugins/barbecue.fnl
@@ -0,0 +1,8 @@
+(local barbecue {1 :utilyre/barbecue.nvim
+                 :dependencies [:SmiteshP/nvim-navic
+                                :nvim-tree/nvim-web-devicons]
+                 :name :barbecue
+                 :opts {}
+                 :version "*"})
+
+[barbecue]
diff --git a/config/nvim/fnl/plugins/cokeline.fnl b/config/nvim/fnl/plugins/cokeline.fnl
new file mode 100644
index 0000000..af316a0
--- /dev/null
+++ b/config/nvim/fnl/plugins/cokeline.fnl
@@ -0,0 +1,66 @@
+(local cokeline {1 :willothy/nvim-cokeline
+                 :config (fn []
+                           (local get-hex
+                                  (. (require :cokeline.hlgroups) :get_hl_attr))
+                           (local hlgroups (require :cokeline.hlgroups))
+                           (local yellow vim.g.terminal_color_3)
+                           ((. (require :cokeline) :setup) {:components [{:text (fn [buffer]
+                                                                                  (.. " "
+                                                                                      buffer.index))}
+                                                                         {:fg (fn [buffer]
+                                                                                buffer.devicon.color)
+                                                                          :text (fn [buffer]
+                                                                                  (.. " "
+                                                                                      buffer.devicon.icon))}
+                                                                         {:fg (fn []
+                                                                                (hlgroups.get_hl_attr :Comment
+                                                                                                      :fg))
+                                                                          :italic true
+                                                                          :text (fn [buffer]
+                                                                                  buffer.unique_prefix)}
+                                                                         {:text (fn [buffer]
+                                                                                  buffer.filename)
+                                                                          :underline (fn [buffer]
+                                                                                       (when (and buffer.is_hovered
+                                                                                                  (not buffer.is_focused))
+                                                                                         true))}
+                                                                         {:text " "}
+                                                                         {:on_click (fn [_
+                                                                                         _
+                                                                                         _
+                                                                                         _
+                                                                                         buffer]
+                                                                                      (buffer:delete))
+                                                                          :text (fn [buffer]
+                                                                                  (when buffer.is_modified
+                                                                                    (lua "return \"\""))
+                                                                                  (when buffer.is_hovered
+                                                                                    (lua "return \"󰅙\""))
+                                                                                  "󰅖")}
+                                                                         {:text " "}]
+                                                            :default_hl {:bg (fn [buffer]
+                                                                               (or (and buffer.is_focused
+                                                                                        (get-hex :Normal
+                                                                                                 :fg))
+                                                                                   (get-hex :ColorColumn
+                                                                                            :bg)))
+                                                                         :fg (fn [buffer]
+                                                                               (or (and buffer.is_focused
+                                                                                        (get-hex :ColorColumn
+                                                                                                 :bg))
+                                                                                   (get-hex :Normal
+                                                                                            :fg)))}
+                                                            :sidebar {:components [{:bg (fn []
+                                                                                          (get-hex :NvimTreeNormal
+                                                                                                   :bg))
+                                                                                    :bold true
+                                                                                    :fg yellow
+                                                                                    :text (fn [buf]
+                                                                                            buf.filetype)}]
+                                                                      :filetype [:NvimTree
+                                                                                 :neo-tree]}}))
+                 :dependencies [:nvim-lua/plenary.nvim
+                                :nvim-tree/nvim-web-devicons
+                                :stevearc/resession.nvim]})
+
+[cokeline]
diff --git a/config/nvim/fnl/plugins/editor.fnl b/config/nvim/fnl/plugins/editor.fnl
index fec3a49..2468629 100644
--- a/config/nvim/fnl/plugins/editor.fnl
+++ b/config/nvim/fnl/plugins/editor.fnl
@@ -11,7 +11,91 @@
                                   (. (require :nvim-emmet)
                                      :wrap_with_abbreviation)))})
 
+(local autoformat {1 :stevearc/conform.nvim
+                   :cmd [:ConformInfo]
+                   :event [:BufWritePre]
+                   :keys [{1 :<leader>f
+                           2 (fn []
+                               ((. (require :conform) :format) {:async true
+                                                                :lsp_format :fallback}))
+                           :desc "[F]ormat buffer"
+                           :mode ""}]
+                   :opts {:format_on_save (fn [bufnr]
+                                            (local disable-filetypes
+                                                   {:c true :cpp true})
+                                            (var lsp-format-opt nil)
+                                            (if (. disable-filetypes
+                                                   (. vim.bo bufnr :filetype))
+                                                (set lsp-format-opt :never)
+                                                (set lsp-format-opt :fallback))
+                                            {:lsp_format lsp-format-opt
+                                             :timeout_ms 500})
+                          :formatters_by_ft {:lua [:stylua]}
+                          :notify_on_error false}})
+
+(local autocomplete {1 :hrsh7th/nvim-cmp
+                     :config (fn []
+                               (local cmp (require :cmp))
+                               (local luasnip (require :luasnip))
+                               (luasnip.config.setup {})
+                               (cmp.setup {:completion {:completeopt "menu,menuone,noinsert"}
+                                           :mapping (cmp.mapping.preset.insert {:<C-Space> (cmp.mapping.complete {})
+                                                                                :<C-b> (cmp.mapping.scroll_docs (- 4))
+                                                                                :<C-f> (cmp.mapping.scroll_docs 4)
+                                                                                :<C-h> (cmp.mapping (fn []
+                                                                                                      (when (luasnip.locally_jumpable (- 1))
+                                                                                                        (luasnip.jump (- 1))))
+                                                                                                    [:i
+                                                                                                     :s])
+                                                                                :<C-l> (cmp.mapping (fn []
+                                                                                                      (when (luasnip.expand_or_locally_jumpable)
+                                                                                                        (luasnip.expand_or_jump)))
+                                                                                                    [:i
+                                                                                                     :s])
+                                                                                :<C-n> (cmp.mapping.select_next_item)
+                                                                                :<C-p> (cmp.mapping.select_prev_item)
+                                                                                :<C-y> (cmp.mapping.confirm {:select true})})
+                                           :snippet {:expand (fn [args]
+                                                               (luasnip.lsp_expand args.body))}
+                                           :sources [{:group_index 0
+                                                      :name :lazydev}
+                                                     {:name :nvim_lsp}
+                                                     {:name :luasnip}
+                                                     {:name :path}]}))
+                     :dependencies [{1 :L3MON4D3/LuaSnip
+                                     :build ((fn []
+                                               (when (or (= (vim.fn.has :win32)
+                                                            1)
+                                                         (= (vim.fn.executable :make)
+                                                            0))
+                                                 (lua "return "))
+                                               "make install_jsregexp"))
+                                     :dependencies {}}
+                                    :saadparwaiz1/cmp_luasnip
+                                    :hrsh7th/cmp-nvim-lsp
+                                    :hrsh7th/cmp-path]
+                     :event :InsertEnter})
+
+(local comments {1 :folke/todo-comments.nvim
+                 :dependencies [:nvim-lua/plenary.nvim]
+                 :event :VimEnter
+                 :opts {:signs false}})
+
+(local mini {1 :echasnovski/mini.nvim
+             :config (fn []
+                       ((. (require :mini.ai) :setup) {:n_lines 500})
+                       ((. (require :mini.surround) :setup))
+                       (local statusline (require :mini.statusline))
+                       (statusline.setup {:use_icons vim.g.have_nerd_font})
+
+                       (fn statusline.section_location []
+                         "%2l:%-2v"))})
+
 [
  blankline
  emmet
+ autoformat
+ autocomplete
+ comments
+ mini
  ]
diff --git a/config/nvim/fnl/plugins/whichkey.fnl b/config/nvim/fnl/plugins/whichkey.fnl
new file mode 100644
index 0000000..c95d583
--- /dev/null
+++ b/config/nvim/fnl/plugins/whichkey.fnl
@@ -0,0 +1,41 @@
+(local whichkey
+       {1 :folke/which-key.nvim
+        :event :VimEnter
+        :opts {:icons {:keys (or (and vim.g.have_nerd_font {})
+                                 {:BS "<BS> "
+                                  :C "<C-…> "
+                                  :CR "<CR> "
+                                  :D "<D-…> "
+                                  :Down "<Down> "
+                                  :Esc "<Esc> "
+                                  :F1 :<F1>
+                                  :F10 :<F10>
+                                  :F11 :<F11>
+                                  :F12 :<F12>
+                                  :F2 :<F2>
+                                  :F3 :<F3>
+                                  :F4 :<F4>
+                                  :F5 :<F5>
+                                  :F6 :<F6>
+                                  :F7 :<F7>
+                                  :F8 :<F8>
+                                  :F9 :<F9>
+                                  :Left "<Left> "
+                                  :M "<M-…> "
+                                  :NL "<NL> "
+                                  :Right "<Right> "
+                                  :S "<S-…> "
+                                  :ScrollWheelDown "<ScrollWheelDown> "
+                                  :ScrollWheelUp "<ScrollWheelUp> "
+                                  :Space "<Space> "
+                                  :Tab "<Tab> "
+                                  :Up "<Up> "})
+                       :mappings vim.g.have_nerd_font}
+               :spec [{1 :<leader>c :group "[C]ode" :mode [:n :x]}
+                      {1 :<leader>d :group "[D]ocument"}
+                      {1 :<leader>r :group "[R]ename"}
+                      {1 :<leader>s :group "[S]earch"}
+                      {1 :<leader>w :group "[W]orkspace"}
+                      {1 :<leader>t :group "[T]oggle"}]}})
+
+[whichkey]