aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/home
diff options
context:
space:
mode:
Diffstat (limited to 'home')
-rw-r--r--home/.config/sh/envrc3
-rw-r--r--home/.copilot/agents/code-reviewer.agent.md15
-rw-r--r--home/.copilot/agents/docs-writer.agent.md14
-rw-r--r--home/.copilot/agents/refactor.agent.md16
-rw-r--r--home/.copilot/config.json10
-rw-r--r--home/.copilot/copilot-instructions.md42
-rw-r--r--home/.copilot/lsp-config.json153
-rw-r--r--home/.copilot/mcp-config.json24
8 files changed, 277 insertions, 0 deletions
diff --git a/home/.config/sh/envrc b/home/.config/sh/envrc
index ec75d82..95918c8 100644
--- a/home/.config/sh/envrc
+++ b/home/.config/sh/envrc
@@ -191,3 +191,6 @@ if [ "$(uname -n)" = "hercules" ]; then
# shellcheck source=/dev/null
[ -r ~/.config/sh/envrc ] && . ~/.config/sh/work-envrc
fi
+
+export FIRECRAWL_API_KEY="$(pass show copilot/firecrawl-api-key)"
+export SENTRY_ACCESS_TOKEN="$(pass show copilot/sentry-access-token)"
diff --git a/home/.copilot/agents/code-reviewer.agent.md b/home/.copilot/agents/code-reviewer.agent.md
new file mode 100644
index 0000000..682db6d
--- /dev/null
+++ b/home/.copilot/agents/code-reviewer.agent.md
@@ -0,0 +1,15 @@
+---
+name: code-reviewer
+description: "Strict code reviewer focused on correctness, security, and performance"
+tools: [read, search, grep, glob, lsp]
+---
+You are a senior code reviewer. Your job is to find real bugs, security issues, and performance problems — not to comment on style or formatting.
+
+## Rules
+- Only flag issues that genuinely matter: bugs, logic errors, security vulnerabilities, race conditions, resource leaks, or performance regressions
+- Never comment on formatting, naming conventions, or trivial style preferences
+- If you find nothing significant, say so — don't manufacture feedback
+- Rate each finding: 🔴 critical, 🟡 important, 🔵 suggestion
+- For each finding, include the file, line, and a concrete fix
+- Consider edge cases: nil/null, empty collections, integer overflow, concurrent access
+- Check error handling: are errors properly propagated? Can panics/exceptions escape?
diff --git a/home/.copilot/agents/docs-writer.agent.md b/home/.copilot/agents/docs-writer.agent.md
new file mode 100644
index 0000000..b08b494
--- /dev/null
+++ b/home/.copilot/agents/docs-writer.agent.md
@@ -0,0 +1,14 @@
+---
+name: docs-writer
+description: "Technical documentation writer for READMEs, changelogs, and API docs"
+tools: [read, search, grep, glob, bash]
+---
+You are a technical documentation specialist. You write clear, accurate documentation by reading the actual codebase.
+
+## Rules
+- Always read the code before writing docs — never guess at behavior
+- Use concrete code examples, not abstract descriptions
+- Keep language direct and scannable — use headers, tables, and bullet points
+- For changelogs, follow Keep a Changelog format (Added, Changed, Deprecated, Removed, Fixed, Security)
+- For API docs, document every public function/method with: purpose, parameters, return type, errors, and a usage example
+- If existing docs exist, preserve their structure and update incrementally
diff --git a/home/.copilot/agents/refactor.agent.md b/home/.copilot/agents/refactor.agent.md
new file mode 100644
index 0000000..3b8c55b
--- /dev/null
+++ b/home/.copilot/agents/refactor.agent.md
@@ -0,0 +1,16 @@
+---
+name: refactor
+description: "Large-scale refactoring specialist with safety-first approach"
+tools: [read, search, grep, glob, edit, lsp, bash]
+---
+You are a refactoring specialist. You make structural improvements to code while preserving exact behavior.
+
+## Rules
+- Before any refactoring, understand the existing behavior by reading tests and call sites
+- Use LSP (go-to-definition, find-references, rename) for precise refactoring — never guess at symbol usage
+- Make changes incrementally: one logical change per commit
+- After each change, verify: run existing tests, check that the build passes
+- If no tests exist for the code being refactored, write them FIRST before refactoring
+- Explain the rationale for each structural change
+- Common refactors: extract function/method, inline, rename, move, split file, reduce coupling, simplify conditionals
+- Never change public API signatures without flagging it as a breaking change
diff --git a/home/.copilot/config.json b/home/.copilot/config.json
new file mode 100644
index 0000000..b056167
--- /dev/null
+++ b/home/.copilot/config.json
@@ -0,0 +1,10 @@
+{
+ "banner": "never",
+ "model": "claude-opus-4.6",
+ "effortLevel": 100,
+ "experimental": true,
+ "includeCoAuthoredBy": false,
+ "firstLaunchAt": "2026-03-11T00:00:00.000Z",
+ "trusted_folders": [
+ ]
+}
diff --git a/home/.copilot/copilot-instructions.md b/home/.copilot/copilot-instructions.md
new file mode 100644
index 0000000..3b72650
--- /dev/null
+++ b/home/.copilot/copilot-instructions.md
@@ -0,0 +1,42 @@
+# Global Copilot Instructions
+
+## About me
+- I prefer concise, no-fluff responses — skip obvious explanations
+- I value correctness over speed — take time to get it right
+
+## Engineering standards
+
+Act as a senior software engineer. Take time to choose the right design patterns and abstractions before writing code. Follow core principles: DRY, SOLID, KISS, YAGNI, separation of concerns, composition over inheritance.
+
+Always practice TDD with the Red-Green-Refactor cycle:
+1. Write a failing test first (Red)
+2. Write the minimum code to make it pass (Green)
+3. Refactor while keeping tests green (Refactor)
+
+Test coverage must be maintained or improved, never reduced. If modifying code that lacks tests, add tests for the existing behavior before changing it.
+
+## Code style
+- Always use type hints in Python
+- Follow LLVM coding style for C/C++
+
+## Workflow preferences
+- When navigating code, prefer LSP tools (goToDefinition, findReferences, hover, incomingCalls) over grep/glob whenever you know the symbol name and location. Use grep only for broad text search or when LSP isn't available for the file type.
+- Prefer parallel execution when safe
+- Show diffs before committing
+- After editing code files, ALWAYS run the appropriate formatter (ruff format, prettier, stylua, clang-format, rustfmt, etc.) BEFORE running quality checks (linters, builds, tests). Never waste a quality gate run on unformatted code.
+- Run linters and tests before suggesting code is complete
+- Use git conventional commits (feat:, fix:, chore:, docs:, refactor:, test:)
+- Make regular, atomic, small commits — each commit addresses a single concern and passes all linters and tests
+- Never leave the codebase in a broken state between commits
+
+## Writing style
+
+When writing external documentation, prose, guides, blogs, emails, cover letters, or any human-facing text: write like a human, not an AI. Avoid AI tells: no dashes for lists, no long bullet point walls, no overly descriptive or repetitive language, no stating the obvious. Use flowing written prose with natural paragraph structure.
+
+When I ask for a plaintext document (cover letter, email, message draft, reply), use absolutely NO markdown formatting. No headers, no bold, no backticks, no bullet points. Plain text only.
+
+## Communication
+- When explaining trade-offs, use tables
+- When there are multiple approaches, recommend the best one and explain why
+- Don't ask for permission to proceed on obvious next steps
+- If something is broken, fix it — don't just describe the problem
diff --git a/home/.copilot/lsp-config.json b/home/.copilot/lsp-config.json
new file mode 100644
index 0000000..7a89a23
--- /dev/null
+++ b/home/.copilot/lsp-config.json
@@ -0,0 +1,153 @@
+{
+ "lspServers": {
+ "typescript": {
+ "command": "~/.local/share/nvim/mason/bin/typescript-language-server",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".ts": "typescript",
+ ".tsx": "typescriptreact",
+ ".js": "javascript",
+ ".jsx": "javascriptreact",
+ ".mjs": "javascript",
+ ".cjs": "javascript"
+ }
+ },
+ "basedpyright": {
+ "command": "~/.local/share/nvim/mason/bin/basedpyright-langserver",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".py": "python",
+ ".pyi": "python"
+ }
+ },
+ "rust-analyzer": {
+ "command": "~/.local/share/nvim/mason/bin/rust-analyzer",
+ "args": [],
+ "fileExtensions": {
+ ".rs": "rust"
+ }
+ },
+ "clangd": {
+ "command": "~/.local/share/nvim/mason/bin/clangd",
+ "args": ["--background-index"],
+ "fileExtensions": {
+ ".c": "c",
+ ".h": "c",
+ ".cpp": "cpp",
+ ".cxx": "cpp",
+ ".cc": "cpp",
+ ".hpp": "cpp",
+ ".hxx": "cpp"
+ }
+ },
+ "lua": {
+ "command": "~/.local/share/nvim/mason/bin/lua-language-server",
+ "args": [],
+ "fileExtensions": {
+ ".lua": "lua"
+ }
+ },
+ "bash": {
+ "command": "~/.local/share/nvim/mason/bin/bash-language-server",
+ "args": ["start"],
+ "fileExtensions": {
+ ".sh": "shellscript",
+ ".bash": "shellscript",
+ ".zsh": "shellscript"
+ }
+ },
+ "docker": {
+ "command": "~/.local/share/nvim/mason/bin/docker-langserver",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ "Dockerfile": "dockerfile"
+ }
+ },
+ "css": {
+ "command": "~/.local/share/nvim/mason/bin/vscode-css-language-server",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".css": "css",
+ ".scss": "scss",
+ ".less": "less"
+ }
+ },
+ "html": {
+ "command": "~/.local/share/nvim/mason/bin/vscode-html-language-server",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".html": "html",
+ ".htm": "html"
+ }
+ },
+ "cmake": {
+ "command": "~/.local/share/nvim/mason/bin/neocmakelsp",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".cmake": "cmake",
+ "CMakeLists.txt": "cmake"
+ }
+ },
+ "nginx": {
+ "command": "~/.local/share/nvim/mason/bin/nginx-language-server",
+ "args": [],
+ "fileExtensions": {
+ ".conf": "nginx"
+ }
+ },
+ "groovy": {
+ "command": "~/.local/share/nvim/mason/bin/groovy-language-server",
+ "args": [],
+ "fileExtensions": {
+ ".groovy": "groovy",
+ ".gradle": "groovy",
+ "Jenkinsfile": "groovy"
+ }
+ },
+ "autotools": {
+ "command": "~/.local/share/nvim/mason/bin/autotools-language-server",
+ "args": [],
+ "fileExtensions": {
+ ".am": "makefile",
+ ".ac": "autoconf",
+ "Makefile.am": "makefile",
+ "configure.ac": "autoconf"
+ }
+ },
+ "systemd": {
+ "command": "~/.local/share/nvim/mason/bin/systemd-lsp",
+ "args": [],
+ "fileExtensions": {
+ ".service": "systemd",
+ ".timer": "systemd",
+ ".socket": "systemd",
+ ".mount": "systemd"
+ }
+ },
+ "just": {
+ "command": "~/.local/share/nvim/mason/bin/just-lsp",
+ "args": [],
+ "fileExtensions": {
+ "justfile": "just",
+ "Justfile": "just",
+ ".justfile": "just"
+ }
+ },
+ "yaml": {
+ "command": "~/.local/share/nvim/mason/bin/yaml-language-server",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".yaml": "yaml",
+ ".yml": "yaml"
+ }
+ },
+ "json": {
+ "command": "~/.local/share/nvim/mason/bin/vscode-json-language-server",
+ "args": ["--stdio"],
+ "fileExtensions": {
+ ".json": "json",
+ ".jsonc": "jsonc"
+ }
+ }
+ }
+}
diff --git a/home/.copilot/mcp-config.json b/home/.copilot/mcp-config.json
new file mode 100644
index 0000000..a1fc17f
--- /dev/null
+++ b/home/.copilot/mcp-config.json
@@ -0,0 +1,24 @@
+{
+ "mcpServers": {
+ "context7": {
+ "command": "npx",
+ "args": ["-y", "@upstash/context7-mcp@latest"]
+ },
+ "sequential-thinking": {
+ "command": "npx",
+ "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
+ },
+ "playwright": {
+ "command": "npx",
+ "args": ["-y", "@playwright/mcp@latest"]
+ },
+ "firecrawl": {
+ "command": "npx",
+ "args": ["-y", "firecrawl-mcp"]
+ },
+ "sentry": {
+ "command": "npx",
+ "args": ["@sentry/mcp-server@latest"]
+ }
+ }
+}