From 47b7622fe79650f038784fbc0fee960d2004acc6 Mon Sep 17 00:00:00 2001 From: rajvatsal Date: Wed, 10 Jan 2024 15:20:47 +0530 Subject: [PATCH] feat(vatsal): Create new config vatsal kickstart folder contains the original init.lua file. Current init.lua gets it's config from lua.vatsal.plugins which what I created to modularize the code and enable lazy loading. Init to lua now loads all the plugins from vatsal.plugins --- init.lua | 16 +- lua/kickstart/plugins/autoformat.lua | 74 ++ lua/kickstart/plugins/debug.lua | 3 +- lua/kickstart/plugins/init.lua | 669 ++++++++++++++++++ lua/{kickstart => vatsal/options}/keymaps.lua | 0 .../options}/settings.lua | 0 .../options}/yank-highlight.lua | 0 lua/vatsal/plugins/alpha.lua | 325 +++++++++ lua/vatsal/plugins/ascii-nvim.lua | 1 + lua/vatsal/plugins/colorbuddy.lua | 9 + lua/vatsal/plugins/colorschemes.lua | 27 + lua/{kickstart => vatsal}/plugins/comment.lua | 0 lua/vatsal/plugins/debug.lua | 86 +++ lua/vatsal/plugins/fortunes.lua | 1 + .../plugins/git-signs.lua | 0 lua/{kickstart => vatsal}/plugins/git.lua | 0 .../plugins/indent-blankline.lua | 0 lua/{kickstart => vatsal}/plugins/lualine.lua | 0 lua/vatsal/plugins/none-ls.lua | 18 + .../plugins/nvim-cmp.lua | 0 .../plugins/nvim-lspconfig.lua | 0 .../plugins/nvim-tree.lua | 0 .../plugins/nvim-treesitter.lua | 0 lua/vatsal/plugins/telescope-ui-select.lua | 15 + .../plugins/telescope.lua | 0 .../plugins/vim-seluth.lua | 0 .../plugins/which-key.lua | 0 27 files changed, 1233 insertions(+), 11 deletions(-) create mode 100644 lua/kickstart/plugins/autoformat.lua create mode 100644 lua/kickstart/plugins/init.lua rename lua/{kickstart => vatsal/options}/keymaps.lua (100%) rename lua/{kickstart => vatsal/options}/settings.lua (100%) rename lua/{kickstart => vatsal/options}/yank-highlight.lua (100%) create mode 100644 lua/vatsal/plugins/alpha.lua create mode 100644 lua/vatsal/plugins/ascii-nvim.lua create mode 100644 lua/vatsal/plugins/colorbuddy.lua create mode 100644 lua/vatsal/plugins/colorschemes.lua rename lua/{kickstart => vatsal}/plugins/comment.lua (100%) create mode 100644 lua/vatsal/plugins/debug.lua create mode 100644 lua/vatsal/plugins/fortunes.lua rename lua/{kickstart => vatsal}/plugins/git-signs.lua (100%) rename lua/{kickstart => vatsal}/plugins/git.lua (100%) rename lua/{kickstart => vatsal}/plugins/indent-blankline.lua (100%) rename lua/{kickstart => vatsal}/plugins/lualine.lua (100%) create mode 100644 lua/vatsal/plugins/none-ls.lua rename lua/{kickstart => vatsal}/plugins/nvim-cmp.lua (100%) rename lua/{kickstart => vatsal}/plugins/nvim-lspconfig.lua (100%) rename lua/{kickstart => vatsal}/plugins/nvim-tree.lua (100%) rename lua/{kickstart => vatsal}/plugins/nvim-treesitter.lua (100%) create mode 100644 lua/vatsal/plugins/telescope-ui-select.lua rename lua/{kickstart => vatsal}/plugins/telescope.lua (100%) rename lua/{kickstart => vatsal}/plugins/vim-seluth.lua (100%) rename lua/{kickstart => vatsal}/plugins/which-key.lua (100%) diff --git a/init.lua b/init.lua index 6af11fbc..14822aea 100644 --- a/init.lua +++ b/init.lua @@ -3,7 +3,6 @@ vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' --- [[ Install `lazy.nvim` plugin manager ]] -- `:help lazy.nvim.txt` for more info local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' if not vim.loop.fs_stat(lazypath) then @@ -18,17 +17,14 @@ if not vim.loop.fs_stat(lazypath) then end vim.opt.rtp:prepend(lazypath) --- Load settings -require('kickstart.settings') -require('kickstart.keymaps') -require('kickstart.yank-highlight') +-- Load options +local options = 'vatsal.options.' +require(options .. 'settings') +require(options .. 'keymaps') +require(options .. 'yank-highlight') -- Load plugins -require('lazy').setup({ - - { import = 'kickstart.plugins' }, - { import = 'custom.plugins' }, -}, {}) +require('lazy').setup('vatsal.plugins', {}) -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et diff --git a/lua/kickstart/plugins/autoformat.lua b/lua/kickstart/plugins/autoformat.lua new file mode 100644 index 00000000..bc56b15b --- /dev/null +++ b/lua/kickstart/plugins/autoformat.lua @@ -0,0 +1,74 @@ +-- autoformat.lua +-- +-- Use your language server to automatically format your code on save. +-- Adds additional commands as well to manage the behavior + +return { + 'neovim/nvim-lspconfig', + config = function() + -- Switch for controlling whether you want autoformatting. + -- Use :KickstartFormatToggle to toggle autoformatting on or off + local format_is_enabled = true + vim.api.nvim_create_user_command('KickstartFormatToggle', function() + format_is_enabled = not format_is_enabled + print('Setting autoformatting to: ' .. tostring(format_is_enabled)) + end, {}) + + -- Create an augroup that is used for managing our formatting autocmds. + -- We need one augroup per client to make sure that multiple clients + -- can attach to the same buffer without interfering with each other. + local _augroups = {} + local get_augroup = function(client) + if not _augroups[client.id] then + local group_name = 'kickstart-lsp-format-' .. client.name + local id = vim.api.nvim_create_augroup(group_name, { clear = true }) + _augroups[client.id] = id + end + + return _augroups[client.id] + end + + -- Whenever an LSP attaches to a buffer, we will run this function. + -- + -- See `:help LspAttach` for more information about this autocmd event. + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), + -- This is where we attach the autoformatting for reasonable clients + callback = function(args) + local client_id = args.data.client_id + local client = vim.lsp.get_client_by_id(client_id) + local bufnr = args.buf + + -- Only attach to clients that support document formatting + if not client.server_capabilities.documentFormattingProvider then + return + end + + -- Tsserver usually works poorly. Sorry you work with bad languages + -- You can remove this line if you know what you're doing :) + if client.name == 'tsserver' then + return + end + + -- Create an autocmd that will run *before* we save the buffer. + -- Run the formatting command for the LSP that has just attached. + vim.api.nvim_create_autocmd('BufWritePre', { + group = get_augroup(client), + buffer = bufnr, + callback = function() + if not format_is_enabled then + return + end + + vim.lsp.buf.format { + async = false, + filter = function(c) + return c.id == client.id + end, + } + end, + }) + end, + }) + end, +} diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua index 92705c43..7fc783fa 100644 --- a/lua/kickstart/plugins/debug.lua +++ b/lua/kickstart/plugins/debug.lua @@ -7,7 +7,9 @@ -- kickstart.nvim and not kitchen-sink.nvim ;) return { + -- NOTE: Yes, you can install new plugins here! 'mfussenegger/nvim-dap', + -- NOTE: And you can specify dependencies as well dependencies = { -- Creates a beautiful debugger UI 'rcarriga/nvim-dap-ui', @@ -19,7 +21,6 @@ return { -- Add your own debuggers here 'leoluz/nvim-dap-go', }, - event = { 'BufReadPre', 'BufNewFile' }, config = function() local dap = require 'dap' local dapui = require 'dapui' diff --git a/lua/kickstart/plugins/init.lua b/lua/kickstart/plugins/init.lua new file mode 100644 index 00000000..5cecbee5 --- /dev/null +++ b/lua/kickstart/plugins/init.lua @@ -0,0 +1,669 @@ +--[[ + +===================================================================== +==================== READ THIS BEFORE CONTINUING ==================== +===================================================================== + +Kickstart.nvim is *not* a distribution. + +Kickstart.nvim is a template for your own configuration. + The goal is that you can read every line of code, top-to-bottom, understand + what your configuration is doing, and modify it to suit your needs. + + Once you've done that, you should start exploring, configuring and tinkering to + explore Neovim! + + If you don't know anything about Lua, I recommend taking some time to read through + a guide. One possible example: + - https://learnxinyminutes.com/docs/lua/ + + + And then you can explore or search through `:help lua-guide` + - https://neovim.io/doc/user/lua-guide.html + + +Kickstart Guide: + +I have left several `:help X` comments throughout the init.lua +You should run that command and read that help section for more information. + +In addition, I have some `NOTE:` items throughout the file. +These are for you, the reader to help understand what is happening. Feel free to delete +them once you know what you're doing, but they should serve as a guide for when you +are first encountering a few different constructs in your nvim config. + +I hope you enjoy your Neovim journey, +- TJ + +P.S. You can delete this when you're done too. It's your config now :) +--]] + +-- Set as the leader key +-- See `:help mapleader` +-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +-- [[ Install `lazy.nvim` plugin manager ]] +-- https://github.com/folke/lazy.nvim +-- `:help lazy.nvim.txt` for more info +local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' +if not vim.loop.fs_stat(lazypath) then + vim.fn.system { + 'git', + 'clone', + '--filter=blob:none', + 'https://github.com/folke/lazy.nvim.git', + '--branch=stable', -- latest stable release + lazypath, + } +end +vim.opt.rtp:prepend(lazypath) + +-- [[ Configure plugins ]] +-- NOTE: Here is where you install your plugins. +-- You can configure plugins using the `config` key. +-- +-- You can also configure plugins after the setup call, +-- as they will be available in your neovim runtime. +require('lazy').setup({ + -- NOTE: First, some plugins that don't require any configuration + + -- Git related plugins + 'tpope/vim-fugitive', + 'tpope/vim-rhubarb', + + -- Detect tabstop and shiftwidth automatically + 'tpope/vim-sleuth', + + -- NOTE: This is where your plugins related to LSP can be installed. + -- The configuration is done below. Search for lspconfig to find it below. + { + -- LSP Configuration & Plugins + 'neovim/nvim-lspconfig', + dependencies = { + -- Automatically install LSPs to stdpath for neovim + { 'williamboman/mason.nvim', config = true }, + 'williamboman/mason-lspconfig.nvim', + + -- Useful status updates for LSP + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` + { 'j-hui/fidget.nvim', opts = {} }, + + -- Additional lua configuration, makes nvim stuff amazing! + 'folke/neodev.nvim', + }, + }, + + { + -- Autocompletion + 'hrsh7th/nvim-cmp', + dependencies = { + -- Snippet Engine & its associated nvim-cmp source + 'L3MON4D3/LuaSnip', + 'saadparwaiz1/cmp_luasnip', + + -- Adds LSP completion capabilities + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-path', + + -- Adds a number of user-friendly snippets + 'rafamadriz/friendly-snippets', + }, + }, + + -- Useful plugin to show you pending keybinds. + { 'folke/which-key.nvim', opts = {} }, + { + -- Adds git related signs to the gutter, as well as utilities for managing changes + 'lewis6991/gitsigns.nvim', + opts = { + -- See `:help gitsigns.txt` + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map({ 'n', 'v' }, ']c', function() + if vim.wo.diff then + return ']c' + end + vim.schedule(function() + gs.next_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to next hunk' }) + + map({ 'n', 'v' }, '[c', function() + if vim.wo.diff then + return '[c' + end + vim.schedule(function() + gs.prev_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to previous hunk' }) + + -- Actions + -- visual mode + map('v', 'hs', function() + gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'stage git hunk' }) + map('v', 'hr', function() + gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'reset git hunk' }) + -- normal mode + map('n', 'hs', gs.stage_hunk, { desc = 'git stage hunk' }) + map('n', 'hr', gs.reset_hunk, { desc = 'git reset hunk' }) + map('n', 'hS', gs.stage_buffer, { desc = 'git Stage buffer' }) + map('n', 'hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) + map('n', 'hR', gs.reset_buffer, { desc = 'git Reset buffer' }) + map('n', 'hp', gs.preview_hunk, { desc = 'preview git hunk' }) + map('n', 'hb', function() + gs.blame_line { full = false } + end, { desc = 'git blame line' }) + map('n', 'hd', gs.diffthis, { desc = 'git diff against index' }) + map('n', 'hD', function() + gs.diffthis '~' + end, { desc = 'git diff against last commit' }) + + -- Toggles + map('n', 'tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) + map('n', 'td', gs.toggle_deleted, { desc = 'toggle git show deleted' }) + + -- Text object + map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) + end, + }, + }, + + { + -- Theme inspired by Atom + 'navarasu/onedark.nvim', + priority = 1000, + config = function() + vim.cmd.colorscheme 'onedark' + end, + }, + + { + -- Set lualine as statusline + 'nvim-lualine/lualine.nvim', + -- See `:help lualine.txt` + opts = { + options = { + icons_enabled = true, + -- theme = 'auto', + component_separators = '/', + section_separators = '', + }, + }, + dependencies = { + 'nvim-tree/nvim-web-devicons', opt = true + }, + }, + + { + -- Add indentation guides even on blank lines + 'lukas-reineke/indent-blankline.nvim', + -- Enable `lukas-reineke/indent-blankline.nvim` + -- See `:help ibl` + main = 'ibl', + opts = {}, + }, + + -- "gc" to comment visual regions/lines + { 'numToStr/Comment.nvim', opts = {} }, + + -- Fuzzy Finder (files, lsp, etc) + { + 'nvim-telescope/telescope.nvim', + branch = '0.1.x', + dependencies = { + 'nvim-lua/plenary.nvim', + -- Fuzzy Finder Algorithm which requires local dependencies to be built. + -- Only load if `make` is available. Make sure you have the system + -- requirements installed. + { + 'nvim-telescope/telescope-fzf-native.nvim', + -- NOTE: If you are having trouble with this installation, + -- refer to the README for telescope-fzf-native for more instructions. + build = 'make', + cond = function() + return vim.fn.executable 'make' == 1 + end, + }, + }, + }, + + { + -- Highlight, edit, and navigate code + 'nvim-treesitter/nvim-treesitter', + dependencies = { + 'nvim-treesitter/nvim-treesitter-textobjects', + }, + build = ':TSUpdate', + config = function() + require 'nvim-treesitter.install'.compilers = { 'zig' } + end + }, + + -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + -- These are some example plugins that I've included in the kickstart repository. + -- Uncomment any of the lines below to enable them. + require 'kickstart.plugins.autoformat', + require 'kickstart.plugins.debug', + + -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` + -- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping + -- up-to-date with whatever is in the kickstart repo. + -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. + -- + -- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins + { import = 'custom.plugins' }, +}, {}) + +-- [[ Setting options ]] +-- See `:help vim.o` +-- NOTE: You can change these options as you wish! + +-- Set highlight on search +vim.o.hlsearch = false + +-- Make line numbers default +vim.wo.number = true + +-- Enable mouse mode +vim.o.mouse = 'a' + +-- Sync clipboard between OS and Neovim. +-- Remove this option if you want your OS clipboard to remain independent. +-- See `:help 'clipboard'` +vim.o.clipboard = 'unnamedplus' + +-- Enable break indent +vim.o.breakindent = true + +-- Save undo history +vim.o.undofile = true + +-- Case-insensitive searching UNLESS \C or capital in search +vim.o.ignorecase = true +vim.o.smartcase = true + +-- Keep signcolumn on by default +vim.wo.signcolumn = 'yes' + +-- Decrease update time +vim.o.updatetime = 250 +vim.o.timeoutlen = 300 + +-- Set completeopt to have a better completion experience +vim.o.completeopt = 'menuone,noselect' + +-- NOTE: You should make sure your terminal supports this +vim.o.termguicolors = true + +-- [[ Basic Keymaps ]] + +-- Keymaps for better default experience +-- See `:help vim.keymap.set()` +vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) + +-- Remap for dealing with word wrap +vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) +vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) + +-- Diagnostic keymaps +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) +vim.keymap.set('n', 'e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) + +-- [[ Highlight on yank ]] +-- See `:help vim.highlight.on_yank()` +local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) +vim.api.nvim_create_autocmd('TextYankPost', { + callback = function() + vim.highlight.on_yank() + end, + group = highlight_group, + pattern = '*', +}) + +-- [[ Configure Telescope ]] +-- See `:help telescope` and `:help telescope.setup()` +require('telescope').setup { + defaults = { + mappings = { + i = { + [''] = false, + [''] = false, + }, + }, + }, +} + +-- Enable telescope fzf native, if installed +pcall(require('telescope').load_extension, 'fzf') + +-- Telescope live_grep in git root +-- Function to find the git root directory based on the current buffer's path +local function find_git_root() + -- Use the current buffer's path as the starting point for the git search + local current_file = vim.api.nvim_buf_get_name(0) + local current_dir + local cwd = vim.fn.getcwd() + -- If the buffer is not associated with a file, return nil + if current_file == '' then + current_dir = cwd + else + -- Extract the directory from the current file's path + current_dir = vim.fn.fnamemodify(current_file, ':h') + end + + -- Find the Git root directory from the current file's path + local git_root = vim.fn.systemlist('git -C ' .. vim.fn.escape(current_dir, ' ') .. ' rev-parse --show-toplevel') + [1] + if vim.v.shell_error ~= 0 then + print 'Not a git repository. Searching on current working directory' + return cwd + end + return git_root +end + +-- Custom live_grep function to search in git root +local function live_grep_git_root() + local git_root = find_git_root() + if git_root then + require('telescope.builtin').live_grep { + search_dirs = { git_root }, + } + end +end + +vim.api.nvim_create_user_command('LiveGrepGitRoot', live_grep_git_root, {}) + +-- See `:help telescope.builtin` +vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) +vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) +vim.keymap.set('n', '/', function() + -- You can pass additional configuration to telescope to change theme, layout, etc. + require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { + winblend = 10, + previewer = false, + }) +end, { desc = '[/] Fuzzily search in current buffer' }) + +local function telescope_live_grep_open_files() + require('telescope.builtin').live_grep { + grep_open_files = true, + prompt_title = 'Live Grep in Open Files', + } +end +vim.keymap.set('n', 's/', telescope_live_grep_open_files, { desc = '[S]earch [/] in Open Files' }) +vim.keymap.set('n', 'ss', require('telescope.builtin').builtin, { desc = '[S]earch [S]elect Telescope' }) +vim.keymap.set('n', 'gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) +vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) +vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) +vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) +vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) +vim.keymap.set('n', 'sG', ':LiveGrepGitRoot', { desc = '[S]earch by [G]rep on Git Root' }) +vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) +vim.keymap.set('n', 'sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) + +-- [[ Configure Treesitter ]] +-- See `:help nvim-treesitter` +-- Defer Treesitter setup after first render to improve startup time of 'nvim {filename}' +vim.defer_fn(function() + require('nvim-treesitter.configs').setup { + -- Add languages to be installed here that you want installed for treesitter + ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'javascript', 'typescript', 'vimdoc', 'vim', 'bash', 'markdown', 'html', 'css' }, + + -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!) + auto_install = true, + + highlight = { enable = true }, + indent = { enable = true }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = '', + node_incremental = '', + scope_incremental = '', + node_decremental = '', + }, + }, + textobjects = { + select = { + enable = true, + lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ['aa'] = '@parameter.outer', + ['ia'] = '@parameter.inner', + ['af'] = '@function.outer', + ['if'] = '@function.inner', + ['ac'] = '@class.outer', + ['ic'] = '@class.inner', + }, + }, + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + [']m'] = '@function.outer', + [']]'] = '@class.outer', + }, + goto_next_end = { + [']M'] = '@function.outer', + [']['] = '@class.outer', + }, + goto_previous_start = { + ['[m'] = '@function.outer', + ['[['] = '@class.outer', + }, + goto_previous_end = { + ['[M'] = '@function.outer', + ['[]'] = '@class.outer', + }, + }, + swap = { + enable = true, + swap_next = { + ['a'] = '@parameter.inner', + }, + swap_previous = { + ['A'] = '@parameter.inner', + }, + }, + }, + } +end, 0) + +-- [[ Configure LSP ]] +-- This function gets run when an LSP connects to a particular buffer. +local on_attach = function(_, bufnr) + -- NOTE: Remember that lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself + -- many times. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + -- nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') Use keys to lazy load plugin(telescope-ui) + + nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') + nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') + nmap('D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') + nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + -- See `:help K` for why this keymap + nmap('K', vim.lsp.buf.hover, 'Hover Documentation') + nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap('wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) +end + +-- document existing key chains +require('which-key').register { + ['c'] = { name = '[C]ode', _ = 'which_key_ignore' }, + ['d'] = { name = '[D]ocument', _ = 'which_key_ignore' }, + ['g'] = { name = '[G]it', _ = 'which_key_ignore' }, + ['h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' }, + ['r'] = { name = '[R]ename', _ = 'which_key_ignore' }, + ['s'] = { name = '[S]earch', _ = 'which_key_ignore' }, + ['t'] = { name = '[T]oggle', _ = 'which_key_ignore' }, + ['w'] = { name = '[W]orkspace', _ = 'which_key_ignore' }, +} +-- register which-key VISUAL mode +-- required for visual hs (hunk stage) to work +require('which-key').register({ + [''] = { name = 'VISUAL ' }, + ['h'] = { 'Git [H]unk' }, +}, { mode = 'v' }) + +-- mason-lspconfig requires that these setup functions are called in this order +-- before setting up the servers. +require('mason').setup() +require('mason-lspconfig').setup() + +-- Enable the following language servers +-- Feel free to add/remove any LSPs that you want here. They will automatically be installed. +-- +-- Add any additional override configuration in the following tables. They will be passed to +-- the `settings` field of the server config. You must look up that documentation yourself. +-- +-- If you want to override the default filetypes that your language server will attach to you can +-- define the property 'filetypes' to the map in question. +local servers = { + clangd = {}, + -- gopls = {}, + -- pyright = {}, + rust_analyzer = {}, + tsserver = {}, + html = { filetypes = { 'html', 'twig', 'hbs' } }, + + lua_ls = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + -- NOTE: toggle below to ignore Lua_LS's noisy `missing-fields` warnings + -- diagnostics = { disable = { 'missing-fields' } }, + }, + }, +} + +-- Setup neovim lua configuration +require('neodev').setup() + +-- nvim-cmp supports additional completion capabilities, so broadcast that to servers +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + +-- Ensure the servers above are installed +local mason_lspconfig = require 'mason-lspconfig' + +mason_lspconfig.setup { + ensure_installed = vim.tbl_keys(servers), +} + +mason_lspconfig.setup_handlers { + function(server_name) + require('lspconfig')[server_name].setup { + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + filetypes = (servers[server_name] or {}).filetypes, + } + end, +} + +-- [[ Configure nvim-cmp ]] +-- See `:help cmp` +local cmp = require 'cmp' +local luasnip = require 'luasnip' +require('luasnip.loaders.from_vscode').lazy_load() +luasnip.config.setup {} + +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + completion = { + completeopt = 'menu,menuone,noinsert', + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }, + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'path' }, + }, +} + +-- The line beneath this is called `modeline`. See `:help modeline` +-- vim: ts=2 sts=2 sw=2 et + diff --git a/lua/kickstart/keymaps.lua b/lua/vatsal/options/keymaps.lua similarity index 100% rename from lua/kickstart/keymaps.lua rename to lua/vatsal/options/keymaps.lua diff --git a/lua/kickstart/settings.lua b/lua/vatsal/options/settings.lua similarity index 100% rename from lua/kickstart/settings.lua rename to lua/vatsal/options/settings.lua diff --git a/lua/kickstart/yank-highlight.lua b/lua/vatsal/options/yank-highlight.lua similarity index 100% rename from lua/kickstart/yank-highlight.lua rename to lua/vatsal/options/yank-highlight.lua diff --git a/lua/vatsal/plugins/alpha.lua b/lua/vatsal/plugins/alpha.lua new file mode 100644 index 00000000..1b89ca0a --- /dev/null +++ b/lua/vatsal/plugins/alpha.lua @@ -0,0 +1,325 @@ +math.randomseed(os.time()) +local _ascii_arts = { + kraken = { + " ", + " ", + " ", + " ⣴⣶⣤⡤⠦⣤⣀⣤⠆ ⣈⣭⣿⣶⣿⣦⣼⣆ ", + " ⠉⠻⢿⣿⠿⣿⣿⣶⣦⠤⠄⡠⢾⣿⣿⡿⠋⠉⠉⠻⣿⣿⡛⣦ ", + " ⠈⢿⣿⣟⠦ ⣾⣿⣿⣷ ⠻⠿⢿⣿⣧⣄ ", + " ⣸⣿⣿⢧ ⢻⠻⣿⣿⣷⣄⣀⠄⠢⣀⡀⠈⠙⠿⠄ ", + " ⢠⣿⣿⣿⠈ ⣻⣿⣿⣿⣿⣿⣿⣿⣛⣳⣤⣀⣀ ", + " ⢠⣧⣶⣥⡤⢄ ⣸⣿⣿⠘ ⢀⣴⣿⣿⡿⠛⣿⣿⣧⠈⢿⠿⠟⠛⠻⠿⠄ ", + " ⣰⣿⣿⠛⠻⣿⣿⡦⢹⣿⣷ ⢊⣿⣿⡏ ⢸⣿⣿⡇ ⢀⣠⣄⣾⠄ ", + " ⣠⣿⠿⠛ ⢀⣿⣿⣷⠘⢿⣿⣦⡀ ⢸⢿⣿⣿⣄ ⣸⣿⣿⡇⣪⣿⡿⠿⣿⣷⡄ ", + " ⠙⠃ ⣼⣿⡟ ⠈⠻⣿⣿⣦⣌⡇⠻⣿⣿⣷⣿⣿⣿ ⣿⣿⡇ ⠛⠻⢷⣄ ", + " ⢻⣿⣿⣄ ⠈⠻⣿⣿⣿⣷⣿⣿⣿⣿⣿⡟ ⠫⢿⣿⡆ ", + " ⠻⣿⣿⣿⣿⣶⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⣀⣤⣾⡿⠃ ", + }, + alien = { + " :h- Nhy` ", + " -mh. h. `Ndho ", + " hmh+ oNm. oNdhh ", + " `Nmhd` /NNmd /NNhhd ", + " -NNhhy `hMNmmm`+NNdhhh ", + " .NNmhhs ```....`..-:/./mNdhhh+ ", + " mNNdhhh- `.-::///+++////++//:--.`-/sd` ", + " oNNNdhhdo..://++//++++++/+++//++///++/-.` ", + " y. `mNNNmhhhdy+/++++//+/////++//+++///++////-` `/oos: ", + " . Nmy: :NNNNmhhhhdy+/++/+++///:.....--:////+++///:.`:s+ ", + " h- dNmNmy oNNNNNdhhhhy:/+/+++/- ---:/+++//++//.` ", + " hd+` -NNNy`./dNNNNNhhhh+-:///// -+oo:` ::-:+////++///:` ", + " /Nmhs+oss-:++/dNNNmhho:--::/// /mmmmmo ../-///++///////. ", + " oNNdhhhhhhhs//osso/:---:::/// /yyyyso ..o+-//////////:/. ", + " /mNNNmdhhhh/://+///:::////// -:::- ..+sy+:////////::/:/. ", + " /hNNNdhhs--:/+++////++/////. ..-/yhhs-/////////::/::/` ", + " .ooo+/-::::/+///////++++//-/ossyyhhhhs/:///////:::/::::/: ", + " -///:::::::////++///+++/////:/+ooo+/::///////.::://::---+` ", + " /////+//++++/////+////-..//////////::-:::--`.:///:---:::/: ", + " //+++//++++++////+++///::-- .::::-------:: ", + " :/++++///////////++++//////. -:/:----::../- ", + " -/++++//++///+////////////// .::::---:::-.+` ", + " `////////////////////////////:. --::-----...-/ ", + " -///://////////////////////::::-.. :-:-:-..-::.`.+` ", + " :/://///:///::://::://::::::/:::::::-:---::-.-....``/- - ", + " ::::://::://::::::::::::::----------..-:....`.../- -+oo/ ", + " -/:::-:::::---://:-::-::::----::---.-.......`-/. ``", + " s-`::--:::------:////----:---.-:::...-.....`./: ", + " yMNy.`::-.--::..-dmmhhhs-..-.-.......`.....-/:` ", + " oMNNNh. `-::--...:NNNdhhh/.--.`..``.......:/- ", + " :dy+:` .-::-..NNNhhd+``..`...````.-::-` ", + " .-:mNdhh:.......--::::-` ", + " yNh/..------..` ", + " ", + }, + logo = { + " ░░ ░░ ", + " ████ ████ ", + " ██▓▓██ ██ ██ ", + " ██▓▓▓▓██ ██ ██ ", + " ██████▓▓▓▓▓▓██████████████████████████████████████ ██████ ", + " ██░░░░░░▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░██ ", + " ██▓▓▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ██ ", + " ██▓▓▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒ ░░▒▒▒▒ ██ ", + " ██░░▓▓▓▓▒▒▒▒▒▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ░░██ ", + " ██░░▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒ ░░██ ", + " ██░░▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒░░██ ", + " ██▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▓▓▓▓▒▒▒▒▒▒░░▒▒▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ██ ", + " ██▓▓▓▓▓▓▒▒▒▒▓▓▓▓▒▒▒▒▒▒▓▓▓▓▒▒▒▒░░▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒ ██ ", + " ██░░▓▓▓▓▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▓▓▒▒▒▒░░▒▒ ░░▒▒ ▒▒ ░░▒▒ ░░██ ", + " ██▒▒▒▒▓▓▓▓▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▓▓ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ██ ", + " ██▓▓▓▓▒▒▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▒▒ ▒▒▒▒▒▒ ▒▒▒▒ ▒▒ ██ ", + " ██░░▓▓▓▓▒▒▒▒▓▓▒▒▓▓▒▒▒▒▓▓ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ░░██ ", + " ██░░▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒▒▒ ░░░░▒▒▒▒ ░░▒▒ ▒▒▒▒ ░░██ ", + " ██░░▒▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓ ▒▒▒▒░░ ▒▒▒▒▒▒ ▒▒▒▒ ▒▒░░██ ", + " ██░░░░░░▓▓▓▓▓▓░░░░░░▓▓ ░░░░ ░░ ░░░░░░ ░░░░░░██ ", + " ██░░▒▒▒▒▒▒▓▓▓▓░░▒▒▒▒▒▒▒▒▒▒ ░░▒▒ ░░ ▒▒ ░░▒▒▒▒░░██ ", + " ██░░▓▓▓▓▒▒▒▒▓▓▒▒▓▓▓▓▓▓▒▒ ▒▒░░ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒ ░░██ ", + " ██░░▒▒▓▓▓▓▓▓▒▒▒▒▒▒▓▓▓▓ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒ ▒▒░░██ ", + " ██░░▒▒▓▓▓▓▓▓▓▓▒▒▓▓▒▒▓▓ ▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒░░██ ", + " ██░░▒▒▒▒▒▒▓▓▓▓▒▒▓▓▓▓▒▒▒▒ ▒▒░░ ▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒░░██ ", + " ██░░▒▒▓▓▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒░░██ ", + " ██░░▒▒▓▓▓▓▓▓▓▓▒▒▒▒▒▒▓▓ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒ ▒▒░░██ ", + " ██░░▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░ ▒▒░░▒▒▒▒ ░░▒▒ ▒▒ ▒▒▒▒░░██ ", + " ██░░▒▒▒▒▒▒▒▒▓▓▒▒▓▓▓▓▓▓▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒░░██ ", + " ██░░▒▒▒▒▓▓▓▓▒▒▒▒▒▒▓▓▓▓ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒░░██ ", + " ██░░▒▒▒▒▒▒▓▓▓▓▒▒▒▒▒▒▒▒░░ ▒▒▒▒░░▒▒▒▒ ░░▒▒▒▒ ░░▒▒▒▒░░██ ", + " ██░░▒▒▒▒▒▒▒▒▓▓▓▓▒▒▓▓▓▓ ▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒░░██ ", + " ██░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒ ▒▒░░▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░██ ", + " ██░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒ ▒▒ ░░▒▒▒▒ ▒▒▒▒▒▒▒▒░░██ ", + " ██░░░░▒▒▒▒▒▒▒▒▓▓▓▓▒▒▒▒▒▒ ░░▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒░░░░██ ", + " ██████░░░░▒▒▒▒▒▒▓▓▒▒▒▒ ▒▒▒▒░░ ▒▒▒▒ ▒▒▒▒▒▒░░░░██████ ", + " ████░░░░▒▒▒▒▒▒ ░░ ▒▒░░▒▒▒▒▒▒▒▒░░░░████ ", + " ████░░░░▒▒ ▒▒ ▒▒▒▒▓▓▓▓▓▓▒▒░░░░████ ", + " ██ ▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▓▓▓▓▓▓██ ", + " ██ ████░░░░▒▒▒▒░░▒▒▒▒░░░░████▓▓▓▓██ ", + " ██ ██ ████░░░░░░░░░░████ ██▓▓▓▓██ ", + " ████████ ████░░████ ████████ ", + " ██ ", + }, + fsociety_frankfurt = { + [[ ..... .x+=:. . s ]], + [[ .H8888888x. '`+ z` ^% @88> :8 .. ]], + [[:888888888888x. ! . <888'888k ''888E` :888'8888. 8888 888E 888I]], + [[ . :888:>X88! 8888N=*8888 888R I888> 9888 'Y" 888E d888 '88%" 8888 888E 888I]], + [[ :~"88x 48888X ^` %8" R88 888R I888> 9888 888E 8888.+" 8888 888E 888I]], + [[< :888k'88888X @8Wou 9% u8888cJ888 9888 888E 8888L .8888Lu= 888E 888I]], + [[ d8888f '88888X .888888P` "*888*P" ?8888u../ 888& '8888c. .+ ^%888* x888N><888']], + [[ :8888! ?8888> ` ^"F 'Y" "8888P' R888" "88888% 'Y" "88" 888 ]], + [[ X888! 8888~ "P' "" "YP' 88F ]], + [[ '888 X88f 98" ]], + [[ '%8: .8*" ./" ]], + [[ ^----~"` ~` ]], + }, + fsociety_aligator = { + [[ :::::::::: :::::::: :::::::: :::::::: ::::::::::: :::::::::: ::::::::::: ::: ::: ]], + [[ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: ]], + [[ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ ]], + [[ :#::+::# +#++:++#++ +#+ +:+ +#+ +#+ +#++:++# +#+ +#++: ]], + [[ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ ]], + [[ #+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+# ]], + [[### ######## ######## ######## ########### ########## ### ### ]], + }, + hacker_face = { + [[⠀⠀⠀⢀⣴⣾⣿⣿⣿⡶⢦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠴⢾⣿⣿⣿⣷⣦⡀⠀⠀⠀]], + [[⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣡⣴⣾⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀]], + [[⠀⠀⠉⠀⠀⠀⠀⠈⠙⠻⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠛⠉⠁⠀⠀⠀⠈⠉⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣯⠁⠀⠀⠀⠀⠀⢈⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⢀⡴⢖⣛⣧⣴⣶⣤⣄⠹⡆⡀⠀⠀⠀⠀⡼⢃⣤⣴⣶⣧⣽⣛⡲⣤⠀⠀⠀⠀⠀]], + [[⠀⢱⣄⣴⣟⠾⣿⣿⣿⣿⣿⣿⣿⡇⠀⡇⠀⠀⠀⡇⠀⣿⣿⣿⣿⣿⣿⣿⣿⣞⣷⣄⣴⠃⠀]], + [[⢠⠟⠉⠉⠉⠛⠓⠿⠏⠸⠟⠛⠉⠀⢠⡇⠀⠀⠀⣿⠀⠀⠉⠛⠻⠇⠿⠟⠛⠋⠉⠉⠙⠻⡀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇⠀⠀⠀⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⢿⡇⠀⠀⠀⢿⠿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⡄⠀⠀⠀⠀⠀⠀⠀⣀⣤⢴⠏⠀⣸⠁⠀⠀⠀⢸⡆⠈⢳⡀⣤⡀⠀⠀⠀⠀⠀⠀⠀⡄⠀]], + [[⠀⢹⣶⢤⣤⡤⠴⠶⠛⠉⠀⠸⠀⣄⢻⣄⠀⠀⢀⣸⢃⣀⠰⠃⠈⠙⠓⠶⠤⣤⣤⢤⣾⠃⠀]], + [[⠀⠈⢿⣆⠻⣿⣄⠀⠀⠀⠀⠀⠀⠉⣱⣬⣍⣉⣯⣥⡉⠁⠀⠀⠀⠀⠀⠀⣴⣿⢃⣾⡏⠀⠀]], + [[⠀⠀⠈⢿⣆⠹⣿⣧⣀⣀⣀⣀⣤⣴⣿⣿⠟⠙⢿⣿⣿⣦⣄⣀⣀⣀⣠⣾⡿⠁⣼⠟⠀⠀⠀]], + [[⠀⠀⠀⠈⢿⣦⡈⠻⠿⠿⠿⠿⢿⣿⣿⣋⣀⣀⣀⣻⣿⣿⠿⠿⠿⠿⠿⠛⣠⣾⠏⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠻⣎⠓⢤⣀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠁⠀⠀⠀⣀⠴⢊⡿⠋⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠘⢧⠀⠀⠀⠀⠀⠀⠀⢤⣄⣀⣠⡄⠀⠀⠀⠀⠀⠀⢠⠞⠁⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠱⣄⠀⠀⠀⠀⠀⠀⣿⣿⡏⠀⠀⠀⠀⠀⠀⡠⠃⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⣿⣿⣷⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + }, + pacman = { + [[ ]], + [[ ██████ ]], + [[ ████▒▒▒▒▒▒████ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ]], + [[ ██▒▒▒▒▒▒ ▒▒▓▓▒▒▒▒▒▒ ▓▓▓▓ ]], + [[ ██▒▒▒▒▒▒ ▒▒▓▓▒▒▒▒▒▒ ▒▒▓▓ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒██▒▒▒▒██ ]], + [[ ████ ██▒▒██ ██▒▒▒▒██ ██▒▒██ ]], + [[ ██ ██ ████ ████ ]], + [[ ]], + }, + cat = { + [[ ▀████▀▄▄ ▄█ ]], + [[ █▀ ▀▀▄▄▄▄▄ ▄▄▀▀█ ]], + [[ ▄ █ ▀▀▀▀▄ ▄▀ ]], + [[ ▄▀ ▀▄ ▀▄ ▀▄▀ ]], + [[ ▄▀ █ █▀ ▄█▀▄ ▄█ ]], + [[ ▀▄ ▀▄ █ ▀██▀ ██▄█ ]], + [[ ▀▄ ▄▀ █ ▄██▄ ▄ ▄ ▀▀ █ ]], + [[ █ ▄▀ █ ▀██▀ ▀▀ ▀▀ ▄▀ ]], + [[ █ █ █ ▄▄ ▄▀ ]], + }, + skull_emperor = { + [[⠀⠀⠀⠀⠀⠀⠀⢀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⣀⠀⠀⠀⠀⢀⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⣿⣧⡀⠀⠀⣼⠃⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⠻⣷⣄⡀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣧⠀⠀⠀⠀⠀⢀⣴⡶⠀⠀⠀⠀⠀]], + [[⠀⢸⣿⣧⠀⣰⡏⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣠⣤⣈⣧⠈⠻⣿⣦⣀⣀⠀⠀⠀⣸⣿⣿⣿⣆⠀⠀⠀⣴⣿⣿⠃⠀⠀⠀⠀⠀]], + [[⠀⠘⡏⢿⣧⣿⠀⢀⣿⠁⠀⢀⣾⡇⠀⠀⠀⣀⠤⠖⠂⠉⠉⠀⠀⠀⠀⠀⠸⡏⣀⣀⣭⣷⣄⠉⠉⠒⢻⣿⣿⣿⣿⡆⢀⣾⣿⣿⡏⠀⠀⠀⠀⠀⠀]], + [[⠀⣤⣇⠘⣿⠇⠀⢸⡇⠀⢠⣾⣿⣀⡤⠚⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⢻⣽⣿⣿⣿⣧⡀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀]], + [[⢸⣿⣿⡀⢻⡇⢠⡿⠀⣰⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣷⡀⢸⣿⣿⣿⣿⠏⠙⢿⣿⣿⣇⠀⠀⠀⠀⢀⣶]], + [[⢸⣿⣿⣧⣈⣧⡿⠁⢠⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣧⠈⣿⣿⣿⡏⠀⠀⣼⢹⣿⣿⠀⠀⠀⢀⣾⣿]], + [[⣿⡟⢿⣿⣿⣿⠁⡴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠳⡀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⡆⢹⣿⣿⠁⠀⢀⢛⣼⣿⣿⠳⣄⢀⣾⣿⣿]], + [[⢻⡇⠀⢻⣿⣇⡞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⠘⢦⣀⡀⠀⠀⠈⠻⣿⣿⣿⣇⠀⣿⡟⠀⠀⡞⣿⣿⣿⣿⠀⠘⣿⡗⣿⣿]], + [[⠈⣧⠀⠈⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢦⡀⠈⠙⡓⠶⣤⣄⡈⠻⣿⣿⣧⣸⡇⡆⠀⢳⣿⣿⣿⡇⠀⣸⣏⠁⣿⣿]], + [[⠀⠹⡆⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠉⠳⢦⡈⠛⠷⣿⣿⣿⣿⣅⠁⠀⣿⣿⣿⡟⠀⢰⣿⠃⠀⣼⣿]], + [[⠀⠀⢻⣀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠲⣄⣄⣌⣲⣄⠸⣿⡿⣿⣿⣷⣴⣿⣿⠟⠀⠀⣿⡿⠀⠀⣸⡟]], + [[⠀⠀⠘⣿⡏⠀⠀⠀⢀⠀⠀⠀⠀⠀⠐⣿⣿⢿⣶⣶⣦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣷⣿⣧⠈⠻⢿⣿⣿⠋⠀⠀⢸⣿⠇⠀⣼⡿⣇]], + [[⠀⣀⡴⢋⣴⣿⣿⣿⣿⣿⡷⠿⣿⣿⣿⢣⣾⣿⣿⣿⣿⣷⣭⣙⠶⡄⠀⠀⢰⡇⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⣧⠀⠘⠛⣿⣆⠀⠀⣿⡇⠀⢀⣿⠇⢸]], + [[⠀⢻⠀⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠈⢁⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⡹⡄⠀⠀⠳⡄⠀⠀⠀⠀⠀⠀⠈⠙⠿⣿⣇⠀⠀⠈⢻⡆⢸⠃⠀⠀⣾⠏⠀⢸]], + [[⠀⠈⡇⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡹⡀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣾⡄⠀⠀⢿⡟⠀⣠⣼⣿⠇⠀⢼]], + [[⠀⠸⣅⢷⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⡇⠀⠀⢧⡀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣦⢠⣿⣿⣿⡿⣿⣿⠀⠀⡟]], + [[⠀⣀⡿⠈⢿⣿⣿⡇⢻⣿⡗⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⣸⠁⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⠿⠋⣴⣿⣿⠀⢀⡟]], + [[⠀⡿⠁⠀⠼⠛⢹⣯⣸⣿⣷⡄⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⡿⠛⠁⡰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠞⠉⢿⡿⠿⠟⣻⡟⠁⢠⡾⠛⢩⣿⣰⡿⠀]], + [[⠸⡇⠀⠀⠀⠀⢸⠇⠿⠋⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠜⠁⠀⠀⣠⡴⢻⣿⣿⣶⣶⣶⣾⡿⠀⡖⢸⡇⠀⢠⡟⣠⡾⣋⣴⣴⠟⣽⣿⠃⠀]], + [[⠀⢷⠀⢀⡾⣤⣼⣶⡖⠶⣿⠃⠀⠀⠀⠀⠀⢲⣷⣶⡶⠶⠆⣀⣀⣠⣴⠟⡟⠀⠀⠻⣿⣿⣿⣿⣿⠁⢨⠃⣸⣿⣦⣿⣟⣩⣾⡿⠋⣡⣾⣿⠃⠀⠀]], + [[⠀⠀⠉⠉⠀⢰⠏⠈⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⣻⣏⣴⣾⣿⡟⠁⠀⠀⣸⡇⠀⠀⠀⢿⠻⠿⢫⠏⠀⠀⠀⣿⣿⣿⣿⣿⠿⠁⣶⣴⣿⣿⠇⠀⠀⠀]], + [[⠀⠀⠀⠀⢀⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⣿⠏⣿⡇⠀⢀⣾⣿⠧⠀⠀⠀⢸⡄⣰⠟⠀⠀⠀⢠⣿⣿⣿⣯⣁⣠⣾⣿⣿⠟⠋⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠘⠋⢰⣿⣿⣶⡾⣿⣿⠇⠀⣠⠞⢉⠜⠁⡴⠀⢀⣴⡟⠉⠀⠉⠛⠿⠿⠟⠋⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⣹⣶⡦⣴⢲⣴⢦⡤⣤⣤⣄⣤⣤⣤⣤⣤⣴⡿⠋⠙⢿⣯⣿⣿⠀⡰⠃⠀⠋⠀⡼⠁⠀⡞⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⡏⣿⢰⡇⢰⠇⢸⡇⣸⣨⣇⣸⣏⣸⢇⣾⣿⣀⣠⠤⠤⠵⣫⠏⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠙⣟⢿⢿⣿⣷⣿⣹⣇⣿⣸⣧⠥⠿⠴⠜⠋⠁⠀⠀⡴⠞⠁⠀⠀⠀⠀⠀⠀⠀⢀⡴⠁⢀⣼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⣿⠛⠉⠉⠙⠉⠁⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢀⣠⣾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⢸⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣴⣶⠾⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⣸⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣶⣾⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⢸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⢀⣠⣾⡾⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⣿⠀⢀⣀⡀⣀⡀⠀⠀⠀⠀⠀⠀⣀⣠⣴⣶⠶⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠘⢷⣂⣀⣀⣀⣍⣳⣶⣾⣿⠿⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠙⠛⠻⠿⠿⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + }, + skull_bull = { + [[⠀⠀⠀⢀⡤⢤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⣼⡅⠠⢀⡈⢀⣙⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠤⠤⢤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⢸⠀⠀⠀⠈⠙⠿⣝⢇⠀⠀⣀⣠⠤⠤⠤⠤⣤⡤⠚⠁⠀⠀⠀⠀⠀⠉⠢⡀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⢧⡀⠀⠀⠠⣄⠈⢺⣺⡍⠀⠀⠀⠀⣠⠖⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠸⡆⢀⠘⣔⠄⠑⠂⠈⠀⡔⠤⠴⠚⡁⠀⠀⢀⠀⠀⠀⣠⠔⢶⡢⡀⠀⠠⡇⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⢠⣇⠀⢃⡀⠁⠀⠀⠀⡸⠃⢀⡴⠊⢀⠀⠀⠈⢂⡤⠚⠁⠀⠀⠙⢿⠀⠉⡇⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⣠⠾⣹⢤⢼⡆⠀⠀⠀⠀⠀⠀⠈⢀⠞⠁⠀⢠⣴⠏⠀⠀⠀⠀⠀⠀⠸⡇⠀⢇⠀⠀⠀⠀⠀]], + [[⠀⠀⣾⢡⣤⡈⠣⡀⠙⠒⠀⠀⠀⠀⣀⠤⠤⣤⠤⣌⠁⢛⡄⠀⠀⠀⠀⠀⠠⡀⢇⠀⠘⣆⠀⢀⡴⡆]], + [[⠀⠀⣿⢻⣿⣿⣄⡸⠀⡆⠀⠒⣈⣩⣉⣉⡈⠉⠉⠢⣉⠉⠀⠀⠀⠀⠀⠀⠀⢣⠈⠢⣀⠈⠉⢁⡴⠃]], + [[⠀⢀⢿⣿⣿⡿⠛⠁⠀⢻⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⣸⢿⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⡇⠉⠉⠁⠀⠀]], + [[⣠⣞⠘⢛⡛⢻⣷⣤⡀⠈⡎⣿⣿⣿⣿⣿⣿⣿⣿⣿⠹⠏⠀⠀⠀⠀⠀⠀⠀⠀⠇⢰⡇⠀⠀⠀⠀⠀]], + [[⠻⣌⠯⡁⢠⣸⣿⣿⣷⡄⠁⠈⢻⢿⣿⣿⣿⣿⠿⠋⠃⠰⣀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠇⠀⠀⠀⠀⠀]], + [[⠀⠀⠉⢻⠨⠟⠹⢿⣿⢣⠀⠀⢨⡧⣌⠉⠁⣀⠴⠊⠑⠀⡸⠛⠀⠀⠀⠀⠀⣸⢲⡟⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⣠⠏⠀⠀⠀⠉⠉⠁⠀⠐⠁⠀⠀⢉⣉⠁⠀⠀⢀⠔⢷⣄⠀⠀⠀⠀⢠⣻⡞⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⢠⠟⡦⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⢾⠉⠀⣹⣦⠤⣿⣿⡟⠁⠀⠀⠀⢀⣶⠟⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠈⠙⣦⣁⡎⢈⠏⢱⠚⢲⠔⢲⠲⡖⠖⣦⣿⡟⠀⣿⡿⠁⣠⢔⡤⠷⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⢿⣟⠿⡿⠿⠶⢾⠶⠾⠶⠾⠞⢻⠋⠏⣸⠁⠀⡽⠓⠚⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⢸⡏⠳⠷⠴⠣⠜⠢⠜⠓⠛⠊⠀⢀⡴⠣⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⣏⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⠁⢀⣀⣀⠴⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠘⢦⡀⠀⠀⠀⠀⠀⠀⢀⣀⠴⠖⠒⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⠉⠑⠒⠒⠐⠒⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]], + }, + bomb = { + ' ▄▄██████████▄▄ ', + ' ▀▀▀ ██ ▀▀▀ ', + ' ▄██▄ ▄▄████████████▄▄ ▄██▄ ', + ' ▄███▀ ▄████▀▀▀ ▀▀▀████▄ ▀███▄ ', + ' ████▄ ▄███▀ ▀███▄ ▄████ ', + ' ███▀█████▀▄████▄ ▄████▄▀█████▀███ ', + ' ██▀ ███▀ ██████ ██████ ▀███ ▀██ ', + ' ▀ ▄██▀ ▀████▀ ▄▄ ▀████▀ ▀██▄ ▀ ', + ' ███ ▀▀ ███ ', + ' ██████████████████████████████ ', + ' ▄█ ▀██ ███ ██ ██ ███ ██▀ █▄ ', + ' ███ ███ ███ ██ ██ ███▄███ ███ ', + ' ▀██▄████████ ██ ██ ████████▄██▀ ', + ' ▀███▀ ▀████ ██ ██ ████▀ ▀███▀ ', + ' ▀███▄ ▀███████ ███████▀ ▄███▀ ', + ' ▀███ ▀▀██████████▀▀▀ ███▀ ', + ' ▀ ▄▄▄ ██ ▄▄▄ ▀ ', + ' ▀████████████▀ ', + }, + +} + +local _getFortune = function() + local _fortunes = { + ' \nI\'m sick of following my dreams, man. I\'m just going\nto ask where they\'re going and hook up with ’em later.\n \n—Mitch Hedberg', + ' \nBefore you criticize someone, you should walk a mile in\ntheir shoes. That way when you criticize them, you are a\nmile away from them and you have their shoes. \n \n—Jack Handey', + 'Before you marry a person, you should first make them use a computer with slow Internet to see who they really are. —Will Ferrell', + ' \nCommon sense is like deodorant. The people who need it\nmost never use it.\n \n—Anonymous', + ' \nHere’s all you have to know about men and women: Women\nare crazy, men are stupid. And the main reason women\nare crazy is that men are stupid.\n \n—George Carlin', + ' \nCal: “You are really pushing my buttons today.”\nBecky: “Which one is \'mute \'?”\n \n—Waitress, the Musical', + ' \nMy grief counselor died. He was so good, I don’t even\ncare.', + ' \nThe doctor gave me one year to live, so I shot him with\nmy gun. The judge gave me 15 years. Problem solved.', + ' \nMy grandfather said my generation relies too much on\nthe latest technology. So I unplugged his life support.', + ' \nFeminism: because not all women can be pretty.', + ' \nI am busy right now, can I ignore you some other time?', + ' \nIt’s okay if you don’t like me. Not everyone has\ngood taste.', + ' \nLight travels faster than sound. This is why some\npeople appear bright until they speak.\n \n-Steven Wright', + ' \nDon’t worry about what people think. They don’t do it\nvery often.', + ' \nIf at first, you don’t succeed, skydiving is not for\nyou.', + ' \nPeople say that laughter is the best medicine… your\nface must be curing the world.', + ' \nWell at least your mom thinks you’re pretty.', + ' \nThe stuff you heard about me is a lie. I\'m way\nworse.', + ' \nMarriage. Because your crappy day doesn\'t have to\nend at work.', + ' \nI don\'t have a welcome mat at my door because I\'m\nnot a liar.', + ' \nI\'ll get over it. I just need to be dramatic first.', + ' \nSorry for being late. I got caught up enjoying my last\nfew minutes of not being here.', + ' \nYou\'re everything I want in someone I don\'t want\nanymore.', + ' \nFriendships must be built on a solid foundation of\nalcohol, sarcasm, inappropriateness, and shenanigans.', + } + return _fortunes[math.random(1, #_fortunes)] +end + +return { + 'goolord/alpha-nvim', + dependencies = { 'nvim-tree/nvim-web-devicons', config = true }, + lazy = false, + config = function() + local alpha = require("alpha") + local dashboard = require("alpha.themes.dashboard") + + dashboard.section.header.val = _ascii_arts['pacman'] -- require("ascii").art.text.slogons['make_cool_stuff'] + + -- Set menu + dashboard.section.buttons.val = { + dashboard.button("e", " New file", ":ene startinsert "), + dashboard.button("r", " Recently used files", ":Telescope oldfiles"), + dashboard.button("f", " Find file", ":Telescope find_files"), + dashboard.button("t", " Find text", ":Telescope live_grep "), + dashboard.button("q", " Quit NVIM", ":qa"), + } + + -- Set footer + --[[local handle = assert(io.popen('fortune -s')) + local fortune = handle:read("*all") + handle:close()]] + dashboard.section.footer.val = require('alpha.fortune')() + dashboard.section.header.opts.hl = "DevIconScss" -- "DeviconNPMrc"(red) + dashboard.section.buttons.opts.hl = "Debug" + dashboard.section.footer.opts.hl = "Comment" + dashboard.config.opts.noautocmd = true + + vim.cmd [[autocmd User AlphaReady echo 'ready']] + + alpha.setup(dashboard.opts) + end +} diff --git a/lua/vatsal/plugins/ascii-nvim.lua b/lua/vatsal/plugins/ascii-nvim.lua new file mode 100644 index 00000000..ef2db103 --- /dev/null +++ b/lua/vatsal/plugins/ascii-nvim.lua @@ -0,0 +1 @@ +return { 'MaximilianLloyd/ascii.nvim', dependencies = 'MunifTanjim/nui.nvim', lazy = true } diff --git a/lua/vatsal/plugins/colorbuddy.lua b/lua/vatsal/plugins/colorbuddy.lua new file mode 100644 index 00000000..c467a5e7 --- /dev/null +++ b/lua/vatsal/plugins/colorbuddy.lua @@ -0,0 +1,9 @@ +return { + 'tjdevries/colorbuddy.nvim', + config = function() + -- local Color, colors, Group, groups, styles = require('colorbuddy').setup() + -- Pallet: https://base16.vercel.app/previews/base16-twilight + -- https://github.com/goolord/alpha-nvim/discussions/16#:~:text=I%27m%20not%20quite%20satisfied%20with%20the%20layout%20yet%2C%20I%20started%20out%20with%20some%20colours%20but%20ended%20up%20omitting%20them%20for%20simplicity.%20Here%27s%20what%20it%20looks%20like%20so%20far%3A + end, + lazy = true +} diff --git a/lua/vatsal/plugins/colorschemes.lua b/lua/vatsal/plugins/colorschemes.lua new file mode 100644 index 00000000..c2bf5897 --- /dev/null +++ b/lua/vatsal/plugins/colorschemes.lua @@ -0,0 +1,27 @@ +return { + --Gruvbox colorscheme + { "ellisonleao/gruvbox.nvim", priority = 1000, config = true, opts = ..., lazy = true }, + + --tokyonight colorscheme + { "folke/tokyonight.nvim", priority = 1000, lazy = true }, + + -- lunar-vim colorschemes + { "lunarvim/colorschemes", priority = 1000, lazy = true }, + + -- kanagawa + { "rebelot/kanagawa.nvim", priority = 1000, lazy = true }, + + -- latte, frappe, macchiato, mocha + { "catppuccin/catppuccin", priority = 1000, lazy = true }, + + -- Theme inspired by Atom + { 'navarasu/onedark.nvim', priority = 1000, lazy = true }, + + --Rosepine (Primeagen) + { + 'rose-pine/neovim', + name = 'rose-pine', + priority = 1000, + lazy = false + } +} diff --git a/lua/kickstart/plugins/comment.lua b/lua/vatsal/plugins/comment.lua similarity index 100% rename from lua/kickstart/plugins/comment.lua rename to lua/vatsal/plugins/comment.lua diff --git a/lua/vatsal/plugins/debug.lua b/lua/vatsal/plugins/debug.lua new file mode 100644 index 00000000..92705c43 --- /dev/null +++ b/lua/vatsal/plugins/debug.lua @@ -0,0 +1,86 @@ +-- debug.lua +-- +-- Shows how to use the DAP plugin to debug your code. +-- +-- Primarily focused on configuring the debugger for Go, but can +-- be extended to other languages as well. That's why it's called +-- kickstart.nvim and not kitchen-sink.nvim ;) + +return { + 'mfussenegger/nvim-dap', + dependencies = { + -- Creates a beautiful debugger UI + 'rcarriga/nvim-dap-ui', + + -- Installs the debug adapters for you + 'williamboman/mason.nvim', + 'jay-babu/mason-nvim-dap.nvim', + + -- Add your own debuggers here + 'leoluz/nvim-dap-go', + }, + event = { 'BufReadPre', 'BufNewFile' }, + config = function() + local dap = require 'dap' + local dapui = require 'dapui' + + require('mason-nvim-dap').setup { + -- Makes a best effort to setup the various debuggers with + -- reasonable debug configurations + automatic_setup = true, + + -- You can provide additional configuration to the handlers, + -- see mason-nvim-dap README for more information + handlers = {}, + + -- You'll need to check that you have the required things installed + -- online, please don't ask me how to install them :) + ensure_installed = { + -- Update this to ensure that you have the debuggers for the langs you want + 'delve', + }, + } + + -- Basic debugging keymaps, feel free to change to your liking! + vim.keymap.set('n', '', dap.continue, { desc = 'Debug: Start/Continue' }) + vim.keymap.set('n', '', dap.step_into, { desc = 'Debug: Step Into' }) + vim.keymap.set('n', '', dap.step_over, { desc = 'Debug: Step Over' }) + vim.keymap.set('n', '', dap.step_out, { desc = 'Debug: Step Out' }) + vim.keymap.set('n', 'b', dap.toggle_breakpoint, { desc = 'Debug: Toggle Breakpoint' }) + vim.keymap.set('n', 'B', function() + dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ') + end, { desc = 'Debug: Set Breakpoint' }) + + -- Dap UI setup + -- For more information, see |:help nvim-dap-ui| + dapui.setup { + -- Set icons to characters that are more likely to work in every terminal. + -- Feel free to remove or use ones that you like more! :) + -- Don't feel like these are good choices. + icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, + controls = { + icons = { + pause = '⏸', + play = '▶', + step_into = '⏎', + step_over = '⏭', + step_out = '⏮', + step_back = 'b', + run_last = '▶▶', + terminate = '⏹', + disconnect = '⏏', + }, + }, + } + + -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. + vim.keymap.set('n', '', dapui.toggle, { desc = 'Debug: See last session result.' }) + + dap.listeners.after.event_initialized['dapui_config'] = dapui.open + dap.listeners.before.event_terminated['dapui_config'] = dapui.close + dap.listeners.before.event_exited['dapui_config'] = dapui.close + + -- Install golang specific config + require('dap-go').setup() + end, +} diff --git a/lua/vatsal/plugins/fortunes.lua b/lua/vatsal/plugins/fortunes.lua new file mode 100644 index 00000000..ef957ecd --- /dev/null +++ b/lua/vatsal/plugins/fortunes.lua @@ -0,0 +1 @@ +return { 'BlakeJC94/alpha-nvim-fortune', lazy = true } diff --git a/lua/kickstart/plugins/git-signs.lua b/lua/vatsal/plugins/git-signs.lua similarity index 100% rename from lua/kickstart/plugins/git-signs.lua rename to lua/vatsal/plugins/git-signs.lua diff --git a/lua/kickstart/plugins/git.lua b/lua/vatsal/plugins/git.lua similarity index 100% rename from lua/kickstart/plugins/git.lua rename to lua/vatsal/plugins/git.lua diff --git a/lua/kickstart/plugins/indent-blankline.lua b/lua/vatsal/plugins/indent-blankline.lua similarity index 100% rename from lua/kickstart/plugins/indent-blankline.lua rename to lua/vatsal/plugins/indent-blankline.lua diff --git a/lua/kickstart/plugins/lualine.lua b/lua/vatsal/plugins/lualine.lua similarity index 100% rename from lua/kickstart/plugins/lualine.lua rename to lua/vatsal/plugins/lualine.lua diff --git a/lua/vatsal/plugins/none-ls.lua b/lua/vatsal/plugins/none-ls.lua new file mode 100644 index 00000000..2cf4c188 --- /dev/null +++ b/lua/vatsal/plugins/none-ls.lua @@ -0,0 +1,18 @@ +return { + 'nvimtools/none-ls.nvim', + event = { 'BufReadPre', 'BufNewFile' }, + config = function() + local null_ls = require('null-ls') + + null_ls.setup({ + sources = { + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.prettier.with({ + disabled_filetypes = { 'javascript', 'typescript', 'json' } -- Use biome + }), + null_ls.builtins.formatting.biome, + -- null_ls.builtins.diagnostics.biome, + } + }) + end +} diff --git a/lua/kickstart/plugins/nvim-cmp.lua b/lua/vatsal/plugins/nvim-cmp.lua similarity index 100% rename from lua/kickstart/plugins/nvim-cmp.lua rename to lua/vatsal/plugins/nvim-cmp.lua diff --git a/lua/kickstart/plugins/nvim-lspconfig.lua b/lua/vatsal/plugins/nvim-lspconfig.lua similarity index 100% rename from lua/kickstart/plugins/nvim-lspconfig.lua rename to lua/vatsal/plugins/nvim-lspconfig.lua diff --git a/lua/kickstart/plugins/nvim-tree.lua b/lua/vatsal/plugins/nvim-tree.lua similarity index 100% rename from lua/kickstart/plugins/nvim-tree.lua rename to lua/vatsal/plugins/nvim-tree.lua diff --git a/lua/kickstart/plugins/nvim-treesitter.lua b/lua/vatsal/plugins/nvim-treesitter.lua similarity index 100% rename from lua/kickstart/plugins/nvim-treesitter.lua rename to lua/vatsal/plugins/nvim-treesitter.lua diff --git a/lua/vatsal/plugins/telescope-ui-select.lua b/lua/vatsal/plugins/telescope-ui-select.lua new file mode 100644 index 00000000..5a7052df --- /dev/null +++ b/lua/vatsal/plugins/telescope-ui-select.lua @@ -0,0 +1,15 @@ +return { + 'nvim-telescope/telescope-ui-select.nvim', + config = function() + require('telescope').setup({ + extensions = { + ['ui-select'] = { + require('telescope.themes').get_dropdown { + } + } + } + }) + require('telescope').load_extension('ui-select') + end, + keys = { { 'ca', vim.lsp.buf.code_action, '[C]ode [A]ction' } }, +} diff --git a/lua/kickstart/plugins/telescope.lua b/lua/vatsal/plugins/telescope.lua similarity index 100% rename from lua/kickstart/plugins/telescope.lua rename to lua/vatsal/plugins/telescope.lua diff --git a/lua/kickstart/plugins/vim-seluth.lua b/lua/vatsal/plugins/vim-seluth.lua similarity index 100% rename from lua/kickstart/plugins/vim-seluth.lua rename to lua/vatsal/plugins/vim-seluth.lua diff --git a/lua/kickstart/plugins/which-key.lua b/lua/vatsal/plugins/which-key.lua similarity index 100% rename from lua/kickstart/plugins/which-key.lua rename to lua/vatsal/plugins/which-key.lua