diff --git a/README.md b/README.md index 98fbbda..8a2732d 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ are shared across both systems. | Area | Configuration | | --- | --- | -| Terminal | Ghostty opens the persistent tmux session `main`; `ssht ` nests a persistent remote one; the tmux status bar shows where the active pane runs, running agents, and Claude and Codex limits | -| Shell | Zsh, Oh My Zsh, Starship, fzf, mise, and direnv | +| Terminal | Ghostty native panes and tabs, optional tmux sessions, and SSH helpers | +| Shell | Zsh, Starship, fzf, mise, and direnv | | Editors | Zed, VS Code, Vim, and Neovim | -| Shortcuts | Raycast Caps Lock Hyper translated by Ghostty into tmux commands | +| Shortcuts | Hyper shortcuts for terminal panes and tabs | | Packages | Homebrew profiles on macOS; common native apt packages on Ubuntu | | SSH | Portable client config; keys stay local to each machine | | macOS | Dock, Finder, keyboard, Safari, and general defaults | @@ -59,7 +59,7 @@ sh -c "$(curl -fsLS get.chezmoi.io)" -- -b "$HOME/.local/bin" export PATH="$HOME/.local/bin:$PATH" git clone https://github.com/froppa/dotfiles.git ~/.local/share/chezmoi cd ~/.local/share/chezmoi -chezmoi init --source="$PWD" --promptString 'name=sdf' +chezmoi init --source="$PWD" --promptString 'name=YOUR_NAME' chezmoi diff chezmoi apply -v ``` @@ -68,7 +68,7 @@ If already cloned, use that checkout instead of cloning again. Ubuntu setup installs missing packages with apt and never installs or updates Linuxbrew. An existing Linuxbrew installation is left on disk, but managed Zsh startup no longer adds it to PATH. Personal and work profiles currently share the same -Ubuntu package set. Raycast, Hammerspoon, and iTerm2 configuration is macOS-only. +Ubuntu package set. Raycast and Hammerspoon configuration is macOS-only. The native set covers shell, editor, Git, and common build tools. It does not add third-party repositories or install mise, Codex, Claude Code, Docker, @@ -111,8 +111,8 @@ gh auth login --web This does not authenticate automatically or copy credentials from your Mac. Codex is pinned to the validated CLI version in the script. Runtime installation -is separate; do not run source-building plugin installers until the required -Depot build wrapper is available on the machine. +is separate; install the required runtimes and build tools before running +source-building plugin installers. ### SSH @@ -131,7 +131,6 @@ load the key on first use. Shell startup does not call `ssh-add`. | Component | Once per machine | | --- | --- | | Raycast | Configure Caps Lock as Hyper (`Control+Option+Command`, no Shift) | -| Raycast scripts | Add `~/.config/raycast/scripts/` as a Script Command directory | | Neovim | Open once to finish Lazy, Mason, and tree-sitter setup | | Ghostty | Launched from the Dock or Raycast it has launchd's PATH, so name tmux's absolute path in `~/.config/ghostty/config.local`: `command = direct:/opt/homebrew/bin/tmux new-session -A -s main` | @@ -143,50 +142,41 @@ session restoration. ## Terminal shortcuts -Raycast owns Caps Lock and emits `Ctrl+Option+Command`. Ghostty converts the -following chords to tmux commands. Right Option remains available for Danish -symbols. +Configure Caps Lock as Hyper (`Ctrl+Option+Command`) in Raycast. Ghostty uses +these chords for native panes and tabs; Right Option remains available for +keyboard symbols. | Shortcut | Action | | --- | --- | -| `Command+K` | Clear the active application screen through tmux | -| `Shift+Enter` | Insert a newline in Claude Code and shell prompts | -| `Caps+C` | New window | +| `Command+K` | Clear the active application screen | +| `Shift+Enter` | Let the active application handle newlines | +| `Caps+C` | New tab | | `Caps+I` | Side-by-side pane | | `Caps+-` | Stacked pane | | `Caps+Arrow` | Move between panes | | `Caps+Shift+Arrow` | Resize pane | | `Caps+=` | Spread the panes evenly | -| `Caps+0โ€ฆ9` | Select window | +| `Caps+1โ€ฆ9` | Select tab | | `Caps+Z` | Toggle pane zoom | -| `Caps+R` | Reload tmux | -| `Caps+X` / `Caps+W` | Kill pane after confirmation | -| `Caps+,` | Rename window | -| `Caps+Shift+,` / `Caps+Shift+.` | Move window left / right | -| `Caps+N` / `Caps+P` / `Caps+Tab` | Next, previous, last window | -| `Caps+F` | Pick a window from a list | -| `Caps+B` | Break the pane out into its own window | -| `Caps+J` / `Caps+M` | Join a pane from, or move this pane to, another window | -| `Caps+U` | Pick a URL from the pane history and open it | -| `Caps+H` | tmux cheat sheet; the bottom status row carries the hint | -| `Caps+Space` | The local tmux prefix; press the key after it | - -Every chord is the tmux prefix `Ctrl-a` plus the same key, so it also works -from a plain keyboard. Windows are named after their directory or ssh host; -rename one and the name sticks. Mouse drag, double-click, and triple-click copy -to the clipboard without leaving copy mode; `Cmd+V` pastes; `Cmd+click` opens -a link; hold Shift to let Ghostty select text itself. `tm` attaches the same -session from any other terminal. +| `Caps+X` | Close the active surface | +| `Caps+,` | Rename tab | +| `Caps+Shift+,` / `Caps+Shift+.` | Move tab left / right | +| `Caps+N` / `Caps+P` | Next / previous tab | + +tmux uses the prefix `Ctrl-a`. Its cheat sheet lists window, pane, and copying +commands. Windows are named after their directory or SSH host; a manual name +persists. Mouse drag, double-click, and triple-click copy without leaving copy +mode. Hold Shift to let Ghostty select text itself. `tm` attaches a persistent +session from another terminal. `ssht [session]` attaches a persistent tmux session on a remote machine -inside the current pane. While it runs there, the Caps chords drive the remote -tmux; `Caps+Space` or `Ctrl-a` and then the key still reach the local one, as -does a click on the local status bar. Run outside tmux, `ssht` instead tints +inside the current pane. Use tmux's prefix commands to control its windows +and panes. Run outside tmux, `ssht` instead tints Ghostty's background in the host's colour and titles the tab after it until the connection ends. `ssht` also forwards the Mac's clipboard socket, which the -`com.froppa.clip-serve` LaunchAgent serves. The `wl-paste` shim on the remote +`local.dotfiles.clip-serve` LaunchAgent serves. The `wl-paste` shim on the remote host reads it, so a screenshot copied on the Mac (`Cmd+Ctrl+Shift+4`) pastes into a remote Claude Code with `Ctrl+V`. Only images cross; text still pastes with `Cmd+V`. Plain `ssh` does not carry it. @@ -196,8 +186,8 @@ connection dropped, a crashed TUI), the next prompt switches mouse, focus, and extended-key reporting off again, so clicks stop typing escape sequences. The hooks also record each session's state under -`~/.cache/agents/claude-`, which Verk reads to list a waiting -terminal session in Today and in its menu bar. Outside tmux, the same hooks +`~/.cache/agents/claude-` for terminal status consumers. +Outside tmux, the same hooks retitle the Ghostty tab with the session's state and directory (`โŸณ repo` working, `? repo` waiting for you, `ยท repo` idle), Claude Code rings the terminal bell when it needs attention, and Ghostty marks the tab. Starship's right prompt shows the @@ -223,8 +213,8 @@ status line keeps only model, effort, and context left. Claude Code keeps `~/.claude/settings.json` itself, so the tab-state hooks are installed once per machine with `scripts/claude-tmux-hooks.sh`, which merges -them idempotently. Two unmanaged files under `~/.config/tmux/` keep host -details out of this repository: +them idempotently. Two local configuration files under `~/.config/tmux/` +customize SSH status: | File | Content | | --- | --- | @@ -246,11 +236,6 @@ Machine-specific overrides use unmanaged `*.local` files such as `.zshrc.local`, `.exports.local`, `.aliases.local`, `.functions.local`, and `.gitconfig.local`. -Depot is installed separately with Cargo from `struktly/tools`. The managed -`~/.local/bin/depot` link points to `~/.cargo/bin/depot`, replacing the legacy -Verk entry point. Zsh loads completion from the installed Depot version after -completion initialization; no generated completion file needs updating. - ## Where things live | Path | Purpose | @@ -258,7 +243,6 @@ completion initialization; no generated completion file needs updating. | `home/dot_config/ghostty/` | Ghostty and Hyper mappings | | `home/dot_config/tmux/` | tmux, status scripts, and plugins | | `home/dot_local/bin/` | `clip-serve` (Mac) and the `wl-paste` shim (Linux) behind the ssht clipboard bridge | -| `home/dot_config/raycast/` | Raycast Script Commands | | `home/dot_config/zed/` | Zed settings and keybindings | | `home/dot_config/Code/User/` | VS Code XDG settings | | `home/dot_config/nvim/` | Neovim configuration | @@ -266,7 +250,7 @@ completion initialization; no generated completion file needs updating. | `home/.chezmoiscripts/` | Ordered and change-triggered setup | | `home/.chezmoiexternal.toml` | Pinned shell and TPM sources | | `macos-scripts/` | Auditable macOS defaults | -| `scripts/` | Local SSH key generation, Claude Code hook install, and preference helpers | +| `scripts/` | Local SSH key generation and Claude Code hook install | ## macOS defaults diff --git a/home/.chezmoi.toml.tmpl b/home/.chezmoi.toml.tmpl index 77fc6d6..8924842 100644 --- a/home/.chezmoi.toml.tmpl +++ b/home/.chezmoi.toml.tmpl @@ -1,23 +1,12 @@ -{{ $computerName := "" }} -{{ if eq .chezmoi.os "darwin" }} -{{ $computerName = (output "scutil" "--get" "ComputerName" | trim) }} -{{ else }} -{{ $computerName = (output "hostname" | trim) }} -{{ end }} - {{ $name := promptStringOnce . "name" "name" }} {{ $email := promptStringOnce . "email" "email" }} -{{/* WORK=true selects the work machine setup; anything else (incl. PERSONAL=true) is personal. */}} +{{/* WORK=true selects the work package set. */}} {{ $work := eq (env "WORK" | lower) "true" }} [data] name = {{ $name | quote }} email = {{ $email | quote }} -profile = {{ ternary "work" "personal" $work | quote }} work = {{ $work }} -personal = {{ not $work }} -computerName = {{ $computerName | quote }} -hostname = {{ $computerName | quote }} [github] refreshPeriod = "12h" diff --git a/home/.chezmoidata/20-features.yml b/home/.chezmoidata/20-features.yml index 38e9688..6df7428 100644 --- a/home/.chezmoidata/20-features.yml +++ b/home/.chezmoidata/20-features.yml @@ -1,5 +1,4 @@ --- features: - # Gates the Homebrew env block (incl. 1Password token lookup) in dot_exports.tmpl. - # Requires a working `op` CLI session when enabled. + # Gates optional Homebrew environment preferences in dot_exports.tmpl. brew: false diff --git a/home/.chezmoiignore b/home/.chezmoiignore index 6184f6c..060f951 100644 --- a/home/.chezmoiignore +++ b/home/.chezmoiignore @@ -13,22 +13,13 @@ # read as a file to delete on the next apply. **/.DS_Store -{{ if eq .chezmoi.os "darwin" -}} -# The follow-main timer keeps a Linux workstation on main; the Mac has no -# systemd and is where the changes are made. -.config/systemd -.local/bin/follow-main.sh -{{ end -}} + {{ if ne .chezmoi.os "darwin" -}} .hammerspoon .config/raycast -.config/iterm2 Library/LaunchAgents/com.froppa.clip-serve.plist .local/bin/clip-serve -# evo-dev runs the real Linux Depot binary the evo development role installs -# at ~/.local/bin/depot; the Cargo-install symlink must not replace it. -.local/bin/depot {{ end -}} {{ if eq .chezmoi.os "darwin" -}} diff --git a/home/.chezmoiscripts/run_after_60-add-herdr-evo-dev.sh.tmpl b/home/.chezmoiscripts/run_after_60-add-herdr-evo-dev.sh.tmpl deleted file mode 100644 index 1422dc2..0000000 --- a/home/.chezmoiscripts/run_after_60-add-herdr-evo-dev.sh.tmpl +++ /dev/null @@ -1,19 +0,0 @@ -{{ if and (eq .chezmoi.os "darwin") .personal -}} -#!/bin/sh -set -eu - -# Keep evo-dev in herdr's sidebar as a saved SSH machine. herdr stores -# machines in its own catalog, not config.toml, so apply registers it. -# froppa/evo installs the herdr it attaches to; without that, machine add -# would ask to install a self-updating copy there instead. - -command -v herdr >/dev/null 2>&1 || exit 0 -herdr machine list | cut -f3 | grep -qx evo-dev && exit 0 - -if ! ssh -o BatchMode=yes -o ConnectTimeout=5 evo-dev 'command -v herdr' >/dev/null 2>&1; then - echo "=> herdr: evo-dev unreachable or without herdr (froppa/evo installs it); skipping" >&2 - exit 0 -fi -herdr machine add evo-dev --label evo-dev || - echo "=> herdr: could not add evo-dev; run: herdr machine add evo-dev --label evo-dev" >&2 -{{ end -}} diff --git a/home/.chezmoiscripts/run_once_after_50-configure-iterm2.sh b/home/.chezmoiscripts/run_once_after_50-configure-iterm2.sh deleted file mode 100644 index 30cfb94..0000000 --- a/home/.chezmoiscripts/run_once_after_50-configure-iterm2.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -euo pipefail -[[ "${OSTYPE}" != darwin* ]] && exit 0 - -PREFS_CUSTOM_FOLDER="${HOME}/.config/iterm2" - -defaults write com.googlecode.iterm2 PrefsCustomFolder -string "${PREFS_CUSTOM_FOLDER}" -defaults write com.googlecode.iterm2 LoadPrefsFromCustomFolder -bool true - -echo "iTerm2 configured to load prefs from ${PREFS_CUSTOM_FOLDER}" diff --git a/home/.chezmoiscripts/run_onchange_20-install-pkgs.sh.tmpl b/home/.chezmoiscripts/run_onchange_20-install-pkgs.sh.tmpl index 07e23a3..ef8fd40 100644 --- a/home/.chezmoiscripts/run_onchange_20-install-pkgs.sh.tmpl +++ b/home/.chezmoiscripts/run_onchange_20-install-pkgs.sh.tmpl @@ -25,7 +25,7 @@ brew "{{ . }}" cask "{{ . }}" {{ end -}} {{ end -}} -{{ if .personal -}} +{{ if not .work -}} {{ range .packages.personal.brews -}} brew "{{ . }}" {{ end -}} diff --git a/home/dot_aws/cli/alias b/home/dot_aws/cli/alias deleted file mode 100644 index 0865b73..0000000 --- a/home/dot_aws/cli/alias +++ /dev/null @@ -1,274 +0,0 @@ -[toplevel] -id = sts get-caller-identity -region = configure get region -regions = ec2 describe-regions --query 'sort_by(Regions, &RegionName)[].RegionName' --output text - -cw = cloudwatch -logs = logs -ecs = ecs -sqs = sqs -sns = sns -s3 = s3 - -ls = !grep '^[^[:space:]#].*=' "${HOME}/.aws/cli/alias" | sort - -[command logs] -groups = describe-log-groups --query 'logGroups[].logGroupName' -groups-short = describe-log-groups --query 'logGroups[].logGroupName' --output text - -streams = describe-log-streams --log-group-name -streams-recent = describe-log-streams --log-group-name --order-by LastEventTime --descending - -tail = tail --follow --log-group-name -tail-since = tail --follow --since 30m --log-group-name -tail-short = tail --since 30m --log-group-name - -filter = filter-log-events --log-group-name -errors = filter-log-events \ - --log-group-name \ - --filter-pattern '?ERROR ?Error ?error ?FATAL ?Fatal ?panic ?PANIC ?exception' - -start = start-query --log-group-name -query = get-query-results --query-id - -# Example: -# aws logs insights "/ecs/ch-prod-my-service" "fields @timestamp, @message | sort @timestamp desc | limit 50" -# Every continuation line MUST be indented. This is an INI file: a line at -# column 0 is a new key, not part of the value above it, and the whole -# file fails to parse. The parser strips the indentation before the shell -# sees the alias, so the heredoc terminators below still reach the shell -# at column 0, where a <<'PY' heredoc needs them. -insights = !f() { - group=${1:?expected log group} - query=${2:?expected insights query} - start=$(date -u -d '30 minutes ago' '+%s' 2>/dev/null || python3 - <<'PY' - import time - print(int(time.time()) - 1800) - PY - ) - end=$(date -u '+%s' 2>/dev/null || python3 - <<'PY' - import time - print(int(time.time())) - PY - ) - aws logs start-query \ - --log-group-name "$group" \ - --start-time "$start" \ - --end-time "$end" \ - --query-string "$query" - }; f - -[command cloudwatch] -alarms = describe-alarms --query 'MetricAlarms[].{Name:AlarmName,State:StateValue,Metric:MetricName,Namespace:Namespace}' -alarms-alarm = describe-alarms --state-value ALARM --query 'MetricAlarms[].{Name:AlarmName,State:StateValue,Metric:MetricName,Namespace:Namespace}' -alarm = describe-alarms --alarm-names -history = describe-alarm-history --alarm-name - -metrics = list-metrics -metrics-ns = list-metrics --namespace -namespaces = list-metrics --query 'Metrics[].Namespace' --output text - -# Example: -# aws cw stat AWS/ECS CPUUtilization ClusterName=my-cluster,ServiceName=my-service Average 300 3600 -stat = !f() { - namespace=${1:?expected namespace} - metric=${2:?expected metric name} - dimensions=${3:-} - stat=${4:-Average} - period=${5:-300} - window=${6:-3600} - - end=$(date -u '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || python3 - <<'PY' - from datetime import datetime, timezone - print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')) - PY - ) - start=$(date -u -d "${window} seconds ago" '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || python3 - </**"] + "skipFiles": [ + "/**" + ] }, { "name": "Node: pnpm dev", "type": "node", "request": "launch", "runtimeExecutable": "pnpm", - "runtimeArgs": ["dev"], + "runtimeArgs": [ + "dev" + ], "cwd": "${workspaceFolder}", "console": "integratedTerminal", - "skipFiles": ["/**"] - } - ], - "compounds": [ - { - "name": "Go + Node", - "configurations": ["Go: Service xxx", "Node: pnpm dev"] + "skipFiles": [ + "/**" + ] } ] } diff --git a/home/dot_config/ghostty/config b/home/dot_config/ghostty/config index a15c759..816b375 100644 --- a/home/dot_config/ghostty/config +++ b/home/dot_config/ghostty/config @@ -217,4 +217,4 @@ keybind = herdr/performable:ctrl+alt+super+u=activate_key_table:herdr # Optional. Keep command=/bin/zsh unless you explicitly # want a machine to launch something else. -# config-file = ?config.local \ No newline at end of file +config-file = ?config.local diff --git a/home/dot_config/iterm2/com.googlecode.iterm2.plist b/home/dot_config/iterm2/com.googlecode.iterm2.plist deleted file mode 100644 index 0fe4fba..0000000 --- a/home/dot_config/iterm2/com.googlecode.iterm2.plist +++ /dev/null @@ -1,2672 +0,0 @@ - - - - - AIFeatureFunctionCalling - - AIFeatureHostedCodeInterpeter - - AIFeatureHostedFileSearch - - AIFeatureHostedWebSearch - - AIFeatureStreamingResponses - - AITermAPI - 2 - AIVectorStore - 0 - AdjustWindowForFontSizeChange - - AiMaxTokens - 1050000 - AiModel - gpt-5.5 - AiResponseMaxTokens - 128000 - AitermURL - https://api.openai.com/v1/responses - AllowClipboardAccess - - AlwaysOpenWindowAtStartup - - ClickToSelectCommand - - Compress History - - Default Bookmark Guid - 3712D82E-60F8-4B0B-9F2E-5F21BC701367 - DefaultTabBarHeight - 28 - DimBackgroundWindows - - DimInactiveSplitPanes - - DimOnlyText - - DisableFullscreenTransparency - - DisableTopRightIndicators - - DoubleClickPerformsSmartSelection - - EnableAPIServer - - EnableDivisionView - - EnableProxyIcon - - EnableRendezvous - - EnterCopyModeAutomatically - - FallbackLCCType - - FocusFollowsMouse - - FocusOnRightOrMiddleClick - - HTMLTabTitles - - HapticFeedbackForEsc - - HideActivityIndicator - - HideMenuBarInFullscreen - - HideScrollbar - - HideTab - - Hotkey - - HotkeyChar - 0 - HotkeyCode - 0 - HotkeyMigratedFromSingleToMulti - - HotkeyModifiers - 0 - IRMemory - 4 - NeverBlockSystemShutdown - - New Bookmarks - - - ASCII Anti Aliased - - ASCII Ligatures - - AWDS Pane Directory - - AWDS Pane Option - Recycle - AWDS Tab Directory - - AWDS Tab Option - No - AWDS Window Directory - - AWDS Window Option - No - Allow modifyOtherKeys - - Ambiguous Double Width - - Animate Movement - - Ansi 0 Color - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Ansi 0 Color (Dark) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Ansi 0 Color (Light) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Ansi 1 Color - - Blue Component - 0 - Green Component - 0 - Red Component - 0.8 - - Ansi 1 Color (Dark) - - Blue Component - 0 - Green Component - 0 - Red Component - 0.8 - - Ansi 1 Color (Light) - - Blue Component - 0 - Green Component - 0 - Red Component - 0.8 - - Ansi 10 Color - - Blue Component - 0.2039216 - Green Component - 0.8862745 - Red Component - 0.5411764999999999 - - Ansi 10 Color (Dark) - - Blue Component - 0.2039216 - Green Component - 0.8862745 - Red Component - 0.5411764999999999 - - Ansi 10 Color (Light) - - Blue Component - 0.2039216 - Green Component - 0.8862745 - Red Component - 0.5411764999999999 - - Ansi 11 Color - - Blue Component - 0.3098039 - Green Component - 0.9137255 - Red Component - 0.9882353 - - Ansi 11 Color (Dark) - - Blue Component - 0.3098039 - Green Component - 0.9137255 - Red Component - 0.9882353 - - Ansi 11 Color (Light) - - Blue Component - 0.3098039 - Green Component - 0.9137255 - Red Component - 0.9882353 - - Ansi 12 Color - - Blue Component - 0.8117647 - Green Component - 0.6235294 - Red Component - 0.4470588 - - Ansi 12 Color (Dark) - - Blue Component - 0.8117647 - Green Component - 0.6235294 - Red Component - 0.4470588 - - Ansi 12 Color (Light) - - Blue Component - 0.8117647 - Green Component - 0.6235294 - Red Component - 0.4470588 - - Ansi 13 Color - - Blue Component - 0.6588235 - Green Component - 0.4980392 - Red Component - 0.6784314 - - Ansi 13 Color (Dark) - - Blue Component - 0.6588235 - Green Component - 0.4980392 - Red Component - 0.6784314 - - Ansi 13 Color (Light) - - Blue Component - 0.6588235 - Green Component - 0.4980392 - Red Component - 0.6784314 - - Ansi 14 Color - - Blue Component - 0.8862745 - Green Component - 0.8862745 - Red Component - 0.2039216 - - Ansi 14 Color (Dark) - - Blue Component - 0.8862745 - Green Component - 0.8862745 - Red Component - 0.2039216 - - Ansi 14 Color (Light) - - Blue Component - 0.8862745 - Green Component - 0.8862745 - Red Component - 0.2039216 - - Ansi 15 Color - - Blue Component - 0.9254902 - Green Component - 0.9333333 - Red Component - 0.9333333 - - Ansi 15 Color (Dark) - - Blue Component - 0.9254902 - Green Component - 0.9333333 - Red Component - 0.9333333 - - Ansi 15 Color (Light) - - Blue Component - 0.9254902 - Green Component - 0.9333333 - Red Component - 0.9333333 - - Ansi 2 Color - - Blue Component - 0.02352941 - Green Component - 0.6039215999999999 - Red Component - 0.3058824 - - Ansi 2 Color (Dark) - - Blue Component - 0.02352941 - Green Component - 0.6039215999999999 - Red Component - 0.3058824 - - Ansi 2 Color (Light) - - Blue Component - 0.02352941 - Green Component - 0.6039215999999999 - Red Component - 0.3058824 - - Ansi 3 Color - - Blue Component - 0 - Green Component - 0.627451 - Red Component - 0.7686275 - - Ansi 3 Color (Dark) - - Blue Component - 0 - Green Component - 0.627451 - Red Component - 0.7686275 - - Ansi 3 Color (Light) - - Blue Component - 0 - Green Component - 0.627451 - Red Component - 0.7686275 - - Ansi 4 Color - - Blue Component - 0.6431373 - Green Component - 0.3960784 - Red Component - 0.2039216 - - Ansi 4 Color (Dark) - - Blue Component - 0.6431373 - Green Component - 0.3960784 - Red Component - 0.2039216 - - Ansi 4 Color (Light) - - Blue Component - 0.6431373 - Green Component - 0.3960784 - Red Component - 0.2039216 - - Ansi 5 Color - - Blue Component - 0.4823529 - Green Component - 0.3137255 - Red Component - 0.4588235 - - Ansi 5 Color (Dark) - - Blue Component - 0.4823529 - Green Component - 0.3137255 - Red Component - 0.4588235 - - Ansi 5 Color (Light) - - Blue Component - 0.4823529 - Green Component - 0.3137255 - Red Component - 0.4588235 - - Ansi 6 Color - - Blue Component - 0.6039215999999999 - Green Component - 0.5960785 - Red Component - 0.02352941 - - Ansi 6 Color (Dark) - - Blue Component - 0.6039215999999999 - Green Component - 0.5960785 - Red Component - 0.02352941 - - Ansi 6 Color (Light) - - Blue Component - 0.6039215999999999 - Green Component - 0.5960785 - Red Component - 0.02352941 - - Ansi 7 Color - - Blue Component - 0.8117647 - Green Component - 0.8431373 - Red Component - 0.827451 - - Ansi 7 Color (Dark) - - Blue Component - 0.8117647 - Green Component - 0.8431373 - Red Component - 0.827451 - - Ansi 7 Color (Light) - - Blue Component - 0.8117647 - Green Component - 0.8431373 - Red Component - 0.827451 - - Ansi 8 Color - - Blue Component - 0.3254902 - Green Component - 0.3411765 - Red Component - 0.3333333 - - Ansi 8 Color (Dark) - - Blue Component - 0.3254902 - Green Component - 0.3411765 - Red Component - 0.3333333 - - Ansi 8 Color (Light) - - Blue Component - 0.3254902 - Green Component - 0.3411765 - Red Component - 0.3333333 - - Ansi 9 Color - - Blue Component - 0.1607843 - Green Component - 0.1607843 - Red Component - 0.9372549 - - Ansi 9 Color (Dark) - - Blue Component - 0.1607843 - Green Component - 0.1607843 - Red Component - 0.9372549 - - Ansi 9 Color (Light) - - Blue Component - 0.1607843 - Green Component - 0.1607843 - Red Component - 0.9372549 - - BM Growl - - Background Color - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Background Color (Dark) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Background Color (Light) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Background Image Location - - Background Image Mode - 1 - Badge Color - - Alpha Component - 0.5 - Blue Component - 0.13960540294647217 - Color Space - P3 - Green Component - 0.25479039549827576 - Red Component - 0.92929404973983765 - - Badge Color (Dark) - - Alpha Component - 0.5 - Blue Component - 0.13960540294647217 - Color Space - P3 - Green Component - 0.25479039549827576 - Red Component - 0.92929404973983765 - - Badge Color (Light) - - Alpha Component - 0.5 - Blue Component - 0.13960540294647217 - Color Space - P3 - Green Component - 0.25479039549827576 - Red Component - 0.92929404973983765 - - Blink Allowed - - Blinking Cursor - - Blur - - Bold Color - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Bold Color (Dark) - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Bold Color (Light) - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Character Encoding - 4 - Close Sessions On End - - Columns - 80 - Command - - Cursor Boost (Dark) - 0.01 - Cursor Color - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Cursor Color (Dark) - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Cursor Color (Light) - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Cursor Guide Color - - Alpha Component - 0.25 - Blue Component - 0.99125725030899048 - Color Space - P3 - Green Component - 0.92047786712646484 - Red Component - 0.74862593412399292 - - Cursor Guide Color (Dark) - - Alpha Component - 0.25 - Blue Component - 0.99125725030899048 - Color Space - P3 - Green Component - 0.92047786712646484 - Red Component - 0.74862593412399292 - - Cursor Guide Color (Light) - - Alpha Component - 0.25 - Blue Component - 0.99125725030899048 - Color Space - P3 - Green Component - 0.92047786712646484 - Red Component - 0.74862593412399292 - - Cursor Shadow - - Cursor Text Color - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Cursor Text Color (Dark) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Cursor Text Color (Light) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Cursor Type - 1 - Custom Command - No - Custom Directory - Advanced - Default Bookmark - No - Description - Default - Disable Window Resizing - - Draw Powerline Glyphs - - Enable Progress Bars - - Faint Text Alpha - 1 - Faint Text Alpha (Dark) - 1 - Flashing Bell - - Foreground Color - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Foreground Color (Dark) - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Foreground Color (Light) - - Blue Component - 1 - Green Component - 1 - Red Component - 1 - - Guid - 3712D82E-60F8-4B0B-9F2E-5F21BC701367 - Has Hotkey - - Horizontal Spacing - 1 - HotKey Activated By Modifier - - HotKey Alternate Shortcuts - - HotKey Characters - - HotKey Characters Ignoring Modifiers - - HotKey Key Code - 0 - HotKey Modifier Activation - 0 - HotKey Modifier Flags - 0 - HotKey Window Animates - - HotKey Window AutoHides - - HotKey Window Dock Click Action - 0 - HotKey Window Floats - - HotKey Window Reopens On Activation - - Icon - 1 - Idle Code - 0 - Initial Use Transparency - - Jobs to Ignore - - rlogin - ssh - slogin - telnet - - Keyboard Map - - 0x2d-0x100000-0x2c - - Action - 28 - Apply Mode - 0 - Escaping - 2 - Text - 3712D82E-60F8-4B0B-9F2E-5F21BC701367 - Version - 2 - - 0x68-0x100000-0x4 - - Action - 28 - Apply Mode - 0 - Escaping - 2 - Text - 3712D82E-60F8-4B0B-9F2E-5F21BC701367 - Version - 2 - - 0xf700-0x300000-0x7e - - Action - 20 - Apply Mode - 0 - Escaping - 2 - Text - - Version - 2 - - 0xf701-0x300000-0x7d - - Action - 21 - Apply Mode - 0 - Escaping - 2 - Text - - Version - 2 - - 0xf702-0x300000-0x7b - - Action - 18 - Apply Mode - 0 - Escaping - 2 - Text - - Version - 2 - - 0xf703-0x300000-0x7c - - Action - 19 - Apply Mode - 0 - Escaping - 2 - Text - - Version - 2 - - - Link Color - - Alpha Component - 1 - Blue Component - 0.7093239426612854 - Color Space - P3 - Green Component - 0.35333043336868286 - Red Component - 0.14513972401618958 - - Link Color (Dark) - - Alpha Component - 1 - Blue Component - 0.7093239426612854 - Color Space - P3 - Green Component - 0.35333043336868286 - Red Component - 0.14513972401618958 - - Link Color (Light) - - Alpha Component - 1 - Blue Component - 0.7093239426612854 - Color Space - P3 - Green Component - 0.35333043336868286 - Red Component - 0.14513972401618958 - - Load Shell Integration Automatically - - Match Background Color - - Alpha Component - 1 - Blue Component - 0.32116127014160156 - Color Space - P3 - Green Component - 0.98600882291793823 - Red Component - 0.99697142839431763 - - Match Background Color (Dark) - - Alpha Component - 1 - Blue Component - 0.32116127014160156 - Color Space - P3 - Green Component - 0.98600882291793823 - Red Component - 0.99697142839431763 - - Match Background Color (Light) - - Alpha Component - 1 - Blue Component - 0.32116127014160156 - Color Space - P3 - Green Component - 0.98600882291793823 - Red Component - 0.99697142839431763 - - Minimum Contrast - 0.0 - Mouse Reporting - - Name - Zsh - Non Ascii Font - Monaco 12 - Non-ASCII Anti Aliased - - Normal Font - MesloLGS-NF-Regular 14 - Only The Default BG Color Uses Transparency - - Open Password Manager Automatically - - Open Toolbelt - - Option Key Sends - 0 - Prompt Before Closing 2 - 2 - Right Option Key Sends - 0 - Rows - 25 - Screen - -2 - Scrollback Lines - 0 - Selected Text Color - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Selected Text Color (Dark) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Selected Text Color (Light) - - Blue Component - 0 - Green Component - 0 - Red Component - 0 - - Selection Color - - Blue Component - 1 - Green Component - 0.8353 - Red Component - 0.7098 - - Selection Color (Dark) - - Blue Component - 1 - Green Component - 0.8353 - Red Component - 0.7098 - - Selection Color (Light) - - Blue Component - 1 - Green Component - 0.8353 - Red Component - 0.7098 - - Send Code When Idle - - Set Local Environment Vars - 0 - Shortcut - - Show Mark Indicators - - Show Offscreen Command line - - Show Status Bar - - Show Timestamps - 0 - Silence Bell - - Space - 0 - Status Bar Layout - - advanced configuration - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - components - - - class - iTermStatusBarJobComponent - configuration - - knobs - - base: compression resistance - 1 - base: priority - 5 - maxwidth - +infinity - minwidth - 0 - shared text color - - Alpha Component - 1 - Blue Component - 0.63590961694717407 - Color Space - P3 - Green Component - 0.6414334774017334 - Red Component - 0.86000317335128784 - - - layout advanced configuration dictionary value - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - - - - class - iTermStatusBarSpringComponent - configuration - - knobs - - base: compression resistance - 1 - base: priority - 5 - iTermStatusBarSpringComponentSizeMultipleKey - 1 - iTermStatusBarSpringComponentSpringConstantKey - 0.01 - shared text color - - Alpha Component - 1 - Blue Component - 0.65958398580551147 - Color Space - P3 - Green Component - 0.89919322729110718 - Red Component - 0.8796347975730896 - - - layout advanced configuration dictionary value - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - - - - class - iTermStatusBarSpringComponent - configuration - - knobs - - base: compression resistance - 1 - base: priority - 5 - iTermStatusBarSpringComponentSizeMultipleKey - 1 - iTermStatusBarSpringComponentSpringConstantKey - 0.01 - shared text color - - Alpha Component - 1 - Blue Component - 0.69797295331954956 - Color Space - P3 - Green Component - 0.89270001649856567 - Red Component - 0.68831330537796021 - - - layout advanced configuration dictionary value - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - - - - class - iTermStatusBarNetworkUtilizationComponent - configuration - - knobs - - base: priority - 5 - shared text color - - Alpha Component - 1 - Blue Component - 0.89110654592514038 - Color Space - P3 - Green Component - 0.81993860006332397 - Red Component - 0.67023450136184692 - - - layout advanced configuration dictionary value - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - - - - class - iTermStatusBarMemoryUtilizationComponent - configuration - - knobs - - base: priority - 5 - shared text color - - Alpha Component - 1 - Blue Component - 0.88136154413223267 - Color Space - P3 - Green Component - 0.63362252712249756 - Red Component - 0.71302109956741333 - - - layout advanced configuration dictionary value - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - - - - class - iTermStatusBarCPUUtilizationComponent - configuration - - knobs - - base: compression resistance - 1 - base: priority - 5 - shared text color - - Alpha Component - 1 - Blue Component - 0.76881867647171021 - Color Space - P3 - Green Component - 0.64143049716949463 - Red Component - 0.86000508069992065 - - - layout advanced configuration dictionary value - - algorithm - 1 - auto-rainbow style - 3 - font - .AppleSystemUIFont 12 - remove empty components - - - - - - - Sync Title - - Tab Color - - Alpha Component - 1 - Blue Component - 0.5542144775390625 - Color Space - P3 - Green Component - 0.2049407958984375 - Red Component - 0.0 - - Tags - - Terminal Type - xterm-256color - Thin Strokes - 4 - Title Components - 6 - Transparency - 0.48736702127659576 - Unicode Normalization - 0 - Unlimited Scrollback - - Use Bold Font - - Use Bright Bold - - Use Italic Font - - Use Non-ASCII Font - - Use Separate Colors for Light and Dark Mode - - Use Tab Color - - Use Tab Color (Dark) - - Use Underline Color (Dark) - - Vertical Spacing - 1 - Visual Bell - - Window Type - 0 - Working Directory - ~ - - - ASCII Anti Aliased - - Ambiguous Double Width - - Ansi 0 Color - - Alpha Component - 1 - Blue Component - 0.11764705926179886 - Color Space - sRGB - Green Component - 0.098039217293262482 - Red Component - 0.078431375324726105 - - Ansi 0 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.11764705926179886 - Color Space - sRGB - Green Component - 0.098039217293262482 - Red Component - 0.078431375324726105 - - Ansi 0 Color (Light) - - Alpha Component - 1 - Blue Component - 0.11764705926179886 - Color Space - sRGB - Green Component - 0.098039217293262482 - Red Component - 0.078431375324726105 - - Ansi 1 Color - - Alpha Component - 1 - Blue Component - 0.16300037503242493 - Color Space - sRGB - Green Component - 0.23660069704055786 - Red Component - 0.7074432373046875 - - Ansi 1 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.16300037503242493 - Color Space - sRGB - Green Component - 0.23660069704055786 - Red Component - 0.7074432373046875 - - Ansi 1 Color (Light) - - Alpha Component - 1 - Blue Component - 0.16300037503242493 - Color Space - sRGB - Green Component - 0.23660069704055786 - Red Component - 0.7074432373046875 - - Ansi 10 Color - - Alpha Component - 1 - Blue Component - 0.56541937589645386 - Color Space - sRGB - Green Component - 0.9042816162109375 - Red Component - 0.3450070321559906 - - Ansi 10 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.56541937589645386 - Color Space - sRGB - Green Component - 0.9042816162109375 - Red Component - 0.3450070321559906 - - Ansi 10 Color (Light) - - Alpha Component - 1 - Blue Component - 0.56541937589645386 - Color Space - sRGB - Green Component - 0.9042816162109375 - Red Component - 0.3450070321559906 - - Ansi 11 Color - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.8833775520324707 - Red Component - 0.9259033203125 - - Ansi 11 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.8833775520324707 - Red Component - 0.9259033203125 - - Ansi 11 Color (Light) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.8833775520324707 - Red Component - 0.9259033203125 - - Ansi 12 Color - - Alpha Component - 1 - Blue Component - 0.9485321044921875 - Color Space - sRGB - Green Component - 0.67044717073440552 - Red Component - 0.65349078178405762 - - Ansi 12 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.9485321044921875 - Color Space - sRGB - Green Component - 0.67044717073440552 - Red Component - 0.65349078178405762 - - Ansi 12 Color (Light) - - Alpha Component - 1 - Blue Component - 0.9485321044921875 - Color Space - sRGB - Green Component - 0.67044717073440552 - Red Component - 0.65349078178405762 - - Ansi 13 Color - - Alpha Component - 1 - Blue Component - 0.8821563720703125 - Color Space - sRGB - Green Component - 0.4927266538143158 - Red Component - 0.8821563720703125 - - Ansi 13 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.8821563720703125 - Color Space - sRGB - Green Component - 0.4927266538143158 - Red Component - 0.8821563720703125 - - Ansi 13 Color (Light) - - Alpha Component - 1 - Blue Component - 0.8821563720703125 - Color Space - sRGB - Green Component - 0.4927266538143158 - Red Component - 0.8821563720703125 - - Ansi 14 Color - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 0.99263292551040649 - Red Component - 0.37597531080245972 - - Ansi 14 Color (Dark) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 0.99263292551040649 - Red Component - 0.37597531080245972 - - Ansi 14 Color (Light) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 0.99263292551040649 - Red Component - 0.37597531080245972 - - Ansi 15 Color - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 1 - Red Component - 0.99999600648880005 - - Ansi 15 Color (Dark) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 1 - Red Component - 0.99999600648880005 - - Ansi 15 Color (Light) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 1 - Red Component - 0.99999600648880005 - - Ansi 2 Color - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.7607843279838562 - Red Component - 0.0 - - Ansi 2 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.7607843279838562 - Red Component - 0.0 - - Ansi 2 Color (Light) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.7607843279838562 - Red Component - 0.0 - - Ansi 3 Color - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.76959484815597534 - Red Component - 0.78058648109436035 - - Ansi 3 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.76959484815597534 - Red Component - 0.78058648109436035 - - Ansi 3 Color (Light) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.76959484815597534 - Red Component - 0.78058648109436035 - - Ansi 4 Color - - Alpha Component - 1 - Blue Component - 0.78216177225112915 - Color Space - sRGB - Green Component - 0.26474356651306152 - Red Component - 0.15404300391674042 - - Ansi 4 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.78216177225112915 - Color Space - sRGB - Green Component - 0.26474356651306152 - Red Component - 0.15404300391674042 - - Ansi 4 Color (Light) - - Alpha Component - 1 - Blue Component - 0.78216177225112915 - Color Space - sRGB - Green Component - 0.26474356651306152 - Red Component - 0.15404300391674042 - - Ansi 5 Color - - Alpha Component - 1 - Blue Component - 0.74494361877441406 - Color Space - sRGB - Green Component - 0.24931684136390686 - Red Component - 0.752197265625 - - Ansi 5 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.74494361877441406 - Color Space - sRGB - Green Component - 0.24931684136390686 - Red Component - 0.752197265625 - - Ansi 5 Color (Light) - - Alpha Component - 1 - Blue Component - 0.74494361877441406 - Color Space - sRGB - Green Component - 0.24931684136390686 - Red Component - 0.752197265625 - - Ansi 6 Color - - Alpha Component - 1 - Blue Component - 0.78166204690933228 - Color Space - sRGB - Green Component - 0.77425903081893921 - Red Component - 0.0 - - Ansi 6 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.78166204690933228 - Color Space - sRGB - Green Component - 0.77425903081893921 - Red Component - 0.0 - - Ansi 6 Color (Light) - - Alpha Component - 1 - Blue Component - 0.78166204690933228 - Color Space - sRGB - Green Component - 0.77425903081893921 - Red Component - 0.0 - - Ansi 7 Color - - Alpha Component - 1 - Blue Component - 0.78104829788208008 - Color Space - sRGB - Green Component - 0.78105825185775757 - Red Component - 0.7810397744178772 - - Ansi 7 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.78104829788208008 - Color Space - sRGB - Green Component - 0.78105825185775757 - Red Component - 0.7810397744178772 - - Ansi 7 Color (Light) - - Alpha Component - 1 - Blue Component - 0.78104829788208008 - Color Space - sRGB - Green Component - 0.78105825185775757 - Red Component - 0.7810397744178772 - - Ansi 8 Color - - Alpha Component - 1 - Blue Component - 0.4078223705291748 - Color Space - sRGB - Green Component - 0.40782788395881653 - Red Component - 0.40781760215759277 - - Ansi 8 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.4078223705291748 - Color Space - sRGB - Green Component - 0.40782788395881653 - Red Component - 0.40781760215759277 - - Ansi 8 Color (Light) - - Alpha Component - 1 - Blue Component - 0.4078223705291748 - Color Space - sRGB - Green Component - 0.40782788395881653 - Red Component - 0.40781760215759277 - - Ansi 9 Color - - Alpha Component - 1 - Blue Component - 0.45833224058151245 - Color Space - sRGB - Green Component - 0.47524076700210571 - Red Component - 0.8659515380859375 - - Ansi 9 Color (Dark) - - Alpha Component - 1 - Blue Component - 0.45833224058151245 - Color Space - sRGB - Green Component - 0.47524076700210571 - Red Component - 0.8659515380859375 - - Ansi 9 Color (Light) - - Alpha Component - 1 - Blue Component - 0.45833224058151245 - Color Space - sRGB - Green Component - 0.47524076700210571 - Red Component - 0.8659515380859375 - - BM Growl - - Background Color - - Alpha Component - 1 - Blue Component - 0.97999999999999998 - Color Space - sRGB - Green Component - 0.97999999999999998 - Red Component - 0.97999999999999998 - - Background Color (Dark) - - Alpha Component - 1 - Blue Component - 0.12103271484375 - Color Space - sRGB - Green Component - 0.099111050367355347 - Red Component - 0.0806884765625 - - Background Color (Light) - - Alpha Component - 1 - Blue Component - 0.97999999999999998 - Color Space - sRGB - Green Component - 0.97999999999999998 - Red Component - 0.97999999999999998 - - Background Image Location - - Badge Color - - Alpha Component - 0.5 - Blue Component - 0.11610633134841919 - Color Space - sRGB - Green Component - 0.11610633134841919 - Red Component - 0.74613857269287109 - - Badge Color (Dark) - - Alpha Component - 0.5 - Blue Component - 0.65218597462148864 - Color Space - sRGB - Green Component - 0.65218597462148864 - Red Component - 0.9787440299987793 - - Badge Color (Light) - - Alpha Component - 0.5 - Blue Component - 0.11610633058398889 - Color Space - sRGB - Green Component - 0.11610633058398889 - Red Component - 0.74613857269287109 - - Blinking Cursor - - Blur - - Bold Color - - Alpha Component - 1 - Blue Component - 0.062745101749897003 - Color Space - sRGB - Green Component - 0.062745101749897003 - Red Component - 0.062745101749897003 - - Bold Color (Dark) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 1 - Red Component - 0.99999600648880005 - - Bold Color (Light) - - Alpha Component - 1 - Blue Component - 0.062745098039215685 - Color Space - sRGB - Green Component - 0.062745098039215685 - Red Component - 0.062745098039215685 - - Bound Hosts - - Character Encoding - 4 - Close Sessions On End - - Columns - 80 - Command - sdf@192.168.1.100 - Cursor Color - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.0 - Red Component - 0.0 - - Cursor Color (Dark) - - Alpha Component - 1 - Blue Component - 0.99998724460601807 - Color Space - sRGB - Green Component - 1 - Red Component - 0.99997633695602417 - - Cursor Color (Light) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.0 - Red Component - 0.0 - - Cursor Guide Color - - Alpha Component - 0.25 - Blue Component - 0.85319280624389648 - Color Space - sRGB - Green Component - 0.77217715978622437 - Red Component - 0.52338260412216187 - - Cursor Guide Color (Dark) - - Alpha Component - 0.25 - Blue Component - 0.94099044799804688 - Color Space - sRGB - Green Component - 0.80232617749205526 - Red Component - 0.37649588016392954 - - Cursor Guide Color (Light) - - Alpha Component - 0.25 - Blue Component - 0.85319280624389648 - Color Space - sRGB - Green Component - 0.77217718629089516 - Red Component - 0.52338262643729649 - - Cursor Text Color - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 1 - Red Component - 1 - - Cursor Text Color (Dark) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.0 - Red Component - 0.0 - - Cursor Text Color (Light) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 1 - Red Component - 1 - - Custom Command - SSH - Custom Directory - Yes - Default Bookmark - No - Description - Default - Disable Window Resizing - - Flashing Bell - - Foreground Color - - Alpha Component - 1 - Blue Component - 0.062745101749897003 - Color Space - sRGB - Green Component - 0.062745101749897003 - Red Component - 0.062745101749897003 - - Foreground Color (Dark) - - Alpha Component - 1 - Blue Component - 0.86198854446411133 - Color Space - sRGB - Green Component - 0.86199951171875 - Red Component - 0.86197912693023682 - - Foreground Color (Light) - - Alpha Component - 1 - Blue Component - 0.062745098039215685 - Color Space - sRGB - Green Component - 0.062745098039215685 - Red Component - 0.062745098039215685 - - Guid - 39C392D7-5D94-4E52-852A-32EE2A9BA5C5 - Horizontal Spacing - 1 - Icon - 1 - Idle Code - 0 - Jobs to Ignore - - rlogin - ssh - slogin - telnet - - Keyboard Map - - Link Color - - Alpha Component - 1 - Blue Component - 0.9337158203125 - Color Space - sRGB - Green Component - 0.55789834260940552 - Red Component - 0.19802422821521759 - - Link Color (Dark) - - Alpha Component - 1 - Blue Component - 0.9337158203125 - Color Space - sRGB - Green Component - 0.55789834260940552 - Red Component - 0.19802422821521759 - - Link Color (Light) - - Alpha Component - 1 - Blue Component - 0.9337158203125 - Color Space - sRGB - Green Component - 0.55789834260940552 - Red Component - 0.19802422821521759 - - Load Shell Integration Automatically - - Mouse Reporting - - Name - HomeAssistant :22 - Non Ascii Font - Monaco 12 - Non-ASCII Anti Aliased - - Normal Font - Monaco 14 - Option Key Sends - 0 - Prompt Before Closing 2 - - Right Option Key Sends - 0 - Rows - 25 - SSH - - environmentVariablesToCopy - - filesToCopy - - sshIntegration - - - Screen - -1 - Scrollback Lines - 0 - Selected Text Color - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.0 - Red Component - 0.0 - - Selected Text Color (Dark) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.0 - Red Component - 0.0 - - Selected Text Color (Light) - - Alpha Component - 1 - Blue Component - 0.0 - Color Space - sRGB - Green Component - 0.0 - Red Component - 0.0 - - Selection Color - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 0.84313726425170898 - Red Component - 0.70196080207824707 - - Selection Color (Dark) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 0.84313726425170898 - Red Component - 0.70196080207824707 - - Selection Color (Light) - - Alpha Component - 1 - Blue Component - 1 - Color Space - sRGB - Green Component - 0.84313726425170898 - Red Component - 0.70196080207824707 - - Send Code When Idle - - Shortcut - P - Show Mark Indicators - - Silence Bell - - Sync Title - - Tags - - Terminal Type - xterm-256color - Title Components - 964 - Transparency - 0.021276595744680851 - Unlimited Scrollback - - Use Bold Font - - Use Bright Bold - - Use Italic Font - - Use Non-ASCII Font - - Use Separate Colors for Light and Dark Mode - - Vertical Spacing - 1 - Visual Bell - - Window Type - 0 - Working Directory - / - - - OnlyWhenMoreTabs - - OpenArrangementAtStartup - - OpenNoWindowsAtStartup - - PerPaneBackgroundImage - - PointerActions - - Button,1,1,, - - Action - kContextMenuPointerAction - - Button,2,1,, - - Action - kPasteFromClipboardPointerAction - - Gesture,ThreeFingerSwipeDown,, - - Action - kPrevWindowPointerAction - - Gesture,ThreeFingerSwipeLeft,, - - Action - kPrevTabPointerAction - - Gesture,ThreeFingerSwipeRight,, - - Action - kNextTabPointerAction - - Gesture,ThreeFingerSwipeUp,, - - Action - kNextWindowPointerAction - - - Print In Black And White - - PromptOnQuit - - QuitWhenAllWindowsClosed - - RestoreWindowsToSameSpaces - - SavePasteHistory - - SeparateStatusBarsPerPane - - ShowFullScreenTabBar - - ShowPaneTitles - - ShowPaneTitlesEvenIfOnlyOnePane - - ShowSecureKeyboardEntryIndicator - - SmartPlacement - - SoundForEsc - - SplitPaneDimmingAmount - 0.32218959603658537 - StatusBarPosition - 1 - StretchTabsToFillBar - - SwitchPaneModifier - 6 - SwitchWindowModifier - 9 - TabStyleWithAutomaticOption - 5 - TabViewType - 0 - TerminalMargin - 10 - TerminalVMargin - 10 - TmuxSyncClipboard - - URLHandlersByGuid - - https - 3712D82E-60F8-4B0B-9F2E-5F21BC701367 - - UseBorder - - UseMetal - - UseSystemCursorWhenPossible - - VisualIndicatorForEsc - - WindowNumber - - findMode_iTerm - 0 - kCPKSelectionViewPreferredModeKey - 7 - kCPKSelectionViewShowHSBTextFieldsKey - - metalMaximizeThroughput - - - diff --git a/home/dot_config/raycast/scripts/executable_quick-capture.sh b/home/dot_config/raycast/scripts/executable_quick-capture.sh deleted file mode 100644 index fc3dbca..0000000 --- a/home/dot_config/raycast/scripts/executable_quick-capture.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env bash -# -# @raycast.schemaVersion 1 -# @raycast.title Quick Capture -# @raycast.mode compact -# @raycast.packageName Personal Productivity -# @raycast.icon ๐Ÿ“ -# @raycast.description Capture a todo, reminder, or note from Raycast quickly. -# -# @raycast.argument1 { "type": "text", "placeholder": "What needs to be captured?" } -# @raycast.argument2 { "type": "dropdown", "placeholder": "Type", "default": "todo", "data": [{"title": "Todo", "value": "todo"}, {"title": "Reminder", "value": "reminder"}, {"title": "Note", "value": "note"}] } -# @raycast.argument3 { "type": "text", "placeholder": "Due date/time (optional for reminders, e.g. tomorrow 9am)", "optional": true } - -set -euo pipefail - -CONTENT="${1:-}" -TYPE="${2:-todo}" -DUE_RAW="${3:-}" - -if [[ -z "$CONTENT" ]]; then - echo "No content provided." - exit 1 -fi - -normalize_type() { - local t="$1" - case "$t" in - todo|todo*) echo todo ;; - rem* ) echo reminder ;; - note*|memo* ) echo note ;; - * ) echo "$t" ;; - esac -} - -TYPE="$(normalize_type "$TYPE")" - -VAULT="${AGENT_WORKSPACE_VAULT:-$HOME/code/froppa/agent-workspace}" -INBOX_DIR="$VAULT/Inbox" -DATE_ONLY="$(date '+%Y-%m-%d')" -STAMP="$(date '+%Y-%m-%d-%H%M')" - -slugify() { - local s="$1" - s="$(printf '%s' "$s" | tr '\n' ' ')" - s="$(printf '%s' "$s" | sed -E 's#[/:*?"<>|]#-#g; s/[[:space:]]+/ /g; s/^[[:space:]-]+//; s/[[:space:]-]+$//')" - s="${s:0:60}" - [[ -z "$s" ]] && s="capture" - printf '%s' "$s" -} - -create_inbox_note() { - local kind="$1" - local title="$2" - local slug file - slug="$(slugify "$title")" - file="$INBOX_DIR/${STAMP} ${slug}.md" - mkdir -p "$INBOX_DIR" - - case "$kind" in - note) - cat >"$file" <"$file" <//tasks/.md\` using - \`templates/task.md\`, or drop this note. -TASK - ;; - esac -} - -case "$TYPE" in - todo) - create_inbox_note "task" "$CONTENT" - echo "โœ… Task captured: $CONTENT" - ;; - - note) - create_inbox_note "note" "$CONTENT" - echo "๐Ÿ“ Note captured: $CONTENT" - ;; - - reminder) - osascript - "$CONTENT" "$DUE_RAW" <<'APPLESCRIPT' -on run argv - set reminderText to item 1 of argv - set dueText to item 2 of argv - - tell application "Reminders" - if (count of lists whose name is "Raycast") = 0 then - make new list with properties {name:"Raycast"} - end if - set reminderList to first list whose name is "Raycast" - - if dueText is not "" then - try - set dueDate to date dueText - make new reminder in reminderList with properties {name:reminderText, due date:dueDate} - on error - make new reminder in reminderList with properties {name:reminderText, body:dueText} - end try - else - make new reminder in reminderList with properties {name:reminderText} - end if - end tell -end run -APPLESCRIPT - echo "โฐ Reminder set: $CONTENT" - ;; - - *) - echo "Invalid capture type: $TYPE" - exit 1 - ;; -esac - -exit 0 diff --git a/home/dot_config/systemd/user/follow-main.service b/home/dot_config/systemd/user/follow-main.service deleted file mode 100644 index 21d77a7..0000000 --- a/home/dot_config/systemd/user/follow-main.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Follow main: dotfiles through chezmoi, then Verk through its installer -After=network-online.target - -[Service] -Type=oneshot -# systemd --user starts with a compiled-in PATH; name where the tools are. -Environment=PATH=%h/.local/bin:%h/.local/share/mise/shims:/usr/local/bin:/usr/bin:/bin -ExecStart=%h/.local/bin/follow-main.sh diff --git a/home/dot_config/systemd/user/follow-main.timer b/home/dot_config/systemd/user/follow-main.timer deleted file mode 100644 index b61379d..0000000 --- a/home/dot_config/systemd/user/follow-main.timer +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Follow main every 15 minutes - -[Timer] -OnBootSec=2min -OnUnitActiveSec=15min -RandomizedDelaySec=1min -Persistent=true - -[Install] -WantedBy=timers.target diff --git a/home/dot_config/tmux/scripts/executable_agent-state.sh b/home/dot_config/tmux/scripts/executable_agent-state.sh index 1469c0d..0124c2b 100755 --- a/home/dot_config/tmux/scripts/executable_agent-state.sh +++ b/home/dot_config/tmux/scripts/executable_agent-state.sh @@ -5,7 +5,7 @@ # off (session ended). # # The state lands in a per-session file under ~/.cache/agents, named by the -# Claude session id so Verk can join it to the transcript it already lists: +# Claude session id so consumers can correlate it with their own state: # line 1 the state, line 2 the CLI's pid (the hook runs as a child of the # claude process, so $PPID is the session), line 3 the working directory. It also goes on the tmux pane as # @agent_state when inside tmux, and into the terminal tab title through the diff --git a/home/dot_config/zed/private_settings.json b/home/dot_config/zed/private_settings.json index 6f9f02a..ddbc978 100644 --- a/home/dot_config/zed/private_settings.json +++ b/home/dot_config/zed/private_settings.json @@ -1,25 +1,4 @@ { - "language_models": { - "openai_compatible": { - "evo-dev": { - "api_url": "http://127.0.0.1:28090/v1", - "available_models": [ - { - "name": "local-evo/qwen3-coder-30b-a3b", - "display_name": "Qwen3-Coder 30B (evo)", - "max_tokens": 32768, - "max_output_tokens": 4096, - "capabilities": { - "tools": true, - "images": false, - "parallel_tool_calls": true, - "prompt_cache_key": true - } - } - ] - } - } - }, "markdown_preview": { "font_size": 14.0, "limit_content_width": false @@ -256,13 +235,6 @@ } }, "agent": { - "favorite_models": [ - { - "provider": "evo-dev", - "model": "local-evo/qwen3-coder-30b-a3b", - "enable_thinking": false - } - ], "tool_permissions": { "tools": { "terminal": { @@ -274,16 +246,7 @@ "sidebar_side": "right", "button": true, "dock": "right", - "inline_assistant_model": { - "provider": "openai", - "model": "gpt-5.6-terra" - }, - "default_profile": "write", - "default_model": { - "enable_thinking": false, - "provider": "evo-dev", - "model": "local-evo/qwen3-coder-30b-a3b" - } + "default_profile": "write" }, "inlay_hints": { "enabled": false, diff --git a/home/dot_exports.tmpl b/home/dot_exports.tmpl index 2c9ff39..bc71867 100644 --- a/home/dot_exports.tmpl +++ b/home/dot_exports.tmpl @@ -12,7 +12,6 @@ export MANPAGER='less -X' {{- if and (eq .chezmoi.os "darwin") .features.brew }} export HOMEBREW_BAT=1 -export HOMEBREW_GITHUB_API_TOKEN={{ onepasswordRead "op://Personal/Homebrew GitHub API Token/credential" | trim }} export HOMEBREW_NO_AUTO_UPDATE=1 export HOMEBREW_NO_ENV_HINTS=1 {{- end }} diff --git a/home/dot_hammerspoon/init.lua b/home/dot_hammerspoon/init.lua index 014bc42..7cdd267 100644 --- a/home/dot_hammerspoon/init.lua +++ b/home/dot_hammerspoon/init.lua @@ -133,12 +133,4 @@ Keep.ghostty = hs.eventtap.new({ hs.eventtap.event.types.keyDown }, function(eve return true end):start() --- โ”€โ”€ VS Code: open ~/work โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ - -hs.hotkey.bind({ "cmd", "shift" }, "ยด", function() - hs.osascript.applescript('tell application "System Events" to keystroke "o" using {command down}') - hs.osascript.applescript('tell application "System Events" to keystroke "~/work"') - hs.osascript.applescript('tell application "System Events" to key code 36') -- Enter -end) - hs.alert.show("Hammerspoon config reloaded") diff --git a/home/dot_local/bin/executable_follow-main.sh b/home/dot_local/bin/executable_follow-main.sh deleted file mode 100755 index 84fe5c8..0000000 --- a/home/dot_local/bin/executable_follow-main.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env sh -# Keep a Linux workstation (evo-dev) on the tip of main without a person at -# the keyboard: dotfiles through chezmoi, then Verk through its own guarded -# installer. Run by follow-main.timer (~/.config/systemd/user); by hand: -# follow-main.sh # both -# follow-main.sh dotfiles # or: verk -# Nothing here forces anything. A dirty or non-master dotfiles checkout is -# reported and left alone, and Verk's install-linux.sh refuses under a -# running chat turn (exit 3) or another install (exit 4); the next tick tries -# again. Logs: journalctl --user -u follow-main. -set -eu -what=${1:-all} - -dotfiles() { - src=$(chezmoi source-path)/.. - if [ -n "$(git -C "$src" status --porcelain)" ]; then - echo "dotfiles: $src has local changes; not pulling" >&2 - return 0 - fi - if [ "$(git -C "$src" branch --show-current)" != master ]; then - echo "dotfiles: $src is not on master; not pulling" >&2 - return 0 - fi - before=$(git -C "$src" rev-parse HEAD) - # Install scripts stay excluded on Linux, as at bootstrap: the account has - # no sudo and package installs belong to the evo development role. - chezmoi update --exclude=scripts - after=$(git -C "$src" rev-parse HEAD) - if [ "$before" != "$after" ]; then - echo "dotfiles: $before -> $after applied" - systemctl --user daemon-reload - fi -} - -verk() { - repo="$HOME/code/verk" - [ -d "$repo/.git" ] || return 0 - if [ -n "$(git -C "$repo" status --porcelain)" ]; then - echo "verk: $repo has local changes; not pulling" >&2 - return 0 - fi - git -C "$repo" pull -q --ff-only - head=$(git -C "$repo" rev-parse HEAD) - if [ "$head" = "$(cat "$HOME/.verk/installed.commit" 2>/dev/null)" ]; then - return 0 - fi - echo "verk: installing $head" - # Builds go through Depot's cache; mise supplies the pinned Go and Bun. - rc=0 - (cd "$repo" && mise exec -- depot exec -- ./scripts/install-linux.sh) || rc=$? - case $rc in - 0) ;; - 3 | 4) echo "verk: install refused (exit $rc); trying again next tick" ;; - *) echo "verk: install failed (exit $rc)" >&2; return "$rc" ;; - esac -} - -case $what in - all) dotfiles; verk ;; - dotfiles) dotfiles ;; - verk) verk ;; - *) echo "usage: follow-main.sh [all|dotfiles|verk]" >&2; exit 2 ;; -esac diff --git a/home/dot_local/bin/executable_git-signlast b/home/dot_local/bin/executable_git-signlast new file mode 100644 index 0000000..e78f5f0 --- /dev/null +++ b/home/dot_local/bin/executable_git-signlast @@ -0,0 +1,16 @@ +#!/bin/sh +# Sign the latest commit, or the latest N commits, using this repository's key. +set -eu +count=${1:-1} +case $count in ''|*[!0-9]*|0) echo 'usage: git signlast [count]' >&2; exit 2 ;; esac +[ "$#" -le 1 ] || { echo 'usage: git signlast [count]' >&2; exit 2; } +[ -z "$(git status --porcelain)" ] || { echo 'Commit or stash local changes first.' >&2; exit 1; } +if [ "$count" -eq 1 ]; then + exec git commit --amend --no-edit -S +fi +total=$(git rev-list --count HEAD) +[ "$count" -le "$total" ] || { echo 'Count exceeds the available commits.' >&2; exit 2; } +if [ "$count" -eq "$total" ]; then + exec git rebase --force-rebase --root --exec 'git commit --amend --no-edit -S' +fi +exec git rebase --force-rebase --exec 'git commit --amend --no-edit -S' "HEAD~$count" diff --git a/home/dot_local/bin/symlink_depot.tmpl b/home/dot_local/bin/symlink_depot.tmpl deleted file mode 100644 index 0497361..0000000 --- a/home/dot_local/bin/symlink_depot.tmpl +++ /dev/null @@ -1 +0,0 @@ -{{ joinPath .chezmoi.homeDir ".cargo/bin/depot" }} diff --git a/home/dot_zsh_completions b/home/dot_zsh_completions index 1d433d3..85b86cc 100644 --- a/home/dot_zsh_completions +++ b/home/dot_zsh_completions @@ -41,8 +41,3 @@ fi if (( $+commands[gh] )); then source <(gh completion -s zsh 2>/dev/null) fi - -# Generated by the installed Depot version; no stale completion file to refresh. -if (( $+commands[depot] )); then - source <(depot completions zsh 2>/dev/null) -fi diff --git a/home/private_dot_ssh/private_config.tmpl b/home/private_dot_ssh/private_config.tmpl index 6d7e986..c963344 100644 --- a/home/private_dot_ssh/private_config.tmpl +++ b/home/private_dot_ssh/private_config.tmpl @@ -23,5 +23,7 @@ Host * Match exec "ssh-add -l >/dev/null 2>&1" IdentityAgent SSH_AUTH_SOCK -Host * +{{ if eq .chezmoi.os "darwin" -}} +Match exec 'test -S "$HOME/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"' IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock" +{{ end -}} diff --git a/scripts/export-iterm2-prefs.sh b/scripts/export-iterm2-prefs.sh deleted file mode 100755 index d0f69a5..0000000 --- a/scripts/export-iterm2-prefs.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -[[ "${OSTYPE}" != darwin* ]] && exit 0 - -# Export straight into the chezmoi source so `chezmoi diff` stays clean and -# the change can be committed. Applying deploys it to ~/.config/iterm2. -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -SOURCE_PLIST="${SCRIPT_DIR}/../home/dot_config/iterm2/com.googlecode.iterm2.plist" - -defaults export com.googlecode.iterm2 "${SOURCE_PLIST}" -plutil -convert xml1 "${SOURCE_PLIST}" - -echo "Exported iTerm2 preferences to ${SOURCE_PLIST}" -echo "Run 'chezmoi apply' to sync ~/.config/iterm2, then commit the change." diff --git a/test.sh b/test.sh index 956de49..d65346b 100755 --- a/test.sh +++ b/test.sh @@ -72,10 +72,9 @@ chezmoi --config "${rendered_config}" data >/dev/null grep -q '^name = "CI"$' "${rendered_config}" || fail "generated config missing CI name" grep -q '^email = "ci@example.invalid"$' "${rendered_config}" || fail "generated config missing CI email" -grep -q '^personal = true$' "${rendered_config}" || fail "default profile should be personal" grep -q '^work = false$' "${rendered_config}" || fail "work should default to false" -section "Testing WORK profile selection" +section "Testing WORK package selection" rendered_work_config="$(mktemp "${TMPDIR:-/tmp}/chezmoi-work.XXXXXX").toml" @@ -87,15 +86,10 @@ WORK=true chezmoi execute-template \ < home/.chezmoi.toml.tmpl \ > "${rendered_work_config}" -grep -q '^profile = "work"$' "${rendered_work_config}" || fail "WORK=true should select the work profile" grep -q '^work = true$' "${rendered_work_config}" || fail "WORK=true should set work = true" -grep -q '^personal = false$' "${rendered_work_config}" || fail "WORK=true should set personal = false" section "Checking safe adoption defaults" -[[ -f home/dot_local/bin/symlink_depot.tmpl ]] || fail "Depot must resolve to the standalone Cargo installation" -grep -Fq '".cargo/bin/depot"' home/dot_local/bin/symlink_depot.tmpl || fail "Depot link must not target the legacy Verk binary" -grep -Fq 'source <(depot completions zsh 2>/dev/null)' home/dot_zsh_completions || fail "Depot completion must follow the installed version" [[ -f home/create_dot_gitconfig.tmpl ]] || fail "Git defaults must be create-only" [[ ! -e home/dot_gitconfig.tmpl ]] || fail "Git config must not overwrite an existing setup" @@ -108,8 +102,6 @@ grep -Fq "alias confgit='chezmoi edit --apply ~/.config/git/dotfiles.gitconfig'" [[ -f home/dot_config/ghostty/config ]] || fail "Ghostty config must be named config, the one path every Ghostty version reads" grep -Fqx '.config/ghostty/config.ghostty' home/.chezmoiremove || fail "a stale config.ghostty would load beside the managed config" grep -Fqx "alias ch='chezmoi'" home/dot_aliases || fail "ch must alias chezmoi" -grep -Fq 'herdr machine add evo-dev' home/.chezmoiscripts/run_after_60-add-herdr-evo-dev.sh.tmpl || fail "apply must register evo-dev as a saved herdr machine" -grep -Fq '{{ if and (eq .chezmoi.os "darwin") .personal -}}' home/.chezmoiscripts/run_after_60-add-herdr-evo-dev.sh.tmpl || fail "only the personal Mac may attach evo-dev" grep -Fq 'command = /bin/zsh' home/dot_config/ghostty/config || fail "Ghostty must launch zsh; herdr is started on demand" grep -Fq 'config-file = ?config.local' home/dot_config/ghostty/config || fail "Ghostty must load the optional machine-local override last" ! grep -qE '^keybind = (performable:)?ctrl\+alt\+super\+[^=]+=text:' home/dot_config/ghostty/config || fail "Hyper chords must reach herdr, not be rewritten into tmux prefix bytes" @@ -129,11 +121,8 @@ grep -Fq 'xterm-ghostty:RGB:extkeys' home/dot_config/tmux/tmux.conf || fail "Gho grep -Fq 'set -s extended-keys on' home/dot_config/tmux/tmux.conf || fail "tmux must pass modified keys to Claude Code" grep -Fq 'set -g focus-events on' home/dot_config/tmux/tmux.conf || fail "tmux must pass focus events to Claude Code" grep -Fq 'set -g assume-paste-time 0' home/dot_config/tmux/tmux.conf || fail "tmux must disable paste timing as a global session option" -grep -Fq '.local/bin/depot' home/.chezmoiignore || fail "the Depot symlink must not replace evo-dev's real binary on Linux" sed -n '/ne .chezmoi.os "darwin"/,/end/p' home/.chezmoiignore | grep -Fq 'Library/LaunchAgents/com.froppa.clip-serve.plist' || fail "the clipboard LaunchAgent is macOS-only" sed -n '/eq .chezmoi.os "darwin"/,/end/p' home/.chezmoiignore | grep -Fq '.local/bin/wl-paste' || fail "the wl-paste shim must not land on the Mac" -[[ -x home/dot_local/bin/executable_follow-main.sh && -f home/dot_config/systemd/user/follow-main.timer ]] || fail "follow-main must ship its script and timer for evo-dev" -sed -n '/eq .chezmoi.os "darwin"/,/end/p' home/.chezmoiignore | grep -Fq '.config/systemd' || fail "systemd user units must not be applied on macOS" grep -Fq 'MouseDragEnd1Pane send -X copy-selection' home/dot_config/tmux/tmux.conf || fail "mouse selection must not snap the view back to the bottom" grep -Fq 'xterm-ghostty:RGB:extkeys:hyperlinks' home/dot_config/tmux/tmux.conf || fail "tmux must pass OSC 8 hyperlinks through to Ghostty" ! grep -rqE '(^|[^a-z])evo(-|[^a-z]|$)|192\.168|100\.[0-9]+\.' home/dot_config/tmux || fail "host names and addresses belong in the unmanaged tmux *.local files" diff --git a/tests/test_ubuntu_bootstrap.py b/tests/test_ubuntu_bootstrap.py index d32285d..7685b08 100644 --- a/tests/test_ubuntu_bootstrap.py +++ b/tests/test_ubuntu_bootstrap.py @@ -43,7 +43,7 @@ def stub(self, name, body): def render(self, name, system="linux", distro="ubuntu", work=False): data = {"chezmoi": {"os": system, "osRelease": {"id": distro}}, - "personal": not work, "work": work} + "work": work} return subprocess.check_output([ CHEZMOI, "--source", str(ROOT), "--config", str(self.config), "--override-data", json.dumps(data), "execute-template", "--file", @@ -140,14 +140,13 @@ def test_managed_files_exclude_mac_only_apps_on_linux(self): for system in ("darwin", "linux"): with self.subTest(system=system): data = {"chezmoi": {"os": system, "osRelease": {"id": "ubuntu"}}, - "name": "CI", "email": "ci@example.invalid", "personal": True, "work": False} + "name": "CI", "email": "ci@example.invalid", "work": False} output = subprocess.check_output([ CHEZMOI, "--source", str(ROOT), "--config", str(self.config), "--destination", str(self.base), "--override-data", json.dumps(data), "managed", "--exclude=externals", "--path-style=relative"], text=True) paths = output.splitlines() - for app in (".hammerspoon/init.lua", ".config/iterm2/com.googlecode.iterm2.plist", - ".config/raycast/scripts/quick-capture.sh"): + for app in (".hammerspoon/init.lua",): self.assertEqual(app in paths, system == "darwin", app) self.assertIn(".config/nvim/init.lua", paths) self.assertIn(".config/ghostty/config", paths)