Table Of Contents
- Welcome Back, LazyVim Warriors!
- Your Complete Plugin Arsenal
- Step-by-Step: Build Your Dream Setup
- Custom Power Tools (The Secret Sauce!)
- Pro Developer Workflows
- Keep It Fast: Performance Tips
- When Things Break: Troubleshooting Guide
- Your Next Level Journey
Welcome Back, LazyVim Warriors! π€
If you've followed Part 1 (LazyVim installation) and Part 2 (basic customization), you're ready for the REAL power!
What you'll get in this final part:
- Production-ready plugin configurations (copy-paste friendly!)
- Custom utilities that solve real developer problems
- Workflows used by professional full-stack developers
- A setup that's fast, reliable, and actually fun to use
Let's turn your LazyVim into a development beast! π₯
Your Complete Plugin Arsenal π‘οΈ
Coding Superpowers
- Blink.cmp: Lightning-fast autocompletion with AI assistance (Codeium)
- Inc-rename: Rename variables with live preview across your entire project
- Mini.bracketed: Navigate through code like a pro (functions, errors, etc.)
-
Dial.nvim: Smart increment/decrement (numbers, dates, booleans, even
const
/let
!) - Symbols Outline: Bird's eye view of your code structure
- Marks.nvim: Never lose your place in large files
LSP Magic for Web Development
- TypeScript/JavaScript: Full intellisense with inlay hints
- CSS/Tailwind: Smart styling assistance
- HTML: Complete tag and attribute completion
- Mason: Automatic language server management
- Perfect Diagnostics: Error handling that doesn't annoy you
UI That Actually Helps
- Snacks Dashboard: Beautiful startup screen with your recent projects
- Incline.nvim: Smart filename display with file icons
- Bufferline: Clean tab management
- Lualine: Information-rich status line
- Zen Mode: Distraction-free coding sessions
- Color Highlights: See your CSS colors in real-time
Editor Ninja Tools
- Telescope: Find anything, anywhere (files, text, commands)
- Neo-tree: Project navigation made simple
- Git Integration: Version control without leaving your editor
- Close Buffers: Smart buffer cleanup
- Conform + Biome: Lightning-fast code formatting
Step by Step: Build Your Dream Setup
Perfect Your Solarized Osaka Theme
First, let's get your theme setup perfected from Part 2!
Create: lua/plugins/colorscheme.lua
return {
{
"craftzdog/solarized-osaka.nvim",
lazy = true,
priority = 1000,
opts = function()
return {
transparent = true, -- Makes your terminal background show through
}
end,
},
}
It's will look like this
Yeahh, I'm a big fan of the solarized-osaka theme, so thanks so much Takuya Matsuyama!
π¨ Advanced Theme Customization:
Want to customize colors for specific plugins? Add this to your theme config:
return {
{
"craftzdog/solarized-osaka.nvim",
lazy = true,
priority = 1000,
opts = function()
return {
transparent = true,
on_colors = function(colors)
-- Customize specific colors
colors.hint = colors.orange -- Make hints more visible
colors.error = colors.red -- Error color
end,
on_highlights = function(highlights, colors)
-- Customize specific highlight groups
highlights.Comment = { fg = colors.base01, italic = true }
highlights["@keyword"] = { fg = colors.violet, bold = true }
end,
}
end,
},
}
π Theme Integration with Your UI Plugins:
Notice how your UI plugins use the theme colors:
-- In your incline.nvim config (from ui.lua)
local colors = require("solarized-osaka.colors").setup()
-- This ensures your filename bar matches your theme perfectly!
Why This Setup Rocks:
- Transparent background: Your terminal's background shows through
- Consistent colors: All plugins use the same color palette
- Customizable: Override any color you don't like
- Performance: Lazy-loaded with high priority for instant theming
Supercharge Your Coding with Smart Plugins
Create: lua/plugins/coding.lua
return {
-- Lightning-fast completion with AI
{
"saghen/blink.cmp",
dependencies = {
"codeium.nvim",
"saghen/blink.compat",
"rafamadriz/friendly-snippets",
},
opts = {
-- AI-powered completions
sources = {
compat = { "codeium" },
default = { "lsp", "path", "snippets", "buffer" },
providers = {
codeium = {
kind = "Codeium",
score_offset = 100, -- Prioritize AI suggestions
async = true,
},
},
},
keymap = {
preset = "enter",
["<C-y>"] = { "select_and_accept" }, -- Accept with Ctrl+y
},
appearance = {
nerd_font_variant = "mono",
},
},
},
-- Rename with live preview
{
"smjonas/inc-rename.nvim",
cmd = "IncRename",
config = true,
},
-- Navigate like a pro
{
"echasnovski/mini.bracketed",
event = "BufReadPost",
config = function()
require("mini.bracketed").setup({
file = { suffix = "" },
window = { suffix = "" },
quickfix = { suffix = "" },
yank = { suffix = "" },
treesitter = { suffix = "n" },
})
end,
},
-- Smart increment/decrement
{
"monaqa/dial.nvim",
keys = {
{ "<C-a>", function() return require("dial.map").inc_normal() end, expr = true },
{ "<C-x>", function() return require("dial.map").dec_normal() end, expr = true },
},
config = function()
local augend = require("dial.augend")
require("dial.config").augends:register_group({
default = {
augend.integer.alias.decimal,
augend.integer.alias.hex,
augend.date.alias["%Y/%m/%d"],
augend.constant.alias.bool,
augend.semver.alias.semver,
augend.constant.new({ elements = { "let", "const" } }), -- Toggle let/const
},
})
end,
},
-- Code structure overview
{
"simrat39/symbols-outline.nvim",
keys = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", desc = "Symbols Outline" } },
cmd = "SymbolsOutline",
opts = {
position = "right",
},
},
-- Never lose your place
{
"chentoast/marks.nvim",
event = "VeryLazy",
opts = {},
},
}
π― Why These Plugins Rock:
- Blink.cmp: Faster than nvim-cmp with AI suggestions
- Inc-rename: See all changes before committing
-
Dial: Turn
true
βfalse
,Monday
βTuesday
,let
βconst
-
Mini.bracketed: Use
]f
to jump to next function,]d
for next diagnostic
Master Web Development with Perfect LSP
Create: lua/plugins/lsp.lua
return {
-- Auto-install LSP servers
{
"williamboman/mason.nvim",
opts = function(_, opts)
vim.list_extend(opts.ensure_installed, {
"typescript-language-server",
"css-lsp",
"tailwindcss-language-server",
"biome", -- Fast formatter/linter
})
end,
},
-- LSP configuration
{
"neovim/nvim-lspconfig",
opts = {
inlay_hints = { enabled = false }, -- Toggle when needed
servers = {
-- TypeScript/JavaScript powerhouse
tsserver = {
root_dir = function(...)
return require("lspconfig.util").root_pattern(".git")(...)
end,
settings = {
typescript = {
inlayHints = {
includeInlayParameterNameHints = "literal",
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
includeInlayFunctionParameterTypeHints = true,
includeInlayVariableTypeHints = false,
includeInlayPropertyDeclarationTypeHints = true,
},
},
javascript = {
inlayHints = {
includeInlayParameterNameHints = "all",
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
includeInlayFunctionParameterTypeHints = true,
},
},
},
},
-- CSS intellisense
cssls = {},
-- Tailwind CSS support
tailwindcss = {
root_dir = function(...)
return require("lspconfig.util").root_pattern(".git")(...)
end,
},
-- HTML support
html = {},
},
},
},
}
π₯ Pro Tips:
- Mason auto-installs everything you need
- Inlay hints show parameter types (toggle with custom keymap later!)
- Root detection ensures proper project context
Create a Beautiful, Functional Interface
Create: lua/plugins/ui.lua
return {
-- Beautiful dashboard
{
"folke/snacks.nvim",
opts = {
dashboard = {
preset = {
header = [[
Your custom ASCII art here (keep it simple!)
Welcome back, developer! π
]],
},
},
},
},
-- Smart filename display
{
"b0o/incline.nvim",
dependencies = { "craftzdog/solarized-osaka.nvim" },
event = "BufReadPre",
config = function()
local colors = require("solarized-osaka.colors").setup()
require("incline").setup({
highlight = {
groups = {
InclineNormal = { guibg = colors.magenta500, guifg = colors.base04 },
InclineNormalNC = { guifg = colors.violet500, guibg = colors.base03 },
},
},
window = { margin = { vertical = 0, horizontal = 1 } },
render = function(props)
local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ":t")
if vim.bo[props.buf].modified then
filename = "[+] " .. filename
end
local icon, color = require("nvim-web-devicons").get_icon_color(filename)
return { { icon, guifg = color }, { " " }, { filename } }
end,
})
end,
},
-- Distraction-free coding
{
"folke/zen-mode.nvim",
cmd = "ZenMode",
keys = { { "<leader>z", "<cmd>ZenMode<cr>", desc = "Zen Mode" } },
opts = {
plugins = {
gitsigns = true,
tmux = true,
},
},
},
-- Clean buffer tabs
{
"akinsho/bufferline.nvim",
opts = {
options = {
mode = "tabs",
show_buffer_close_icons = false,
show_close_icon = false,
},
},
},
}
Essential Editor Tools for Daily Work
Create: lua/plugins/editor.lua
return {
-- See colors in your CSS files
{
"brenoprata10/nvim-highlight-colors",
event = "BufReadPre",
opts = {
render = "background",
enable_hex = true,
enable_short_hex = true,
enable_rgb = true,
enable_hsl = true,
enable_tailwind = true,
},
},
-- Git integration
{
"dinhhuy258/git.nvim",
event = "BufReadPre",
opts = {
keymaps = {
blame = "<Leader>gb", -- See who wrote this code
browse = "<Leader>go", -- Open on GitHub
},
},
},
-- Enhanced Telescope
{
"nvim-telescope/telescope.nvim",
dependencies = {
"nvim-telescope/telescope-fzf-native.nvim",
"nvim-telescope/telescope-file-browser.nvim",
},
keys = {
-- Your actual keymaps from config
{ ";f", function() require("telescope.builtin").find_files({ hidden = true }) end, desc = "Find Files" },
{ ";r", function() require("telescope.builtin").live_grep({ additional_args = { "--hidden" } }) end, desc = "Live Grep" },
{ "\\\\", function() require("telescope.builtin").buffers() end, desc = "Buffers" },
{ ";;", function() require("telescope.builtin").resume() end, desc = "Resume" },
},
},
-- Smart buffer management
{
"kazhala/close-buffers.nvim",
event = "VeryLazy",
keys = {
{ "<leader>th", function() require("close_buffers").delete({ type = "hidden" }) end, desc = "Close Hidden Buffers" },
{ "<leader>tu", function() require("close_buffers").delete({ type = "nameless" }) end, desc = "Close Nameless Buffers" },
},
},
}
Custom Power Tools (The Secret Sauce!) π₯·
The Cowboy Discipline System
Create: lua/insideee-dev/discipline.lua
local M = {}
function M.cowboy()
-- Prevent excessive use of hjkl and arrow keys
for _, key in ipairs({ "h", "j", "k", "l", "+", "-" }) do
local count = 0
local timer = assert(vim.uv.new_timer())
local map = key
vim.keymap.set("n", key, function()
if vim.v.count > 0 then
count = 0
end
if count >= 10 and vim.bo.buftype ~= "nofile" then
vim.notify("Hold it Cowboy! π€ ", vim.log.levels.WARN, {
icon = "π€ ",
id = "cowboy",
})
else
count = count + 1
timer:start(2000, 0, function()
count = 0
end)
return map
end
end, { expr = true, silent = true })
end
end
return M
π€ What This Does:
- Prevents you from spamming hjkl keys (builds better habits!)
- Encourages using proper Vim motions like
w
,b
,f
,t
- Shows a fun cowboy notification when you need to slow down
Smart File & Path Utilities
Create: lua/insideee-dev/utils.lua
local M = {}
-- Copy relative path of current file to clipboard
function M.copy_to_clipboard(has_current_line)
local current_file_name = vim.fn.expand("%")
local relative_path = vim.fn.fnamemodify(current_file_name, ":.")
if has_current_line then
relative_path = relative_path .. ":" .. vim.fn.line(".")
end
vim.fn.setreg("+", relative_path)
local message = has_current_line and "Copied with line: " or "Copied path: "
vim.notify(message .. relative_path, vim.log.levels.INFO)
end
-- Helper functions for table manipulation
function M.shallow_copy(t)
local copy = {}
for k, v in pairs(t) do
copy[k] = v
end
return copy
end
function M.shallow_merge(table_1st, table_2nd)
local result = M.shallow_copy(table_1st)
for k, v in pairs(table_2nd) do
result[k] = v
end
return result
end
return M
Color Conversion Magic
Add to your utils.lua
:
-- Convert hex colors to HSL (great for CSS work!)
function M.hex_to_HSL(hex)
-- Your existing color conversion functions here
local rgb = M.hex_to_rgb(hex)
local h, s, l = M.rgb_to_hsl(rgb[1], rgb[2], rgb[3])
return string.format("hsl(%d, %d%%, %d%%)", math.floor(h + 0.5), math.floor(s + 0.5), math.floor(l + 0.5))
end
function M.replace_hex_with_HSL()
local line_number = vim.api.nvim_win_get_cursor(0)[1]
local line_content = vim.api.nvim_buf_get_lines(0, line_number - 1, line_number, false)[1]
-- Find and replace hex codes
for hex in line_content:gmatch("#[0-9a-fA-F]+") do
local hsl = M.hex_to_HSL(hex)
line_content = line_content:gsub(hex, hsl)
end
vim.api.nvim_buf_set_lines(0, line_number - 1, line_number, false, { line_content })
end
π¨ Real-world use: Convert #3b82f6
to hsl(217, 91%, 60%)
instantly!
LSP Enhancement Helpers
Create: lua/insideee-dev/lsp.lua
local M = {}
function M.toggleInlayHints()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
end
return M
Wire Everything Up in Keymaps {#wire-up-keymaps}
Add to your lua/config/keymaps.lua
:
local discipline = require("insideee-dev.discipline")
local utils = require("insideee-dev.utils")
-- Enable cowboy discipline
discipline.cowboy()
-- File path utilities
keymap.set("n", "<Leader>yr", function()
utils.copy_to_clipboard()
end, { desc = "Copy relative path" })
keymap.set("n", "<Leader>yR", function()
utils.copy_to_clipboard(true)
end, { desc = "Copy path with line number" })
-- Color conversion magic
keymap.set("n", "<leader>r", function()
utils.replace_hex_with_HSL()
end, { desc = "Replace hex with HSL" })
-- LSP helpers
keymap.set("n", "<leader>i", function()
require("insideee-dev.lsp").toggleInlayHints()
end, { desc = "Toggle inlay hints" })
Pro Developer Workflows πͺ
Morning Setup Routine
Your daily startup sequence:
- Open project:
nvim
(see your custom dashboard!) - Recent files:
;f
β type project name - Search TODOs:
;r
β type "TODO" - Check git status:
<leader>gg
(if you have lazygit) - Review diagnostics:
<leader>xx
Debugging Like a Boss
When code breaks:
- Jump to error:
<C-j>
(next diagnostic) - Show details:
<leader>cd
(line diagnostics) - Quick fix:
<leader>ca
(code actions) - Restart LSP:
:LspRestart
if needed - Format code:
<leader>cf
(with Biome)
File Navigation Mastery
Become a navigation ninja:
-
]n
/[n
- Next/previous treesitter node (function, class, etc.) -
]d
/[d
- Next/previous diagnostic -
<C-j>
- Jump to next diagnostic (your custom keymap) -
<leader>1-6
- Jump to specific buffer -
sf
- Browse files in current directory -
;;
- Resume last telescope search
Keep It Fast: Performance Tips β‘
Your setup is already optimized, but here's why:
- Lazy Loading: Plugins load only when needed
-
Event-based Loading:
BufReadPre
,VeryLazy
, etc. - Minimal Startup: Essential plugins only
- Smart Defaults: Pre-configured for speed
Check your startup time:
nvim --startuptime startup.log
Profile plugins:
:Lazy profile
When Things Break: Troubleshooting Guide π§
LSP Not Working?
-
:Mason
- Check installed servers -
:LspInfo
- See attached servers -
:LspRestart
- Restart language server - Check project has
package.json
or.git
Completion Not Showing?
-
:Lazy sync
- Update plugins - Check Codeium is working:
:Codeium Auth
- Restart nvim completely
Telescope Errors?
- Install dependencies:
brew install ripgrep fd
-
:checkhealth telescope
- Check setup - Clear cache:
rm -rf ~/.local/share/nvim
Performance Issues?
-
:Lazy profile
- Find slow plugins - Disable unused TreeSitter parsers
- Check for plugin conflicts
Your Next Level Journey π
Congratulations! You're now a LazyVim Beast! π¦
You've mastered:
- β Production-ready plugin configuration
- β Custom utilities that save time daily
- β Professional developer workflows
- β Performance optimization
- β Troubleshooting skills
Keep growing:
- Explore language-specific plugins
- Create custom snippets for your projects
- Contribute to the LazyVim community
- Share your setup with other developers
Advanced topics to explore later:
- Custom plugin development
- Advanced Lua scripting
- Integration with external tools (Docker, databases)
- Team configuration management
You're ready to code like a superhero! Your LazyVim beast mode is fully activated! ππ₯
Happy coding, and may your bugs be few and your commits be clean! π€
My dotfiles configurations:
crafts69guy
/
.dotfiles
This repo leverages GNU Stow to simplify symlink management, making it easy to install and update configurations across different machines.
Warning: Donβt blindly use my settings unless you know what that entails. Use at your own risk!
π Contents
- Neovim β Custom plugins, keybindings, and themes
- Tmux β Optimized terminal workflow
- Git β Configuration for efficient version control
- Karabiner β Custom key mappings for Vim efficiency
- Fish Shell β Enhanced terminal experience
- GNU Stow β Simple dotfiles management
π Setting Up a New Machine with This Repo
This repository uses GNU Stow to manage dotfiles efficiently with symlinks. Follow these steps to set up your new machine:
1. Install Required Packages
Install Stow & Essential Tools
macOS:
brew install stow git fish tmux neovim
Linux (Debian/Ubuntu):
sudo apt update && sudo apt install stow git fish tmux neovim
Linux (Arch):
sudo pacman -S stow git fish tmux neovim
Install Fisher
A plugin manager for Fish
macOS:
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
Top comments (0)