From c2064d501af6dec3fa04bd327cb0f8c70367ad6b Mon Sep 17 00:00:00 2001 From: Steve Beaulac Date: Tue, 7 Jul 2026 15:53:49 -0400 Subject: [PATCH] feat: update opencode config with new providers, clean up tmux config, add pi agent & installer scripts --- config/opencode/opencode.json | 94 +++++++++---- config/pi/agent/models.json | 61 ++++++++ config/pi/agent/settings.json | 12 ++ config/tmux/tmux.conf | 253 +++++++++++++++++----------------- installer/goose-desktop.sh | 7 + installer/goose.sh | 7 + installer/obsidian.sh | 8 ++ installer/pi-agent.sh | 9 ++ 8 files changed, 302 insertions(+), 149 deletions(-) create mode 100644 config/pi/agent/models.json create mode 100644 config/pi/agent/settings.json create mode 100644 installer/goose-desktop.sh create mode 100644 installer/goose.sh create mode 100644 installer/obsidian.sh diff --git a/config/opencode/opencode.json b/config/opencode/opencode.json index 13b04cc..400aa85 100644 --- a/config/opencode/opencode.json +++ b/config/opencode/opencode.json @@ -1,27 +1,75 @@ { - "$schema": "https://opencode.ai/config.json", - "model": "openai/gpt-5.3-codex", - "theme": "gruvbox", - "autoupdate": true, - "share": "disabled", - "keybinds": { - "messages_half_page_up": "ctrl+u", - "messages_half_page_down": "ctrl+d", - "messages_first": "ctrl+g", - "messages_last": "ctrl+l", - }, - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama", - "options": { - "baseURL": "http://129.100.33.66:11434/v1" - }, - "models": { - "qwen3-coder": { - "name": "qwen3-coder-next" + "$schema": "https://opencode.ai/config.json", + "model": "opencode-go/mimo-v2.5-pro", + "autoupdate": true, + "share": "disabled", + "provider": { + "vllm": { + "npm": "@ai-sdk/openai-compatible", + "name": "dupont vLLM server", + "options": { + "baseURL": "http://172.25.11.32/v1" + }, + "models": { + "north-mini-code": { + "name": "north-mini-code", + "limit": { + "context": 32768, + "output": 4096 + } + } + } + }, + "allears": { + "npm": "@ai-sdk/openai-compatible", + "name": "allears", + "options": { + "baseURL": "http://192.168.33.74:11434/v1" + }, + "models": { + "qwen3.5": { + "name": "qwen3.5:35b" + }, + "qwen3.6": { + "name": "qwen3.6:35b" + }, + "lfm2": { + "name": "lfm2:latest" + } + } + }, + "dupont": { + "npm": "@ai-sdk/openai-compatible", + "name": "dupont", + "options": { + "discoverModels": true, + "baseURL": "http://172.25.11.30/v1" + }, + "models": { + "north-mini-code": { "name": "north-mini-code" } + } + }, + "obelix": { + "npm": "@ai-sdk/openai-compatible", + "name": "obelix", + "options": { + "discoverModels": true, + "baseURL": "http://172.25.11.32/v1" + }, + "models": { + "north-mini-code": { "name": "north-mini-code" } + } + }, + "bianca": { + "npm": "@ai-sdk/openai-compatible", + "name": "bianca", + "options": { + "discoverModels": true, + "baseURL": "http://172.25.11.33/v1" + }, + "models": { + "north-mini-code": { "name": "north-mini-code" } + } } - } } - } } diff --git a/config/pi/agent/models.json b/config/pi/agent/models.json new file mode 100644 index 0000000..c1f95d8 --- /dev/null +++ b/config/pi/agent/models.json @@ -0,0 +1,61 @@ +{ + "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 } + } + ], + "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 + } + } + } +} diff --git a/config/pi/agent/settings.json b/config/pi/agent/settings.json new file mode 100644 index 0000000..f46b888 --- /dev/null +++ b/config/pi/agent/settings.json @@ -0,0 +1,12 @@ +{ + "lastChangelogVersion": "0.80.2", + "theme": "light/dark", + "defaultProvider": "opencode-go", + "defaultModel": "deepseek-v4-flash", + "defaultThinkingLevel": "high", + "hideThinkingBlock": true, + "compaction": { + "enabled": true + }, + "enableInstallTelemetry": false +} \ No newline at end of file diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf index 2c4e2c8..d5d08ca 100644 --- a/config/tmux/tmux.conf +++ b/config/tmux/tmux.conf @@ -1,159 +1,160 @@ -#set-option -g default-terminal 'screen-256color' - set-option -g terminal-overrides ',xterm-256color:RGB' - # set -g default-terminal "tmux-256color" - set -as terminal-feature ",foot*:RGB" +# set-option -g default-terminal 'screen-256color' +# set-option -g terminal-overrides ',xterm-256color:RGB' +# set -g default-terminal "tmux-256color" +set -as terminal-feature ",foot*:RGB" - # screen mode - #set -g default-terminal "${TERM}" - #set -g default-terminal "tmux-256color" - set -ag terminal-overrides ",xterm-256color:RGB" +# screen mode +# set -g default-terminal "${TERM}" +# set -g default-terminal "tmux-256color" +# set -ag terminal-overrides ",xterm-256color:RGB" - # colors - # set -ag terminal-overrides ",xterm*:Tc" +# colors +# set -ag terminal-overrides ",xterm*:Tc" - # undercurl support - set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' - # underscore colours - needs tmux-3.0 - set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' - # allow terminal scrolling - #set -g terminal-overrides 'xterm*:smcup@:rmcup@' +# undercurl support +# set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' +# underscore colours - needs tmux-3.0 +# set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' +# allow terminal scrolling +#set -g terminal-overrides 'xterm*:smcup@:rmcup@' - # default shell - set -g default-shell "/usr/bin/fish" +# default shell +set -g default-shell "/usr/bin/fish" - # auto rename windows - set -g automatic-rename on - set -g automatic-rename-format '#{pane_current_command} #{b:pane_current_path}' - set -g allow-rename on +# auto rename windows +# set -g automatic-rename on +# set -g automatic-rename-format '#{pane_current_command} #{b:pane_current_path}' +set -g allow-rename on - # start with window 1 (instead of 0) - set -g base-index 1 +# start with window 1 (instead of 0) +set -g base-index 1 - # start with pane 1 - setw -g pane-base-index 1 +# start with pane 1 +setw -g pane-base-index 1 - # history - set -g history-limit 5000 +# history +set -g history-limit 5000 - # loud or quiet? - set -g visual-activity off - set -g visual-bell off - set -g visual-silence off - set -g monitor-activity on - set -g bell-action none - set -g allow-passthrough on +# loud or quiet? +set -g visual-activity off +set -g visual-bell off +set -g visual-silence off +set -g monitor-activity on +set -g bell-action none +set -g allow-passthrough on - #set -g bell-on-alert on +#set -g bell-on-alert on - set -s escape-time 1 - setw -g aggressive-resize on - set -g status-keys vi - set-window-option -g mode-keys vi +set -s escape-time 1 +setw -g aggressive-resize on +set -g status-keys vi +set-window-option -g mode-keys vi - set -g extended-keys on - set -g extended-keys-format csi-u - set-option -g focus-events on # TODO: learn how this works - set-option -g set-titles on - set-option -g detach-on-destroy off - set-option -g renumber-windows on - set-option -g set-clipboard on - set-option -g set-titles-string "#S:#{pane_title}" +set -g extended-keys on +set -g extended-keys-format csi-u +set-option -g focus-events on # TODO: learn how this works +set-option -g set-titles on +set-option -g detach-on-destroy off +set-option -g renumber-windows on +set-option -g set-clipboard on +set-option -g set-titles-string "#S:#{pane_title}" - unbind C-Space - set -g prefix C-Space - bind C-Space send-prefix - #unbind C-s - unbind C-b - #set -g prefix C-s - #bind C-s send-prefix +unbind C-Space +set -g prefix C-Space +bind C-Space send-prefix +#unbind C-s +unbind C-b +#set -g prefix C-s +#bind C-s send-prefix # Reload the config. - bind r source-file ~/.config/tmux/tmux.conf \; display "Reloaded ~/.config/tmux/tmux.conf" +bind r source-file ~/.config/tmux/tmux.conf \; display "Reloaded ~/.config/tmux/tmux.conf" - bind-key -T copy-mode-vi v send-keys -X begin-selection - bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel - bind c new-window -c "#{pane_current_path}" - bind e run "tmux split -h /usr/bin/nvim" - bind o display-popup -w 80% -h 80% -E /usr/bin/opencode - bind g display-popup -w 80% -h 80% -E /usr/bin/lazygit +bind c new-window -c "#{pane_current_path}" +bind e run "tmux split -h /usr/bin/nvim" +bind o display-popup -w 80% -h 80% -E /usr/bin/opencode +bind g display-popup -w 80% -h 80% -E /usr/bin/lazygit - # split windows like vim - # vim's definition of a horizontal/vertical split is reversed from tmux's - bind v split-window -h -c "#{pane_current_path}" - bind s split-window -v -c "#{pane_current_path}" +# split windows like vim +# vim's definition of a horizontal/vertical split is reversed from tmux's +bind v split-window -h -c "#{pane_current_path}" +bind s split-window -v -c "#{pane_current_path}" - # Rotate windows - bind -r , select-window -t :- - bind -r . select-window -t :+ +# Rotate windows +bind -r , select-window -t :- +bind -r . select-window -t :+ - bind Space choose-tree - bind -r < previous-layout - bind -r > next-layout +bind Space choose-tree +bind -r < previous-layout +bind -r > next-layout - # open man page in new window - bind / command-prompt "split window 'exec man %%'" +# open man page in new window +bind / command-prompt "split window 'exec man %%'" - bind B command-prompt -p "New Session:" "new-session -A -s '%%'" - bind Tab switch-client -l +bind B command-prompt -p "New Session:" "new-session -A -s '%%'" +bind Tab switch-client -l - bind a run-shell -b "~/.local/bin/t" - bind Enter run-shell -b "~/.local/bin/s" - bind Q confirm kill-session +bind t run-shell -b "~/.local/bin/t" +bind Enter run-shell -b "~/.local/bin/s" +bind Q confirm kill-session - bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log" +bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log" - # join pane - bind-key C-h choose-window 'join-pane -h -s "%%"' - bind-key C-v choose-window 'join-pane -s "%%"' +# join pane +bind-key C-h choose-window 'join-pane -h -s "%%"' +bind-key C-v choose-window 'join-pane -s "%%"' - bind -r h select-pane -L - bind -r j select-pane -D - bind -r k select-pane -U - bind -r l select-pane -R +bind -r h select-pane -L +bind -r j select-pane -D +bind -r k select-pane -U +bind -r l select-pane -R - # resize panes like vim - # feel free to change the "1" to however many lines you want to resize by, only - # one at a time can be slow - bind -r H resize-pane -L 5 - bind -r L resize-pane -R 5 - bind -r J resize-pane -D 5 - bind -r K resize-pane -U 5 +# resize panes like vim +# feel free to change the "1" to however many lines you want to resize by, only +# one at a time can be slow +bind -r H resize-pane -L 5 +bind -r L resize-pane -R 5 +bind -r J resize-pane -D 5 +bind -r K resize-pane -U 5 - # bind : to command-prompt like vim - # this is the default in tmux already - # bind : command-prompt - - # Alt+number to select window - bind -n M-1 select-window -t 1 - bind -n M-2 select-window -t 2 - bind -n M-3 select-window -t 3 - bind -n M-4 select-window -t 4 - bind -n M-5 select-window -t 5 - bind -n M-6 select-window -t 6 - bind -n M-7 select-window -t 7 - bind -n M-8 select-window -t 8 - bind -n M-9 select-window -t 9 +# bind : to command-prompt like vim +# this is the default in tmux already +# bind : command-prompt - set -g @continuum-restore 'on' - set -g status-position top +# Alt+number to select window +bind -n M-1 select-window -t 1 +bind -n M-2 select-window -t 2 +bind -n M-3 select-window -t 3 +bind -n M-4 select-window -t 4 +bind -n M-5 select-window -t 5 +bind -n M-6 select-window -t 6 +bind -n M-7 select-window -t 7 +bind -n M-8 select-window -t 8 +bind -n M-9 select-window -t 9 + +set -g @continuum-restore 'on' +set -g status-position top - # List of plugins - set -g @plugin 'tmux-plugins/tpm' - set -g @plugin 'tmux-plugins/tmux-sensible' - set -g @plugin 'tmux-plugins/tmux-yank' - set -g @plugin 'tmux-plugins/tmux-resurrect' - set -g @plugin 'tmux-plugins/tmux-continuum' - set -g @plugin 'tmux-plugins/tmux-copycat' - set -g @plugin 'christoomey/vim-tmux-navigator' - set -g @plugin 'sainnhe/tmux-fzf' - set -g @plugin 'joshmedeski/tmux-fzf-url' - set -g @plugin 'aserowy/tmux.nvim' +# List of plugins +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'tmux-plugins/tmux-yank' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-continuum' +set -g @plugin 'tmux-plugins/tmux-copycat' +set -g @plugin 'christoomey/vim-tmux-navigator' +set -g @plugin 'sainnhe/tmux-fzf' +set -g @plugin 'joshmedeski/tmux-fzf-url' +set -g @plugin 'aserowy/tmux.nvim' +set -g @plugin 'vieitesss/agent-radar' - set -g status-left "" - source-file ~/.config/tmux/theme - #set -ag status-right '#(bash ~/.config/tmux/battery.sh) ' +set -g status-left "" +source-file ~/.config/tmux/theme +#set -ag status-right '#(bash ~/.config/tmux/battery.sh) ' - # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) - run '~/.config/tmux/plugins/tpm/tpm' +# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) +run '~/.config/tmux/plugins/tpm/tpm' diff --git a/installer/goose-desktop.sh b/installer/goose-desktop.sh new file mode 100644 index 0000000..86d8845 --- /dev/null +++ b/installer/goose-desktop.sh @@ -0,0 +1,7 @@ +#!/bin/sh -e + +if [[ ! -x "$(command -v goose-desktop)" ]]; then + paru -Sy --needed --noconfirm goose-desktop-bin +fi + +${DOTFILES_DIR}/sync-config config/goose diff --git a/installer/goose.sh b/installer/goose.sh new file mode 100644 index 0000000..289dd98 --- /dev/null +++ b/installer/goose.sh @@ -0,0 +1,7 @@ +#!/bin/sh -e + +if [[ ! -x "$(command -v goose)" ]]; then + paru -Sy --needed --noconfirm codename-goose-bin +fi + +${DOTFILES_DIR}/sync-config config/goose diff --git a/installer/obsidian.sh b/installer/obsidian.sh new file mode 100644 index 0000000..8ecf833 --- /dev/null +++ b/installer/obsidian.sh @@ -0,0 +1,8 @@ +#!/bin/sh -e + +if [[ ! -x "$(command -v obsidian)" ]]; then + paru -Sy --needed --noconfirm obsidian +fi + +xdg-mime default obsidian.desktop x-scheme-handler/obsidian +xdg-settings set default-url-scheme-handler obsidian obsidian.desktop diff --git a/installer/pi-agent.sh b/installer/pi-agent.sh index 529bdde..fc217a5 100755 --- a/installer/pi-agent.sh +++ b/installer/pi-agent.sh @@ -6,4 +6,13 @@ if [[ ! -x "$(command -v pi)" ]]; then npm install -g pi-acp fi +mkdir ~/.pi +ln -snf ~/.pi ~/.config/pi +ln -snf ~/.agents/.agents/AGENTS.md ~/.pi/agent/AGENTS.md +${DOTFILES_DIR}/sync-config config/pi + +if [[ -x "$(command -v pass)" ]]; then + pass show agent/pi/agent/auth.json > ~/.pi/agent/auth.json +fi +