return { { dir = vim.fn.stdpath("config") .. "/custom/like-a-butterfly", name = "like-a-butterfly", enabled = true, lazy = false, config = function() local lab = require('like-a-butterfly') local augroup = vim.api.nvim_create_augroup( 'like-a-butterfly', { clear = true }) -- Configure eight homerow terminals -- Some TUIs are "flaky" (*cough* lazygit *cough*), and don't redraw -- properly after being hidden. We try to fix this by aggressively -- resizing and redrawing flaky programs' windows. function MakeTerm(shortcut, name, command, flaky) lab.create_term(name, command) vim.keymap.set("n", shortcut, function() if flaky then local flaky_redraw_time = 10 vim.api.nvim_create_autocmd({ "BufEnter" }, { pattern = { "*" }, group = augroup, once = true, callback = function() if (vim.bo.filetype ~= "butterfly") then return end local window = vim.api .nvim_get_current_win() vim.cmd( "setlocal sidescrolloff=" .. vim.o .columns) vim.defer_fn(function() vim.api.nvim_win_set_height( window, vim.api .nvim_win_get_height( window) - 1) vim.defer_fn(function() vim.api .nvim_win_set_height( window, vim.api .nvim_win_get_height( window) + 1) vim.api.nvim_feedkeys( vim.api .nvim_replace_termcodes( '^zei', true, true, true), 'i', true) vim.schedule(function() vim.cmd("redraw!") end) end, flaky_redraw_time) end, flaky_redraw_time) vim.cmd("redraw!") end }) end lab.open_term(name) end) end vim.api.nvim_create_autocmd({ "BufEnter" }, { pattern = { "*" }, group = augroup, callback = function() vim .schedule(function() if (vim.bo.filetype ~= "butterfly") then lab.close_all() end end) end }) MakeTerm("stt", "Alpha", "zsh") MakeTerm("sts", "Beta", "zsh") MakeTerm("str", "Gamma", "zsh") MakeTerm("sta", "Delta", "zsh") MakeTerm("stn", "Epsilon", "gemini --model gemini-2.5-pro") MakeTerm("ste", "Zeta", "/bin/zsh $DOTFILES_DIR/.scripts/omniscratch.zsh") MakeTerm("sti", "Eta", "lazydocker", true) MakeTerm("sto", "Theta", "lazygit", true) -- Keymaps vim.keymap.set("t", "", "") vim.keymap.set("t", "", "") -- Double-tapping within 150ms closes floating terminals; -- implemented as a timer to minimize normal interruptions local timer_var = "lab_doubletap_timer" vim.keymap.set("t", "", function() if vim.b[timer_var] then vim.fn.timer_stop(vim.b[timer_var]) vim.b[timer_var] = nil lab.close_all() else vim.b[timer_var] = vim.fn.timer_start(150, function() vim.b[timer_var] = nil vim.api.nvim_chan_send( vim.b.terminal_job_id, vim.api.nvim_replace_termcodes("", true, false, true)) end) end end, { noremap = true, silent = true}) end } }