25 Commits

Author SHA1 Message Date
74973c1449 chore: initial commit for draft MR 2025-12-18 15:56:51 +01:00
545a5927e5 chore(nvim): add commented formatter.nvim config
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:54:13 +01:00
c6b2743cf6 chore(nvim): reorder plugins, remove claude-code from paq-setup
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:53:59 +01:00
430bec1708 style(lsp): fix formatting and indentation
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:53:56 +01:00
d9e25eec77 chore: remove taskdeps script
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:53:04 +01:00
a588604d91 chore(nvim): comment out image.nvim config
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:53:01 +01:00
d9911dd2ce style(cmp): reformat sources list
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:57 +01:00
b397fab3f2 feat(ftplugin): add dotenv filetype support
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:54 +01:00
1246f42638 feat(nvim): add skeleton module to init
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:50 +01:00
06fb7dd4b8 fix(wiki): disable auto lcd on VimEnter
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:47 +01:00
4b2d24e1f4 feat(fzf): add resume to live_grep, use complete_file
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:42 +01:00
f57d227203 feat(lint): enable eslint for js/ts, disable systemdlint/yamllint
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:31 +01:00
82f904c9dc feat(format): enable lsp_fallback, disable json formatters
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:52:24 +01:00
26b5f00643 fix(lsp): update helm_ls, yamlls, disable emmet
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:51:36 +01:00
31f604f8f6 feat(lsp): add terraformls, rust_analyzer, configure nixd
Add support for Terraform and Rust language servers, and configure nixd
with home-manager options for better Nix completions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:51:17 +01:00
8632e7a1bc feat(lsp): switch from ts_ls to vtsls
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:51:02 +01:00
0a9405ffd6 chore(nvim): disable codecompanion plugin config
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:50:40 +01:00
eceaab3caf chore(nvim): disable mcphub plugin config
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:50:36 +01:00
1dbb9c1e5d chore(nvim): disable nvimkit, normalize paq-setup formatting
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:50:16 +01:00
b3e1e4e939 chore(nvim): disable image.nvim plugin
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:45:36 +01:00
14e1f01784 feat(nvim): add vim-markdown-composer plugin
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:45:12 +01:00
e1e300bee2 feat(nvim): add blink.download plugin
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:44:58 +01:00
1418407e63 feat(nvim): add obsidian plugin
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:44:41 +01:00
1e3a5d291f feat(nvim): add nvim-early-retirement plugin
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:44:18 +01:00
a8100cf3e2 feat(nvim): add kubectl plugin
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 15:40:18 +01:00
16 changed files with 199 additions and 240 deletions

View File

@@ -1,144 +0,0 @@
#!/usr/bin/python
import argparse
import json
import subprocess
from collections import defaultdict
def get_task_data():
command = (
"task +PENDING or +WAITING -COMPLETED -DELETED export | "
"jq '[.[] | {uuid: .uuid, id, depends: .depends, description: .description, status: .status }]'"
)
output = subprocess.check_output(command, shell=True)
return json.loads(output)
def parse_task_data(data):
dependency_graph = defaultdict(list)
task_details = {}
dependent_tasks = set()
for task in data:
task_id = task["uuid"]
task_details[task_id] = {
"id": task.get("id", "?"),
"description": task.get("description", "No description"),
"status": task.get("status", "Unknown status"),
}
if task["depends"]:
for dependency in task["depends"]:
dependency_graph[dependency].append(task_id)
dependent_tasks.add(task_id)
root_tasks = set(task_details.keys()) - dependent_tasks
return task_details, dependency_graph, root_tasks
def get_all_parents(task_id, dependency_graph):
return [
parent for parent, children in dependency_graph.items() if task_id in children
]
def build_ascii_dag(
task_id,
task_details,
dependency_graph,
prefix="",
is_last=True,
show_id=True,
visited=None,
):
if visited is None:
visited = set()
if task_id in visited:
return [f"{prefix}{'└── ' if is_last else '├── '}... (cycle detected)"]
visited.add(task_id)
task_info = task_details[task_id]
task_line = f"{prefix}{'└── ' if is_last else '├── '}{task_info['id'] + ': ' if show_id else ''}{task_info['description']} ({task_info['status']})"
lines = [task_line]
children = dependency_graph.get(task_id, [])
for idx, child in enumerate(children):
child_is_last = idx == len(children) - 1
child_prefix = prefix + (" " if is_last else "│ ")
lines.extend(
build_ascii_dag(
child,
task_details,
dependency_graph,
child_prefix,
child_is_last,
show_id,
visited.copy(),
)
)
return lines
def render_dependency_dag(task_details, dependency_graph, root_tasks, show_id):
dag_lines = []
global_visited = set()
def dfs(task_id, prefix="", is_last=True, visited=None):
if visited is None:
visited = set()
if task_id in visited:
return
visited.add(task_id)
global_visited.add(task_id)
task_info = task_details[task_id]
task_line = f"{prefix}{'└── ' if is_last else '├── '}{str(task_info['id']) + ': ' if show_id else ''}{task_info['description']} ({task_info['status']})"
dag_lines.append(task_line)
children = dependency_graph.get(task_id, [])
for idx, child in enumerate(children):
child_is_last = idx == len(children) - 1
child_prefix = prefix + (" " if is_last else "│ ")
dfs(child, child_prefix, child_is_last, visited.copy())
root_tasks_with_children = [
root for root in root_tasks if dependency_graph.get(root, [])
]
for root in sorted(
root_tasks_with_children,
key=lambda x: len(dependency_graph.get(x, [])),
reverse=True,
):
if root not in global_visited:
dfs(root)
dag_lines.append("")
return "\n".join(dag_lines).rstrip()
def main(args):
data = get_task_data()
task_details, dependency_graph, root_tasks = parse_task_data(data)
ascii_dag = render_dependency_dag(
task_details, dependency_graph, root_tasks, show_id=args.show_id
)
print(ascii_dag)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Generates a task dependency DAG for Taskwarrior tasks."
)
parser.add_argument(
"--show-id",
action="store_true",
default=False,
help="Include task IDs in the output.",
)
args = parser.parse_args()
main(args)

