712 Commits
Author SHA1 Message Date
rootiest 1155311da0 feat(theme): implement dynamic themeing 2025-09-01 14:37:47 -04:00
rootiest 094bf768fc chore(deps): remove old commented-out dependencies 2025-09-01 14:37:17 -04:00
rootiest 096a0cb3b9 feat(nvim_updater): re-enable the nvim_updater plugin 2025-09-01 14:36:30 -04:00
rootiest 8cbd71bbbb fix(mini.nvim): update repository source of mini.nvim
Update the  source repository address to reflect the new mini.nvim organization.
2025-09-01 14:36:01 -04:00
rootiest 0d079826b0 docs(init): improve wording of init docs 2025-09-01 14:32:40 -04:00
rootiest 4545e18a68 feat(config): various config updates
Packaged updates to configuration.
2025-08-23 11:52:26 -04:00
rootiest 00b23548c3 chore(gitignore): add directories to gitignore 2025-08-23 11:51:28 -04:00
rootiest 2243264a24 fix(neovide): tweaks to neovide config 2025-08-23 11:50:56 -04:00
rootiest 209abd810d refactor(deprecated): remove old deprecated configs 2025-08-23 11:50:23 -04:00
rootiest 5cee216130 style(cooklang): cooklang style rules 2025-08-23 11:50:00 -04:00
rootiest 3a2f4e3e70 revert(statuscolumn): remove statuscolumn diagnostic colors
This code was not functioning properly so in the interest of performance, it is to be removed until
it can be fixed
2025-04-02 16:16:27 -04:00
rootiest e0c32bb119 feat(blink.cmp): add ripgrep to blink sources
Allows getting additional suggestions via ripgrep in blink.cmp. Source is added to the end of the
suggestions list and will search the full project directory (within size/root limits)
2025-03-26 00:01:46 -04:00
rootiest 440c7a7cfd feat(color-tags): use nvim-colorizer instead of mini.hipatterns
nvim-colorizer provides more features and recognizes more types of color formats.
2025-03-20 20:31:26 -04:00
rootiest 360df77f4a fix(smart-splits): properly execute the smart-splits keymap overrides 2025-03-19 21:06:17 -04:00
rootiest d060cdd269 style: changed conventional commits style from cz-emoji to standard commitizen
Commit messages will now use a more traditionl style to conform with global standards.
2025-03-19 20:06:32 -04:00
rootiest 8e68148899 📝 Docs(plugins): add plugin name comments for some plugins that were missing them 2025-03-19 19:43:32 -04:00
rootiest df9aebed1f 🗑️ Cleaned(smear-cursor): remove old config option
The use_floating_window option is no longer used so we don't need to set it
2025-03-19 19:42:53 -04:00
rootiest b8aeb1a911 📝 Docs(scrolling): add a simple note making it easy for users to change the behavior of smart-scroll
This adds one line that can be uncommented to prevent the smart-scroll function from remembering the
previous count. Well, it still remembers it, but it won't use it.
2025-03-18 22:38:00 -04:00
rootiest 1ea8611dbc Feat(scrolling): smarter <C-u> and <C-d>
Allows <C-u> and <C-d> to accept a count and scroll by <count>*<half-screen>. The count is
remembered and re-used for both <C-u> and <C-d> so repetitively pressing those sequences will
continue to use the previous count. Count defaults to 1 initally (scroll by one half-screen)
2025-03-18 22:29:45 -04:00
rootiest c4aa09b6be Feat(osc7): cwd tracking and matching
Writes the CWD to a file (and emits the OSC7) at startup and when the directory changes. This is
used by a function in fish-shell to automatically cd to the cwd on nvim exit.
2025-03-18 22:26:49 -04:00
rootiest 0ae80edfff Feat(illuminate): remove vim-illuminate in favor of snacks.words
Using the snacks feature instead of adding another plugin
2025-03-18 20:07:51 -04:00
rootiest bae734bb37 🗑️ Cleaned(lazyvim): remove old commented lazyvim extras 2025-03-18 20:06:58 -04:00
rootiest 35d032c7b1 🐛 Bug(luarocks): enable/disable hererocks based on vim.g.use_rocks setting from options 2025-03-18 20:05:35 -04:00
rootiest 163239a405 Feat(projects): add project.nvim
Add project.nvim for project management. Add dash option for it.

BREAKING CHANGE: Change dash key `p` from filetree to projects. Filetree now `t`
2025-03-12 21:50:42 -04:00
rootiest a13da65b8d Feat(highlight-colors): implement mini.hipatterns 2025-03-12 21:49:11 -04:00
rootiest 74139cb912 Feat(lualine): tweak nvim_updater lualine component colors
Make sure the bgcolor always matches its position in lualine, fixes
compatibility issue with some
colorschemes.
2025-03-11 12:45:45 -04:00
rootiest 191b6ffab2 🐛 Bug(treesitter): remove broken conditional
The condition for enabling treesitter caused treesitter-textobject errors whenever lazy.nvim
installs plugins
2025-03-10 22:04:25 -04:00
rootiest 98d9b6ee7d 🚸 UX(keymaps): change neominimap toggle keymaps
Makes more consistent with other toggles
2025-03-10 20:45:14 -04:00
rootiest 7b96badac2 🗑️ Cleaned(cmp): remove old commented cmp source 2025-03-05 15:26:32 -05:00
rootiest 3c8814df8a Feat(dashboard): add option and dynamic visibility for github contribs on dash 2025-03-05 15:25:33 -05:00
rootiest c6084225fd Feat(keymap): don't comment newline when using o key
Normal insert-mode newlines continue comments. Pressing `o` in normal-mode will create a newline
without commenting it.
2025-03-05 15:24:38 -05:00
rootiest 1a5b574ef6 🐛 Bug(blink.cmp): cmdline min keyword length
Cleaner cmdline completion with ghost-text and require a minimum of 2 characters entered before
showing suggestions. This prevents `:q` from being autocompleted to `:qall` and similar
mis-completions for short cmds.
2025-03-01 11:07:16 -05:00
rootiest 98a72eab61 Feat(obsidian): implement some initial Obsidian Notes features 2025-03-01 11:05:11 -05:00
rootiest 969510cee1 Feat(picker): implement Pick command
This allows you to do `:Pick colorschemes` instead of `:lua Pick('colorschemes')`. Makes using less
frequent pickers fast and easy!
2025-02-27 16:52:43 -05:00
rootiest aacbf5fb99 🐛 Bug(blink.cmp): tweak the cmdline completion behavior
This allows enter to send the command even if there is a suggestion to select. Avoids needing to
press enter twice.
2025-02-27 16:51:04 -05:00
rootiest e4f7a7473d Feat(colorschemes): add e-ink theme for some sweet monochromatic style 2025-02-27 16:50:02 -05:00
rootiest 194ab5278d Feat(ai-completion): try using copilot for a bit
Since I now have access to copilot pro I might as well take advantage of it. Not convinced its
better than codeium tho, we shall see.
2025-02-24 23:57:59 -05:00
rootiest 5ad9df12be 🗑️ Cleaned(statuscolumn): remove failed attempts at modifying statuscolumn appearance
A while back some attempts were made to change the statuscolumn appearance but they failed to
achieve an effective solution. Tidying up old commented code.
2025-02-17 19:01:04 -05:00
rootiest 648a8b76a5 🗑️ Cleaned(plugin specs): remove old, unused plugin specs
These specs have been commented out for a while now, this is just tidying up.
2025-02-17 18:59:51 -05:00
rootiest e1a00ac2da 🎨 Style(colorschemes): allow auto-dark-mode toggle but disable it by default 2025-02-17 18:58:07 -05:00
rootiest 59acf6175c 🎨 Style(colorschemes): organize colorscheme specs 2025-02-17 18:56:51 -05:00
rootiest 18933787b8 🎨 Style(wezterm): remove old wezterm-types definition 2025-02-17 18:55:52 -05:00
rootiest 05a109422e 🎨 Style(wezterm): make wezterm-types a dependency of lazydev 2025-02-17 18:55:18 -05:00
rootiest b430ed7b02 Feat(options): add gitname option
This allows customizing the github username for functions such as the dashboard contribution graph
2025-02-17 18:38:45 -05:00
rootiest 46e1e88ff2 Feat(image render): remove image.nvim
We can now render images in supported terminals with snacks, so image.nvim is now redundant and
unnecessary
2025-02-17 18:37:42 -05:00
rootiest 06663c59e8 📝 Docs(annotations): remove @func annotations
These are not properly parsed and not typically used, so all of them are now scrubbed from the repo
2025-02-17 18:36:34 -05:00
rootiest e1081f0d1f 🐛 Bug(vim.ui): remove deprecated dressing.nvim plugin from deps
Dressing is no longer being used, has been replaced with snacks.nvim ui plugins
2025-02-16 14:20:49 -05:00
rootiest e8fe76e111 🗑️ Cleaned(flutter): remove old redundant code
Remove fultter-tools plugin that is no longer used
2025-02-16 14:19:37 -05:00
rootiest cb61b27c21 📝 Docs(util-funcs): add missing annotations to utility functions 2025-02-16 14:18:49 -05:00
rootiest a42aaea9eb 🗑️ Cleaned(colorschemes): disable unused tokyonight theme
We use catppuccin so disable tokyonight to prevent it loading
2025-02-16 09:41:14 -05:00
rootiest 5701043c61 🐛 Bug(blink.cmp): fix breaking change in cmdline configuration
Blink.cmp now configures cmdline sources and keymaps in their own top-level cmdline table,
previously they were mixed in with the default keymaps and sources tables.

BREAKING CHANGE: Change to how cmdline is configured in blink.cmp
2025-02-15 21:31:22 -05:00
rootiest a9e51f8793 Feat(statuscolumn): implements coloring line numbers based on diagnostic status
This allows the line numbers to reflect statuses like Error, Warning, etc
2025-02-15 21:29:31 -05:00
rootiest c6fcdfef49 Feat(diffview): use 3-way mixed windows mergeview by default
Moved diffview opts to main types file and changed default from 3-way veritcal to 3-way mixed
window.
2025-02-15 21:28:14 -05:00
rootiest 97da62dcbe 🗑️ Cleaned(keymaps): remove old uneccessary keymap 2025-02-15 21:26:15 -05:00
rootiest 26e183e519 add gitsigns features toggles
In options.lua you can now set:
- vim.g.git_line_hl: to enable line highlights
- vim.g.git_word_hl: to enable word highlights
2025-02-15 21:24:25 -05:00
rootiest df54d30b24 🐛 Bug(keymaps): remove the \ keymap due to conflict
The \ keymap conflicts with the local-leader key. | remains as the vertical split keymap
2025-02-12 21:52:15 -05:00
rootiest fa4acc29ad Feat(keymaps): modify vertical split and explorer keymaps for easier use
Press \ or | for vertical split. Press Ctrl+| (Ctrl+Shift+\) for explorer.
2025-02-12 18:49:31 -05:00
rootiest a593ddb2fd remove deprecated indentor module 2025-02-11 20:50:22 -05:00
rootiest 4de0ea2a96 avoid bootstrapping luarocks when use_luarocks is false 2025-02-11 20:50:06 -05:00
rootiest bd84aa9b29 implement new profile configuration 2025-02-11 20:49:21 -05:00
rootiest 588a46e239 deprecate old profiler in favor of snacks.profiler
Use PROF=1 env variable to enable startup profiling
2025-02-11 20:48:09 -05:00
rootiest 98ab9da88c add snacks.image
enables image support in snacks!
May consider removing image.nvim now, will look into using snacks.image
in markdown rendering.
2025-02-09 16:59:51 -05:00
rootiest 58bfe77e92 playing with using customized vscode layout for snacks.picker 2025-02-09 16:00:48 -05:00
rootiest 7659170599 update gitignore
add test.lua
2025-02-08 21:31:45 -05:00
rootiest ab4ec2ae3e lua file for using neovide as a terminal emulator
To use:

Run (or map an alias/shortcut to):
neovide -- -u '~/.config/neoterm/neoterm.lua'
2025-02-08 21:31:30 -05:00
rootiest 38c01e545c update blinky behavior to use new lua functions 2025-02-08 21:29:59 -05:00
rootiest 7df4f7ef01 add new snacks plugin features 2025-02-08 21:29:42 -05:00
rootiest 46c9af56d0 efficiency and organization 2025-02-08 21:29:22 -05:00
rootiest 9e9de6fad4 lazy-load smart-splits 2025-02-08 21:28:58 -05:00
rootiest 1aa52c44a5 move opts/init to types.lua 2025-02-08 21:28:38 -05:00
rootiest d0abaf2c31 disable cursor animation in mini.animate
using smearcursor instead
2025-02-08 21:28:18 -05:00
rootiest aa0d53183f fix for markview updates 2025-02-08 21:27:43 -05:00
rootiest bbc9f24eac remove redundant/unused plugins 2025-02-08 21:27:29 -05:00
rootiest 62d405a8bf move opts and keys to their respective files 2025-02-08 21:23:57 -05:00
rootiest f5293ebf19 add tiny-inline-diagnostic plugin 2025-02-08 21:18:28 -05:00
rootiest b5cc85f263 disable excess/redundant plugins 2025-02-08 21:15:58 -05:00
rootiest af57904c6b move lazydev opts to types.lua 2025-02-08 21:15:02 -05:00
rootiest 55ac36077c remove redundant lspconfig plugin 2025-02-08 21:12:56 -05:00
rootiest 1c75328bbe move treesitter conditional to cond.lua 2025-02-08 21:11:33 -05:00
rootiest 8b17a513b5 add misc opts for various plugins 2025-02-08 21:10:32 -05:00
rootiest 7e3e57940b add floating-help opts 2025-02-08 21:09:58 -05:00
rootiest 7e1f6de3a9 add neocord opts 2025-02-08 21:09:42 -05:00
rootiest 135bdacf44 add code-companion opts 2025-02-08 21:09:30 -05:00
rootiest 69761e3809 use Pick global in lualine config 2025-02-08 21:08:59 -05:00
rootiest 03d67d05db clean up cmp config
improve efficiency and remove extra slop
2025-02-08 20:34:54 -05:00
rootiest 0b2ead50b4 add keymaps for autosave 2025-02-08 20:34:04 -05:00
rootiest 81105aabc6 add codeium official completion plugin 2025-02-08 20:33:52 -05:00
rootiest 25b1132bb7 add code-companion for ai chat 2025-02-08 20:33:36 -05:00
rootiest 816eca31b7 fix!: move all lazyvim extras into a single file
This is a necessary change to ensure they are loaded before any other
plugins.
Prevents a warning message at startup.
2025-02-08 20:28:57 -05:00
rootiest 0e7befb507 add toggleterm-style mapping for snacks.terminal 2025-02-08 20:23:21 -05:00
rootiest 21608a5919 add snacks.toggle functionality for smear-cursor 2025-02-08 20:22:56 -05:00
rootiest 1e959b1927 replace some telescope mappings with snacks.picker 2025-02-08 20:22:34 -05:00
rootiest 42b2f58117 replace neotree with snacks.explorer 2025-02-08 20:22:12 -05:00
rootiest 7a1114d434 add snacks.toggle functionality for blink 2025-02-08 20:20:57 -05:00
rootiest abce81eef4 add snacks.toggle functionality for auto-save 2025-02-08 20:20:42 -05:00
rootiest 7286c2adab add is_ghostty function to identify when terminal is ghostty 2025-02-08 20:20:00 -05:00
rootiest f63830e4a5 add ft for acedemic plugin 2025-02-08 20:19:22 -05:00
rootiest fd5614d307 remove telescope from dependencies
this is necessary to ensure telescope wont be loaded when toggled off in
options.lua
2025-02-08 20:19:03 -05:00
rootiest 755a38368c add code-companion dependencies table 2025-02-08 20:18:29 -05:00
rootiest d86a07a4a0 use new Pick global in dashboard 2025-02-08 20:18:05 -05:00
rootiest 2d6d322f8e add new condtionals for plugins that can be toggled/disabled 2025-02-08 20:17:50 -05:00
rootiest da94667d40 add cmd table for code-companion 2025-02-08 20:17:16 -05:00
rootiest 7c893a72c9 minor formatting correction
use single quotes when possible instead of double quotes
2025-02-08 20:16:57 -05:00
rootiest f6074cc198 add new picking global (Pick)
this allows you to run `Pick` instead of `require('data.func').pick`
Makes accessing the picker function easier/quicker/cleaner.
This is now implemented throughout the config.
2025-02-08 20:16:14 -05:00
rootiest 286df25462 a couple new keymap overrides 2025-02-08 20:14:07 -05:00
rootiest 1bbd9bac30 add new default ai-chat provider option (code-companion)
disable avante and use code-companion instead
2025-02-08 20:13:30 -05:00
rootiest 142aafc7ff add yazi toggle option 2025-02-08 20:12:33 -05:00
rootiest 2d3b4c1543 add luarocks toggle option 2025-02-08 20:12:24 -05:00
rootiest 5c0010dd5a add tiny-inline-diagnostic toggle option
default on
2025-02-08 20:12:10 -05:00
rootiest 5dd3af0083 add new default picker option: snacks.picker
Now telescope and fzf-lua are disabled by default
Significant performance boost!
2025-02-08 20:11:43 -05:00
rootiest 34e46cba1c clean up additional dynamic keymaps 2025-02-08 20:09:49 -05:00
rootiest 1255161d4b make smart-splits mappings more dynamic
only use them when using smart-splits
2025-02-08 20:08:49 -05:00
rootiest 23959a9b77 add autocmd for non-ignored fts
used to lazy-load on actual normal buffer opening
2025-02-08 20:06:53 -05:00
rootiest 36febe9fe3 rework qalc mappings 2025-02-08 20:06:11 -05:00
rootiest 191f0cb798 remove lazygit utils
(using snacks.lazygit instead)
2025-02-08 20:05:35 -05:00
rootiest 0ec917ffeb add (optional) ex-colors file
based on catppuccin-mocha
2025-02-08 20:04:50 -05:00
rootiest 207f59ff45 update Pick function annotations 2025-02-07 15:39:18 -05:00
rootiest 51c57914a4 Add snacks.picker to Pick function 2025-02-07 15:36:12 -05:00
rootiest 474b358456 clean unused components for lualine 2025-01-13 21:17:27 -05:00
rootiest 783bb72a6c further refine cmp plugin config (still WIP) 2025-01-13 21:17:10 -05:00
rootiest 0d43b79a41 configure snacks indent/scope/chunk 2025-01-13 21:16:22 -05:00
rootiest 0492b72a27 improve telescope lazy-loading and remove unused plugins 2025-01-13 21:15:55 -05:00
rootiest 1c6b5714bc improve lazy-loading significantly and remove unused plugins 2025-01-13 21:13:17 -05:00
rootiest b986fad055 fix cmp keymapping 2025-01-13 21:12:00 -05:00
rootiest 5162860a70 change discord-presence lazy-load event 2025-01-13 21:11:41 -05:00
rootiest 0fd404bbf9 add FloatingHelp and lualine conditionals 2025-01-13 21:11:17 -05:00
rootiest c253d75d2a move additional plugin cmd specs to a centralized location 2025-01-13 21:10:57 -05:00
rootiest 4cd9063a82 add more options for toggling features 2025-01-13 21:10:38 -05:00
rootiest 7baf187b65 tweak neovide effects 2025-01-13 21:10:10 -05:00
rootiest cb29703df3 Add dictionary table
for autocomplete
2025-01-13 21:08:03 -05:00
rootiest 70d734280e fix breaking change in smear-cursor config 2024-12-28 18:51:20 -05:00
rootiest a43a6e3c3f use helix preset for which-key
and offset for neominimap
2024-12-28 18:50:58 -05:00
rootiest 66cb9db1d8 use codeium and blink by default 2024-12-28 18:50:11 -05:00
rootiest 112ac962c1 add qalc scratch buffer to gitignore 2024-12-28 18:49:54 -05:00
rootiest 2eb67cf340 remove unused plugins 2024-12-28 18:49:11 -05:00
rootiest 4f1bcddcd9 fzf-lua winopts tweaks 2024-12-28 18:48:37 -05:00
rootiest d669855aa7 comment titles for plugin specs 2024-12-28 18:48:14 -05:00
rootiest f1a73e1fcd add additional spelling language features 2024-12-28 18:47:58 -05:00
rootiest 091b460aa2 remove unused editor plugins 2024-12-28 18:47:43 -05:00
rootiest 9639ed8d02 ecolog keymapping 2024-12-28 18:47:16 -05:00
rootiest ed91356e05 fix blink mini.files incompatibility 2024-12-28 18:46:58 -05:00
rootiest dfddc7c0e7 update codeium plugin reference 2024-12-28 18:46:20 -05:00
rootiest 3975402192 add initial support for codeium status in lualine 2024-12-28 18:46:01 -05:00
rootiest d89d385a15 make keymap override more flexible 2024-12-28 18:45:41 -05:00
rootiest ba40d4ad11 execute early options before anything else 2024-12-28 18:45:16 -05:00
rootiest c3e008dd67 replace deprecated termopen 2024-12-28 18:41:22 -05:00
rootiest d2c596cbab feat: add smart-open functionality to enhance file navigation 2024-12-18 22:16:11 -05:00
rootiest 36ef1f55af feat: enhance fzf-lua options for improved usability 2024-12-18 22:16:02 -05:00
rootiest 50fdf9658f refactor: ensure profiling options can be set via environment variables 2024-12-18 14:27:10 -05:00
rootiest 1678c1a244 style: clean up whitespaces in options configuration 2024-12-18 14:26:57 -05:00
rootiest 76cb67e6e9 feat: implement keymap for swapping buffer positions 2024-12-18 14:26:25 -05:00
rootiest b75a6552ad feat: remap 'q' to '<nop>' to prevent accidental macro recordings 2024-12-18 14:26:08 -05:00
rootiest 6ab41033bf feat: add autocommands to enter insert mode in terminal buffers 2024-12-18 14:25:57 -05:00
rootiest 3322cd58b1 feat: add function to retrieve system architecture 2024-12-18 14:25:48 -05:00
rootiest a78d4f1c43 fix: update color fetching method for Git signs in statusline 2024-12-18 14:25:31 -05:00
rootiest 18cc33490c refactor: utilize utility function for color fetching 2024-12-18 14:25:20 -05:00
rootiest 3e9fe8b39e fix: ensure nvim-cmp is recognized for plugin operation 2024-12-18 14:24:57 -05:00
rootiest be6645bdd5 feat: enable main entry point for indent-blankline plugin 2024-12-18 14:24:43 -05:00
rootiest 00a78e028b fix: correct mapping for snippet insertion in completion 2024-12-18 14:24:34 -05:00
rootiest d2bda27817 feat: enhance Noice configuration with progress and route options 2024-12-11 15:03:11 -05:00
rootiest c7c8ccb503 chore: incorporate transparent background feature into theme config 2024-12-11 15:02:53 -05:00
rootiest 1f867dc16f cleanup: remove unnecessary require statement for profiling 2024-12-11 15:02:28 -05:00
rootiest 4d7f36807b fix: ensure background color fallback is applied in smear cursor settings 2024-12-11 15:01:49 -05:00
rootiest 7931ac4f5d style: standardize string quotes in highlight.lua 2024-12-11 14:59:40 -05:00
rootiest 7dc7ec32b9 feat: introduce Snacks profiler key mappings 2024-12-11 14:59:24 -05:00
rootiest a139e28b8e feat: support new command for seasonal animation 2024-12-11 14:59:15 -05:00
rootiest 65402baa23 feat: integrate yazi plugin for enhanced text manipulation 2024-12-11 14:58:45 -05:00
rootiest aa6a54f5ab feat: enhance previewers configuration for image formats 2024-12-11 14:58:17 -05:00
rootiest 32f381f221 cleanup: eliminate unused plugin configurations 2024-12-11 14:58:07 -05:00
rootiest b7acc379bf feat: enhance cursor functionality with smear cursor integration 2024-12-11 14:57:39 -05:00
rootiest b346b142eb refactor: remove unused Noice plugin configuration 2024-12-11 14:57:08 -05:00
rootiest ed84e91a3c feat: add environment variable management support 2024-12-11 14:56:29 -05:00
rootiest 3adac71606 feat: add Treesitter end-wise support for better coding experience 2024-12-11 14:56:22 -05:00
rootiest 2196b41b5c feat: add 'ecolog' source to completion options 2024-12-11 14:54:51 -05:00
rootiest f73d39a89f enhance: add dynamic handling for dashboard section based on conditions 2024-12-11 14:54:41 -05:00
rootiest 4b01fd9abd feat: add custom key mappings for Yanky commands 2024-12-11 14:46:36 -05:00
rootiest 6ba4d3fcf4 fix: update key bindings for mini.files and Neotree 2024-12-11 14:46:22 -05:00
rootiest 87dc747073 feature: implement custom search path for Telescope file finding 2024-12-11 14:45:55 -05:00
rootiest baaed9bd80 feat: add macro recording cursor color changes 2024-12-11 14:45:29 -05:00
rootiest f986297e51 feat: add user command to list active LSP clients 2024-12-11 14:45:20 -05:00
rootiest b8805d7507 feat: swap 'p' and 'P' key behaviors for improved usability 2024-12-11 14:44:58 -05:00
rootiest 1ff3ef3e1b feat: implement snippet closure on exit from insert mode 2024-12-11 14:44:33 -05:00
rootiest d958a521e4 feat: enable todo-comments feature 2024-12-11 14:43:56 -05:00
rootiest e446bb29ba fix: reduce cursor animation length for smoother transitions 2024-12-11 14:43:47 -05:00
rootiest 10989e6257 feat: add keymaps for macro recording and replaying 2024-12-11 14:43:36 -05:00
rootiest 3c6385fe02 feat: implement dynamic line numbering based on command mode 2024-12-11 14:43:18 -05:00
rootiest c237ab1dff feat: implement custom status column with gradient highlights 2024-12-11 14:43:06 -05:00
rootiest 89453dc581 🚑 Quickfix(offset_encodings): address nvim-nightly offset_encoding deprecations
This is a temporary hotfix to deal with offset_encoding/position_encoding requirements in the latest
nightly builds. Plugins should be updated to address this.

BREAKING CHANGE: blink.cmp is not working, fallback to nvim-cmp. noice.nvim using a fork. Likely
more to come. Watch for 'offset_encoding' scope tags in later commmits.
2024-11-25 19:12:25 -05:00
rootiest 25072a82ae feat: add ast-grep integration for Grug-Far 2024-11-25 19:08:52 -05:00
rootiest 0545eb384a feat: implement native statuscolumn for improved line number visibility 2024-11-25 19:07:53 -05:00
rootiest 03751a3a71 feat: add customizable parameters for smear cursor animation 2024-11-25 19:07:10 -05:00
rootiest bede6f3c40 feat: add new terminal command for enhanced startup experience 2024-11-25 19:06:12 -05:00
rootiest ff4e12676b feat: add new mini logo for dashboard 2024-11-25 19:05:53 -05:00
rootiest 9ade777c01 fix: disable deprecated LSP provider in illuminate settings 2024-11-24 20:20:45 -05:00
rootiest a2bc422315 refactor: streamline blink compatibility integration 2024-11-24 20:20:37 -05:00
rootiest d850e29bbc style: update status column symbols for better clarity 2024-11-24 20:20:26 -05:00
rootiest 2b0b71d141 feat: implement smear cursor functionality with customizable options 2024-11-24 20:20:13 -05:00
rootiest a9203b51a9 feat: implement snacks statuscolumn configuration 2024-11-24 20:19:32 -05:00
rootiest 55931aa562 feat: add new module for VimScript configuration 2024-11-24 03:20:18 -05:00
rootiest 9ca8c4da09 chore: update gitignore to remove formatting inconsistencies 2024-11-24 03:20:06 -05:00
rootiest 2d5a077607 feat: add smear cursor functionality for improved visual feedback 2024-11-24 03:19:59 -05:00
rootiest 2d486398d6 feat: add conditional rendering for dashboard sections based on Neovide 2024-11-24 03:19:49 -05:00
rootiest 4f62a6b91c refactor: encapsulate setup logic into a dedicated function 2024-11-24 03:19:35 -05:00
rootiest 70693e44d6 feat: enable clickable git components in statusline 2024-11-24 03:19:27 -05:00
rootiest 6a02889aaa enhancement: integrate snacks in catppuccin for better user experience 2024-11-24 03:18:51 -05:00
rootiest f1cc653431 chore: update lazygit invocation for improved functionality 2024-11-24 03:18:05 -05:00
rootiest c99db3c038 chore: clean up previous lazygit implementations from config 2024-11-24 03:17:10 -05:00
rootiest ea017acd0f feat: add configurable TTL for git status updates 2024-11-23 14:29:26 -05:00
rootiest a7129d6cc1 feat: enable horizontal motion keys to wrap to next line 2024-11-23 14:26:01 -05:00
rootiest 4ae59dee6c feat: support latex in treesitter configurations 2024-11-23 14:25:49 -05:00
rootiest 81b22ad8b8 refactor: remove deprecated none-ls configuration 2024-11-23 14:25:39 -05:00
rootiest 47544753c1 chore: remove commented-out configuration for footprints plugin 2024-11-23 14:25:14 -05:00
rootiest a692b1cc3c feat: integrate Blink completion support for enhanced coding experience 2024-11-23 14:24:08 -05:00
rootiest 7d9f26daeb feat: add snacks_dashboard to disabled filetypes in statusline 2024-11-23 14:23:33 -05:00
rootiest a3ac43c2cf feat: implement snacks dashboard functionality 2024-11-23 14:23:21 -05:00
rootiest f55f8976ce refactor: change live_grep to grep for consistency 2024-11-23 14:23:01 -05:00
rootiest 1fc5368cb7 feat: add function to retrieve system architecture 2024-11-23 14:22:35 -05:00
rootiest 6cf46f13eb fix: improve grep command handling with egrepify support 2024-11-23 14:22:28 -05:00
rootiest 7bfb413934 feat: enrich theming capabilities with additional ANSI16 color options 2024-11-23 14:21:35 -05:00
rootiest b57784ac53 feat: add architecture detection to disable incompatible plugins 2024-11-23 14:19:12 -05:00
rootiest 7e7afb35a8 feat: allow line wrapping for directional motions in configurations 2024-11-23 14:18:53 -05:00
rootiest 8c79ec4149 style: refine cursor effect parameters to achieve smoother animation 2024-11-23 14:18:26 -05:00
rootiest 97c969d46c feat: implement command-line abbreviation for lazy commands 2024-11-23 14:18:13 -05:00
rootiest 54779cab5d fix: disable avante support for termux 2024-11-13 20:03:11 -05:00
rootiest 3f096313fc fix: ensure single quotes are used consistently across configuration files 2024-11-12 14:19:44 -05:00
rootiest 0d6750bbcd style: update logo text representation for neovim 2024-11-12 14:18:58 -05:00
rootiest 3b759c93b6 fix: conditionally disable feature based on installed modules 2024-11-10 16:29:03 -05:00
rootiest d92cff3c18 refactor: streamline NeoMiniMap disabling logic for terminal users 2024-11-10 16:27:44 -05:00
rootiest b09405588b refactor: consolidate keymap additions into overrides configuration 2024-11-10 16:26:29 -05:00
rootiest 88d31b6bce fix: prevent rock loading on Termux to avoid compatibility issues 2024-11-10 16:18:44 -05:00
rootiest 50cebdbddd feat: add support for termux environment detection 2024-11-10 16:15:04 -05:00
rootiest a4479c8d88 Update README.md
Manually edited the ASCII art
2024-11-10 15:05:55 -05:00
rootiest 267f1ee1ad style: update ASCII art in README 2024-11-10 14:59:58 -05:00
rootiest 94f0a6134d Update Credits
Mention the mini.nvim dev
2024-11-10 14:53:39 -05:00
rootiest a1ee019703 docs: introduce new link to Rootiest Vim in documentation 2024-11-10 14:50:44 -05:00
rootiest c118ffde89 style: correct ASCII art formatting in README 2024-11-10 14:48:43 -05:00
rootiest 3a697bbe0f docs: update features section to reflect new Neovim integration options 2024-11-10 14:47:19 -05:00
rootiest 3c845205c0 chore: update copyright holder in LICENSE 2024-11-10 14:47:07 -05:00
rootiest 33daed6a63 refactor: modify plugin configuration for better usability 2024-11-10 14:46:57 -05:00
rootiest 47765ecb02 chore: set comment box plugin to load eagerly 2024-11-10 14:46:35 -05:00
rootiest 48919d82d9 feat: integrate sidebar configuration for enhanced symbol preview 2024-11-10 14:46:19 -05:00
rootiest e2e9b62d18 fix: disable todo-comments feature 2024-11-10 14:46:05 -05:00
rootiest 9bfc5083fc Merge pull request #1 from IamSmeagol/patch-1
Fix: Fish config link
2024-11-10 13:30:15 -05:00
Smeagol f49b3c31b4 Fix: Fish config link 2024-11-09 19:29:00 -05:00
rootiest 07e7b42a71 chore: switch license from GNU AGPL to MIT License 2024-11-08 20:08:16 -05:00
rootiest b7b8711c44 perf: improve performance by enabling caching 2024-11-08 20:08:06 -05:00
rootiest 7ed8312745 feat: add rock configuration option to enhance plugin management 2024-11-08 16:24:14 -05:00
rootiest 9031e58e89 docs: revise companion tools section for better information flow 2024-11-08 13:15:06 -05:00
rootiest 823e113276 🧹 refactor(data): require data modules directly
require data modules directly throughout config. No longer user
require("data") as a parent module
2024-11-08 12:39:30 -05:00
rootiest 6f98bdb344 fix: update image processor to use magick_cli 2024-11-08 12:36:48 -05:00
rootiest 40f421cbcd refactor: separate auto-save configuration from utilities 2024-11-08 12:35:40 -05:00
rootiest a677f946ed feat: implement remapping for command mode using <Leader>q: 2024-11-08 12:34:48 -05:00
rootiest 15a0028656 refactor: improve plugin check logic for better clarity and maintainability 2024-11-08 12:34:29 -05:00
rootiest 362b412d55 Feat(snacks): use folke's snacks
Use folke's snacks.nvim convenience plugin
2024-11-08 12:33:11 -05:00
rootiest b8cc95dfc8 chore: update .gitignore to include extras directory 2024-11-05 06:03:49 -05:00
rootiest de138a0bd4 feat: implement modern cipher for improved security 2024-11-05 06:03:40 -05:00
rootiest 709b8593c4 feat: integrate additional VSCode functionality 2024-11-05 06:03:28 -05:00
rootiest 94251b8743 feat: add support for todo-comments configuration 2024-11-05 06:03:07 -05:00
rootiest 0a8af845fe feat: add base64, hex, and ROT47 encoding/decoding functions to key mappings 2024-11-05 06:02:56 -05:00
rootiest 903838aeba feat: add several cipher functions for text transformation 2024-11-05 06:02:46 -05:00
rootiest 74df06483f feat: add support for searching cpp, python, nvim, vim, java, js, rust, and html files 2024-11-05 06:01:34 -05:00
rootiest 54d0ebefbd feat: add custom line numbering functionality to enhance visibility 2024-11-05 06:01:08 -05:00
rootiest 987e926795 feat: add functions to retrieve character on position and byte count 2024-11-05 05:57:21 -05:00
rootiest 3cb906c14b feat: add function to convert Windows paths to Unix format 2024-11-05 05:56:49 -05:00
rootiest bcccd5be1c feat: add handling for file_browser commands across multiple providers 2024-11-05 05:56:11 -05:00
rootiest 0f95168172 feat: add function to check if the current directory is a git repository 2024-11-05 05:55:25 -05:00
rootiest 1e676b9bed feat: introduce picker sets for various file types 2024-11-05 05:54:43 -05:00
rootiest fdf5a288ba feat: improve yank plugin configuration 2024-11-05 05:54:34 -05:00
rootiest 58d87e51cf feat: enhance Fzf Lua options for improved compatibility 2024-11-05 05:54:15 -05:00
rootiest 416d3bfa67 chore: improve plugin configuration for better flexibility 2024-11-05 05:54:09 -05:00
rootiest 82e6630575 fix: correct condition for todo comments 2024-11-05 05:53:54 -05:00
rootiest bebd896c09 feat: implement conditional todo return based on global variable and git repo 2024-11-05 05:53:34 -05:00
rootiest 2fc5ed51ff feat: add C++ file type picker functionality 2024-11-05 05:53:18 -05:00
rootiest 1ffdf9e63d refactor: replace direct API calls with helper functions for autocommands 2024-11-05 05:52:09 -05:00
rootiest 0c2b5abc97 refactor: consolidate all data module references into a single data object 2024-11-03 01:52:42 -04:00
rootiest fb29e927fc feat: enhance Todo comments functionality with conditional rendering 2024-11-03 01:52:15 -04:00
rootiest 77f9dc8363 feat: add configuration for Matchup plugin 2024-11-03 01:51:37 -04:00
rootiest 0261c76cec feat: add key mapping for 'jk' to escape in insert and visual modes 2024-11-03 01:51:13 -04:00
rootiest cf560790cf feat: add EasyAlign key mapping for enhanced text alignment 2024-11-03 01:51:01 -04:00
rootiest 1126034bd1 feat: enable optional use of Astral colorscheme management via global variable 2024-11-03 01:49:48 -04:00
rootiest 784083910d refactor: consolidate clipboard mappings into loop for cleaner code structure 2024-11-03 01:46:23 -04:00
rootiest 834a702ded feat: add Neogit integration with customized graph style 2024-11-03 01:08:43 -04:00
rootiest 32a5362170 feat: add autocommand to ignore diagnostics in .env files 2024-11-03 01:08:33 -04:00
rootiest e7e6af17d2 feat: add configuration for file icons with specific glyphs 2024-11-03 01:08:08 -04:00
rootiest 1a8aa1a2b3 build: change wezterm-types source to gonstoll repository 2024-11-03 01:07:39 -04:00
rootiest ccf2691936 feat: enhance plugin loading mechanism
When lazy.nvim is not installed, plugins will attempt to load by
iterating through the directory and requiring each file
2024-11-03 01:07:12 -04:00
rootiest da252215c4 refactor: simplify module loading mechanism 2024-11-03 01:01:56 -04:00
rootiest 5650e45945 feat: add custom highlight for visual mode status column 2024-11-03 01:01:42 -04:00
rootiest 62551bb062 refactor: update condition for auto dark mode plugin 2024-11-03 01:01:25 -04:00
rootiest 930219051d feat: update Telescope plugins to include smart-open 2024-11-03 01:01:14 -04:00
rootiest 05d678de7c chore: update nvim-updater configuration for GitHub releases 2024-11-03 01:00:55 -04:00
rootiest 9586f22709 feat: rename 'Find Text' to 'Grep Text' for better clarity 2024-11-03 01:00:35 -04:00
rootiest 6bf5f8de94 feat: add auto-dark-mode conditional support 2024-11-03 01:00:26 -04:00
rootiest a211c67e03 feat: add post-configuration functions for enhanced functionality 2024-11-03 00:59:50 -04:00
rootiest e3b92f4714 Feat(picker): improve picker usability
Allows pickers to be more intelligently selected , if the cmd is unavailable on the preferred
picker, others are tried automatically
2024-10-16 14:05:05 -04:00
rootiest 38ebed3b0a Feat(picker): implement custom picker function
Allows for automated picker selection and some special features to make using pickers easier
2024-10-15 18:00:11 -04:00
rootiest 685ce4da70 🐛 Bug(lazydev): add back lazyvim to lazydev 2024-10-15 17:59:14 -04:00
rootiest c0e512ec4f perf: remove cmp sources for emoji/math/nerdfonts
NOTE: Use telescope symbols picker instead
2024-10-14 19:14:16 -04:00
rootiest e6be13ac99 feat: add new notify_updates optioon to nvim_updater 2024-10-14 19:13:14 -04:00
rootiest 65a0a2f6e5 fix: remove filetypes from drop opts 2024-10-14 19:12:52 -04:00
rootiest 6a9fcdc076 refactor: restructure plugin initialization for clarity 2024-10-12 05:52:54 -04:00
rootiest ba1d423d58 feat: enhance commit status display with additional options 2024-10-12 05:52:44 -04:00
rootiest 3efddc37a0 feat: add clear search highlight mapping 2024-10-12 05:52:11 -04:00
rootiest 048066d6a4 feat: add function to append modeline after the last line 2024-10-12 05:52:01 -04:00
rootiest f242b24d87 fix: disable auto cursorline option for improved visibility 2024-10-12 05:51:46 -04:00
rootiest 1883a4e021 refactor: remove outdated syntax highlighting configuration 2024-10-12 05:51:33 -04:00
rootiest 2648b5152e 🐛 Bug(keymap): search selected text exit visual 2024-10-12 05:50:30 -04:00
rootiest 77f00762a2 feat: implement toggle option for discord presence 2024-10-11 13:02:29 -04:00
rootiest 7f11d574fe 🚑 Quickfix(dev): revert dev mode enabling
Keep dev mode disabled
2024-10-11 12:59:10 -04:00
rootiest a09d836f0d feat: enhance statusline with icon and text concatenation 2024-10-11 12:49:00 -04:00
rootiest 77b20b2831 feat: consolidate dashboard button definitions into a single table 2024-10-11 12:48:39 -04:00
rootiest e912800a52 refactor: replace hardcoded disabled_plugins with external configuration 2024-10-11 12:48:28 -04:00
rootiest 7ef39df68f refactor: remove redundant Git conflict handling logic 2024-10-11 12:48:14 -04:00
rootiest 8a36aa3602 feat: add .styluaignore to exclude options.lua from formatting 2024-10-11 12:48:04 -04:00
rootiest 4a735ad4e3 refactor: streamline cmp provider logic and improve clarity 2024-10-11 06:54:59 -04:00
rootiest a8849c6a95 feat: add loading options for WezTerm types support 2024-10-11 06:54:36 -04:00
rootiest 8b41d2436f refactor: remove redundant autocommands for color scheme and mode changes 2024-10-11 06:54:11 -04:00
rootiest dd372e08dd feat: add autoformat option in configuration 2024-10-08 04:29:56 -04:00
rootiest edbbde6269 refactor: replace enabled property with conditional check 2024-10-08 04:29:44 -04:00
rootiest 2d0110cf61 refactor: improve status line configuration for clarity 2024-10-08 04:29:33 -04:00
rootiest bcb1114f1e feat: enhance clipboard integration with synchronization features 2024-10-08 04:29:10 -04:00
rootiest 0abd4ad6b7 refactor: clean up cmp provider setup for clarity 2024-10-08 04:28:50 -04:00
rootiest ae2ab84c67 feat: add markview.nvim plugin for enhanced markdown rendering 2024-10-08 04:27:40 -04:00
rootiest a59f6c896d feat: enhance image rendering configuration 2024-10-08 04:27:05 -04:00
rootiest b97c28ab71 feat: add support for note-taking functionality 2024-10-08 04:26:54 -04:00
rootiest 569505b073 refactor: replace 'enabled' with 'cond' for plugin configurations 2024-10-08 04:26:32 -04:00
rootiest b443e6ff91 feat: add ellipsis replacement functionality on InsertLeave 2024-10-08 04:25:31 -04:00
rootiest 8e12606aed feat: add conditional spellchecking feature 2024-10-08 04:24:53 -04:00
rootiest a3f83ecb1f refactor: remove unnecessary autocmd for text yank processing 2024-10-08 04:22:48 -04:00
rootiest 3550496ef5 fix: correct spelling of 'variants' in README 2024-10-08 04:22:36 -04:00
rootiest 2adc8d6286 ♻️ Refactoring(ai-tools): use cond instead of enabled
Use the `cond` option instead of `enabled` for ai-tool plugins so they won't be tagged for removal
when disabled
2024-10-06 02:20:16 -04:00
rootiest 92c306fab6 feat: add README for Rootiest Iosevka font collection 2024-10-05 23:51:13 -04:00
rootiest d6abaf27cd perf: better hardening against missing plugins
-- Handle missing plugins more cleanly
2024-10-04 16:58:54 -04:00
rootiest e2a4b53a26 feat: use rootiest fork of volt
-- Adds a 'VoltWindow' filetype to volt windows
2024-10-04 16:58:23 -04:00
rootiest d38f3938ad feat: add autoformat to options
-- Makes it clear how to disable autoformatting
2024-10-04 16:56:08 -04:00
rootiest 83a940713b feat: include custom fonts
- Include Rootiest Iosevka varients for ease of installation
2024-10-04 14:05:27 -04:00
rootiest 96c71019db fix: harden against missing plugins
- Avoid errors when plugins are disabled by checking for them before
calling them whenever possible
2024-10-04 14:01:46 -04:00
rootiest 69524bf589 perf: set special options for treesitter 2024-10-04 14:01:06 -04:00
rootiest 3cbae67bbd refactor: improve multicursor config 2024-10-04 14:00:41 -04:00
rootiest 1bdab9638f perf: improve cmp performance 2024-10-04 14:00:07 -04:00
rootiest 4655eb4ee5 perf: update neovide features 2024-10-04 13:59:33 -04:00
rootiest 92ee80d478 perf: remove unused telescope-symbols plugin 2024-10-04 13:59:08 -04:00
rootiest 0cc15bbd9c fix: switch back to nvim nightly 2024-10-04 13:58:44 -04:00
rootiest 5eceb02184 fix: re-enable yanky 2024-10-04 13:58:28 -04:00
rootiest 7b76fb6f95 feat: improve cmp source and provider 2024-10-04 13:58:17 -04:00
rootiest 4744f2057b feat: fancy up the logo a bit 2024-10-04 13:56:34 -04:00
rootiest 35d3eb30fd feat: add telescope symbols sources 2024-10-04 13:56:13 -04:00
rootiest 2c3ecca796 feat: introduce duck.nvim plugin with key mappings 2024-09-25 06:17:49 -04:00
rootiest 7aee452413 refactor: unify MultiCursor keybindings under <leader>m prefix 2024-09-25 06:17:38 -04:00
rootiest 6534bd49d1 fix: disable experimental cmp performance fork 2024-09-24 15:06:35 -04:00
rootiest f6f95098ce chore: standardize plugin override format 2024-09-24 14:52:02 -04:00
rootiest 94bf4a4276 feat: add function to get the appropriate ordinal suffix for a given number 2024-09-24 14:51:42 -04:00
rootiest 9e69a7d36a feat: add img-clip plugin with custom configuration 2024-09-24 14:51:25 -04:00
rootiest 452a983367 chore: replace andweeb/presence.nvim with IogaMaster/neocord 2024-09-24 14:51:15 -04:00
rootiest 58b141dcca feat: add support for Markdown rendering with custom heading borders 2024-09-24 14:50:41 -04:00
rootiest aa5351d41f feat: add multicursor support with new keybindings 2024-09-24 14:50:14 -04:00
rootiest e65a2e11d6 docs: update recommended terminal applications to include WezTerm 2024-09-24 14:49:31 -04:00
rootiest 1d5e9aeea2 feat: add Avante plugin support with configuration options 2024-09-24 14:49:22 -04:00
rootiest e5b552bab7 feat: add detailed status messages for updater terminal states 2024-09-24 14:48:30 -04:00
rootiest 7847ad6b54 feat: add support for drop screensaver 2024-09-24 14:46:11 -04:00
rootiest b949af32e7 chore: update graphic asset for logo 2024-09-24 14:41:59 -04:00
rootiest 5711b8ed33 fix: change verbosity setting to false in nvim-updater configuration 2024-09-21 10:32:52 -04:00
rootiest eafc647526 fix: correct condition check for filetype in lualine configuration 2024-09-21 08:02:03 -04:00
rootiest e3cea1a9f1 fix: correct condition check for neovim_updater_term filetype 2024-09-21 07:59:41 -04:00
rootiest 080994493d feat: add script glyphs for superscript and subscript numerals 2024-09-21 06:58:24 -04:00
rootiest e605f506cc feat(telescope): update telescope configuration with new extensions 2024-09-21 06:57:51 -04:00
rootiest c18c0cd1be feat: add configuration for floating-help.nvim plugin 2024-09-21 06:57:35 -04:00
rootiest 4b1259195b feat: add minimap highlight setup function 2024-09-21 06:57:21 -04:00
rootiest 98d2611699 feat: integrate diffview.nvim for enhanced git diff visualization 2024-09-21 06:57:04 -04:00
rootiest ef4bcae585 🐛 fix(comments)!: tweak comments.nvim mapping
Allows use of native gc mapping in VISUAL and comments.nvim via gC

BREAKING CHANGE: Changes default comment provider in VISUAL mode
2024-09-21 06:55:49 -04:00
rootiest 181797de7e feat: introduce status updates for Neovim Updater in lualine statusline 2024-09-21 06:54:36 -04:00
rootiest 396d43efde feat: add detailed comments for tab and indent character configurations 2024-09-21 06:53:39 -04:00
rootiest c9ce5a06c6 feat(qalc): add special keymappings for qalc windows 2024-09-21 06:53:03 -04:00
rootiest aa33c6e538 feat(ai): conditionally enable ChatGPT plugin 2024-09-16 14:05:18 -04:00
rootiest 16d98a918c feat: add customizable tab, indent, and scope characters 2024-09-16 13:48:59 -04:00
rootiest f1edd2aba0 feat: add LazyGit root detection on buffer enter 2024-09-16 09:46:38 -04:00
rootiest f9b9d23f9a feat: add nvim-remote support to streamline git operations 2024-09-16 09:46:29 -04:00
rootiest a73a24489a fix: ensure correct logo path assignment in dashboard configuration 2024-09-16 09:46:14 -04:00
rootiest a1bc76a018 feat: dynamic adjustment of dashboard layout padding 2024-09-16 06:34:46 -04:00
rootiest 153aee5333 refactor: update UndoTree plugin configuration for better user experience 2024-09-16 06:34:35 -04:00
rootiest f37a609b47 feat: introduce lazyvim extras for mini.indentscope Ui improvements 2024-09-16 06:34:20 -04:00
rootiest 04b057a757 feat: add additional configuration options to dashboard settings 2024-09-15 07:33:17 -04:00
rootiest da34d98a1c refactor: reorganize post-configuration functions into utils module 2024-09-15 06:14:16 -04:00
rootiest 651e931ce3 feat: include telescope-lazy and telescope-luasnip dependencies 2024-09-15 01:25:00 -04:00
rootiest d140f928ca feat: add new Telescope extensions including frecency, undo tree, and recent files 2024-09-15 01:07:03 -04:00
rootiest 70c3f4dc44 style: adjust layout padding based on window height 2024-09-14 22:16:20 -04:00
rootiest 3d758d1ebc fix: adjust dashboard layout calculation for dynamic resizing 2024-09-14 22:09:19 -04:00
rootiest 9df3cc52e9 refactor: update dashboard header design to ASCII art logo 2024-09-14 22:07:04 -04:00
rootiest 725c3533a1 fix: correct frecency picker invocation in dashboard and key mappings 2024-09-14 17:26:39 -04:00
rootiest 0affef0abc feat: add custom key mappings for visual mode text block movements 2024-09-14 17:04:57 -04:00
rootiest 5615d74659 feat: integrate Git status signs with MiniFiles 2024-09-14 15:22:01 -04:00
rootiest 7cda320f8c feat: add key mapping for paste overwrite 2024-09-14 15:21:49 -04:00
rootiest 22aa2b890a feat: add Neovim updater shortcut keys 2024-09-14 15:21:38 -04:00
rootiest 3689c29aae ♻️ refactor(nvim-updater): no need to specify cmds
don't lazy-load the updater
2024-09-14 03:37:18 -04:00
rootiest b6e3fb4965 feat(statusline): add Neovim updating status indicator with custom icon 2024-09-14 01:28:13 -04:00
rootiest 35e9c0a010 fix: ensure correct build type for Neovim source updates 2024-09-13 22:22:51 -04:00
rootiest 2e75d39c2d feat: add rootiest_dev option to enable/disable development mode for plugins 2024-09-13 09:26:32 -04:00
rootiest 2db14ae76a feat: introduce command to update Neovim via nvim-updater 2024-09-13 09:20:39 -04:00
rootiest 38e15a6336 chore: switch python LSP to pyright 2024-09-13 09:20:29 -04:00
rootiest 1aef517eb6 chore: update and expand mode indicators in types.lua 2024-09-13 09:20:11 -04:00
rootiest b0d0340116 feat: enhance highlighting with NeoCodeium suggestion as comment 2024-09-13 09:19:49 -04:00
rootiest 819a0a7480 feat(git): add support for Telescope Git Worktree 2024-09-13 09:19:37 -04:00
rootiest 795a442e9f feat: add Frecency Telescope extension 2024-09-13 09:19:29 -04:00
rootiest 00a9ad0c8c feat: add conditional support for Neocodeium plugin based on config 2024-09-13 09:19:14 -04:00
rootiest 56834c33c5 feat: integrate NeoCodeium status display in lualine 2024-09-13 09:18:44 -04:00
rootiest 1684b05f1b feat: add NeoCodeium chat function keymap 2024-09-13 09:18:34 -04:00
rootiest 07acf6cfa1 feat: add dynamic resizing for mini.files preview window 2024-09-13 09:18:20 -04:00
rootiest ac60ae333b chore: update lazy loader configuration settings 2024-09-13 09:17:40 -04:00
rootiest 10802e429e feat: add keymaps for visual mode text block movement 2024-09-13 09:17:27 -04:00
rootiest 49f547aed2 feat: add neocodeium status symbols to lualine statusline 2024-09-08 20:09:40 -04:00
rootiest 2bf3b86ef9 chore: remove old keymap function 2024-09-08 13:44:18 -04:00
rootiest 03ddd8b2c1 🐛 fix(multiplatform): adjustments to support multiple platforms 2024-09-06 10:48:58 -04:00
rootiest 273580f533 ♻️ refactor(full-scope)!: major revision refactoring
Code layout has been changed and improoved. Annotations are added for documentation. Automated through utility functions and data tables

BREAKING CHANGE: Tested from clean. Now properly uses LuaRocks to install dependencies.
2024-09-04 16:07:12 -04:00
rootiest b2731cff01 feat(funcs): add format option to get_os and add bufnr option to keymapping
Allows specifying the format of the os name output. Keymap add/remove functions can now optionally specify a bufnr for buffer-specific mappings.

Singificantly improved annotations/documentation of several functions as well.
2024-08-31 16:45:17 -04:00
rootiest 81f9ba4106 refactor: modularize git utilities using lazyvim plugins 2024-08-31 16:43:06 -04:00
rootiest 08387f83d5 feat: add colorful window separators plugin with customization options 2024-08-31 16:42:53 -04:00
rootiest 8458d56b52 feat: add cmdline history and prompt completion sources 2024-08-31 16:42:34 -04:00
rootiest 7ca3fae110 feat: enhance cache system for music and Wakatime integration with new options 2024-08-31 16:42:02 -04:00
rootiest 1fe385f572 feat: add flexible package manager detection in pigeon setup 2024-08-31 16:41:44 -04:00
rootiest d8cf018277 chore: update key mappings with LazyGit integration 2024-08-31 16:41:30 -04:00
rootiest 1fe3931dea docs: improve lazy.nvim documentation comments 2024-08-31 03:03:46 -04:00
rootiest cb63aa7a89 feat: enable round borders for completion window 2024-08-31 03:03:36 -04:00
rootiest bb22965c0f feat: add macOS and Windows shared object support in rocks configuration 2024-08-31 03:03:24 -04:00
rootiest b79f65f3a8 refactor: modularize error triggering and notifications 2024-08-31 03:03:05 -04:00
rootiest 6639a08fcd style: update section dividers for improved readability 2024-08-31 03:02:50 -04:00
rootiest a23fc9c643 feat(utils): add type annotations and inline documentation to various utility modules 2024-08-31 03:02:33 -04:00
rootiest 5ef3bc7445 refactor: separate utility functions for color conversion and LSP interactions 2024-08-31 03:02:11 -04:00
rootiest c12babd195 refactor: change global function definitions to module function definitions 2024-08-31 03:01:37 -04:00
rootiest 0fcb172fcc refactor: consolidate plugin dependencies into a central data source 2024-08-31 03:01:13 -04:00
rootiest ce3f339757 feat: add plugin reloader with exclusion list 2024-08-31 03:00:42 -04:00
rootiest 9157dbff10 chore: remove key binding for code action on selection 2024-08-31 03:00:26 -04:00
rootiest 62da778481 fix: change LazyGit terminal toggle to floating window 2024-08-31 02:59:35 -04:00
rootiest 4ca3350b50 feat: add Trouble support to the M table 2024-08-31 02:58:31 -04:00
rootiest 73187657f3 docs: add detailed function annotations with return types 2024-08-31 02:58:16 -04:00
rootiest af77292f5f refactor: improve add_keymap function to handle multiple keybind formats 2024-08-31 02:58:02 -04:00
rootiest 2676cf5157 feat: add function to check if the window is tall enough 2024-08-31 02:56:21 -04:00
rootiest 90237e41bd feat: add function to reload all plugins with exclusion list 2024-08-31 02:55:40 -04:00
rootiest d1d506c341 chore: add required plugins for lualine, minuet, and musiccontrols modules 2024-08-31 02:54:11 -04:00
rootiest 4155bb8e3f feat: add helper functions for managing keymaps with which-key support 2024-08-29 15:06:24 -04:00
rootiest d3ab2e0a39 style: adjust header formatting for improved readability 2024-08-29 15:06:09 -04:00
rootiest 5ee5086288 chore: ignore profile.json and rocks.toml in .gitignore 2024-08-29 15:05:54 -04:00
rootiest bb4e5bdc98 feat: integrate nvim-lspconfig with clangd offset encoding 2024-08-29 15:04:30 -04:00
rootiest d143f03026 feat: add keymap for inserting previous line indentation 2024-08-29 15:04:15 -04:00
rootiest ef011f2263 feat: add mini-move plugin to enhance text movement 2024-08-29 14:48:34 -04:00
rootiest 93e7a1afc4 feat: add on-click functionality to open LazyGit 2024-08-29 14:48:11 -04:00
rootiest 8ae7e9edb4 feat(lualine): add apply_todo_highlights function for enhanced icon highlighting 2024-08-29 14:47:57 -04:00
rootiest c9ff704dee feat: configure suda command to load vim-suda plugin 2024-08-29 14:47:32 -04:00
rootiest 25307d8d20 feat: enhance theme customization with additional plugin support 2024-08-29 14:47:12 -04:00
rootiest b32cfaa517 refactor: optimize transparency commands and mappings structure 2024-08-29 14:46:57 -04:00
rootiest 3a09669908 feat: add logo configuration with icon and color 2024-08-29 14:26:27 -04:00
rootiest a66e5b5dd4 feat: add Suda mode commands to cmd list 2024-08-29 14:26:07 -04:00
rootiest 95aa3ba040 docs: improve readability of options.lua with enhanced headers 2024-08-29 14:25:48 -04:00
rootiest 8f65f878a7 refactor: centralize all keybind definitions into data module 2024-08-29 14:25:29 -04:00
rootiest ac435892e9 feat: add experimental performance fork for nvim-cmp 2024-08-28 06:38:56 -04:00
rootiest 6405b16ef0 feat: add todos component to lualine sections and apply conditional rendering 2024-08-28 06:38:49 -04:00
rootiest 55b3e8125e feat: introduce customizable scope characters 2024-08-28 06:38:38 -04:00
rootiest f5b50cf8ff feat: add setup for transparency based on conditions 2024-08-28 06:38:23 -04:00
rootiest d6f7d68af1 fix: correct fallback themes order 2024-08-28 06:38:06 -04:00
rootiest b6445deed3 feat(dap): add integration with Neotest for various languages 2024-08-28 06:37:44 -04:00
rootiest 15c5832d79 refactor: update width limit for git blame display 2024-08-28 06:37:29 -04:00
rootiest a62b264d03 feat: add Rainbow Delimiters for colorful delimiter highlighting 2024-08-28 06:37:14 -04:00
rootiest 4cfa3e0fcf feat: integrate dockercomposelogs.nvim with telescope 2024-08-28 06:36:52 -04:00
rootiest 1653a9f1e5 refactor: improve readability of ignored_sources array in update_cache.sh 2024-08-28 06:36:33 -04:00
rootiest a7949a96fe feat: add automatic indentation insertion based on previous line 2024-08-28 06:36:13 -04:00
rootiest 04c5dbf2fe feat: add blinky utility function 2024-08-28 06:35:38 -04:00
rootiest 96a309216d feat: add profiling support with environment variable configuration 2024-08-28 06:35:28 -04:00
rootiest 40ad835130 feat: add blinky cursor utility module 2024-08-28 06:35:04 -04:00
rootiest 6b43b810c3 feat: introduce floating command window with history navigation 2024-08-28 06:34:45 -04:00
rootiest 766bee3671 refactor: restructured utils module for better code organization 2024-08-24 16:32:42 -04:00
rootiest c02ba52ff1 refactor: simplify data variable usage across multiple modules 2024-08-24 16:32:29 -04:00
rootiest ac9397a703 refactor: streamline build return logic for smart_splits 2024-08-24 16:31:49 -04:00
rootiest ef0dbf8962 refactor: consolidate data module imports into init.lua 2024-08-24 16:31:22 -04:00
rootiest ab91798473 refactor: standardize keymap addition with add_keymap helper 2024-08-24 16:31:05 -04:00
rootiest 85a47efa31 fix: ensure workspace dimensions return default in case of nil format 2024-08-24 16:30:48 -04:00
rootiest f438483ccf feat: add function to exit and save all buffers in Neovim 2024-08-24 16:28:25 -04:00
rootiest 1532836f1b feat(funcs): add alacritty terminal and kitty-scrollback checks
Add additional terminal detection functions.
2024-08-24 16:27:23 -04:00
rootiest 40fa00f90f refactor: extract common keymap properties to use data module functions 2024-08-24 16:24:09 -04:00
rootiest f74a0c9233 feat: add helper functions for key mappings and marks in Neovim 2024-08-24 16:23:33 -04:00
rootiest 41c1fe37d9 fix: ensure accurate detection of plugin installation across lazy, packer, and vim-plug 2024-08-24 16:22:32 -04:00
rootiest 4f827f7b08 style: configure lualine_a to show mode 2024-08-23 10:33:58 -04:00
rootiest 6d9f066bae refactor: rename rootilities to utils for consistency
Adds support for Arrow.nvim
Adds several other tweaks/modules
2024-08-23 10:10:36 -04:00
rootiest 3475deefcd feat: enable support for none-ls language server integration 2024-08-23 10:09:30 -04:00
rootiest 19002d1ebc feat: integrate arrow.nvim with custom options 2024-08-23 10:09:19 -04:00
rootiest e55a5d03d8 feat: introduce Ollama Copilot with dependencies to coding configuration 2024-08-23 10:08:36 -04:00
rootiest 9a6d4e4158 refactor: centralize configuration data to require data module 2024-08-23 10:04:54 -04:00
rootiest a6e251fe2a refactor: extract ignored player sources to array 2024-08-23 10:03:22 -04:00
rootiest 25143ee857 refactor: standardize naming for utility module 2024-08-23 10:02:23 -04:00
rootiest ccba071dce refactor: simplify hooks setup in highlight.lua 2024-08-23 10:01:35 -04:00
rootiest 0650f4c430 refactor(cache): use vim.fs.joinpath for constructing cache script path 2024-08-23 10:01:01 -04:00
rootiest f68c101f97 feat: add custom dashboard logo and update buttons in Alpha plugin 2024-08-23 10:00:29 -04:00
rootiest c522fa6101 ♻️ refactor(types): allow plugins to reference file/buffer types and other options from a single file
Allow plugins to use data.types for various tables/functions
2024-08-23 10:00:07 -04:00
rootiest 77534927af ♻️ refactor(keys): move plugin keys to a single file
Allows plugins to reference their keys table from data.keys
2024-08-23 09:58:02 -04:00
rootiest 5f1a8d3b4d ♻️ refactor(func): move some plugin functions to a single file
Allows plugins to reference functions (init, config, cond, etc) from data.func
2024-08-23 09:57:21 -04:00
rootiest 82ae6922e0 ♻️ refactor(cmd): move cmd options to a single file
Plugins can reference their cmd table from the data.cmd file
2024-08-23 09:56:26 -04:00
rootiest 679b0feeb9 feat: update preview file width and height based on dynamic logo dimensions 2024-08-23 09:54:45 -04:00
rootiest 7f083f26d1 style: modify cursor blinking settings for better visibility 2024-08-23 09:53:54 -04:00
rootiest 4e653fa516 refactor: rename variable rootilities to utils 2024-08-23 09:53:26 -04:00
rootiest f173aa61cb feat: integrate LuaRocks package manager 2024-08-23 09:49:52 -04:00
rootiest 2ffc7c3dd1 feat: add new logos for Eiscue, Marshadow, Pikachu, Porygon-Z, Rootiest, Snorlax, and Xerneas 2024-08-23 09:48:34 -04:00
rootiest 03d6b5ba7f ️ perf(cmp): improve cmp loading performance
Make better use of lazy-loading for nvim-cmp
2024-08-17 01:18:24 -04:00
rootiest c1bc5457b4 feat(gcode): add support for gcode
Add a plugin for gcode. A couple other tweaks to lazy-loading performance.
2024-08-17 01:17:44 -04:00
rootiest 06daaf3c56 feat(dashboard): add preliminary support for png images in dashboard header
Probably doesn't work yet, but this implements the check for it so they can be handled similarly to ANSI graphics
2024-08-17 01:16:58 -04:00
rootiest a84ecf1891 ️ perf(terminal): don't lazy-load smart-splits 2024-08-17 01:15:56 -04:00
rootiest 52948a9c74 🐛 fix(music-stats): add check for empty artist and title strings
Hide component when text is not present
2024-08-17 01:15:30 -04:00
rootiest 4c4fcb9f1a feat(sql): add support for sql development
Adds plugins, LSP, and other tools for database development
2024-08-17 01:14:34 -04:00
rootiest e11c87b11b 🥚 egg(git-blame): remove easter egg
Sorry :(
2024-08-17 01:13:53 -04:00
rootiest 28437b81d9 🧹 chore(comments): fix formatting
Fix the formatting in whitespace and comment text.
2024-08-17 00:45:22 -04:00
rootiest 349f80f7ea ♻️ refactor(rootilities): utils.rootilities -> utils.rootiest
Rename the rootilities module to make it less wordy
2024-08-17 00:43:49 -04:00
rootiest 82cc6d8757 ♻️ refactor(git-plugins): create a git category and move relevant plugins there
Moved git plugins into their own category
2024-08-17 00:41:28 -04:00
rootiest 27e429df43 🧹 chore(lazy): fix formatting
fix formatting in lazy bootstrap
2024-08-17 00:39:10 -04:00
rootiest 33f149c5d4 feat(keymaps): add some new keymaps
Add a nice shortcut for neotree with '
' and map 'ctrl+a' to select-all
2024-08-17 00:37:06 -04:00
rootiest 12ac01775b 🧹 chore(highlights): remove old commented code
Cleaning up junk
2024-08-17 00:35:35 -04:00
rootiest 1587ef5fed 🍻 beer(klipper-conf): attempted to define the klipper config format
This is probably wrong, but I wanted to hang on to it for now, until I can get a working solution.
2024-08-17 00:34:28 -04:00
rootiest f78f142ea6 feat(logo): add some alternative logo images 2024-08-17 00:33:09 -04:00
rootiest df40a4d505 🐛 fix(lualine): wrap in curlies
Make sure to wrap each component in curly braces for consistency.
2024-08-10 07:35:16 -04:00
rootiest 163aa7d656 ️ perf(cache_stats): keep last known value
Keep the last value from the cache file in case we can't read it or it's empty, we can fallback to the last value.
2024-08-09 05:37:09 -04:00
rootiest 6a17dac714 ️ perf(cache_stats): ensure only one instance
Ensures only a single instance of the cache_stats script is active
2024-08-09 05:36:04 -04:00
rootiest 41d18f5b9e feat(lualine): add rootilities windows_size function
Allows lualine components to set a minimum window width under which they will be hidden
2024-08-09 05:34:59 -04:00
rootiest 57c85a871f ♻️ refactor(rootilities): rooticolor -> rootilities
Rename rooticolor as it now includes more general utilities
2024-08-09 05:32:08 -04:00
rootiest 0c50bcd14b ♻️ refactor(cache-stats)!: refactor the wakatime and music stats modules
Modules now spawn the scripts automatically at startup and kill them at exit. Both stats are handled by a single script and a lockfile is used to avoid multiple instances spawning.

BREAKING CHANGE: Please remove any user services previously used to spawn scripts.
2024-08-08 22:40:00 -04:00
rootiest e28783da1f feat(smart-splits)!: add resize-mode keymap
Adds a keymap to initialize resize mode for splits.

BREAKING CHANGE: This requires an accompanying change in the kitty
config (see commit: rootiest-kitty- #9998018)
2024-08-08 22:37:40 -04:00
rootiest d640bb6816 🐛 fix(wakatime): address missing wakatime data
When the wakatime_stats cache file is missing or empty, return an empty string so lualine will hide the component
2024-08-08 04:16:27 -04:00
rootiest fc141873e9 📝 docs(readme): add brag about keymapping 2024-08-07 23:55:25 -04:00
rootiest 36f1071d27 ♻️ refactor(keymaps): refactor the keymaps definition
Refactor the which-key keymapping configuration to be more efficient and readable
2024-08-07 19:59:03 -04:00
rootiest e321ac039b ♻️ refactor(terminal): remove redundant plugins
Remove plugins made redundant by smart-splits
2024-08-07 19:58:18 -04:00
rootiest dd925faa82 🐛 fix(catppuccin): small tweaks to catpppuccin theme 2024-08-07 19:57:35 -04:00
rootiest 5414d062a7 💡 source-docs(source-docs): use comment labels
Adds some labels in comments to better identify keymaps/options
2024-08-07 19:56:52 -04:00
rootiest 6e47d1a8c5 feat(dashboard): allow for ansi in dashboard
Allows the dashboard to properly detect and display ANSI files
2024-08-07 19:55:34 -04:00
rootiest 73bce16090 ♻️ refactor(neocodeium): refactor neocodeium keymaps
Properly configure neocodeium keymaps with lazy
2024-08-07 19:54:41 -04:00
rootiest d08f7043a8 ♻️ refactor(rootiest): remove autospell
Remove autospell feature and tweak LazyGit toggler
2024-08-07 19:53:51 -04:00
rootiest bd102d4daa ♻️ refactor(highlight): move highlight file
Move highlight file to utils
2024-08-07 19:53:05 -04:00
rootiest aeed123f0e ♻️ refactor(lazygit): lazygit tweaks
Small tweaks to lazygit configuration
2024-08-07 19:52:17 -04:00
rootiest eaf6a26b40 💡 source-docs(source-docs): cleanup code comments
Clean up some messy comments and old commented code.
2024-08-07 08:34:25 -04:00
rootiest 17f28e16ac ️ perf(edgy)!: remove edgy plugin
Remove the edgy plugin for better compatibilty with smart-splits and mouse control. This allows split windows to behave more consistently.

BREAKING CHANGE: Much of the behavior of splits will be different after this change. Edgy provided pre-configured layouts for most common splits and we will instead be using more generic layouts. That said: resizing splits is now working correctly!
2024-08-07 08:32:52 -04:00
rootiest ff00aba1fe ️ perf(lazy): use lazier defaults
Use lazy loading by default and increase the laziness where possible.
2024-08-07 08:30:33 -04:00
rootiest d7f341a733 🐛 fix(keymaps)!: update keymaps for smart-splits compatibility
Update the keymaps to use smart-splits instead of kitty-navigator.

BREAKING CHANGE: This requires an accompanying config change in kitty. These keymaps will need further updating to be configured in the smart-splits plugin or which-key.
2024-08-07 08:27:44 -04:00
rootiest b2c77965a2 ♻️ refactor(kitty)!: replace kitty-navigator with smart-splits
Replace the kitty-navigator plugin with the more generally compatible and feature-rich smart-splits plugin.

BREAKING CHANGE: This change requires an accompanying change in the kitty config. See the rootiest-kitty repo for changes.
2024-08-07 08:24:38 -04:00
rootiest a323b3b4d6 ♻️ refactor(themes)!: name and lazy-load all themes
Give all the themes definitive names and lazy-load all but the main
ones.
2024-08-07 08:22:17 -04:00
rootiest 7cd893a4c1 📝 docs(readme): fix typo
fix a small typo in the README
2024-08-07 08:21:01 -04:00
rootiest e1e59bfea5 ♻️ refactor(utils): move stats modules to utils
Move wakatime_stats and music_stats to new utils dir
2024-08-07 08:20:30 -04:00
rootiest 25352b81a0 ♻️ refactor(rooticolor): move color utilities to module
Create a rooticolor module for color utilities that are used in multiple locations in config
2024-08-07 08:19:21 -04:00
rootiest 4674922b23 feat(harpoon): add harpoon
Add Harpoon plugin to config
2024-08-07 08:17:11 -04:00
rootiest e0d459de1c feat(dashboard): tacotime!
Implement taco ANSI art on dashboard
2024-08-07 08:15:32 -04:00
rootiest 582819f2a5 🎨 style(style): update header line style
Use fancier style for header lines
2024-08-06 08:44:31 -04:00
rootiest d125eefdf4 🎨 style(style): improve heading style
Use fancier box style for headings
2024-08-06 05:15:24 -04:00
rootiest 844b571bff ♻️ refactor(coding): switch to neocodeium, re-build cmp, move ai and cmp to their own lua files
Change codeium provider to neocodium. Re-build the nvim-cmp configuration to integrate better. Move ai plugins to ai.lua. Move cmp plugin to cmp.lua. This will make the code easier to navigate.
2024-08-06 02:47:25 -04:00
rootiest a28685fc22 💄 ui(lazy.nvim): add some UI tweaks for lazy.nvim
Add a border and title to lazy.nvim plugin manager window
2024-08-06 02:45:04 -04:00
rootiest a43e7f988a feat(lualine): implement recorder plugin in lualine
Removes "mode" section and imnplements recorder section
2024-08-06 02:44:08 -04:00
rootiest 1b2918bc1d feat(dashboard): re-implement remote-nvim on dashboard 2024-08-06 02:43:12 -04:00
rootiest 9572bdd0a8 ♻️ refactor(core): add scrolloff plugin, move some plugins to new core category
Add scroll-off plugin. Move "core" plugins to a new lua file
2024-08-06 02:42:45 -04:00
rootiest b7f5faf961 🐛 fix(astral): fix bug with astral in auto-darkmode
Auto-darkmode needs to properly require astral plugin
2024-08-06 02:40:53 -04:00
rootiest c2935cabff feat(util): re-source autosave, re-add remote-nvim, and remap icon-picker key
Use a better provider for auto-save plugin. Re-implement the remote-nvim plugin. Re-map the icon-picker key in insert mode to <C-.>
2024-08-06 02:40:00 -04:00
rootiest a850e33415 feat(music-stats): improve stats format and add additional metadata
Improves the shortening function. Adds loop, shuffle, and volume metadata. Uses better seperator characters to improve reliability.
2024-08-06 02:37:57 -04:00
rootiest 0745c33aec 📝 docs(readme): update options section
Update the Options section on the README documentation to reflect the current method of setting rootiest options.
2024-08-04 18:01:21 -04:00
rootiest e83cca3265 🎨 style(options): add style to options file
Add some style, particularly to the ROOTIEST section of the options configuration file
2024-08-04 18:00:24 -04:00
rootiest 0792328281 ️ perf(nvim-cmp): toggle cmp sources based on ft
Allow some/all cmp sources to be enabled/disabled depending on the filetype of the buffer
2024-08-04 17:59:32 -04:00
rootiest 55cb66892e feat(qalc): add qalc plugin for mathing
Adds the qalc plugin to allow for math equations to be evaluated
2024-08-04 17:58:20 -04:00
rootiest b622454835 ️ perf(lazy-load): delegate plugins to their cmd/keymaps
Increase performance: Allow plugins to only load with their commands and keymaps whenever possible
2024-08-04 06:57:07 -04:00
rootiest 335fe93d8a feat(fzf)!: switch to fzf-lua instead of telescope
Change the picker provider to fzf-lua and remove telescope plugin

BREAKING CHANGE: Telescope is removed. Fzf-lua provides equivalent functionality. However, the remote-nvim plugin depended on Telescope so it has also been removed.
2024-08-04 04:00:45 -04:00
rootiest 7f50e6b76e ️ perf(image): refactor image renderer lazy-loading
Only load the Image rendering plugin in appropriate filetypes (like markdown)
2024-08-04 03:59:04 -04:00
rootiest ebb26fe3ee ♻️ refactor(keymaps): refactor keymaps for performance
Better keymap performance by smarter loading of dependencies and plugins
2024-08-04 03:55:33 -04:00
rootiest d161476fa8 🐛 fix(highlights): fix highlight autocommands
Make better use of autocommands for the various highlight configurations
2024-08-04 03:54:26 -04:00
rootiest 1b04fccdcf 🐛 fix(auto-save): fix auto-save triggers
Auto-save should be initialized on BufEnter rather than InsertEnter to cover edge cases like pasting without ever entering insert mode.

Fixes bug where auto-save plugin doesn't initialize if insert mode was never entered, despite the buffer being modified.
2024-08-04 03:30:26 -04:00
rootiest 07f7707e67 📝 docs(readme): add screenshots, update image links and features
Add a Screenshots section. Update image links to use proper syntax and relative paths where possible. Update some features and add lualine features to docs.
2024-08-04 03:28:34 -04:00
rootiest 0b9d2ac853 📝 docs(screenshots): add screenshots
Add some screenshots for use in the documentation
2024-08-04 03:26:28 -04:00
rootiest 1cb641b326 ️ perf(wakatime): use script to cache wakatime stats
Refactor wakatime lualine component to use an external script to cache the wakatime stats
2024-08-03 22:46:21 -04:00
rootiest f625c215a7 ️ perf(music-stats): use script to cache music stats
Refactor music-stats lualine component to use an external script to cache the metadata
2024-08-03 22:45:30 -04:00
rootiest b36d8622f7 ♻️ refactor(lualine): refactor lualine configuration
Initiate lualine configuration with lualine plugin
2024-08-03 22:43:43 -04:00
rootiest 61bd1b6863 feat(git-blame): refactor git-blame lualine component
Implement git-blame lualine component via the git-blame plugin initialization
2024-08-03 22:42:50 -04:00
rootiest 454168565f ♻️ refactor(post): remove post-plugin configuration files
No longer necessary to do post-plugin configurations
2024-08-03 22:41:42 -04:00
rootiest 06171ebf29 feat(lualine): added highlighting to several lualine sections
Adds highlighting that should respect the current theme for several custom lualine sections
2024-08-03 04:50:18 -04:00
rootiest 12b51dc2f6 feat(music-stats): implement several new functions for music stats
Adds several new functions for retreiving the metadata and mode of the current music player
2024-08-03 04:48:39 -04:00
rootiest 944adb2be0 feat(wakatime): add get_total_minutes function
Adds a function that returns an integer representing the total coding minutes for today
2024-08-03 04:47:30 -04:00
rootiest e05544e4f0 feat(lualine): implement custom lualine sections
Implements lualine sections for WakaTime, wordcount, searchcount, music
metadata, git-blame and more!

Also implements automatic truncating throughout so that sections will
truncate or hide depending on the available space.
2024-08-03 02:43:35 -04:00
rootiest f9bb9490f7 feat(mason-lspconfig): ensure mason auto-installs lsp
Ensures mason will automatically install any missing but required LSPs
2024-08-03 02:38:53 -04:00
rootiest 64b70e8e15 feat(git-blame): add git-blame plugin
Add the git-blame plugin and some missing comments
2024-08-03 02:37:57 -04:00
rootiest b83301974d ♻️ refactor(post): trigger post-plugin configurations after all other functions
Triggers the post-plugin configuration scripts after every plugin has been initialized
2024-08-03 02:37:03 -04:00
rootiest 016abee200 🎨 style(highlights): tweak indentline scope glyph
Use a more appropriate glyph for the indentline scope icon
2024-08-03 02:35:01 -04:00
rootiest fde97ae974 ♻️ refactor(config.rootiest)!: load config.rootiest before plugins
Modify init to load rootiest config module before plugins are loaded.
2024-08-02 09:27:48 -04:00
rootiest 7c856aaaa5 🧹 chore(astral): inconsequential testing changes in astral plugin 2024-08-02 09:26:51 -04:00
rootiest 4d8dc08a11 🐛 fix(keymaps): remove gS keymap as it conflicts
Remove <leader>gS keymap, use <leader>lg instead
2024-08-02 09:24:54 -04:00
rootiest 2d66d2fa97 feat(utils): add music controls, add capsword, fix thanks.nvim, remove fugitive
Add music controls and capsword plugins, fix a bug in thanks.nvim plugin, and remove fugitive plugin as it is redundant with other plugins
2024-08-02 09:23:27 -04:00
rootiest fd31bae2a8 feat(coding): implement splitjoin plugin and enable codeium chat 2024-08-02 09:18:56 -04:00
rootiest c56be45d65 feat(highlights): implement highlighting module
Highlighting module applies highlighting customizations and other font/color enhancements across several plugins
2024-08-02 09:15:53 -04:00
rootiest 0f3b9c0469 feat(keymaps): add a keymap for yank entire file
Adds <leader>Y to yank the whole buffer contents
2024-07-28 14:41:25 -04:00
rootiest 23969bc981 🚸 ux(indent-line): use numbered indent blocks 2024-07-28 14:40:40 -04:00
rootiest c66dd30b8c 🧹 chore(astral): remove old commented code 2024-07-28 14:40:04 -04:00
rootiest ce36735b4d 🎨 style(theme): tweak theme styling 2024-07-28 14:39:00 -04:00
rootiest 108d2bc932 🗑️ deprecation(installer): remove install script
Remove install script. Users can install neovim on their own.
2024-07-27 07:24:02 -04:00
rootiest c2a233c401 🧑‍💻 devxp(cz): implements commitizen >>> 5m
Implements commitizen with gitmoji and conventional commits
2024-07-27 06:47:17 -04:00
rootiest e78ced4ea0 feat(astral): update astral config
Update astral config to define the new fallback_themes option
2024-07-27 06:13:51 -04:00
rootiest 8d6780c448 feat(ui): add nekifotch for kitty font management
Adds Nekifotch plugin to allow config of kitty font from inside neovim
2024-07-27 06:10:25 -04:00
rootiest 64f860517b style(nvim-config): add comments and remove redundant config options
Add comment for Rootiest Config and remove some redundant options from codewindow plugin
2024-07-27 06:08:24 -04:00
rootiest a6c65eec6c feat: Define Leader Key
- Defines the default leader key
2024-07-26 14:08:32 -04:00
rootiest a2ee0c6617 🚀feat!: Add astral.nvim
- Remove rootiest.nvim plugin
- Implements astral.nvim
2024-07-26 14:06:08 -04:00
rootiest 994eae073b 😎 Implements rootiest.nvim plugin
- Remove rootiest module
- import through new rootiest.nvim plugin
- See: https://github.com/rootiest/rootiest.nvim
2024-07-25 05:51:27 -04:00
rootiest 05670570f1 🧙 Implement Rootiest Module
- Major Update!!!
- Implements a rootiest module
  - Consolidates much of the settings
  - Improves usability and efficiency
- Faster Loading
- Cleaner Structure
- More keymaps and plugins now have conditional loading
2024-07-24 13:45:52 -04:00
rootiest f38daf087c 📝 Tweak Comment Wording
- Minor adjustment to wording of comments
2024-07-24 12:58:58 -04:00
rootiest 91f8370faf 🎨 Theme Update
- Add Zenbones theme
- Integrate grug_far in catppuccin
2024-07-23 22:29:41 -04:00
rootiest c028da522b 🪄 Substitution/Navigation
- Faster/smarter plugin loading
- Substitution motions with the 'x' and 'X' keys
- Fold navigation with Ctrl+hjkl
- Various small tweaks for usability
2024-07-23 04:59:45 -04:00
rootiest e16d2a4c8e 🦸 Hardmode keymap
- Hardmode for learning better vim motion habits
- Press '<leader>h' to toggle
  - Toggles Precognition hints
  - Toggles Hardtime plugin
2024-07-22 17:58:49 -04:00
rootiest 8bfaed4e73 🐙 Add GitLinker
- Quickly create (and yank) links to code blocks on git repos
- Select text in nvim -> Get link on github

- Tweak to hardtime:
  - Always include hardtime plugin
  - Toggle 'enabled' setting with .hardtime
2024-07-22 17:56:57 -04:00
rootiest 87ede3565e 🐸 Add Leap Plugins
- Implements Leap and Flit
  - Use the 's' and 'S' keys to quickly jump to two-character sets
  - Use the 'f' and 'F' keys to quickly jump to single-character
instances
2024-07-22 17:54:14 -04:00
rootiest bb685342d6 📦 Add install script option
- Include an alternative install method
  - Uses a shell script to install the config
  - If NeoVim is not installed, will download the AppImage
  - Designed to be more user-friendly than running commands manually
2024-07-22 08:34:19 -04:00
rootiest 6e3fb50642 Ignore user settings files
- Don't sync user-settings, they will be generated on-the-fly
2024-07-22 08:17:55 -04:00
rootiest 64f3d5f152 Clear User Config files
- Delete local copies, allow automatic generation
2024-07-22 08:14:48 -04:00
rootiest c035d57d5a Ignore user settings
- These files don't need to be synced, they will be created if missing
2024-07-22 08:11:53 -04:00
rootiest 65bbf7fd61 💡 Add better plugin comments
- Add an identifying comment for each plugin
2024-07-21 11:57:56 -04:00
rootiest 2a510fd163 👾 Add support for hardtime
- Helps improve vim motion use and best practices
- Disabled by default
- Enable by changing the value of .hardtime to 'true'
2024-07-21 11:56:49 -04:00
rootiest 94c34b9963 🧠 Add support for minuet-ai
- Adds an additional ai-completion provider: minuet-ai
2024-07-21 08:12:15 -04:00
rootiest f5649bf44e 🎁 Only star manually
- Only use thanks plugin to star plugin repos manually
- Don't auto-run by default
2024-07-21 08:10:32 -04:00
rootiest 4f06ad2f96 📦 Add fugitive
- Alternative git tool
2024-07-20 19:32:24 -04:00
rootiest 01170a0866 Yank Line-text
- Add a user command: ':YankLine'
- Add a keymap: 'yo'
- Yanks the line excluding any leading whitespace
2024-07-20 12:12:23 -04:00
rootiest 02bc1c9d54 🎨 Fancify hlchunck
- Add fancy glyphs and colors
- Reduce visibility and auto-dark the colors
- Reduces distraction while still providing information

- Make cmp-yanky only use history from the same filetyle
2024-07-19 20:43:38 -04:00
rootiest 2ff69ae0a7 💬 Languages
- Add cmake, docker, java
- Tweak markdown-preview build command
2024-07-19 20:41:23 -04:00
rootiest 53eff3cf8b 📦 Tweaks to install script
- Mostly formatting
2024-07-19 20:40:23 -04:00
rootiest 0727aaf133 💤 Don't Lazy-load themes
- Override the default lazy=true for catppuccin and tokyonight
2024-07-19 20:39:49 -04:00
rootiest f2b66088b3 📦 Add a basic install script
- Downloads Neovim if not found
- Detects and backs up existing config
- Installs Rootiest NeoVim config
- Starts NeoVim
2024-07-19 12:09:22 -04:00
rootiest d996af3811 🖥️ Terminal Tweaks
- Adjustments to WezTerm and Tmux configs
2024-07-19 12:06:15 -04:00
rootiest c1dd778e47 Checks for .settings files
- Checks for missing files and creates them
- More efficient handling of those settings
2024-07-18 14:14:08 -04:00
rootiest 47825ea80b 🚚 Rename plugin categories
- Rename:   dap -> debug
- Rename:  lang -> languages
2024-07-18 13:36:05 -04:00
rootiest a804fa6c94 🚚 Better structure
- Reorganize plugins
- Eliminate ui directory
- Follows proper config structure
2024-07-18 13:31:21 -04:00
rootiest 29af0b31b1 🎨 Formatting
- Minor formatting fixes
2024-07-18 13:30:06 -04:00
rootiest 823f28c448 🚚 Reorganize Themes
- Put the themes all into a single file
- Eliminate the themes directory
2024-07-18 13:28:42 -04:00
rootiest 2029c6176a 🚚 Merge terminal-specific into one file
- Organize all terminal-specific configs into one place
- Add some tmux and wezterm plugins
2024-07-18 13:27:28 -04:00
rootiest 91238d3358 💡 A tiny nerdy bit of flair
- Drop some nerd font glyphs into the logo ascii
2024-07-18 12:03:57 -04:00
rootiest 6f291c16e6 Add Image support
- Optional, only in compatible terminals
- change the value in .useimage to 'false' to disable
2024-07-18 11:51:22 -04:00
rootiest 5705b6a414 Add thanks.nvim
- Can automatically star all plugin repos
2024-07-18 11:50:22 -04:00
rootiest 61928834a3 🐛 Which-key update
- Remove 'modes' option (deprecated)
- Add slight transparancy to window
2024-07-18 11:48:41 -04:00
rootiest adc3950b54 Git Conflict Markers
- Adds autocmd to work with git conflicts
2024-07-18 11:47:29 -04:00
rootiest fa4ed71101 🗑️ Remove redundant lines
- Plugins no longer re-using defaults
2024-07-17 14:57:21 -04:00
rootiest 4d9175837d 🔎 Add Lazy Profiling
- Adds additional debugging flags to better track plugin loading times
2024-07-17 14:56:39 -04:00
rootiest fa863bc6a1 📝 Update README
- Update with latest features
- Add WakaTime feature to Options
2024-07-17 10:47:17 -04:00
rootiest e70547407b ⏱️ Add WakaTime
- Allows monitoring your coding on a dashboard
- Can be disabled by setting the value in .wakafile to 'false'
2024-07-17 10:46:23 -04:00
rootiest c5610a92fe 🐇 Lazy Efficiency 💤
- Made tweaks to plugin loading triggers that decreased loading time by
nearly half!
- On my system:
  - Previously: ~89ms
  - Now:        ~52ms
2024-07-17 06:34:33 -04:00
rootiest dac0a8b790 Add Gitmoji Completion
- Adds gitmoji to completion sources
2024-07-17 06:26:38 -04:00
rootiest ee720bad12 🖋️ Prettier Formatting
- Just some small formatting tweaks to non-code
2024-07-17 05:53:57 -04:00
rootiest 37167e63d0 🧙 Zen Mode
- Add Zen Mode feature
2024-07-17 05:53:21 -04:00
rootiest 8f3df3e569 🧙 Completion
- Add additional completion sources:
  - yanky
  - env
  - calc
  - conventionalcommits
- Add more friendly completion mappings
2024-07-17 05:52:58 -04:00
rootiest 302817f9dd 📦 Better Lazy Config
- Use proper directory structure
- Loading order improved
2024-07-16 17:35:52 -04:00
rootiest d05d335464 🐸 Add substitute plugin
- Paste alternative
2024-07-16 16:18:54 -04:00
rootiest f1848a334e 🧠 Update Readme Features/Options
- Update features list
- Add options section
- Fix some typos
2024-07-16 15:58:56 -04:00
rootiest b19c10c746 🧠 User-selectable AI completion!
- Allows choosing the ai-completion tool you prefer
- Options are:
  - codeium (default)
  - copilot
  - tabnine
  - none
2024-07-16 15:58:09 -04:00
rootiest e97d2f4c70 Add user dictionary
- Add a few words common in this config
2024-07-16 15:55:44 -04:00
rootiest f4b43cdba3 Tweak leader config
- Set the default before even performing check
- Overset it if there's one to load
2024-07-16 14:44:17 -04:00
rootiest fcfb8e6e00 🧠 Reorganize packaging
- Better organized and more efficient
2024-07-16 14:37:11 -04:00
rootiest 0648c5d38b 🎹 Explicitly define the leader key
- Define the leader key as ' '
2024-07-16 11:06:16 -04:00
rootiest 65b4ed135c 🎨 Add themes
- Add Eldritch theme
- Add monochrome theme
2024-07-16 11:05:39 -04:00
rootiest 11b4110201 Theme hlchunk
- Implement various themes for hkchunk
2024-07-16 11:04:44 -04:00
rootiest 0c310abc09 Add Keymap for Transparency
- Adds '<leader>wt' to toggle Transparancy
2024-07-16 11:04:03 -04:00
rootiest 965bf540d6 🧠 Coding Features
- Remove Comment (use native feature)
- Make hlchunk colors dynamic
- Add Alternate to quickly switch between c and headers
2024-07-15 18:45:26 -04:00
rootiest fde4226473 🧠 Implement Precognition
- (disabled by default) press 'zk' to toggle on/off
- Shows available vim motions in gutter
2024-07-15 06:51:23 -04:00
rootiest e497dd3726 🖼️ Tweak to ASCII art
- small adjustment to spacing
2024-07-14 13:24:53 -04:00
rootiest 60b35456f7 💤 Better Lazy Management
- Allow more plugins to lazy-load
2024-07-14 11:10:24 -04:00
rootiest bf1be126fa 🎨 Automatic Colorscheme
- Store/restore the colorscheme when changed
- Falls back on $KITTY_THEME and then the default catppuccin-frappe
2024-07-14 00:38:52 -04:00
rootiest 803b2712bf 🗒️ Add paper colorscheme
- A nice light theme
2024-07-14 00:37:15 -04:00
rootiest 820f313567 🖋️ Formatting
- Add headers to category files
2024-07-14 00:36:04 -04:00
rootiest 196d3ee59e 📦 Projects and plugins
- Adds Projects option
- Reorganize plugins
2024-07-13 11:52:54 -04:00
rootiest 25e4ffc62d 🎹 Keybinds Update
- Finally move all keymappings into which-key
- Change to MunsMan/kitty-navigator.nvim
- Change mapping for switching window/split to Ctrl+Shift+<vim-motion>
- Add some new mappings like 'gt' for LazyGit Terminal split
2024-07-13 06:17:29 -04:00
rootiest 2807567e34 🖍️ Plugin and Theme Formatting
- Formatting cleanup
2024-07-12 21:39:48 -04:00
rootiest 274617da24 🌛 Auto-Dark
- Move auto-dark-mode to themes
2024-07-12 21:39:01 -04:00
rootiest 350db0c342 🖥️ Add WezTerm Support
- Only loaded when WezTerm is used
2024-07-12 21:38:04 -04:00
rootiest a2492d0eed ✏️ Formatting
- Fix documentation formatting
2024-07-12 20:36:12 -04:00
rootiest 7a297751eb 👾 Update Documentation Logo Art
- Tweaks to the logo ascii art
2024-07-12 20:22:54 -04:00
rootiest d8f65bf749 📝 Update Readme
- Use new improved ascii art
2024-07-12 20:08:41 -04:00
rootiest 238882ae45 🎨 Theme != Lazy
- Don't lazy-load themes
- No speed benefit
- Allows proper autocomplete of colorscheme names
2024-07-12 20:04:03 -04:00
rootiest 549d9a1ce1 🎨 More Themes
- Add a number of new themes
- Organize themes into separate subdirectory
- All themes are unloaded until selected
- Catppuccin and TokyoNight are loaded by default
2024-07-12 20:00:26 -04:00
rootiest 8453755346 🐛 Lua Debug Adapter
- Include Lua debug adapter
2024-07-12 19:03:34 -04:00
rootiest 83b3ce29f5 👁️🗨️ Which-key Update
- Implement the new which-key spec
- Particularly: ICONS!
2024-07-12 18:55:02 -04:00
rootiest 3528cfa1cb 💬 Spell Correction
- Move spell correction mappings to separate file
2024-07-12 18:54:25 -04:00
rootiest ff02af26e2 🎹 Which-key Spec Update
- Update mappings to the new which-key spec
2024-07-12 17:36:16 -04:00
rootiest b3fc675137 🔭 Bring back telescope
- Reverts fzf-lua
- Brings back telescope and telescope-fzf-native
- Re-enable other features/plugins that used telescope
2024-07-12 05:02:01 -04:00
rootiest 011db19c81 🎨 Add optional theme
- Adds rose-pine theme
- Only loaded if specifically requested, no additional resources
2024-07-12 05:00:35 -04:00
rootiest 043f5c274a 🔎 Switch to fzf-lua
- Remove telescole-fzf-native
- Add fzf-lua via lazyvim
2024-07-12 04:40:08 -04:00
rootiest 71bae98b9a 🗑️ Remove SuEdit
- Remove SuEdit plugin
- Easier/more reliable to just use suedit
2024-07-11 04:31:41 -04:00
rootiest a504191ee4 🗝️ Add SuEdit
- Allows detecting and prompting for sudo
- When the user doesn't have permission to edit the file in buffer
2024-07-11 03:40:16 -04:00
rootiest a9a4ac3704 🌳 Explorer Quick Access
- Add 'E' keybind in Normal for opening file explorer
2024-07-11 03:39:00 -04:00
rootiest 23c82c4797 🪄 Abbreviations
- Added a decent set of abbreviations for auto-correcting commonly
mispelled words
2024-07-11 01:40:32 -04:00
rootiest 17621217b0 🗑️ Remove LuaSnip
- Using nvim-snip instead
2024-07-11 01:39:23 -04:00
rootiest 61ab7ad0d1 🌐 Add gx plugin
- Allows a more polished link-opener that supports more features
2024-07-11 01:38:47 -04:00
rootiest 4990475a9a 🎨 Aesthetics
- Consistent look across plugin files
2024-07-11 01:37:48 -04:00
rootiest 7541561384 🎨 Colorizer Plugin
- Colors text that represents color values
2024-07-10 15:26:48 -04:00
rootiest 719660dc41 😴 User-is-bored Plugin
- Implements an unimplemented "feature" from the help docs
- Press the same key a LOT of times to see
2024-07-10 15:26:00 -04:00
rootiest 5ac6378b5f 📱 Remote Session
- Changed keymap for Remote Session quicklaunch on dashboard
2024-07-10 13:28:29 -04:00
rootiest 95524e7f4e 🎨 Style Update
- Change gui font to Iosevka
- Fix Kitty-theme function
2024-07-10 13:20:04 -04:00
rootiest 98b174e74e 👾 More Logo Art
- Added Rootiest Neovim color graphic logo
- Added Rootiest Neovim nocolor graphic logo
2024-07-10 13:11:48 -04:00
rootiest b50e321bab 👾 Logo Updates
- Update Config Logo
- Update dashboard to use logo art files
2024-07-10 12:38:56 -04:00
rootiest bbe2ebd470 👾 Logo Art
- Add initial set of logo art files
2024-07-10 12:38:09 -04:00
rootiest b9aea22ad7 🎨 Ansi-Escape Script
- Allows interpreting of ANSI-escaped text
2024-07-10 12:36:07 -04:00
rootiest a7d3c2773b 🪄 Add Icon Picker
- Add icon-picker plugin for easy icon/glyph selection
2024-07-10 09:41:59 -04:00
rootiest 125680fe5c 🐙 Add Octo plugin
- Adds support for various github features
- Issues, PRs, etc
2024-07-10 04:51:15 -04:00
rootiest 7ef0a07c17 🎨 Style cleanup
- More polished style config
2024-07-10 04:50:29 -04:00
rootiest 55bf4d3387 🔎 Implement rip-substitute
- A nice clean and functional search-replace
- Complements Spectre, does not replace it
2024-07-10 04:48:26 -04:00
rootiest 960abb1abd 🗑️ Cleanup and reorganize
- Remove unused junk and slim down the config
2024-07-10 04:46:54 -04:00
rootiest 7584f7f430 🗑️ Clean Duplicates
- Remove duplicate autocmd for chezmoi
2024-07-09 16:36:31 -04:00
rootiest 21b4bcee03 📸 Update CodeSnap Font
- Change the font used in CodeSnap to Iosevka
2024-07-09 14:47:20 -04:00
rootiest 2f133cc547 🗑️ Discard Old Configs
- Discard the leftover configs that are no longer used
2024-07-09 14:46:19 -04:00
rootiest 64715b251f 💤 LazyGit and Gists
- Implement LazyGit and integrate with UI
- Implement Gists:
  - Create Gist from file or selection
  - Find existing gists and open them for editing
2024-07-09 09:26:46 -04:00
rootiest 84f12e6524 🖼️ NeoVIM Logo
- Add a logo to
  - README
  - init.lua
2024-07-08 16:14:40 -04:00
rootiest c0a3511384 🧙 Major Restructuring Update
- Plugins are now properly organized into separate folders.
- General configurations are also now organized by category into
folders.
- Now using lazyvim-defined plugins whenever possible for a more
consistent and clean experience.
- Duplicate manual plugin definitions were removed.
- Extensive testing has been performed to ensure config works on fresh
installs and a variety of systems.
- Further slimming of manual plugins and an updated dependency list is
forthcoming.
2024-07-08 10:17:08 -04:00
rootiest 5c3dcaddd7 Check for root user
Check for root user and disable some plugins that don't play nice
2024-07-07 16:00:08 -04:00
rootiest 8c73137d9b docs: 📝 Improve lazy loading explanation
Mention in documentation how excessive use of lazy loading may sometimes result in plugins appearing to be missing
2024-07-06 21:24:09 -04:00
rootiest a28251287b feat: Add Ayu theme
Include (lazy) Ayu theme with kitty theme integration
2024-07-06 13:24:42 -04:00
rootiest 971ec9fb7e Update documentation 2024-07-06 10:56:07 -04:00
rootiest f7204c015e feat: AI Code-completion
Implements AI code completion powered by Codeium
2024-07-06 07:57:52 -04:00
rootiest bdc40625de feat: Introduce additional UI and integration features
Added more kitty-specific functionality and some additional UI improvements and further refined plugin loading
2024-07-06 07:27:44 -04:00
rootiest 511a6112e4 style: ✏️ Fix non-critical whitespace typo
Minor typo that affected justification in some commented whitespace text
2024-07-06 06:26:31 -04:00
rootiest e93a334c70 refactor: 🚚 Prefer Lazy Configs
Make better use of Lazy and define configs inside the plugin def
2024-07-06 06:23:28 -04:00
rootiest 59af690b22 style(nvim): 🎨 Freshen Up
Removed lazyvim.json. Clones will be treated as new configs
2024-07-06 05:01:32 -04:00
rootiest a1617c82c9 Delete .vscode directory
That's embarrassing! 🥴
2024-07-06 04:54:24 -04:00
rootiest ba36300a61 style(nvim): 🎨 Housekeeping
Formatting and linting housekeeping
2024-07-06 04:50:54 -04:00
rootiest 6cc857d8f7 first commit 2024-07-06 04:29:41 -04:00
128 changed files with 99618 additions and 2402 deletions
+5
View File
@@ -0,0 +1,5 @@
default_units = true
warnings_as_errors = false
recipe_ref_check = true
max_depth = 10
extensions = "all"
+7
View File
@@ -0,0 +1,7 @@
[tool.commitizen]
name = "cz_gitmoji"
tag_format = "$version"
version_scheme = "semver"
version = "0.0.1"
update_changelog_on_bump = true
major_version_zero = true
+20 -177
View File
@@ -1,177 +1,20 @@
# Plugin installs (managed by vim.pack)
/pack/
# Compiled / cached Lua
**/*.luac
/lua/__pycache__/
# LSP and tool data
/.luarc.json.bak
/lsp/
# Session and state files
/session/
/sessions/
/.session
# Swap, backup, undo files
*.swp
*.swo
*~
*.bak
# Logs
*.log
# id: gi-patterns-aa0d0d1d58f24039fa0491e40c78bb9f
# Created by https://www.toptal.com/developers/gitignore/api/lua
# Edit at https://www.toptal.com/developers/gitignore?templates=lua
### Lua ###
# Compiled Lua sources
luac.out
# luarocks build files
*.src.rock
*.zip
*.tar.gz
# Object files
*.o
*.os
*.ko
*.obj
*.elf
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
*.def
*.exp
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# End of https://www.toptal.com/developers/gitignore/api/lua
# id: gi-patterns-be86a7264ac20631fa0112bcaff396d7
# Created by https://www.toptal.com/developers/gitignore/api/vim
# Edit at https://www.toptal.com/developers/gitignore?templates=vim
### Vim ###
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
*~
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
# End of https://www.toptal.com/developers/gitignore/api/vim
# id: gitig-boilerplate-129366cbf5c6513e388d0725c2e4923b
# ╭──────────────────────────────────────────────────────────╮
# │ GitIgnore Boilerplate Template │
# ╰──────────────────────────────────────────────────────────╯
#
# ──────────────────── OS-Generated Files ────────────────────
# automatic backup files created by some editors (e.g., Vim, Emacs)
*~
# temporary files created if a process still has a handle to a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# MacOS junk
.DS_Store
Thumbs.db
# Linux trash folder which might appear on any partition or disk
.Trash-*
# files created when an open file is removed but is still being accessed
.nfs*
# ─────────────────── Debug/Temporary/Testing ────────────────
# Matches OLD / .OLD
[Oo][Ll][Dd]/
.[Oo][Ll][Dd]/
# Matches DISABLE / .DISABLE
[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
# Matches DISABLED / .DISABLED
[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
# Matches DEBUG / .DEBUG
[Dd][Ee][Bb][Uu][Gg]/
.[Dd][Ee][Bb][Uu][Gg]/
# Matches TMP / .TMP
[Tt][Mm][Pp]/
.[Tt][Mm][Pp]/
# Matches TEMP / .TEMP
[Tt][Ee][Mm][Pp]/
.[Tt][Ee][Mm][Pp]/
# Matches TEMPORARY / .TEMPORARY
[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
.[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
# Matches TESTING / .TESTING
[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
.[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
# ─────────────────── AI Sessions and Rules ──────────────────
# Matches CLAUDE.md, .claud*, etc.
[Cc][Ll][Aa][Uu][Dd][Ee].[Mm][Dd]
.[Cc][Ll][Aa][Uu][Dd]*
# Matches GEMINI.md, .gemin*, etc.
[Gg][Ee][Mm][Ii][Nn][Ii].[Mm][Dd]
.[Gg][Ee][Mm][Ii][Nn]*
# Matches ANTIGRAVITY.md, .antigrav*, etc.
[Aa][nN][Tt][Ii][Gg][Rr][Aa][Vv][Ii][Tt][Yy].[Mm][Dd]
.[Aa][Nn][Tt][Ii][Gg][Rr][Aa][Vv]*
# Matches AGENTS.md, .remember, etc.
[Aa][Gg][Ee][Nn][Tt][Ss].[Mm][Dd]
.[Rr][Ee][Mm][Ee][Mm][Bb][Ee][Rr]
# ──────────────────────────────────────────────────────────────
lazy-lock.json
.luarc.json
.neoconf.json
lazyvim.json
debug/
.aitool
.colorscheme
.hardtime
.leader
.useimage
.wakatime
.ignore-deps
profile.json
rocks.toml
extras/
/home/rootiest/.cache/nvim
qalc
test.lua
.cache/
deprecated/
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

+17 -668
View File
@@ -1,674 +1,23 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
MIT License
Preamble
Copyright (c) 2024 Rootiest (https://github.com/rootiest)
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+215 -138
View File
@@ -1,154 +1,231 @@
# 🌙 Rootiest Neovim
# Rootiest Neovim Configuration
A modern, modular, and high-performance Neovim configuration built from scratch with a focus on simplicity, speed, and standard Neovim primitives.
[![Plugins](https://dotfyle.com/rootiest/rootiest-nvim/badges/plugins?style=flat)](https://dotfyle.com/rootiest/rootiest-nvim)
[![Leaderkey](https://dotfyle.com/rootiest/rootiest-nvim/badges/leaderkey?style=flat)](https://dotfyle.com/rootiest/rootiest-nvim)
[![Plugin Manager](https://dotfyle.com/rootiest/rootiest-nvim/badges/plugin-manager?style=flat)](https://dotfyle.com/rootiest/rootiest-nvim)
![Neovim](https://img.shields.io/badge/Neovim-0.10+-blue?logo=neovim)
![License](https://img.shields.io/badge/License-GPLv3+-green)
## ✨ Highlights
- **Built-in Package Management**: Exclusively uses `vim.pack` for lightweight, native plugin management.
- **Phased Loading**: Async, non-blocking startup using a phased `VimEnter` queue for a snappy experience.
- **Unified Registry**: Configuration is managed via a global `_G.Config` registry, ensuring cross-plugin consistency.
- **High Performance**: Featuring **blink.cmp** (Rust-based completion) and optimized **Snacks.nvim** components.
- **AI-Powered**: Native integration with **GitHub Copilot** — inline completions via **blink-copilot** and multi-line refactoring via **Sidekick.nvim** Next Edit Suggestions (NES).
- **User-Centric QoL**: Hybrid line numbers, autosave-on-edit, and seamless system clipboard integration.
- **Resilient & Portable**: Intelligent terminal title management (Kitty + Fallback), automatic project root detection, and machine-local override support.
- **Lean & Readable**: ~850 lines of Lua code (excluding comments and blanks).
## 📁 Architecture
The configuration is strictly modular:
- `init.lua`: Entry point, bootstrap, global state initialization, and machine-local overrides.
- `lua/bootstrap.lua`: Early runtime setup — redirects Neovim's data/state paths when running as root (e.g. via a symlinked `~/.config/nvim`), preventing root sessions from polluting or conflicting with the user-level install.
- `lua/lazyload.lua`: Logic for async and phased plugin loading.
- `lua/options.lua`: Global Vim settings, auto-reload, root management, and terminal title logic.
- `lua/plugins.lua`: Plugin declarations and detailed registry-based configurations.
- `lua/keymaps.lua`: Centralized user-facing keybindings.
- `lua/const.lua`: Stores constant values (like dashboard headers) for the configuration.
## 🔌 Plugin Stack
### Core UI
- **Catppuccin**: Primary colorscheme (Mocha flavour).
- **Lualine**: Statusline with Git diff and line-by-line Gitsigns blame.
- **Noice**: Modern UI for cmdline (popup), messages, and LSP hover.
- **Snacks**: High-performance dashboard, explorer, and pickers.
- **Nvim-web-devicons**: Consistent icons across UI components.
### Editing & Navigation
- **Flash**: Enhanced motion and search.
- **Focusline**: Keeps the active line at a configurable screen position (30%) during scrolling motions.
- **Mini.ai**: Better text objects (including `g` for entire buffer).
- **Mini.surround**: Surround text objects (add/delete/change).
- **Mini.pairs**: Auto-close brackets and quotes.
- **Persistence**: Session management.
- **Which-key**: Interactive keybinding documentation.
- **Gitsigns**: In-buffer git indicators and line highlights.
- **Grug-far**: Project-wide search and replace.
- **Gx.nvim**: Smart URL/reference opener under cursor.
- **Comment-box**: Decorative comment boxes and lines.
- **Undotree**: Visual undo history browser.
- **Haunt.nvim**: In-buffer annotation and bookmark manager. Integrates with the Snacks picker for browsing bookmarks and exposes `haunt_all` / `haunt_buffer` prompt contexts to Sidekick AI sessions.
- **Zen Mode**: Distraction-free editing.
- **Qalc**: Inline calculator via `qalculate`.
### LSP & Completion
- **Blink.cmp** + **blink.lib**: High-performance Rust-based completion. Auto-detects binary across install layouts; falls back gracefully if unavailable. Rebuilds automatically on `PackChanged`.
- **blink-copilot**: Surfaces GitHub Copilot inline suggestions inside the blink.cmp completion menu.
- **Sidekick.nvim**: AI assistant providing Next Edit Suggestions (NES) for multi-line refactoring via the Copilot LSP, plus an integrated AI CLI terminal (`<leader>aa`) with context-aware prompts. Snacks picker integration sends selections to the active AI session via `<Alt-a>`.
- **LSPConfig + Mason**: Managed LSP support for Lua, C/C++, Rust, Python, Fish, and Shell.
- **Conform**: Formatter with format-on-save and range formatting.
- **Inc-rename**: Incremental LSP rename with live preview.
- **Lazydev**: Neovim Lua type definitions for `lua_ls`.
### Terminal
- **Kitty Scrollback**: Browse Kitty terminal scrollback buffer inside Neovim.
## 🛠️ System Dependencies
To ensure all features (pickers, formatters, and LSPs) work correctly, the following packages are required:
### Essential Tools
- `git`, `curl`, `unzip`, `build-essential` (or `base-devel`)
- `ripgrep` (Grep support)
- `fd` (Fast file finding)
- `fzf` (Fuzzy finder fallback)
- `lazygit` (Git TUI)
- `gh` (GitHub CLI integration)
- `xclip` / `xsel` (X11) or `wl-copy` (Wayland) for clipboard sync.
### Runtime Environments
- `Node.js` & `npm` (Copilot and various LSPs)
- `Python3` & `pip` (Python LSPs)
- `Cargo` (Rust toolchain, required for building `blink.cmp`)
- `qalculate` (optional, required for the Qalc calculator plugin)
### Installation Commands
**Debian / Ubuntu:**
```bash
sudo apt install git ripgrep fd-find fzf lazygit gh xclip nodejs npm build-essential curl unzip
```none
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░ ░░░░ ░░░░ ░░░ ░░ ░░ ░░░ ░░░ ░
▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒
▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓
█ ███ ████ ████ ███ ████ ██████ ██████████ ██████ ███████████████ ███████ ████
█ ████ ████ ████ ████████ ██████ ██ ███ ████████ ████
█████████████████████████████████████████████████████████████████████████████████████████████
░░░░░░░░░░░ ░░░ ░░ ░░░ ░░░ ░░░░ ░░ ░░ ░░░░ ░░░░░░░░░░░
▒▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓▓▓ ▓ ▓ ▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓
█████████████ ██ ███ █████████ ████ ████ █████████ ██████ █ █ █████████████
█████████████ ███ ███ ███ ██████ ███████ ██ ████ ██████████████
█████████████████████████████████████████████████████████████████████████████████████████████
,l; c,
.:ooool' loo:.
.,oooooooo:. looooc, /VVVVVVVV\++++ /VVVVVVVV\
ll:,loooooool, looooool \VVVVVVVV/++++++\VVVVVVVV/
llll,;ooooooooc. looooooo |VVVVVV|++++++++/VVVVV/'
lllllc,coooooooo; looooooo |VVVVVV|++++++/VVVVV/'
lllllll;,loooooool' looooooo +|VVVVVV|++++/VVVVV/'+
lllllllc .:oooooooo:. looooooo +++|VVVVVV|++/VVVVV/'+++++
lllllllc 'loooooool,:ooooooo +++++|VVVVVV|/VVV___++++++++++
lllllllc ;ooooooooc,cooooo +++|VVVVVVVVVV/##/ +_+_+_+
lllllllc .coooooooo;;looo +|VVVVVVVVV___ +/#_#,#_#,\
lllllllc ,loooooool,:ol |VVVVVVV//##/+/#/+/#/'/#/
'cllllc .:oooooooo;. |VVVVV/'+/#/+/#/+/#/ /#/
.;llc .loooo:. |VVV/'++/#/+/#/ /#/ /#/
,; ;l; 'V/' /##//##//##//###/
```
**Arch Linux:**
```bash
sudo pacman -S git ripgrep fd fzf lazygit github-cli xclip nodejs npm base-devel curl unzip
The rootiest neovim configuration you will ever see!
## Pre-requisites
> Note:
> While Neovim may run without these prerequisites,
> functionality will be limited.
> For the full experience, it is recommended to install the pre-requisites.
### Required
- [git](https://git-scm.com/) -
Version control system
- [luarocks](https://luarocks.org/) -
Lua package manager
- [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts/) -
Font with extended glyphs
Your terminal/client application **_must_** have a Nerd Font installed
and support the Nerd Font glyphs.
WezTerm, Kitty, or NeoVide are recommended.
### Optional
- [ripgrep](https://github.com/BurntSushi/ripgrep) -
A faster grep
- [fzf](https://github.com/junegunn/fzf) -
A command-line fuzzy finder
- [fd](https://github.com/sharkdp/fd) -
A simple, fast and user-friendly alternative to 'find'
- [lazygit](https://github.com/jesseduffield/lazygit) -
A simple terminal UI for git commands
- [kitty](https://sw.kovidgoyal.net/kitty/) -
A fast, feature-rich, GPU based terminal emulator
- [NeoVide](https://neovide.dev/) -
A fast, feature-rich, and modern Neovim GUI
- [fish](https://fishshell.com/) -
A smart and user-friendly command line shell
## Installation
1. Install [Neovim](https://github.com/neovim/neovim/blob/master/INSTALL.md) (0.9+)
2. Install Pre-requisites
3. Backup your current nvim configuration (if you have one)
```sh
mv ~/.config/nvim ~/.config/nvim.bak
```
4. Clone the repository
```sh
git clone git@github.com:rootiest/rootiest-nvim ~/.config/nvim
```
5. Enjoy! 🎉
## Keep your current nvim configuration
This will download and open the Rootiest Neovim configuration
without replacing your current Neovim configuration.
1. Clone the repository
```sh
git clone git@github.com:rootiest/rootiest-nvim ~/.config/rootiest/rootiest-nvim
```
2. Open Neovim with this config:
```sh
NVIM_APPNAME=rootiest/rootiest-nvim/ nvim
```
3. Enjoy! 🎉
4. Fall in love and see [Installation](#installation)
## Features
- Comfortable keybindings and PDE-like features
- Automatically check for Neovim updates
- Able to build Neovim updates from source for nightly or any release (on Linux)
- Built like a distro. Highly customizable and extensible without writing any code!
- Designed to be quick to load and easy to use without compromising on features
- Leans heavily on lazy and luarocks for plugin management and lazy-loading
- Catppuccin theme is default but a selection of others are also included
- Automatic light/dark mode switching based on system theme
- Extensive special configurations for kitty, including theme matching
- Kitty scrollback and keybinding support
- Special configuration for neovide
- Detects terminal client and adjusts accordingly
- ToggleTerm, fzf-lua, neotree, etc. for quick access to files and terminal
- Many UI elements to enhance the experience
- LSP support for many languages and automatic setup for many more
- Remotely spawn a Neovim instance over ssh, in a container, or from a git repo
- Dashboard logo adjusts to the size of the window
- Beautiful, unique, and feature-rich lualine statusline
- When available, git-blame, WakaTime and music player stats components displayed
in lualine ![Lualine](.screenshots/lualine.png)
- Warning system for missing dependencies
- User-selected AI completion tool:
`codeium`, `copilot`, `tabnine`, `minuet`, or `none`
- WakaTime integration: Tracking time spent on code
- Hardtime integration: Trains better use of vim motions and shortcuts
- Colorscheme is remembered between sessions with [astral.nvim](https://github.com/rootiest/astral.nvim)
- Highlight group customizations that are colorscheme-compliant
- Lean and fast while providing a complete professional experience
- Achieves sub-75ms startup time on my personal laptop, goal to never exceed 100ms
- Now with more efficient, refactored keymappings!
## Screenshots
Features and
<details>
<summary>Main Neovim PDE</summary>
![Neovim UI](.screenshots/nvim-ui.png)
</details>
<details>
<summary>Dashboard</summary>
![Neovim Dashboard](.screenshots/dashboard.png)
</details>
<details>
<summary>Markdown view with inline images</summary>
![Neovim Markdown](.screenshots/markdown.png)
</details>
<details>
<summary>Neovide Transparency</summary>
![NeoVide Features](.screenshots/neovide.png)
</details>
## Options
Options are configured in the `config/options.lua` file.
All of the options are documented showing their possible values.
This file allows you to select between various plugins and configurations without
needing to write any configuration code yourself.
```lua
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ROOTIEST ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.g.aitool = "codeium" --Options: codeium, copilot, tabnine, minuet, none
vim.g.usewakatime = true --Options: true, false
vim.g.usehardtime = false --Options: true, false
vim.g.useimage = true --Options: true, false
```
## 🚀 Getting Started
## Companion Tools
### Installation
[Rootiest WezTerm](https://github.com/rootiest/rootiest-wezterm) -
A wezterm configuration that is designed to work with this Neovim configuration.
```bash
git clone https://git.rootiest.dev/rootiest/neovim-config.git ~/.config/nvim
nvim
```
[Rootiest Kitty](https://github.com/rootiest/rootiest-kitty) -
A kitty configuration that is designed to work with this Neovim configuration.
### Post-Install
[Rootiest Fish](https://github.com/rootiest/rootiest-fish) -
A fish configuration that pairs well with this Neovim configuration.
1. **Build Blink**: Completion auto-rebuilds on `PackChanged`. If it still isn't working, run `cargo build --release` inside `~/.local/share/nvim/site/pack/core/opt/blink.cmp`.
2. **LSP Servers**: Run `:Mason` to monitor the installation of Language Servers.
3. **Copilot**: Run `:LspCopilotSignIn` to authenticate, then `:checkhealth sidekick` to verify the Sidekick NES integration is working.
[Rootiest Tmux](https://github.com/rootiest/rootiest-tmux) -
A tmux configuration that is designed to work with this Neovim configuration.
### Machine-Local Overrides
[Rootiest Vim](https://github.com/rootiest/rootiest-vim) -
A Vim configuration that pairs well with this Neovim configuration.
Place machine-specific or secret configuration in `~/.config/.user-dots/nvim/local.lua` or `~/.config/.user-dots/nvim/secrets.lua`. These files are sourced automatically at startup if present, and are intentionally outside the repo to avoid accidental commits.
[Rootiest Iosevka Font](https://github.com/rootiest/rootiest-iosevka) -
A custom Iosevka font that is designed by developers, for developers.
## ⌨️ Key Features & Mappings
[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts/) -
A collection of fonts that includes many icons and glyphs used in this configuration.
| Key | Description |
| :--- | :--- |
| `<leader><space>` | Smart Find Files (Snacks) |
| `<leader>e` | File Explorer (Snacks) |
| `<leader>sr` | Search and Replace (Grug-far) |
| `<leader>gg` | Open Lazygit |
| `<leader>qs` | Restore Last Session (Persistence) |
| `<leader>cf` | Format Buffer (Conform) |
| `<leader>uu` | Toggle Undo Tree |
| `<leader>z` | Toggle Zen Mode |
| `gd` / `gr` | Goto Definition / References |
| `K` | Hover Documentation |
| `s` / `S` | Leap Motion (Normal/Window) |
| `ys` / `ds` / `cs` | Surround (Add/Delete/Change) |
| `gx` / `gX` | Open URL under cursor (Gx.nvim) |
| `<Tab>` *(insert)* | Advance snippet → NES suggestion → native inline completion → fallback |
| `<Tab>` *(normal)* | Jump to / apply Sidekick NES suggestion |
| `<leader>aa` | Toggle Sidekick AI CLI terminal |
| `<leader>as` | Select AI tool (Sidekick) |
| `<Alt-a>` *(picker)* | Send picker selection to active AI CLI session |
| `<leader>ha` | Annotate current position (Haunt) |
| `<leader>ht` | Toggle annotation visibility (Haunt) |
| `<leader>hd` | Delete bookmark (Haunt) |
| `<leader>hn` / `<leader>hp` | Next / Previous bookmark (Haunt) |
| `<leader>hl` | Browse all bookmarks in picker (Haunt) |
| `<leader>cbb` | Create Centered Comment Box |
| `<leader>cbl` | Create Centered Comment Line |
| `<leader>cbd` | Delete Comment Box/Line |
| `<leader>cbk` | Browse Box Style Catalog |
| `:Q` | Forced Write-All and Quit |
## Dotfiles
## 📜 License
[Rootiest Dotfiles](https://github.com/rootiest/dotfiles)
Distributed under the **GPLv3 or later** License. See `LICENSE` for more information.
## Credits
- [Folke Lamaitre](https://github.com/folke)
- [Evgeni Chasnovski](https://github.com/echasnovski)
- [LazyVim](https://github.com/LazyVim/LazyVim)
- [Elijah Manor](https://github.com/elijahmanor/elijahmanor)
+392
View File
@@ -0,0 +1,392 @@
-- This file is generated by ex-colors. The credit goes to the authors and contributors of the original colorscheme catppuccin-mocha.
vim.api.nvim_set_var('colors_name', 'ex-catppuccin-mocha')
vim.api.nvim_set_hl(0, '@attribute', { link = 'Constant' })
vim.api.nvim_set_hl(0, '@comment.documentation', { link = 'Comment' })
vim.api.nvim_set_hl(0, '@comment.error', { bg = 15961000, fg = 1973806 })
vim.api.nvim_set_hl(0, '@comment.note', { bg = 9024762, fg = 1973806 })
vim.api.nvim_set_hl(0, '@comment.todo', { bg = 15912397, fg = 1973806 })
vim.api.nvim_set_hl(0, '@comment.warning', { bg = 16376495, fg = 1973806 })
vim.api.nvim_set_hl(0, '@constant.builtin', { fg = 16429959 })
vim.api.nvim_set_hl(0, '@constant.macro', { link = 'Macro' })
vim.api.nvim_set_hl(0, '@constructor', { fg = 7653356 })
vim.api.nvim_set_hl(0, '@diff.delta', { link = 'diffChanged' })
vim.api.nvim_set_hl(0, '@diff.minus', { link = 'diffRemoved' })
vim.api.nvim_set_hl(0, '@diff.plus', { link = 'diffAdded' })
vim.api.nvim_set_hl(0, '@function.builtin', { fg = 16429959 })
vim.api.nvim_set_hl(0, '@function.call', { link = 'Function' })
vim.api.nvim_set_hl(0, '@function.macro', { fg = 9757397 })
vim.api.nvim_set_hl(0, '@function.method', { link = 'Function' })
vim.api.nvim_set_hl(0, '@function.method.call', { link = 'Function' })
vim.api.nvim_set_hl(0, '@keyword.conditional', { link = 'Conditional' })
vim.api.nvim_set_hl(0, '@keyword.conditional.ternary', { link = 'Operator' })
vim.api.nvim_set_hl(0, '@keyword.coroutine', { link = 'Keyword' })
vim.api.nvim_set_hl(0, '@keyword.debug', { link = 'Exception' })
vim.api.nvim_set_hl(0, '@keyword.directive', { link = 'PreProc' })
vim.api.nvim_set_hl(0, '@keyword.directive.define', { link = 'Define' })
vim.api.nvim_set_hl(0, '@keyword.exception', { link = 'Exception' })
vim.api.nvim_set_hl(0, '@keyword.function', { fg = 13346551 })
vim.api.nvim_set_hl(0, '@keyword.import', { link = 'Include' })
vim.api.nvim_set_hl(0, '@keyword.modifier', { link = 'Keyword' })
vim.api.nvim_set_hl(0, '@keyword.operator', { link = 'Operator' })
vim.api.nvim_set_hl(0, '@keyword.repeat', { link = 'Repeat' })
vim.api.nvim_set_hl(0, '@keyword.return', { fg = 13346551 })
vim.api.nvim_set_hl(0, '@keyword.type', { link = 'Keyword' })
vim.api.nvim_set_hl(0, '@lsp.type.interface', { fg = 15912397 })
vim.api.nvim_set_hl(
0,
'@markup.heading',
{ bold = true, cterm = { bold = true }, fg = 9024762 }
)
vim.api.nvim_set_hl(
0,
'@markup.italic',
{ cterm = { italic = true }, fg = 15442092, italic = true }
)
vim.api.nvim_set_hl(0, '@markup.link', { link = 'Tag' })
vim.api.nvim_set_hl(0, '@markup.link.label', { link = 'Label' })
vim.api.nvim_set_hl(0, '@markup.link.url', {
cterm = { italic = true, underline = true },
fg = 16113884,
italic = true,
underline = true,
})
vim.api.nvim_set_hl(0, '@markup.list', { link = 'Special' })
vim.api.nvim_set_hl(0, '@markup.list.checked', { fg = 10937249 })
vim.api.nvim_set_hl(0, '@markup.list.unchecked', { fg = 8357020 })
vim.api.nvim_set_hl(0, '@markup.math', { fg = 9024762 })
vim.api.nvim_set_hl(
0,
'@markup.quote',
{ bold = true, cterm = { bold = true }, fg = 15442092 }
)
vim.api.nvim_set_hl(0, '@markup.raw', { fg = 9757397 })
vim.api.nvim_set_hl(
0,
'@markup.strikethrough',
{ cterm = { strikethrough = true }, fg = 13489908, strikethrough = true }
)
vim.api.nvim_set_hl(
0,
'@markup.strong',
{ bold = true, cterm = { bold = true }, fg = 15442092 }
)
vim.api.nvim_set_hl(0, '@markup.underline', { link = 'Underlined' })
vim.api.nvim_set_hl(
0,
'@module',
{ cterm = { italic = true }, fg = 11845374, italic = true }
)
vim.api.nvim_set_hl(0, '@property', { fg = 11845374 })
vim.api.nvim_set_hl(0, '@punctuation.bracket', { fg = 9673138 })
vim.api.nvim_set_hl(0, '@punctuation.delimiter', { link = 'Delimiter' })
vim.api.nvim_set_hl(0, '@string.documentation', { fg = 9757397 })
vim.api.nvim_set_hl(0, '@string.escape', { fg = 16106215 })
vim.api.nvim_set_hl(0, '@string.regexp', { fg = 16429959 })
vim.api.nvim_set_hl(0, '@string.special', { link = 'Special' })
vim.api.nvim_set_hl(0, '@string.special.path', { link = 'Special' })
vim.api.nvim_set_hl(0, '@string.special.symbol', { fg = 15912397 })
vim.api.nvim_set_hl(0, '@string.special.url', {
cterm = { italic = true, underline = true },
fg = 16113884,
italic = true,
underline = true,
})
vim.api.nvim_set_hl(0, '@tag', { fg = 13346551 })
vim.api.nvim_set_hl(
0,
'@tag.attribute',
{ cterm = { italic = true }, fg = 9757397, italic = true }
)
vim.api.nvim_set_hl(0, '@tag.delimiter', { fg = 9034987 })
vim.api.nvim_set_hl(0, '@type.builtin', { fg = 16376495 })
vim.api.nvim_set_hl(0, '@type.definition', { link = 'Type' })
vim.api.nvim_set_hl(0, '@variable', { fg = 13489908 })
vim.api.nvim_set_hl(0, '@variable.builtin', { fg = 15961000 })
vim.api.nvim_set_hl(0, '@variable.member', { fg = 11845374 })
vim.api.nvim_set_hl(0, '@variable.parameter', { fg = 15442092 })
vim.api.nvim_set_hl(0, 'Boolean', { fg = 16429959 })
vim.api.nvim_set_hl(0, 'Character', { fg = 9757397 })
vim.api.nvim_set_hl(0, 'ColorColumn', { bg = 3224132 })
vim.api.nvim_set_hl(
0,
'Comment',
{ cterm = { italic = true }, fg = 9673138, italic = true }
)
vim.api.nvim_set_hl(0, 'Conceal', { fg = 8357020 })
vim.api.nvim_set_hl(
0,
'Conditional',
{ cterm = { italic = true }, fg = 13346551, italic = true }
)
vim.api.nvim_set_hl(0, 'Constant', { fg = 16429959 })
vim.api.nvim_set_hl(0, 'CurSearch', { bg = 15961000, fg = 1579045 })
vim.api.nvim_set_hl(0, 'Cursor', { bg = 13489908, fg = 1973806 })
vim.api.nvim_set_hl(0, 'CursorColumn', { bg = 1579045 })
vim.api.nvim_set_hl(0, 'CursorIM', { bg = 13489908, fg = 1973806 })
vim.api.nvim_set_hl(0, 'CursorLine', { bg = 2763580 })
vim.api.nvim_set_hl(0, 'CursorLineNr', { fg = 11845374 })
vim.api.nvim_set_hl(0, 'Delimiter', { fg = 9673138 })
vim.api.nvim_set_hl(
0,
'DiagnosticError',
{ cterm = { italic = true }, fg = 15961000, italic = true }
)
vim.api.nvim_set_hl(0, 'DiagnosticFloatingError', { fg = 15961000 })
vim.api.nvim_set_hl(0, 'DiagnosticFloatingHint', { fg = 9757397 })
vim.api.nvim_set_hl(0, 'DiagnosticFloatingInfo', { fg = 9034987 })
vim.api.nvim_set_hl(0, 'DiagnosticFloatingOk', { fg = 10937249 })
vim.api.nvim_set_hl(0, 'DiagnosticFloatingWarn', { fg = 16376495 })
vim.api.nvim_set_hl(
0,
'DiagnosticHint',
{ cterm = { italic = true }, fg = 9757397, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticInfo',
{ cterm = { italic = true }, fg = 9034987, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticOk',
{ cterm = { italic = true }, fg = 10937249, italic = true }
)
vim.api.nvim_set_hl(0, 'DiagnosticSignError', { fg = 15961000 })
vim.api.nvim_set_hl(0, 'DiagnosticSignHint', { fg = 9757397 })
vim.api.nvim_set_hl(0, 'DiagnosticSignInfo', { fg = 9034987 })
vim.api.nvim_set_hl(0, 'DiagnosticSignOk', { fg = 10937249 })
vim.api.nvim_set_hl(0, 'DiagnosticSignWarn', { fg = 16376495 })
vim.api.nvim_set_hl(
0,
'DiagnosticUnderlineError',
{ cterm = { underline = true }, sp = 15961000, underline = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticUnderlineHint',
{ cterm = { underline = true }, sp = 9757397, underline = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticUnderlineInfo',
{ cterm = { underline = true }, sp = 9034987, underline = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticUnderlineOk',
{ cterm = { underline = true }, sp = 10937249, underline = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticUnderlineWarn',
{ cterm = { underline = true }, sp = 16376495, underline = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticVirtualTextError',
{ bg = 3287098, cterm = { italic = true }, fg = 15961000, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticVirtualTextHint',
{ bg = 2699582, cterm = { italic = true }, fg = 9757397, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticVirtualTextInfo',
{ bg = 2633792, cterm = { italic = true }, fg = 9034987, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticVirtualTextOk',
{ bg = 2699582, cterm = { italic = true }, fg = 10937249, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticVirtualTextWarn',
{ bg = 3354938, cterm = { italic = true }, fg = 16376495, italic = true }
)
vim.api.nvim_set_hl(
0,
'DiagnosticWarn',
{ cterm = { italic = true }, fg = 16376495, italic = true }
)
vim.api.nvim_set_hl(0, 'DiffAdd', { bg = 3555651 })
vim.api.nvim_set_hl(0, 'DiffChange', { bg = 2435388 })
vim.api.nvim_set_hl(0, 'DiffDelete', { bg = 4469316 })
vim.api.nvim_set_hl(0, 'DiffText', { bg = 4082539 })
vim.api.nvim_set_hl(0, 'Directory', { fg = 9024762 })
vim.api.nvim_set_hl(0, 'EndOfBuffer', { fg = 1973806 })
vim.api.nvim_set_hl(0, 'Error', { fg = 15961000 })
vim.api.nvim_set_hl(
0,
'ErrorMsg',
{
bold = true,
cterm = { bold = true, italic = true },
fg = 15961000,
italic = true,
}
)
vim.api.nvim_set_hl(0, 'Exception', { fg = 13346551 })
vim.api.nvim_set_hl(0, 'FloatBorder', { fg = 9024762 })
vim.api.nvim_set_hl(0, 'FloatTitle', { fg = 10923464 })
vim.api.nvim_set_hl(0, 'FoldColumn', { fg = 7106694 })
vim.api.nvim_set_hl(0, 'Folded', { bg = 4540250, fg = 9024762 })
vim.api.nvim_set_hl(0, 'Function', { fg = 9024762 })
vim.api.nvim_set_hl(0, 'Identifier', { fg = 15912397 })
vim.api.nvim_set_hl(0, 'IncSearch', { bg = 8309208, fg = 1579045 })
vim.api.nvim_set_hl(0, 'Include', { fg = 13346551 })
vim.api.nvim_set_hl(0, 'Keyword', { fg = 13346551 })
vim.api.nvim_set_hl(0, 'Label', { fg = 7653356 })
vim.api.nvim_set_hl(0, 'LineNr', { fg = 4540250 })
vim.api.nvim_set_hl(0, 'LspCodeLens', { fg = 7106694 })
vim.api.nvim_set_hl(0, 'LspInlayHint', { bg = 2763580, fg = 7106694 })
vim.api.nvim_set_hl(0, 'LspReferenceRead', { bg = 4540250 })
vim.api.nvim_set_hl(0, 'LspReferenceText', { bg = 4540250 })
vim.api.nvim_set_hl(0, 'LspReferenceWrite', { bg = 4540250 })
vim.api.nvim_set_hl(
0,
'LspSignatureActiveParameter',
{ bg = 3224132, bold = true, cterm = { bold = true } }
)
vim.api.nvim_set_hl(0, 'Macro', { fg = 13346551 })
vim.api.nvim_set_hl(
0,
'MatchParen',
{ bg = 4540250, bold = true, cterm = { bold = true }, fg = 16429959 }
)
vim.api.nvim_set_hl(
0,
'ModeMsg',
{ bold = true, cterm = { bold = true }, fg = 13489908 }
)
vim.api.nvim_set_hl(0, 'MoreMsg', { fg = 9024762 })
vim.api.nvim_set_hl(0, 'NonText', { fg = 7106694 })
vim.api.nvim_set_hl(0, 'Normal', { bg = 1973806, fg = 13489908 })
vim.api.nvim_set_hl(0, 'NormalFloat', { bg = 1579045, fg = 13489908 })
vim.api.nvim_set_hl(0, 'NormalNC', { bg = 1973806, fg = 13489908 })
vim.api.nvim_set_hl(0, 'Number', { fg = 16429959 })
vim.api.nvim_set_hl(0, 'Operator', { fg = 9034987 })
vim.api.nvim_set_hl(0, 'Pmenu', { bg = 2829116, fg = 9673138 })
vim.api.nvim_set_hl(0, 'PmenuMatch', { bold = true, cterm = { bold = true } })
vim.api.nvim_set_hl(
0,
'PmenuMatchSel',
{ bold = true, cterm = { bold = true } }
)
vim.api.nvim_set_hl(0, 'PmenuSbar', { bg = 4540250 })
vim.api.nvim_set_hl(
0,
'PmenuSel',
{ bg = 4540250, bold = true, cterm = { bold = true } }
)
vim.api.nvim_set_hl(0, 'PmenuThumb', { bg = 7106694 })
vim.api.nvim_set_hl(0, 'PreProc', { fg = 16106215 })
vim.api.nvim_set_hl(0, 'Question', { fg = 9024762 })
vim.api.nvim_set_hl(
0,
'QuickFixLine',
{ bg = 4540250, bold = true, cterm = { bold = true } }
)
vim.api.nvim_set_hl(0, 'Repeat', { fg = 13346551 })
vim.api.nvim_set_hl(0, 'Search', { bg = 4085607, fg = 13489908 })
vim.api.nvim_set_hl(0, 'SignColumn', { fg = 4540250 })
vim.api.nvim_set_hl(0, 'Special', { fg = 16106215 })
vim.api.nvim_set_hl(0, 'SpecialKey', { link = 'NonText' })
vim.api.nvim_set_hl(
0,
'SpellBad',
{ cterm = { undercurl = true }, sp = 15961000, undercurl = true }
)
vim.api.nvim_set_hl(
0,
'SpellCap',
{ cterm = { undercurl = true }, sp = 16376495, undercurl = true }
)
vim.api.nvim_set_hl(
0,
'SpellLocal',
{ cterm = { undercurl = true }, sp = 9024762, undercurl = true }
)
vim.api.nvim_set_hl(
0,
'SpellRare',
{ cterm = { undercurl = true }, sp = 10937249, undercurl = true }
)
vim.api.nvim_set_hl(0, 'Statement', { fg = 13346551 })
vim.api.nvim_set_hl(0, 'StatusLine', { bg = 1579045, fg = 13489908 })
vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 1579045, fg = 4540250 })
vim.api.nvim_set_hl(0, 'StatusLineTerm', { link = 'StatusLine' })
vim.api.nvim_set_hl(0, 'StatusLineTermNC', { link = 'StatusLineNC' })
vim.api.nvim_set_hl(0, 'StorageClass', { fg = 16376495 })
vim.api.nvim_set_hl(0, 'String', { fg = 10937249 })
vim.api.nvim_set_hl(0, 'Structure', { fg = 16376495 })
vim.api.nvim_set_hl(0, 'Substitute', { bg = 4540250, fg = 16106215 })
vim.api.nvim_set_hl(0, 'TabLine', { bg = 1118491, fg = 7106694 })
vim.api.nvim_set_hl(0, 'TabLineFill', { bg = 1579045 })
vim.api.nvim_set_hl(0, 'TabLineSel', { link = 'Normal' })
vim.api.nvim_set_hl(
0,
'Tag',
{ bold = true, cterm = { bold = true }, fg = 11845374 }
)
vim.api.nvim_set_hl(0, 'TermCursor', { bg = 16113884, fg = 1973806 })
vim.api.nvim_set_hl(
0,
'Title',
{ bold = true, cterm = { bold = true }, fg = 9024762 }
)
vim.api.nvim_set_hl(
0,
'Todo',
{ bg = 15912397, bold = true, cterm = { bold = true }, fg = 1973806 }
)
vim.api.nvim_set_hl(0, 'Type', { fg = 16376495 })
vim.api.nvim_set_hl(
0,
'Visual',
{ bg = 4540250, bold = true, cterm = { bold = true } }
)
vim.api.nvim_set_hl(
0,
'VisualNOS',
{ bg = 4540250, bold = true, cterm = { bold = true } }
)
vim.api.nvim_set_hl(0, 'WarningMsg', { fg = 16376495 })
vim.api.nvim_set_hl(0, 'Whitespace', { fg = 4540250 })
vim.api.nvim_set_hl(0, 'WildMenu', { bg = 7106694 })
vim.api.nvim_set_hl(0, 'WinBar', { fg = 16113884 })
vim.api.nvim_set_hl(0, 'WinBarNC', { link = 'WinBar' })
vim.api.nvim_set_hl(0, 'WinSeparator', { fg = 1118491 })
vim.api.nvim_set_hl(0, 'diffAdded', { fg = 10937249 })
vim.api.nvim_set_hl(0, 'diffChanged', { fg = 9024762 })
vim.api.nvim_set_hl(0, 'diffFile', { fg = 9024762 })
vim.api.nvim_set_hl(0, 'diffIndexLine', { fg = 9757397 })
vim.api.nvim_set_hl(0, 'diffLine', { fg = 7106694 })
vim.api.nvim_set_hl(0, 'diffNewFile', { fg = 16429959 })
vim.api.nvim_set_hl(0, 'diffOldFile', { fg = 16376495 })
vim.api.nvim_set_hl(0, 'diffRemoved', { fg = 15961000 })
vim.api.nvim_set_hl(
0,
'htmlH1',
{ bold = true, cterm = { bold = true }, fg = 16106215 }
)
vim.api.nvim_set_hl(
0,
'htmlH2',
{ bold = true, cterm = { bold = true }, fg = 9024762 }
)
vim.api.nvim_set_hl(0, 'lCursor', { bg = 13489908, fg = 1973806 })
vim.api.nvim_set_hl(0, 'markdownH1', { link = 'rainbow1' })
vim.api.nvim_set_hl(0, 'markdownH2', { link = 'rainbow2' })
vim.api.nvim_set_hl(0, 'markdownH3', { link = 'rainbow3' })
vim.api.nvim_set_hl(0, 'markdownH4', { link = 'rainbow4' })
vim.api.nvim_set_hl(0, 'markdownH5', { link = 'rainbow5' })
vim.api.nvim_set_hl(0, 'markdownH6', { link = 'rainbow6' })
vim.api.nvim_set_hl(0, 'rainbow1', { fg = 15961000 })
vim.api.nvim_set_hl(0, 'rainbow2', { fg = 16429959 })
vim.api.nvim_set_hl(0, 'rainbow3', { fg = 16376495 })
vim.api.nvim_set_hl(0, 'rainbow4', { fg = 10937249 })
vim.api.nvim_set_hl(0, 'rainbow5', { fg = 7653356 })
vim.api.nvim_set_hl(0, 'rainbow6', { fg = 11845374 })
File diff suppressed because it is too large Load Diff
+294
View File
@@ -0,0 +1,294 @@
[
[
"🎨",
"Improve structure / format of the code."
],
[
"⚡️",
"Improve performance."
],
[
"🔥",
"Remove code or files."
],
[
"🐛",
"Fix a bug."
],
[
"🚑️",
"Critical hotfix."
],
[
"✨",
"Introduce new features."
],
[
"📝",
"Add or update documentation."
],
[
"🚀",
"Deploy stuff."
],
[
"💄",
"Add or update the UI and style files."
],
[
"🎉",
"Begin a project."
],
[
"✅",
"Add, update, or pass tests."
],
[
"🔒️",
"Fix security or privacy issues."
],
[
"🔐",
"Add or update secrets."
],
[
"🔖",
"Release / Version tags."
],
[
"🚨",
"Fix compiler / linter warnings."
],
[
"🚧",
"Work in progress."
],
[
"💚",
"Fix CI Build."
],
[
"⬇️",
"Downgrade dependencies."
],
[
"⬆️",
"Upgrade dependencies."
],
[
"📌",
"Pin dependencies to specific versions."
],
[
"👷",
"Add or update CI build system."
],
[
"📈",
"Add or update analytics or track code."
],
[
"♻️",
"Refactor code."
],
[
"",
"Add a dependency."
],
[
"",
"Remove a dependency."
],
[
"🔧",
"Add or update configuration files."
],
[
"🔨",
"Add or update development scripts."
],
[
"🌐",
"Internationalization and localization."
],
[
"✏️",
"Fix typos."
],
[
"💩",
"Write bad code that needs to be improved."
],
[
"⏪️",
"Revert changes."
],
[
"🔀",
"Merge branches."
],
[
"📦️",
"Add or update compiled files or packages."
],
[
"👽️",
"Update code due to external API changes."
],
[
"🚚",
"Move or rename resources (e.g.: files, paths, routes)."
],
[
"📄",
"Add or update license."
],
[
"💥",
"Introduce breaking changes."
],
[
"🍱",
"Add or update assets."
],
[
"♿️",
"Improve accessibility."
],
[
"💡",
"Add or update comments in source code."
],
[
"🍻",
"Write code drunkenly."
],
[
"💬",
"Add or update text and literals."
],
[
"🗃️",
"Perform database related changes."
],
[
"🔊",
"Add or update logs."
],
[
"🔇",
"Remove logs."
],
[
"👥",
"Add or update contributor(s)."
],
[
"🚸",
"Improve user experience / usability."
],
[
"🏗️",
"Make architectural changes."
],
[
"📱",
"Work on responsive design."
],
[
"🤡",
"Mock things."
],
[
"🥚",
"Add or update an easter egg."
],
[
"🙈",
"Add or update a .gitignore file."
],
[
"📸",
"Add or update snapshots."
],
[
"⚗️",
"Perform experiments."
],
[
"🔍️",
"Improve SEO."
],
[
"🏷️",
"Add or update types."
],
[
"🌱",
"Add or update seed files."
],
[
"🚩",
"Add, update, or remove feature flags."
],
[
"🥅",
"Catch errors."
],
[
"💫",
"Add or update animations and transitions."
],
[
"🗑️",
"Deprecate code that needs to be cleaned up."
],
[
"🛂",
"Work on code related to authorization, roles and permissions."
],
[
"🩹",
"Simple fix for a non-critical issue."
],
[
"🧐",
"Data exploration/inspection."
],
[
"⚰️",
"Remove dead code."
],
[
"🧪",
"Add a failing test."
],
[
"👔",
"Add or update business logic."
],
[
"🩺",
"Add or update healthcheck."
],
[
"🧱",
"Infrastructure related changes."
],
[
"🧑‍💻",
"Improve developer experience."
],
[
"💸",
"Add sponsorships or money related infrastructure."
],
[
"🧵",
"Add or update code related to multithreading or concurrency."
],
[
"🦺",
"Add or update code related to validation."
]
]
File diff suppressed because it is too large Load Diff
+178
View File
@@ -0,0 +1,178 @@
[
[
"(╯°□°)╯︵ ┻━┻",
"angry table 生氣 翻桌 幹"
],
[
"_:(´ཀ`」∠):_",
"bleeding 吐血"
],
[
"∩ __∩ y",
"hehe 真是個壞女孩"
],
[
"・゚・。・゚・(つД`)",
"cry 泣き"
],
[
"(´;ω;`)",
"cry 泣き 哭哭"
],
[
"(´;д;`)",
"cry 泣き 哭哭"
],
[
"(;´༎ຶД༎ຶ`)",
"cry miserably"
],
[
"ˊ_>ˋ",
"dandin 淡定 淡定紅茶"
],
[
"♥",
"heart ハート 愛心"
],
[
"┌(┌ o^)┐ホモォ",
"homo ホモ"
],
[
"┌(┌ ^o^)┐しょた。。。",
"rail02000 ショタ しょた shota"
],
[
"へ(゜∇、°)へ",
"ehehe えへへ エヘヘ"
],
[
"キタ――(゚∀゚)――!!",
"kita 来たー キター きたー"
],
[
"_(:3 」∠ )_ ",
"lazy 懶"
],
[
"ˊ・ω・ˋ",
"owo"
],
[
"ˊvˋ",
"relax"
],
[
"( ˘ω˘ )",
"uwu"
],
[
"(´・_・`)",
"sad"
],
[
"(゚⊿゚)",
"Huh? 不知所云 摳妞臉"
],
[
"(。ŏ_ŏ)",
"WTF 什麼啦"
],
[
"( ˘•ω•˘ )",
"owo"
],
[
"(´-ω-) ",
"relax"
],
[
"(。A。) ",
"happy 爽翻"
],
[
"(ノ>ω<)ノ ",
"yeah >w<"
],
[
"\\\\m/ >_< \\\\m/",
"rock"
],
[
"。:.゚ヽ(*´∀`)ノ゚.:。 ",
"cheers 歡呼"
],
[
" ヾ(*´∀ ˋ*)ノ ",
"cheers 歡呼"
],
[
"(´・ω・`)",
"owo"
],
[
"(゚∀。)",
"happy 爽爽"
],
[
"(つд⊂) ",
"don't see 非禮勿視"
],
[
"╮(╯_╰)╭ ",
"alas 無奈 面對國民黨支持者的表情 面對中國五毛的表情"
],
[
"σ ゚∀ ゚) ゚∀゚)σ",
"haha 你看看你 UCCU uccu"
],
[
"σ(´∀`*)",
"me? 我嗎?"
],
[
"il||li _| ̄|○ヽ(・ω・`) ",
"don't mind"
],
[
"_(:3 ⌒゙)_ ",
"butt お尻 おしり 摳屁股"
],
[
"(・∀・)つ➄ ",
"five cent hello 五毛你好"
],
[
"ε≡ヘ( ´∀`)ノ ",
"yeah 耶"
],
[
"(・`ω´・)",
"i would be angry 我要生氣了"
],
[
"(≖ᴗ≖๑)",
"really? orly 呵呵 是嗎 是喔"
],
[
"(゚д゚)",
"shocked 震驚 驚訝"
],
[
"。・゚・(つд`゚)つ⑩))Д´)",
"so pity 你好可憐喔"
],
[
"ლ(´ڡ`ლ)",
"come here 來來來"
],
[
"(/‵Д′)~ ╧╧ ",
"angry furious"
],
[
"#゚Å゚)⊂彡☆))゚Д゚)・∵",
"angry punch"
]
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+13033
View File
File diff suppressed because it is too large Load Diff
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+57
View File
@@ -0,0 +1,57 @@
# Rootiest Iosevka Fonts
This is a collection of Iosevka font variants that are used in the rootiest configurations.
![Rootiest Iosevka V2 Font - Regular](./iosevka-v2-regular.png)
## Version
This font was built using
[Iosevka](https://github.com/be5invis/Iosevka) version 31.7.1
The Nerd Font patches were built using
[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) version 3.2.1
## Installation
[Install the Rootiest Neovim config](../README.md#installation)
### Linux
```bash
cd ~/.config/nvim/fonts
cp *.{otf,ttf} ~/.local/share/fonts
fc-cache -fv
```
### Windows
```powershell
$home = $env:USERPROFILE
cd $home\.config\nvim\fonts
cp *.{otf,ttf} $env:LOCALAPPDATA\Microsoft\Windows\Fonts
```
### MacOS
```bash
cd ~/.config/nvim/fonts
cp *.{otf,ttf} ~/Library/Fonts
```
## Thanks
This font wouldn't be possible without the following projects:
- [Iosevka](https://github.com/be5invis/Iosevka) -
This is the base font whose character variants are used in this font.
- [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) -
The Nerd Font variant is built using this patch.
## License
This font is licensed under the [MIT License](../LICENSE).
---
Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

+108 -27
View File
@@ -1,32 +1,113 @@
--[[
Rootiest Neovim
--]]
-- Copyright (C) 2024 Chris Laprade (chris@rootiest.com)
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU Affero General Public License as
-- published by the Free Software Foundation, either version 3 of the
-- License, or (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU Affero General Public License for more details.
--
-- You should have received a copy of the GNU Affero General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
-- ██████╗ ██████╗ ██████╗ ████████╗██╗███████╗███████╗████████╗
-- ██╔══██╗██╔═══██╗██╔═══██╗╚══██╔══╝██║██╔════╝██╔════╝╚══██╔══╝
-- ██████╔╝██║ ██║██║ ██║ ██║ ██║█████╗ ███████╗ ██
-- ██╔══██╗██║ ██║██║ ██║ ██║ ██║██╔══╝ ╚════██║ ██║
-- ██║ ██║╚██████╔╝╚██████╔╝ ██║ ██║███████╗███████║ ██║
-- ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝
--
-- ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗
-- ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║
-- ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║
-- ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║
-- ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║
-- ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝
--
-- ,l; c,
-- .:ooool' loo:.
-- .,oooooooo:. looooc, /VVVVVVVV\++++ /VVVVVVVV\
-- ll:,loooooool, looooool \VVVVVVVV/++++++\VVVVVVVV/
-- llll,;ooooooooc. looooooo |VVVVVV|++++++++/VVVVV/'
-- lllllc,coooooooo; looooooo |VVVVVV|++++++/VVVVV/'
-- lllllll;,loooooool' looooooo +|VVVVVV|++++/VVVVV/'+
-- lllllllc .:oooooooo:. looooooo +++|VVVVVV|++/VVVVV/'+++++
-- lllllllc 'loooooool,:ooooooo +++++|VVVVVV|/VVV___++++++++++
-- lllllllc ;ooooooooc,cooooo +++|VVVVVVVVVV/##/ +_+_+_+
-- lllllllc .coooooooo;;looo +|VVVVVVVVV___ +/#_#,#_#,\
-- lllllllc ,loooooool,:ol |VVVVVVV//##/+/#/+/#/'/#/
-- 'cllllc .:oooooooo;. |VVVVV/'+/#/+/#/+/#/ /#/
-- .;llc .loooo:. |VVV/'++/#/+/#/ /#/ /#/
-- ,; ;l;  'V/' /##//##//##//###/
--
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Rootiest NVim ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Configuration ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- The rootiest NeoVim configuration!
-- Copyright (C) 2026 Rootiest
-- SPDX-License-Identifier: AGPL-3.0-or-later
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PROFILING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Load profiling package if startup profiler triggered
require('config.profiler')
-- Trigger bootstrap (runtime path, etc.)
require("bootstrap")
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ROOTIEST ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Rootiest Configuration
require('config.rootiest').setup() -- Set up Rootiest options
-- Initialize global registry
_G.Config = {
plugins = {},
called = {},
}
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ LAZY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Load Lazy package manager and plugins
require('config.lazy') -- Bootstrap lazy.nvim and initialize plugins
-- Load core modules
require("lazyload") -- Plugin lazy-loading module
require("options") -- Configuration options
require("plugins") -- Plugin specifications and setup
require("keymaps") -- Key mappings
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ROCKS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Load LuaRocks package manager and plugins
require('config.rocks') -- Bootstrap LuaRocks and initialize plugins
-- Source machine-local and secret overrides (silently ignored if absent)
local user_dots = vim.fn.expand("~/.config/.user-dots/nvim/")
for _, file in ipairs({ "secrets.lua", "local.lua" }) do
local path = user_dots .. file
if vim.fn.filereadable(path) == 1 then
dofile(path)
end
end
-- ╔═════════════════════════════════════════════════════════╗
-- ║ CONFIGURATION STRUCTURE ║
-- ╚═════════════════════════════════════════════════════════╝
-- ╭─────────────────────────────────────────────────────────────────────╮
-- │ Configuration modules are organized into categories: │
-- │ - Options │
-- │ - Keymaps │
-- │ - Autocommands │
-- │ - Utility functions │
-- │ - Plugins │
-- │ - Commands │
-- │ - Dashboards │
-- │ - Types │
-- │ - Dependencies │
-- ╰─────────────────────────────────────────────────────────────────────╯
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ OPTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Neovim options are configured in the lua/config/options.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ KEYMAPS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Keymaps are configured in the lua/data/keys.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ AUTOCOMMANDS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Autocommands are configured in the lua/config/autocmds.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ UTILITY FUNCTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Utility functions can be found in the lua/data/func.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PLUGINS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Plugin specs are defined in the lua/config/plugins.lua file
-- Plugin keys, cmds, dependencies, and opts/config tables are
-- defined in the lua/data/*.lua files. All plugin configurations
-- are defined in a centralized location to keep them organised.
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ COMMANDS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- User and plugin commands are configured in the lua/data/cmds.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DASHBOARDS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Dashboard configurations can be found in the lua/data/dash.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ TYPES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Plugin configuration tables are located in the lua/data/types.lua file
---━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DEPENDENCIES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Plugin depenendencies are defined in the lua/data/deps.lua file
+22
View File
@@ -0,0 +1,22 @@
                 ...........  ...                                .cd,                  .l'          
            .........                                          'lxxxxl.                .xxo;        
         ......                                              ;oxxxxxddd;               .dddddc.     
      .....                                               .,dxxxxxxxddddl.             .dddddddl'   
    ....                                                .;cccdxxxxxddddddd;            .dddddddddo; 
   ....                                                 ,cccc:lddddddddddddl.          .ddddddddddo 
  ...  ..                                               ,cccccccodddddddddddo;         .ooooooooooo 
 ......                                                 'ccccccc:cddooooooooool.       .ooooooooooo 
......     ...                                          '::::::::::loooooooooooo:      .ooooooooooo 
.....        ........                                   '::::::::::''loooooooooool'     ooooooooooo 
.....           ..............                       .  '::::::::::'  :oooooooooooo:    lllllllllll 
....                 ..............            ......   '::::::::::'   .loooooooooool'  lllllllllll 
....                  ..     .............    ......    ';;;;;;;;;;'     ;looooooooooo:.lllllllllll 
 ....   .               ..................   ......     .;;;;;;;;;;'      .clllllllllllllllllllllll 
 ....   ..                 ................   . ..      .;;;;;;;;;;'        ,lllllllllllollcccccccc 
  ....  ..                  .................  ...      .;;;;;;;;;;.         .:lllllllllooolccccccc 
   ........                        ..............       .,,,,,,,,,,.           'cllllllllllllcccccc 
     .......                        ............         ',,,,,,,,,.            .:llllllllllllccc:' 
       .......                         ........            .',,,,,,.              'ccccclllllll:.   
         ........     .            ..........                .',,,,.                ;ccclllll;.     
             .............................                      .''.                 .:cllc,        
                  ...................                             ..                   ,:.          
+19
View File
@@ -0,0 +1,19 @@
▀
▄▄▀
▄▄▄▄▄▀▄
▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▄▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀
▀

View File
+33
View File
@@ -0,0 +1,33 @@
,,,:,:;lc::clllc::,:,,,
.:,c:c,,lc;::,,', .';:ldcdoc:,.
.,:;:....:oo::;;. ,; ':cllc .cd; l:.
.;c;'...,;;;,;;''';:, .. ,oxxxxo. oxxl'
;c;...,l::, .cdxxxxxdddc oxxxxo:.
cl,..,o;, ;oxxxxxxxxddddd; odddddddl'
,c'..;;' .;dxxxxxxxxxxddddddl. ldddddddddo:.
.c;..:;. :ccccc:odxxxxxxddddddddddo, lddddddddddddddl
,:...l. .,. ccccccc:codddddddddddddddddl. lddddddddddddddo
;:..'c.,:coc. :cccccccc:cdddddddddddddddddo: cooooooooooooooo
';...c:o,:: . :ccccccccc::ldddddddddddddddddl' cooooooooooooooo
,o....c'.;' ,x;. :cccccccccc:::odooooooooooooooooc. cooooooooooooooo
c......'o ,c:c;. ::::::::::::::;:oooooooooooooooooo; cooooooooooooool
.c......c .:c.;:;;,. :::::::::::::::, :oooooooooooooooool. :ooooooooooooool
o'.....c; .;:....,c;,:,,,,'. :::::::::::::::, .cooooooooooooooooo:. :lllllllllllllll
c......l ;c:'.........';c:c;::;' ,;:cc ;::::::::::::::, ,looooooooooooooool, :lllllllllllllll
c.....,, ;;,,:l;'...........':l;;'; ,,';:cc,c:. ;::::::::::::::, :oooooooooooooooooc. :lllllllllllllll
l'....c' ,:,:::cc:'.........'::: 'o,......:, ;;;;;;;;;;;;;;;' .cooooooooooooooool:.;lllllllllllllll
,;....l : ll:,. ,,,cl;........:c,;',;;: :c.......l' ;;;;;;;;;;;;;;;' ,llllllllllllllllllcllllllllllllllc
:....:' ,o. 'l;,cl;::;lc,...............:: ,:......'o. ;;;;;;;;;;;;;;;' ;lllllllllllllllloolccccccccccccc
l;...'; o:d .'::c,....................; kl;....'c ,;;;;;;;;;;;;;;' .cllllllllllllllloolcccccccccccc
c....o. '''l cl::,:cc;c,...........;: lccc..;o ,;;;;;;;;;;;;;;' ,lllllllllllllloooolcccccccccc
o...'c :..c .lc;:ccc:;'............;:. :c c..d. ,,,,,,,,,,,,,,,' .:llllllllllllllllllccccccccc
:'..'l.:..;c ;:cc;'................;c::c,.,; ',,,,,,,,,,,,,,' .cllllllllllllllllllcccccc:
:,...:c,..l. ..;'c::c:co,............'o .',,,,,,,,,,,,. ,ccccccccllllllllllc::;.
,c,...'...:, ',cll,'.............;: .',,,,,,,,,. .;ccccccllllllllllc,.
:l'......;c .':oo.........c; ..,,,,,,,. .:ccccclllllll:'
;c,......:;. :; .c:........;:. .',,,,. 'ccccllllc,.
;:c'.....;:,; ,l:'. .,:;........:l' ..''. .;cccc:.
,::,.....';:;;,,':l:;,;;.',,,'';;,::,........,l;. .. .:,.
,;;:;'......,:c:ol;...',,,''..........':c;,
.,,;:c:'....................';c:;;,
,,,:,::;:llllc,:c,:;;'.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

+6
View File
@@ -0,0 +1,6 @@
██████╗ ██████╗ ██████╗ ████████╗██╗███████╗███████╗████████╗ ███╗ ██╗██╗ ██╗██╗███╗ ███╗
██╔══██╗██╔═══██╗██╔═══██╗╚══██╔══╝██║██╔════╝██╔════╝╚══██╔══╝ ████╗ ██║██║ ██║██║████╗ ████║
██████╔╝██║ ██║██║ ██║ ██║ ██║█████╗ ███████╗ ██║ ██╔██╗ ██║██║ ██║██║██╔████╔██║
██╔══██╗██║ ██║██║ ██║ ██║ ██║██╔══╝ ╚════██║ ██║ ██║╚██╗██║╚██╗ ██╔╝██║██║╚██╔╝██║
██║ ██║╚██████╔╝╚██████╔╝ ██║ ██║███████╗███████║ ██║ ██║ ╚████║ ╚████╔╝ ██║██║ ╚═╝ ██║
╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═══╝ ╚═╝╚═╝ ╚═╝
+18
View File
@@ -0,0 +1,18 @@
▄▄▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▄▄▀▀▄
▄ ▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▄▄▀▀▀▀▀▀ ▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▄▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀

+1
View File
@@ -0,0 +1 @@
𝙀 𝙊 𝙑 𝙄 𝙈
+15
View File
@@ -0,0 +1,15 @@
███ ███
████ ████
 ████ █████
█ ████ █████
██ ████ █████
███ ████ █████
████ ████ ████
█████ ████████
█████ ███████
█████ ██████
█████ █████
████ ████
███ ███
 𝙀 𝙊 𝙑 𝙄 𝙈
+20
View File
@@ -0,0 +1,20 @@
        ▒░               ▒░       
      ▒▓▓▓▒              ▒▓▒░     
    ▒▓▓▓▓▓▓▓             ▒▓▓▓▒░   
  ▒▓▓▓▓▓▓▓▓▓▓░           ▒▓▓▓▓▓▒░ 
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒          ▒▓▓▓▓▓▓▓▒
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒         ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░       ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░      ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▒     ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓ ░▓▓▓▓▓▓▓▓▓▒    ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓   ▒▓▓▓▓▓▓▓▓▓░  ▒▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓    ▒▓▓▓▓▓▓▓▓▓▒ ░▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓     ░▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓      ░▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓        ▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓         ░▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒
▒▓▓▓▓▓▓▓▓          ░▒▒▒▒▒▒▓▓▓▒▒▒▒▒
  ▒▓▓▓▓▓▓            ▒▒▒▒▒▒▒▒▒▒▒  
    ▒▓▓▓▓             ░▒▒▒▒▒▒▒░   
      ▒▓▓              ░▒▒▒▒░     
+20
View File
@@ -0,0 +1,20 @@
        ▒░               ▒░       
      ▒▓▓▓▒              ▒▓▒░     
    ▒▓▓▓▓▓▓▓             ▒▓▓▓▒░   
  ▒▓▓▓▓▓▓▓▓▓▓░           ▒▓▓▓▓▓▒░ 
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒          ▒▓▓▓▓▓▓▓▒
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒         ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░       ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░      ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▒     ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓ ░▓▓▓▓▓▓▓▓▓▒    ▒▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓   ▒▓▓▓▓▓▓▓▓▓░  ▒▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓    ▒▓▓▓▓▓▓▓▓▓▒ ░▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓     ░▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓      ░▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓        ▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒
▓▓▓▓▓▓▓▓▓         ░▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒
▒▓▓▓▓▓▓▓▓          ░▒▒▒▒▒▒▓▓▓▒▒▒▒▒
  ▒▓▓▓▓▓▓            ▒▒▒▒▒▒▒▒▒▒▒  
    ▒▓▓▓▓             ░▒▒▒▒▒▒▒░   
      ▒▓▓              ░▒▒▒▒░     
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

+24
View File
@@ -0,0 +1,24 @@
.ld, cc.
,oxxxxl. lxxl'
.:dxxxxxddd; lddddo;.
'lxxxxxxxxddddl. cdddddddc.
':coxxxxxxxddddddd: cdddddddddl,
ccccccoxxxxxddddddddo, cdddddddddddo
cccccc:lddddddddddddddc. cdddddddddddo
:ccccccc:ldddddddddddddo; :oooooooooooo
:cccccccc:codooooooooooool. :oooooooooooo
::::::::::::coooooooooooooo: :oooooooooool
::::::::::::'.coooooooooooool' ;oooooooooool
;:::::::::::' ,looooooooooooo:. ;llllllllllll
;:::::::::::' :oooooooooooool, ;llllllllllll
;;;;;;;;;;;;' .coooooooooooooc.;llllllllllll
;;;;;;;;;;;;' ,llllllllllllllclllllllllllc
;;;;;;;;;;;;. .:lllllllllllloolcccccccccc
,;;;;;;;;;;;. 'lllllllllllloolccccccccc
,;;;;;;;;;;;. ;llllllllllooollccccccc
,,,,,,,,,,,,. .:llllllllllllllccccc:
.',,,,,,,,,. ,ccccccllllllllc:;'
..,,,,,,,. .;ccccllllllll:.
.',,,,. .ccccllllc,.
..''. ,cclc:.
.. .:,.
+11
View File
@@ -0,0 +1,11 @@
▄▀▀ ▄▄
▄▀▀▀ ▄▄▄▄▀▀▀▀▄
▄▀▀▀▀ ▄▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▄▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀
▀▀▀▀

+19
View File
@@ -0,0 +1,19 @@
▄▀▄
▀▀▀
▀▀▀▀▄
▄▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▄▄
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀
▄▀▀▀▄▄ ▄▀▀▀▄▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▄▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀
▄▀▀▀
▄▀▀▀▀▀
▀▀▀▀▀
▀▀▀▀

+27
View File
@@ -0,0 +1,27 @@
                          .''.'''.                              
                 .';:;::ll::;;,,,,cclcc:;,.                     
             .;;c:..:llc,,           ,;.',:ccc.                 
          .;:;.':;,,,;...;,                   .                 
       ':c,'c:,'.                                               
     .:;.,;'.                                                   
    ;:..;'                                                      
   c'.;l.,;c.                                                   
 .:..,lc:::,.                                                   
 l...,',;  'o:,                                                 
;:....;:    .::c;,'.                                            
l....'c       .;:'.,;:;;,,,'..                                 .
:....:.          ':::'.......,::::;;,.                   .';;:l,
c....:               .',;;:;;:'......';:;,.          ;:;;'..:'  
c'...:    ',            .l;,'',,':l:......:;,,',,.  ;,.....l'   
.l...:   .c;              ;;:,;::;,.............c. ;:....'c.    
 ;:..;'  :.,                 .::,;;::;'.........c. ,:c;'.l      
  ';..c, d.c                  ';cc;:::,..........;,.',:,'o      
   ':..;:l.,l                    .,;;;;:cc:;c'.....;c:'.l.      
    .:,..:..;c                        ';:::;...........:.       
      ;c;....':.                         .'':o;......;c         
        .;:,...,;''    :'.                ''c'.....:;'          
           ';:;...':,;,';;c:,,'''''.'',;,:......,:;'            
              .,;,:;....,::lc'..',,'........:;;;'               
                   .',;,;;;::;,,,,;:c;::;;,..                   
                              ,'''.                             
+33
View File
@@ -0,0 +1,33 @@
,,,:,:;lc::clllc::,:,,,
.:,c:c,,lc;::,,', .';:ldcdoc:,.
.,:;:....:oo::;;. ,; ':cllc
.;c;'...,;;;,;;''';:, ..
;c;...,l::,
cl,..,o;,
,c'..;;'
.c;..:;.
,:...l. .,.
;:..'c.,:coc.
';...c:o,:: .
,o....c'.;' ,x;.
c......'o ,c:c;.
.c......c .:c.;:;;,.
o'.....c; .;:....,c;,:,,,,'.
c......l ;c:'.........';c:c;::;' ,;:cc
c.....,, ;;,,:l;'...........':l;;'; ,,';:cc,c:.
l'....c' ,:,:::cc:'.........'::: 'o,......:,
,;....l : ll:,. ,,,cl;........:c,;',;;: :c.......l'
:....:' ,o. 'l;,cl;::;lc,...............:: ,:......'o.
l;...'; o:d .'::c,....................; kl;....'c
c....o. '''l cl::,:cc;c,...........;: lccc..;o
o...'c :..c .lc;:ccc:;'............;:. :c c..d.
:'..'l.:..;c ;:cc;'................;c::c,.,;
:,...:c,..l. ..;'c::c:co,............'o
,c,...'...:, ',cll,'.............;:
:l'......;c .':oo.........c;
;c,......:;. :; .c:........;:.
;:c'.....;:,; ,l:'. .,:;........:l'
,::,.....';:;;,,':l:;,;;.',,,'';;,::,........,l;.
,;;:;'......,:c:ol;...',,,''..........':c;,
.,,;:c:'....................';c:;;,
,,,:,::;:llllc,:c,:;;'.
+3
View File
@@ -0,0 +1,3 @@
░█▀▄░█▀█░█▀█░▀█▀░▀█▀░█▀▀░█▀▀░▀█▀░░░█▀█░█░█░▀█▀░█▄█
░█▀▄░█░█░█░█░░█░░░█░░█▀▀░▀▀█░░█░░░░█░█░▀▄▀░░█░░█░█
░▀░▀░▀▀▀░▀▀▀░░▀░░▀▀▀░▀▀▀░▀▀▀░░▀░░░░▀░▀░░▀░░▀▀▀░▀░▀
+26
View File
@@ -0,0 +1,26 @@
▄▀▀▄▄
▄▀▀▀▀▀▀▀▀▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▀▀▀▀
▀▀▀▀▀▀▀▀▀▀ ▄▄▀▀▀▀▀▀▀▀▄▄
▄▀▀▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▄▄▀▀▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀

+16
View File
@@ -0,0 +1,16 @@

▄▄▄▄ ▄▄ ▄▄▄▄▄▄
▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄ 
▄▄▄▄ ▄ ▄▄▄▄▄ ▄ ▄ ▄  ▄▄▄
▄▄▄▄ ▄▄▄▄▄ ▄ ▄ ▄ ▄▄▄
▄▄▄▄▄▄▄▄▄ ▄ ▄ ▄ ▄   
▄▄▄ ▄ ▄▄   ▄ ▄ ▄ ▄ ▄ ▄▄ 
 ▄▄▄▄▄▄  ▄ ▄ ▄ ▄▄▄▄▄  
▄▄▄▄▄▄▄▄▄   ▄▄ ▄ ▄▄▄▄ ▄▄▄▄ ▄
 ▄▄ ▄▄▄   ▄▄ ▄▄▄▄ ▄▄▄▄ ▄▄▀▀
▀▄ ▄  ▄   ▄▄▄▄ ▄▄▄▄ ▄▄▀▀
 ▄▄ ▄▄▄▄▄ ▄▄▄▄ ▄▄▀▀
▄▄▄▄ ▄▄▄▄▄ ▄▄▀▀
▀▀▄▄▄▄▄▄▀▀▀


+16
View File
@@ -0,0 +1,16 @@
███████████ █████ ███ █████
░░███░░░░░███ ░░███ ░░░ ░░███
░███ ░███ ██████ ██████ ███████ ████ ██████ █████ ███████
░██████████ ███░░███ ███░░███░░░███░ ░░███ ███░░███ ███░░ ░░░███░
░███░░░░░███ ░███ ░███░███ ░███ ░███ ░███ ░███████ ░░█████ ░███
░███ ░███ ░███ ░███░███ ░███ ░███ ███ ░███ ░███░░░ ░░░░███ ░███ ███
█████ █████░░██████ ░░██████ ░░█████ █████░░██████ ██████ ░░█████
░░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░░░
██████ █████ █████ █████ ███
░░██████ ░░███ ░░███ ░░███ ░░░
░███░███ ░███ ░███ ░███ ████ █████████████
░███░░███░███ ░███ ░███ ░░███ ░░███░░███░░███
░███ ░░██████ ░░███ ███ ░███ ░███ ░███ ░███
░███ ░░█████ ░░░█████░ ░███ ░███ ░███ ░███
█████ ░░█████ ░░███ █████ █████░███ █████
░░░░░ ░░░░░ ░░░ ░░░░░ ░░░░░ ░░░ ░░░░░
+1
View File
@@ -0,0 +1 @@
NeoVim
+25
View File
@@ -0,0 +1,25 @@
▄ ▄▀▄ ▄ ▄ ▄
▀▀▀ ▀▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀
▀▀▄ ▀▀▀▀ ▀▀▀▀ ▀▀▀ ▀▀▀▀▀▀▀▀▀▀▄▄
▀▀▀▀▀ ▀▀▀▄ ▀▀▀▀▄▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀ ▀▀▀▄ ▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▄▀▀▀▀▀▀▄▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▄▀▀▀▀▀▀▀▀▀▀▀▄▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▀▄
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀ ▄▀▀▀▀▀▀▀▄
▀▀▀ ▀▀▀▀▀ ▄▄▄▄ ▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▄▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▄▀▄ ▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▄ ▀▀▀ ▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▄▀▀▀▀
▀▀▀▀▀▀▀ ▀ ▀▀▀▀▀
▀▀▀▀▀ ▀
▀

+1
View File
@@ -0,0 +1 @@
options.lua
-20
View File
@@ -1,20 +0,0 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Bootstaps │
-- ╰─────────────────────────────────────────────────────────╯
---- Copyright (C) 2026 Rootiest
-- SPDX-License-Identifier: GPL-3.0-or-later
-- This file is sourced before anything else so it can be used to set up
-- the runtime path and other fundamental settings.
-- ─────────────── Manage root user permissions for Neovim ───────────────
-- Redirect data directories if running as root to avoid permission issues
if os.getenv("USER") == "root" or os.getenv("SUDO_USER") ~= nil then
local root_data = "/root/.local/share/nvim-root"
vim.opt.packpath:prepend(root_data .. "/site")
vim.opt.runtimepath:prepend(root_data .. "/site")
-- Prevent root from writing shada to your user home
vim.opt.shadafile = "/root/.local/state/nvim-root.shada"
end
+171
View File
@@ -0,0 +1,171 @@
--- @module "config.autocmds"
--- This module defines the autocommands for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Autocommands │
-- ╰─────────────────────────────────────────────────────────╯
local autogrp = vim.api.nvim_create_augroup
local autocmd = vim.api.nvim_create_autocmd
-- LazyGit root detection
-- if pcall(require, 'lazygit.utils') then
-- autocmd('BufEnter', {
-- pattern = '*',
-- callback = function()
-- require('lazygit.utils').project_root_dir()
-- end,
-- })
-- end
-- ━━━━━━━━━━━━━━━━━━━━━━━ Set up Qalc keymappings ━━━━━━━━━━━━━━━━━━━━━━━
-- Create a group for filetype-specific mappings
autogrp('QalcFileTypeMappings', { clear = true })
-- Create an autocommand for the qalc filetype
autocmd('FileType', {
pattern = 'qalc',
group = 'QalcFileTypeMappings',
callback = function()
-- Set the key mapping: 'y' to run the :QalcYank command in normal mode
vim.keymap.set( -- Yank Result
'n',
'y',
':QalcYank +<CR>',
{ noremap = true, silent = true }
)
-- Set the key mapping: 'q' to run the :QalcClose command in normal mode
vim.keymap.set( -- Close Qalc
'n',
'q',
':QalcClose<CR>',
{ noremap = true, silent = true }
)
end,
})
-- Define a custom command to close the Qalc buffer
vim.api.nvim_create_user_command('QalcClose', function()
local buf_name = vim.api.nvim_buf_get_name(0)
if buf_name ~= '' then
vim.cmd('bd!')
else
-- If the buffer has no name, just remove it without invoking :bd!
vim.api.nvim_buf_delete(0, { force = true })
end
end, { bang = true })
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ Set up highlights ━━━━━━━━━━━━━━━━━━━━━━━━━━
local load_highlight = require('utils.highlight')
load_highlight.setup_autocommands()
load_highlight.setup_dashboard_highlight()
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ Set up cpp picker ━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Adds a keymap for quicker picking when in cpp files
require('data.autocmd').cpp_picker()
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ Set up nvim_exec ━━━━━━━━━━━━━━━━━━━━━━━
-- Function to check and execute the NVIM_EXEC environment variable
local function execute_nvim_exec()
local exec_command = os.getenv('NVIM_EXEC')
-- If NVIM_EXEC is set, execute the command
if exec_command then
vim.cmd(exec_command)
end
end
-- Define an autogroup for the NvimExec autocmd
autogrp('NvimExec', { clear = true })
-- Define an autocmd to run the function at startup
autocmd('VimEnter', {
group = 'NvimExec',
callback = execute_nvim_exec,
})
-- Create an autogroup for managing command-line abbreviations
local abbrev_group = autogrp('LazyAbbreviationGroup', { clear = true })
-- Create an autocmd for unwrapping the 'lazy' abbreviation
autocmd('CmdlineEnter', {
group = abbrev_group,
callback = function()
vim.cmd([[
cnoreabbrev <expr> lazy ((getcmdtype() == ':' && getcmdline() == 'lazy') ? 'Lazy' : 'lazy')
]])
end,
})
-- change line number based on mode:
-- for command mode: make it absolute for ranges etc
-- for normal mode: relative movements <3
local cmdline_group = vim.api.nvim_create_augroup('CmdlineLinenr', {})
-- debounce cmdline enter events to make sure we dont have flickering for non user cmdline use
-- e.g. mappings using : instead of <cmd>
local cmdline_debounce_timer
autocmd('CmdlineEnter', {
group = cmdline_group,
callback = function()
cmdline_debounce_timer = vim.uv.new_timer()
cmdline_debounce_timer:start(
100,
0,
vim.schedule_wrap(function()
if vim.o.number then
vim.o.relativenumber = false
vim.api.nvim__redraw({ statuscolumn = true })
end
end)
)
end,
})
autocmd('CmdlineLeave', {
group = cmdline_group,
callback = function()
if cmdline_debounce_timer then
cmdline_debounce_timer:stop()
cmdline_debounce_timer = nil
end
if vim.o.number then
vim.o.relativenumber = true
end
end,
})
autogrp('RootyCustomEvent', { clear = true })
autocmd({ 'BufReadPost', 'BufNewFile' }, {
group = 'RootyCustomEvent',
callback = function(args)
local ignored_filetypes = require('data.types').general.ft
local ft = vim.bo[args.buf].filetype
if not vim.tbl_contains(ignored_filetypes, ft) then
vim.api.nvim_exec_autocmds('User', { pattern = 'LazyFileOpen' })
end
end,
})
-- Don't comment next line when using `o`
vim.api.nvim_create_autocmd('FileType', {
pattern = '*',
callback = function()
vim.opt_local.formatoptions:remove({ 'o' })
end,
})
-- Run async commands with output to split
vim.api.nvim_create_user_command('RunAsync', function(async_opts)
-- Save current buffer first
vim.cmd('w')
-- Construct the full command
local cmd = table.concat(async_opts.fargs, ' ')
-- Open a horizontal split with the terminal running the command
vim.cmd('belowright split | terminal ' .. cmd)
-- Optional: return focus to original window
vim.cmd('wincmd p')
end, {
nargs = '+', -- Require at least one argument
})
+13
View File
@@ -0,0 +1,13 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Early interventions │
-- ╰─────────────────────────────────────────────────────────╯
-- Execute project-specific configuration if it exists
local project_config = vim.fn.getcwd() .. '/.nvim.lua'
if vim.fn.filereadable(project_config) == 1 then
dofile(project_config)
end
-- Address vim.hl bug impacting `:Inspect` command
---@see https://github.com/neovim/neovim/issues/31675
vim.hl = vim.highlight
+65
View File
@@ -0,0 +1,65 @@
--- @module "config.keymaps"
--- This module defines the keymapping operations for the Neovim configuration.
--- The actual keybindings are defined in lua/data/keys.lua
-- ╭─────────────────────────────────────────────────────────╮
-- │ Keybinds │
-- ╰─────────────────────────────────────────────────────────╯
-- All keybinds are defined in lua/data/keys.lua
-- This allows both plugin and general keybinds to
-- be defined in a single central location
-- Add keymapper function
local add_keymap = require('data.func').add_keymap
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Group Keybinds ━━━━━━━━━━━━━━━━━━━━━━━━
-- Add keymaps for menu groups
for _, item in ipairs(require('data.keys').groups) do
add_keymap(item)
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ General Keybinds ━━━━━━━━━━━━━━━━━━━━━━━
-- Add keymaps for miscellaneous keybinds
for _, item in ipairs(require('data.keys').misc) do
add_keymap(item)
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━ Telescope Keybinds ━━━━━━━━━━━━━━━━━━━━━━
-- Add keymaps for telescope symbols
for _, item in ipairs(require('data.keys').telescope.symbols) do
add_keymap(item)
end
if require('data.cond').use_splits() then
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Resizing splits ━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Add keymaps for resizing splits
for _, map in ipairs(require('data.keys').splits.resize) do
add_keymap(map[1], map[2], map[3], require('data.types').all_modes)
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━ Moving between splits ━━━━━━━━━━━━━━━━━━━━━━━━
-- Add keymaps for moving between splits
for _, map in ipairs(require('data.keys').splits.move) do
add_keymap(map[1], map[2], map[3], require('data.types').all_modes)
end
-- ━━━━━━━━━━━━━━━━━━ Swapping buffers between windows ━━━━━━━━━━━━━━━
-- Add keymaps for swapping buffers
for _, map in ipairs(require('data.keys').splits.swap) do
add_keymap(map[1], map[2], map[3], require('data.types').all_modes)
end
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MultiCursor ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Add keymaps for multicursor
for _, item in ipairs(require('data.keys').multicursor) do
add_keymap(item)
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Terminal ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Snacks Terminal
for _, item in ipairs(require('data.keys').snacksterm) do
add_keymap(item)
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Overrides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
require('config.overrides')
+112
View File
@@ -0,0 +1,112 @@
---@module "config.lazy"
--- This module bootstraps Lazy.nvim.
--- Lazy is a plugin manager for Neovim.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Lazy │
-- ╰─────────────────────────────────────────────────────────╯
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
if not vim.uv.fs_stat(lazypath) then
-- stylua: ignore
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", lazypath
})
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PLUGINS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
local plugin_specs = {
{ -- LazyVim
'LazyVim/LazyVim',
-- dev = true,
priority = 900,
opts = require('data.types').lazyvim.opts,
},
{
import = 'lazyvim.plugins', -- LazyVim Core Plugins
},
{ -- VSCode
import = 'lazyvim.plugins.extras.vscode',
},
{ import = 'lvplugs' }, -- LazyVim Plugins
{ import = 'plugins' }, -- General Plugins
}
-- ━━━━━━━━━━━━━━━━━━━━━━━━━ Lazy Configuration ━━━━━━━━━━━━━━━━━━━━━━
local lazy_spec = {
spec = plugin_specs,
rocks = {
hererocks = vim.g.use_luarocks,
},
---@diagnostic disable-next-line: assign-type-mismatch
dev = {
fallback = true,
},
install = {
missing = true,
colorscheme = {
-- 'ex-catppuccin-mocha',
'catppuccin-mocha',
'tokyonight',
'default',
},
},
defaults = {
lazy = true,
version = nil,
event = 'VeryLazy',
},
checker = {
-- automatically check for plugin updates
enabled = true,
notify = true,
frequency = 3600,
check_pinned = false,
},
change_detection = {
-- automatically check for config file changes and reload the ui
enabled = true,
notify = false,
},
performance = {
cache = {
enabled = true,
},
reset_packpath = true,
rtp = {
reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory
disabled_plugins = require('data.types').lazy.disabled_plugins,
},
},
profiling = {
loader = true,
require = true,
},
ui = {
border = 'rounded',
title = ' Plugin Manager ',
},
}
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Import Plugins ━━━━━━━━━━━━━━━━━━━━━━━━
-- Automatically import all subdirectories of `lua/plugins`
local plugin_dirs = vim.fn.glob('~/.config/nvim/lua/plugins/*', true, true)
for _, dir in ipairs(plugin_dirs) do
if vim.fn.isdirectory(dir) == 1 then
table.insert( -- Add directory to the plugin import table
plugin_specs,
{ import = 'plugins.' .. vim.fn.fnamemodify(dir, ':t') }
)
end
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Setup Lazy ━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Initialize Lazy plugin manager
require('lazy').setup(lazy_spec)
+196
View File
@@ -0,0 +1,196 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Setup Git Signs for Mini.Files │
-- ╰─────────────────────────────────────────────────────────╯
local nsMiniFiles = vim.api.nvim_create_namespace('mini_files_git')
local autocmd = vim.api.nvim_create_autocmd
local _, MiniFiles = pcall(require, 'mini.files')
-- Cache for git status
local gitStatusCache = {}
local cacheTimeout = 2000 -- Cache timeout in milliseconds
---@type table<string, {symbol: string, hlGroup: string}>
---@param status string
---@return string symbol, string hlGroup
local function mapSymbols(status)
local statusMap = {
-- stylua: ignore start
[" M"] = { symbol = "", hlGroup = "GitSignsChange"}, -- Modified in the working directory
["M "] = { symbol = "", hlGroup = "GitSignsChange"}, -- modified in index
["MM"] = { symbol = "", hlGroup = "GitSignsChange"}, -- modified in both working tree and index
["A "] = { symbol = "+", hlGroup = "GitSignsAdd" }, -- Added to the staging area, new file
["AA"] = { symbol = "", hlGroup = "GitSignsAdd" }, -- file is added in both working tree and index
["D "] = { symbol = "-", hlGroup = "GitSignsDelete"}, -- Deleted from the staging area
["AM"] = { symbol = "", hlGroup = "GitSignsChange"}, -- added in working tree, modified in index
["AD"] = { symbol = "-•", hlGroup = "GitSignsChange"}, -- Added in the index and deleted in the working directory
["R "] = { symbol = "", hlGroup = "GitSignsChange"}, -- Renamed in the index
["U "] = { symbol = "", hlGroup = "GitSignsChange"}, -- Unmerged path
["UU"] = { symbol = "", hlGroup = "GitSignsAdd" }, -- file is unmerged
["UA"] = { symbol = "", hlGroup = "GitSignsAdd" }, -- file is unmerged and added in working tree
["??"] = { symbol = "?", hlGroup = "GitSignsDelete"}, -- Untracked files
["!!"] = { symbol = "!", hlGroup = "GitSignsChange"}, -- Ignored files
-- stylua: ignore end
}
local result = statusMap[status] or { symbol = '?', hlGroup = 'NonText' }
return result.symbol, result.hlGroup
end
---@param cwd string
---@param callback function
---@return nil
local function fetchGitStatus(cwd, callback)
local function on_exit(content)
if content.code == 0 then
callback(content.stdout)
vim.g.content = content.stdout
end
end
vim.system(
{ 'git', 'status', '--ignored', '--porcelain' },
{ text = true, cwd = cwd },
on_exit
)
end
---@param str string?
local function escapePattern(str)
---@diagnostic disable-next-line: need-check-nil
return str:gsub('([%^%$%(%)%%%.%[%]%*%+%-%?])', '%%%1')
end
---@param buf_id integer
---@param gitStatusMap table
---@return nil
local function updateMiniWithGit(buf_id, gitStatusMap)
vim.schedule(function()
local nlines = vim.api.nvim_buf_line_count(buf_id)
local cwd = vim.fs.root(buf_id, '.git')
local escapedcwd = escapePattern(cwd)
if vim.fn.has('win32') == 1 then
escapedcwd = escapedcwd:gsub('\\', '/')
end
for i = 1, nlines do
local entry = MiniFiles.get_fs_entry(buf_id, i)
if not entry then
break
end
local relativePath = entry.path:gsub('^' .. escapedcwd .. '/', '')
local status = gitStatusMap[relativePath]
if status then
local symbol, hlGroup = mapSymbols(status)
vim.api.nvim_buf_set_extmark(buf_id, nsMiniFiles, i - 1, 0, {
sign_text = symbol,
sign_hl_group = hlGroup,
priority = 2,
})
else
end
end
end)
end
-- Thanks for the idea of gettings https://github.com/refractalize/oil-git-status.nvim signs for dirs
---@param content string
---@return table
local function parseGitStatus(content)
local gitStatusMap = {}
-- lua match is faster than vim.split (in my experience )
for line in content:gmatch('[^\r\n]+') do
local status, filePath = string.match(line, '^(..)%s+(.*)')
-- Split the file path into parts
local parts = {}
for part in filePath:gmatch('[^/]+') do
table.insert(parts, part)
end
-- Start with the root directory
local currentKey = ''
for i, part in ipairs(parts) do
if i > 1 then
-- Concatenate parts with a separator to create a unique key
currentKey = currentKey .. '/' .. part
else
currentKey = part
end
-- If it's the last part, it's a file, so add it with its status
if i == #parts then
gitStatusMap[currentKey] = status
else
-- If it's not the last part, it's a directory. Check if it exists, if not, add it.
if not gitStatusMap[currentKey] then
gitStatusMap[currentKey] = status
end
end
end
end
return gitStatusMap
end
---@param buf_id integer
---@return nil
local function updateGitStatus(buf_id)
---@diagnostic disable-next-line: param-type-mismatch
if not vim.fs.root(vim.uv.cwd(), '.git') then
return
end
local cwd = vim.fn.expand('%:p:h')
local currentTime = os.time()
if
gitStatusCache[cwd]
and currentTime - gitStatusCache[cwd].time < cacheTimeout
then
updateMiniWithGit(buf_id, gitStatusCache[cwd].statusMap)
else
fetchGitStatus(cwd, function(content)
local gitStatusMap = parseGitStatus(content)
gitStatusCache[cwd] = {
time = currentTime,
statusMap = gitStatusMap,
}
updateMiniWithGit(buf_id, gitStatusMap)
end)
end
end
---@return nil
local function clearCache()
gitStatusCache = {}
end
local function augroup(name)
return vim.api.nvim_create_augroup('MiniFiles_' .. name, { clear = true })
end
autocmd('User', {
group = augroup('start'),
pattern = 'MiniFilesExplorerOpen',
-- pattern = { "minifiles" },
callback = function()
local bufnr = vim.api.nvim_get_current_buf()
updateGitStatus(bufnr)
end,
})
autocmd('User', {
group = augroup('close'),
pattern = 'MiniFilesExplorerClose',
callback = function()
clearCache()
end,
})
autocmd('User', {
group = augroup('update'),
pattern = 'MiniFilesBufferUpdate',
callback = function(sii)
local bufnr = sii.data.buf_id
local cwd = vim.fn.expand('%:p:h')
if gitStatusCache[cwd] then
updateMiniWithGit(bufnr, gitStatusCache[cwd].statusMap)
end
end,
})
+64
View File
@@ -0,0 +1,64 @@
--- @module "config.neovide"
--- This module defines the neovide options for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Neovide │
-- ╰─────────────────────────────────────────────────────────╯
-- Set GUI font
vim.opt.guifont = 'Iosevka Rootiest V2:#e-subpixelantialias:h12'
-- refresh rate and translucency
vim.g.neovide_refresh_rate = 120
vim.g.neovide_opacity = 0.85
vim.g.neovide_window_blurred = true
vim.g.neovide_floating_blur_amount_x = 2.0
vim.g.neovide_floating_blur_amount_y = 2.0
-- cursor fx
vim.g.neovide_cursor_vfx_mode = 'pixiedust'
vim.g.neovide_cursor_smooth_blink = true
vim.g.neovide_cursor_vfx_particle_density = 16.8
vim.g.neovide_cursor_vfx_particle_lifetime = 2.2
vim.g.neovide_cursor_vfx_particle_phase = 1.2
vim.g.neovide_cursor_vfx_particle_curl = 1.0
vim.g.neovide_cursor_animation_length = 0.08
vim.g.neovide_cursor_trail_size = 0.8
-- floating shadow
vim.g.neovide_floating_shadow = true
vim.g.neovide_floating_z_height = 10
vim.g.neovide_light_angle_degrees = 45
vim.g.neovide_light_radius = 3
vim.g.neovide_floating_blur_amount_x = 1.0
vim.g.neovide_floating_blur_amount_y = 1.0
vim.g.neovide_floating_corner_radius = 0.50
-- scaling
vim.g.neovide_scale_factor = 1.0
-- padding
vim.g.neovide_padding_top = 0
vim.g.neovide_padding_bottom = 0
vim.g.neovide_padding_right = 0
vim.g.neovide_padding_left = 0
-- ━━━━━━━━━━━━━━━━━━━━━━━━━ Clipboard mappings ━━━━━━━━━━━━━━━━━━━━━━
local modes = { 'n', 'v', 'c', 'i' }
-- System clipboard mappings
for _, mode in ipairs(modes) do
if mode == 'c' or mode == 'i' then
vim.keymap.set(mode, '<C-v>', '<C-r>+', { silent = true })
vim.keymap.set(mode, '<C-c>', '<C-r>+', { silent = true })
else
vim.keymap.set(mode, '<C-v>', ':r !xsel -b<CR>', { silent = true })
vim.keymap.set(mode, '<C-c>', ':w !xsel -i -b<CR>', { silent = true })
end
end
-- Wezterm-style clipboard mappings (Control-Shift)
for _, mode in ipairs(modes) do
if mode == 'c' or mode == 'i' then
vim.keymap.set(mode, '<C-S-v>', '<C-r>+', { silent = true })
vim.keymap.set(mode, '<C-S-c>', '<C-r>+', { silent = true })
else
vim.keymap.set(mode, '<C-S-v>', ':r !xsel -b<CR>', { silent = true })
vim.keymap.set(mode, '<C-S-c>', ':w !xsel -i -b<CR>', { silent = true })
end
end
+17
View File
@@ -0,0 +1,17 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Neovim Updater Debug Functions │
-- ╰─────────────────────────────────────────────────────────╯
local D = {}
-- local P = require("nvim_updater")
local U = require('nvim_updater.utils')
function D.test_floating_window()
local output = U.run_hidden_command(
"cd ~/.local/src/neovim && git --no-pager log --pretty=format:'%s' HEAD..origin/master"
)
U.draw_floating_window(output)
end
return D
+257
View File
@@ -0,0 +1,257 @@
--- @module "config.options"
--- This module defines the user options for the Neovim configuration.
--- Variables defined here set configuration options for the rest
--- of the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Options │
-- ╰─────────────────────────────────────────────────────────╯
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ KEYS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.opt.foldlevel = 99
-- Set the mapleader variable to the space key
vim.g.mapleader = " " ---@type string Options: <leader>
-- Set the maplocalleader variable to the space key
vim.g.maplocalleader = "\\" ---@type string Options: <localleader>
-- Set the timeout length for key combinations
vim.g.timeoutlen = 1000 ---@type integer Options: <ms>
-- Allow horizontal motion keys to wrap to next line at start/end of line
vim.opt.whichwrap:append("h,l,<,>,[,]")
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ LSP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- We don't need perl
vim.g.loaded_perl_provider = 0 ---@type integer Options: <0|1>
-- or ruby
vim.g.loaded_ruby_provider = 0 ---@type integer Options: <0|1>
-- Prefer basedpyright for python
vim.g.lazyvim_python_lsp = "pyright" ---@type string Options: [python lsp]
-- Use tiny-inline-diagnostic
vim.g.usetinyinline = true ---@type boolean Options: <true|false>
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ GIT ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Github username for dashboard and other customizations
vim.g.gitname = 'rootiest' ---@type string Options: <github username>
-- Show GitHub Contributions on dashboard
vim.g.show_github_contrib = true ---@type boolean Options: <true|false>
-- Highlight lines with git changes
vim.g.git_line_hl = false ---@type boolean Options: <true|false>
-- Highlight words with git changes
vim.g.git_word_hl = false ---@type boolean Options: <true|false>
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ FORMAT AND SAVE ━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.opt.foldlevel = 99 ---@type integer Options: <0-99>
-- Auto-format
vim.g.autoformat = true ---@type boolean Options: <true|false>
-- Auto-save
vim.g.autosave = true ---@type boolean Options: <true|false>
-- Enable encouraging feedback
vim.g.encourage_me = true ---@type boolean Options: <true|false>
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MISCELLANEOUS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Use WakaTime for code stats
vim.g.usewakatime = true ---@type boolean Options: <true|false>
-- Allow music controls and stats
vim.g.usemusic = false ---@type boolean Options: <true|false>
-- Allow discord presence
vim.g.usediscord = true ---@type boolean Options: <true|false>
-- Enable HardTime on startup
vim.g.usehardtime = false ---@type boolean Options: <true|false>
-- Enable Image plugin on compatible terminals
vim.g.useimage = true ---@type boolean Options: <true|false>
-- Enable LazyGit plugin
vim.g.uselazygit = true ---@type boolean Options: <true|false>
-- Ignore missing lazy.nvim plugin manager
vim.g.ignore_no_lazy = false ---@type boolean Options: <true|false>
-- Enable codesnap for code screenshots
vim.g.codesnap = true ---@type boolean Options: <true|false>
-- Enable Auto-hiding cursorline
vim.g.auto_cursorline = false ---@type boolean Options: <true|false>
-- Toggle cursorline (when not auto)
vim.o.cursorline = false ---@type boolean Options: <true|false>
-- Enable Smart Scrolloff
vim.g.smart_scrolloff = false ---@type boolean Options: <true|false>
-- Enable Dead Column
vim.g.dead_column = false ---@type boolean Options: <true|false>
-- Animate blinky cursor
vim.g.blinky = true ---@type boolean Options: <true|false>
-- Enable todo-comments features
vim.g.usetodo = true ---@type boolean Options: <true|false>
-- Use Floating help window
vim.g.usefloatinghelp = false ---@type boolean Options: <true|false>
-- Use dev mode for rootiest plugins
vim.g.rootiest_dev = true ---@type boolean Options: <true|false>
-- Enable luarocks package manager
vim.g.use_luarocks = false ---@type boolean Options: <true|false>
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PICKER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Select default fallback picker
vim.g.lazyvim_picker = "auto" ---@type string Options: [picker]
-- ╭───────────────────────────╮  auto
-- │ │  telescope
-- │ Pickers: │  fzf
-- │ Choose a picker │
-- │ from the list  │
-- │ │
-- ╰───────────────────────────╯
-- Use snacks picker by default
vim.g.use_snacks_picker = true ---@type boolean Options: <true|false>
-- Use the Telescope plugin
vim.g.use_telescope = false ---@type boolean Options: <true|false>
-- Use the Fzf plugin
vim.g.use_fzf_lua = false ---@type boolean Options: <true|false>
-- Use oil file manager
vim.g.useoil = false ---@type boolean Options: <true|false>
-- Use NeoTree file manager
vim.g.useneotree = false ---@type boolean Options: <true|false>
-- Use Yazy file manager
vim.g.useyazi = true ---@type boolean Options: <true|false>
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ AI TOOL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Configure the AI completion provider
vim.g.aitool = "copilot" ---@type string Options: [ai tool]
-- ╭───────────────────────────╮  neocodeium
-- │ │  codeium
-- │ AI Tools: │  copilot
-- │ Choose an AI provider │  tabnine
-- │ from the list  │  minuet
-- │ │  ollama
-- ╰───────────────────────────╯  none
-- Enable ChatGPT plugin for AI chat
vim.g.usechatgpt = false ---@type boolean Options: <true|false>
-- Enable Avante plugin for AI chat
vim.g.useavante = false ---@type boolean Options: <true|false>
-- Enable Code-Companion plugin for AI chat
vim.g.usecodecomp = true ---@type boolean Options: <true|false>
-- Enable GP plugin for AI chat
vim.g.usegpai = false ---@type boolean Options: <true|false>
-- Use Blink instead of nvim-cmp
vim.g.useblinkcmp = true ---@type boolean Options: <true|false>
-- Use experimental performance fork
vim.g.cmp_performance_enabled = false ---@type boolean Options: <true|false>
-- When using cmp_performance_enabled with blink, blink will follow main branch
-- Requires a working rust toolchain
---@see vim.g.lazyvim_blink_main
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ STATUS COLUMN ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.g.statuscolumn = "snacks" ---@type string Options: [statuscolumn]
-- ╭───────────────────────────╮  barsNlines
-- │ │  snacks
-- │ Status Columns: │  native
-- │ Choose a plugin from │
-- │ the list  │
-- │ │
-- ╰───────────────────────────╯
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BUFFER LINE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.g.tabline = "none" ---@type string Options: [tabline]
-- ╭───────────────────────────╮  bufferline
-- │ │  barsNlines
-- │ Tab Lines: │  none
-- │ Choose a plugin from │
-- │ the list  │
-- │ │
-- ╰───────────────────────────╯
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DASHBOARD ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.g.dashboard = "snacks" ---@type string Options: [dashboard]
-- ╭───────────────────────────╮  alpha
-- │ │  nvim-dashboard
-- │ Dashboards: │  snacks
-- │ Choose a plugin from │  none
-- │ the list  │
-- │ │
-- ╰───────────────────────────╯
-- Dashboard logo file
vim.g.dash_logo = "mini.txt" ---@type string Options: [dash logo]
-- Dashboard header color
vim.g.DashboardHeaderColor = "#88fc9a" ---@type string Options: [hex color]
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ STATUS LINE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vim.g.statusline = "lualine" ---@type string Options: [statusline]
-- ╭───────────────────────────╮  lualine
-- │ │  heirline
-- │ Status Lines: │  barsNlines
-- │ Choose a plugin from │  basic
-- │ the list  │  none
-- │ │
-- ╰───────────────────────────╯
-- Click git components on statusline to open LazyGit
vim.g.statusline_clickable_git = true ---@type boolean Options: <true|false>
-- Show wakatime stats on statusline
vim.g.stats_wakatime = false ---@type boolean Options: <true|false>
-- Show music stats on statusline
vim.g.stats_music = true ---@type boolean Options: <true|false>
-- Ignored player sources for music stats
vim.g.stats_ignored_players = { ---@type string[] Options: [ignored players]
"chromium",
"firefox",
"kdeconnect",
"haruna",
"plasma-browser-integration",
"plasma-browser-integration-76042",
}
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ COLOR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Background color
vim.o.background = "dark" ---@type string Options: <dark|light>
-- Disable Transparency
vim.g.disable_transparency = true ---@type boolean Options: <true|false>
-- Auto Dark-mode
vim.g.autodarkmode = false ---@type boolean Options: <true|false>
-- Set colorcolumn
--vim.opt.colorcolumn = "120" ---@type string|table Options: [column]
--Use Astral colorscheme management
vim.g.use_astral = false ---@type boolean Options: <true|false>
-- ━━━━━━━━━━━━━━━━━━━━━━━━━ TABS AND INDENTATION ━━━━━━━━━━━━━━━━━━━━━━━━
-- Define characters for tabs, indents, and scopes
-- Option [2] will override [1] if both are defined
-- ──────────────── [1] Choose a preset character ──────────────────
-- Specify a character/table from the presets
-- See: data.types.ibl.char for a list of available characters
-- This option can provide multi-character cycling configurations
-- Tab characters
vim.g.tab_char_name = "none" ---@type string Options: [tab char]
-- Indent characters
vim.g.indent_char_name = "none" ---@type string Options: [indent char]
-- Scope characters
vim.g.scope_char_name = "scope" ---@type string Options: [scope char]
-- ──────────────── [2] Choose a specific character ────────────────
-- Define a character to be used in the whitespace to represent tabs/indents
-- This option allows use of any single character string
-- Multi-character cycling configurations are not possible with this option
-- Multi-character strings are not possible with any of the options
-- Tab character
vim.g.tab_char = " " ---@type string Options: [tab char]
-- -- Indent character
vim.g.indent_char = " " ---@type string Options: [indent char]
-- Scope character
vim.g.scope_char = "" ---@type string Options: [scope char]
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Completion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Cmp Window Border
vim.g.completion_borders = "rounded" ---@type string Options: [round|sharp|flat]
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Execute post-opts functions
require("config.postopts")
+182
View File
@@ -0,0 +1,182 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Overrides │
-- ╰─────────────────────────────────────────────────────────╯
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ Keymap Overrides ━━━━━━━━━━━━━━━━━━━━━━━
-- Add keymapper function
local add_keymap = require('data.func').add_keymap
-- Add keymaps for overrides
add_keymap(require('data.keys').overrides)
-- Replace '...' with '…' (ellipsis) on InsertLeave
require('data.func').setup_replace_ellipsis(true)
-- Search selected text in visual mode
add_keymap('/', '*<Esc>', 'Search selected text', 'v')
-- Use modern cipher instead of rot13
add_keymap(require('data.keys').cipher.hex)
-- Help keybinds
for _, item in ipairs(require('data.keys').help) do
add_keymap(item)
end
-- Remap Command Mode List
require('data.keys').cmd_mode()
-- ━━━━━━━━━━━━━━━━━━━━━━━━ Additional Overrides ━━━━━━━━━━━━━━━━━━━━━
-- Disable NeoMiniMap in Termux
if vim.g.is_termux then
if require('data.func').is_installed('neominimap') then
-- Disable NeoMiniMap
vim.cmd('Neominimap off')
end
end
-- Allow directional motions to wrap to next line
-- vim.cmd('set whichwrap+=h,l')
-- Stop snippet when leaving insert mode
vim.keymap.set({ 'i', 's' }, '<Esc>', function()
vim.snippet.stop()
return '<Esc>'
end, { expr = true, desc = 'Close snippet session' })
-- Swap the behavior of 'p' and 'P' while preserving plugin-defined behaviors
local opts = { noremap = false, silent = true, remap = true }
vim.keymap.set('n', 'p', 'P', opts)
vim.keymap.set('n', 'P', 'p', opts)
vim.keymap.set('n', 'q:', function()
Pick('command_history')
end, opts)
vim.api.nvim_create_user_command('LspListClients', function()
local clients =
vim.lsp.get_clients({ bufnr = vim.api.nvim_get_current_buf() })
if #clients == 0 then
print('No LSP attached')
else
local names = {}
for _, client in ipairs(clients) do
table.insert(names, client.name)
end
print('Attached LSP(s): ' .. table.concat(names, ', '))
end
end, {})
-- Statuscolumn Tweaks
require('config.statuscolumn')
-- Macro recording cursor color
local api = vim.api
-- Store current cursor color
local current_cursor_color = api.nvim_get_hl(0, { name = 'Cursor' }).bg
api.nvim_create_autocmd('RecordingEnter', {
callback = function()
api.nvim_set_hl(0, 'Cursor', { bg = '#ff5080' })
end,
})
api.nvim_create_autocmd('RecordingLeave', {
callback = function()
api.nvim_set_hl(0, 'Cursor', { bg = current_cursor_color })
end,
})
-- Remap 'q' to 'Q' to reduce accidental macros
if pcall(require, 'which-key') then
require('which-key').add({
lhs = 'q',
rhs = '<nop>',
mode = 'n',
hidden = true,
})
else
vim.keymap.set('n', 'q', '<nop>', { noremap = true })
end
vim.keymap.set('n', 'Q', 'q', { noremap = true, desc = 'Record macro' })
vim.keymap.set(
'n',
'<M-q>',
'Q',
{ noremap = true, desc = 'Replay last register' }
)
-- Duplicate and comment lines
vim.keymap.set('n', 'ycc', function()
vim.cmd('normal! ' .. vim.v.count1 .. 'yy')
vim.cmd('normal ' .. vim.v.count1 .. 'gcc')
vim.cmd("normal! ']$p")
end, { desc = 'Duplicate and comment lines' })
---------------------------------------------------------------------------
-- ╓─────────────────────────────────────────────────────────╖
-- ║ Scroll half a screen with <C-d> and <C-u> ║
-- ║ (with count and memory) ║
-- ╙─────────────────────────────────────────────────────────╜
local last_scroll_count = 1 -- Store the last used count
-- Define the ScrollDirection type
---@alias ScrollDirection 'up'|'down'
--- Scroll half a screen up or down
---@param direction ScrollDirection The direction to scroll in
local function scroll(direction)
-- Set the count to the provided count or the last used count
local count = vim.v.count > 0 and vim.v.count or last_scroll_count
-- Remember the count for next time
last_scroll_count = count
-- To remove the memory feature, uncomment the following line
-- count = vim.v.count > 0 and vim.v.count or 1 -- Use current count or default to 1
-- Calculate the number of lines in a half-screen
local half_screen = math.floor(vim.api.nvim_win_get_height(0) / 2)
-- Generate the key sequence
local keys = count * half_screen .. (direction == 'down' and '\x04' or '\x15')
-- Execute the key sequence
vim.api.nvim_feedkeys(
vim.api.nvim_replace_termcodes(keys, true, false, true),
'n',
false
)
end
-- Map the scroll functions to <C-d> and <C-u>
vim.keymap.set('n', '<C-d>', function()
scroll('down')
end, { silent = true })
vim.keymap.set('n', '<C-u>', function()
scroll('up')
end, { silent = true })
---------------------------------------------------------------------------
-- Dump floating window info to file
vim.keymap.set(
'n',
'<leader>fd',
require('data.func').dump_floating_window_info,
{ desc = 'Dump floating window info to file' }
)
---------------------------------------------------------------------------
-- Obsidian Project Configuration:
local function run_obsidian_config()
-- Reduce conceallevel for Obsidian UI
vim.o.conceallevel = 2
vim.cmd('Neominimap off')
end
vim.api.nvim_create_augroup('obsidian_config', { clear = true })
vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead', 'BufEnter' }, {
group = 'obsidian_config',
pattern = vim.fn.expand('~') .. '/vaults/Rootiest Notes/**',
callback = run_obsidian_config,
})
---------------------------------------------------------------------------
+50
View File
@@ -0,0 +1,50 @@
-- ━━━━━━━━━━━━━━━━━━━━━━━━ Post-Config Functions ━━━━━━━━━━━━━━━━━━━━━━━━
--- Function to setup post-opts
local function setup()
-- Setup blinky cursor
require('utils.blinky').setup(vim.g.blinky)
-- Setup nvim-remote
if vim.fn.executable('nvr') == 1 then
vim.env.GIT_EDITOR = "nvr -cc split --remote-wait +'set bufhidden=wipe'"
end
-- Check for termux
local prefix = vim.env.PREFIX
-- Check if prefix contains "com.termux"
if prefix ~= nil then
if prefix:match('com.termux') then
vim.g.useimage = false
vim.g.is_termux = true
vim.g.useavante = false
end
end
-- Define intel_arch
local intel_arch = { x64 = true, x86 = true }
local cur_arch = require('data.func').get_system_arch()
-- Check the platform and disable incompatible plugins
if not intel_arch[cur_arch] then
vim.g.useimage = false
vim.g.useavante = false
end
end
local function define_globals()
-- Define Pick function
Pick = require('data.func').pick
-- Define Pick command
vim.api.nvim_create_user_command('Pick', function(opts)
Pick(unpack(opts.fargs))
end, { nargs = '*' })
end
-- Run Setup function
setup()
-- Define Global Functions
define_globals()
+23
View File
@@ -0,0 +1,23 @@
--- @module "config.profiler"
--- This module configures the profiler for the Neovim configuration.
--- This tool can be used to profile specific modules or all modules.
---
--- The profiler can be toggled with the leader keybinding `d<f1>`
--- or with the `PROF` environment variable.
-- ╭─────────────────────────────────────────────────────────╮
-- │ PROFILER │
-- ╰─────────────────────────────────────────────────────────╯
if vim.env.PROF then
-- example for lazy.nvim
-- change this to the correct path for your plugin manager
local snacks = vim.fn.stdpath('data') .. '/lazy/snacks.nvim'
vim.opt.rtp:append(snacks)
require('snacks.profiler').startup({
startup = {
event = 'VimEnter', -- stop profiler on this event. Defaults to `VimEnter`
-- event = "UIEnter",
-- event = "VeryLazy",
},
})
end
+145
View File
@@ -0,0 +1,145 @@
--- @module "config.rocks"
--- This module bootstraps rocks.nvim.
--- Rocks is a package manager for Neovim.
-- ╭─────────────────────────────────────────────────────────╮
-- │ ROCKS │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
-- ━━━━━━━━━━━━━━━━━━━━━━━━ Bootstrap rocks.nvim ━━━━━━━━━━━━━━━━━━━━━
function M.bootstrap()
do
local rocks_config = {
rocks_path = vim.env.HOME .. '/.local/share/nvim/rocks',
}
vim.g.rocks_nvim = rocks_config
local luarocks_path = {
vim.fs.joinpath(rocks_config.rocks_path, 'share', 'lua', '5.1', '?.lua'),
vim.fs.joinpath(
rocks_config.rocks_path,
'share',
'lua',
'5.1',
'?',
'init.lua'
),
}
package.path = package.path .. ';' .. table.concat(luarocks_path, ';')
local luarocks_cpath = {
vim.fs.joinpath(rocks_config.rocks_path, 'lib', 'lua', '5.1', '?.so'),
vim.fs.joinpath(rocks_config.rocks_path, 'lib64', 'lua', '5.1', '?.so'),
-- Remove the dylib and dll paths if you do not need macos or windows support
vim.fs.joinpath(rocks_config.rocks_path, 'lib', 'lua', '5.1', '?.dylib'),
vim.fs.joinpath(
rocks_config.rocks_path,
'lib64',
'lua',
'5.1',
'?.dylib'
),
vim.fs.joinpath(rocks_config.rocks_path, 'lib', 'lua', '5.1', '?.dll'),
vim.fs.joinpath(rocks_config.rocks_path, 'lib64', 'lua', '5.1', '?.dll'),
}
package.cpath = package.cpath .. ';' .. table.concat(luarocks_cpath, ';')
vim.opt.runtimepath:append(
vim.fs.joinpath(
rocks_config.rocks_path,
'lib',
'luarocks',
'rocks-5.1',
'rocks.nvim',
'*'
)
)
end
-- If rocks.nvim is not installed then install it!
if not pcall(require, 'rocks') then
local rocks_location =
---@diagnostic disable-next-line: param-type-mismatch
vim.fs.joinpath(vim.fn.stdpath('cache'), 'rocks.nvim')
if not vim.uv.fs_stat(rocks_location) then
-- Pull down rocks.nvim
vim.fn.system({
'git',
'clone',
'--filter=blob:none',
'https://github.com/nvim-neorocks/rocks.nvim',
rocks_location,
})
end
-- If the clone was successful then source the bootstrapping script
assert(
vim.v.shell_error == 0,
'rocks.nvim installation failed. Try exiting and re-entering Neovim!'
)
vim.cmd.source(vim.fs.joinpath(rocks_location, 'bootstrap.lua'))
vim.fn.delete(rocks_location, 'rf')
end
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Ensure Luarocks ━━━━━━━━━━━━━━━━━━━━━━━
function M.ensure_luarocks()
-- Check if 'luarocks' command is available
if os.execute('luarocks --version') ~= 0 then
-- 'luarocks' is not installed, set up 'luarocks.nvim' plugin
local status_ok, lazy = pcall(require, 'lazy')
if not status_ok then
vim.notify(
'Lazy.nvim not found. Please install it to manage plugins.',
vim.log.levels.ERROR
)
return
end
lazy.setup({
{
'vhyrro/luarocks.nvim',
priority = 1000, -- Ensure this plugin loads first
opts = {
rocks = { 'magick' }, -- Example of a rock that you want to install
},
config = function()
-- Restart Neovim to apply changes after 'luarocks.nvim' sets up
vim.cmd('source $MYVIMRC | qa')
end,
},
})
end
end
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ Rocks plugin spec ━━━━━━━━━━━━━━━━━━━━━━
M.plugin_spec = {
'vhyrro/luarocks.nvim',
priority = 1000, -- Very high priority is required
opts = {
rocks = { 'magick' }, -- specifies a list of rocks to install
},
}
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Load plugins ━━━━━━━━━━━━━━━━━━━━━━━━━
-- Load rocks package manager
M.load_rocks = function()
require('rocks')
end
-- Perform setup
M.setup = function()
if vim.g.use_luarocks and not vim.g.is_termux then
M.bootstrap()
M.ensure_luarocks()
M.load_rocks()
end
end
-- Execute the setup function
M.setup()
return M
+158
View File
@@ -0,0 +1,158 @@
---@module "config.rootiest"
--- This module contains the configuration options and functions
--- for the rootiest distro.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Rootiest Module │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
--- Function to trigger an error message
---@param message string The error message to trigger
---@return boolean condition true if the error message was triggered, false otherwise
local function trigger_error(message)
return require('data').func.notify(message, 'ERROR')
end
local function setup_os_vars()
-- Check if we are on windows
vim.g.is_windows = vim.fn.has('win32') == 1 or vim.fn.has('win64') == 1
end
--- Yank line without leading/trailing whitespace
---@return nil
function M.yank_line()
vim.api.nvim_feedkeys('_v$hy$', 'n', true)
end
-- Variable to track if the precognition plugin has been called once
local precog_first_time = true
--- Toggle the precognition plugin
---@return nil
function M.toggle_precognition()
if pcall(require, 'precognition') then
-- Initialize precognition plugin
local precognition = require('precognition')
-- Toggle the plugin
if precog_first_time then
precognition.toggle()
precognition.toggle() -- Call toggle twice
precog_first_time = false
else
precognition.toggle() -- Call toggle once
end
else
trigger_error('precognition plugin is not installed')
end
end
--- Toggle Hardtime and Precognition together
---@return nil
function M.toggle_hardmode()
if pcall(require, 'hardtime') then
local hardtime = require('hardtime')
hardtime.toggle()
M.toggle_precognition()
else
trigger_error('hardtime plugin is not installed')
end
end
--- Load remote-nvim plugin
---@return boolean condition true if the plugin was loaded, false otherwise
function M.load_remote()
if pcall(require, 'remote-nvim') then
---@diagnostic disable-next-line: missing-parameter
require('remote-nvim').setup()
vim.cmd('RemoteStart')
return true
else
trigger_error('remote-nvim plugin is not installed')
return false
end
end
--- Yank text inside quotes on the current line and paste it into text inside quotes at various marks.
--- @return boolean true if any text was pasted successfully, false otherwise
function M.YankAndPasteInQuotes()
-- Yank text inside quotes on the current line
vim.cmd('normal! yiq')
-- Get the yanked text from the "0 register (the unnamed register)
local yanked_text = vim.fn.getreg('"')
-- List of marks to check ('a' to 'z')
local marks = 'abcdefghijklmnopqrstuvwxyz'
-- Flag to track if any pasting was successful
local was_pasted = false
-- Loop through each mark
for mark in marks:gmatch('.') do
-- Check if the mark exists (returns the line number or nil)
local position = vim.fn.getpos("'" .. mark)
if position[1] ~= 0 then
-- Go to the mark
vim.cmd("normal! '" .. mark)
-- Select text inside quotes and paste the yanked text
vim.cmd('normal! viq')
vim.cmd('normal! "' .. yanked_text .. 'P')
-- Set the flag to true since pasting was successful
was_pasted = true
end
end
-- Return whether any pasting was successful
return was_pasted
end
--- Evaluate Neovide state and activate settings if necessary
---@return boolean condition true if Neovide is active, false otherwise
function M.eval_neovide()
if vim.g.neovide then
require('config.neovide')
return true
else
return false
end
end
--- Define user commands
---@return nil
function M.define_commands()
-- Define Q as a usercmd
vim.api.nvim_create_user_command('Q', 'qall', { desc = 'Quit all buffers' })
-- Define yank line command
vim.api.nvim_create_user_command('YankLine', function()
M.yank_line()
end, { force = true, desc = 'Yank line without leading whitespace' })
vim.api.nvim_create_user_command(
'YankAndPasteQuotes',
M.YankAndPasteInQuotes,
{}
)
end
--- Set up rootiest module
function M.setup()
-- Early interventions
require('config.early')
-- Setup OS variables
setup_os_vars()
-- Setup neovide
M.eval_neovide()
-- Define user commands
M.define_commands()
-- Setup vimscripts
require('data.vim').setup()
-- Setup types data
require('data.types').setup()
-- Setup indentor
-- require('utils.indentor')
end
return M
+143
View File
@@ -0,0 +1,143 @@
-- Setup gradient line number column
-- Table to hold hex color values for easy reference
local colors = {
statusLineNrCurrent = '#b3befe',
statusLineNrDefault = '#444659',
fallbackColor = '#808080', -- Fallback gray if the group doesn't exist
}
--- Calculate a color gradient between two colors.
-- @param base_color (string) The starting color in hex format (e.g., '#RRGGBB').
-- @param target_color (string) The ending color in hex format (e.g., '#RRGGBB').
-- @param max_steps (number) The total number of steps in the gradient.
-- @param step (number) The current step in the gradient.
-- @return (string) The interpolated color in hex format.
local function calculate_gradient(base_color, target_color, max_steps, step)
-- Parse the base and target colors into RGB components
local br, bg, bb =
tonumber(base_color:sub(2, 3), 16),
tonumber(base_color:sub(4, 5), 16),
tonumber(base_color:sub(6, 7), 16)
local tr, tg, tb =
tonumber(target_color:sub(2, 3), 16),
tonumber(target_color:sub(4, 5), 16),
tonumber(target_color:sub(6, 7), 16)
-- Calculate the blending factor
local factor = step / max_steps
-- Interpolate between the base and target colors based on the blending factor
local r = math.floor(br + (tr - br) * factor)
local g = math.floor(bg + (tg - bg) * factor)
local b = math.floor(bb + (tb - bb) * factor)
return string.format('#%02X%02X%02X', r, g, b) -- Return the new color as a string
end
--- Get the foreground color of a highlight group.
-- @param group (string) The name of the highlight group.
-- @return (string) The foreground color in hex format or a fallback gray color.
local function get_highlight_fg(group)
local hl = vim.api.nvim_get_hl(0, { name = group })
if hl and hl.fg then
return string.format('#%06X', hl.fg) -- Convert the integer color to hex
else
return colors.fallbackColor -- Use fallback gray if the group doesn't exist
end
end
--- Set up gradient highlights for a specified group.
-- @param base_color (string) The starting color for the gradient.
-- @param group_name_prefix (string) The prefix for the highlight group names.
-- @param max_steps (number) The total number of steps for the gradient.
local function setup_gradient_highlights(
base_color,
group_name_prefix,
max_steps
)
local target_color = get_highlight_fg('StatusLineNrDefault') -- Get the default color for interpolation
for step = 1, max_steps do
local color = calculate_gradient(base_color, target_color, max_steps, step) -- Get the gradient color
vim.api.nvim_set_hl(
0,
group_name_prefix .. step,
{ fg = color, bg = 'NONE' } -- Set the highlight with foreground color and no background
)
end
end
-- Define highlight groups for current and default status line numbers
vim.api.nvim_set_hl(
0,
'StatusLineNrCurrent',
{ fg = colors.statusLineNrCurrent, bg = 'NONE', bold = true }
)
vim.api.nvim_set_hl(
0,
'StatusLineNrDefault',
{ fg = colors.statusLineNrDefault, bg = 'NONE' }
)
-- Set up gradient highlights for lines above and below the cursor
setup_gradient_highlights(colors.statusLineNrCurrent, 'StatusLineNrAbove', 10)
setup_gradient_highlights(colors.statusLineNrCurrent, 'StatusLineNrBelow', 10)
-- Custom status column for displaying line number gradients
_G.CustomStatusColumn = function()
local lnum = vim.v.lnum -- Current line number
local cursor_lnum = vim.fn.line('.') -- Current cursor line number
local max_gradient_steps = 10 -- Maximum steps in gradient
-- Use the plugin's original status column
local original_statuscolumn = require('snacks.statuscolumn').get()
--FIXME: Diagnistics indications currently non-functional
--
-- -- Check for diagnostics on the current line
-- local diagnostics = vim.diagnostic.get(0, { lnum = lnum - 1 }) -- Get diagnostics for the current line (subtract 1 for 0-based index)
-- local highlight_group = nil
--
-- -- Loop through diagnostics to determine highlight group based on severity
-- for _, diagnostic in ipairs(diagnostics) do
-- if diagnostic.severity == vim.diagnostic.severity.ERROR then
-- highlight_group = 'DiagnosticSignError'
-- break
-- elseif diagnostic.severity == vim.diagnostic.severity.WARN then
-- highlight_group = 'DiagnosticSignWarn'
-- elseif diagnostic.severity == vim.diagnostic.severity.INFO then
-- highlight_group = 'DiagnosticSignInfo'
-- elseif diagnostic.severity == vim.diagnostic.severity.HINT then
-- highlight_group = 'DiagnosticSignHint'
-- end
-- end
--
-- -- Highlight for lines with diagnostics
-- if highlight_group then
-- return '%#' .. highlight_group .. '#' .. original_statuscolumn .. '%*' -- Use the corresponding highlight for this line
-- end
-- Highlight for the current line
if lnum == cursor_lnum then
return '%#StatusLineNrCurrent#' .. original_statuscolumn .. '%*'
end
-- Highlight for lines above the cursor
if lnum < cursor_lnum and (cursor_lnum - lnum) <= max_gradient_steps then
local step = cursor_lnum - lnum
return '%#StatusLineNrAbove' .. step .. '#' .. original_statuscolumn .. '%*'
end
-- Highlight for lines below the cursor
if lnum > cursor_lnum and (lnum - cursor_lnum) <= max_gradient_steps then
local step = lnum - cursor_lnum
return '%#StatusLineNrBelow' .. step .. '#' .. original_statuscolumn .. '%*'
end
-- Default case for other lines
return '%#StatusLineNrDefault#' .. original_statuscolumn .. '%*'
end
-- Set the custom status column to be used
vim.o.statuscolumn = [[%!v:lua.CustomStatusColumn()]]
-26
View File
@@ -1,26 +0,0 @@
--[[
Constants
--]]
-- Copyright (C) 2026 Rootiest
-- SPDX-License-Identifier: GPL-3.0-or-later
local M = {}
--- Dashboard Header
M.header = [[
N E O V I M E D I T I O N
[ 󰈚 ] [ 󰈭 ] [ 󰊄 ] [ 󰒲 ] [ 󰒓 ] [ 󰩈 ]
]]
return M
+167
View File
@@ -0,0 +1,167 @@
---@module "data.autocmd"
--- This module defines the autocommands for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Autocommands │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
local augroup = vim.api.nvim_create_augroup
local autocmd = vim.api.nvim_create_autocmd
M.cpp_picker = function()
augroup('cpp_picker', { clear = true })
-- C++ Picker
autocmd('FileType', {
group = 'cpp_picker',
pattern = { 'cpp', 'c', 'h', 'hpp' },
callback = function()
require('data.func').add_keymap(require('data.keys').cpp_picker)
end,
})
end
M.minifiles = {
--- Function to dynamically resize the preview window
dynamic_resize = function()
local function update_width_preview()
local multiplier = 0.25
if vim.g.minifiles_width ~= nil then
multiplier = vim.g.minifiles_width
end
if package.loaded['mini.files'] then
-- Obtain the existing config
local config = require('mini.files').config
-- Update the width_preview based on the current window size
if multiplier > 1 then
-- If the multiplier is greater than 1, use as the preview width
config.windows.width_preview = multiplier
else
-- Otherwise, use the current window width multiplied by the multiplier
config.windows.width_preview = math.floor(vim.o.columns * multiplier)
end
-- Apply the updated config
require('mini.files').setup(config)
end
end
-- Flag to determine if mini.files is currently in use
local is_mini_files_active = false
-- Autocommand group to handle dynamic resizing
augroup('MiniFilesDynamicWidth', { clear = true })
-- Handle mini.files open event to set the flag
autocmd('User', {
group = 'MiniFilesDynamicWidth',
pattern = 'MiniFilesExplorerOpen',
callback = function()
is_mini_files_active = true
end,
})
-- Handle mini.files close event to reset the flag and update the preview width
autocmd('User', {
group = 'MiniFilesDynamicWidth',
pattern = 'MiniFilesExplorerClose',
callback = function()
is_mini_files_active = false
update_width_preview()
end,
})
-- Handle window resize event
autocmd('VimResized', {
group = 'MiniFilesDynamicWidth',
callback = function()
if is_mini_files_active then
-- Defer the update until mini.files closes
autocmd('User', {
group = 'MiniFilesDynamicWidth',
pattern = 'MiniFilesExplorerClose',
callback = update_width_preview,
once = true, -- Ensure this runs only once
})
else
-- If mini.files is not active, update immediately
update_width_preview()
end
end,
})
end,
}
-- Create an autogroup for the TermInsertMode autocmds
local TermInsertMode = augroup('TermInsertMode', { clear = true })
-- Start terminal in insert mode
autocmd({ 'TermOpen' }, {
group = TermInsertMode,
pattern = { '*' },
callback = function()
if vim.opt.buftype:get() == 'terminal' then
-- if filetype does not contain 'dashboard'
if not string.find(vim.opt.filetype:get(), 'dashboard') then
-- If window is editable
if vim.opt.modifiable:get() then
vim.cmd(':startinsert')
end
end
end
end,
})
-- When entering a terminal buffer auto switch to insert mode
-- I could use TermEnter event but it does not work when switching between window splits
autocmd({ 'BufEnter' }, {
group = TermInsertMode,
pattern = { '*' },
callback = function()
if vim.opt.buftype:get() == 'terminal' then
-- if filetype does not contain 'dashboard'
if not string.find(vim.opt.filetype:get(), 'dashboard') then
-- If window is editable
if vim.opt.modifiable:get() then
vim.cmd(':startinsert')
end
end
end
end,
})
-- Update OSC7 in fish shell
local function update_osc7()
local cwd = vim.fn.getcwd()
local uri = 'file://' .. vim.fn.hostname() .. cwd
io.stdout:write('\27]7;' .. uri .. '\27\\')
end
-- Save CWD where we can access it
local function save_cwd()
local cwd = vim.fn.getcwd()
local file = io.open(os.getenv('HOME') .. '/.nvim_last_dir', 'w')
if file then
file:write(cwd)
file:close()
end
end
-- Update OSC7 and file on directory change
autocmd('DirChanged', {
callback = function()
save_cwd()
update_osc7()
end,
})
-- Save on exit
autocmd('VimLeavePre', {
callback = save_cwd,
})
-- Send OSC 7 on startup
update_osc7()
-- Save CWD on startup
save_cwd()
return M
+147
View File
@@ -0,0 +1,147 @@
--- @module "data.cmd"
--- This module contains the commands for the plugins.
-- ╭─────────────────────────────────────────────────────────╮
-- │ CMD DATA │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
--- Autosave plugin cmds
M.autosave = {
'ASToggle',
}
--- CodeCompanion plugin cmds
M.codecompanion = {
'CodeCompanion',
'CodeCompanionChat',
'CodeCompanionActions',
'CodeCompanionCmd',
}
--- Codesnap plugin cmds
M.codesnap = {
'CodeSnap',
'CodeSnapSave',
'CodeSnapHighlight',
'CodeSnapASCII',
}
--- DiffView plugin cmds
M.diffview = {
'DiffviewOpen',
'DiffviewClose',
'DiffviewToggleFiles',
'DiffviewFocusFiles',
'DiffviewRefresh',
'DiffviewFileHistory',
}
--- FloatingHelp plugin cmds
M.floating_help = {
'FloatingHelp',
'FloatingHelpClose',
'FloatingHelpToggle',
}
--- Gists plugin cmds
M.gist = {
'GistCreate',
'GistCreateFromFile',
'GistsList',
}
--- Gx plugin cmds
M.gx = {
'Browse',
}
--- ImgClip plugin cmds
M.imgclip = {
'ImgClipEmbed',
'PasteImage',
'ImgClipConfig',
}
--- Kitty-Scrollback plugin cmds
M.kitty_scrollback = {
'KittyScrollbackGenerateKittens',
'KittyScrollbackCheckHealth',
}
--- LazyGit plugin cmds
M.lazygit = {
'LazyGit',
'LazyGitConfig',
'LazyGitCurrentFile',
'LazyGitFilter',
'LazyGitFilterCurrentFile',
}
--- Markdown-preview plguin cmds
M.markdown_preview = {
'MarkdownPreviewToggle',
'MarkdownPreview',
'MarkdownPreviewStop',
}
--- Nekifoch plugin cmds
M.nekifoch = 'Nekifoch'
--- Thanks plugin cmds
M.thanks = {
'ThanksAll',
'ThanksGithubAuth',
'ThanksGithubLogout',
'ThanksClearCache',
}
--- Gitlinker plugin cmds
M.gitlinker = {
'GitLink',
}
--- Qalc plugin cmds
M.qalc = {
'Qalc',
'QalcAttach',
'QalcYank',
}
--- Ripsub plugin cmds
M.ripsub = {
'RipSubstitute',
}
--- Spell Errors plugin cmds
M.spell_errors = {
'Telescope spell_errors',
}
--- Symbols plugin cmds
M.symbols = {
'Symbols',
'SymbolsToggle',
'SymbolsOpen',
'SymbolsClose',
}
--- Suda plugin cmds
M.suda = {
'SudaWrite',
'SudaRead',
}
--- Transparent plugin cmds
M.transparent = {
'TransparentEnable',
'TransparentDisable',
'TransparentToggle',
}
--- Trouble plugin cmds
M.trouble = {
'Trouble',
}
return M
+240
View File
@@ -0,0 +1,240 @@
---@module "data.cond"
--- This module defines the conditionals for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Conditionals │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
local func = require('data.func')
local types = require('data.types')
-- Auto-dark-mode conditional options
M.auto_dark_mode = function()
return func.check_global_var('autodarkmode', true, false)
and not func.is_ssh()
end
--- Auto Save conditional options
M.autosave = function()
return func.check_global_var('autosave', true, false)
end
-- Auto Format conditional options
M.autoformat = function()
return func.check_global_var('autoformat', true, false)
end
--- Bars-N-Lines conditional options
M.barsNlines = function()
if
func.check_global_var('statuscolumn', 'barsNlines', 'native')
or func.check_global_var('tabline', 'barsNlines', 'bufferline')
or func.check_global_var('statusline', 'barsNlines', 'lualine')
then
return true
end
return false
end
--- Avante conditional options
M.avante = function()
return func.check_global_var('useavante', true, false)
end
--- ChatGPT conditional options
M.chatgpt = function()
return func.check_global_var('usechatgpt', true, false)
end
--- GP conditional options
M.gp = function()
return func.check_global_var('usegpai', true, false)
end
--- Codeium conditional options
M.codeium = function()
return func.check_global_var('aitool', 'codeium', 'neocodeium')
end
--- CodeSnap conditional options
M.codesnap = function()
return func.check_global_var('codesnap', true, false)
end
--- Colorful Window-Separators conditional options
M.colorfulwinsep = function()
return func.check_global_var('colorfulwinsep', true, false)
end
--- Auto-CursorLine conditional options
M.cursorline = function()
return func.check_global_var('auto_cursorline', true, true)
end
--- Bufferline conditional options
M.bufferline = function()
if
func.check_global_var('tabline', 'bufferline', 'bufferline')
or func.check_global_var('tabline', 'barsNlines', 'bufferline')
then
return true
end
return false
end
-- Code-Companion conditional options
M.codecompanion = function()
return func.check_global_var('usecodecomp', true, false)
end
--- CoPilot conditional options
M.copilot = function()
return vim.g.aitool == 'copilot'
end
--- FloatingHelp conditional options
M.floating_help = function()
return func.check_global_var('usefloatinghelp', true, false)
end
--- HardTime conditional options
M.hardtime = function()
return func.check_global_var('usehardtime', true, false)
end
--- Heirline conditional options
M.heirline = function()
return func.check_global_var('statusline', 'heirline', 'heirline')
end
--- Image conditional options
M.image = function()
-- Disable image rendering in Neovide
-- or when vim.g.useimage = false
if vim.g.useimage == false then
return false
end
return not vim.g.neovide
end
M.lualine = function()
-- List of excluded buffer names
local excluded_buffers = require('data.types').general.buf
-- List of excluded filetypes
local excluded_filetypes = require('data.types').general.ft
-- Check buffer name
local bufname = vim.api.nvim_buf_get_name(0)
for _, name in ipairs(excluded_buffers) do
if string.find(bufname, name) then
return false
end
end
-- Check filetype
local filetype = vim.bo.filetype
for _, ft in ipairs(excluded_filetypes) do
if filetype == ft then
return false
end
end
-- Default: load for all other buffers
return require('data.func').check_global_var(
'statusline',
'lualine',
'lualine'
)
end
--- LuaRocks conditional options
M.luarocks = function()
return func.check_global_var('useluarocks', true, true)
end
--- Minimap conditional options
M.minimap = function()
types.setup()
local ex_ft = types.minimap.ft
local ex_buf = types.minimap.buf
local ft = vim.bo.filetype
local buf = vim.bo.buftype
local mod = vim.bo.modifiable
return not vim.tbl_contains(ex_ft, ft)
and not vim.tbl_contains(ex_buf, buf)
and mod == true
end
--- Minuet conditional options
M.minuet = function()
return func.check_global_var('aitool', 'minuet', 'neocodeium')
end
--- Music Controls conditional options
M.musiccontrols = function()
return func.check_global_var('usemusic', true, true)
end
--- NekiFoch conditional options
M.nekifoch = function()
return func.is_kitty()
end
--- Codeium conditional options
M.neocodeium = function()
return func.check_global_var('aitool', 'neocodeium', 'neocodeium')
end
M.neotree = function()
return func.check_global_var('useneotree', true, true)
end
--- Tabnine conditional options
M.tabnine = function()
return func.check_global_var('aitool', 'tabnine', 'neocodeium')
end
M.tiny_inline_diagnostic = function()
return func.check_global_var('usetinyinline', true, false)
end
M.todo = function()
if func.check_global_var('usetodo', true, true) then
if not func.is_neovide() then
if vim.bo.readonly == false then
if func.dir_is_git_repo(vim.fn.expand('%:p:h')) then
return true
end
end
end
end
return false
end
--- TMux conditional options
M.tmux = function()
return func.is_tmux()
end
--- Use Smart-splits conditional
M.use_splits = function()
-- return not func.is_ghostty()
return true
end
--- WakaTime conditional options
M.wakatime = function()
return vim.g.usewakatime
end
--- WezTerm conditional options
M.wezterm = function()
return func.is_wezterm()
end
--- Yazi conditional options
M.yazi = function()
return func.check_global_var('useyazi', true, false)
end
return M
+113
View File
@@ -0,0 +1,113 @@
---@module "data.dash"
--- This module contains the data for the dashboard plugins.
-- ╭─────────────────────────────────────────────────────────╮
-- │ DASH DATA │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
-- Define default path to the logo art
local logofile = vim.fn.stdpath('config') .. '/logo/' .. 'neovim.txt'
if vim.g.dash_logo then
logofile = vim.fn.stdpath('config') .. '/logo/' .. vim.g.dash_logo
end
M.logo = logofile
M.fallback_logo = [[
]]
-- Define dashboard button items in a single table
local dashboard_buttons = {
-- stylua: ignore start
{ key = "f", icon = "", desc = " Find File", action = function() Pick() end },
{ key = "n", icon = "", desc = " New File", action = function() vim.cmd("ene | startinsert") end },
{ key = "r", icon = "", desc = " Recent Files", action = function() Pick("oldfiles") end },
{ key = "g", icon = "", desc = " Grep Text", action = function() Pick("grep") end },
{ key = "p", icon = "", desc = " Projects", action = function() Pick("projects") end },
{ key = "t", icon = "󰙅 ", desc = " Pick Tree", action = function() Pick("file_browser", "mini") end },
{ key = "z", icon = "", desc = " LazyGit", action = function() Snacks.lazygit() end },
{ key = "c", icon = "", desc = " Config", action = function() Pick("config_files") end },
{ key = "s", icon = "󰶮 ", desc = " Restore Session", action = function() require("persistence").load() end },
{ key = "S", icon = "", desc = " Remote Session", action = function() require("config.rootiest").load_remote() end },
{ key = "l", icon = "󰒲 ", desc = " Lazy", action = function() vim.cmd("Lazy ") end },
{ key = "q", icon = "", desc = " Quit", action = function() vim.api.nvim_input("<cmd>qa<cr>") end },
} -- stylua: ignore end
--- Alpha plugin configuration
M.alpha = {
--- Function to setup the Alpha dashboard options
---@return table dashboard The alpha dashboard options
opts = function()
-- Load the alpha plugin dashboard-nvim theme
local dashboard = require('alpha.themes.dashboard')
--- Function to read the ASCII art from the logo file
---@param logo_path string The path to the logo file
---@return table art The ASCII art lines
local function read_ascii_art(logo_path)
local lines = {}
for line in io.lines(logo_path) do
table.insert(lines, line)
end
return lines
end
-- Read the ASCII art from the logo file
local ascii_art_lines = read_ascii_art(M.logo)
-- Add the ASCII art to the dashboard header
dashboard.section.header.val = ascii_art_lines
-- Add the dashboard buttons from the shared table
dashboard.section.buttons.val = {}
for _, button in ipairs(dashboard_buttons) do
table.insert(
dashboard.section.buttons.val,
-- Ignore string -> function (param type is valid)
---@diagnostic disable: param-type-mismatch
dashboard.button(button.key, button.icon .. button.desc, button.action)
)
end
for _, button in ipairs(dashboard.section.buttons.val) do
button.opts.hl = 'AlphaButtons'
button.opts.hl_shortcut = 'AlphaShortcut'
end
-- Set up highlight groups for the dashboard
dashboard.section.header.opts.hl = 'Conditional' or 'AlphaHeader'
dashboard.section.footer.opts.hl = 'AlphaFooter'
-- Calculate the dashboard layout padding
local padding = 0
if vim.fn.winheight(0) < 60 then
padding = vim.fn.max({ 2, vim.fn.floor(vim.fn.winheight(0) * 0.1) })
elseif vim.fn.winheight(0) < 40 then
padding = 1
elseif vim.fn.winheight(0) < 30 then
padding = 0
else
padding = vim.fn.max({ 2, vim.fn.floor(vim.fn.winheight(0) * 0.2) })
end
-- Apply the padding to the dashboard layout
dashboard.opts.layout[1].val = padding
-- Return the dashboard options
return dashboard
end,
}
--- Dashboard-nvim plugin configuration
M.dashboard_nvim = {
-- Reusing the same table for button choices in dashboard-nvim
choices = dashboard_buttons,
}
return M
+169
View File
@@ -0,0 +1,169 @@
---@module "data.deps"
--- This module aggregates various dependencies used throughout the configuration.
--- It provides a centralized way to access dependencies.
-- ╭─────────────────────────────────────────────────────────╮
-- │ DEPENDENCIES │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
M.avante = {
'nvim-lua/plenary.nvim',
'MunifTanjim/nui.nvim',
}
M.chatgpt = {
'MunifTanjim/nui.nvim',
'nvim-lua/plenary.nvim',
'folke/trouble.nvim',
'nvim-telescope/telescope.nvim',
}
M.codecompanion = {
'nvim-lua/plenary.nvim',
'nvim-treesitter/nvim-treesitter',
}
--- nvim-cmp dependencies
---@return table The nvim-cmp dependencies
M.cmp = {
{
'L3MON4D3/LuaSnip',
--- Function to build the dependencies
---@return string|nil The command to build the dependencies
build = (function()
if vim.fn.has('win32') == 1 or vim.fn.executable('make') == 0 then
return
end
return 'make install_jsregexp'
end)(),
dependencies = {
{
'rafamadriz/friendly-snippets',
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
end,
},
},
},
{
'petertriho/cmp-git',
opts = {},
--- Function to configure the cmp-git dependency
---@return table|nil The cmp-git config
config = function()
local cmp = require('cmp')
cmp.setup.filetype('gitcommit', {
sources = cmp.config.sources({
{ name = 'git', priority = 50 },
{ name = 'path', priority = 40 },
}, {
{ name = 'buffer', priority = 50 },
}),
})
end,
},
'saadparwaiz1/cmp_luasnip',
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-path',
'hrsh7th/cmp-buffer',
'onsails/lspkind.nvim',
'hrsh7th/cmp-cmdline',
'dmitmel/cmp-cmdline-history',
'teramako/cmp-cmdline-prompt.nvim',
'mtoohey31/cmp-fish',
'vim-dadbod-completion',
{
'chrisgrieser/cmp_yanky',
option = {
onlyCurrentFiletype = false,
},
},
'SergioRibera/cmp-dotenv',
'hrsh7th/cmp-calc',
'davidsierradz/cmp-conventionalcommits',
}
--- Gx plugin dependencies
M.gx = {
'nvim-lua/plenary.nvim',
}
--- Hardtime plugin dependencies
M.hardtime = {
'MunifTanjim/nui.nvim',
'nvim-lua/plenary.nvim',
}
--- LazyDev plugin dependencies
M.lazydev = {
'gonstoll/wezterm-types',
}
--- LazyGit plugin dependencies
M.lazygit = {
'nvim-lua/plenary.nvim',
}
--- Lualine plugin dependencies
M.lualine = {
{ 'bezhermoso/todos-lualine.nvim' },
{ 'folke/todo-comments.nvim' },
}
--- Minuet plugin dependencies
M.minuet = {
{ 'nvim-lua/plenary.nvim' },
}
--- MusicControls plugin dependencies
M.musiccontrols = {
'rcarriga/nvim-notify',
}
--- Table for plugins that need Telescope as a dependency
M.needs_telescope = {
'nvim-telescope/telescope.nvim',
}
--- Table for plugins that need Treesitter as a dependency
M.needs_treesitter = {
'nvim-treesitter/nvim-treesitter',
}
--- Neotest plugin adapters and dependencies
M.neotest = {
adapters = {
'neotest-plenary',
'neotest-python',
'neotest-vim-test',
'neotest-minitest',
'neotest-bash',
},
deps = {
'nvim-neotest/nvim-nio',
'nvim-lua/plenary.nvim',
'zidhuss/neotest-minitest',
'rcasia/neotest-bash',
'antoinemadec/FixCursorHold.nvim',
'nvim-treesitter/nvim-treesitter',
},
}
--- Recorder plugin dependencies
M.recorder = {
'rcarriga/nvim-notify',
}
--- nvim-remote plugin dependencies
M.remotenvim = {
'nvim-lua/plenary.nvim', -- For standard functions
'MunifTanjim/nui.nvim', -- To build the plugin UI
'nvim-telescope/telescope.nvim', -- For picking b/w different remote methods
}
--- Zenbones plugin dependencies
M.zenbones = {
'rktjmp/lush.nvim',
}
return M
+47
View File
@@ -0,0 +1,47 @@
---@module "data.events"
--- This module defines the event tables for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Events │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
--- DEFAULT ---
M.default = 'VeryLazy'
--- Alpha events
M.alpha = { 'VimEnter' }
--- Auto Save events
M.autosave = { 'InsertLeave', 'TextChanged' }
--- Colorful Window Separators events
M.colorfulwinsep = { 'WinLeave' }
--- Dashboard-Nvim events
M.dashboard = { 'UIEnter' }
--- Dead Column
M.deadcolumn = { 'BufEnter' }
--- Heirline events
M.heirline = { 'UIEnter' }
--- Highlight Colors events
M.highlightcolor = { 'BufReadPre' }
--- Mini.Align events
M.minialign = { 'InsertEnter' }
--- Mini.SplitJoin events
M.minisplitjoin = { 'InsertEnter' }
--- Discord Presence events
M.presence = { 'LazyFile' }
--- RipGrep Substitute events
M.ripsub = { 'InsertEnter' }
--- SmoothCursor events
M.smoothcursor = { 'BufEnter' }
return M
+12
View File
@@ -0,0 +1,12 @@
---@module "data.ft"
--- This module defines the filetype tables for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Filetypes │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
M.academic = { 'markdown', 'tex' }
M.helpview = 'help'
return M
+2654
View File
File diff suppressed because it is too large Load Diff
+53
View File
@@ -0,0 +1,53 @@
---@module "data"
--- This module aggregates various data tables used throughout the configuration.
local data = {}
-- Explicitly specify for LSP support
data.keys = require('data.keys')
data.types = require('data.types')
data.func = require('data.func')
data.cmd = require('data.cmd')
data.deps = require('data.deps')
data.dash = require('data.dash')
data.ft = require('data.ft')
data.events = require('data.events')
data.autocmd = require('data.autocmd')
data.cond = require('data.cond')
data.vim = require('data.vim')
-- Generic function to iterate over files in a specified directory and load Lua modules
function data.load_modules_from_dir(directory, module_prefix)
-- Open the specified directory
local files = vim.fn.readdir(directory)
for _, file in ipairs(files) do
-- Skip init.lua
if file ~= 'init.lua' and file:match('.*%.lua$') then
-- Get the module name without the .lua extension
local module_name = file:sub(1, -5)
-- Construct the module path
local module_path = module_prefix .. '.' .. module_name
-- Load the module if not already explicitly set
if not _G[module_name] then
_G[module_name] = require(module_path)
end
end
end
end
-- Example usage
local function read_data_dir()
-- Getting the root path for the current module directory
local dir_path = vim.fn.fnamemodify(debug.getinfo(1, 'S').source:sub(2), ':h')
-- Load modules from the data directory
data.load_modules_from_dir(dir_path, 'data')
end
-- Read the directory and load any additional modules
read_data_dir()
---@alias DataModule table<string, any>
---@type DataModule
return data
+1740
View File
File diff suppressed because it is too large Load Diff
+2325
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -0,0 +1,14 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ VimScript │
-- ╰─────────────────────────────────────────────────────────╯
local M = {}
M.setup = function()
-- Setup vimscript options
vim.cmd([[
" Vimscript options here
]])
end
return M
-362
View File
@@ -1,362 +0,0 @@
--[[
Keymaps
--]]
---- Copyright (C) 2026 Rootiest
-- SPDX-License-Identifier: GPL-3.0-or-later
-- System Clipboard Integration
-- This makes 'y' and 'p' (and all other yank/paste operations)
-- use the system clipboard by default.
vim.opt.clipboard = "unnamedplus"
----------------------------------------------------------
-- Redirect 'delete' and 'change' operations to the 'd' register
-- This keeps your system clipboard (unnamedplus) clean
local delete_keys = { "d", "D", "c", "C", "x", "X" }
for _, key in ipairs(delete_keys) do
vim.keymap.set({ "n", "v" }, key, '"d' .. key, { noremap = true, silent = true })
end
-- If you ever need to paste what you just deleted:
-- Type "dp (instead of just p)
----------------------------------------------------------
-- Quit and Save All with :Q
-- Replaces safety-checked :xa with a forced write-all-and-quit.
vim.api.nvim_create_user_command("Q", "xa!", { desc = "Write all and quit (forced)" })
----------------------------------------------------------
-- Search and Replace (Grug-far)
vim.keymap.set("n", "<leader>sr", function()
require("grug-far").open({
prefills = {
search = vim.fn.expand("<cword>"),
},
})
end, { desc = "Search and Replace" })
-- Snacks Keymaps
-- Top Pickers & Explorer
vim.keymap.set("n", "<leader><space>", function()
Snacks.picker.smart()
end, { desc = "Smart Find Files" })
vim.keymap.set("n", "<leader>,", function()
Snacks.picker.buffers()
end, { desc = "Buffers" })
vim.keymap.set("n", "<leader>/", function()
Snacks.picker.grep()
end, { desc = "Grep" })
vim.keymap.set("n", "<leader>:", function()
Snacks.picker.command_history()
end, { desc = "Command History" })
vim.keymap.set("n", "<leader>n", function()
Snacks.picker.notifications()
end, { desc = "Notification History" })
vim.keymap.set("n", "<leader>e", function()
Snacks.explorer()
end, { desc = "File Explorer" })
-- Find
vim.keymap.set("n", "<leader>fb", function()
Snacks.picker.buffers()
end, { desc = "Buffers" })
vim.keymap.set("n", "<leader>fc", function()
Snacks.picker.files({ cwd = vim.fn.stdpath("config") })
end, { desc = "Find Config File" })
vim.keymap.set("n", "<leader>ff", function()
Snacks.picker.files()
end, { desc = "Find Files" })
vim.keymap.set("n", "<leader>fg", function()
Snacks.picker.git_files()
end, { desc = "Find Git Files" })
vim.keymap.set("n", "<leader>fp", function()
Snacks.picker.projects()
end, { desc = "Projects" })
vim.keymap.set("n", "<leader>fr", function()
Snacks.picker.recent()
end, { desc = "Recent" })
-- Git
vim.keymap.set("n", "<leader>gb", function()
Snacks.picker.git_branches()
end, { desc = "Git Branches" })
vim.keymap.set("n", "<leader>gl", function()
Snacks.picker.git_log()
end, { desc = "Git Log" })
vim.keymap.set("n", "<leader>gL", function()
Snacks.picker.git_log_line()
end, { desc = "Git Log Line" })
vim.keymap.set("n", "<leader>gs", function()
Snacks.picker.git_status()
end, { desc = "Git Status" })
vim.keymap.set("n", "<leader>gS", function()
Snacks.picker.git_stash()
end, { desc = "Git Stash" })
vim.keymap.set("n", "<leader>gd", function()
Snacks.picker.git_diff()
end, { desc = "Git Diff (Hunks)" })
vim.keymap.set("n", "<leader>gf", function()
Snacks.picker.git_log_file()
end, { desc = "Git Log File" })
-- GH
vim.keymap.set("n", "<leader>gi", function()
Snacks.picker.gh_issue()
end, { desc = "GitHub Issues (open)" })
vim.keymap.set("n", "<leader>gI", function()
Snacks.picker.gh_issue({ state = "all" })
end, { desc = "GitHub Issues (all)" })
vim.keymap.set("n", "<leader>gp", function()
Snacks.picker.gh_pr()
end, { desc = "GitHub Pull Requests (open)" })
vim.keymap.set("n", "<leader>gP", function()
Snacks.picker.gh_pr({ state = "all" })
end, { desc = "GitHub Pull Requests (all)" })
-- Grep
vim.keymap.set("n", "<leader>sb", function()
Snacks.picker.lines()
end, { desc = "Buffer Lines" })
vim.keymap.set("n", "<leader>sB", function()
Snacks.picker.grep_buffers()
end, { desc = "Grep Open Buffers" })
vim.keymap.set("n", "<leader>sg", function()
Snacks.picker.grep()
end, { desc = "Grep" })
vim.keymap.set({ "n", "x" }, "<leader>sw", function()
Snacks.picker.grep_word()
end, { desc = "Visual selection or word" })
-- Search
vim.keymap.set("n", '<leader>s"', function()
Snacks.picker.registers()
end, { desc = "Registers" })
vim.keymap.set("n", "<leader>s/", function()
Snacks.picker.search_history()
end, { desc = "Search History" })
vim.keymap.set("n", "<leader>sa", function()
Snacks.picker.autocmds()
end, { desc = "Autocmds" })
vim.keymap.set("n", "<leader>sc", function()
Snacks.picker.command_history()
end, { desc = "Command History" })
vim.keymap.set("n", "<leader>sC", function()
Snacks.picker.commands()
end, { desc = "Commands" })
vim.keymap.set("n", "<leader>sd", function()
Snacks.picker.diagnostics()
end, { desc = "Diagnostics" })
vim.keymap.set("n", "<leader>sD", function()
Snacks.picker.diagnostics_buffer()
end, { desc = "Buffer Diagnostics" })
vim.keymap.set("n", "<leader>sh", function()
Snacks.picker.help()
end, { desc = "Help Pages" })
vim.keymap.set("n", "<leader>sH", function()
Snacks.picker.highlights()
end, { desc = "Highlights" })
vim.keymap.set("n", "<leader>si", function()
Snacks.picker.icons()
end, { desc = "Icons" })
vim.keymap.set("n", "<leader>sj", function()
Snacks.picker.jumps()
end, { desc = "Jumps" })
vim.keymap.set("n", "<leader>sk", function()
Snacks.picker.keymaps()
end, { desc = "Keymaps" })
vim.keymap.set("n", "<leader>sl", function()
Snacks.picker.loclist()
end, { desc = "Location List" })
vim.keymap.set("n", "<leader>sm", function()
Snacks.picker.marks()
end, { desc = "Marks" })
vim.keymap.set("n", "<leader>sM", function()
Snacks.picker.man()
end, { desc = "Man Pages" })
vim.keymap.set("n", "<leader>sp", function()
Snacks.picker.lazy()
end, { desc = "Search for Plugin Spec" })
vim.keymap.set("n", "<leader>sq", function()
Snacks.picker.qflist()
end, { desc = "Quickfix List" })
vim.keymap.set("n", "<leader>sR", function()
Snacks.picker.resume()
end, { desc = "Resume" })
vim.keymap.set("n", "<leader>su", function()
Snacks.picker.undo()
end, { desc = "Undo History" })
vim.keymap.set("n", "<leader>uC", function()
Snacks.picker.colorschemes()
end, { desc = "Colorschemes" })
-- LSP
vim.keymap.set("n", "gd", function()
Snacks.picker.lsp_definitions()
end, { desc = "Goto Definition" })
vim.keymap.set("n", "gD", function()
Snacks.picker.lsp_declarations()
end, { desc = "Goto Declaration" })
vim.keymap.set("n", "gr", function()
Snacks.picker.lsp_references()
end, { nowait = true, desc = "References" })
vim.keymap.set("n", "gI", function()
Snacks.picker.lsp_implementations()
end, { desc = "Goto Implementation" })
vim.keymap.set("n", "gy", function()
Snacks.picker.lsp_type_definitions()
end, { desc = "Goto T[y]pe Definition" })
vim.keymap.set("n", "gai", function()
Snacks.picker.lsp_incoming_calls()
end, { desc = "C[a]lls Incoming" })
vim.keymap.set("n", "gao", function()
Snacks.picker.lsp_outgoing_calls()
end, { desc = "C[a]lls Outgoing" })
vim.keymap.set("n", "<leader>ss", function()
Snacks.picker.lsp_symbols()
end, { desc = "LSP Symbols" })
vim.keymap.set("n", "<leader>sS", function()
Snacks.picker.lsp_workspace_symbols()
end, { desc = "LSP Workspace Symbols" })
-- Standard LSP
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover Documentation" })
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code Action" })
vim.keymap.set("n", "<leader>cr", function()
return ":" .. require("inc_rename").config.cmd_name .. " " .. vim.fn.expand("<cword>")
end, { expr = true, desc = "Rename Symbol" })
-- Other
vim.keymap.set("n", "<leader>sq", "<cmd>nohlsearch<cr>", { desc = "Clear Search Highlights" })
vim.keymap.set("n", "<leader>z", function()
Snacks.zen()
end, { desc = "Toggle Zen Mode" })
vim.keymap.set("n", "<leader>Z", function()
Snacks.zen.zoom()
end, { desc = "Toggle Zoom" })
vim.keymap.set("n", "<leader>.", function()
Snacks.scratch()
end, { desc = "Toggle Scratch Buffer" })
vim.keymap.set("n", "<leader>S", function()
Snacks.scratch.select()
end, { desc = "Select Scratch Buffer" })
vim.keymap.set("n", "<leader>n", function()
Snacks.notifier.show_history()
end, { desc = "Notification History" })
vim.keymap.set("n", "<leader>bd", function()
Snacks.bufdelete()
end, { desc = "Delete Buffer" })
vim.keymap.set("n", "<leader>cR", function()
Snacks.rename.rename_file()
end, { desc = "Rename File" })
vim.keymap.set({ "n", "v" }, "<leader>gB", function()
Snacks.gitbrowse()
end, { desc = "Git Browse" })
vim.keymap.set("n", "<leader>gg", function()
Snacks.lazygit()
end, { desc = "Lazygit" })
vim.keymap.set("n", "<leader>un", function()
Snacks.notifier.hide()
end, { desc = "Dismiss All Notifications" })
vim.keymap.set({ "n", "t" }, "<c-/>", function()
Snacks.terminal()
end, { desc = "Toggle Terminal" })
vim.keymap.set({ "n", "t" }, "<c-_>", function()
Snacks.terminal()
end, { desc = "which_key_ignore" })
vim.keymap.set({ "n", "t" }, "]]", function()
Snacks.words.jump(vim.v.count1)
end, { desc = "Next Reference" })
vim.keymap.set({ "n", "t" }, "[[", function()
Snacks.words.jump(-vim.v.count1)
end, { desc = "Prev Reference" })
vim.keymap.set("n", "<leader>N", function()
Snacks.win({
file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1],
width = 0.6,
height = 0.6,
wo = {
spell = false,
wrap = false,
signcolumn = "yes",
statuscolumn = " ",
conceallevel = 3,
},
})
end, { desc = "Neovim News" })
----------------------------------------------------------
-- Sidekick NES: accept next-edit suggestion in normal mode
vim.keymap.set("n", "<Tab>", function()
require("sidekick").nes_jump_or_apply()
end, { desc = "Apply Sidekick NES Suggestion" })
----------------------------------------------------------
-- Leap Keymaps
vim.keymap.set({ "n", "x", "o" }, "<CR>", "<Plug>(leap)")
vim.keymap.set("n", "S", "<Plug>(leap-from-window)")
----------------------------------------------------------
-- Conform Keymaps
vim.keymap.set({ "n", "v" }, "<leader>cf", function()
require("conform").format({ lsp_format = "fallback" })
end, { desc = "Format Buffer" })
----------------------------------------------------------
-- Undotree Keymaps
vim.keymap.set("n", "<leader>uu", "<cmd>UndotreeToggle<cr>", { desc = "Toggle Undotree" })
----------------------------------------------------------
-- Comment Box Keymaps
vim.keymap.set({ "n", "v" }, "<leader>cbb", "<cmd>CBccbox<cr>", { desc = "Centered Box" })
vim.keymap.set({ "n", "v" }, "<leader>cbl", "<cmd>CBcline<cr>", { desc = "Centered Line" })
vim.keymap.set({ "n", "v" }, "<leader>cbd", "<cmd>CBd<cr>", { desc = "Delete Box/Line" })
vim.keymap.set("n", "<leader>cbk", "<cmd>CBcatalog<cr>", { desc = "Box Style Catalog" })
----------------------------------------------------------
-- Persistence Keymaps
vim.keymap.set("n", "<leader>qs", function()
require("persistence").load()
end, { desc = "Restore Session" })
vim.keymap.set("n", "<leader>qS", function()
require("persistence").select()
end, { desc = "Select Session" })
vim.keymap.set("n", "<leader>ql", function()
require("persistence").load({ last = true })
end, { desc = "Restore Last Session" })
vim.keymap.set("n", "<leader>qd", function()
require("persistence").stop()
end, { desc = "Don't Save Current Session" })
----------------------------------------------------------
-- Haunt Keymaps
vim.keymap.set("n", "<leader>ha", function()
require("haunt.api").annotate()
end, { desc = "Annotate" })
vim.keymap.set("n", "<leader>ht", function()
require("haunt.api").toggle_annotation()
end, { desc = "Toggle Annotation" })
vim.keymap.set("n", "<leader>hd", function()
require("haunt.api").delete()
end, { desc = "Delete Bookmark" })
vim.keymap.set("n", "<leader>hn", function()
require("haunt.api").next()
end, { desc = "Next Bookmark" })
vim.keymap.set("n", "<leader>hp", function()
require("haunt.api").prev()
end, { desc = "Previous Bookmark" })
vim.keymap.set("n", "<leader>hl", function()
require("haunt.picker").show()
end, { desc = "Show Bookmark Picker" })
-97
View File
@@ -1,97 +0,0 @@
--[[
Lazyload
--]]
-- Original work Copyright (c) 2021 Fredrik Averpil
-- This file is licensed under the MIT License.
-- See: https://github.com/fredrikaverpil/dotfiles/blob/main/LICENSE
-- Lazyload queues for phased plugin loading.
--
-- on_vim_enter(fn): async fire-and-forget via vim.schedule() (default)
-- on_vim_enter(fn, { sync = true }): synchronous, must complete before next phase
-- on_override(fn): runs after all on_vim_enter callbacks (for .nvim.lua overrides)
local M = {}
local vim_enter_queue = {}
local override_queue = {}
---@param queue { fn: fun(), sync: boolean }[]
local function drain(queue)
for _, entry in ipairs(queue) do
if not entry.sync then
vim.schedule(entry.fn)
end
end
for _, entry in ipairs(queue) do
if entry.sync then
entry.fn()
end
end
end
local function drain_override()
if not override_queue then
return
end
for _, entry in ipairs(override_queue) do
vim.schedule(function()
local ok, err = pcall(entry.fn)
if not ok then
vim.notify((".nvim.lua override error:\n%s"):format(err), vim.log.levels.ERROR)
end
end)
end
override_queue = nil
end
vim.api.nvim_create_autocmd("VimEnter", {
once = true,
callback = function()
drain(vim_enter_queue)
vim_enter_queue = nil
drain_override()
end,
})
--- Run at VimEnter. Async by default. Pass { sync = true } to run synchronously.
---@param fn fun()
---@param opts? { sync?: boolean }
function M.on_vim_enter(fn, opts)
local sync = opts and opts.sync or false
if vim_enter_queue then
table.insert(vim_enter_queue, { fn = fn, sync = sync })
elseif sync then
fn()
else
vim.schedule(fn)
end
end
--- Run after all on_vim_enter callbacks (including async ones) have executed.
--- Intended for project-local overrides from .nvim.lua that need to patch
--- plugin state after setup() has run. Exrc runs at step 7c — before plugin/
--- files — so it cannot override plugin setup directly; this queue bridges
--- that gap by registering a callback that runs after the VimEnter drain.
---@param fn fun()
function M.on_override(fn)
if override_queue then
table.insert(override_queue, { fn = fn })
else
vim.schedule(fn)
end
end
-- Call function only once.
function M.call_once(fn)
local id = tostring(fn)
if fn and not Config.called[id] then
fn()
Config.called[id] = true
end
end
return M
+137
View File
@@ -0,0 +1,137 @@
return {
{ -- Codeium
import = 'lazyvim.plugins.extras.ai.codeium',
cond = require('data.cond').codeium,
event = 'VeryLazy',
lazy = true,
opts = function()
require('codeium.virtual_text').set_statusbar_refresh(function()
require('lualine').refresh()
end)
end,
},
{ -- Copilot
import = 'lazyvim.plugins.extras.ai.copilot',
cond = require('data.cond').copilot,
},
{ -- Copilot Chat
import = 'lazyvim.plugins.extras.ai.copilot-chat',
cond = require('data.cond').copilot,
},
{ -- Tabnine
import = 'lazyvim.plugins.extras.ai.tabnine',
cond = require('data.cond').tabnine,
},
{ -- luasnip
import = 'lazyvim.plugins.extras.coding.luasnip',
},
{ -- Yanky
import = 'lazyvim.plugins.extras.coding.yanky',
},
{ -- Neogen
import = 'lazyvim.plugins.extras.coding.neogen',
},
{ -- DAP Core
import = 'lazyvim.plugins.extras.dap.core',
},
{ -- DAP Neovim Lua Adapter
import = 'lazyvim.plugins.extras.dap.nlua',
},
{ -- NeoTest
import = 'lazyvim.plugins.extras.test.core',
},
{ import = 'lazyvim.plugins.extras.ui.smear-cursor' },
{ -- Dial
import = 'lazyvim.plugins.extras.editor.dial',
},
{ -- Snacks Picker
import = 'lazyvim.plugins.extras.editor.snacks_picker',
},
{ -- IncRename
import = 'lazyvim.plugins.extras.editor.inc-rename',
},
{ -- Treesitter-context
import = 'lazyvim.plugins.extras.ui.treesitter-context',
},
{ -- Navic
import = 'lazyvim.plugins.extras.editor.navic',
},
{ -- Refactoring
import = 'lazyvim.plugins.extras.editor.refactoring',
},
{ -- Octo plugin
import = 'lazyvim.plugins.extras.util.octo',
},
{ -- JSON
import = 'lazyvim.plugins.extras.lang.json',
},
{ -- Markdown
import = 'lazyvim.plugins.extras.lang.markdown',
},
{ -- Toml
import = 'lazyvim.plugins.extras.lang.toml',
},
{ -- Git
import = 'lazyvim.plugins.extras.lang.git',
},
{ -- Python
import = 'lazyvim.plugins.extras.lang.python',
},
{ -- Yaml
import = 'lazyvim.plugins.extras.lang.yaml',
},
{ -- clangd
import = 'lazyvim.plugins.extras.lang.clangd',
},
{ -- cmake
import = 'lazyvim.plugins.extras.lang.cmake',
},
{ -- Docker
import = 'lazyvim.plugins.extras.lang.docker',
},
{ -- Java
import = 'lazyvim.plugins.extras.lang.java',
},
{ -- Sql
import = 'lazyvim.plugins.extras.lang.sql',
},
{ -- Rust
import = 'lazyvim.plugins.extras.lang.rust',
},
-- { -- Mini.Indentscope
-- import = 'lazyvim.plugins.extras.ui.mini-indentscope',
-- },
{ -- mini.files
import = 'lazyvim.plugins.extras.editor.mini-files',
},
{ -- snacks.picker
import = 'lazyvim.plugins.extras.editor.snacks_picker',
},
{ -- snacks.explorer
import = 'lazyvim.plugins.extras.editor.snacks_explorer',
},
{ -- Fzf-Lua
import = 'lazyvim.plugins.extras.editor.fzf',
cond = function()
return require('data.func').check_global_var('use_fzf_lua', true, false)
end,
},
{ -- Chezmoi
import = 'lazyvim.plugins.extras.util.chezmoi',
},
{ -- Dotfiles plugins
import = 'lazyvim.plugins.extras.util.dot',
},
{ -- Blink completion
import = 'lazyvim.plugins.extras.coding.blink',
cond = function()
return vim.g.useblinkcmp
end,
},
{ -- Nvim-cmp
import = 'lazyvim.plugins.extras.coding.nvim-cmp',
cond = function()
return not vim.g.useblinkcmp
end,
},
}
-203
View File
@@ -1,203 +0,0 @@
--[[
Options
--]]
---- Copyright (C) 2026 Rootiest
-- SPDX-License-Identifier: GPL-3.0-or-later
-- ╭─────────────────────────────────────────────────────────╮
-- │ Basic Options │
-- ╰─────────────────────────────────────────────────────────╯
-- Set leader keys before any other configuration
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- Indentation
vim.opt.tabstop = 2 -- Tab width in spaces
vim.opt.shiftwidth = 2 -- Indent width for >> and auto-indent
vim.opt.expandtab = true -- Use spaces instead of tabs
-- Performance and UI defaults
vim.opt.updatetime = 200 -- Faster completion and CursorHold events
vim.opt.autowrite = true -- Enable auto write
vim.opt.number = true -- Show line numbers
vim.opt.relativenumber = true -- Relative line numbers
-- ╭─────────────────────────────────────────────────────────╮
-- │ Sessions and Saving │
-- ╰─────────────────────────────────────────────────────────╯
-- Persistent undo across sessions
vim.opt.undofile = true
-- Autowrite/Autosave
-- This ensures changes are saved on every buffer change or when leaving insert mode.
vim.api.nvim_create_autocmd({ "InsertLeave", "TextChanged" }, {
group = vim.api.nvim_create_augroup("autosave", { clear = true }),
pattern = { "*" },
callback = function()
local buftype = vim.api.nvim_get_option_value("buftype", { buf = 0 })
if buftype == "" and vim.bo.modified then
vim.cmd("silent! update")
end
end,
})
-- Automatically reload files changed outside of Neovim
vim.opt.autoread = true
-- Auto-reload Triggers
-- Reload when focus is gained or when the cursor is idle
vim.api.nvim_create_autocmd({ "FocusGained", "CursorHold" }, {
group = vim.api.nvim_create_augroup("autoread_on_focus", { clear = true }),
pattern = "*",
callback = function()
-- Only if the buffer is not modified, to avoid losing unsaved changes
if vim.bo.modified == false then
vim.cmd("checktime")
end
end,
})
-- Format Function
-- Formats the entire buffer by default,
-- but if a range is provided (e.g., via visual selection),
-- it formats only that range.
vim.api.nvim_create_user_command("Format", function(args)
local range = nil
if args.count ~= -1 then
local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1]
range = {
start = { args.line1, 0 },
["end"] = { args.line2, end_line:len() },
}
end
require("conform").format({ async = true, lsp_format = "fallback", range = range })
end, { range = true })
-- FormatOnSave
-- Formats the buffer before saving.
-- This is a common practice to ensure code is consistently formatted.
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
callback = function()
-- Call Format function
vim.api.nvim_command("Format")
end,
})
-- Return to last-known cursor position when reopening files
vim.api.nvim_create_autocmd("BufReadPost", {
desc = "Jump to last known cursor position on open",
pattern = "*",
callback = function()
local last_pos = vim.fn.line("'\"")
if last_pos > 1 and last_pos <= vim.fn.line("$") then
vim.cmd('normal! g`\"')
end
end,
})
-- ╭─────────────────────────────────────────────────────────╮
-- │ Root Management │
-- ╰─────────────────────────────────────────────────────────╯
-- Automatically change the working directory to the project root.
-- This ensures that plugins like Snacks.picker and GrugFar work
-- relative to the file or project you are currently editing.
vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("buffer_auto_cd", { clear = true }),
callback = function()
local path = vim.api.nvim_buf_get_name(0)
if path == "" then
return
end
-- Skip special buffers, but allow directory buffers (for explorer support)
if vim.bo.buftype ~= "" and vim.bo.filetype ~= "snacks_explorer_tree" then
return
end
-- Get the directory (handle both files and directory paths)
local dir = vim.fn.isdirectory(path) == 1 and path or vim.fn.fnamemodify(path, ":p:h")
-- Find the project root using common markers, fallback to the directory itself
local root = vim.fs.root(dir, { ".git", "lua", "package.json", "go.mod", "Cargo.toml", "Makefile" }) or dir
-- Change directory if it's different and valid
if root and vim.fn.isdirectory(root) == 1 and root ~= vim.fn.getcwd() then
vim.fn.chdir(root)
end
end,
})
-- Grug-far QoL: Close with 'q'
vim.api.nvim_create_autocmd("FileType", {
group = vim.api.nvim_create_augroup("grug_far_q_to_close", { clear = true }),
pattern = "grug-far",
callback = function(args)
vim.keymap.set("n", "q", "<cmd>close<cr>", { buffer = args.buf, silent = true, desc = "Close Grug-far" })
end,
})
-- ╭─────────────────────────────────────────────────────────╮
-- │ Shell Interaction │
-- ╰─────────────────────────────────────────────────────────╯
-- Detect terminal environment
local is_kitty = os.getenv("KITTY_PID") ~= nil
local current_shell = os.getenv("SHELL") or "/bin/sh"
local shell_name = current_shell:match("([^/]+)$") or "sh"
-- Terminal Title Management
local title_group = vim.api.nvim_create_augroup("TerminalTitle", { clear = true })
-- Helper function to update the terminal title
local function set_terminal_title(title)
-- If in Kitty, we use the direct escape sequence as it's reliable
if is_kitty then
io.stdout:write("\27]2;" .. title .. "\7")
-- Fallback: Use Neovim's built-in title management for other terminals
-- (Standard OSC 2 sequences are supported by most, but opt.title is safer)
elseif os.getenv("TERM") ~= "linux" then
vim.opt.title = true
vim.opt.titlestring = title
end
end
-- Terminal title updates on buffer enter and window enter
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
group = title_group,
callback = function()
local buftype = vim.bo.buftype
local filetype = vim.bo.filetype
local filename = vim.fn.expand("%:t")
-- 1. Specifically catch Snacks Terminal or standard Terminals
if filetype == "snacks_terminal" or buftype == "terminal" then
set_terminal_title("NVIM: Terminal")
-- 2. Handle normal files (buftype is empty)
elseif buftype == "" and filename ~= "" then
set_terminal_title("NVIM: " .. filename)
-- 3. Handle the empty start screen
elseif filename == "" and buftype == "" then
set_terminal_title("Neovim")
end
end,
})
-- Reset the title back to the shell name when you quit Neovim
vim.api.nvim_create_autocmd("VimLeave", {
group = title_group,
callback = function()
-- On leave, direct stdout is more reliable than setting an option
if is_kitty or os.getenv("TERM") ~= "linux" then
io.stdout:write("\27]2;" .. shell_name .. "\7")
end
end,
})
-532
View File
@@ -1,532 +0,0 @@
--[[
Plugins
--]]
---- Copyright (C) 2026 Rootiest
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Catppuccin.nvim
-- Eagerly load the colorscheme plugin.
vim.pack.add({ { src = "https://github.com/catppuccin/nvim", name = "catppuccin" } })
-- Catppuccin Config
Config.plugins.catppuccin = {
flavour = "mocha",
}
vim.cmd.colorscheme("catppuccin")
-- Snacks.nvim
-- Eagerly load snacks for dashboard and performance features.
vim.pack.add({ { src = "https://github.com/folke/snacks.nvim", name = "snacks" } })
-- Snacks Config
-- Store opts in the registry first.
Config.plugins.snacks = {
bigfile = { enabled = true },
dashboard = {
enabled = true,
sections = {
{ section = "header" },
{ section = "keys", gap = 1, padding = 1 },
},
preset = {
header = require("const").header,
},
},
explorer = { enabled = true },
indent = { enabled = true },
input = { enabled = true },
picker = {
enabled = true,
matcher = {
fuzzy = true,
smartcase = true,
ignorecase = true,
sort_empty = false,
filename_bonus = true,
file_pos = true,
cwd_bonus = true,
frecency = true,
history_bonus = true,
},
win = {
input = {
keys = {
["<a-s>"] = { "flash", mode = { "n", "i" } },
["s"] = { "flash" },
["<a-a>"] = { "sidekick_send", mode = { "n", "i" } },
},
},
},
actions = {
flash = function(picker)
require("flash").jump({
pattern = "^",
label = { after = { 0, 0 } },
search = {
mode = "search",
exclude = {
function(win)
return vim.bo[vim.api.nvim_win_get_buf(win)].filetype ~= "snacks_picker_list"
end,
},
},
action = function(match)
local idx = picker.list:row2idx(match.pos[1])
picker.list:_move(idx, true, true)
end,
})
end,
sidekick_send = function(...)
return require("sidekick.cli.picker.snacks").send(...)
end,
},
},
notifier = { enabled = true },
quickfile = { enabled = true },
scope = { enabled = true },
scratch = { enabled = true },
scroll = { enabled = true },
statuscolumn = { enabled = true },
terminal = {
enabled = true,
win = {
keys = {
toggle = {
"<c-/>",
function(self)
self:hide()
end,
mode = "t",
desc = "Toggle Terminal",
},
},
},
},
words = { enabled = true },
zen = { enabled = true },
}
-- Setup Snacks with the registered opts.
require("snacks").setup(Config.plugins.snacks)
-- Persistence.nvim
-- Simple session management.
vim.pack.add({ { src = "https://github.com/folke/persistence.nvim", name = "persistence" } })
-- Persistence Config
Config.plugins.persistence = {
dir = vim.fn.stdpath("state") .. "/sessions/",
need = 1,
branch = true,
}
require("persistence").setup(Config.plugins.persistence)
-- Lazy-loaded Plugins
local lazyload = require("lazyload")
lazyload.on_vim_enter(function()
-- Gitsigns.nvim
vim.pack.add({ { src = "https://github.com/lewis6991/gitsigns.nvim", name = "gitsigns" } })
require("gitsigns").setup({
numhl = false,
signcolumn = true,
current_line_blame = true, -- Required for the statusline variable to update
current_line_blame_opts = {
virt_text = false, -- Disable virtual text as we'll use the statusline
},
})
-- Treesitter Context
vim.pack.add({
{ src = "https://github.com/nvim-treesitter/nvim-treesitter-context", name = "nvim-treesitter-context" },
})
require("treesitter-context").setup({
max_lines = 3,
trim_scope = "outer",
})
-- Grug-far.nvim
vim.pack.add({ { src = "https://github.com/MagicDuck/grug-far.nvim", name = "grug-far" } })
require("grug-far").setup()
-- Flash.nvim
vim.pack.add({ { src = "https://github.com/folke/flash.nvim", name = "flash" } })
require("flash").setup({
modes = { char = { keys = {} } },
keys = {},
})
-- Leap.nvim
vim.pack.add({ { src = "https://git.disroot.org/andyg/leap.nvim", name = "leap" } })
vim.api.nvim_set_hl(0, "LeapBackdrop", { link = "Comment" })
-- Focusline.nvim
vim.pack.add({
{ src = "https://github.com/ABDsheikho/focusline.nvim" },
})
require("focusline").setup({
-- focus_target can be a line number (e.g., 15), or a ratio (e.g., 0.25, 1 / 4, "25%").
focus_target = "30%", -- try it with 30%
-- which motion to associate focusline with.
with_motion = {
"zz",
"z,",
"\x04", -- Ctrl+D
"\x15", -- Ctrl+U
},
})
-- Mini.surround
vim.pack.add({ { src = "https://github.com/echasnovski/mini.surround", name = "mini.surround" } })
require("mini.surround").setup()
-- Mini.pairs
vim.pack.add({ { src = "https://github.com/echasnovski/mini.pairs", name = "mini.pairs" } })
require("mini.pairs").setup()
-- Gx.nvim
vim.pack.add({ { src = "https://github.com/chrishrb/gx.nvim", name = "gx" } })
---@diagnostic disable-next-line: missing-fields
require("gx").setup({
handlers = {
plugin = true,
github = true,
package_json = true,
search = true,
},
})
-- Comment-box.nvim
vim.pack.add({ { src = "https://github.com/LudoPinelli/comment-box.nvim", name = "comment-box" } })
require("comment-box").setup()
-- Undotree
vim.g.undotree_ShortIndicators = 0
vim.g.undotree_SplitWidth = 32
vim.g.undotree_SetFocusWhenToggle = 1
vim.g.undotree_TreeNodeShape = ""
vim.g.undotree_TreeVertShape = ""
vim.g.undotree_TreeSplitShape = ""
vim.g.undotree_TreeReturnShape = ""
vim.g.undotree_HelpLine = 0
vim.g.undotree_DiffAutoOpen = 0
vim.pack.add({ { src = "https://github.com/mbbill/undotree", name = "undotree" } })
-- Conform.nvim
vim.pack.add({ { src = "https://github.com/stevearc/conform.nvim", name = "conform" } })
Config.plugins.conform = {
formatters_by_ft = {
lua = { "stylua" },
c = { "clang-format" },
cpp = { "clang-format" },
rust = { "rustfmt" },
python = { "ruff_format" },
fish = { "fish_indent" },
sh = { "shfmt" },
bash = { "shfmt" },
},
format_on_save = function(bufnr)
-- Disable with a global or buffer-local variable
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
return { timeout_ms = 500, lsp_format = "fallback" }
end,
}
require("conform").setup(Config.plugins.conform)
-- Which-key.nvim
vim.pack.add({ { src = "https://github.com/folke/which-key.nvim", name = "which-key" } })
require("which-key").setup()
-- Lazydev.nvim (Neovim Lua type definitions for lua_ls)
vim.pack.add({ { src = "https://github.com/folke/lazydev.nvim", name = "lazydev" } })
require("lazydev").setup({
library = {
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
{ path = "snacks.nvim", words = { "Snacks" } },
},
})
-- LSP Support
vim.pack.add({ { src = "https://github.com/williamboman/mason.nvim", name = "mason" } })
vim.pack.add({ { src = "https://github.com/williamboman/mason-lspconfig.nvim", name = "mason-lspconfig" } })
vim.pack.add({ { src = "https://github.com/neovim/nvim-lspconfig", name = "nvim-lspconfig" } })
require("mason").setup()
-- Completion (Blink.cmp)
-- We check if the binary exists or if cargo is available to build it.
-- If neither, we skip loading to avoid errors.
local blink_path = vim.fn.stdpath("data") .. "/site/pack/core/opt/blink.cmp"
local has_blink_bin =
-- Check v2 location (most likely where it is now)
vim.fn.filereadable(blink_path .. "/lua/blink/cmp/lib/libblink_cmp_fuzzy.so") == 1
-- Check v1/Cargo location (fallback)
or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.so") == 1
-- Check macOS/Windows extensions
or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.dylib") == 1
or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.dll") == 1
local has_cargo = vim.fn.executable("cargo") == 1
if has_blink_bin or has_cargo then
-- 1. Add blink.lib first as it's a dependency for blink.cmp
vim.pack.add({ { src = "https://github.com/saghen/blink.lib", name = "blink.lib" } })
-- 2. Add blink.cmp and other sources
vim.pack.add({ { src = "https://github.com/saghen/blink.cmp", name = "blink.cmp" } })
vim.pack.add({ { src = "https://github.com/rafamadriz/friendly-snippets", name = "friendly-snippets" } })
vim.pack.add({ { src = "https://github.com/fang2hou/blink-copilot", name = "blink-copilot" } })
-- 3. Blink.cmp setup
require("blink.cmp").setup({
keymap = {
preset = "default",
["<Tab>"] = {
"snippet_forward",
function()
return require("sidekick").nes_jump_or_apply()
end,
function()
return vim.lsp.inline_completion.get()
end,
"fallback",
},
},
appearance = {
use_nvim_cmp_as_default = true,
nerd_font_variant = "mono",
kind_icons = { Copilot = "" },
},
sources = {
default = { "lsp", "path", "snippets", "buffer", "copilot" },
providers = {
copilot = {
name = "copilot",
module = "blink-copilot",
kind = "lsp",
server_name = "copilot",
score_offset = 100,
async = true,
opts = {
max_completions = 3,
max_attempts = 4,
},
},
},
},
signature = { enabled = true },
})
else
vim.notify("blink.cmp: binary not found and cargo not installed. Completion disabled.", vim.log.levels.WARN)
end
-- Autocmd to build blink.cmp after plugin installation or update
vim.api.nvim_create_autocmd("User", {
pattern = "PackChanged", -- This triggers after vim.pack.update() finishes
callback = function()
-- Check if blink is actually installed before trying to build
local status, blink = pcall(require, "blink.cmp")
if status then
vim.notify("Blink.cmp: Building native library...", vim.log.levels.INFO)
---@diagnostic disable-next-line: undefined-field
blink.build():wait(60000)
vim.notify("Blink.cmp: Build complete.", vim.log.levels.INFO)
end
end,
})
local lspconfig = require("lspconfig")
local capabilities = (has_blink_bin or has_cargo) and require("blink.cmp").get_lsp_capabilities() or nil
vim.lsp.config("rust_analyzer", {
settings = {
["rust-analyzer"] = {
check = {
command = "clippy",
},
},
},
})
require("mason-lspconfig").setup({
ensure_installed = {
"lua_ls",
"clangd",
"rust_analyzer",
"pyright",
"fish_lsp",
"bashls",
"copilot",
},
handlers = {
-- Default handler
function(server_name)
lspconfig[server_name].setup({ capabilities = capabilities })
end,
-- Specific overrides
["lua_ls"] = function()
lspconfig.lua_ls.setup({
capabilities = capabilities,
settings = {
Lua = {
diagnostics = { globals = { "Config" } },
},
},
})
end,
["rust_analyzer"] = function()
lspconfig.rust_analyzer.setup({
capabilities = capabilities,
settings = {
["rust-analyzer"] = {
check = {
command = "clippy",
},
},
},
})
end,
},
})
-- Enable native inline completion (ghost text in insert mode)
vim.lsp.inline_completion.enable()
-- Mini.ai
vim.pack.add({ { src = "https://github.com/echasnovski/mini.ai", name = "mini.ai" } })
Config.plugins.mini_ai = {
custom_textobjects = {
g = function()
local n_lines = vim.api.nvim_buf_line_count(0)
return {
from = { line = 1, col = 1 },
---@diagnostic disable-next-line: undefined-field
to = { line = n_lines, col = math.max(vim.fn.getline(n_lines):len(), 1) },
}
end,
},
}
require("mini.ai").setup(Config.plugins.mini_ai)
-- Icons
vim.pack.add({ { src = "https://github.com/nvim-tree/nvim-web-devicons", name = "nvim-web-devicons" } })
-- Lualine
vim.pack.add({ { src = "https://github.com/nvim-lualine/lualine.nvim", name = "lualine" } })
require("lualine").setup({
options = {
theme = "auto",
globalstatus = true,
},
sections = {
lualine_b = { "branch", "diff", "diagnostics" },
lualine_c = {
{ "filename" },
{
function()
return vim.b.gitsigns_blame_line or ""
end,
cond = function()
return vim.b.gitsigns_blame_line ~= nil and vim.b.gitsigns_blame_line ~= ""
end,
},
},
},
})
-- Inc-rename.nvim
vim.pack.add({ { src = "https://github.com/smjonas/inc-rename.nvim", name = "inc-rename" } })
require("inc_rename").setup({
-- the name of the command
cmd_name = "IncRename",
-- the highlight group used for highlighting the identifier's new name
hl_group = "Substitute",
-- whether an empty new name should be previewed; if false the command preview will be cancelled instead
preview_empty_name = false,
-- whether to display a `Renamed m instances in n files` message after a rename operation
show_message = true,
-- whether to save the "IncRename" command in the commandline history (set to false to prevent issues with
-- navigating to older entries that may arise due to the behavior of command preview)
save_in_cmdline_history = true,
-- the type of the external input buffer to use (currently supports "dressing" or "snacks")
input_buffer_type = nil,
-- callback to run after renaming, receives the result table (from LSP handler) as an argument
post_hook = nil,
})
-- Qalc
vim.pack.add({ { src = "https://github.com/Apeiros-46B/qalc.nvim", name = "qalc" } })
-- Noice dependencies
vim.pack.add({ { src = "https://github.com/MunifTanjim/nui.nvim", name = "nui" } })
-- Noice.nvim
vim.pack.add({ { src = "https://github.com/folke/noice.nvim", name = "noice" } })
require("noice").setup({
lsp = {
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.set_autocmds"] = true,
["vim.ui.codelens.display_inline"] = true,
},
},
-- you can enable a preset for easier configuration
presets = {
bottom_search = true, -- use a classic bottom cmdline for search
command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- long messages will be sent to a split
inc_rename = true, -- enables an input dialog for inc-rename.nvim
lsp_doc_border = false, -- add a border to hover docs and signature help
},
routes = {
{
filter = { event = "lsp", kind = "progress", find = "Loading workspace" },
opts = { skip = true },
},
{
filter = { event = "lsp", kind = "progress", find = "^Diagnosing" },
opts = { skip = true },
},
{
filter = { event = "lsp", kind = "progress", find = "semantic tokens" },
opts = { skip = true },
},
},
})
-- Kitty Scrollback
vim.pack.add({ { src = "https://github.com/mikesmithgh/kitty-scrollback.nvim", name = "kitty-scrollback" } })
Config.plugins.kitty_scrollback = {}
require("kitty-scrollback").setup(Config.plugins.kitty_scrollback)
-- Haunt.nvim
vim.pack.add({ { src = "https://github.com/TheNoeTrevino/haunt.nvim", name = "haunt" } })
Config.plugins.haunt = {
picker = "snacks",
}
require("haunt").setup(Config.plugins.haunt)
-- Sidekick.nvim
vim.pack.add({ { src = "https://github.com/folke/sidekick.nvim", name = "sidekick" } })
Config.plugins.sidekick = {
cli = {
prompts = {
haunt_all = function()
return require("haunt.sidekick").get_locations()
end,
haunt_buffer = function()
return require("haunt.sidekick").get_locations({ current_buffer = true })
end,
},
},
}
require("sidekick").setup(Config.plugins.sidekick)
end)
+67
View File
@@ -0,0 +1,67 @@
---@module "plugins.ai"
--- This module defines the AI plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ AI Tools │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Neocodeium
'monkoose/neocodeium',
event = 'VeryLazy',
opts = require('data.types').neocodeium.opts,
keys = require('data.keys').neocodeium,
cond = require('data.cond').neocodeium,
dependencies = { 'hrsh7th/nvim-cmp' },
},
{ -- Minuet-AI
'milanglacier/minuet-ai.nvim',
dependencies = require('data.deps').minuet,
opts = { provider = 'openai' },
cond = require('data.cond').minuet,
},
{ -- ChatGPT
'jackMort/ChatGPT.nvim',
event = 'VeryLazy',
cond = require('data.cond').chatgpt,
keys = require('data.keys').chatgpt.func,
opts = require('data.types').chatgpt,
dependencies = require('data.deps').chatgpt,
},
{ -- GP
'robitx/gp.nvim',
cond = require('data.cond').gp,
lazy = false,
opts = require('data.types').gp,
keys = require('data.keys').gp.func,
},
{ -- Code-Companion
'olimorris/codecompanion.nvim',
dependencies = require('data.deps').codecompanion,
opts = require('data.types').codecompanion.opts,
cond = require('data.cond').codecompanion,
cmd = require('data.cmd').codecompanion,
},
{ -- Codeium
'Exafunction/codeium.vim',
cond = require('data.cond').codeium,
lazy = true,
opts = require('data.types').codeium,
keys = require('data.keys').codeium,
dependencies = require('data.deps').codeium,
},
{ -- Avante
'yetone/avante.nvim',
cond = require('data.cond').avante,
lazy = true,
opts = require('data.types').avante,
build = 'make',
dependencies = require('data.deps').avante,
keys = function()
-- Add keymaps for Avante group
for _, item in ipairs(require('data.keys').group.avante) do
require('data.func').add_keymap(item)
end
end,
cmd = 'Avante',
},
}
+22
View File
@@ -0,0 +1,22 @@
--- @module "plugins.astral"
--- This module defines the astral plugin spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Astral Plugin │
-- ╰─────────────────────────────────────────────────────────╯
return { -- Astral
'rootiest/astral.nvim',
version = '*', -- Pin to GitHub releases
enabled = require('data.func').check_global_var('use_astral', true, true),
opts = {
fallback_themes = {
'catppuccin-macchiato',
'catppuccin-frappe',
'tokyonight',
'kanagawa',
'monochrome',
'default',
},
},
dev = vim.g.rootiest_dev or false, -- Use local codebase
}
+14
View File
@@ -0,0 +1,14 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Auto-Save │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Auto-save
'okuuva/auto-save.nvim',
cmd = require('data.cmd').autosave,
event = { 'InsertLeave', 'TextChanged' },
opts = require('data.types').autosave,
cond = require('data.cond').autosave,
keys = require('data.keys').autosave,
},
}
+400
View File
@@ -0,0 +1,400 @@
--- @module "plugins.cmp"
--- This module defines the cmp plugin spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Auto Completion │
-- ╰─────────────────────────────────────────────────────────╯
local perf = vim.g.cmp_performance_enabled or false
--- Function to return the cmp provider
---@param performance? boolean Whether to use the experimental cmp performance fork
---@return table provider The cmp provider spec
local function cmp_provider(performance)
if performance then
return {
-- Experiemental cmp performance fork
url = 'https://github.com/iguanacucumber/magazine.nvim',
}
else
return {
-- Classic cmp
url = 'hrsh7th/nvim-cmp',
dev = false,
}
end
end
local cmp_repo = cmp_provider(perf)
if vim.g.useblinkcmp then
if vim.g.cmp_performance_enabled then
vim.g.lazyvim_blink_main = true
end
return { -- Blink.cmp
{ -- Overide the lazy-load event to include CmdlineEnter
'saghen/blink.cmp',
event = { 'InsertEnter', 'CmdlineEnter' },
},
{ -- Load blink.cmp configuration
'saghen/blink.cmp',
dependencies = {
'mikavilpas/blink-ripgrep.nvim',
'archie-judd/blink-cmp-words',
},
opts = {
enabled = function()
return not vim.tbl_contains({ 'minifiles' }, vim.bo.filetype)
and vim.bo.buftype ~= 'prompt'
and vim.b.completion ~= false
end,
completion = {
menu = {
auto_show = function(ctx)
if vim.g.cmp_auto_show ~= false then
return ctx.mode ~= 'cmdline'
or not vim.tbl_contains({ '/', '?' }, vim.fn.getcmdtype())
end
return false
end,
},
list = {
selection = {
preselect = function(ctx)
return ctx.mode ~= 'cmdline'
and not require('blink.cmp').snippet_active({ direction = 1 })
end,
auto_insert = true,
},
},
},
snippets = {
preset = 'luasnip',
},
fuzzy = {
implementation = 'prefer_rust',
use_frecency = true,
sorts = {
'exact',
'score',
'sort_text',
},
},
keymap = {
preset = 'enter',
['<C-y>'] = { 'select_and_accept' },
['<CR>'] = { 'fallback' },
},
cmdline = {
enabled = true,
completion = {
menu = { auto_show = true },
ghost_text = { enabled = true },
},
sources = function()
local type = vim.fn.getcmdtype()
-- Search forward and backward
if type == '/' or type == '?' then
return { 'buffer' }
end
-- Commands
if type == ':' or type == '@' then
return { 'cmdline' }
end
return {}
end,
keymap = {
preset = 'enter',
['<C-y>'] = { 'select_and_accept' },
['<S-Tab>'] = { 'select_prev', 'fallback' },
['<Tab>'] = { 'select_next', 'fallback' },
['<Enter>'] = { 'accept_and_enter', 'fallback' },
},
},
sources = {
providers = {
cmdline = {
min_keyword_length = function(ctx)
-- when typing a command, only show when the keyword is 2 characters or longer
if
ctx.mode == 'cmdline' and string.find(ctx.line, ' ') == nil
then
return 2
end
return 0
end,
},
ripgrep = {
module = 'blink-ripgrep',
name = 'Ripgrep',
opts = {
backend = {
ripgrep = {
search_casing = '--smart-case',
},
},
},
transform_items = function(_, items)
for _, item in ipairs(items) do
-- example: append a description to easily distinguish rg results
item.labelDetails = {
description = '󰡦 ',
}
end
return items
end,
},
-- Use the thesaurus source
thesaurus = {
name = 'blink-cmp-words',
module = 'blink-cmp-words.thesaurus',
-- All available options
opts = {
-- A score offset applied to returned items.
-- By default the highest score is 0 (item 1 has a score of -1, item 2 of -2 etc..).
score_offset = 0,
-- Default pointers define the lexical relations listed under each definition,
-- see Pointer Symbols below.
-- Default is as below ("antonyms", "similar to" and "also see").
pointer_symbols = { '!', '&', '^' },
},
},
-- Use the dictionary source
dictionary = {
name = 'blink-cmp-words',
module = 'blink-cmp-words.dictionary',
-- All available options
opts = {
-- The number of characters required to trigger completion.
-- Set this higher if completion is slow, 3 is default.
dictionary_search_threshold = 3,
-- See above
score_offset = 0,
-- See above
pointer_symbols = { '!', '&', '^' },
},
},
},
default = {
'lsp',
'path',
'lazydev',
'snippets',
'buffer',
'ripgrep',
'thesaurus',
},
-- Setup completion by filetype
per_filetype = {
text = { 'dictionary' },
markdown = { 'thesaurus' },
},
},
},
keys = require('data.keys').blink,
},
{ -- Blink compat
'saghen/blink.compat',
optional = true, -- make optional so it's only enabled if any extras need it
opts = {},
version = not vim.g.lazyvim_blink_main and '*',
},
{ -- Catppuccin integration
'catppuccin',
optional = true,
opts = {
integrations = { blink_cmp = true },
},
},
}
end
-- Else use nvim-cmp
return {
{ -- cmp
url = cmp_repo.url,
build = cmp_repo.build,
branch = cmp_repo.branch,
dev = cmp_repo.dev,
enabled = not vim.g.useblinkcmp,
event = 'VeryLazy',
dependencies = require('data.deps').cmp,
config = function()
local cmp = require('cmp')
local luasnip = require('luasnip')
cmp.event:on('menu_opened', function()
if require('data.cond').neocodeium() == true then
require('neocodeium').clear()
end
end)
cmp.event:on('menu_closed', function()
if require('data.cond').neocodeium() == true then
require('neocodeium.commands').enable()
require('neocodeium').cycle_or_complete()
end
end)
local border_opts = {
border = vim.g.completion_borders or 'rounded',
}
local window_opts = {
completion = cmp.config.window.bordered(border_opts),
documentation = cmp.config.window.bordered(border_opts),
}
luasnip.config.setup({})
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0
and vim.api
.nvim_buf_get_lines(0, line - 1, line, true)[1]
:sub(col, col)
:match('%s')
== nil
end
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
completion = { completeopt = 'menu,menuone,noinsert' },
window = vim.g.completion_borders == 'rounded' and window_opts or {},
mapping = cmp.mapping.preset.insert({
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<Up>'] = cmp.mapping.select_prev_item({
behavior = cmp.SelectBehavior.Select,
}),
['<Down>'] = cmp.mapping.select_next_item({
behavior = cmp.SelectBehavior.Select,
}),
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-y>'] = cmp.mapping.confirm({ select = true }),
['<C-Space>'] = cmp.mapping.complete({}),
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
-- If the completion popup is visible, select the next item
cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then
-- If a snippet can be expanded or jump to the next location, do so
luasnip.expand_or_jump()
elseif vim.snippet.active({ direction = 1 }) then
-- If a snippet is active, jump to the next location
vim.schedule(function()
vim.snippet.jump(1)
end)
elseif has_words_before() then
-- If there are words before the cursor, complete them
cmp.complete()
else
-- Otherwise, fallback to the default behavior of the Tab key
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
elseif vim.snippet.active({ direction = -1 }) then
vim.schedule(function()
vim.snippet.jump(-1)
end)
else
fallback()
end
end, { 'i', 's' }),
}),
sources = {
{ name = 'nvim_lsp', priority = 1000 },
{ name = 'luasnip', priority = 750 },
{ name = 'path', priority = 250 },
{ name = 'buffer', priority = 250 },
{ name = 'cmp_yanky' },
{ name = 'dotenv' },
{ name = 'calc' },
{ name = 'conventionalcommits' },
},
formatting = {
fields = { 'abbr', 'kind', 'menu' },
expandable_indicator = true,
format = function(entry, item)
local custom_menu_icon = {
calc = '󰃬 Calculator',
math = ' Math',
nerd = ' Glyphs',
gitmoji = ' Gitmoji',
emoji = '󰞅 Emoji',
conventionalcommits = ' Commit Message',
path = ' Path',
buffer = '󰓩 Buffer',
dotenv = ' Dotenv',
cmp_yanky = '󰅍 Yanked',
}
local color_item = require('nvim-highlight-colors').format(
entry,
{ kind = item.kind }
)
item = require('lspkind').cmp_format({
require('tailwind-tools.cmp').lspkind_format,
})(entry, item)
if color_item.abbr_hl_group then
item.kind_hl_group = color_item.abbr_hl_group
item.kind = color_item.abbr
end
-- if entry.source.name is in the custom_menu_icon table, match its icon
if custom_menu_icon[entry.source.name] then
item.kind = custom_menu_icon[entry.source.name]
end
return item
end,
},
})
-- `:` cmdline setup.
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
}, {
{
name = 'cmdline',
option = {
ignore_cmds = { 'Man', '!' },
},
},
}, { name = 'cmp-cmdline-history' }, {
name = 'cmp-cmdline-prompt',
}),
})
-- Additional setup for cmdline filetype
cmp.setup.filetype('cmdline', {
sources = {
{ name = 'cmdline' }, -- Ensure 'cmdline' source is available
{ name = 'path' },
{ name = 'cmp-cmdline-history' },
{ name = 'cmp-cmdline-prompt' },
},
})
-- Input filetype
cmp.setup.filetype('input', {
sources = {},
})
-- Custom filetype configuration
cmp.setup.filetype('config', {
sources = vim.tbl_filter(function(source)
return source.name ~= 'emoji' and source.name ~= 'gitmoji'
end, cmp.get_config().sources),
})
-- List of filetypes to disable completion
local disabled_filetypes = require('data.types').cmp
for _, filetype in ipairs(disabled_filetypes) do
cmp.setup.filetype(filetype, {
sources = {},
})
end
end,
},
}
+83
View File
@@ -0,0 +1,83 @@
--- @module "plugins.coding"
--- This module defines the coding plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Coding │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Mason-lspconfig
'williamboman/mason-lspconfig.nvim',
opts = require('data.types').mason_lsp_config.opts,
},
{ -- nvim-treesitter
'nvim-treesitter/nvim-treesitter',
opts = require('data.types').treesitter.opts,
},
{ -- Yanky
'gbprod/yanky.nvim',
requires = { 'kkharji/sqlite.lua' },
opts = require('data.types').yanky,
keys = require('data.keys').yanky,
},
{ -- LazyDev
'folke/lazydev.nvim',
opts = require('data.types').lazydev.opts,
dependencies = require('data.deps').lazydev,
},
{ -- Alternate
'ton/vim-alternate',
lazy = true,
ft = require('data.types').alternate,
keys = require('data.keys').alternate,
},
{ -- Tailwind
'luckasRanarison/tailwind-tools.nvim',
lazy = true,
dependencies = require('data.deps').needs_treesitter,
opts = {},
},
{ -- Substitute
'gbprod/substitute.nvim',
lazy = true,
opts = require('data.types').substitute,
keys = require('data.keys').substitute,
},
{ -- Comment
'numToStr/Comment.nvim',
opts = require('data.types').comment,
},
{ -- Matchup
'andymass/vim-matchup',
setup = function()
-- may set any options here
vim.g.matchup_matchparen_offscreen = { method = 'popup' }
end,
},
{ -- EasyAlign
'junegunn/vim-easy-align',
lazy = true,
keys = require('data.keys').easyalign,
},
{ -- TinyInlineDiagnostic
'rachartier/tiny-inline-diagnostic.nvim',
event = 'VeryLazy', -- Or `LspAttach`
priority = 1000, -- needs to be loaded in first
cond = require('data.cond').tiny_inline_diagnostic,
config = require('data.types').tiny_inline_diagnostic.config,
},
{
'neovim/nvim-lspconfig',
init = function() end,
opts = {
servers = {
yamlls = {
settings = {
yaml = {
customTags = vim.g.custom_yaml_tags,
},
},
},
},
},
},
}
+19
View File
@@ -0,0 +1,19 @@
--- @module "plugins.core"
--- This module defines the core plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Core │
-- ╰─────────────────────────────────────────────────────────╯
return {
-- require("config.rocks").plugin_spec,
{ -- Bufferline
'akinsho/bufferline.nvim',
cond = require('data.types').bufferline.enabled,
opts = require('data.types').bufferline.opts,
},
{ -- Which-Key
'folke/which-key.nvim',
lazy = true,
opts = require('data.types').whichkey.opts,
},
}
+56
View File
@@ -0,0 +1,56 @@
--- @module "plugins.dashboard.alpha"
--- This module defines the alpha plugin spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ ALPHA │
-- ╰─────────────────────────────────────────────────────────╯
return { -- Alpha
'goolord/alpha-nvim',
event = 'VimEnter',
enabled = require('data.func').check_global_var(
'dashboard',
'alpha',
'alpha'
),
opts = require('data.dash').alpha.opts,
config = function(_, dashboard)
-- close Lazy and re-open when the dashboard is ready
if vim.o.filetype == 'lazy' then
vim.cmd.close()
vim.api.nvim_create_autocmd('User', {
once = true,
pattern = 'AlphaReady',
callback = function()
require('lazy').show()
end,
})
end
-- Setup the dashboard
require('alpha').setup(dashboard.opts)
-- Open Alpha when Vim is started with no file arguments
vim.api.nvim_create_autocmd('User', {
once = true,
pattern = 'LazyVimStarted',
callback = function()
local stats = require('lazy').stats()
local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100)
dashboard.section.footer.val = '󰇥 Neovim loaded '
.. stats.loaded
.. '/'
.. stats.count
.. ' plugins in '
.. ms
.. 'ms 󱐌'
pcall(vim.cmd.AlphaRedraw)
-- Handle other plugins that may conflict
-- If auto-cursorline is installed, disable it
if pcall(require, 'auto-cursorline') then
require('auto-cursorline').disable({ buffer = true })
end
end,
})
end,
}
+9
View File
@@ -0,0 +1,9 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Drop Screensaver │
-- ╰─────────────────────────────────────────────────────────╯
return {
'folke/drop.nvim',
lazy = true,
opts = {},
}
+118
View File
@@ -0,0 +1,118 @@
--- @module "plugins.dashboard.nvim-dashboard"
--- This module defines the dashboard plugin spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Dashboard │
-- ╰─────────────────────────────────────────────────────────╯
return { --
-- Dashboard
'nvimdev/dashboard-nvim',
event = 'UIEnter',
version = false,
opts = function()
---@diagnostic disable-next-line: param-type-mismatch
local logo_path = vim.fs.joinpath(vim.fn.stdpath('config'), 'logo/')
local height, width = vim.fn.winheight(0), vim.fn.winwidth(0)
local logo_file
local logo_dimensions = { width = 0, height = 0 }
if height >= 80 and width >= 80 then
logo_file = 'rootiest.txt'
elseif height >= 48 and width >= 48 then
logo_file = 'xerneas.ans'
elseif width >= 100 then
logo_file = 'pikachu.ans'
elseif width >= 80 then
logo_file = 'tall.txt'
elseif width >= 50 then
logo_file = 'small.txt'
else
logo_file = 'tiny.txt'
end
if logo_file == 'snorlax.ans' then
logo_dimensions = { width = 53, height = 25 }
elseif logo_file == 'porygon-z.ans' then
logo_dimensions = { width = 28, height = 18 }
elseif logo_file == 'pikachu.ans' then
logo_dimensions = { width = 22, height = 11 }
elseif logo_file == 'taco.ans' then
logo_dimensions = { width = 33, height = 15 }
elseif logo_file == 'nvim.ans' then
logo_dimensions = { width = 35, height = 20 }
elseif logo_file == 'marshadow.ans' then
logo_dimensions = { width = 28, height = 17 }
elseif logo_file == 'eiscue.ans' then
logo_dimensions = { width = 22, height = 18 }
elseif logo_file == 'xerneas.ans' then
logo_dimensions = { width = 39, height = 24 }
elseif logo_file == 'rootiest.ans' then
logo_dimensions = { width = 65, height = 27 }
end
local opts = {
theme = 'doom',
hide = {
statusline = false,
tabline = true,
},
-- By default, use ANSI art header
preview = {
command = 'bat -pp | bat -pp',
file_path = logo_path .. logo_file,
file_width = logo_dimensions.width,
file_height = logo_dimensions.height,
},
config = {
center = require('data.dash').dashboard_nvim.choices,
footer = function()
local stats = require('lazy').stats()
local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100)
return {
-- "⚡ Neovim loaded "
'󱐋 Neovim loaded '
.. stats.loaded
.. '/'
.. stats.count
.. ' plugins in '
.. ms
.. 'ms',
}
end,
},
}
-- if logo_file extension is not .ans or .png then read the content and add it to the header
if logo_file:sub(-4) ~= '.ans' and logo_file:sub(-4) ~= '.png' then
local logo_content = vim.fn.readfile(logo_path .. logo_file)
local LOGO = '\n\n' .. table.concat(logo_content, '\n') .. '\n\n'
opts.config.header = vim.split(LOGO, '\n')
opts.preview = nil
end
for _, button in ipairs(opts.config.center) do
button.desc = button.desc .. string.rep(' ', 43 - #button.desc)
button.key_format = ' %s'
end
-- Open dashboard after closing lazy
if vim.o.filetype == 'lazy' then
vim.api.nvim_create_autocmd('WinClosed', {
pattern = tostring(vim.api.nvim_get_current_win()),
once = true,
callback = function()
vim.schedule(function()
vim.api.nvim_exec_autocmds('UIEnter', { group = 'dashboard' })
end)
end,
})
end
return opts
end,
enabled = require('data.func').check_global_var(
'dashboard',
'nvim-dashboard',
'alpha'
),
}
+114
View File
@@ -0,0 +1,114 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Snacks Dashboard │
-- ╰─────────────────────────────────────────────────────────╯
local fallback_logo = require('data.dash').fallback_logo
local function get_window_size()
local width = vim.api.nvim_win_get_width(0)
local height = vim.api.nvim_win_get_height(0)
return width, height
end
local function read_file(file_path)
local success, content_or_error = pcall(function()
local file = assert(io.open(file_path, 'r')) -- Open the file in read mode
local content = file:read('*a') -- Read the entire file content
file:close() -- Close the file
return content
end)
if not success then
return fallback_logo
end
return content_or_error
end
-- Common sections reused across conditions
local common_sections = {
{
section = 'keys',
title = 'Shortcuts',
icon = '󰌌 ',
gap = 0,
padding = 1,
indent = 2,
},
{
pane = 2,
padding = 2,
},
{
pane = 2,
icon = '',
title = 'Recent Files',
section = 'recent_files',
indent = 2,
padding = 1,
gap = 0,
},
{
pane = 2,
icon = '',
title = 'Projects',
section = 'projects',
indent = 2,
padding = 2,
},
}
local function create_sections(neovide)
local sections = {
{ section = 'header', indent = neovide and 40 or 60 },
}
-- Add common sections in order
for _, common in ipairs(common_sections) do
table.insert(sections, common)
end
-- Ensure "startup" is always at the end
table.insert(sections, neovide and { section = 'startup' } or {
section = 'startup',
padding = 2,
indent = 60,
})
if vim.g.show_github_contrib and not neovide then
local w, h = get_window_size()
local usrname = vim.g.gitname or 'rootiest'
if w > 130 and h > 30 then
table.insert(sections, {
section = 'terminal',
cmd = 'kusa ' .. usrname .. ' && sleep 0.2',
padding = { 0, 0 },
height = 10,
width = 106,
indent = 8,
})
end
end
return sections
end
return {
{
'folke/snacks.nvim',
opts = {
dashboard = {
enabled = require('data.func').check_global_var(
'dashboard',
'snacks',
'alpha'
),
preset = {
keys = require('data.dash').dashboard_nvim.choices,
header = read_file(require('data.dash').logo),
},
sections = function()
return create_sections(require('data.func').is_neovide())
end,
},
},
},
}
+21
View File
@@ -0,0 +1,21 @@
--- @module "plugins.debug"
--- This module defines the debug plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Debug │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Neotest Plenary
'nvim-neotest/neotest-plenary',
},
{ -- Neotest
'nvim-neotest/neotest',
opts = {
adapters = require('data.deps').neotest.adapters,
},
dependencies = require('data.deps').neotest.deps,
},
{ -- Profiling
'stevearc/profile.nvim',
},
}
+4
View File
@@ -0,0 +1,4 @@
return {
-- disable tokyonight
{ 'folke/tokyonight.nvim', enabled = false },
}
+148
View File
@@ -0,0 +1,148 @@
--- @module "plugins.editor"
--- This module defines the editor plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Editor │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Illuminate
'ehpi/vim-illuminate',
opts = require('data.types').illuminate.opts,
},
{ -- Nvim-notify
'rcarriga/nvim-notify',
opts = {
fps = 144, -- your monitor refresh rate
},
},
{ -- Grug-Far
'MagicDuck/grug-far.nvim',
opts = require('data.types').grug_far.opts,
},
{ -- Trouble
'folke/trouble.nvim',
lazy = true,
event = 'LazyFile',
cmd = require('data.cmd').trouble,
opts = require('data.types').trouble.opts,
},
{ -- Flash
'folke/flash.nvim',
opts = require('data.types').flash,
keys = require('data.keys').flash,
},
{ -- NeoTree
'nvim-neo-tree/neo-tree.nvim',
opts = require('data.types').neotree.opts,
cond = require('data.cond').neotree,
},
{ -- Arrow
'otavioschwanck/arrow.nvim',
lazy = true,
event = 'User LazyFileOpen',
opts = require('data.types').arrow,
},
---@module "neominimap.config.meta"
{ -- NeoMiniMap
'Isrothy/neominimap.nvim',
lazy = false,
-- event = 'User LazyFileOpen',
keys = require('data.keys').minimap.func,
init = require('data.types').minimap.init(),
cond = require('data.types').minimap.cond(),
},
{ -- Persistence
'folke/persistence.nvim',
event = 'BufReadPre',
opts = {},
},
{ -- DeadColumn
'Bekaboo/deadcolumn.nvim',
event = 'BufEnter',
cond = require('data.func').check_global_var('dead_column', true, true),
},
{ -- Precognition
'tris203/precognition.nvim',
lazy = true,
opts = {},
keys = require('data.keys').precog,
},
{ -- Smart Scrolloff
'tonymajestro/smart-scrolloff.nvim',
lazy = true,
event = 'LazyFile',
cond = require('data.func').check_global_var('smart_scrolloff', true, true),
opts = require('data.types').smartscrolloff,
},
{ -- Recorder
'chrisgrieser/nvim-recorder',
lazy = true,
dependencies = require('data.deps').recorder,
keys = require('data.keys').recorder,
},
{ -- Comment Box
'LudoPinelli/comment-box.nvim',
lazy = false,
},
{ -- Todo Comments
'folke/todo-comments.nvim',
opts = require('data.types').todo.opts,
cond = require('data.cond').todo,
enabled = true,
},
{ -- Auto Cursorline
'delphinus/auto-cursorline.nvim',
cond = require('data.func').check_global_var('auto_cursorline', true, true),
opts = require('data.types').autocursorline,
},
{ -- Bars N Lines
'OXY2DEV/bars-N-lines.nvim',
cond = require('data.types').barsNlines.enabled,
lazy = false,
config = require('data.types').barsNlines.config,
},
{ -- UndoTree
'mbbill/undotree',
lazy = false,
config = require('data.types').undotree,
keys = require('data.keys').undotree,
},
{ -- Noice
'folke/noice.nvim',
optional = true,
opts = require('data.types').noice,
},
{ -- Smear Cursor
'sphamba/smear-cursor.nvim',
event = 'VeryLazy',
enabled = function() -- Allow kitty and neovide to use native features
return not require('data.func').is_neovide()
and not require('data.func').is_kitty()
end,
opts = require('data.types').smearcursor,
keys = require('data.keys').smearcursor,
},
{ -- nvim-colorizer
'catgoose/nvim-colorizer.lua',
event = 'BufReadPre',
lazy = true,
opts = {
lazy_load = true,
user_default_options = {
names = true,
RGB = true, -- #RGB hex codes
RGBA = true, -- #RGBA hex codes
RRGGBB = true, -- #RRGGBB hex codes
RRGGBBAA = true, -- #RRGGBBAA hex codes
AARRGGBB = true, -- 0xAARRGGBB hex codes
rgb_fn = true, -- CSS rgb() and rgba() functions
hsl_fn = true, -- CSS hsl() and hsla() functions
css = true,
css_fn = true,
tailwind = true, -- Enable tailwind colors
tailwind_opts = { update_names = true },
sass = { enable = true, parsers = { 'css' } }, -- Enable sass colors
},
},
},
}
+60
View File
@@ -0,0 +1,60 @@
--- @module "plugins.git"
--- This module defines the git plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Git Plugins │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Gist Tools
'Rawnly/gist.nvim',
lazy = true,
cmd = require('data.cmd').gist,
keys = require('data.keys').gist.func,
config = true,
},
{ -- Thanks/github-stars
'jsongerber/thanks.nvim',
lazy = true,
cmd = require('data.cmd').thanks,
opts = require('data.types').thanks.opts,
},
{ -- GitLinker
'linrongbin16/gitlinker.nvim',
lazy = true,
cmd = require('data.cmd').gitlinker,
opts = {},
keys = require('data.keys').gitlinker,
},
{ -- Git Blame
'f-person/git-blame.nvim',
event = 'LazyFile',
cond = require('data.cond').lualine,
opts = require('data.types').gitblame.opts,
},
{ -- Git Graph
'isakbm/gitgraph.nvim',
opts = require('data.types').gitgraph.opts,
keys = require('data.keys').gitgraph,
},
{ -- Diffview
'sindrets/diffview.nvim',
lazy = true,
cmd = require('data.cmd').diffview,
opts = require('data.types').diffview.opts,
},
{ -- Neogit
'NeogitOrg/neogit',
opts = {
graph_style = 'kitty',
},
},
{ -- GitSigns
'lewis6991/gitsigns.nvim',
opts = function()
local myopts = {}
myopts.linehl = vim.g.git_line_hl or false
myopts.word_diff = vim.g.git_word_hl or false
return myopts
end,
},
}
+43
View File
@@ -0,0 +1,43 @@
---@module "plugins"
--- This module defines the plugins for the Neovim configuration.
---
--- If lazy.nvim is installed, this module returns an empty table
--- to defer plugin management to lazy.nvim.
---
--- If lazy.nvim is not installed, the module loads each
--- Lua file in the `plugins` directory.
---
--- Note:
--- A warning will be triggered if lazy.nvim is not installed unless
--- the variable `vim.g.ignore_no_lazy` is set to `true`.
--
-- ╭─────────────────────────────────────────────────────────╮
-- │ PLUGINS DATA │
-- ╰─────────────────────────────────────────────────────────╯
local plugins = {}
-- Check if lazy.nvim is installed
if pcall(require, 'lazy') then
-- If lazy.nvim is installed, return an empty table and do nothing
return plugins
else
-- If lazy.nvim is not installed and vim.g.ignore_no_lazy is not set, display a warning
if not vim.g.ignore_no_lazy then
require('data').func.notify('lazy.nvim is not installed', 'WARNING')
end
-- Try to require plugins manually if we are not using lazy.nvim
local function read_plugins_dir()
-- Getting the root path for the current module directory
local dir_path =
vim.fn.fnamemodify(debug.getinfo(1, 'S').source:sub(2), ':h')
-- Load modules from the data directory
require('data').load_modules_from_dir(dir_path, 'plugins')
end
-- Read the directory and load any additional modules
read_plugins_dir()
end
return plugins
+51
View File
@@ -0,0 +1,51 @@
--- @module "plugins.languages"
--- This module defines the languages plugins spec for the Neovim configuration.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Languages │
-- ╰─────────────────────────────────────────────────────────╯
return {
{ -- Jinja
'armyers/Vim-Jinja2-Syntax',
},
{ -- Render-markdown
'MeanderingProgrammer/render-markdown.nvim',
enabled = false,
opts = {
heading = {
-- Determins if a border is added above and below headings
border = true,
above = '',
-- Used below heading for border
below = '🮂',
},
file_types = { 'markdown', 'Avante' },
},
ft = { 'markdown', 'Avante' },
},
{ -- MarkView
'OXY2DEV/markview.nvim',
ft = { 'markdown', 'Avante' },
opts = function()
local presets = require('markview.presets')
return {
checkboxes = presets.checkboxes.nerd,
markdown = {
headings = presets.headings.simple,
},
}
end,
},
{ -- Markdown Preview
'iamcco/markdown-preview.nvim',
cmd = require('data.cmd').markdown_preview,
ft = { 'markdown' },
build = function()
vim.fn['mkdp#util#install']()
end,
},
{ -- CookLang
'luizribeiro/vim-cooklang',
lazy = false,
},
}

Some files were not shown because too many files have changed in this diff Show More