Compare commits
25 Commits
6c738b78e7
...
claude-nvi
| Author | SHA1 | Date | |
|---|---|---|---|
| 74973c1449 | |||
| 545a5927e5 | |||
| c6b2743cf6 | |||
| 430bec1708 | |||
| d9e25eec77 | |||
| a588604d91 | |||
| d9911dd2ce | |||
| b397fab3f2 | |||
| 1246f42638 | |||
| 06fb7dd4b8 | |||
| 4b2d24e1f4 | |||
| f57d227203 | |||
| 82f904c9dc | |||
| 26b5f00643 | |||
| 31f604f8f6 | |||
| 8632e7a1bc | |||
| 0a9405ffd6 | |||
| eceaab3caf | |||
| 1dbb9c1e5d | |||
| b3e1e4e939 | |||
| 14e1f01784 | |||
| e1e300bee2 | |||
| 1418407e63 | |||
| 1e3a5d291f | |||
| a8100cf3e2 |
@@ -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)
|
||||
@@ -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" },
|
||||
-- },
|
||||
-- })
|
||||
|
||||
@@ -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 },
|
||||
|
||||
78
dots/.config/nvim/after/plugin/formatter.nvim.lua
Normal file
78
dots/.config/nvim/after/plugin/formatter.nvim.lua
Normal 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,
|
||||
-- },
|
||||
-- },
|
||||
-- })
|
||||
@@ -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)
|
||||
|
||||
@@ -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" },
|
||||
-- },
|
||||
-- },
|
||||
-- })
|
||||
|
||||
1
dots/.config/nvim/after/plugin/kubectl.nvim.lua
Normal file
1
dots/.config/nvim/after/plugin/kubectl.nvim.lua
Normal file
@@ -0,0 +1 @@
|
||||
require("kubectl").setup()
|
||||
@@ -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`.
|
||||
|
||||
@@ -1 +1 @@
|
||||
require("mcphub").setup({})
|
||||
-- require("mcphub").setup({})
|
||||
|
||||
@@ -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 = { "┌", "─", "┐", "│", "┘", "─", "└", "│" } }),
|
||||
|
||||
@@ -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
|
||||
|
||||
9
dots/.config/nvim/after/plugin/obsidian-nvim.lua
Normal file
9
dots/.config/nvim/after/plugin/obsidian-nvim.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
require("obsidian").setup({
|
||||
legacy_commands = false,
|
||||
workspaces = {
|
||||
{
|
||||
name = "test",
|
||||
path = "~/zk/work",
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -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)
|
||||
|
||||
1
dots/.config/nvim/ftplugin/dotenv.lua
Normal file
1
dots/.config/nvim/ftplugin/dotenv.lua
Normal file
@@ -0,0 +1 @@
|
||||
vim.opt_local.filetype = "sh"
|
||||
@@ -20,6 +20,7 @@ require("statusline")
|
||||
require("diagnostic")
|
||||
require("utils")
|
||||
require("zk")
|
||||
require("skeleton")
|
||||
require("reload")
|
||||
|
||||
require("paq-setup") -- when not on nixCats
|
||||
|
||||
@@ -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" },
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user