chore: update dotfiles with new tool configs and pi settings

- Add configs for goose, herdr, ostt, fabric, zero, gnupg
- Restructure pi models.json (dupont, obelix, bianca, cloudflare)
- Update pi settings with new provider lineup, subagent overrides
- Add pi permission system, search config
- Add desktop entries (RampClient, terminal, tmux)
- Add tmux-open script, rename battery.sh -> battery
- Refactor fish config (simplify conditionals, fix nvim aliases)
- Switch worktrunk commit command from opencode to pi
- Update mise.toml with new tool symlinks
- Fix mise auth.json path reference
This commit is contained in:
2026-07-18 12:19:17 -04:00
parent 156b7261db
commit ffec9e25a0
25 changed files with 651 additions and 82 deletions
+2
View File
@@ -0,0 +1,2 @@
- When reporting information to me, be extremely concise and sacrifice grammar for the sake of concision.
- My obsidian vault is located a /home/sjb/Documents/sjb-brain
View File
+32
View File
@@ -0,0 +1,32 @@
#this is an example yaml config file for fabric
# use fabric pattern names
# pattern: ai
# or use a filename
# pattern: ~/testpattern.md
# model: openai/gpt-5.2
# for models that support context length
modelContextLength: 6000
#frequencypenalty: 0.5
#presencepenalty: 0.5
#topp: 0.67
#topp: 0.0
#seed: 42
#temperature: 0.88
#temperature: 1.0
stream: true
raw: true
# suppress vendor thinking output
suppressThink: false
thinkStartTag: "<think>"
thinkEndTag: "</think>"
# OpenAI Responses API settings
# (use this for llama-server or other OpenAI-compatible local servers)
disableResponsesAPI: true
+5 -12
View File
@@ -32,6 +32,7 @@ if status is-interactive
if command -q fzf
/usr/bin/fzf --fish | source
end
command -q nmcli && alias nmlist "nmcli device wifi list"
if command -q tree
@@ -50,12 +51,9 @@ if status is-interactive
if command -q nvim
set -gx EDITOR nvim
end
if command -q v
alias oo="cd ~/Documents/nca-notes/"
alias on="v +Obsidian new"
alias os="v +Obsidian search"
alias on="nvim +Obsidian new"
alias os="nvim +Obsidian search"
end
command -q jj && alias rev "jj log -G -T 'commit_id.short(8)'"
@@ -80,13 +78,8 @@ if status is-interactive
alias ls="eza -al --color=always --group-directories-first"
end
if command -q bat
alias cat="bat"
end
if command -q git
alias g=git
end
command -q bat && alias cat="bat"
command -q git && alias g=git
set -gx VISUAL $EDITOR
+1 -1
View File
@@ -4,7 +4,7 @@ term=xterm-256color
pad=6x6
initial-window-mode=windowed
workers=0
include=~/.local/share/themes/current/theme/foot.ini
include=~/.config/omarchy/current/theme/foot.ini
[scrollback]
lines=10000
+1
View File
@@ -0,0 +1 @@
use-keyboxd
+3
View File
@@ -0,0 +1,3 @@
enable-ssh-support
default-cache-ttl 60
max-cache-ttl 120
+2
View File
@@ -0,0 +1,2 @@
utf8-strings
use-agent
+189
View File
@@ -0,0 +1,189 @@
extensions:
extensionmanager:
enabled: true
type: platform
name: Extension Manager
description: Enable extension management tools for discovering, enabling, and disabling extensions
display_name: Extension Manager
bundled: true
available_tools: []
chatrecall:
enabled: false
type: platform
name: chatrecall
description: Search past conversations and load session summaries for contextual memory
display_name: Chat Recall
bundled: true
available_tools: []
skills:
enabled: true
type: platform
name: skills
description: Discover and provide skill instructions from filesystem and builtins
display_name: Skills
bundled: true
available_tools: []
todo:
enabled: true
type: platform
name: todo
description: Enable a todo list for goose so it can keep track of what it is doing
display_name: Todo
bundled: true
available_tools: []
code_execution:
enabled: true
type: platform
name: code_execution
description: Goose will make extension calls through code execution, saving tokens
display_name: Code Mode
bundled: true
available_tools: []
memory:
enabled: true
type: builtin
name: memory
description: Tools to save and retrieve durable memories
display_name: Memory
timeout: 300
bundled: true
available_tools: []
computercontroller:
enabled: true
type: builtin
name: computercontroller
description: controls for webscraping, file caching, and automations
display_name: Computer Controller
timeout: 300
bundled: true
available_tools: []
developer:
enabled: true
type: platform
name: developer
description: Write and edit files, and execute shell commands
display_name: Developer
bundled: true
available_tools: []
apps:
enabled: true
type: platform
name: apps
description: Create and manage custom Goose apps through chat. Apps are HTML/CSS/JavaScript and run in sandboxed windows.
display_name: Apps
bundled: true
available_tools: []
tom:
enabled: true
type: platform
name: tom
description: Inject custom context into every turn via GOOSE_MOIM_MESSAGE_TEXT and GOOSE_MOIM_MESSAGE_FILE environment variables
display_name: Top Of Mind
bundled: true
available_tools: []
summon:
enabled: true
type: platform
name: summon
description: Load knowledge and delegate tasks to subagents
display_name: Summon
bundled: true
available_tools: []
analyze:
enabled: true
type: platform
name: analyze
description: 'Analyze code structure with tree-sitter: directory overviews, file details, symbol call graphs'
display_name: Analyze
bundled: true
available_tools: []
summarize:
enabled: false
type: platform
name: summarize
description: Load files/directories and get an LLM summary in a single call
display_name: Summarize
bundled: true
available_tools: []
orchestrator:
enabled: false
type: platform
name: orchestrator
description: 'Manage agent sessions: list, view, start, send messages, interrupt, and stop agents'
display_name: Orchestrator
bundled: true
available_tools: []
autovisualiser:
enabled: false
type: builtin
name: autovisualiser
description: Data visualization and UI generation tools
display_name: Auto Visualiser
timeout: 300
bundled: true
available_tools: []
tutorial:
enabled: false
type: builtin
name: tutorial
description: Access interactive tutorials and guides
display_name: Tutorial
timeout: 300
bundled: true
available_tools: []
GOOSE_TELEMETRY_ENABLED: false
OLLAMA_HOST: 192.168.33.74:11434
CHATGPT_CODEX_REASONING_EFFORT: medium
providers:
chatgpt_codex:
enabled: true
model: gpt-5.5
configured: true
github_copilot:
enabled: true
model: gpt-5-mini
configured: true
custom_opencode_zen:
enabled: true
model: north-mini-code-free
configured: true
ollama:
enabled: true
model: qwen3.6:35b
configured: true
custom_sagacity:
enabled: true
model: gemma4:31b
configured: true
custom_opencode_go:
enabled: true
model: mimo-v2.5-pro
configured: true
opencode_go:
enabled: true
model: deepseek-v4-flash
configured: true
custom_allears:
enabled: true
model: qwen3.6:35b
configured: true
custom_obelix:
enabled: true
model: north-mini-code-1.0
configured: true
custom_dupont:
enabled: true
model: north-mini-code-1.0
configured: true
active_provider: opencode_go
GOOSE_THINKING_EFFORT: off
voice_dictation_provider: openai
GOOSE_MODE: auto
OLLAMA_TIMEOUT: '600'
SECURITY_PROMPT_ENABLED: false
SECURITY_PROMPT_CLASSIFIER_ENABLED: false
SECURITY_PROMPT_CLASSIFIER_MODEL: ''
OPENAI_BASE_URL: https://opencode.ai/zen/go/
OPENAI_HOST: https://api.openai.com
OPENAI_BASE_PATH: v1/chat/completions
OPENAI_TIMEOUT: '600'
+15
View File
@@ -0,0 +1,15 @@
onboarding = false
[ui]
show_agent_labels_on_pane_borders = true
pane_gaps = false
pane_borders = true
[experimental]
pane_history = true
[theme]
name = "gruvbox"
auto_switch = false
[keys]
prefix = "ctrl+space"
+8 -1
View File
@@ -10,6 +10,7 @@ copilot-cli = "latest"
"github:danielmiessler/fabric" = "latest"
"github:mrusme/reader" = "latest"
"github:ulyssa/iamb" = "latest"
"github:zed-industries/codex-acp" = "latest"
herdr = "latest"
"npm:@earendil-works/pi-coding-agent" = "latest"
"npm:mermaid-cli" = "latest"
@@ -25,10 +26,16 @@ run = [
'pi install npm:@tintinweb/pi-subagents',
'pi install npm:context-mode',
'pi install npm:@gotgenes/pi-permission-system',
'test -x /usr/bin/pass && /usr/bin/pass show agent/pi/auth.json > ~/.pi/agent/auth.json'
'test -x /usr/bin/pass && /usr/bin/pass show config/pi/auth.json > ~/.pi/agent/auth.json'
]
[tasks.setup_nvim]
run = [
'uv tool install vectorcode'
]
[tasks.skills]
run = [
'npx skills add SjB/skills',
'npx skills add mattpocock/skills'
]
+21
View File
@@ -0,0 +1,21 @@
config_version = "0.0.25"
[transcription]
provider = "whisper"
model = "small"
[audio]
device = "default"
output_format = "mp3 -ab 16k -ar 12000"
peak_volume_threshold = 90
reference_level_db = -20
visualization = "spectrum"
[popup]
#terminal = "foot"
borderless = true
font_size = 25
height = 15
width = 90
x = 630
y = 790
@@ -0,0 +1,24 @@
{
"permission": {
"*": "ask",
"path": {
"./*": "allow",
"./.*": "allow",
"~/.ssh/*": "deny",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
},
"bash": {
"*": "ask",
"rm -rf *": "deny",
"sudo *": "ask"
},
"external_directory": {
"*": "deny"
}
},
"debugLog": false,
"permissionReviewLog": true,
"yoloMode": true
}
+104 -57
View File
@@ -1,61 +1,108 @@
{
"providers": {
"dupont": {
"baseUrl": "http://172.25.11.30/v1",
"api": "openai-completions",
"models": [
{
"id": "north-mini-code",
"name": "north-mini-code",
"reasoning": true,
"input": ["text"],
"contextWindow": 128000,
"maxTokens": 128000,
"cost": { "input": 1, "output": 1, "cacheRead": 1, "cacheWrite": 1 }
"providers": {
"dupont": {
"baseUrl": "http://172.25.11.30/v1",
"api": "openai-completions",
"models": [
{
"id": "glm-4.7-flash",
"name": "glm-4.7-flash",
"reasoning": true,
"input": [
"text"
],
"contextWindow": 131072,
"maxTokens": 131072,
"cost": {
"input": 1,
"output": 1,
"cacheRead": 1,
"cacheWrite": 1
}
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
},
"obelix": {
"baseUrl": "http://172.25.11.32/v1",
"api": "openai-completions",
"models": [
{
"id": "ornith-1.0-35B",
"name": "ornith-1.0-35B",
"reasoning": true,
"input": [
"text"
],
"contextWindow": 131072,
"maxTokens": 131072,
"cost": {
"input": 1,
"output": 1,
"cacheRead": 1,
"cacheWrite": 1
}
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
},
"bianca": {
"baseUrl": "http://172.25.11.33/v1",
"api": "openai-completions",
"models": [
{
"id": "gemma-4-12B-coder",
"name": "gemma-4-12B-coder",
"reasoning": true,
"input": [
"text"
],
"contextWindow": 128000,
"maxTokens": 65536,
"cost": {
"input": 1,
"output": 1,
"cacheRead": 1,
"cacheWrite": 1
}
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
},
"cloudflare": {
"baseUrl": "https://api.cloudflare.com/client/v4/accounts/e54fa0b493ef3bef55746b1de8d33693/ai/v1",
"api": "openai-completions",
"models": [
{
"id": "@cf/zai-org/glm-5.2",
"name": "@cf/zai-org/glm-5.2",
"reasoning": true,
"input": [
"text"
],
"contextWindow": 256000,
"maxTokens": 256000,
"cost": {
"input": 1,
"output": 1,
"cacheRead": 1,
"cacheWrite": 1
}
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
},
"bianca": {
"baseUrl": "http://172.25.11.33/v1",
"api": "openai-completions",
"models": [
{
"id": "gemma-4-12B-coder",
"name": "gemma-4-12B-coder",
"reasoning": true,
"input": ["text"],
"contextWindow": 128000,
"maxTokens": 65536,
"cost": { "input": 1, "output": 1, "cacheRead": 1, "cacheWrite": 1 }
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
},
"cloudflare": {
"baseUrl": "https://api.cloudflare.com/client/v4/accounts/e54fa0b493ef3bef55746b1de8d33693/ai/v1",
"api": "openai-completions",
"models": [
{
"id": "@cf/zai-org/glm-5.2",
"name": "@cf/zai-org/glm-5.2",
"reasoning": true,
"input": ["text"],
"contextWindow": 256000,
"maxTokens": 256000,
"cost": { "input": 1, "output": 1, "cacheRead": 1, "cacheWrite": 1 }
}
],
"compat": {
"supportsDeveloperRole": true,
"supportsReasoningEffort": true
}
}
}
}
+13
View File
@@ -0,0 +1,13 @@
{
"enabled": true,
"searchEnabled": true,
"fetchEnabled": true,
"providerOverrides": {
"claude-bridge": {
"searchEnabled": false
},
"opencode": {
"searchEnabled": true
}
}
}
+50 -7
View File
@@ -1,19 +1,62 @@
{
"lastChangelogVersion": "0.80.10",
"lastChangelogVersion": "0.80.7",
"theme": "light/dark",
"defaultProvider": "opencode-go",
"defaultModel": "deepseek-v4-flash",
"defaultThinkingLevel": "high",
"defaultProvider": "github-copilot",
"defaultModel": "gpt-5-mini",
"defaultThinkingLevel": "minimal",
"hideThinkingBlock": true,
"compaction": {
"enabled": true
},
"thinkingLevelMap": {
"minimal": null,
"low": "low",
"medium": "medium",
"high": "high",
"xhigh": null,
"max": "max"
},
"enableInstallTelemetry": false,
"enabledModels": [
"opencode-go/qwen3.7-plus",
"opencode-go/deepseek-v4-pro",
"opencode-go/deepseek-v4-flash",
"opencode-go/kimi-k2.7-code",
"openai-codex/gpt-5.4",
"openai-codex/gpt-5.4-mini",
"openai-codex/gpt-5.3-codex-spark",
"obelix/ornith-1.0-35B",
"dupont/glm-4.7-flash",
"github-copilot/gpt-5-mini",
"github-copilot/mai-code-1-flash-picker"
],
"packages": [
"npm:pi-lens",
"npm:@gotgenes/pi-permission-system",
"npm:pi-native-search",
"npm:@tintinweb/pi-subagents",
"npm:context-mode",
"npm:@gotgenes/pi-permission-system"
]
"npm:@tintinweb/pi-subagents"
],
"subagents": {
"agentOverrides": {
"reviewer": {
"model": "opencode-go/mimo-v2.5-pro",
"fallbackModels": [
"openai/gpt-5-mini"
]
},
"planner": {
"model": "opencode-go/qwen3.7-plus"
},
"worker": {
"model": "opencode-go/kimi-k2.7-code"
},
"oracle": {
"model": "opencode-go/qwen3.7-max",
"thinking": "high"
}
}
},
"quietStartup": true,
"steeringMode": "all"
}
-2
View File
@@ -1,3 +1 @@
SetEnv TERM=xterm-256color
+1 -1
View File
@@ -2,7 +2,7 @@ worktree-path = "{{ repo_path }}/../wt-{{ branch | sanitize }}"
[commit.generation]
command = "opencode run -m github-copilot/gpt-5-mini --variant fast"
command = "pi --model github-copilot/gpt-5-mini -p"
[post-create]
misetrust = "mise trust"
+20
View File
@@ -0,0 +1,20 @@
{
"activeProvider": "chatgpt",
"providers": [
{
"name": "chatgpt",
"provider_kind": "openai-compatible",
"catalogID": "chatgpt",
"baseURL": "https://chatgpt.com/backend-api/codex",
"apiFormat": "chat-completions",
"model": "gpt-5.5"
}
],
"mcp": {},
"sandbox": {},
"notify": {},
"tools": {},
"swarm": {},
"preferences": {},
"keybindings": {}
}
+10
View File
@@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Name=RampClient PRD
GenericName=Java Web Start Application
Comment=RampClient PRD
Categories=Network;Desktop;Java;Javaws;
Type=Application
Icon=/home/sjb/.config/icedtea-web/icons/b1bfbd7f-6c3e-40cf-8023-752cc6c45b66
X-Vendor=UWO
Exec="/opt/OpenWebStart/javaws" "https://wts.uwo.ca/ramp/prd/rampclient-prd.jnlp"
+11
View File
@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Exec=foot
Icon=foot
Terminal=false
Categories=System;TerminalEmulator;
Keywords=shell;prompt;command;commandline;
Name=Terminal
GenericName=Terminal
Comment=A wayland native terminal emulator
+9
View File
@@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Name=Tmux Terminal
Comment=Tmux Terminal
Exec=foot tmux new -A -s main
Terminal=false
Type=Application
Icon=tmux
StartupNotify=true
+14
View File
@@ -16,6 +16,7 @@ dotfiles.default_mode = "symlink-each"
"~/.config/btop/themes/current.theme" = { source = "~/.config/omarchy/current/theme/btop.theme", mode = "symlink" }
"~/.config/emacs" = "config/emacs"
"~/.config/environment.d" = "config/environment.d"
"~/.gnupg" = "config/gnupg"
"~/.config/environment.d/dotfiles.conf" = { source = "templates/dofiles.conf.tmpl", template = "tera", mode = "template" }
"~/.config/fish" = "config/fish" # check if we really need the fisher plugins
"~/.config/gdb" = "config/gdb"
@@ -23,6 +24,10 @@ dotfiles.default_mode = "symlink-each"
"~/.config/ghostty/theme" = { source = "~/.config/omarchy/current/theme/ghostty.conf", mode = "symlink" }
"~/.config/git" = "config/git"
"~/.config/git/local" = { source = "templates/git-local.tmpl", mode = "template", template = "tera" }
"~/.config/goose" = "config/goose"
"~/.config/herdr" = "config/herdr"
"~/.config/ostt" = "config/ostt"
"~/.config/fabric" = "config/fabric"
"~/.config/fontconfig" = { source = "config/fontconfig", mode = "copy" }
"~/.config/foot" = "config/foot"
"~/.config/hypr" = "config/hypr"
@@ -48,15 +53,24 @@ dotfiles.default_mode = "symlink-each"
"~/.config/worktrunck" = "config/worktrunk"
"~/.config/chromium-flags.conf" = { source = "config/chromium-flags.conf", mode = "symlink" }
"~/.profile" = { source = "config/profile", mode = "symlink" }
"~/.config/zero" = "config/zero"
"~/.local/share/fonts/" = { source = "fonts", mode = "copy" }
# Desktop files
"~/.local/share/applications/RampClient.desktop" = { source = "desktop/RampClient.desktop", mode = "symlink" }
"~/.local/share/applications/terminal.desktop" = { source = "desktop/terminal.desktop", mode = "symlink" }
"~/.local/share/applications/tmux.desktop" = { source = "desktop/tmux.desktop", mode = "symlink" }
# scripts.
"~/.local/bin/hyprland-activeworkspace" = { source = "script/hyprland-activeworkspace", mode = "symlink" }
"~/.local/bin/hyprland-keybindings" = { source = "script/hyprland-keybindings", mode = "symlink" }
"~/.local/bin/hyprland-fetch-client" = { source = "script/hyprland-fetch-client", mode = "symlink" }
"~/.local/bin/hyprland-focus-client" = { source = "script/hyprland-focus-client", mode = "symlink" }
"~/.local/bin/battery" = { source = "script/battery", mode = "symlink" }
# "~/.config/bin/ec" = { source = "script/ec", mode = "symlink" }
"~/.local/bin/tmux-open" = { source = "script/tmux-open", mode = "symlink" }
"~/.local/bin/active-workspace" = { source = "script/active-workspace", mode = "symlink" }
"~/.local/bin/avr-flash" = { source = "script/avr-flash", mode = "symlink" }
"~/.local/bin/dfu-flash" = { source = "script/dfu-flash", mode = "symlink" }
+115
View File
@@ -0,0 +1,115 @@
#!/usr/bin/env bash
set -euo pipefail
# tmux-open — open a new tmux window (or session) and run a command
# Usage: tmux-open [-k|--keep] [-h|--help] <window-name> <start-dir> <cmd> [args...]
usage() {
cat <<'EOF'
Usage: tmux-open [-k|--keep] [-h|--help] <window-name> <start-dir> <cmd> [args...]
Open a new tmux window in the current session and run a command.
If not inside tmux, create a new session named after the window and attach.
Positional arguments:
window-name Name for the new tmux window (and session, if creating one)
start-dir Working directory for the new window
cmd [args...] Command to run (variadic)
Options:
-k, --keep After the command exits, keep the pane visible (remain-on-exit)
so you can inspect output. Default: pane closes when command exits.
-h, --help Show this help message
If `mise` is on PATH, the command runs under `mise x`.
Errors:
- tmux not installed
- fewer than 3 positional args
- start-dir does not exist
- a window with the same name already exists in the current session
EOF
}
# --- Flag parsing ---
keep_shell=0
while (( $# > 0 )); do
case "$1" in
-k|--keep) keep_shell=1; shift ;;
-h|--help) usage; exit 0 ;;
--) shift; break ;;
-*) echo "error: unknown option: $1" >&2; usage >&2; exit 1 ;;
*) break ;;
esac
done
# --- Positional arg validation ---
if (( $# < 3 )); then
echo "error: expected at least 3 positional arguments (window-name, start-dir, cmd)" >&2
usage >&2
exit 1
fi
window_name="$1"; shift
start_dir="$1"; shift
cmd_args=("$@")
# --- Pre-flight checks ---
if ! command -v tmux >/dev/null 2>&1; then
echo "error: tmux is not installed or not on PATH" >&2
exit 1
fi
if [[ ! -d "$start_dir" ]]; then
echo "error: directory does not exist: $start_dir" >&2
exit 1
fi
if (( ${#cmd_args[@]} == 0 )); then
echo "error: no command specified" >&2
exit 1
fi
# Duplicate window name check (only relevant inside tmux)
if [[ -n "${TMUX:-}" ]]; then
if tmux list-windows -F '#{window_name}' | grep -Fxq "$window_name"; then
echo "error: a window named '$window_name' already exists in the current session" >&2
exit 1
fi
fi
# --- Detect mise ---
has_mise=0
if command -v mise >/dev/null 2>&1; then
has_mise=1
fi
# --- Build the command for the new window ---
# We need to construct a single shell command string for tmux.
# The command runs; pane closes on exit (or stays visible with --keep via remain-on-exit).
# Build the inner command based on mode and mise availability
# For argv mode, quote each argument
quoted_args=()
for arg in "${cmd_args[@]}"; do
quoted_args+=("$(printf '%q' "$arg")")
done
if (( has_mise )); then
inner_cmd="mise x -- ${quoted_args[*]}"
else
inner_cmd="${quoted_args[*]}"
fi
# --- Create window or session ---
if [[ -n "${TMUX:-}" ]]; then
tmux new-window -n "$window_name" -c "$start_dir" "$inner_cmd"
if (( keep_shell )); then
tmux set-option remain-on-exit on
fi
else
tmux new-session -d -n "$window_name" -s "$window_name" -c "$start_dir" "$inner_cmd"
if (( keep_shell )); then
tmux set-option -t "$window_name" remain-on-exit on
fi
tmux attach-session -t "$window_name"
fi