mirror of
https://github.com/cole-maxwell1/dotfiles.git
synced 2026-08-02 12:23:54 -04:00
Compare commits
10 Commits
dd91da6b00
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 57821ba227 | |||
| 4f6136e88c | |||
| e94d6b3c14 | |||
| 4038a5ccbe | |||
| c65b1272e2 | |||
| 13e26f720d | |||
| a80e6df2b5 | |||
| 28582d56c0 | |||
| bfb6dcd4df | |||
| 892aca56df |
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
../.config/opencode/AGENTS.md
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# Response Tone
|
||||||
|
|
||||||
|
1. **Accuracy over agreeableness:** Do not open with compliments, validation, or social pleasantries. Begin every response with the substance of the answer. Praise is noise; signal is the goal.
|
||||||
|
2. **Default to skepticism:** Treat every user claim as potentially flawed until verified. If a statement is wrong, say so immediately and state the correction. Do not use hedging language like "You might want to consider...". Say "That is incorrect" and explain why.
|
||||||
|
3. **Never apologize for correcting the user:** Corrections are the primary value. Phrases like "I'm sorry, but..." or "With all due respect..." are forbidden. State the correction directly.
|
||||||
|
4. **Be blunt and argumentative when warranted:** If reasoning is unsound, challenge it. Name the flaw in the logic explicitly. You have standing permission to disagree and hold your position if reasoning is stronger.
|
||||||
|
5. **Do not mirror the user's confidence:** Evaluate claims on merits alone. A confidently stated falsehood receives the same direct correction as a tentative one.
|
||||||
|
6. **Distinguish certainty levels honestly:** When certain, be assertive. When genuinely ambiguous, say so plainly without manufacturing false uncertainty.
|
||||||
|
|
||||||
|
# Style & Formatting Constraints
|
||||||
|
|
||||||
|
1. **Code Comment Tone:** Keep all comments objective or imperative. It is strictly forbidden to use words like "we", "us", or any first-person plural personal pronouns in code comments or explanations.
|
||||||
|
2. **No Emojis:** NEVER use emojis in code comments, `README.md` files, or any other Markdown documentation. Maintain a purely professional, text-only formatting style.
|
||||||
|
|
||||||
|
# Git
|
||||||
|
When asked, write professional Git commit messages for requested changes. NEVER add an AI co-author tag to commit messages.
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
description: Generate a Conventional Commit message based on staged changes
|
||||||
|
---
|
||||||
|
|
||||||
|
Inspect the current workspace git status and staged diff (`git diff --staged`). Generate a professional commit message for my approval.
|
||||||
|
|
||||||
|
Strictly adhere to the following Conventional Commit specification rules:
|
||||||
|
|
||||||
|
### Formatting Rules
|
||||||
|
|
||||||
|
- **Format:** `<type>(<optional scope>): <description>` followed by an optional `<body>` and `<footer` separated by blank lines.
|
||||||
|
- **Subject Case:** The description MUST start with a lowercase letter.
|
||||||
|
- **No Ending Punctuation:** Do NOT end the subject line with a period.
|
||||||
|
- **Imperative Mood:** Use imperative, present tense ("add" not "added" or "adds").
|
||||||
|
- **Breaking Changes:** Append `!` before the colon in the header for breaking changes (e.g., `feat(api)!: drop v1 endpoints`) and include a `BREAKING CHANGE:` footer.
|
||||||
|
|
||||||
|
### Allowed Types
|
||||||
|
|
||||||
|
- `feat`: Add, adjust, or remove API/UI functionality.
|
||||||
|
- `fix`: Fix a bug in existing API/UI functionality.
|
||||||
|
- `refactor`: Structural changes without altering public API/UI behavior.
|
||||||
|
- `perf`: Special refactor that explicitly improves performance.
|
||||||
|
- `style`: Formatting, missing semi-colons, whitespace adjustments.
|
||||||
|
- `test`: Adding or correcting tests.
|
||||||
|
- `docs`: Documentation updates only.
|
||||||
|
- `build`: Build tool, dependency, or project version updates.
|
||||||
|
- `ops`: Infrastructure, CI/CD pipelines, deployment, or operational scripts.
|
||||||
|
- `chore`: Maintenance tasks (e.g., updating `.gitignore`, repo setup).
|
||||||
|
|
||||||
|
Provide ONLY the proposed commit message inside a raw code block, followed by a request for my approval.
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
sources:
|
||||||
|
ibmi-system:
|
||||||
|
host: ${DB2i_HOST}
|
||||||
|
user: ${DB2i_USER}
|
||||||
|
password: ${DB2i_PASS}
|
||||||
|
|
||||||
|
tools:
|
||||||
|
get_column_info:
|
||||||
|
source: ibmi-system
|
||||||
|
description: >-
|
||||||
|
Retrieve a table's column details like TABLE_NAME, SYSTEM_TABLE_NAME,
|
||||||
|
COLUMN_NAME, SYSTEM_COLUMN_NAME, DATA_TYPE, LENGTH, NUMERIC_SCALE,
|
||||||
|
IS_NULLABLE, COLUMN_HEADING, COLUMN_TEXT from the system catalog for the
|
||||||
|
specified table.
|
||||||
|
parameters:
|
||||||
|
- name: table_name
|
||||||
|
type: string
|
||||||
|
description: "The name of the table to retrieve columns for."
|
||||||
|
required: true
|
||||||
|
statement: |
|
||||||
|
SELECT
|
||||||
|
TABLE_NAME,
|
||||||
|
SYSTEM_TABLE_NAME,
|
||||||
|
COLUMN_NAME,
|
||||||
|
SYSTEM_COLUMN_NAME,
|
||||||
|
DATA_TYPE,
|
||||||
|
LENGTH,
|
||||||
|
NUMERIC_SCALE,
|
||||||
|
IS_NULLABLE,
|
||||||
|
COLUMN_HEADING,
|
||||||
|
COLUMN_TEXT
|
||||||
|
FROM
|
||||||
|
QSYS2.SYSCOLUMNS
|
||||||
|
WHERE
|
||||||
|
TABLE_NAME = UPPER(:table_name)
|
||||||
|
ORDER BY
|
||||||
|
TABLE_NAME,
|
||||||
|
ORDINAL_POSITION
|
||||||
|
|
||||||
|
toolsets:
|
||||||
|
custom_tools:
|
||||||
|
tools:
|
||||||
|
- get_column_info
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
// Automatic quota surfaces. Slash commands remain available when these are disabled.
|
||||||
|
"enableToast": false,
|
||||||
|
"tuiCommandDisplay": "inline",
|
||||||
|
// Include or hide session input and output token totals.
|
||||||
|
"showSessionTokens": true,
|
||||||
|
// Session token totals: "current" session only, or "tree" including descendants.
|
||||||
|
"sessionTokenScope": "current",
|
||||||
|
// Provider selection: "auto" detects providers; an array tracks only listed providers.
|
||||||
|
"enabledProviders": "auto",
|
||||||
|
// Quota presentation and reset-period choices.
|
||||||
|
"formatStyle": "allWindows",
|
||||||
|
"percentDisplayMode": "used",
|
||||||
|
// TUI-only surfaces.
|
||||||
|
"tuiSidebarPanel": {
|
||||||
|
"enabled": true,
|
||||||
|
},
|
||||||
|
// Optional bundled maintainer Home announcements.
|
||||||
|
"maintainerAnnouncements": {
|
||||||
|
"enabled": true,
|
||||||
|
"home": true,
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://opencode.ai/config.json",
|
||||||
|
"permission": {
|
||||||
|
"bash": {
|
||||||
|
"*": "ask",
|
||||||
|
// Git
|
||||||
|
"git log *": "allow",
|
||||||
|
"git commit *": "ask",
|
||||||
|
"git status *": "allow",
|
||||||
|
"git diff *": "allow",
|
||||||
|
"git show *": "allow",
|
||||||
|
"git push *": "ask",
|
||||||
|
// GNU Utils
|
||||||
|
"sudo *": "deny",
|
||||||
|
"curl *": "ask",
|
||||||
|
"wget *": "ask",
|
||||||
|
"diff *": "allow",
|
||||||
|
"npm *": "allow",
|
||||||
|
"rm *": "ask",
|
||||||
|
"rm -rf *": "deny",
|
||||||
|
"grep *": "allow",
|
||||||
|
"sort *": "allow",
|
||||||
|
"head *": "allow",
|
||||||
|
"tail *": "allow",
|
||||||
|
"echo *": "allow",
|
||||||
|
"which *": "allow",
|
||||||
|
"find *": "allow",
|
||||||
|
"ls *": "allow",
|
||||||
|
"wc *": "allow",
|
||||||
|
// Go
|
||||||
|
"go build *": "allow",
|
||||||
|
"go test *": "allow",
|
||||||
|
"go vet *": "allow",
|
||||||
|
"go mod tidy": "allow",
|
||||||
|
"go mod download": "allow",
|
||||||
|
// Python
|
||||||
|
"python -m unittest *": "allow",
|
||||||
|
"python -m py_compile": "allow",
|
||||||
|
"python3 -m venv .venv": "allow",
|
||||||
|
"source .venv/bin/activate": "allow",
|
||||||
|
"ruff check *": "allow",
|
||||||
|
"ruff format --check *": "allow",
|
||||||
|
// Dotnet
|
||||||
|
"dotnet *": "allow",
|
||||||
|
// Docker
|
||||||
|
"docker ps *": "allow",
|
||||||
|
"docker logs *": "allow",
|
||||||
|
"docker compose logs *": "allow",
|
||||||
|
},
|
||||||
|
"read": {
|
||||||
|
".env": "deny",
|
||||||
|
".secrets": "deny",
|
||||||
|
"*.key": "deny",
|
||||||
|
"*.pem": "deny",
|
||||||
|
"id_rsa": "deny",
|
||||||
|
"id_ed25519": "deny",
|
||||||
|
".aws/credentials": "deny",
|
||||||
|
"~/.ssh/known_hosts": "allow",
|
||||||
|
},
|
||||||
|
"grep": "allow",
|
||||||
|
"glob": "allow",
|
||||||
|
"question": "allow",
|
||||||
|
"lsp": "allow",
|
||||||
|
"websearch": "allow",
|
||||||
|
},
|
||||||
|
"mcp": {
|
||||||
|
"zai-mcp-server": {
|
||||||
|
"type": "local",
|
||||||
|
"command": ["npx", "-y", "@z_ai/mcp-server"],
|
||||||
|
"environment": {
|
||||||
|
"Z_AI_API_KEY": "{env:ZAI_API_KEY}",
|
||||||
|
"Z_AI_MODE": "ZAI",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"web-search-prime": {
|
||||||
|
"type": "remote",
|
||||||
|
"url": "https://api.z.ai/api/mcp/web_search_prime/mcp",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer {env:ZAI_API_KEY}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"web-reader": {
|
||||||
|
"type": "remote",
|
||||||
|
"url": "https://api.z.ai/api/mcp/web_reader/mcp",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer {env:ZAI_API_KEY}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"zread": {
|
||||||
|
"type": "remote",
|
||||||
|
"url": "https://api.z.ai/api/mcp/zread/mcp",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer {env:ZAI_API_KEY}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"playwright": {
|
||||||
|
"type": "local",
|
||||||
|
"command": ["npx", "@playwright/mcp@latest"],
|
||||||
|
"enabled": true,
|
||||||
|
},
|
||||||
|
"ibmi-server": {
|
||||||
|
"type": "local",
|
||||||
|
"command": [
|
||||||
|
"npx",
|
||||||
|
"-y",
|
||||||
|
"@ibm/ibmi-mcp-server@latest",
|
||||||
|
"--tools",
|
||||||
|
"{env:HOME}/.config/opencode/mcp/ibmi-mcp-server/tools/custom-tools.yaml",
|
||||||
|
],
|
||||||
|
"enabled": false,
|
||||||
|
"environment": {
|
||||||
|
"DB2i_HOST": "{env:DB2i_HOST}",
|
||||||
|
"DB2i_USER": "{env:DB2i_USER}",
|
||||||
|
"DB2i_PASS": "{env:DB2i_PASS}",
|
||||||
|
"DB2i_PORT": "8076",
|
||||||
|
"DB2i_IGNORE_UNAUTHORIZED": "true",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"watcher": {
|
||||||
|
"ignore": [
|
||||||
|
"node_modules/**",
|
||||||
|
".git/**",
|
||||||
|
"dist/**",
|
||||||
|
"**/.venv/**",
|
||||||
|
"**/target/**",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"lsp": true,
|
||||||
|
"formatter": true,
|
||||||
|
"model": "zai-coding-plan/glm-5.2",
|
||||||
|
"small_model": "zai-coding-plan/glm-4.5-air",
|
||||||
|
"agent": {
|
||||||
|
"explore": {
|
||||||
|
"model": "zai-coding-plan/glm-4.5-air",
|
||||||
|
},
|
||||||
|
"scout": {
|
||||||
|
"model": "zai-coding-plan/glm-4.5-air",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"share": "disabled",
|
||||||
|
"snapshot": true,
|
||||||
|
// OpenCode Quota: tuiCommandDisplay chooses whether native TUI command output appears in the session transcript or a local popup dialog.
|
||||||
|
// OpenCode Quota: loads the server plugin for slash commands and quota checks.
|
||||||
|
"plugin": ["./plugins/ibmi-gate.ts", "@slkiser/opencode-quota@latest"],
|
||||||
|
"provider": {
|
||||||
|
// Detected zai authentication; opencode-quota added this global provider declaration.
|
||||||
|
"zai": {},
|
||||||
|
},
|
||||||
|
}
|
||||||
Generated
+401
@@ -0,0 +1,401 @@
|
|||||||
|
{
|
||||||
|
"name": "opencode",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"dependencies": {
|
||||||
|
"@opencode-ai/plugin": "1.18.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@ai-sdk/provider": {
|
||||||
|
"version": "3.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.8.tgz",
|
||||||
|
"integrity": "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"json-schema": "^0.4.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@opencode-ai/plugin": {
|
||||||
|
"version": "1.18.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.18.7.tgz",
|
||||||
|
"integrity": "sha512-kXm5hqur5JiF/xJPaQYkuNn7vSl4ya09YgL/pIvIrggWCLFsfo1gXqNbONRcGW7m5Ih2k6kgMXFyjB9or1+dEg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@ai-sdk/provider": "3.0.8",
|
||||||
|
"@opencode-ai/sdk": "1.18.7",
|
||||||
|
"effect": "4.0.0-beta.83",
|
||||||
|
"zod": "4.1.8"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@opentui/core": ">=0.4.5",
|
||||||
|
"@opentui/keymap": ">=0.4.5",
|
||||||
|
"@opentui/solid": ">=0.4.5"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@opentui/core": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@opentui/keymap": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@opentui/solid": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@opencode-ai/sdk": {
|
||||||
|
"version": "1.18.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.7.tgz",
|
||||||
|
"integrity": "sha512-5txVELvCxzC3O/MYnRKdTvBN3TqQjE3PaEks3kDRA/moWzMSUhdm15xCth/Mz/NPYyGTn2u4IdScdV9vLTfLRg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"cross-spawn": "7.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@standard-schema/spec": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/cross-spawn": {
|
||||||
|
"version": "7.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||||
|
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"path-key": "^3.1.0",
|
||||||
|
"shebang-command": "^2.0.0",
|
||||||
|
"which": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/detect-libc": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/effect": {
|
||||||
|
"version": "4.0.0-beta.83",
|
||||||
|
"resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.83.tgz",
|
||||||
|
"integrity": "sha512-0wsak8RtgGAr9UWSbVDgJHZcUqMSvicHcvaZv1MbMM7MCGgW4Rn/137J1MHQbwYPcwYGxT/IqehFd+UbYuj78w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@standard-schema/spec": "^1.1.0",
|
||||||
|
"fast-check": "^4.8.0",
|
||||||
|
"find-my-way-ts": "^0.1.6",
|
||||||
|
"ini": "^7.0.0",
|
||||||
|
"kubernetes-types": "^1.30.0",
|
||||||
|
"msgpackr": "^2.0.1",
|
||||||
|
"multipasta": "^0.2.7",
|
||||||
|
"toml": "^4.1.1",
|
||||||
|
"uuid": "^14.0.0",
|
||||||
|
"yaml": "^2.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fast-check": {
|
||||||
|
"version": "4.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.9.0.tgz",
|
||||||
|
"integrity": "sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/dubzzz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/fast-check"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"pure-rand": "^8.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.17.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/find-my-way-ts": {
|
||||||
|
"version": "0.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-my-way-ts/-/find-my-way-ts-0.1.6.tgz",
|
||||||
|
"integrity": "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/ini": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==",
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/isexe": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/json-schema": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
|
||||||
|
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
|
||||||
|
"license": "(AFL-2.1 OR BSD-3-Clause)"
|
||||||
|
},
|
||||||
|
"node_modules/kubernetes-types": {
|
||||||
|
"version": "1.30.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz",
|
||||||
|
"integrity": "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==",
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
},
|
||||||
|
"node_modules/msgpackr": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"optionalDependencies": {
|
||||||
|
"msgpackr-extract": "^3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/msgpackr-extract": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"node-gyp-build-optional-packages": "5.2.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"download-msgpackr-prebuilds": "bin/download-prebuilds.js"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4",
|
||||||
|
"@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4",
|
||||||
|
"@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4",
|
||||||
|
"@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4",
|
||||||
|
"@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4",
|
||||||
|
"@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/multipasta": {
|
||||||
|
"version": "0.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/multipasta/-/multipasta-0.2.8.tgz",
|
||||||
|
"integrity": "sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/node-gyp-build-optional-packages": {
|
||||||
|
"version": "5.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
|
||||||
|
"integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"detect-libc": "^2.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"node-gyp-build-optional-packages": "bin.js",
|
||||||
|
"node-gyp-build-optional-packages-optional": "optional.js",
|
||||||
|
"node-gyp-build-optional-packages-test": "build-test.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-key": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/pure-rand": {
|
||||||
|
"version": "8.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.2.tgz",
|
||||||
|
"integrity": "sha512-vvuOGgcuPJAirlHvuQw1TrOiw7ptaIXXmIbNuiNOY6lNGJJH49PQ1Kj4nd783nPdQhQdicgOjVI2yI/9BD6/Ng==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/dubzzz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/fast-check"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/shebang-command": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"shebang-regex": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/shebang-regex": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/toml": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/toml/-/toml-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/uuid": {
|
||||||
|
"version": "14.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz",
|
||||||
|
"integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==",
|
||||||
|
"funding": [
|
||||||
|
"https://github.com/sponsors/broofa",
|
||||||
|
"https://github.com/sponsors/ctavan"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist-node/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/which": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"isexe": "^2.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"node-which": "bin/node-which"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yaml": {
|
||||||
|
"version": "2.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
|
||||||
|
"integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"yaml": "bin.mjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 14.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/eemeli"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/zod": {
|
||||||
|
"version": "4.1.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.8.tgz",
|
||||||
|
"integrity": "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/colinhacks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@opencode-ai/plugin": "1.18.7"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
Gate the ibmi-mcp-server on its required environment variables.
|
||||||
|
|
||||||
|
opencode's config schema types `mcp.<name>.enabled` as a static boolean and
|
||||||
|
only interpolates `{env:VAR}` for string values (headers, environment
|
||||||
|
entries), never for the `enabled` flag. Conditionally enabling a server is
|
||||||
|
therefore not expressible in opencode.jsonc alone.
|
||||||
|
|
||||||
|
This plugin uses the `config` hook, which runs once at startup with the live
|
||||||
|
merged config (before MCP servers spawn), to flip `ibmi-server.enabled` to
|
||||||
|
`true` only when every required credential is present. The config keeps
|
||||||
|
`enabled: false` as a fallback default, so the server stays off if this
|
||||||
|
plugin fails to load.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { Plugin } from "@opencode-ai/plugin";
|
||||||
|
|
||||||
|
// Credentials the ibmi-server MCP needs to connect. All must be non-empty.
|
||||||
|
const REQUIRED_ENV = ["DB2i_HOST", "DB2i_USER", "DB2i_PASS"] as const;
|
||||||
|
const SERVER = "ibmi-server";
|
||||||
|
|
||||||
|
export default (async () => {
|
||||||
|
return {
|
||||||
|
config: (cfg) => {
|
||||||
|
const ready = REQUIRED_ENV.every((name) => {
|
||||||
|
const value = process.env[name];
|
||||||
|
return typeof value === "string" && value.length > 0;
|
||||||
|
});
|
||||||
|
const server = cfg.mcp?.[SERVER];
|
||||||
|
if (server && typeof server === "object") {
|
||||||
|
(server as { enabled?: boolean }).enabled = ready;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}) satisfies Plugin;
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://opencode.ai/tui.json",
|
||||||
|
// OpenCode Quota: tuiCommandDisplay chooses whether native TUI command output appears in the session transcript or a local popup dialog.
|
||||||
|
// OpenCode Quota: loads the TUI sidebar, compact status, and local commands.
|
||||||
|
"plugin": [
|
||||||
|
"@slkiser/opencode-quota@latest"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ fi
|
|||||||
|
|
||||||
# Load local environment secrets if the file exists
|
# Load local environment secrets if the file exists
|
||||||
if [ -f "$HOME/.secrets" ]; then
|
if [ -f "$HOME/.secrets" ]; then
|
||||||
set -a
|
set -a
|
||||||
source "$HOME/.secrets"
|
source "$HOME/.secrets"
|
||||||
set +a
|
set +a
|
||||||
fi
|
fi
|
||||||
@@ -29,11 +29,24 @@ if [[ -d $HOME/.scripts && ":$PATH:" != *":$PATH:"* ]]; then
|
|||||||
export PATH=$PATH:$HOME/.scripts
|
export PATH=$PATH:$HOME/.scripts
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Add opencode binaries to $PATH if they exist
|
||||||
|
if [[ -d $HOME/.opencode/bin && ":$PATH:" != *":$HOME/.opencode/bin:"* ]]; then
|
||||||
|
export PATH=$PATH:$HOME/.opencode/bin
|
||||||
|
fi
|
||||||
|
|
||||||
# Linux specific
|
# Linux specific
|
||||||
# if [[ "$(uname -s)" == "Linux" ]]; then
|
# if [[ "$(uname -s)" == "Linux" ]]; then
|
||||||
|
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
|
# WSL specific
|
||||||
|
if [ -n "$IS_WSL" ] || [ -n "$WSL_DISTRO_NAME" ]; then
|
||||||
|
eval $(dbus-launch --sh-syntax 2>/dev/null) 2>/dev/null || true
|
||||||
|
eval $(printf '' | gnome-keyring-daemon --unlock 2>/dev/null) 2>/dev/null || true
|
||||||
|
export SSH_AUTH_SOCK
|
||||||
|
export SECRET_SERVICE_BUS_ADDRESS="unix:path=/run/user/$(id -u)/keyring/control"
|
||||||
|
fi
|
||||||
|
|
||||||
# MacOS specific
|
# MacOS specific
|
||||||
if [[ "$(uname -s)" == "Darwin" ]]; then
|
if [[ "$(uname -s)" == "Darwin" ]]; then
|
||||||
# Add python3.8 $PATH if installed and not already in $PATH
|
# Add python3.8 $PATH if installed and not already in $PATH
|
||||||
|
|||||||
@@ -1,38 +1,73 @@
|
|||||||
# ZSH Plugin and Theme
|
# Cole's Dotfiles
|
||||||
The key to this setup is [GNU `stow`](https://www.gnu.org/software/stow/) a symlink manager. `stow` allows you to easily link the files in the repo directly to where these files would be in your home directory originally.
|
|
||||||
|
|
||||||
I prefer to manually install the my zsh theme and plugins. I like to the `~/.zsh` directory to store the repos of any dependencies I bring into my config.
|
Personal dotfiles for zsh, Neovim, and opencode, plus a few shell scripts. The setup is managed with [GNU `stow`](https://www.gnu.org/software/stow/), a symlink manager that links the files in this repo to their corresponding locations under the home directory.
|
||||||
|
|
||||||
# Prerequisites
|
The zsh theme and plugins are installed manually rather than through a plugin manager. The `~/.zsh` directory is used to hold the git repos of any shell dependencies.
|
||||||
|
|
||||||
## GNU `stow`
|
## Repository layout
|
||||||
Install `stow` with your system's package manager.
|
|
||||||
|
|
||||||
## Nerd Fonts
|
```text
|
||||||
Make sure you get a nerd font [installed](https://github.com/ryanoasis/nerd-fonts) and [configured](https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#meslo-nerd-font-patched-for-powerlevel10k) for your terminal emulators, text editors, and IDEs of choice.
|
.
|
||||||
|
├── .zshrc # zsh config: PATH, history, completions, prompt, aliases
|
||||||
## Powerlevel10k
|
├── .config/
|
||||||
|
│ ├── nvim/ # Neovim config (init.lua, lua/, after/, queries/)
|
||||||
```sh
|
│ └── opencode/ # opencode config (commands, plugins, MCP tools, rules)
|
||||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.zsh/powerlevel10k
|
└── .scripts/ # Standalone shell scripts (on $PATH)
|
||||||
|
└── hello.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## zsh-autosuggestions
|
Everything above is relative to the home directory, which is exactly what `stow .` expects.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
### Required
|
||||||
|
|
||||||
|
- **GNU `stow`** — install with the system package manager (`brew install stow`, `apt install stow`, etc.).
|
||||||
|
- **A Nerd Font** — [install](https://github.com/ryanoasis/nerd-fonts) one and [configure](https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#meslo-nerd-font-patched-for-powerlevel10k) it in the terminal, editor, and IDE of choice. Required for icons in the prompt and `lsd`.
|
||||||
|
|
||||||
|
### Shell theme and plugins
|
||||||
|
|
||||||
|
Clone into `~/.zsh/` so `.zshrc` picks them up automatically:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
|
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.zsh/powerlevel10k
|
||||||
|
git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
|
||||||
```
|
```
|
||||||
|
|
||||||
# Configure a New Machine
|
### Optional
|
||||||
1. Clone this repository to your home directory
|
|
||||||
|
- **`lsd`** — drives the `ls`/`ll`/`lt` aliases in `.zshrc`. Without it, the aliases fall back to the system `ls`. ([github.com/lsd-rs/lsd](https://github.com/lsd-rs/lsd))
|
||||||
|
|
||||||
|
## Configure a new machine
|
||||||
|
|
||||||
|
1. Clone into the home directory:
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/cole-maxwell1/dotfiles.git
|
git clone https://github.com/cole-maxwell1/dotfiles.git ~/dotfiles
|
||||||
```
|
```
|
||||||
2. Run GNU stow
|
2. Symlink the dotfiles into place with stow:
|
||||||
```sh
|
```sh
|
||||||
cd dotfiles && stow .
|
cd ~/dotfiles && stow .
|
||||||
```
|
```
|
||||||
3. Make scripts executable for current user
|
3. Make the scripts executable:
|
||||||
```sh
|
```sh
|
||||||
chmod -R u+x ~/dotfiles/.scripts/
|
chmod -R u+x ~/dotfiles/.scripts/
|
||||||
```
|
```
|
||||||
|
4. If this is the first run with Powerlevel10k, generate the prompt config:
|
||||||
|
```sh
|
||||||
|
p10k configure
|
||||||
|
```
|
||||||
|
5. Restart the shell (or `exec zsh`) to load the new config.
|
||||||
|
|
||||||
|
## Unlink or uninstall
|
||||||
|
|
||||||
|
To remove the symlinks without deleting the repo:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd ~/dotfiles && stow -D .
|
||||||
|
```
|
||||||
|
|
||||||
|
Running `stow .` again re-creates them.
|
||||||
|
|
||||||
|
## Secrets
|
||||||
|
|
||||||
|
If `~/.secrets` exists, `.zshrc` sources it near the top of the file so environment variables (API keys, tokens, etc.) are exported into the shell. This file is intentionally **not** part of the repo — create it locally and keep it out of version control.
|
||||||
|
|||||||
Reference in New Issue
Block a user