16 Commits

Author SHA1 Message Date
143ca6b166 Added colorizer 2025-09-20 13:17:49 -04:00
f7f6dc35e1 Added devdocs keybind
Ctrl-X Ctrl-d
2025-09-19 14:37:38 -04:00
c12621a215 Working on completion engine 2025-09-19 14:09:35 -04:00
0b240bf871 Working on completion engine 2025-09-19 13:57:37 -04:00
e3a19d78b5 Adjusting fzf-lua init 2025-09-19 10:30:35 -04:00
239149d1d3 Added arduino-nvim 2025-09-18 21:38:21 -04:00
4af56857b4 Added arduino-nvim 2025-09-18 21:32:48 -04:00
d81ff48af0 Added arduino-nvim 2025-09-18 21:28:09 -04:00
f0cd5945e1 Updating cyberdream colorscheme 2025-09-17 13:54:10 -04:00
20165cfee1 Changing colorscheme to cyberdream 2025-09-17 13:21:09 -04:00
6d2ae4db0e Changing colorscheme to cyberdream 2025-09-17 13:07:01 -04:00
cc174a1ec8 removing noice for lack of @ messages 2025-09-15 13:18:29 -04:00
a9e3cd2d68 trying to fix @ messages 2025-09-15 13:15:31 -04:00
eba485e086 Added Zsh as shell and noice macro messages 2025-09-15 13:04:31 -04:00
6d181f0f4b Activated Noice 2025-09-14 13:23:08 -04:00
fcc084630a Adjusting COC 2025-09-14 01:38:21 -04:00
17 changed files with 55 additions and 932 deletions

3
.gitignore vendored
View File

@@ -1,3 +0,0 @@
nvim-pack-lock.json
.worktrees/
autoload/coc/source/codecompanion.vim

View File

