Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
c8d425f
refactor: add terminal-native notification routing
Elliot-32 Sep 14, 2026
440afb7
refactor: load command notification routing everywhere
Elliot-32 Sep 14, 2026
0604437
refactor: replace WSL-specific notification shim
Elliot-32 Sep 14, 2026
5ceff25
feat: enable OSC 777 notifications in Windows Terminal
Elliot-32 Sep 14, 2026
7e58ccd
refactor: install all Windows Terminal integration fragments
Elliot-32 Sep 14, 2026
2b87e15
docs: describe Windows Terminal integration broadly
Elliot-32 Sep 14, 2026
97559f7
refactor: drop obsolete WinRT notification helper
Elliot-32 Sep 14, 2026
de34037
test: cover terminal-native notification routing
Elliot-32 Sep 14, 2026
a00c26f
test: replace WSL toast tests with terminal routing tests
Elliot-32 Sep 14, 2026
c6178fa
test: validate terminal notification routing
Elliot-32 Sep 14, 2026
49035d8
docs: describe terminal-native command notifications
Elliot-32 Sep 14, 2026
5a4c387
test: validate Windows Terminal notification capability
Elliot-32 Sep 14, 2026
1156571
fix: keep Windows Terminal bootstrap shellcheck-clean
Elliot-32 Sep 14, 2026
43a9871
fix: avoid spaces in tmux passthrough sequences
Elliot-32 Sep 14, 2026
db32822
test: simplify terminal notification protocol coverage
Elliot-32 Sep 14, 2026
80f1607
fix: source notification routing successfully when inactive
Elliot-32 Sep 14, 2026
81c437c
refactor: drop obsolete Sheldon WSL profile
Elliot-32 Sep 14, 2026
b38c03e
refactor: limit terminal notifications to Ghostty WT and Rio
Elliot-32 Sep 14, 2026
99ea530
test: scope terminal routing to Ghostty WT and Rio
Elliot-32 Sep 14, 2026
59cfb89
docs: limit notification support to Ghostty WT and Rio
Elliot-32 Sep 14, 2026
42a35cb
refactor: limit terminal notifications to Ghostty and WT
Elliot-32 Sep 14, 2026
246234a
test: narrow terminal notification coverage
Elliot-32 Sep 14, 2026
fc1b83e
feat: route Herdr notifications through terminal
Elliot-32 Sep 14, 2026
3c4f3d1
chore: track Herdr terminal notification config
Elliot-32 Sep 14, 2026
f65c983
chore: enroll Herdr config in setup history
Elliot-32 Sep 14, 2026
fca38a0
docs: narrow notification support scope
Elliot-32 Sep 14, 2026
f00f571
docs: document Herdr terminal notification config
Elliot-32 Sep 14, 2026
cc4633e
test: validate Herdr terminal notification delivery
Elliot-32 Sep 14, 2026
5592318
refactor: make terminal notifications self-contained
Elliot-32 Sep 15, 2026
b417d5a
refactor: remove bgnotify dependency
Elliot-32 Sep 15, 2026
4fc4ad8
test: cover self-contained terminal notifications
Elliot-32 Sep 15, 2026
ebe3ea4
docs: describe native terminal notification hooks
Elliot-32 Sep 15, 2026
ce914cf
test: avoid timing-sensitive notification assertions
Elliot-32 Sep 15, 2026
c4d0d4b
test: exercise terminal notify in interactive zsh
Elliot-32 Sep 15, 2026
cc52db2
docs: keep notification internals out of readme
Elliot-32 Sep 15, 2026
9ded697
fix: ignore inherited WT marker in Ghostty
Elliot-32 Sep 15, 2026
9118407
test: cover Ghostty inheriting WT_SESSION
Elliot-32 Sep 15, 2026
7bea34e
fix: skip Windows Terminal notifier in tmux
Elliot-32 Sep 15, 2026
38db4a3
test: cover intentional tmux exclusion
Elliot-32 Sep 15, 2026
c017dca
docs: note tmux notification exclusion
Elliot-32 Sep 15, 2026
028e1c0
test: fail terminal notification checks fast
Elliot-32 Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .agents/skills/elliot-dotfiles/references/repository-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Environment selector restored to `~/.miserc.toml`. It detects Arch, Fedora, RHEL
- `config/conf.d/packages.dnf.toml`: DNF-family packages/settings, including Fcitx5 packages.
- `config/conf.d/packages.pacman.toml`: Pacman/Arch packages/settings, including Fcitx5 packages.
- `config/conf.d/platform.omarchy.toml`: Omarchy-specific tracked theme files and theme bootstrap behavior.
- `config/conf.d/platform.wsl.toml`: WSL behavior and Windows font bootstrap override.
- `config/conf.d/platform.wsl.toml`: WSL behavior and Windows font/bootstrap integration override.
- `config/conf.d/platform.wslg.toml`: WSLg-specific configuration.
- `config/config.flatpak.toml`: Flatpak-specific bootstrap/update behavior.

