├── .gitignore ├── nvim ├── lua │ ├── plugins │ │ ├── undo.lua │ │ ├── wakatime.lua │ │ ├── ansible.lua │ │ ├── navic.lua │ │ ├── nvim-snippets.lua │ │ ├── comment.lua │ │ ├── aerial.lua │ │ ├── crates.lua │ │ ├── astro.lua │ │ ├── surround.lua │ │ ├── custom.lua │ │ ├── rayso.lua │ │ ├── barbecue.lua │ │ ├── database.lua │ │ ├── hardtime.lua │ │ ├── obsidian.lua │ │ ├── lazydev.lua │ │ ├── none.lua │ │ ├── markdown.lua │ │ ├── tree-sitter.lua │ │ ├── neotest.lua │ │ ├── harpoon.lua │ │ ├── floating-help.lua │ │ ├── laravel.lua │ │ ├── debug.lua │ │ ├── go.lua │ │ ├── nvim-cmp.lua │ │ ├── colorscheme.lua │ │ ├── conform.lua │ │ └── snacks.lua │ └── config │ │ ├── autocmds.lua │ │ ├── keymaps.lua │ │ ├── options.lua │ │ └── lazy.lua ├── stylua.toml ├── init.lua ├── .neoconf.json ├── lazyvim.json └── lazy-lock.json ├── assets ├── floating.png └── terminal-2024.png ├── git ├── .gitignore_global └── .gitconfig ├── wezterm └── .wezterm.lua ├── .ackrc ├── README.md ├── LICENSE ├── starship └── starship.toml ├── zsh └── .zshrc └── zellij └── config.kdl /.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nvim/lua/plugins/undo.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "mbbill/undotree", 3 | } 4 | -------------------------------------------------------------------------------- /nvim/lua/plugins/wakatime.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "wakatime/vim-wakatime", 3 | } 4 | -------------------------------------------------------------------------------- /nvim/stylua.toml: -------------------------------------------------------------------------------- 1 | indent_type = "Spaces" 2 | indent_width = 2 3 | column_width = 120 4 | -------------------------------------------------------------------------------- /assets/floating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adelowo/dotfiles/HEAD/assets/floating.png -------------------------------------------------------------------------------- /nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- bootstrap lazy.nvim, LazyVim and your plugins 2 | require("config.lazy") 3 | -------------------------------------------------------------------------------- /assets/terminal-2024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adelowo/dotfiles/HEAD/assets/terminal-2024.png -------------------------------------------------------------------------------- /nvim/lua/plugins/ansible.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "pearofducks/ansible-vim", 3 | ft = { 4 | "yaml", 5 | "yml", 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /nvim/lua/plugins/navic.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "SmiteshP/nvim-navic", 3 | dependencies = { 4 | "neovim/nvim-lspconfig", 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /nvim/lua/plugins/nvim-snippets.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "garymjr/nvim-snippets", 3 | friendly_snippets = true, 4 | ignored_filetypes = { "zig" }, 5 | } 6 | -------------------------------------------------------------------------------- /nvim/lua/plugins/comment.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "numToStr/Comment.nvim", 3 | opts = {}, 4 | lazy = false, 5 | config = function() 6 | require("Comment").setup() 7 | end, 8 | } 9 | -------------------------------------------------------------------------------- /nvim/lua/plugins/aerial.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "stevearc/aerial.nvim", 3 | opts = {}, 4 | dependencies = { 5 | "nvim-treesitter/nvim-treesitter", 6 | "nvim-tree/nvim-web-devicons", 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /nvim/lua/plugins/crates.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "Saecki/crates.nvim", 3 | event = { "BufRead Cargo.toml" }, 4 | opts = { 5 | src = { 6 | cmp = { enabled = true }, 7 | }, 8 | }, 9 | } 10 | -------------------------------------------------------------------------------- /git/.gitignore_global: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .phpcd/ 3 | tags 4 | .vscode/ 5 | data/ 6 | node_modules/ 7 | vendor/ 8 | venv/ 9 | __pycache__/ 10 | .env 11 | oops.md 12 | .zig-cache/ 13 | zig-out/ 14 | storage/ 15 | .infisical.json 16 | docker-data/ 17 | -------------------------------------------------------------------------------- /nvim/lua/config/autocmds.lua: -------------------------------------------------------------------------------- 1 | -- Autocmds are automatically loaded on the VeryLazy event 2 | -- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua 3 | -- Add any additional autocmds here 4 | -------------------------------------------------------------------------------- /nvim/lua/plugins/astro.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "wuelnerdotexe/vim-astro", 4 | ft = "astro", 5 | init = function() 6 | vim.g.astro_typescript = "enable" 7 | vim.g.astro_stylus = "disable" 8 | end, 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /nvim/.neoconf.json: -------------------------------------------------------------------------------- 1 | { 2 | "neodev": { 3 | "library": { 4 | "enabled": true, 5 | "plugins": true 6 | } 7 | }, 8 | "neoconf": { 9 | "plugins": { 10 | "lua_ls": { 11 | "enabled": true 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /nvim/lua/plugins/surround.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "kylechui/nvim-surround", 3 | version = "*", -- Use for stability; omit to use `main` branch for the latest features 4 | event = "VeryLazy", 5 | config = function() 6 | require("nvim-surround").setup({}) 7 | end, 8 | } 9 | -------------------------------------------------------------------------------- /nvim/lua/config/keymaps.lua: -------------------------------------------------------------------------------- 1 | -- Keymaps are automatically loaded on the VeryLazy event 2 | -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua 3 | -- Add any additional keymaps here 4 | 5 | vim.keymap.set("n", "su", vim.cmd.UndotreeToggle) 6 | -------------------------------------------------------------------------------- /nvim/lua/plugins/custom.lua: -------------------------------------------------------------------------------- 1 | --- all custom plugins i build 2 | return { 3 | { 4 | "adelowo/dockercomposelogs.nvim", 5 | config = function() 6 | require("dockercomposelogs").setup({}) 7 | end, 8 | event = "VeryLazy", 9 | dependencies = { 10 | "nvim-telescope/telescope.nvim", 11 | }, 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /nvim/lazyvim.json: -------------------------------------------------------------------------------- 1 | { 2 | "extras": [ 3 | "lazyvim.plugins.extras.editor.snacks_explorer", 4 | "lazyvim.plugins.extras.editor.snacks_picker", 5 | "lazyvim.plugins.extras.lang.markdown", 6 | "lazyvim.plugins.extras.lang.yaml", 7 | "lazyvim.plugins.extras.lang.zig" 8 | ], 9 | "install_version": 7, 10 | "news": { 11 | "NEWS.md": "11866" 12 | }, 13 | "version": 8 14 | } -------------------------------------------------------------------------------- /nvim/lua/plugins/rayso.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "TobinPalmer/rayso.nvim", 3 | cmd = { "Rayso" }, 4 | config = function() 5 | require("rayso").setup({ 6 | options = { 7 | background = true, -- If the screenshot should have a background. 8 | dark_mode = true, -- If the screenshot should be in dark mode. 9 | theme = "vercel", -- Theme 10 | }, 11 | }) 12 | end, 13 | } 14 | -------------------------------------------------------------------------------- /nvim/lua/plugins/barbecue.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "utilyre/barbecue.nvim", 3 | event = { "BufReadPost", "BufNewFile" }, 4 | dependencies = { 5 | "SmiteshP/nvim-navic", 6 | "nvim-tree/nvim-web-devicons", 7 | }, 8 | opts = { 9 | attach_navic = false, 10 | theme = "auto", 11 | include_buftypes = { "" }, 12 | exclude_filetypes = { "gitcommit", "Trouble", "toggleterm" }, 13 | show_modified = false, 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /nvim/lua/plugins/database.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "kristijanhusak/vim-dadbod-ui", 3 | dependencies = { 4 | { "tpope/vim-dadbod", lazy = true }, 5 | { "kristijanhusak/vim-dadbod-completion", ft = { "sql", "mysql", "plsql" }, lazy = true }, 6 | }, 7 | cmd = { 8 | "DBUI", 9 | "DBUIToggle", 10 | "DBUIAddConnection", 11 | "DBUIFindBuffer", 12 | }, 13 | init = function() 14 | vim.g.db_ui_use_nerd_fonts = 1 15 | end, 16 | } 17 | -------------------------------------------------------------------------------- /nvim/lua/plugins/hardtime.lua: -------------------------------------------------------------------------------- 1 | vim.keymap.set("", "", "", { noremap = true }) 2 | vim.keymap.set("", "", "", { noremap = true }) 3 | vim.keymap.set("i", "", "", { noremap = true }) 4 | vim.keymap.set("i", "", "", { noremap = true }) 5 | 6 | vim.opt.mouse = "" 7 | 8 | return { 9 | { 10 | "m4xshen/hardtime.nvim", 11 | dependencies = { "MunifTanjim/nui.nvim", "nvim-lua/plenary.nvim" }, 12 | opts = {}, 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /wezterm/.wezterm.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | 3 | local config = wezterm.config_builder() 4 | 5 | config.color_scheme = "Kanagawa Dragon (Gogh)" 6 | config.hide_tab_bar_if_only_one_tab = true 7 | 8 | config.font = wezterm.font({ 9 | family = "Berkeley Mono", 10 | weight = "Bold", 11 | }) 12 | 13 | -- normal workdesk scene because of monitors 14 | -- disable if working on mac 15 | config.font_size = 20 16 | 17 | -- twitch/YT scene 18 | -- config.font_size = 24 19 | 20 | return config 21 | -------------------------------------------------------------------------------- /.ackrc: -------------------------------------------------------------------------------- 1 | --ignore-ack-defaults 2 | --ignore-directory=is:.git 3 | --ignore-directory=is:SCCS 4 | --ignore-directory=is:node_modules 5 | --ignore-directory=is:vendor 6 | --ignore-file=ext:bak 7 | --ignore-file=match:/~$/ 8 | --ignore-file=match:/[._].*\.swp$/ 9 | --ignore-file=match:/core\.\d+$/ 10 | --ignore-file=match:/[.-]min[.]js$/ 11 | --ignore-file=match:/[.]js[.]min$/ 12 | --ignore-file=match:/[.]min[.]css$/ 13 | --ignore-file=match:/[.]css[.]min$/ 14 | --ignore-file=match:/[.]js[.]map$/ 15 | --ignore-file=match:/[.]css[.]map$/ 16 | -------------------------------------------------------------------------------- /nvim/lua/config/options.lua: -------------------------------------------------------------------------------- 1 | -- Options are automatically loaded before lazy.nvim startup 2 | -- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua 3 | -- Add any additional options here 4 | -- 5 | 6 | vim.opt.winbar = "%=%m %f" 7 | 8 | vim.opt.swapfile = false 9 | 10 | -- Enable ruler 11 | vim.o.ruler = true 12 | 13 | -- Set color column at column 120 14 | vim.cmd("set colorcolumn=120") 15 | vim.cmd("highlight ColorColumn ctermbg=red guibg=red") 16 | 17 | vim.g.lazyvim_php_lsp = "intelephense" 18 | -------------------------------------------------------------------------------- /nvim/lua/plugins/obsidian.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "epwalsh/obsidian.nvim", 3 | version = "*", 4 | lazy = true, 5 | ft = "markdown", 6 | dependencies = { 7 | "nvim-lua/plenary.nvim", 8 | }, 9 | opts = { 10 | templates = { 11 | folder = "Templates", 12 | }, 13 | workspaces = { 14 | { 15 | name = "god", 16 | path = "/Users/lanreadelowo/Library/Mobile Documents/iCloud~md~obsidian/Documents/god", 17 | }, 18 | }, 19 | daily_notes = { 20 | folder = "Daily notes", 21 | template = "daily.md", 22 | }, 23 | }, 24 | } 25 | -------------------------------------------------------------------------------- /nvim/lua/plugins/lazydev.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "folke/lazydev.nvim", 4 | ft = "lua", -- only load on lua files 5 | opts = { 6 | library = { 7 | { path = "luvit-meta/library", words = { "vim%.uv" } }, 8 | }, 9 | }, 10 | }, 11 | { "Bilal2453/luvit-meta", lazy = true }, -- optional `vim.uv` typings 12 | { 13 | "hrsh7th/nvim-cmp", 14 | opts = function(_, opts) 15 | opts.sources = opts.sources or {} 16 | table.insert(opts.sources, { 17 | name = "lazydev", 18 | group_index = 0, 19 | }) 20 | end, 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /nvim/lua/plugins/none.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvimtools/none-ls.nvim", 3 | optional = true, 4 | dependencies = { 5 | { 6 | "mason-org/mason.nvim", 7 | opts = function(_, opts) 8 | opts.ensure_installed = opts.ensure_installed or {} 9 | vim.list_extend(opts.ensure_installed, { "gomodifytags", "impl" }) 10 | end, 11 | }, 12 | }, 13 | opts = function(_, opts) 14 | local nls = require("null-ls") 15 | opts.sources = vim.list_extend(opts.sources or {}, { 16 | nls.builtins.code_actions.gomodifytags, 17 | nls.builtins.code_actions.impl, 18 | nls.builtins.diagnostics.phpstan, 19 | }) 20 | end, 21 | } 22 | -------------------------------------------------------------------------------- /nvim/lua/plugins/markdown.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "iamcco/markdown-preview.nvim", 3 | ft = "markdown", 4 | build = function() 5 | vim.fn["mkdp#util#install"]() 6 | end, 7 | init = function() 8 | local g = vim.g 9 | g.mkdp_auto_start = 0 10 | g.mkdp_auto_close = 1 11 | g.mkdp_refresh_slow = 0 12 | g.mkdp_command_for_global = 0 13 | g.mkdp_open_to_the_world = 0 14 | g.mkdp_open_ip = "" 15 | g.mkdp_browser = "chrome" 16 | g.mkdp_echo_preview_url = 0 17 | g.mkdp_browserfunc = "" 18 | g.mkdp_theme = "dark" 19 | g.mkdp_filetypes = { "markdown" } 20 | g.mkdp_page_title = "${name}.md" 21 | g.mkdp_preview_options = { 22 | disable_sync_scroll = 0, 23 | disable_filename = 1, 24 | } 25 | end, 26 | } 27 | -------------------------------------------------------------------------------- /nvim/lua/plugins/tree-sitter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-treesitter/nvim-treesitter", 4 | opts = { 5 | ensure_installed = { 6 | "hcl", 7 | "terraform", 8 | "bash", 9 | "dockerfile", 10 | "javascript", 11 | "typescript", 12 | "tsx", 13 | "go", 14 | "gomod", 15 | "gosum", 16 | "gitignore", 17 | "gowork", 18 | "hcl", 19 | "json", 20 | "lua", 21 | "make", 22 | "markdown", 23 | "markdown_inline", 24 | "python", 25 | "regex", 26 | "ruby", 27 | "terraform", 28 | "toml", 29 | "vim", 30 | "yaml", 31 | "zig", 32 | "rust", 33 | "php", 34 | }, 35 | }, 36 | }, 37 | } 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dotfiles ( always a WIP ) 2 | 3 | Currently using Zellij and Wezterm 4 | 5 | I am always making updates to my dotfiles. Why? 6 | 7 | - To fix organization. I started using Neovim in 2017 and i ended up with a 8 | ridiculously large `init.vim` because i was just learning on the go 9 | and kept adding stuff to the same file. It became hard to read/find simple configs 10 | 11 | - Moving onto better tech. Vimscript is ugly and annoying to write. I am 12 | switching fully to Lua 13 | 14 | > You can take a look at my dotfiles I used from 2017-2023 at this commit [d2a27a69a700ecafdbee07043dd5ee0c01c06476](https://github.com/adelowo/dotfiles/commit/d2a27a69a700ecafdbee07043dd5ee0c01c06476) 15 | 16 | ## Current look 17 | 18 | ![terminal looks like this](./assets/terminal-2024.png) 19 | 20 | ### Floating and stacked panes 21 | 22 | > Prefer this so much to Tmux panes 23 | 24 | ![Floating terminal](./assets/floating.png) 25 | -------------------------------------------------------------------------------- /nvim/lua/plugins/neotest.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-neotest/neotest", 4 | dependencies = { 5 | "nvim-neotest/nvim-nio", 6 | "nvim-lua/plenary.nvim", 7 | { 8 | "fredrikaverpil/neotest-golang", 9 | -- version = "*", 10 | build = function() 11 | vim.system({ "go", "install", "gotest.tools/gotestsum@latest" }):wait() 12 | end, 13 | }, 14 | }, 15 | opts = { 16 | adapters = { 17 | -- "neotest-plenary", 18 | -- "neotest-go", 19 | -- "neotest-python", 20 | -- "neotest-rust", 21 | -- "neotest-zig", 22 | -- "neotest-gtest", 23 | }, 24 | }, 25 | config = function() 26 | local config = { 27 | runner = "gotestsum", 28 | } 29 | require("neotest").setup({ 30 | adapters = { 31 | require("neotest-golang")(config), 32 | }, 33 | }) 34 | end, 35 | }, 36 | } 37 | -------------------------------------------------------------------------------- /nvim/lua/plugins/harpoon.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "ThePrimeagen/harpoon", 3 | lazy = false, 4 | dependencies = { 5 | "nvim-lua/plenary.nvim", 6 | }, 7 | config = true, 8 | keys = { 9 | { "hm", "lua require('harpoon.mark').add_file()", desc = "Mark file with harpoon" }, 10 | { "hr", "lua require('harpoon.mark').rm_file()", desc = "Remove file with harpoon" }, 11 | { "hn", "lua require('harpoon.ui').nav_next()", desc = "Go to next harpoon mark" }, 12 | { "hp", "lua require('harpoon.ui').nav_prev()", desc = "Go to previous harpoon mark" }, 13 | { "ha", "lua require('harpoon.ui').toggle_quick_menu()", desc = "Show harpoon marks" }, 14 | { "h1", " lua require('harpoon.ui').nav_file(1)", desc = "Harpoon first file" }, 15 | { "h2", " lua require('harpoon.ui').nav_file(2)", desc = "Harpoon second file" }, 16 | { "h3", " lua require('harpoon.ui').nav_file(3)", desc = "Harpoon third file" }, 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /nvim/lua/plugins/floating-help.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "Tyler-Barham/floating-help.nvim", 3 | config = function() 4 | local fh = require("floating-help") 5 | 6 | fh.setup({ 7 | width = 80, -- Whole numbers are columns/rows 8 | height = 0.9, -- Decimals are a percentage of the editor 9 | position = "E", -- NW,N,NW,W,C,E,SW,S,SE (C==center) 10 | }) 11 | 12 | -- Create a keymap for toggling the help window 13 | vim.keymap.set("n", "", fh.toggle) 14 | 15 | -- Only replace cmds, not search; only replace the first instance 16 | local function cmd_abbrev(abbrev, expansion) 17 | local cmd = "cabbr " 18 | .. abbrev 19 | .. ' =(getcmdpos() == 1 && getcmdtype() == ":" ? "' 20 | .. expansion 21 | .. '" : "' 22 | .. abbrev 23 | .. '")' 24 | vim.cmd(cmd) 25 | end 26 | 27 | -- Redirect `:h` to `:FloatingHelp` 28 | cmd_abbrev("h", "FloatingHelp") 29 | cmd_abbrev("help", "FloatingHelp") 30 | cmd_abbrev("helpc", "FloatingHelpClose") 31 | cmd_abbrev("helpclose", "FloatingHelpClose") 32 | end, 33 | } 34 | -------------------------------------------------------------------------------- /nvim/lua/plugins/laravel.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "neovim/nvim-lspconfig", 4 | opts = { 5 | -- @type lspconfig.options 6 | servers = { 7 | intelephense = { 8 | filetypes = { "php", "blade", "php_only" }, 9 | settings = { 10 | intelephense = { 11 | filetypes = { "php", "blade", "php_only" }, 12 | files = { 13 | associations = { "*.php", "*.blade.php" }, 14 | maxSize = 5000000, 15 | }, 16 | }, 17 | }, 18 | }, 19 | }, 20 | }, 21 | }, 22 | { 23 | "adibhanna/laravel.nvim", 24 | dependencies = { 25 | "MunifTanjim/nui.nvim", 26 | "nvim-lua/plenary.nvim", 27 | }, 28 | keys = { 29 | { "la", ":Artisan", desc = "Laravel Artisan" }, 30 | { "lc", ":Composer", desc = "Composer" }, 31 | { "lr", ":LaravelRoute", desc = "Laravel Routes" }, 32 | { "lm", ":LaravelMake", desc = "Laravel Make" }, 33 | }, 34 | config = function() 35 | require("laravel").setup() 36 | end, 37 | }, 38 | } 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # DON'T BE A DICK PUBLIC LICENSE 2 | 3 | > Version 1.1, December 2016 4 | 5 | > Copyright (C) 2017 - 2050 Lanre Adelowo 6 | 7 | Everyone is permitted to copy and distribute verbatim or modified 8 | copies of this license document. 9 | 10 | > DON'T BE A DICK PUBLIC LICENSE 11 | > TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 1. Do whatever you like with the original work, just don't be a dick. 14 | 15 | Being a dick includes - but is not limited to - the following instances: 16 | 17 | 1a. Outright copyright infringement - Don't just copy this and change the name. 18 | 1b. Selling the unmodified original with no work done what-so-ever, that's REALLY being a dick. 19 | 1c. Modifying the original work to contain hidden harmful content. That would make you a PROPER dick. 20 | 21 | 2. If you become rich through modifications, related works/services, or supporting the original work, 22 | share the love. Only a dick would make loads off this work and not buy the original work's 23 | creator(s) a pint. 24 | 25 | 3. Code is provided with no warranty. Using somebody else's code and bitching when it goes wrong makes 26 | you a DONKEY dick. Fix the problem yourself. A non-dick would submit the fix back. 27 | -------------------------------------------------------------------------------- /nvim/lua/plugins/debug.lua: -------------------------------------------------------------------------------- 1 | vim.fn.sign_define("DapBreakpoint", { 2 | text = "🔴", 3 | numhl = "DapBreakpoint", 4 | }) 5 | 6 | vim.fn.sign_define("DapBreakpointCondition", { 7 | text = "🔴", 8 | linehl = "DapBreakpoint", 9 | numhl = "DapBreakpoint", 10 | }) 11 | 12 | return { 13 | "mfussenegger/nvim-dap", 14 | dependencies = { 15 | "leoluz/nvim-dap-go", 16 | "rcarriga/nvim-dap-ui", 17 | }, 18 | config = function() 19 | require("dap-go").setup() 20 | 21 | local dap, dapui = require("dap"), require("dapui") 22 | 23 | dapui.setup() 24 | 25 | dap.listeners.before.attach.dapui_config = function() 26 | dapui.open() 27 | end 28 | dap.listeners.before.launch.dapui_config = function() 29 | dapui.open() 30 | end 31 | dap.listeners.before.event_terminated.dapui_config = function() 32 | dapui.close() 33 | end 34 | dap.listeners.before.event_exited.dapui_config = function() 35 | dapui.close() 36 | end 37 | end, 38 | keys = { 39 | { "dt", "DapToggleBreakpoint", desc = "Toggle debugger breakpoint" }, 40 | { "dc", "DapContinue", desc = "Continue running debugger" }, 41 | { "dx", "DapTerminate", desc = "Kill Debugger" }, 42 | { "ds", "DapStepOver", desc = "Step over Debugger" }, 43 | { "du", "DapToggleRepl", desc = "open Debugger Repl" }, 44 | }, 45 | } 46 | -------------------------------------------------------------------------------- /nvim/lua/plugins/go.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "ray-x/go.nvim", 3 | dependencies = { 4 | "ray-x/guihua.lua", 5 | "neovim/nvim-lspconfig", 6 | "nvim-treesitter/nvim-treesitter", 7 | }, 8 | config = function() 9 | require("go").setup({ 10 | lsp_cfg = { 11 | on_attach = function(client, bufnr) 12 | -- unmap Go.nvim's e as i have it set to snacks.nvim already 13 | pcall(vim.keymap.del, "n", "e", { buffer = bufnr }) 14 | end, 15 | settings = { 16 | gopls = { 17 | buildFlags = { "-tags=cli,test,gencmd" }, 18 | }, 19 | }, 20 | }, 21 | }) 22 | 23 | local format_sync_grp = vim.api.nvim_create_augroup("GoImport", {}) 24 | vim.api.nvim_create_autocmd("BufWritePre", { 25 | pattern = "*.go", 26 | callback = function() 27 | require("go.format").goimport() 28 | end, 29 | group = format_sync_grp, 30 | }) 31 | end, 32 | event = { "CmdlineEnter" }, 33 | ft = { "go", "gomod" }, 34 | build = ':lua require("go.install").update_all_sync()', 35 | keys = { 36 | { "gaj", "GoAddTag", desc = "Add json tags" }, 37 | { "gam", "GoAddTag mapstructure", desc = "Add mapstructure tags" }, 38 | { "gae", "GoAddTag env", desc = "Add env tags" }, 39 | { "gay", "GoAddTag yaml", desc = "Add YAML tags" }, 40 | { "gasvr", "GoAddTag validate:required", desc = "Add Swagger validate required tags" }, 41 | { "gasvo", "GoAddTag validate:optional", desc = "Add Swagger validate optional tags" }, 42 | 43 | { "gim", "GoImplements", desc = "Find implementions of this method" }, 44 | }, 45 | } 46 | -------------------------------------------------------------------------------- /starship/starship.toml: -------------------------------------------------------------------------------- 1 | format = """ 2 | [░▒▓](#a3aed2)\ 3 | [  ](bg:#a3aed2 fg:#090c0c)\ 4 | [](bg:#769ff0 fg:#a3aed2)\ 5 | $directory\ 6 | [](fg:#769ff0 bg:#394260)\ 7 | $git_branch\ 8 | $git_status\ 9 | [](fg:#394260 bg:#212736)\ 10 | $nodejs\ 11 | $rust\ 12 | $golang\ 13 | $php\ 14 | [](fg:#212736 bg:#1d2230)\ 15 | $time\ 16 | [ ](fg:#1d2230)\ 17 | \n$character""" 18 | 19 | [directory] 20 | style = "fg:#e3e5e5 bg:#769ff0" 21 | format = "[ $path ]($style)" 22 | truncation_length = 3 23 | truncation_symbol = "…/" 24 | 25 | [directory.substitutions] 26 | "Documents" = "󰈙 " 27 | "Downloads" = " " 28 | "Music" = " " 29 | "Pictures" = " " 30 | "portfolio" = "󰲋 lanre.wtf" 31 | "go" = "󰲋 " 32 | 33 | [git_branch] 34 | symbol = "" 35 | style = "bg:#394260" 36 | format = '[[ $symbol $branch ](fg:#769ff0 bg:#394260)]($style)' 37 | 38 | [git_status] 39 | style = "bg:#394260" 40 | format = '[[($all_status$ahead_behind )](fg:#769ff0 bg:#394260)]($style)' 41 | 42 | [nodejs] 43 | symbol = "" 44 | style = "bg:#212736" 45 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 46 | 47 | [rust] 48 | symbol = "" 49 | style = "bg:#212736" 50 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 51 | 52 | [golang] 53 | symbol = "" 54 | style = "bg:#212736" 55 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 56 | 57 | [php] 58 | symbol = "" 59 | style = "bg:#212736" 60 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 61 | 62 | [time] 63 | disabled = false 64 | time_format = "%R" # Hour:Minute Format 65 | style = "bg:#1d2230" 66 | format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' 67 | 68 | # [docker_context] 69 | # format = '[[ $symbol( $context) ]()]($style)' 70 | -------------------------------------------------------------------------------- /nvim/lua/plugins/nvim-cmp.lua: -------------------------------------------------------------------------------- 1 | return { 2 | -- Use for completion and snippets (supertab) 3 | -- first: disable default and behavior in LuaSnip 4 | { 5 | "L3MON4D3/LuaSnip", 6 | keys = function() 7 | return {} 8 | end, 9 | }, 10 | -- then: setup supertab in cmp 11 | { 12 | "hrsh7th/nvim-cmp", 13 | dependencies = { 14 | "hrsh7th/cmp-emoji", 15 | }, 16 | ---@param opts cmp.ConfigSchema 17 | opts = function(_, opts) 18 | local has_words_before = function() 19 | unpack = unpack or table.unpack 20 | local line, col = unpack(vim.api.nvim_win_get_cursor(0)) 21 | return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil 22 | end 23 | 24 | local luasnip = require("luasnip") 25 | local cmp = require("cmp") 26 | 27 | opts.mapping = vim.tbl_extend("force", opts.mapping, { 28 | [""] = cmp.mapping(function(fallback) 29 | if cmp.visible() then 30 | cmp.select_next_item() 31 | -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() 32 | -- this way you will only jump inside the snippet region 33 | elseif luasnip.expand_or_jumpable() then 34 | luasnip.expand_or_jump() 35 | elseif has_words_before() then 36 | cmp.complete() 37 | else 38 | fallback() 39 | end 40 | end, { "i", "s" }), 41 | [""] = cmp.mapping(function(fallback) 42 | if cmp.visible() then 43 | cmp.select_prev_item() 44 | elseif luasnip.jumpable(-1) then 45 | luasnip.jump(-1) 46 | else 47 | fallback() 48 | end 49 | end, { "i", "s" }), 50 | }) 51 | end, 52 | }, 53 | } 54 | -------------------------------------------------------------------------------- /nvim/lua/plugins/colorscheme.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { "ellisonleao/gruvbox.nvim" }, 3 | { "dracula/vim" }, 4 | { "shaunsingh/nord.nvim" }, 5 | { 6 | "catppuccin/nvim", 7 | name = "catppuccin", 8 | priority = 1000, 9 | config = function() 10 | require("catppuccin").setup({ 11 | flavour = "mocha", 12 | }) 13 | end, 14 | }, 15 | { 16 | "loctvl842/monokai-pro.nvim", 17 | config = function() 18 | require("monokai-pro").setup() 19 | end, 20 | }, 21 | { 22 | "rebelot/kanagawa.nvim", 23 | config = function() 24 | local my_colors = { 25 | waveBlue1 = "#363646", 26 | sumiInk1 = "#16161D", 27 | roninYellow = "#F5DD8E", 28 | } 29 | 30 | require("kanagawa").setup({ 31 | dimInactive = true, 32 | colors = { 33 | palette = my_colors, 34 | theme = { 35 | all = { 36 | ui = { 37 | bg_gutter = "none", 38 | }, 39 | }, 40 | }, 41 | }, 42 | functionStyle = { bold = true }, 43 | typeStyle = { bold = true }, 44 | overrides = function(colors) 45 | local theme = colors.theme 46 | return { 47 | TelescopeTitle = { fg = theme.ui.special, bold = true }, 48 | TelescopeResultsNormal = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m1 }, 49 | TelescopePreviewNormal = { bg = theme.ui.bg_dim }, 50 | 51 | Pmenu = { fg = theme.ui.shade0, bg = theme.ui.bg_p1 }, 52 | PmenuSel = { fg = "NONE", bg = theme.ui.bg_p2 }, 53 | PmenuSbar = { bg = theme.ui.bg_m1 }, 54 | PmenuThumb = { bg = theme.ui.bg_p2 }, 55 | } 56 | end, 57 | }) 58 | 59 | -- vim.api.nvim_set_hl 60 | vim.api.nvim_set_hl(0, "@markdownUrl", { underline = true, italic = true }) 61 | end, 62 | }, 63 | { 64 | "scottmckendry/cyberdream.nvim", 65 | lazy = false, 66 | priority = 1000, 67 | }, 68 | { 69 | "sainnhe/sonokai", 70 | lazy = true, 71 | priority = 10000, 72 | }, 73 | { "rose-pine/neovim", name = "rose-pine" }, 74 | { 75 | "bettervim/yugen.nvim", 76 | }, 77 | { 78 | "nyoom-engineering/oxocarbon.nvim", 79 | }, 80 | { 81 | "zenbones-theme/zenbones.nvim", 82 | dependencies = "rktjmp/lush.nvim", 83 | lazy = false, 84 | priority = 1000, 85 | }, 86 | { 87 | "LazyVim/LazyVim", 88 | opts = { 89 | colorscheme = "kanagawa-wave", 90 | -- colorscheme = "oxocarbon", 91 | }, 92 | }, 93 | } 94 | -------------------------------------------------------------------------------- /nvim/lua/plugins/conform.lua: -------------------------------------------------------------------------------- 1 | local util = require("conform.util") 2 | 3 | return { 4 | { 5 | "stevearc/conform.nvim", 6 | optional = true, 7 | -- opts = { 8 | -- formatters_by_ft = { 9 | -- php = { { "pint" } }, 10 | -- }, 11 | -- }, 12 | opts = function() 13 | ---@type conform.setupOpts 14 | local opts = { 15 | default_format_opts = { 16 | timeout_ms = 3000, 17 | async = false, -- not recommended to change 18 | quiet = false, -- not recommended to change 19 | lsp_format = "fallback", -- not recommended to change 20 | }, 21 | formatters_by_ft = { 22 | lua = { "stylua" }, 23 | fish = { "fish_indent" }, 24 | sh = { "shfmt" }, 25 | php = { "pint" }, 26 | blade = { "blade-formatter", "rustywind" }, 27 | python = { "black" }, 28 | javascript = { "prettierd" }, 29 | -- rust = { "rustfmt" }, 30 | }, 31 | -- LazyVim will merge the options you set here with builtin formatters. 32 | -- You can also define any custom formatters here. 33 | ---@type table 34 | formatters = { 35 | injected = { options = { ignore_errors = true } }, 36 | -- # Example of using dprint only when a dprint.json file is present 37 | -- dprint = { 38 | -- condition = function(ctx) 39 | -- return vim.fs.find({ "dprint.json" }, { path = ctx.filename, upward = true })[1] 40 | -- end, 41 | -- }, 42 | -- 43 | -- # Example of using shfmt with extra args 44 | -- shfmt = { 45 | -- extra_args = { "-i", "2", "-ci" }, 46 | -- }, 47 | pint = { 48 | meta = { 49 | url = "https://github.com/laravel/pint", 50 | description = "Laravel Pint is an opinionated PHP code style fixer for minimalists. Pint is built on top of PHP-CS-Fixer and makes it simple to ensure that your code style stays clean and consistent.", 51 | }, 52 | command = util.find_executable({ 53 | vim.fn.stdpath("data") .. "/mason/bin/pint", 54 | "vendor/bin/pint", 55 | }, "pint"), 56 | args = { "$FILENAME" }, 57 | stdin = false, 58 | }, 59 | }, 60 | } 61 | return opts 62 | end, 63 | }, 64 | { 65 | "mfussenegger/nvim-lint", 66 | optional = true, 67 | opts = { 68 | linters_by_ft = { 69 | php = {}, 70 | }, 71 | }, 72 | }, 73 | } 74 | -------------------------------------------------------------------------------- /nvim/lua/config/lazy.lua: -------------------------------------------------------------------------------- 1 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 2 | if not vim.loop.fs_stat(lazypath) then 3 | -- bootstrap lazy.nvim 4 | -- stylua: ignore 5 | vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) 6 | end 7 | vim.opt.rtp:prepend(vim.env.LAZY or lazypath) 8 | 9 | require("lazy").setup({ 10 | spec = { 11 | -- add LazyVim and import its plugins 12 | { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 13 | -- import any extras modules here 14 | { import = "lazyvim.plugins.extras.lang.typescript" }, 15 | { import = "lazyvim.plugins.extras.lang.json" }, 16 | { import = "lazyvim.plugins.extras.ui.mini-animate" }, 17 | -- { import = "lazyvim.plugins.extras.lang.go" }, 18 | { import = "lazyvim.plugins.extras.lang.ruby" }, 19 | { import = "lazyvim.plugins.extras.lang.tex" }, 20 | { import = "lazyvim.plugins.extras.lang.terraform" }, 21 | { import = "lazyvim.plugins.extras.lang.tailwind" }, 22 | { import = "lazyvim.plugins.extras.lang.rust" }, 23 | { import = "lazyvim.plugins.extras.lang.ruby" }, 24 | { import = "lazyvim.plugins.extras.lang.python" }, 25 | { import = "lazyvim.plugins.extras.lang.docker" }, 26 | { import = "lazyvim.plugins.extras.test.core" }, 27 | { import = "lazyvim.plugins.extras.lsp.none-ls" }, 28 | { import = "lazyvim.plugins.extras.lang.php" }, 29 | -- { import = "lazyvim.plugins.extras.coding.copilot" }, 30 | -- import/override with your plugins 31 | { import = "plugins" }, 32 | }, 33 | defaults = { 34 | -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. 35 | -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. 36 | lazy = false, 37 | -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, 38 | -- have outdated releases, which may break your Neovim install. 39 | version = false, -- always use the latest git commit 40 | -- version = "*", -- try installing the latest stable version for plugins that support semver 41 | }, 42 | install = { colorscheme = { "tokyonight", "habamax" } }, 43 | checker = { enabled = true }, -- automatically check for plugin updates 44 | performance = { 45 | rtp = { 46 | -- disable some rtp plugins 47 | disabled_plugins = { 48 | "gzip", 49 | -- "matchit", 50 | -- "matchparen", 51 | -- "netrwPlugin", 52 | "tarPlugin", 53 | "tohtml", 54 | "tutor", 55 | "zipPlugin", 56 | }, 57 | }, 58 | }, 59 | }) 60 | 61 | local null_ls = require("null-ls") 62 | 63 | null_ls.setup({ 64 | sources = { 65 | null_ls.builtins.formatting.black, 66 | null_ls.builtins.formatting.clang_format, 67 | }, 68 | }) 69 | 70 | require("lualine").setup({ 71 | sections = { 72 | lualine_c = { "filename" }, 73 | }, 74 | }) 75 | -------------------------------------------------------------------------------- /git/.gitconfig: -------------------------------------------------------------------------------- 1 | [user] 2 | email = yo@lanre.wtf 3 | name = Lanre Adelowo 4 | signingkey = 17587ED6D8AD34DC6AEDB1265F48B4357241D209 5 | 6 | ; Prevent a push to main by all means. 7 | ; I already manually never do this but I recently ran into 8 | ; an issue where i ran into an issue where i ran "git rebase origin main" instead of "origin/main" 9 | ; i got checkout'd to main and thought i was still on the same branch, I ran `git push -u origin -f` 10 | ; Remote git server rejected it obviously but 11 | ; Tiny issues like this can happen often, better to block them in their entirety 12 | ; TLDR: this fixes only "git push". If you do "git push -u origin", it doesn't seem to work sadly and you will 13 | ; have to use a pre hook to solve this usecase then 14 | [branch "main"] 15 | remote = origin 16 | pushRemote = random-branch-that-does-not-exists 17 | merge = refs/heads/main 18 | 19 | [branch "master"] 20 | remote = origin 21 | pushRemote = random-branch-that-does-not-exists 22 | merge = refs/heads/master 23 | 24 | [push] 25 | default = current 26 | 27 | [core] 28 | editor = nvim 29 | excludesfile = ~/.gitignore_global 30 | ; pager = diff-so-fancy | less --tabs=4 -RFX 31 | quotepath = false 32 | commitGraph = true 33 | autocrlf = input 34 | safecrlf = false 35 | pager = delta 36 | 37 | [alias] 38 | prune = "fetch --prune" 39 | authors = "!git shortlog -s | cut -c8-" 40 | ; bclean clears up all local branches leaving only the current active branch. 41 | ; Say you have 5 branches (including master), then you checkout the fiend branch. 42 | ; Running git bclean would delete the other 4 branches, leaving only the fiend branch. 43 | ; Run this with caution. 44 | bclean = "!git branch | grep -v "main" | xargs git branch -D" 45 | fiend = "!git branch fiend && git checkout fiend" 46 | lg = log --color --graph --abbrev-commit\n --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' 47 | 48 | [color] 49 | ui = true 50 | 51 | [color "diff-highlight"] 52 | oldNormal = red bold 53 | oldHighlight = red bold 52 54 | newNormal = green bold 55 | newHighlight = green bold 22 56 | 57 | [color "diff"] 58 | meta = 227 59 | frag = magenta bold 60 | commit = 227 bold 61 | old = red bold 62 | new = green bold 63 | whitespace = red reverse 64 | 65 | [commit] 66 | gpgsign = true 67 | 68 | [tag] 69 | forceSignAnnotated = true 70 | 71 | [url "git@github.com:"] 72 | insteadOf = https://github.com/ 73 | insteadOf = https://github.com/ 74 | 75 | [gc] 76 | writeCommitGraph = true 77 | 78 | [http] 79 | cookiefile = /Users/lanreadelowo/.gitcookies 80 | 81 | [receive] 82 | advertisePushOptions = true 83 | 84 | [gpg] 85 | program = gpg 86 | 87 | [init] 88 | defaultBranch = main 89 | 90 | [interactive] 91 | diffFilter = delta --color-only 92 | 93 | [delta] 94 | navigate = true 95 | 96 | [merge] 97 | conflictstyle = zdiff3 98 | 99 | [diff] 100 | colorMoved = default 101 | [rerere] 102 | enabled = true 103 | [safe] 104 | directory = /workdir 105 | directory = /workdir 106 | directory = /workdir 107 | directory = /workdir 108 | directory = /workdir 109 | -------------------------------------------------------------------------------- /zsh/.zshrc: -------------------------------------------------------------------------------- 1 | export TERM="xterm-256color" 2 | export LANG="en_US.UTF-8" 3 | 4 | ## GPG signing to keep my sanity 5 | export GPG_TTY=$(tty) 6 | 7 | export GOPATH=$HOME/go 8 | export GOROOT="$(brew --prefix go)/libexec" 9 | export PATH=$HOME/bin:/usr/local/bin:$PATH:/usr/local/go/bin:$HOME/.config/composer/vendor/bin:$GOPATH/bin:/usr/local/mysql/bin:$HOME/flutter/bin:Users/${USER}/Library/Android/sdk/platform-tools 10 | export PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH 11 | export PATH="/usr/local/sbin:$PATH" 12 | export PATH=$HOME/.composer/vendor/bin:$PATH 13 | export PATH="/usr/local/opt/ruby/bin:$PATH" 14 | export ANDROID_HOME=$HOME/Library/Android/sdk 15 | export PATH=$PATH:$ANDROID_HOME/emulator 16 | export PATH=$PATH:$ANDROID_HOME/tools 17 | export PATH=$PATH:$ANDROID_HOME/tools/bin 18 | export PATH=$PATH:$ANDROID_HOME/platform-tools 19 | export PATH="/Users/lanreadelowo/.local/share/solana/install/active_release/bin:$PATH" 20 | 21 | # add ruby gems to PATH too 22 | if which ruby >/dev/null && which gem >/dev/null; then 23 | export PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH" 24 | fi 25 | 26 | ## zig lang 27 | export PATH="$PATH:$(brew --prefix llvm@15)/bin" 28 | export LDFLAGS="$LDFLAGS -L$(brew --prefix llvm@15)/lib" 29 | export CPPFLAGS="$CPPFLAGS -I$(brew --prefix llvm@15)/include" 30 | 31 | source $HOME/.cargo/env 32 | 33 | lg() 34 | { 35 | export LAZYGIT_NEW_DIR_FILE=~/.lazygit/newdir 36 | 37 | lazygit "$@" 38 | 39 | if [ -f $LAZYGIT_NEW_DIR_FILE ]; then 40 | cd "$(cat $LAZYGIT_NEW_DIR_FILE)" 41 | rm -f $LAZYGIT_NEW_DIR_FILE > /dev/null 42 | fi 43 | } 44 | 45 | ## Give this an open tcp port and it would return it's PID 46 | ## I usually use this to kill processes 47 | ## sudo kill -9 $(portpid 8080) 48 | portpid() 49 | { 50 | if [[ ${#1} -eq 0 ]] then 51 | echo "Provide a port number whose PID you'd like to get" 52 | return 64 53 | fi 54 | 55 | lsof -i tcp:$1 -P | awk '{print $2}' | grep -e "[0-9]" 56 | } 57 | 58 | 59 | export FZF_DEFAULT_COMMAND='ag --nocolor --ignore node_modules -g ""' 60 | 61 | export EDITOR="nvim" 62 | 63 | alias ctag="gotags -tag-relative=true -R=true -sort=true -f="tags" -fields=+l ." 64 | 65 | ## Nvim > vim 66 | ## If Nvim is installed, make the command vim to open nvim 67 | if type nvim > /dev/null 2>&1; then 68 | alias vim="nvim" 69 | fi 70 | 71 | # if type bun > /dev/null 2>&1; then 72 | # alias npm="bun" 73 | # alias yarn="bun" 74 | # alias npx="bunx" 75 | # fi 76 | 77 | 78 | if type bat > /dev/null 2>&1; then 79 | alias cat="bat" 80 | fi 81 | 82 | if type lsd > /dev/null 2>&1;then 83 | alias ls="lsd" 84 | fi 85 | 86 | if type autojump > /dev/null 2>&1;then 87 | [ -f /opt/homebrew/etc/profile.d/autojump.sh ] && . /opt/homebrew/etc/profile.d/autojump.sh 88 | alias z="j" 89 | fi 90 | 91 | ## Open Neovim in a cinch. 92 | ## If a path is given (as in `v path`), it opens the given path. Path can be a file or directory. 93 | ## If none is given (as in `v`), it opens up the current directory. 94 | v() 95 | { 96 | local toOpen=$1 97 | 98 | if [[ ${#toOpen} -eq 0 ]]; then 99 | toOpen="./" 100 | fi 101 | 102 | nvim $toOpen 103 | } 104 | 105 | 106 | # Cannot remember where I got this from sadly. Probably Stackoverflow or Unix 107 | # Stackexhange 108 | work_on_project() { 109 | sleep $(echo "$1 * 60" | bc) 110 | 111 | for x in $(seq 1000); do say "Time to stop working fella"; sleep 0.5; done 112 | } 113 | 114 | 115 | # bun completions 116 | [ -s "/Users/lanreadelowo/.bun/_bun" ] && source "/Users/lanreadelowo/.bun/_bun" 117 | 118 | # bun 119 | export BUN_INSTALL="$HOME/.bun" 120 | export PATH="$BUN_INSTALL/bin:$PATH" 121 | 122 | 123 | autoload -U compinit 124 | compinit -i 125 | 126 | source ~/zsh-autocomplete/zsh-autocomplete.plugin.zsh 127 | 128 | source <(kubebuilder completion zsh) 129 | source <(starship init zsh) 130 | source <(cast completions zsh) 131 | source <(anvil completions zsh) 132 | source <(forge completions zsh) 133 | source <(localstack completion zsh) 134 | source <(flyctl completion zsh) 135 | 136 | # The next line enables shell command completion for gcloud. 137 | if [ -f '/Users/lanreadelowo/google-cloud-sdk/completion.zsh.inc' ]; then . '/Users/lanreadelowo/google-cloud-sdk/completion.zsh.inc'; fi 138 | 139 | ## always open zellij 140 | eval "$(zellij setup --generate-auto-start zsh)" 141 | 142 | . "$HOME/.local/bin/env" 143 | -------------------------------------------------------------------------------- /nvim/lua/plugins/snacks.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "folke/snacks.nvim", 3 | keys = { 4 | { 5 | "e", 6 | function() 7 | Snacks.explorer() 8 | end, 9 | desc = "File Explorer", 10 | }, 11 | { 12 | "se", 13 | function() 14 | Snacks.picker.explorer() 15 | end, 16 | desc = "Open Snacks explorer", 17 | }, 18 | { 19 | "sz", 20 | function() 21 | Snacks.zen() 22 | end, 23 | desc = "Toggle Snacks zen mode", 24 | }, 25 | { 26 | "p", 27 | function() 28 | Snacks.picker.git_files() 29 | end, 30 | desc = "Find git files", 31 | }, 32 | { 33 | "hh", 34 | function() 35 | Snacks.picker.help() 36 | end, 37 | desc = "Find Neovim help tags", 38 | }, 39 | }, 40 | opts = { 41 | --- ZEN 42 | --- 43 | --- 44 | --- 45 | --- 46 | zen = { 47 | enabled = true, 48 | }, 49 | --- END ZEN 50 | 51 | --- EXPLORER 52 | ---@class snacks.explorer.Config 53 | explorer = { 54 | enabled = true, 55 | replace_netrw = true, 56 | }, 57 | picker = { 58 | enabled = true, 59 | sources = { 60 | explorer = { 61 | layout = { layout = { position = "right" } }, 62 | hidden = true, 63 | git_untracked = true, 64 | exclude = { "node_modules", "vendor", "docker-data" }, 65 | win = { 66 | list = { 67 | keys = { 68 | ["h"] = "toggle_hidden", 69 | ["i"] = "toggle_ignored", 70 | }, 71 | }, 72 | }, 73 | }, 74 | files = { 75 | hidden = true, 76 | follow = true, 77 | }, 78 | }, 79 | }, 80 | --- END EXPLORER 81 | 82 | --- DASHBOARD 83 | --- 84 | --- 85 | --- 86 | ---@class snacks.dashboard.Config 87 | ---@field enabled? boolean 88 | ---@field sections snacks.dashboard.Section 89 | ---@field formats table 90 | dashboard = { 91 | width = 60, 92 | row = nil, -- dashboard position. nil for center 93 | col = nil, -- dashboard position. nil for center 94 | pane_gap = 4, -- empty columns between vertical panes 95 | autokeys = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", -- autokey sequence 96 | preset = { 97 | ---@type fun(cmd:string, opts:table)|nil 98 | pick = nil, 99 | ---@type snacks.dashboard.Item[] 100 | keys = { 101 | { icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')" }, 102 | { icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" }, 103 | { icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" }, 104 | { icon = " ", key = "r", desc = "Recent Files", action = ":lua Snacks.dashboard.pick('oldfiles')" }, 105 | { 106 | icon = " ", 107 | key = "c", 108 | desc = "Config", 109 | action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})", 110 | }, 111 | { icon = " ", key = "s", desc = "Restore Session", section = "session" }, 112 | { icon = "󰒲 ", key = "L", desc = "Lazy", action = ":Lazy", enabled = package.loaded.lazy ~= nil }, 113 | { icon = " ", key = "q", desc = "Quit", action = ":qa" }, 114 | }, 115 | header = [[ 116 | ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ 117 | ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ 118 | ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ 119 | ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ 120 | ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ 121 | ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝]], 122 | }, 123 | formats = { 124 | icon = function(item) 125 | if item.file and item.icon == "file" or item.icon == "directory" then 126 | return M.icon(item.file, item.icon) 127 | end 128 | return { item.icon, width = 2, hl = "icon" } 129 | end, 130 | footer = { "%s", align = "center" }, 131 | header = { "%s", align = "center" }, 132 | file = function(item, ctx) 133 | local fname = vim.fn.fnamemodify(item.file, ":~") 134 | fname = ctx.width and #fname > ctx.width and vim.fn.pathshorten(fname) or fname 135 | if #fname > ctx.width then 136 | local dir = vim.fn.fnamemodify(fname, ":h") 137 | local file = vim.fn.fnamemodify(fname, ":t") 138 | if dir and file then 139 | file = file:sub(-(ctx.width - #dir - 2)) 140 | fname = dir .. "/…" .. file 141 | end 142 | end 143 | local dir, file = fname:match("^(.*)/(.+)$") 144 | return dir and { { dir .. "/", hl = "dir" }, { file, hl = "file" } } or { { fname, hl = "file" } } 145 | end, 146 | }, 147 | sections = { 148 | { section = "header" }, 149 | { section = "keys", gap = 1, padding = 1 }, 150 | { 151 | pane = 2, 152 | icon = " ", 153 | desc = "Browse Repo", 154 | padding = 1, 155 | key = "b", 156 | action = function() 157 | Snacks.gitbrowse() 158 | end, 159 | }, 160 | function() 161 | local in_git = Snacks.git.get_root() ~= nil 162 | local cmds = { 163 | { 164 | title = "Open Issues", 165 | cmd = "gh issue list -L 3", 166 | key = "i", 167 | action = function() 168 | vim.fn.jobstart("gh issue list --web", { detach = true }) 169 | end, 170 | icon = " ", 171 | height = 7, 172 | }, 173 | { 174 | icon = " ", 175 | title = "Open PRs", 176 | cmd = "gh pr list -L 3", 177 | key = "P", 178 | action = function() 179 | vim.fn.jobstart("gh pr list --web", { detach = true }) 180 | end, 181 | height = 7, 182 | }, 183 | { 184 | icon = " ", 185 | title = "Git Status", 186 | cmd = "git --no-pager diff --stat -B -M -C", 187 | height = 10, 188 | }, 189 | } 190 | return vim.tbl_map(function(cmd) 191 | return vim.tbl_extend("force", { 192 | pane = 2, 193 | section = "terminal", 194 | enabled = in_git, 195 | padding = 1, 196 | ttl = 5 * 60, 197 | indent = 3, 198 | }, cmd) 199 | end, cmds) 200 | end, 201 | { section = "startup" }, 202 | }, 203 | }, 204 | }, 205 | } 206 | -------------------------------------------------------------------------------- /nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, 3 | "LazyVim": { "branch": "main", "commit": "28db03f958d58dfff3c647ce28fdc1cb88ac158d" }, 4 | "LuaSnip": { "branch": "master", "commit": "3732756842a2f7e0e76a7b0487e9692072857277" }, 5 | "SchemaStore.nvim": { "branch": "main", "commit": "5f2299987a1937612c910f00db39156bab6a6b35" }, 6 | "aerial.nvim": { "branch": "master", "commit": "8bb8697d180681746da41bef5c8691d04443af36" }, 7 | "ansible-vim": { "branch": "master", "commit": "6718ff81fe36f5f4fbf6675d95b16e4a74814827" }, 8 | "barbecue.nvim": { "branch": "main", "commit": "3e31404f0b93a2c30d151abf0648650ac811c664" }, 9 | "blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" }, 10 | "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, 11 | "catppuccin": { "branch": "main", "commit": "ce4a8e0d5267e67056f9f4dcf6cb1d0933c8ca00" }, 12 | "conform.nvim": { "branch": "master", "commit": "4993e07fac6679d0a5005aa7499e0bad2bd39f19" }, 13 | "crates.nvim": { "branch": "main", "commit": "ac9fa498a9edb96dc3056724ff69d5f40b898453" }, 14 | "cyberdream.nvim": { "branch": "main", "commit": "0ed48b4cf9dda7c10e1798fa6a6ae8bbabaf406a" }, 15 | "dockercomposelogs.nvim": { "branch": "main", "commit": "c9a911112782f7efdbf14d821c64c975595b1766" }, 16 | "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, 17 | "floating-help.nvim": { "branch": "main", "commit": "00a0de9df33c25ad31188241a7408cd17b652541" }, 18 | "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, 19 | "gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" }, 20 | "go.nvim": { "branch": "master", "commit": "41a18f0c05534c375bafec7ed05cdb409c4abcc6" }, 21 | "grug-far.nvim": { "branch": "main", "commit": "b58b2d65863f4ebad88b10a1ddd519e5380466e0" }, 22 | "gruvbox.nvim": { "branch": "main", "commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437" }, 23 | "guihua.lua": { "branch": "master", "commit": "ef44ba40f12e56c1c9fa45967f2b4d142e4b97a0" }, 24 | "hardtime.nvim": { "branch": "main", "commit": "b4e431934af1fe224a3a801f632c008278cb7628" }, 25 | "harpoon": { "branch": "master", "commit": "1bc17e3e42ea3c46b33c0bbad6a880792692a1b3" }, 26 | "kanagawa.nvim": { "branch": "master", "commit": "aef7f5cec0a40dbe7f3304214850c472e2264b10" }, 27 | "laravel.nvim": { "branch": "main", "commit": "623a22de1a54bd6e96839cef1845ffaaf3a1eed1" }, 28 | "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, 29 | "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" }, 30 | "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, 31 | "lush.nvim": { "branch": "main", "commit": "9c60ec2279d62487d942ce095e49006af28eed6e" }, 32 | "luvit-meta": { "branch": "main", "commit": "0ea4ff636c5bb559ffa78108561d0976f4de9682" }, 33 | "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, 34 | "mason-lspconfig.nvim": { "branch": "main", "commit": "0b9bb925c000ae649ff7e7149c8cd00031f4b539" }, 35 | "mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" }, 36 | "mini.ai": { "branch": "main", "commit": "bfb26d9072670c3aaefab0f53024b2f3729c8083" }, 37 | "mini.animate": { "branch": "main", "commit": "0365de8b69331c25d0d0d7573407a7dc7719e578" }, 38 | "mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" }, 39 | "mini.pairs": { "branch": "main", "commit": "472ec50092a3314ec285d2db2baa48602d71fe93" }, 40 | "monokai-pro.nvim": { "branch": "master", "commit": "1ac671f6da720cba967d28d25c2f16b8b4e18808" }, 41 | "neotest": { "branch": "master", "commit": "deadfb1af5ce458742671ad3a013acb9a6b41178" }, 42 | "neotest-golang": { "branch": "main", "commit": "b982da5f39980797c1bdec875d688a302245f31f" }, 43 | "neotest-pest": { "branch": "main", "commit": "1429445746f28a4ce887289ea6e442430629e306" }, 44 | "neotest-phpunit": { "branch": "main", "commit": "2761ae9e9a385e491a9731f8c52824e1be64a68f" }, 45 | "neotest-python": { "branch": "master", "commit": "b0d3a861bd85689d8ed73f0590c47963a7eb1bf9" }, 46 | "neotest-rspec": { "branch": "main", "commit": "e7dc67c1167a9e593c804a6be6808ba9a5920d43" }, 47 | "neotest-zig": { "branch": "main", "commit": "de63f3b9a182d374d2e71cf44385326682ec90e7" }, 48 | "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, 49 | "none-ls.nvim": { "branch": "main", "commit": "9a5d95cdf9f440683f248f6f0e97f8643804c91b" }, 50 | "nord.nvim": { "branch": "master", "commit": "80c1e5321505aeb22b7a9f23eb82f1e193c12470" }, 51 | "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, 52 | "nvim-dap": { "branch": "master", "commit": "5860c7c501eb428d3137ee22c522828d20cca0b3" }, 53 | "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, 54 | "nvim-dap-python": { "branch": "master", "commit": "64652d1ae1db80870d9aac7132d76e37acd86a26" }, 55 | "nvim-dap-ruby": { "branch": "main", "commit": "ba36f9905ca9c6d89e5af5467a52fceeb2bbbf6d" }, 56 | "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, 57 | "nvim-lint": { "branch": "master", "commit": "d1118791070d090777398792a73032a0ca5c79ff" }, 58 | "nvim-lspconfig": { "branch": "master", "commit": "effe4bf2e1afb881ea67291c648b68dd3dfc927a" }, 59 | "nvim-navic": { "branch": "master", "commit": "7d914a39a1ef8f4e22c2c4381abeef7c556f5a13" }, 60 | "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, 61 | "nvim-snippets": { "branch": "main", "commit": "56b4052f71220144689caaa2e5b66222ba5661eb" }, 62 | "nvim-surround": { "branch": "main", "commit": "fcfa7e02323d57bfacc3a141f8a74498e1522064" }, 63 | "nvim-treesitter": { "branch": "main", "commit": "00c906abb9550e72bc0c640545b5499b9525bb40" }, 64 | "nvim-treesitter-textobjects": { "branch": "main", "commit": "63c4dce4a56312ef1bdeafd16bdefa008fcc950a" }, 65 | "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, 66 | "nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" }, 67 | "obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" }, 68 | "oxocarbon.nvim": { "branch": "main", "commit": "9f85f6090322f39b11ae04a343d4eb9d12a86897" }, 69 | "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, 70 | "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, 71 | "rayso.nvim": { "branch": "main", "commit": "0c411a7ac595bfe0476a3693e554b8e22e356ac3" }, 72 | "render-markdown.nvim": { "branch": "main", "commit": "6e0e8902dac70fecbdd8ce557d142062a621ec38" }, 73 | "rose-pine": { "branch": "main", "commit": "cf2a288696b03d0934da713d66c6d71557b5c997" }, 74 | "rustaceanvim": { "branch": "master", "commit": "6c3785d6a230bec63f70c98bf8e2842bed924245" }, 75 | "snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }, 76 | "sonokai": { "branch": "master", "commit": "ec07018013b4683cf33f80ee4bdf3eca2621da33" }, 77 | "telescope-terraform-doc.nvim": { "branch": "main", "commit": "66987fac94d12704fdfd90b857f4f648e31251c9" }, 78 | "telescope-terraform.nvim": { "branch": "main", "commit": "072c97023797ca1a874668aaa6ae0b74425335df" }, 79 | "telescope.nvim": { "branch": "master", "commit": "e69b434b968a33815e2f02a5c7bd7b8dd4c7d4b2" }, 80 | "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, 81 | "tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, 82 | "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, 83 | "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, 84 | "undotree": { "branch": "master", "commit": "0f1c9816975b5d7f87d5003a19c53c6fd2ff6f7f" }, 85 | "venv-selector.nvim": { "branch": "main", "commit": "58bae72c84b9f7f864c879ec1896e384296f9ffb" }, 86 | "vim": { "branch": "master", "commit": "d4b0823100c702af127cba8dd5595a8f599041ec" }, 87 | "vim-astro": { "branch": "main", "commit": "9b4674ecfe1dd84b5fb9b4de1653975de6e8e2e1" }, 88 | "vim-dadbod": { "branch": "master", "commit": "e95afed23712f969f83b4857a24cf9d59114c2e6" }, 89 | "vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" }, 90 | "vim-dadbod-ui": { "branch": "master", "commit": "48c4f271da13d380592f4907e2d1d5558044e4e5" }, 91 | "vim-wakatime": { "branch": "master", "commit": "d7973b157a632d1edeff01818f18d67e584eeaff" }, 92 | "vimtex": { "branch": "master", "commit": "32bcb3922c20588e00de68f73c86312eda2141ad" }, 93 | "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }, 94 | "yugen.nvim": { "branch": "main", "commit": "cfd97621c2f724443346ae841facaf4e00410e5a" }, 95 | "zenbones.nvim": { "branch": "main", "commit": "a934bc07d2ed4a98b74526c172d7f043736d8935" } 96 | } 97 | -------------------------------------------------------------------------------- /zellij/config.kdl: -------------------------------------------------------------------------------- 1 | keybinds clear-defaults=true { 2 | locked { 3 | bind "Ctrl g" { SwitchToMode "normal"; } 4 | } 5 | pane { 6 | bind "left" { MoveFocus "left"; } 7 | bind "down" { MoveFocus "down"; } 8 | bind "up" { MoveFocus "up"; } 9 | bind "right" { MoveFocus "right"; } 10 | bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; } 11 | bind "d" { NewPane "down"; SwitchToMode "normal"; } 12 | bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; } 13 | bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; } 14 | bind "h" { MoveFocus "left"; } 15 | bind "i" { TogglePanePinned; SwitchToMode "normal"; } 16 | bind "j" { MoveFocus "down"; } 17 | bind "k" { MoveFocus "up"; } 18 | bind "l" { MoveFocus "right"; } 19 | bind "n" { NewPane; SwitchToMode "normal"; } 20 | bind "p" { SwitchFocus; } 21 | bind "Ctrl p" { SwitchToMode "normal"; } 22 | bind "r" { NewPane "right"; SwitchToMode "normal"; } 23 | bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; } 24 | bind "z" { TogglePaneFrames; SwitchToMode "normal"; } 25 | } 26 | tab { 27 | bind "left" { GoToPreviousTab; } 28 | bind "down" { GoToNextTab; } 29 | bind "up" { GoToPreviousTab; } 30 | bind "right" { GoToNextTab; } 31 | bind "1" { GoToTab 1; SwitchToMode "normal"; } 32 | bind "2" { GoToTab 2; SwitchToMode "normal"; } 33 | bind "3" { GoToTab 3; SwitchToMode "normal"; } 34 | bind "4" { GoToTab 4; SwitchToMode "normal"; } 35 | bind "5" { GoToTab 5; SwitchToMode "normal"; } 36 | bind "6" { GoToTab 6; SwitchToMode "normal"; } 37 | bind "7" { GoToTab 7; SwitchToMode "normal"; } 38 | bind "8" { GoToTab 8; SwitchToMode "normal"; } 39 | bind "9" { GoToTab 9; SwitchToMode "normal"; } 40 | bind "[" { BreakPaneLeft; SwitchToMode "normal"; } 41 | bind "]" { BreakPaneRight; SwitchToMode "normal"; } 42 | bind "b" { BreakPane; SwitchToMode "normal"; } 43 | bind "h" { GoToPreviousTab; } 44 | bind "j" { GoToNextTab; } 45 | bind "k" { GoToPreviousTab; } 46 | bind "l" { GoToNextTab; } 47 | bind "n" { NewTab; SwitchToMode "normal"; } 48 | bind "r" { SwitchToMode "renametab"; TabNameInput 0; } 49 | bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; } 50 | bind "x" { CloseTab; SwitchToMode "normal"; } 51 | bind "Ctrl z" { SwitchToMode "normal"; } 52 | bind "tab" { ToggleTab; } 53 | } 54 | resize { 55 | bind "left" { Resize "Increase left"; } 56 | bind "down" { Resize "Increase down"; } 57 | bind "up" { Resize "Increase up"; } 58 | bind "right" { Resize "Increase right"; } 59 | bind "+" { Resize "Increase"; } 60 | bind "-" { Resize "Decrease"; } 61 | bind "=" { Resize "Increase"; } 62 | bind "H" { Resize "Decrease left"; } 63 | bind "J" { Resize "Decrease down"; } 64 | bind "K" { Resize "Decrease up"; } 65 | bind "L" { Resize "Decrease right"; } 66 | bind "h" { Resize "Increase left"; } 67 | bind "j" { Resize "Increase down"; } 68 | bind "k" { Resize "Increase up"; } 69 | bind "l" { Resize "Increase right"; } 70 | bind "Ctrl r" { SwitchToMode "normal"; } 71 | } 72 | move { 73 | bind "left" { MovePane "left"; } 74 | bind "down" { MovePane "down"; } 75 | bind "up" { MovePane "up"; } 76 | bind "right" { MovePane "right"; } 77 | bind "h" { MovePane "left"; } 78 | bind "j" { MovePane "down"; } 79 | bind "k" { MovePane "up"; } 80 | bind "l" { MovePane "right"; } 81 | bind "n" { MovePane; } 82 | bind "p" { MovePaneBackwards; } 83 | bind "Ctrl x" { SwitchToMode "normal"; } 84 | bind "tab" { MovePane; } 85 | } 86 | scroll { 87 | bind "e" { EditScrollback; SwitchToMode "normal"; } 88 | bind "s" { SwitchToMode "entersearch"; SearchInput 0; } 89 | } 90 | search { 91 | bind "c" { SearchToggleOption "CaseSensitivity"; } 92 | bind "n" { Search "down"; } 93 | bind "o" { SearchToggleOption "WholeWord"; } 94 | bind "p" { Search "up"; } 95 | bind "w" { SearchToggleOption "Wrap"; } 96 | } 97 | session { 98 | bind "a" { 99 | LaunchOrFocusPlugin "zellij:about" { 100 | floating true 101 | move_to_focused_tab true 102 | } 103 | SwitchToMode "normal" 104 | } 105 | bind "c" { 106 | LaunchOrFocusPlugin "configuration" { 107 | floating true 108 | move_to_focused_tab true 109 | } 110 | SwitchToMode "normal" 111 | } 112 | bind "p" { 113 | LaunchOrFocusPlugin "plugin-manager" { 114 | floating true 115 | move_to_focused_tab true 116 | } 117 | SwitchToMode "normal" 118 | } 119 | bind "Ctrl s" { SwitchToMode "normal"; } 120 | bind "w" { 121 | LaunchOrFocusPlugin "zellij:session-manager" { 122 | floating true 123 | move_to_focused_tab true 124 | } 125 | SwitchToMode "normal" 126 | } 127 | } 128 | shared_except "locked" "tmux" { 129 | bind "Ctrl b" { SwitchToMode "tmux"; } 130 | } 131 | shared_except "locked" { 132 | bind "Alt left" { MoveFocusOrTab "left"; } 133 | bind "Alt down" { MoveFocus "down"; } 134 | bind "Alt up" { MoveFocus "up"; } 135 | bind "Alt right" { MoveFocusOrTab "right"; } 136 | bind "Alt +" { Resize "Increase"; } 137 | bind "Alt -" { Resize "Decrease"; } 138 | bind "Alt =" { Resize "Increase"; } 139 | bind "Alt [" { PreviousSwapLayout; } 140 | bind "Alt ]" { NextSwapLayout; } 141 | bind "Alt f" { ToggleFloatingPanes; } 142 | bind "Ctrl g" { SwitchToMode "locked"; } 143 | bind "Alt h" { MoveFocusOrTab "left"; } 144 | bind "Alt i" { MoveTab "left"; } 145 | bind "Alt j" { MoveFocus "down"; } 146 | bind "Alt k" { MoveFocus "up"; } 147 | bind "Alt l" { MoveFocusOrTab "right"; } 148 | bind "Alt n" { NewPane; } 149 | bind "Alt o" { MoveTab "right"; } 150 | bind "Ctrl q" { Quit; } 151 | } 152 | shared_except "locked" "move" { 153 | bind "Ctrl x" { SwitchToMode "move"; } 154 | } 155 | shared_except "locked" "session" { 156 | bind "Ctrl s" { SwitchToMode "session"; } 157 | } 158 | shared_except "locked" "tab" { 159 | bind "Ctrl z" { SwitchToMode "tab"; } 160 | } 161 | shared_except "locked" "pane" { 162 | bind "Ctrl p" { SwitchToMode "pane"; } 163 | } 164 | shared_except "locked" "resize" "session" { 165 | bind "Ctrl r" { SwitchToMode "resize"; } 166 | } 167 | shared_except "normal" "locked" { 168 | bind "esc" { SwitchToMode "normal"; } 169 | bind "enter" { SwitchToMode "normal"; } 170 | } 171 | shared_except "normal" "locked" "resize" "tab" "move" { 172 | bind "Ctrl n" { SwitchToMode "resize"; } 173 | } 174 | shared_among "pane" "tmux" { 175 | bind "x" { CloseFocus; SwitchToMode "normal"; } 176 | } 177 | shared_except "normal" "locked" "resize" "pane" "tab" "session" "move" { 178 | bind "Ctrl h" { SwitchToMode "move"; } 179 | bind "Ctrl o" { SwitchToMode "session"; } 180 | bind "Ctrl t" { SwitchToMode "tab"; } 181 | } 182 | shared_among "scroll" "search" { 183 | bind "PageDown" { PageScrollDown; } 184 | bind "PageUp" { PageScrollUp; } 185 | bind "left" { PageScrollUp; } 186 | bind "down" { ScrollDown; } 187 | bind "up" { ScrollUp; } 188 | bind "right" { PageScrollDown; } 189 | bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; } 190 | bind "d" { HalfPageScrollDown; } 191 | bind "Ctrl f" { PageScrollDown; } 192 | bind "h" { PageScrollUp; } 193 | bind "j" { ScrollDown; } 194 | bind "k" { ScrollUp; } 195 | bind "l" { PageScrollDown; } 196 | bind "u" { HalfPageScrollUp; } 197 | } 198 | entersearch { 199 | bind "Ctrl c" { SwitchToMode "scroll"; } 200 | } 201 | shared_among "renametab" "renamepane" { 202 | bind "Ctrl c" { SwitchToMode "normal"; } 203 | } 204 | shared_among "session" "tmux" { 205 | bind "d" { Detach; } 206 | } 207 | tmux { 208 | bind "left" { MoveFocus "left"; SwitchToMode "normal"; } 209 | bind "down" { MoveFocus "down"; SwitchToMode "normal"; } 210 | bind "up" { MoveFocus "up"; SwitchToMode "normal"; } 211 | bind "right" { MoveFocus "right"; SwitchToMode "normal"; } 212 | bind "space" { NextSwapLayout; } 213 | bind "\"" { NewPane "down"; SwitchToMode "normal"; } 214 | bind "%" { NewPane "right"; SwitchToMode "normal"; } 215 | bind "," { SwitchToMode "renametab"; } 216 | bind "[" { SwitchToMode "scroll"; } 217 | bind "Ctrl b" { Write 2; SwitchToMode "normal"; } 218 | bind "c" { NewTab; SwitchToMode "normal"; } 219 | bind "h" { MoveFocus "left"; SwitchToMode "normal"; } 220 | bind "j" { MoveFocus "down"; SwitchToMode "normal"; } 221 | bind "k" { MoveFocus "up"; SwitchToMode "normal"; } 222 | bind "l" { MoveFocus "right"; SwitchToMode "normal"; } 223 | bind "n" { GoToNextTab; SwitchToMode "normal"; } 224 | bind "o" { FocusNextPane; } 225 | bind "p" { GoToPreviousTab; SwitchToMode "normal"; } 226 | bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; } 227 | } 228 | } 229 | 230 | // Plugin aliases - can be used to change the implementation of Zellij 231 | // changing these requires a restart to take effect 232 | plugins { 233 | about location="zellij:about" 234 | compact-bar location="zellij:compact-bar" 235 | configuration location="zellij:configuration" 236 | filepicker location="zellij:strider" { 237 | cwd "/" 238 | } 239 | plugin-manager location="zellij:plugin-manager" 240 | session-manager location="zellij:session-manager" 241 | status-bar location="zellij:status-bar" 242 | strider location="zellij:strider" 243 | tab-bar location="zellij:tab-bar" 244 | welcome-screen location="zellij:session-manager" { 245 | welcome_screen true 246 | } 247 | } 248 | 249 | // Plugins to load in the background when a new session starts 250 | // eg. "file:/path/to/my-plugin.wasm" 251 | // eg. "https://example.com/my-plugin.wasm" 252 | load_plugins { 253 | } 254 | 255 | // Use a simplified UI without special fonts (arrow glyphs) 256 | // Options: 257 | // - true 258 | // - false (Default) 259 | // 260 | // simplified_ui true 261 | 262 | // Choose the theme that is specified in the themes section. 263 | // Default: default 264 | // 265 | theme "dracula" 266 | 267 | // Choose the base input mode of zellij. 268 | // Default: normal 269 | // 270 | // default_mode "locked" 271 | 272 | // Choose the path to the default shell that zellij will use for opening new panes 273 | // Default: $SHELL 274 | // 275 | // default_shell "fish" 276 | 277 | // Choose the path to override cwd that zellij will use for opening new panes 278 | // 279 | // default_cwd "/tmp" 280 | 281 | // The name of the default layout to load on startup 282 | // Default: "default" 283 | // 284 | // default_layout "compact" 285 | 286 | // The folder in which Zellij will look for layouts 287 | // (Requires restart) 288 | // 289 | // layout_dir "/tmp" 290 | 291 | // The folder in which Zellij will look for themes 292 | // (Requires restart) 293 | // 294 | // theme_dir "/tmp" 295 | 296 | // Toggle enabling the mouse mode. 297 | // On certain configurations, or terminals this could 298 | // potentially interfere with copying text. 299 | // Options: 300 | // - true (default) 301 | // - false 302 | // 303 | // mouse_mode false 304 | 305 | // Toggle having pane frames around the panes 306 | // Options: 307 | // - true (default, enabled) 308 | // - false 309 | // 310 | // pane_frames false 311 | 312 | // When attaching to an existing session with other users, 313 | // should the session be mirrored (true) 314 | // or should each user have their own cursor (false) 315 | // (Requires restart) 316 | // Default: false 317 | // 318 | // mirror_session true 319 | 320 | // Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP 321 | // eg. when terminal window with an active zellij session is closed 322 | // (Requires restart) 323 | // Options: 324 | // - detach (Default) 325 | // - quit 326 | // 327 | // on_force_close "quit" 328 | 329 | // Configure the scroll back buffer size 330 | // This is the number of lines zellij stores for each pane in the scroll back 331 | // buffer. Excess number of lines are discarded in a FIFO fashion. 332 | // (Requires restart) 333 | // Valid values: positive integers 334 | // Default value: 10000 335 | // 336 | // scroll_buffer_size 10000 337 | 338 | // Provide a command to execute when copying text. The text will be piped to 339 | // the stdin of the program to perform the copy. This can be used with 340 | // terminal emulators which do not support the OSC 52 ANSI control sequence 341 | // that will be used by default if this option is not set. 342 | // Examples: 343 | // 344 | // copy_command "xclip -selection clipboard" // x11 345 | // copy_command "wl-copy" // wayland 346 | // copy_command "pbcopy" // osx 347 | // 348 | // copy_command "pbcopy" 349 | 350 | // Choose the destination for copied text 351 | // Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard. 352 | // Does not apply when using copy_command. 353 | // Options: 354 | // - system (default) 355 | // - primary 356 | // 357 | // copy_clipboard "primary" 358 | 359 | // Enable automatic copying (and clearing) of selection when releasing mouse 360 | // Default: true 361 | // 362 | // copy_on_select true 363 | 364 | // Path to the default editor to use to edit pane scrollbuffer 365 | // Default: $EDITOR or $VISUAL 366 | // scrollback_editor "/usr/bin/vim" 367 | 368 | // A fixed name to always give the Zellij session. 369 | // Consider also setting `attach_to_session true,` 370 | // otherwise this will error if such a session exists. 371 | // Default: 372 | // 373 | // session_name "My singleton session" 374 | 375 | // When `session_name` is provided, attaches to that session 376 | // if it is already running or creates it otherwise. 377 | // Default: false 378 | // 379 | // attach_to_session true 380 | 381 | // Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible 382 | // Options: 383 | // - true (default) 384 | // - false 385 | // 386 | // auto_layout false 387 | 388 | // Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected 389 | // Options: 390 | // - true (default) 391 | // - false 392 | // 393 | // session_serialization false 394 | 395 | // Whether pane viewports are serialized along with the session, default is false 396 | // Options: 397 | // - true 398 | // - false (default) 399 | // 400 | // serialize_pane_viewport false 401 | 402 | // Scrollback lines to serialize along with the pane viewport when serializing sessions, 0 403 | // defaults to the scrollback size. If this number is higher than the scrollback size, it will 404 | // also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true. 405 | // 406 | // scrollback_lines_to_serialize 10000 407 | 408 | // Enable or disable the rendering of styled and colored underlines (undercurl). 409 | // May need to be disabled for certain unsupported terminals 410 | // (Requires restart) 411 | // Default: true 412 | // 413 | // styled_underlines false 414 | 415 | // How often in seconds sessions are serialized 416 | // 417 | // serialization_interval 10000 418 | 419 | // Enable or disable writing of session metadata to disk (if disabled, other sessions might not know 420 | // metadata info on this session) 421 | // (Requires restart) 422 | // Default: false 423 | // 424 | // disable_session_metadata false 425 | 426 | // Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it) 427 | // (Requires restart) 428 | // Default: true (if the host terminal supports it) 429 | // 430 | // support_kitty_keyboard_protocol false 431 | 432 | // Whether to stack panes when resizing beyond a certain size 433 | // Default: true 434 | // 435 | // stacked_resize false 436 | 437 | // Whether to show tips on startup 438 | // Default: true 439 | // 440 | show_startup_tips false 441 | 442 | // Whether to show release notes on first version run 443 | // Default: true 444 | // 445 | // show_release_notes false 446 | --------------------------------------------------------------------------------