Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .config/ghostty/config
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,11 @@ working-directory = "home"
# Shaders
custom-shader = ./shaders/cursor_smear.glsl
custom-shader = ./shaders/cursor_blaze_no_trail.glsl

keybind = cmd+ctrl+t=toggle_window_float_on_top

desktop-notifications = true
bell-features = system,attention
notify-on-command-finish = always
notify-on-command-finish-action = notify, bell
notify-on-command-finish-after = 0s
82 changes: 82 additions & 0 deletions .config/nvim/lua/debug-neotest-signs.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
-- Neotest Signs Diagnostic Script
-- Run this with :luafile ~/.config/nvim/lua/debug-neotest-signs.lua

local M = {}

function M.check_sign_definitions()
print("\n=== Neotest Sign Definitions ===")
local signs = { "neotest_passed", "neotest_failed", "neotest_running", "neotest_skipped" }
for _, sign_name in ipairs(signs) do
local sign_def = vim.fn.sign_getdefined(sign_name)
if sign_def and #sign_def > 0 then
print(string.format("✓ %s: text='%s', texthl='%s'", sign_name, sign_def[1].text or "", sign_def[1].texthl or ""))
else
print(string.format("✗ %s: NOT DEFINED", sign_name))
end
end
end

function M.check_signs_in_buffer()
print("\n=== Signs in Current Buffer ===")
local bufnr = vim.api.nvim_get_current_buf()
local signs = vim.fn.sign_getplaced(bufnr, { group = "*" })

if signs and #signs > 0 and signs[1].signs then
for _, sign in ipairs(signs[1].signs) do
print(string.format("Line %d: %s (priority: %s)", sign.lnum, sign.name, sign.priority or "default"))
end
else
print("No signs found in current buffer")
end
end

function M.check_neotest_status()
print("\n=== Neotest Status Configuration ===")
local ok, neotest = pcall(require, "neotest")
if not ok then
print("✗ Neotest not loaded")
return
end

local config = require("neotest.config")
print(string.format("Status signs enabled: %s", config.status.signs))
print(string.format("Status virtual_text enabled: %s", config.status.virtual_text))
print("\nConfigured icons:")
print(string.format(" passed: '%s'", config.icons.passed))
print(string.format(" failed: '%s'", config.icons.failed))
print(string.format(" running: '%s'", config.icons.running))
print(string.format(" skipped: '%s'", config.icons.skipped))
end

function M.check_highlight_groups()
print("\n=== Neotest Highlight Groups ===")
local groups = { "NeotestPassed", "NeotestFailed", "NeotestRunning", "NeotestSkipped" }
for _, group in ipairs(groups) do
local hl = vim.api.nvim_get_hl(0, { name = group, link = false })
if next(hl) then
print(string.format("✓ %s: defined", group))
else
print(string.format("✗ %s: NOT DEFINED", group))
end
end
end

function M.check_signcolumn()
print("\n=== Sign Column Configuration ===")
print(string.format("signcolumn: %s", vim.wo.signcolumn))
print(string.format("statuscolumn: %s", vim.o.statuscolumn))
end

function M.run_all()
M.check_signcolumn()
M.check_sign_definitions()
M.check_highlight_groups()
M.check_neotest_status()
M.check_signs_in_buffer()
print("\n=== Diagnostic Complete ===\n")
end

-- Auto-run if called directly
M.run_all()

return M
10 changes: 6 additions & 4 deletions .config/nvim/lua/plugins/appearance/alpha.lua
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,11 @@ local M = {
"⠀⠀⠀⠀⠀⠈⠻⠿⠿⠓⠄⠤⠘⠉⠙⠤⢀⠾⠿⣿⠟⠋ ",
}
dashboard.section.buttons.val = {
button(ctrl .. " f", "󰍉 Find files", ctrl, "<cmd>Telescope find_files<CR>"),
button(ldr .. " f", "󱎸 Live grep", ldr, "<cmd>Telescope live_grep_args<CR>"),
button(ldr .. " g b", " Git branches", ldr, "<cmd> Telescope git_branches<CR>"),
button(ctrl .. " f", "󰍉 Find files", ctrl, "<cmd>Seeker find_files<CR>"),
button(ldr .. " f", "󱎸 Live grep", ldr, "<cmd>Seeker grep<CR>"),
button(ldr .. " g b", " Git branches", ldr, function()
Snacks.picker.git_branches()
end),
button(ldr .. " d b", " Database connections", ldr, "<cmd>e ~/.local/share/db_ui/connections.json<CR>"),
button(ldr .. " q", "󰗼 Quit", ldr, "<cmd>qa<CR>"),
button("e", " New file", ldr, "<cmd>ene<CR>"),
Expand Down Expand Up @@ -107,7 +109,7 @@ local M = {
desc = "enable tabline after alpha",
callback = function()
vim.opt.showtabline = 2
-- vim.opt.statuscolumn = [[%!v:lua.Status.statuscolumn()]]
vim.opt.statuscolumn = [[%!v:lua.Status.statuscolumn()]]
end,
})
alpha.setup(dashboard.opts)
Expand Down
3 changes: 2 additions & 1 deletion .config/nvim/lua/plugins/appearance/colorscheme.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ local M = {
["gitsigns.nvim"] = true,
["lazy.nvim"] = true,
["noice.nvim"] = true,
["telescope.nvim"] = true,
-- ["telescope.nvim"] = true,
["snacks.nvim"] = true,
["hop.nvim"] = true,
["bufferline.nvim"] = true,
},
Expand Down
28 changes: 28 additions & 0 deletions .config/nvim/lua/plugins/appearance/lualine.lua
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,34 @@ local M = {
color = { fg = "#ffffff", gui = "bold" },
})
-- Add components to right sections
ins_right(require("codecompanion._extensions.spinner.styles.lualine").get_lualine_component())