Expand All @@ -44,13 +44,14 @@ These files are restored directly to their application paths and use `mode = "tr
- `home/.config/yazi/`;
- `home/.config/topgrade.toml` and `home/.config/topgrade.systemd.toml`;
- `home/.config/ghostty/config`;
- `home/.config/herdr/config.toml`;
- `home/.config/omarchy/themed/gomi.yaml.tpl`, `home/.config/omarchy/themed-links.toml`, and `home/.config/omarchy/hooks/theme-set.d/50-themed-links`;
- `home/.config/xdg-terminals.list`;
- `home/.config/fcitx5/profile`;
- `home/.config/environment.d/90-fcitx5.conf`;
- `home/.local/share/mise-completions-sync/registry.toml`.

Fcitx5 user configuration is shared across APT, DNF, and Pacman systems; only package installation stays package-manager-specific. `~/.gitconfig` is managed only through a block edit so machine-local identity is not synchronized.
Herdr's tracked config routes agent completion/input notifications through the outer terminal with `[ui.toast] delivery = "terminal"`. Fcitx5 user configuration is shared across APT, DNF, and Pacman systems; only package installation stays package-manager-specific. `~/.gitconfig` is managed only through a block edit so machine-local identity is not synchronized.

## Bundled assets and scripts

Expand All @@ -59,8 +60,9 @@ Fcitx5 user configuration is shared across APT, DNF, and Pacman systems; only pa
- `config/scripts/bootstrap-ghostty-fedora.sh`: Fedora Ghostty helper.
- `config/scripts/bootstrap-windows.sh`: WSL-side wrapper that installs the Windows JetBrainsMono Nerd Font only.
- `config/scripts/bootstrap-windows.ps1`: Windows-native WinGet font installer.
- `config/scripts/bootstrap-windows-terminal.sh`: WSL-side Windows Terminal integration for keybindings and terminal-native notifications.
- `config/scripts/tinty-windows-terminal.sh`: Tinty-side Windows Terminal integration; writes `tinty.json`, registers its JSONC import, and removes legacy `palette.json` state.
- `config/scripts/ensure-windows-terminal-import.cjs`: JSONC editor used by the Tinty Windows Terminal helper.
- `config/scripts/ensure-windows-terminal-import.cjs`: JSONC editor used by Windows Terminal integration helpers.
- `config/scripts/tinty-theme-picker.sh`: platform-independent Gum-based Tinty scheme picker with apply/restore preview flow.
- `config/scripts/login-github.sh`: GitHub login/configuration workflow.

Expand Down
6 changes: 6 additions & 0 deletions .mise-history/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@
"encrypt": false,
"variants": []
},
{
"path": "home/.config/herdr/config.toml",
"autosave": true,
"encrypt": false,
"variants": []
},
{
"path": "home/.config/omarchy/hooks/theme-set.d/50-themed-links",
"autosave": true,
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,14 @@ Omarchy 環境則直接使用 Omarchy 的主題系統,不需要另外使用 Ti

## Windows / WSL

在 WSL bootstrap 時會一併安裝 Windows 端的 JetBrainsMono Nerd Font,並套用 Windows Terminal 快捷鍵;`Ctrl+Shift+Z` 會送出 Zsh redo 所需的 escape sequence。需要再次執行 Windows 整合 bootstrap 時可使用:
在 WSL bootstrap 時會一併安裝 Windows 端的 JetBrainsMono Nerd Font,並套用 Windows Terminal 整合:`Ctrl+Shift+Z` 會送出 Zsh redo 所需的 escape sequence,也會啟用長時間 command 的原生桌面通知。需要再次執行 Windows 整合 bootstrap 時可使用:

```bash
mise run bootstrap:windows
```

Ghostty 與 Windows Terminal 會在長時間 command 完成後顯示通知,包含成功或失敗狀態、執行時間與原始 command;Windows Terminal 的 command-completion 通知不支援 tmux session,其他 terminal 也不額外啟用此通知。Herdr 會在 agent 完成或等待輸入時使用 terminal notification。

## 常用指令

| 用途 | 指令 |
Expand Down
5 changes: 1 addition & 4 deletions config/conf.d/platform.wsl.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
# WSL-specific mise configuration.
# This fragment is loaded only when the `wsl` environment is active.

[env]
SHELDON_PROFILE = "wsl"

[tasks."bootstrap:windows"]
description = "Configure Windows font and Terminal keybinds"
description = "Configure Windows font and Terminal integration"
hide = false
run = [
"sh \"${MISE_CONFIG_DIR:-$HOME/.config/mise}/scripts/bootstrap-windows.sh\"",
Expand Down
1 change: 1 addition & 0 deletions config/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ fc-cache -f "$font_dir"
"~/.config/topgrade.toml" = { mode = "track" }
"~/.config/topgrade.systemd.toml" = { mode = "track" }
"~/.config/ghostty/config" = { mode = "track" }
"~/.config/herdr/config.toml" = { mode = "track" }
"~/.config/xdg-terminals.list" = { mode = "track" }
"~/.config/fcitx5/profile" = { mode = "track" }
"~/.config/environment.d/90-fcitx5.conf" = { mode = "track" }
Expand Down
16 changes: 11 additions & 5 deletions config/hk.pkl
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,19 @@ local checks = new Mapping<String, Step> {
)
check = "zsh -n {{files}}"
}
["wsl-notify"] {
["terminal-notify"] {
glob = List(
"../home/.config/sheldon/plugins/wsl-notify.plugin.zsh",
"scripts/wsl-notify.ps1",
"tests/wsl-notify.zsh"
"../home/.config/herdr/config.toml",
"../home/.config/sheldon/plugins/terminal-notify.plugin.zsh",
"tests/terminal-notify.zsh",
"windows-terminal/notification.json"
)
check = "zsh tests/wsl-notify.zsh"
check = """
set -e
zsh tests/terminal-notify.zsh
jq -e '.profiles.defaults["compatibility.allowOSC777"] == true' windows-terminal/notification.json >/dev/null
grep -Fxq 'delivery = "terminal"' ../home/.config/herdr/config.toml
Comment thread
Elliot-32 marked this conversation as resolved.
"""
}
}

Expand Down
24 changes: 14 additions & 10 deletions config/scripts/bootstrap-windows-terminal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ set -eu

jsonc_parser_version=3.3.1
config_dir=${MISE_CONFIG_DIR:-$HOME/.config/mise}
fragment="$config_dir/windows-terminal/keybind.json"
editor_script="$config_dir/scripts/ensure-windows-terminal-import.cjs"
import_name=keybind.json

if [ ! -f "$fragment" ]; then
printf 'windows terminal bootstrap: keybind fragment was not found: %s\n' "$fragment" >&2
exit 1
fi
for import_name in keybind.json notification.json; do
fragment="$config_dir/windows-terminal/$import_name"
if [ ! -f "$fragment" ]; then
printf 'windows terminal bootstrap: fragment was not found: %s\n' "$fragment" >&2
exit 1
fi
done

if [ ! -f "$editor_script" ]; then
printf 'windows terminal bootstrap: JSONC editor was not found: %s\n' "$editor_script" >&2
Expand Down Expand Up @@ -85,14 +86,17 @@ do

if [ "$found" = false ]; then
if ! command -v node >/dev/null 2>&1 || ! command -v npm >/dev/null 2>&1; then
printf 'windows terminal bootstrap: node and npm are required to register %s\n' "$import_name" >&2
printf 'windows terminal bootstrap: node and npm are required to register terminal fragments\n' >&2
exit 1
fi
ensure_jsonc_parser
found=true
fi

cp -f -- "$fragment" "$state_directory/$import_name"
NODE_PATH="$jsonc_node_path${NODE_PATH:+:$NODE_PATH}" \
node "$editor_script" "$settings_path" "$import_name"
for import_name in keybind.json notification.json; do
fragment="$config_dir/windows-terminal/$import_name"
cp -f -- "$fragment" "$state_directory/$import_name"
NODE_PATH="$jsonc_node_path${NODE_PATH:+:$NODE_PATH}" \
node "$editor_script" "$settings_path" "$import_name"
done
done
Loading