@@ -1,26 +1,19 @@
local vim = vim
local host = vim.loop.os_gethostname()
obsidian_dir = "~/Documents/Notebooks"
require("options") -- ./lua/options.lua
require("remote_clipboard").setup() -- ./lua/remote_clipboard.lua
require("plugins") -- ./lua/plugins.lua
require("utils.t3_functions") -- ./lua/utils/t3_functions.lua
require("obsidian_config") -- ./lua/obsidian_config.lua
require("utils.t3_overrides") -- ./lua/utils/t3_overrides.lua
require("utils.reload") -- ./lua/utils/reload.lua
require("vimwiki") -- ./lua/vimwiki.lua
require("keymaps") -- ./lua/keymaps.lua
require("lsp") -- ./lua/lsp.lua
-- require("godot") -- ./lua/godot.lua
-- require("completion") -- ./lua/completion.lua
require("coc") -- ./lua/coc.lua
require("treesitter") -- ./lua/treesitter.lua
require("autocmds") -- ./lua/autocmds.lua
require("diagnostics") -- ./lua/diagnostics.lua
require("codecompanion_settings") -- ./lua/codecompanion_settings.lua
require("corridor_settings") -- ./lua/corridor_settings.lua
require('telescope_configuration') -- ./lua/telescope_configuration.lua
require("mail") -- ./lua/mail.lua (no-op unless NEOMUTT=1)
local function cyberdream()
require("cyberdream").setup({
@@ -39,7 +32,7 @@ local function cyberdream()
-- Set terminal colors used in `:terminal`
terminal_colors = true,
-- Improve start up time by caching highlights. Generate cache with :CyberdreamBuildCache and clear with :CyberdreamClearCache
cache = true,
cache = false,
-- Override highlight groups with your own colour values
-- highlights = {
-- -- Highlight groups to override, adding new groups is also possible
@@ -78,11 +71,6 @@ local function cyberdream()
notify = true,
mini = true,
treesitter = true,
whichkey = true,
treesittercontext = true,
markdown = true,
snacks = true,
trouble = true,
-- More extensions can be found in `lua/cyberdream/extensions/*.lua`
}
})
@@ -104,37 +92,6 @@ if host == "xps13" then
-- },
-- })
-- })
elseif host == "Intrepid" then
-- Uses the full Omarchy theme catalog instead of a fixed colorscheme;
-- see set_colorscheme()/VimEnter below for the actual hot-reload wiring.
-- require('tokyonight').setup({
-- style = "storm", -- "storm", "moon", "day", "night"
-- transparent = false, -- Enable transparent background
-- terminal_colors = true, -- Enable terminal colors
-- styles = {
-- comments = { italic = true }, -- Italic comments
-- keywords = { italic = true }, -- Italic keywords
-- functions = { bold = true }, -- Bold functions
-- variables = {}, -- No special style for variables
-- sidebars = "dark", -- Dark sidebars
-- floats = "dark", -- Dark floating windows
-- },
-- })
elseif host == "Vector" then
cyberdream()
-- require('tokyonight').setup({
-- style = "storm", -- "storm", "moon", "day", "night"
-- transparent = false, -- Enable transparent background
-- terminal_colors = true, -- Enable terminal colors
-- styles = {
-- comments = { italic = true }, -- Italic comments
-- keywords = { italic = true }, -- Italic keywords
-- functions = { bold = true }, -- Bold functions
-- variables = {}, -- No special style for variables
-- sidebars = "dark", -- Dark sidebars
-- floats = "dark", -- Dark floating windows
-- },
-- })
elseif host == "Titan" then
cyberdream()
-- require('tokyonight').setup({
@@ -166,9 +123,7 @@ end
local function set_colorscheme()
if want_truecolor() then
vim.o.termguicolors = true
if host == "Intrepid" then
require("omarchy_theme").setup()
elseif not pcall(vim.cmd.colorscheme, "cyberdream") then
if not pcall(vim.cmd.colorscheme, "cyberdream") then
pcall(vim.cmd.colorscheme, "habamax")
end
else
@@ -269,3 +224,4 @@ vim.api.nvim_create_autocmd("VimEnter", {
end
end,
})

View File

@@ -1,9 +0,0 @@
local vim = vim
local port = os.getenv 'GDScript_Port' or '6005'
local cmd = vim.lsp.rpc.connect('127.0.0.1', tonumber(port))
return {
cmd = cmd,
filetypes = { 'gd', 'gdscript', 'gdscript3' },
root_markers = { 'project.godot', '.git' }
}

View File

@@ -14,11 +14,9 @@ vim.g.coc_global_extensions = {
'coc-prettier',
'coc-eslint',
'coc-markdownlint',
'coc-vimlsp',
'coc-zig'
'coc-vimlsp'
}
-- Use <Tab> and <S-Tab> to navigate completion list
vim.keymap.set('i', '<Tab>', function()
if vim.fn['coc#pum#visible']() == 1 then

View File

@@ -1,89 +0,0 @@
local adapters = require("codecompanion.adapters")
require("codecompanion").setup({
adapters = {
http = {
bifrost = function()
return adapters.extend("openai_compatible", {
name = "bifrost",
formatted_name = "Bifrost",
env = {
url = vim.env.BIFROST_BASE_URL or "https://bifrost.th3r00t.net",
api_key = vim.env.BIFROST_API_KEY
and "BIFROST_API_KEY"
or "file:~/.config/bifrost/api-key",
chat_url = "/v1/chat/completions",
models_endpoint = "/v1/models",
},
schema = {
model = {
default = vim.env.CODECOMPANION_MODEL
or "OllamaMSI/qwen3:30b-a3b",
},
},
})
end,
},
},
interactions = {
chat = {
adapter = "bifrost",
},
inline = {
adapter = "bifrost",
},
background = {
adapter = "bifrost",
},
},
display = {
action_palette = {
provider = "snacks",
},
chat = {
window = {
layout = "vertical",
position = "right",
width = 0.42,
border = "rounded",
},
start_in_insert_mode = false,
show_token_count = true,
},
diff = {
enabled = true,
},
},
opts = {
log_level = "ERROR",
language = "English",
send_code = true,
},
})
local map = vim.keymap.set
map({ "n", "v" }, "<leader>aa", "<cmd>CodeCompanionActions<cr>", {
desc = "AI actions",
})
map("n", "<leader>ac", "<cmd>CodeCompanionChat Toggle<cr>", {
desc = "Toggle AI chat",
})
map("n", "<leader>an", "<cmd>CodeCompanionChat<cr>", {
desc = "New AI chat",
})
map({ "n", "v" }, "<leader>ai", "<cmd>CodeCompanion<cr>", {
desc = "AI inline prompt",
})
map({ "n", "v" }, "<leader>ab", "<cmd>CodeCompanionChat Add<cr>", {
desc = "Add buffer/selection to AI chat",
})
local which_key = require("which-key")
which_key.add({
{ "<leader>a", group = "AI" },
{ "<leader>aa", desc = "Actions" },
{ "<leader>ab", desc = "Add buffer/selection" },
{ "<leader>ac", desc = "Toggle chat" },
{ "<leader>ai", desc = "Inline prompt" },
{ "<leader>an", desc = "New chat" },
})

View File

@@ -1,47 +0,0 @@
local bifrost_endpoint = vim.env.BIFROST_COMPLETIONS_URL
or "https://bifrost.th3r00t.net/v1/completions"
local key_path = vim.fn.expand("~/.config/bifrost/api-key")
local key_file = io.open(key_path, "r")
local bifrost_api_key = key_file and vim.trim(key_file:read("*a")) or nil
if key_file then
key_file:close()
end
require("corridor").setup({
enabled = true,
provider = "lmstudio", -- OpenAI-compatible completions (Bifrost)
endpoint = bifrost_endpoint,
model = vim.env.CORRIDOR_MODEL or "OllamaMSI/qwen2.5-coder:7b",
api_key = vim.env.BIFROST_API_KEY or bifrost_api_key,
debounce_ms = 400,
max_tokens = 64,
temperature = 0.1,
-- CoC owns <Tab>; keep Corridor's mappings out of its way.
accept_keymap = "<C-l>",
dismiss_keymap = "<C-h>",
max_context_lines = 256,
cross_file_context = true,
max_cross_file_lines = 100,
max_cross_file_count = 5,
exclude_filetypes = {
"Avante",
"TelescopePrompt",
"help",
"lazy",
"mason",
"neo-tree",
"snacks_picker_input",
"terminal",
},
-- qwen2.5-coder FIM token order.
fim = {
prefix = "<|fim_prefix|>",
suffix = "<|fim_suffix|>",
middle = "<|fim_middle|>",
},
})

View File

@@ -1,18 +0,0 @@
local vim = vim
local paths_to_check = {'/', '/../'}
local is_godot_project = false
local godot_project_path = ''
local cwd = vim.fn.getcwd()
for key, value in pairs(paths_to_check) do
if vim.uv.fs_stat(cwd .. value .. 'project.godot') then
is_godot_project = true
godot_project_path = cwd .. value
break
end
end
local is_server_running = vim.uv.fs_stat(godot_project_path .. '/server.pipe')
if is_godot_project and not is_server_running then
vim.fn.serverstart(godot_project_path .. '/server.pipe')
end

View File

@@ -12,8 +12,8 @@ end, { noremap = true })
-- Leader Maps
vim.keymap.set("n", "<leader>f", "", { desc = "Files"})
-- vim.keymap.set("n", "<leader>ff", ":FzfLua files<CR>", { desc = "File Finder"})
vim.keymap.set("n", "<leader>ff", ":Pick files<CR>", { desc = "File Picker"})
vim.keymap.set("n", "<leader>ff", ":FzfLua files<CR>", { desc = "File Finder"})
-- vim.keymap.set("n", "<leader>fe", ":Pick files<CR>", { desc = "File Picker"})
vim.keymap.set("n", "<leader>ft", t3_toggle_netrw, { desc = "File Tree"})
vim.keymap.set("n", "<leader>b", "", { desc = "Buffers"})
@@ -158,38 +158,3 @@ vim.keymap.set( "n", "<leader>ltd", ":Telescope lsp_dynamic_workspace_symbols<CR
vim.keymap.set( "n", "<C-]>", "<cmd>lua vim.lsp.buf.definition()<cr>", {desc = "Go to Definition" })
vim.keymap.set( "n", "<C-t>", "<C-o>", {desc = "Jump Back" })
vim.keymap.set( "n", "g]", "<cmd>lua vim.lsp.buf.references()<cr>", {desc = "Find References" })
-- Top Pickers & Explorer
vim.keymap.set("n", "<leader><space>", ":lua Snacks.picker.smart()<cr>", { desc = "Smart Find Files" })
vim.keymap.set("n", "<leader>/", ":lua Snacks.picker.grep()<cr>", { desc = "Grep" })
vim.keymap.set("n", "<leader>:", ":lua Snacks.picker.command_history()<cr>", { desc = "Command History" })
vim.keymap.set("n", "<leader>n", ":lua Snacks.picker.notifications()<cr>", { desc = "Notification History" })
-- vim.keymap.set("n", "<leader>e", ":lua Snacks.explorer()<cr>", { desc = "File Explorer" })
vim.keymap.set("n", "<leader>e", ":Lexplore<cr>", { desc = "File Explorer" })
vim.keymap.set("n", "<leader>fb", ":lua Snacks.picker.buffers()<cr>", { desc = "Buffers" })
vim.keymap.set("n", "<leader>ff", ":lua Snacks.picker.files()<cr>", { desc = "Find Files" })
vim.keymap.set("n", "<leader>fg", ":lua Snacks.picker.git_files()<cr>", { desc = "Find Git Files" })
vim.keymap.set("n", "<leader>fp", ":lua Snacks.picker.projects()<cr>", { desc = "Projects" })
vim.keymap.set("n", "<leader>fr", ":lua Snacks.picker.recent()<cr>", { desc = "Recent" })
vim.keymap.set("n", "<leader>Gb", ":lua Snacks.picker.git_branches()<cr>", { desc = "Git Branches" })
vim.keymap.set("n", "<leader>Gl", ":lua Snacks.picker.git_log()<cr>", { desc = "Git Log" })
vim.keymap.set("n", "<leader>GL", ":lua Snacks.picker.git_log_line()<cr>", { desc = "Git Log Line" })
vim.keymap.set("n", "<leader>Gs", ":lua Snacks.picker.git_status()<cr>", { desc = "Git Status" })
vim.keymap.set("n", "<leader>GS", ":lua Snacks.picker.git_stash()<cr>", { desc = "Git Stash" })
vim.keymap.set("n", "<leader>Gd", ":lua Snacks.picker.git_diff()<cr>", { desc = "Git Diff (Hunks)" })
vim.keymap.set("n", "<leader>Gf", ":lua Snacks.picker.git_log_file()<cr>", { desc = "Git Log File" })
vim.keymap.set("n", "<leader>sb", ":lua Snacks.picker.buffers()<cr>", { desc = "Buffers" })
vim.keymap.set("n", "<leader>ss", ":lua Snacks.picker.smart()<cr>", { desc = "Smart Find Files" })
vim.keymap.set("n", "<leader>sp", ":lua Snacks.picker.projects()<cr>", { desc = "Projects" })
vim.keymap.set("n", "<leader>sr", ":lua Snacks.picker.recent()<cr>", { desc = "Recent" })
vim.keymap.set("n", "<leader>sw", ":lua Snacks.picker.words()<cr>", { desc = "Next Reference" })
vim.keymap.set("n", "<leader>sw", ":lua Snacks.words.jump(vim.v.count1)<cr>", { desc = "Next Reference" })
vim.keymap.set("n", "<leader>sw", ":lua Snacks.words.jump(-vim.v.count1)<cr>", { desc = "Prev Reference" })
-- Terminal
-- vim.keymap.set("n", "<c-/>", ":lua Snacks.terminal()<cr>", { desc = "Toggle Terminal" })
-- vim.keymap.set("n", "<c-_>", ":lua Snacks.terminal()<cr>", { desc = "which_key_ignore" })
-- Words Jump
vim.keymap.set("n", "]]", ":lua Snacks.words.jump(vim.v.count1)<cr>", { desc = "Next Reference", })
vim.keymap.set("n", "[[", ":lua Snacks.words.jump(-vim.v.count1)<cr>", { desc = "Prev Reference", })

View File

@@ -40,9 +40,6 @@ vim.lsp.enable('basedpyright', {
}
})
-- vim.lsp.config('gdscript', {})
-- vim.lsp.enable('gdscript')
require("lsp_signature").setup({
debug = false,
@@ -54,7 +51,7 @@ require("lsp_signature").setup({
floating_window = true,
floating_window_above_cur_line = false,
floating_window_off_x = 1,
floating_window_off_y = 2,
floating_window_off_y = 1,
-- hint_enable = true,
hint_enable = false,
hint_inline = function() return false end,

View File

@@ -1,155 +0,0 @@
-- Mail compose mode: NeoMutt + nvim-mail integration.
-- Activates ONLY when the NEOMUTT environment variable is set.
-- In neomuttrc: set editor = "env NEOMUTT=1 nvim"
--
-- Notmuch: optional indexed search only via <leader>mn. Never initialised or synced.
-- mbsync: never invoked.
local M = {}
-- Exact-match guard: only "1" activates mail mode.
-- Any other value (empty, "yes", "true") leaves this module dormant.
local function in_neomutt()
return vim.env.NEOMUTT == "1"
end
if not in_neomutt() then
return M
end
-- === NeoMutt session active ===
local function is_tty()
return vim.env.TERM == "linux"
end
-- Configure nvim-mail (idempotent: the plugin guards with _configured flag).
local ok_mail, mail_plugin = pcall(require, "nvim-mail")
if ok_mail then
mail_plugin.setup({
prefix = ",m",
spell_langs = { "en" },
from_list = {},
send_accounts = {},
contacts = { cmd = "khard", args = { "email", "-p", "--remove-first-line" } },
snippets = nil,
})
end
-- FileType autocmd: 72-column compose formatting + quote-depth highlighting.
-- nvim-mail's attach_buffer() handles spell, wrap, marker extmarks, and
-- BufWritePre guardrails (empty To/Subject, attachment mention check).
local au = vim.api.nvim_create_augroup("NeoMuttMail", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
group = au,
pattern = "mail",
callback = function()
vim.opt_local.textwidth = 72
vim.opt_local.formatoptions = "tcqwan"
vim.opt_local.wrap = true
vim.opt_local.linebreak = true
vim.opt_local.spell = true
vim.opt_local.spelllang = "en"
-- colorcolumn is meaningful only outside TTY (linux console ignores it)
if not is_tty() then
vim.opt_local.colorcolumn = "73"
end
-- Quote-depth colouring: works with both cterm (TTY) and gui colours
vim.cmd([[
hi def MailQuoted1 ctermfg=6 guifg=#61afef
hi def MailQuoted2 ctermfg=2 guifg=#98c379
hi def MailQuoted3 ctermfg=3 guifg=#e5c07b
syn match MailQuoted3 /^>>>\+.*$/
syn match MailQuoted2 /^>>[^>].*$\|^>>$/
syn match MailQuoted1 /^>[^>].*$\|^>$/
]])
end,
})
-- <leader>m group: mail compose actions (supplement to nvim-mail's ,m prefix).
-- Descriptions are plain ASCII so they render correctly in TTY via which-key.
local km = function(lhs, rhs, desc)
vim.keymap.set("n", lhs, rhs, { desc = desc })
end
km("<leader>m", "", "Mail")
-- NeoMutt's Neovim Lua runtime may be LuaJIT/Lua 5.1, which exposes only global unpack.
local unpack_args = table.unpack or unpack
-- Safe wrapper: pcall so the keymap degrades gracefully if plugin not yet downloaded.
local function nav(fn, ...)
local args = { ... }
local ok, nav_mod = pcall(require, "nvim-mail.navigate")
if ok then nav_mod[fn](unpack_args(args)) end
end
km("<leader>mt", function() nav("goto_field", "^[Tt]o:", "A") end, "Mail: To:")
km("<leader>mc", function() nav("goto_field", "^[Cc]c:", "A") end, "Mail: Cc:")
km("<leader>mf", function() nav("goto_field", "^[Ff]rom:", "A") end, "Mail: From:")
km("<leader>ms", function() nav("goto_field", "^[Ss]ubject:", "A") end, "Mail: Subject:")
km("<leader>mb", function() nav("goto_body") end, "Mail: Body")
km("<leader>mS", function() nav("goto_signature") end, "Mail: Signature")
km("<leader>mr", function() nav("goto_reply") end, "Mail: Quoted reply")
km("<leader>me", function() nav("goto_end_of_reply") end, "Mail: End of reply")
km("<leader>mk", function() nav("kill_quoted_sig") end, "Mail: Kill quoted sig")
-- Attachment guardrail: on-demand explicit check (BufWritePre also fires automatically)
km("<leader>ma", function()
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
local ok_att, att = pcall(require, "nvim-mail.attachment")
if not ok_att then
vim.notify("[mail] nvim-mail.attachment unavailable", vim.log.levels.ERROR)
return
end
local missing, match = att.check(lines)
if missing then
vim.notify(
string.format('[mail] Attachment mentioned ("%s") but no file attached!', match or "attach"),
vim.log.levels.WARN
)
else
vim.notify("[mail] Attachment check: OK", vim.log.levels.INFO)
end
end, "Mail: Attachment check")
-- Header reminder: warn if To: or Subject: are empty
km("<leader>mR", function()
local lines = vim.api.nvim_buf_get_lines(0, 0, 20, false)
local to, subj = false, false
for _, l in ipairs(lines) do
if l == "" then break end
if l:match("^[Tt]o:%s*.+") then to = true end
if l:match("^[Ss]ubject:%s*.+") then subj = true end
end
local issues = {}
if not to then issues[#issues + 1] = "To: is empty" end
if not subj then issues[#issues + 1] = "Subject: is empty" end
if #issues == 0 then
vim.notify("[mail] Headers OK", vim.log.levels.INFO)
else
vim.notify("[mail] " .. table.concat(issues, " | "), vim.log.levels.WARN)
end
end, "Mail: Header reminder")
-- Notmuch: optional indexed search only. Never initialised, never synced.
-- Opens results in a scratch buffer; does not touch the notmuch database.
km("<leader>mn", function()
if vim.fn.executable("notmuch") == 0 then
vim.notify("[mail] notmuch not available (optional dependency)", vim.log.levels.WARN)
return
end
vim.ui.input({ prompt = "Notmuch search: " }, function(query)
if not query or query == "" then return end
local result = vim.fn.systemlist({ "notmuch", "search", "--output=summary", query })
vim.cmd("new")
vim.api.nvim_buf_set_lines(0, 0, -1, false, result)
vim.bo.buftype = "nofile"
vim.bo.bufhidden = "wipe"
vim.bo.modifiable = false
vim.bo.swapfile = false
pcall(vim.api.nvim_buf_set_name, 0, "Notmuch: " .. query)
end)
end, "Mail: Notmuch search")
return M

View File

@@ -1,8 +0,0 @@
require("obsidian").setup({
workspaces = {
{
name = "Notebooks",
path = obsidian_dir,
},
},
})

View File

@@ -1,109 +0,0 @@
-- Full Omarchy theme-catalog hot-reload, for hosts that want Neovim to track
-- the system theme (`omarchy-theme-set`) instead of a fixed colorscheme.
--
-- Omarchy's default LazyVim config gets this for free from lazy.nvim's file
-- watcher + a symlinked plugin spec (lua/plugins/theme.lua ->
-- ~/.local/state/omarchy/current/theme/neovim.lua). This config doesn't run
-- lazy.nvim, so instead: read that same generated spec file directly (it's
-- the authoritative theme-name -> colorscheme mapping Omarchy maintains) and
-- watch the state directory ourselves with vim.uv.
local M = {}
local state_dir = vim.fn.expand("~/.local/state/omarchy/current")
local theme_spec_file = state_dir .. "/theme/neovim.lua"
local transparent_groups = {
"Normal", "NormalFloat", "FloatBorder", "Pmenu", "Terminal", "EndOfBuffer",
"FoldColumn", "Folded", "SignColumn", "LineNr", "CursorLineNr", "NormalNC",
"WhichKeyFloat", "TelescopeBorder", "TelescopeNormal", "TelescopePromptBorder",
"TelescopePromptTitle", "NvimTreeNormal", "NvimTreeVertSplit", "NvimTreeEndOfBuffer",
"NotifyINFOBody", "NotifyERRORBody", "NotifyWARNBody", "NotifyTRACEBody", "NotifyDEBUGBody",
"NotifyINFOTitle", "NotifyERRORTitle", "NotifyWARNTitle", "NotifyTRACETitle", "NotifyDEBUGTitle",
"NotifyINFOBorder", "NotifyERRORBorder", "NotifyWARNBorder", "NotifyTRACEBorder", "NotifyDEBUGBorder",
}
local function apply_transparency()
for _, name in ipairs(transparent_groups) do
local ok, hl = pcall(vim.api.nvim_get_hl, 0, { name = name, link = false })
if ok then
hl.bg = nil
vim.api.nvim_set_hl(0, name, hl)
end
end
end
-- Pull the colorscheme name out of Omarchy's generated theme spec, e.g.:
-- return {
-- { "folke/tokyonight.nvim", priority = 1000 },
-- { "LazyVim/LazyVim", opts = { colorscheme = "tokyonight-night" } },
-- }
local function read_colorscheme()
local chunk, err = loadfile(theme_spec_file)
if not chunk then
vim.notify("omarchy_theme: " .. tostring(err), vim.log.levels.WARN)
return nil
end
local ok, spec = pcall(chunk)
if not ok or type(spec) ~= "table" then
return nil
end
for _, entry in ipairs(spec) do
if entry[1] == "LazyVim/LazyVim" and entry.opts and entry.opts.colorscheme then
return entry.opts.colorscheme
end
end
end
function M.reload()
local colorscheme = read_colorscheme()
if not colorscheme then
return
end
vim.o.background = "dark"
vim.cmd("highlight clear")
if vim.fn.exists("syntax_on") == 1 then
vim.cmd("syntax reset")
end
if not pcall(vim.cmd.colorscheme, colorscheme) then
vim.notify("omarchy_theme: colorscheme '" .. colorscheme .. "' not found", vim.log.levels.WARN)
return
end
apply_transparency()
vim.cmd("redraw!")
end
local watching = false
-- `omarchy-theme-set` swaps the whole `current/theme` directory (rm -rf +
-- mv), so re-arm the watch after every fire or it goes stale once the old
-- inode is gone.
local function watch()
if watching then
return
end
watching = true
local handle = vim.uv.new_fs_event()
local function start()
handle:start(state_dir, {}, vim.schedule_wrap(function()
handle:stop()
vim.defer_fn(function()
M.reload()
start()
end, 150)
end))
end
start()
end
function M.setup()
M.reload()
watch()
end
return M

View File

@@ -15,8 +15,7 @@ vim.o.termguicolors = true
vim.o.winborder = "rounded"
vim.o.clipboard = "unnamedplus"
vim.o.completeopt = "menuone"
vim.o.shell = "/usr/bin/env fish"
-- vim.o.shell = "/usr/bin/env zsh"
vim.o.shell = "/usr/bin/env zsh"
-- vim.o.completeopt = "menuone,noinsert,noselect"
vim.o.cursorline = true

View File

@@ -1,32 +1,7 @@
local vim = vim
local host = vim.loop.os_gethostname()
-- Omarchy's full colorscheme catalog (mirrors omarchy-nvim's all-themes.lua),
-- only installed on hosts that hot-reload through lua/omarchy_theme.lua.
local omarchy_theme_plugins = {
{ src = "https://github.com/ribru17/bamboo.nvim" },
{ src = "https://github.com/bjarneo/aether.nvim", version = "v3", name = "aether" },
{ src = "https://github.com/bjarneo/ethereal.nvim" },
{ src = "https://github.com/bjarneo/hackerman.nvim" },
{ src = "https://github.com/bjarneo/vantablack.nvim" },
{ src = "https://github.com/bjarneo/white.nvim" },
{ src = "https://github.com/catppuccin/nvim", name = "catppuccin" },
{ src = "https://github.com/neanias/everforest-nvim" },
{ src = "https://github.com/kepano/flexoki-neovim" },
{ src = "https://github.com/ellisonleao/gruvbox.nvim" },
{ src = "https://github.com/rebelot/kanagawa.nvim" },
{ src = "https://github.com/tahayvr/matteblack.nvim" },
{ src = "https://github.com/gthelding/monokai-pro.nvim" },
{ src = "https://github.com/EdenEast/nightfox.nvim" },
{ src = "https://github.com/rose-pine/neovim", name = "rose-pine" },
{ src = "https://github.com/ficcdaf/ashen.nvim" },
{ src = "https://github.com/folke/tokyonight.nvim" },
{ src = "https://github.com/OldJobobo/miasma.nvim" },
{ src = "https://github.com/OldJobobo/retro-82.nvim" },
{ src = "https://github.com/omacom-io/lumon.nvim" },
}
local plugin_specs = {
vim.pack.add({
-- { src = "https://github.com/folke/tokyonight.nvim" },
{ src = "https://github.com/scottmckendry/cyberdream.nvim" },
{ src = "https://github.com/nvim-tree/nvim-web-devicons" },
@@ -53,8 +28,7 @@ local plugin_specs = {
-- { src = "https://github.com/hrsh7th/cmp-cmdline" },
-- { src = "https://github.com/hrsh7th/cmp-nvim-lua" },
-- { src = "https://github.com/saadparwaiz1/cmp_luasnip" },
-- { src = "https://github.com/github/copilot.vim" },
-- { src = "https://github.com/jacob411/Ollama-Copilot" },
{ src = "https://github.com/github/copilot.vim" },
{ src = "https://github.com/pysan3/pathlib.nvim" },
{ src = "https://github.com/nvim-orgmode/org-bullets.nvim" },
{ src = "https://github.com/lukas-reineke/headlines.nvim" },
@@ -86,25 +60,14 @@ local plugin_specs = {
{ src = "https://github.com/francoiscabrol/ranger.vim" },
{ src = "https://github.com/folke/snacks.nvim" },
{ src = "https://github.com/coder/claudecode.nvim" },
{ src = "https://github.com/olimorris/codecompanion.nvim" },
{ src = "https://github.com/orellazri/corridor.nvim" },
{ src = "https://github.com/yetone/avante.nvim" },
{ src = "https://github.com/alaviss/nim.nvim" },
{ src = "https://github.com/glebzlat/arduino-nvim" },
{ src = "https://github.com/norcalli/nvim-colorizer.lua" },
-- { src = "https://github.com/HiPhish/rainbow-delimiters.nvim" },
{ src = "https://github.com/lewis6991/gitsigns.nvim" },
{ src = "https://github.com/amitds1997/remote-nvim.nvim" },
{ src = "https://github.com/epwalsh/obsidian.nvim" },
{ src = "https://github.com/monkeyxite/nvim-mail", version = "03b9d7d1eea8e6a06cd7f3e477e17f164d267ea5" },
}
})
if host == "Intrepid" then
for _, spec in ipairs(omarchy_theme_plugins) do
table.insert(plugin_specs, spec)
if host == "xps13" then
end
end
vim.pack.add(plugin_specs)
require('mini.icons').setup({})
require('mini.pick').setup({})
@@ -116,17 +79,6 @@ require('mini.tabline').setup({})
require('mini.fuzzy').setup({})
-- require('lualine').setup({ options = { theme = 'tokyonight' } })
require('which-key').setup({})
require("snacks").setup({
explorer = { enabled = true },
image = { enabled = true },
input = { enabled = true },
picker = { enabled = true },
scope = { enabled = true },
notifier = { enabled = true },
quickfile = { enabled = true },
scroll = { enabled = true },
statuscolumn = { enabled = true },
})
require('fzf-lua').setup({
winopts = {
height = 0.85,
@@ -250,6 +202,35 @@ require('nvim-devdocs').setup({})
-- },
-- })
require("claudecode").setup({})
require('avante').setup({
opts = {
-- add any opts here
-- this file can contain specific instructions for your project
instructions_file = "avante.md",
-- for example
provider = "copilot",
providers = {
-- claude = {
-- endpoint = "https://api.anthropic.com",
-- model = "claude-sonnet-4-20250514",
-- timeout = 30000, -- Timeout in milliseconds
-- extra_request_body = {
-- temperature = 0.75,
-- max_tokens = 20480,
-- },
-- },
-- moonshot = {
-- endpoint = "https://api.moonshot.ai/v1",
-- model = "kimi-k2-0711-preview",
-- timeout = 30000, -- Timeout in milliseconds
-- extra_request_body = {
-- temperature = 0.75,
-- max_tokens = 32768,
-- },
-- },
}
}
})
require('arduino-nvim').setup({
default_fqbn = "esp32:esp32:esp32",
@@ -268,191 +249,3 @@ require('colorizer').setup({
css_fn = true,
mode = 'background',
})
require('gitsigns').setup({
signs = {
add = { text = '' },
change = { text = '' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
untracked = { text = '' },
},
signs_staged = {
add = { text = '' },
change = { text = '' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
untracked = { text = '' },
},
signs_staged_enable = true,
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
watch_gitdir = {
follow_files = true
},
auto_attach = true,
attach_to_untracked = false,
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
current_line_blame_opts = {
virt_text = true,
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
delay = 1000,
ignore_whitespace = false,
virt_text_priority = 100,
use_focus = true,
},
current_line_blame_formatter = '<author>, <author_time:%R> - <summary>',
sign_priority = 6,
update_debounce = 100,
status_formatter = nil, -- Use default
max_file_length = 40000, -- Disable if file is longer than this (in lines)
preview_config = {
-- Options passed to nvim_open_win
style = 'minimal',
relative = 'cursor',
row = 0,
col = 1
},
})
require("remote-nvim").setup({
-- Configuration for devpod connections
devpod = {
binary = "devpod", -- Binary to use for devpod
docker_binary = "docker", -- Binary to use for docker-related commands
---@diagnostic disable-next-line:param-type-mismatch
-- ssh_config_path = utils.path_join(utils.is_windows, vim.fn.stdpath("data"), constants.PLUGIN_NAME, "ssh_config"), -- Path where devpod SSH configurations should be stored
search_style = "current_dir_only", -- How should devcontainers be searched
-- For dotfiles, see https://devpod.sh/docs/developing-in-workspaces/dotfiles-in-a-workspace for more information
dotfiles = {
path = nil, -- Path to your dotfiles which should be copied into devcontainers
install_script = nil -- Install script that should be called to install your dotfiles
},
gpg_agent_forwarding = false, -- Should GPG agent be forwarded over the network
container_list = "running_only", -- How should docker list containers ("running_only" or "all")
},
-- Configuration for SSH connections
ssh_config = {
ssh_binary = "ssh", -- Binary to use for running SSH command
scp_binary = "scp", -- Binary to use for running SSH copy commands
ssh_config_file_paths = { "$HOME/.ssh/config" }, -- Which files should be considered to contain the ssh host configurations. NOTE: `Include` is respected in the provided files.
-- These are useful for password-based SSH authentication.
-- It provides parsing pattern for the plugin to detect that an input is requested.
-- Each element contains the following attributes:
-- match - The string to match (plain matching is done)
-- type - Supports two values "plain"|"secret". Secret means when you provide the value, it should not be stored in the completion history of Neovim.
-- value - Default value for the prompt
-- value_type - "static"|"dynamic". For things like password, it would be needed for each new connection that the plugin initiates which could be obtrusive.
-- So, we save the value (only for current session's interval) to ease the process. If set to "dynamic", we do not save the value even for the session. You have to provide a fresh value each time.
ssh_prompts = {
{
match = "password:",
type = "secret",
value_type = "static",
value = "",
},
{
match = "continue connecting (yes/no/[fingerprint])?",
type = "plain",
value_type = "static",
value = "",
},
-- There are other values here which can be checked in lua/remote-nvim/init.lua
},
},
-- Path to the script that would be copied to the remote and called to ensure that neovim gets installed.
-- Default path is to the plugin's own ./scripts/neovim_install.sh file.
-- neovim_install_script_path = utils.path_join(
-- utils.is_windows,
-- vim.fn.fnamemodify(debug.getinfo(1).source:sub(2), ":h:h:h"),
-- "scripts",
-- "neovim_install.sh"
-- ),
-- Modify the UI for the plugin's progress viewer.
-- type can be "split" or "popup". All options from https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/popup and https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/split are supported.
-- Note that some options like "border" are only available for "popup".
progress_view = {
type = "popup",
},
-- Offline mode configuration. For more details, see the "Offline mode" section below.
offline_mode = {
-- Should offline mode be enabled?
enabled = false,
-- Do not connect to GitHub at all. Not even to get release information.
no_github = false,
-- What path should be looked at to find locally available releases
-- cache_dir = utils.path_join(utils.is_windows, vim.fn.stdpath("cache"), constants.PLUGIN_NAME, "version_cache"),
},
-- Remote configuration
remote = {
app_name = "nvim", -- This directly maps to the value NVIM_APPNAME. If you use any other paths for configuration, also make sure to set this.
-- List of directories that should be copied over
copy_dirs = {
-- What to copy to remote's Neovim config directory
config = {
base = vim.fn.stdpath("config"), -- Path from where data has to be copied
dirs = "*", -- Directories that should be copied over. "*" means all directories. To specify a subset, use a list like {"lazy", "mason"} where "lazy", "mason" are subdirectories
-- under path specified in `base`.
compression = {
enabled = false, -- Should compression be enabled or not
additional_opts = {} -- Any additional options that should be used for compression. Any argument that is passed to `tar` (for compression) can be passed here as separate elements.
},
},
-- What to copy to remote's Neovim data directory
data = {
base = vim.fn.stdpath("data"),
dirs = {},
compression = {
enabled = true,
},
},
-- What to copy to remote's Neovim cache directory
cache = {
base = vim.fn.stdpath("cache"),
dirs = {},
compression = {
enabled = true,
},
},
-- What to copy to remote's Neovim state directory
state = {
base = vim.fn.stdpath("state"),
dirs = {},
compression = {
enabled = true,
},
},
},
},
-- You can supply your own callback that should be called to create the local client. This is the default implementation.
-- Two arguments are passed to the callback:
-- port: Local port at which the remote server is available
-- workspace_config: Workspace configuration for the host. For all the properties available, see https://github.com/amitds1997/remote-nvim.nvim/blob/main/lua/remote-nvim/providers/provider.lua#L4
-- A sample implementation using WezTerm tab is at: https://github.com/amitds1997/remote-nvim.nvim/wiki/Configuration-recipes
client_callback = function(port, _)
require("remote-nvim.ui").float_term(("nvim --server localhost:%s --remote-ui"):format(port), function(exit_code)
if exit_code ~= 0 then
vim.notify(("Local client failed with exit code %s"):format(exit_code), vim.log.levels.ERROR)
end
end)
end,
-- Plugin log related configuration [PREFER NOT TO CHANGE THIS]
log = {
-- Where is the log file
-- filepath = utils.path_join(utils.is_windows, vim.fn.stdpath("state"), ("%s.log"):format(constants.PLUGIN_NAME)),
-- Level of logging
level = "info",
-- At what size, should we truncate the logs
max_size = 1024 * 1024 * 2, -- 2MB
},
})

View File

@@ -1,100 +0,0 @@
-- Clipboard for sessions whose yanks may need to reach another machine:
-- every copy is emitted as OSC 52 (inside tmux this becomes a tmux buffer,
-- rebroadcast to every attached client, local or SSH). Paste prefers the
-- local Wayland clipboard when one is available, so content copied in other
-- apps remains pasteable; without a display, paste is an OSC 52 query that
-- tmux (or the terminal) answers.
--
-- Ported from Omarchy's default nvim config (config/remote_clipboard.lua) so
-- this config keeps working over SSH/tmux the same way Omarchy's does.
local M = {}
local function proc_lines(pid, file)
local ok, lines = pcall(vim.fn.readfile, "/proc/" .. pid .. "/" .. file)
return ok and lines or {}
end
local function proc_ppid(pid)
for _, line in ipairs(proc_lines(pid, "status")) do
local ppid = line:match("^PPid:%s+(%d+)")
if ppid then
return tonumber(ppid)
end
end
end
local function ancestor_process_named(name)
local pid = vim.fn.getpid()
for _ = 1, 16 do
local ppid = proc_ppid(pid)
if not ppid or ppid <= 1 then
return false
end
local comm = proc_lines(ppid, "comm")[1] or ""
if comm:find(name, 1, true) then
return true
end
pid = ppid
end
return false
end
function M.setup()
local in_tmux = vim.env.TMUX ~= nil
local in_ssh = vim.env.SSH_TTY ~= nil or vim.env.SSH_CONNECTION ~= nil
local in_herdr = vim.env.HERDR_PANE_ID ~= nil or ancestor_process_named("herdr")
if not (in_tmux or in_ssh or in_herdr) then
return
end
local osc52 = require("vim.ui.clipboard.osc52")
local has_wayland = vim.env.WAYLAND_DISPLAY ~= nil
and vim.fn.executable("wl-copy") == 1
and vim.fn.executable("wl-paste") == 1
local function copy(register)
local emit = osc52.copy(register)
return function(lines)
if has_wayland then
local cmd = { "wl-copy", "--sensitive", "--type", "text/plain" }
if register == "*" then
cmd[#cmd + 1] = "--primary"
end
vim.fn.system(cmd, lines)
end
emit(lines)
end
end
local function paste(register)
if not has_wayland then
return osc52.paste(register)
end
return function()
local cmd = { "wl-paste", "--no-newline" }
if register == "*" then
cmd[#cmd + 1] = "--primary"
end
local lines = vim.fn.systemlist(cmd, "", 1)
return vim.v.shell_error == 0 and lines or {}
end
end
vim.g.clipboard = {
name = "RemoteClipboard",
copy = { ["+"] = copy("+"), ["*"] = copy("*") },
paste = { ["+"] = paste("+"), ["*"] = paste("*") },
cache_enabled = 0,
}
end
return M

View File

@@ -1,10 +1,10 @@
-- local configs = require('nvim-treesitter.configs')
require'nvim-treesitter'.setup({
ensure_installed = {
"ini", "bash", "c", "lua", "vim", "vimdoc", "query", "python",
"rust", "zig", "typescript", "svelte", "css", "html", "nix"
},
sync_install = true,
local configs = require('nvim-treesitter.configs')
configs.setup({
-- ensure_installed = {
-- "ini", "bash", "c", "lua", "vim", "vimdoc", "query", "python",
-- "rust", "zig", "typescript", "svelte", "css", "html", "nix"
-- },
sync_install = false,
highlight = { enable = true },
indent = { enable = true, disable = { "norg" }, },
incremental_selection = { enable = true },

View File

@@ -1,47 +0,0 @@
-- Test: lua/mail.lua NEOMUTT=1 activation
-- Run from repo root: NEOMUTT=1 nvim --headless -u NONE -i NONE --noplugin -l tests/mail_spec.lua
-- Exit 0 = all assertions passed; non-zero = failure.
-- Does NOT require nvim-mail to be installed (pcall-guarded in mail.lua).
vim.g.mapleader = " "
-- Resolve repo root from this file's path and expose lua/ to require()
local src = debug.getinfo(1, "S").source:sub(2) -- strip leading '@'
local repo = vim.fn.fnamemodify(src, ":h:h") -- tests/../ = repo root
package.path = repo .. "/lua/?.lua;" .. package.path
-- 1. Module loads when NEOMUTT=1 is present in the environment
local ok, err = pcall(require, "mail")
assert(ok, "require('mail') failed: " .. tostring(err))
print("[pass] mail module loaded")
-- 2. Create a scratch buffer, make it current, set filetype to fire the autocmd
local buf = vim.api.nvim_create_buf(false, true)
vim.api.nvim_set_current_buf(buf)
vim.cmd("set filetype=mail")
-- 3. Buffer-local option checks (set via vim.opt_local in the FileType callback)
local tw = vim.bo.textwidth
assert(tw == 72, ("textwidth: expected 72, got %d"):format(tw))
print("[pass] textwidth = 72")
local fo = vim.bo.formatoptions
assert(fo:find("q", 1, true), ("formatoptions %q missing 'q'"):format(fo))
print("[pass] formatoptions contains 'q'")
-- 4. Window-local option checks (wrap and spell are 'wo', not 'bo')
assert(vim.wo.wrap, "wrap should be true")
print("[pass] wrap = true")
assert(vim.wo.spell, "spell should be true")
print("[pass] spell = true")
-- 5. Representative keymap registered at global scope by mail.lua
local found_mt = false
for _, m in ipairs(vim.api.nvim_get_keymap("n")) do
if m.desc == "Mail: To:" then found_mt = true; break end
end
assert(found_mt, "<leader>mt (Mail: To:) keymap not registered")
print("[pass] <leader>mt keymap registered")
print("\nALL TESTS PASSED")