-- CodeCompanion token count
ins_right({
function()
local bufnr = vim.api.nvim_get_current_buf()
if vim.bo[bufnr].filetype ~= "codecompanion" then
return ""
end

if not _G.codecompanion_chat_metadata then
return ""
end

local metadata = _G.codecompanion_chat_metadata[bufnr]
if not metadata then
return ""
end

if metadata.tokens and metadata.tokens > 0 then
return " " .. metadata.tokens
end

return ""
end,
color = { fg = colors.cyan, gui = "bold" },
})

ins_right({
"o:encoding", -- option component same as &encoding in viml
fmt = string.upper, -- I'm not sure why it's upper case either ;)
Expand Down
21 changes: 20 additions & 1 deletion .config/nvim/lua/plugins/appearance/status.lua
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
local M = {}
local M = {
{
"statuscol",
name = "statuscol",
dir = vim.fn.stdpath("config") .. "/lua",
lazy = false,
priority = 1000,
config = function()
-- Enable sign column
vim.opt.signcolumn = "yes"

-- Set up the custom statuscolumn
vim.opt.statuscolumn = [[%!v:lua.Status.statuscolumn()]]

-- Enable folding with treesitter
vim.opt.foldexpr = "v:lua.Status.foldexpr()"
vim.opt.foldtext = ""
end,
},
}

return M
46 changes: 43 additions & 3 deletions .config/nvim/lua/plugins/code/ai.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ local M = {
-- Installs `mcp-hub` node binary globally.
build = "npm install -g mcp-hub@4.2.0",
config = function()
require("mcphub").setup()
local mcphub = require("mcphub")

mcphub.setup({})
end,
},
{
Expand Down Expand Up @@ -43,7 +45,7 @@ local M = {
["file"] = {
-- Use Telescope as the provider for the /file command
opts = {
provider = "telescope", -- Can be "default", "telescope", "fzf_lua", "mini_pick" or "snacks"
provider = "snacks", -- Can be "default", "telescope", "fzf_lua", "mini_pick" or "snacks"
},
},
},
Expand Down Expand Up @@ -93,11 +95,49 @@ local M = {
},
},
spinner = {
style = "lualine",
opts = {
style = "lualine",
},
},
},
})
end,
init = function()
local function ghostty_notify(title, body)
-- Send OSC 9 escape sequence for Ghostty notification
-- Format: \033]9;title;body\007
local notification = string.format("\027]9;%s;%s\007", title, body or "")
io.write(notification)
io.flush()
end
local last_autocmd = {}

-- Helper to debounce notifications
local function should_notify(event_name)
local cur = os.time()
if not last_autocmd[event_name] or cur - last_autocmd[event_name] > 2 then
last_autocmd[event_name] = cur
return true
end
return false
end

vim.api.nvim_create_autocmd("User", {
pattern = { "CodeCompanionChatDone", "CodeCompanionRequestFinished", "CodeCompanionToolApprovalRequested" },
callback = function(args)
if should_notify(args.match) then
if args.match == "CodeCompanionChatDone" then
ghostty_notify("CodeCompanion", "Chat is ready for interaction")
elseif args.match == "CodeCompanionRequestFinished" then
ghostty_notify("CodeCompanion", "LLM has generated a response")
elseif args.match == "CodeCompanionToolApprovalRequested" then
local tool_name = args.data.tool.name or "Tool"
ghostty_notify("CodeCompanion", "Waiting for approval: " .. tool_name)
end
end
end,
})
end,
},
}

Expand Down
3 changes: 3 additions & 0 deletions .config/nvim/lua/plugins/code/conjure.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ local M = {
vim.g["conjure#eval#gsubs"] = { ["comment"] = { "^%(comment[%s%c]", "(do " } }
vim.g["conjure#client#clojure#nrepl#connection#auto_repl#cmd"] = "clj -M:repl/conjure"
vim.g["conjure#client#clojure#nrepl#eval#raw_out"] = true
vim.g["conjure#client#clojure#nrepl#test#raw_out"] = true
vim.g["conjure#client#clojure#nrepl#test#runner"] = "kaocha" --"clojure"
vim.g["conjure#client#clojure#nrepl#test#call_suffix"] = '{:config-file "tests.edn"}'
vim.g["conjure#client#clojure#nrepl#eval#print_function"] = "cider.nrepl.pprint/pprint"
-- vim.g["conjure#log#hud#open_when"] = "log-win-not-visible"
vim.g["conjure#filetype#fennel"] = "conjure.client.fennel.nfnl"
Expand Down
2 changes: 1 addition & 1 deletion .config/nvim/lua/plugins/code/diagnostics.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ local config = {
min = vim.diagnostic.severity.INFO,
},
severity_sort = true,
priority = 10,
priority = 50,
},
-- Enable lsp cursor word highlighting
document_highlight = {
Expand Down
Loading