View File

@@ -1,17 +1,16 @@
require("codecompanion").setup({
ignore_warnings = true,
extensions = {
mcphub = {
callback = "mcphub.extensions.codecompanion",
opts = {
make_vars = true,
make_slash_commands = true,
show_result_in_chat = true,
},
},
},
strategies = {
chat = { adapter = "openai" },
inline = { adapter = "openai" },
},
})
-- require("codecompanion").setup({
-- extensions = {
-- mcphub = {
-- callback = "mcphub.extensions.codecompanion",
-- opts = {
-- make_vars = true,
-- make_slash_commands = true,
-- show_result_in_chat = true
-- }
-- }
-- },
-- strategies = {
-- chat = { adapter = "openai" },
-- inline = { adapter = "openai" },
-- },
-- })

View File

@@ -1,6 +1,6 @@
require("conform").setup({
format_after_save = {
lsp_fallback = false,
lsp_fallback = true,
async = false,
timeout_ms = 500,
},
@@ -13,15 +13,14 @@ require("conform").setup({
gdscript = { "gdformat" },
haskell = { "ormolu" },
html = { "prettierd", "prettier", stop_after_first = true },
javascript = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
javascriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
json = { "prettierd", "prettier", stop_after_first = true },
jsonc = { "prettierd", "prettier", stop_after_first = true },
lua = { "stylua" }, -- configured in stylua.toml
markdown = { "prettierd", "prettier", stop_after_first = true },
nix = { "nixfmt" },
javascript = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
javascriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
-- json = { "prettierd", "prettier", stop_after_first = true },
-- jsonc = { "prettierd", "prettier", stop_after_first = true },
python = { "isort", "black" },
rust = { "rustfmt", lsp_fallback = "fallback" },
svelte = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
typescript = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
typescriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },

View File

@@ -0,0 +1,78 @@
-- require("formatter").setup({
-- logging = true,
-- filetype = {
-- typescriptreact = {
-- -- prettier
-- function()
-- return {
-- exe = "prettier",
-- args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
-- stdin = true,
-- }
-- end,
-- },
-- typescript = {
-- -- prettier
-- function()
-- return {
-- exe = "prettier",
-- args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
-- stdin = true,
-- }
-- end,
-- -- linter
-- -- function()
-- -- return {
-- -- exe = "eslint",
-- -- args = {
-- -- "--stdin-filename",
-- -- vim.api.nvim_buf_get_name(0),
-- -- "--fix",
-- -- "--cache"
-- -- },
-- -- stdin = false
-- -- }
-- -- end
-- },
-- javascript = {
-- -- prettier
-- function()
-- return {
-- exe = "prettier",
-- args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
-- stdin = true,
-- }
-- end,
-- },
-- javascriptreact = {
-- -- prettier
-- function()
-- return {
-- exe = "prettier",
-- args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
-- stdin = true,
-- }
-- end,
-- },
-- json = {
-- -- prettier
-- function()
-- return {
-- exe = "prettier",
-- args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
-- stdin = true,
-- }
-- end,
-- },
-- lua = {
-- -- luafmt
-- function()
-- return {
-- exe = "luafmt",
-- args = { "--indent-count", 2, "--stdin" },
-- stdin = true,
-- }
-- end,
-- },
-- },
-- })

View File

@@ -5,7 +5,9 @@ fzf.setup({ "max-perf" })
vim.keymap.set("n", "<leader>f<leader>", fzf.builtin) -- Help
vim.keymap.set("n", "<leader>fc", fzf.commands)
vim.keymap.set("n", "<leader>ff", fzf.files)
vim.keymap.set("n", "<leader>fg", fzf.live_grep_native)
vim.keymap.set("n", "<leader>fg", function()
fzf.live_grep_native({ resume = true })
end)
vim.keymap.set("n", "<leader>fb", fzf.buffers)
vim.keymap.set("n", "<leader>fd", fzf.diagnostics_workspace)
vim.keymap.set("n", "<leader>fhe", fzf.help_tags)
@@ -13,4 +15,4 @@ vim.keymap.set("n", "<leader>fhi", fzf.search_history)
vim.keymap.set("n", "<leader>fma", fzf.marks)
vim.keymap.set("n", "<leader>fma", fzf.man_pages)
vim.keymap.set("i", "<c-f>", fzf.complete_path)
vim.keymap.set("i", "<c-f>", fzf.complete_file)

View File

@@ -1,10 +1,10 @@
require("image").setup({
backend = "kitty",
kitty_method = "normal",
processor = "magick_cli",
integrations = {
markdown = {
filetypes = { "markdown", "pandoc" },
},
},
})
-- require("image").setup({
-- backend = "kitty",
-- kitty_method = "normal",
-- processor = "magick_cli",
-- integrations = {
-- markdown = {
-- filetypes = { "markdown", "pandoc" },
-- },
-- },
-- })

View File

@@ -0,0 +1 @@
require("kubectl").setup()

View File

@@ -17,11 +17,9 @@ local servers = {
format = false,
},
},
emmet_language_server = {},
-- emmet_language_server = {},
gdscript = {},
helm_ls = {
filetypes = { "yaml", "helm", "yaml.helm-values" },
},
helm_ls = { filetypes = { "helm", "yaml.helm-values" } },
hls = { filetypes = { "haskell", "lhaskell", "cabal" } },
html = {},
jsonls = {
@@ -65,8 +63,26 @@ local servers = {
},
},
-- marksman = {},
nixd = {},
-- TODO: This completion ain't working yet
nixd = {
nixpkgs = {
expr = "import <nixpkgs> { }",
},
formatting = {
command = { "nixfmt" },
},
options = {
home_manager = {
expr = '(builtins.getFlake "/home/hektor/.config/home-manager").homeConfigurations.work.options',
},
},
},
pyright = {},
rust_analyzer = {
settings = {
["rust-analyzer"] = {},
},
},
-- tsserver = {},
svelte = {
plugin = {
@@ -76,48 +92,43 @@ local servers = {
},
},
tailwindcss = {},
-- vtsls = {},
ts_ls = {},
-- vtsls = {
-- maxTsServerMemory = 16384,
-- filetypes = {
-- "javascript",
-- "javascriptreact",
-- "javascript.jsx",
-- "typescript",
-- "typescriptreact",
-- "typescript.tsx",
-- },
-- settings = {
-- complete_function_calls = true,
-- vtsls = {
-- enableMoveToFileCodeAction = true,
-- autoUseWorkspaceTsdk = true,
-- experimental = {
-- completion = {
-- enableServerSideFuzzyMatch = true,
-- },
-- },
-- },
-- typescript = {
-- updateImportsOnFileMove = { enabled = "always" },
-- suggest = {
-- completeFunctionCalls = true,
-- },
-- inlayHints = {
-- enumMemberValues = { enabled = true },
-- functionLikeReturnTypes = { enabled = true },
-- parameterNames = { enabled = "literals" },
-- parameterTypes = { enabled = true },
-- propertyDeclarationTypes = { enabled = true },
-- variableTypes = { enabled = false },
-- },
-- },
-- },
-- },
terraformls = {},
-- ts_ls = {},
vtsls = {
maxTsServerMemory = 16384,
filetypes = {
"javascript",
"javascriptreact",
"javascript.jsx",
"typescript",
"typescriptreact",
"typescript.tsx",
},
settings = {
complete_function_calls = true,
vtsls = {
enableMoveToFileCodeAction = true,
autoUseWorkspaceTsdk = true,
experimental = { completion = { enableServerSideFuzzyMatch = true } },
},
typescript = {
updateImportsOnFileMove = { enabled = "always" },
suggest = { completeFunctionCalls = true },
inlayHints = {
enumMemberValues = { enabled = true },
functionLikeReturnTypes = { enabled = true },
parameterNames = { enabled = "literals" },
parameterTypes = { enabled = true },
propertyDeclarationTypes = { enabled = true },
variableTypes = { enabled = false },
},
},
},
},
yamlls = {
settings = {
yaml = {
validate = true,
schemaStore = {
-- You must disable built-in schemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.

View File

@@ -1 +1 @@
require("mcphub").setup({})
-- require("mcphub").setup({})

View File

@@ -62,12 +62,12 @@ cmp.setup({
["<CR>"] = c_l,
}),
sources = {
{ name = "copilot", group_index = 2 },
{ name = "zk" },
{ name = "copilot", group_index = 2 },
{ name = "nvim_lsp", keyword_length = 8 },
{ name = "luasnip", max_item_count = 16 },
{ name = "luasnip", max_item_count = 16 },
{ name = "path" },
{ name = "buffer", max_item_count = 8 },
{ name = "buffer", max_item_count = 8 },
},
window = {
completion = cmp.config.window.bordered({ border = { "", "", "", "", "", "", "", "" } }),

View File

@@ -12,8 +12,8 @@ require("lint").linters_by_ft = {
editorconfig = { "editorconfig-checker" },
haskell = { "hlint" },
-- html = { "htmlhint" },
-- javascript = { eslint_linter },
-- javascriptreact = { eslint_linter },
javascript = { eslint_linter },
javascriptreact = { eslint_linter },
gdscript = { "gdlint" },
latex = { "chktex" },
-- lua = { "luacheck", "selene" },
@@ -22,10 +22,9 @@ require("lint").linters_by_ft = {
-- python = { "pylint" },
sh = { "shellcheck" },
svelte = { eslint_linter },
systemd = { "systemdlint" },
-- typescript = { eslint_linter },
-- typescriptreact = { eslint_linter },
yaml = { "yamllint" },
typescript = { eslint_linter },
typescriptreact = { eslint_linter },
-- yaml = { "yamllint" },
}
-- TODO: Wouldn't it be possible / nice to only try to load the linters when they are

View File

@@ -0,0 +1,9 @@
require("obsidian").setup({
legacy_commands = false,
workspaces = {
{
name = "test",
path = "~/zk/work",
},
},
})

View File

@@ -1,6 +1,6 @@
vim.cmd([[
" Change local buffer to directory of current file after the plugin has loaded
autocmd VimEnter * lcd %:p:h
" " Change local buffer to directory of current file after the plugin has loaded
" autocmd VimEnter * lcd %:p:h
" " Override wiki index mapping to also cd into the wiki
nm <leader>ww <plug>(wiki-index)

View File

@@ -0,0 +1 @@
vim.opt_local.filetype = "sh"

View File

@@ -20,6 +20,7 @@ require("statusline")
require("diagnostic")
require("utils")
require("zk")
require("skeleton")
require("reload")
require("paq-setup") -- when not on nixCats

View File

@@ -34,14 +34,17 @@ require("nixCatsUtils.catPacker").setup({
{ "razak17/tailwind-fold.nvim" },
{ "rmagatti/auto-session" },
{ "kndndrj/nvim-dbee" },
{ "3rd/image.nvim", build = false },
-- { "3rd/image.nvim", build = false },
{ "polarmutex/beancount.nvim" },
{ "jamesblckwell/nvimkit.nvim" },
{ 'olimorris/codecompanion.nvim' },
{ "ravitemer/mcphub.nvim", build = "pnpm install -g mcp-hub@latest" },
-- { "jamesblckwell/nvimkit.nvim" },
{ "olimorris/codecompanion.nvim" },
{ "ravitemer/mcphub.nvim", build = "pnpm install -g mcp-hub@latest" },
{ "zbirenbaum/copilot.lua" },
{ "zbirenbaum/copilot-cmp" },
{ "qvalentin/helm-ls.nvim", ft = "helm" },
{ "saghen/blink.download" },
{ "ramilito/kubectl.nvim" },
{ "mikesmithgh/kitty-scrollback.nvim" },
{ "greggh/claude-code.nvim" },
{ "chrisgrieser/nvim-early-retirement" },
{ "euclio/vim-markdown-composer" },
})