Skip to content

Commit b1cd6ea

Browse files
committed
feat: restore ghostty and remove warp
Recover the ghostty config and setup module from history, set ghostty as the default terminal via duti, and drop warp entirely (Brewfile, update.sh mirror, README, pre-commit, tests, and the warp/ dir).
1 parent 2ff4775 commit b1cd6ea

10 files changed

Lines changed: 89 additions & 210 deletions

File tree

β€Ž.pre-commit-config.yamlβ€Ž

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,4 @@ repos:
99
- id: check-yaml
1010
- id: check-ast
1111
- id: check-toml
12-
# Warp writes multi-line inline tables (valid for Warp, not strict TOML 1.0)
13-
# and update.sh mirrors the file verbatim, so skip strict validation for it.
14-
exclude: ^warp/settings\.toml$
1512
- id: check-merge-conflict

β€ŽREADME.mdβ€Ž

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Previously used on:
1919
- `opencode/` β€” OpenCode (`~/.config/opencode`)
2020
- `factory/` β€” Factory / droid (`~/.factory`)
2121
- `codex/` β€” Codex (`~/.codex`)
22-
- `warp/` β€” Warp terminal (`~/.warp`)
22+
- `ghostty/` β€” Ghostty terminal (`~/.config/ghostty`)
2323
- `gnupg/`
2424
- `starship/`
2525

@@ -40,7 +40,8 @@ Each agent/tool is backed up as a curated, secret-free subset of its live config
4040
`mcp.json`, `droids/`. Auth, sessions, logs, cache, and history are excluded.
4141
- **Codex** (`~/.codex`): `config.toml` (with `[projects."..."]` trust paths stripped) and
4242
`rules/`. Auth, history, and SQLite state are excluded.
43-
- **Warp** (`~/.warp`): `settings.toml` and `default_tab_configs/`.
43+
- **Ghostty** (`~/.config/ghostty`): `config`. `ghostty/setup.sh` also sets Ghostty as the
44+
default terminal via `duti`.
4445

4546
Because the repo is public, `update.sh` sanitizes on capture: it blanks Factory API keys and
4647
strips Codex per-project paths so secrets and private repo paths never get committed. For the

β€Žghostty/configβ€Ž

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
window-theme = dark
2+
copy-on-select = true
3+
font-family = Hack Nerd Font Mono
4+
theme = GitHub Dark
5+
background = #101216
6+
foreground = #8b949e
7+
selection-background = #3b5070
8+
selection-foreground = #ffffff
9+
cursor-color = #c9d1d9
10+
cursor-text = #101216
11+
cursor-style = bar
12+
cursor-style-blink = true
13+
font-synthetic-style = false
14+
palette = 0=#000000
15+
palette = 1=#f78166
16+
palette = 2=#56d364
17+
palette = 3=#e3b341
18+
palette = 4=#6ca4f8
19+
palette = 5=#db61a2
20+
palette = 6=#2b7489
21+
palette = 7=#ffffff
22+
palette = 8=#4d4d4d
23+
palette = 9=#f78166
24+
palette = 10=#56d364
25+
palette = 11=#e3b341
26+
palette = 12=#6ca4f8
27+
palette = 13=#db61a2
28+
palette = 14=#2b7489
29+
palette = 15=#ffffff
30+
keybind = shift+enter=text:\n
31+
shell-integration-features = ssh-env,ssh-terminfo,sudo

β€Žghostty/setup.shβ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
# shellcheck source=../scripts/functions.sh
4+
5+
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
6+
cd "$DIR" || exit 1
7+
8+
. ../scripts/functions.sh
9+
10+
SOURCE="$DIR"
11+
DESTINATION="$HOME/.config/ghostty"
12+
13+
info "Setting up Ghostty..."
14+
15+
mkdir -p "$DESTINATION"
16+
scopy "$SOURCE/config" "$DESTINATION/config" || exit 1
17+
18+
if command -v duti >/dev/null 2>&1; then
19+
substep_info "Setting Ghostty as the default terminal..."
20+
if duti -s com.mitchellh.ghostty public.unix-executable all; then
21+
substep_success "Ghostty is now the default terminal."
22+
else
23+
substep_error "Failed setting Ghostty as the default terminal."
24+
fi
25+
else
26+
substep_info "duti not found; skipping default terminal assignment."
27+
fi
28+
29+
success "Finished configuring Ghostty."

β€Žpackages/Brewfileβ€Ž

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
tap "anomalyco/tap", trusted: true
22
tap "golangci/tap", trusted: true
33
tap "oven-sh/bun", trusted: true
4-
tap "warpdl/tap", trusted: true
54
# Static checker for GitHub Actions workflow files
65
brew "actionlint"
76
# Cryptography and SSL/TLS Toolkit
@@ -32,6 +31,8 @@ brew "cmake"
3231
brew "curl"
3332
# Debugger for the Go programming language
3433
brew "delve"
34+
# Select default apps for documents and URL schemes on macOS
35+
brew "duti"
3536
# Simple, fast and user-friendly alternative to find
3637
brew "fd"
3738
# Banner-like program prints strings as ASCII art
@@ -140,6 +141,8 @@ cask "codex"
140141
cask "droid"
141142
# Developer targeted fonts with a high number of glyphs (Nerd Fonts)
142143
cask "font-hack-nerd-font"
144+
# Terminal emulator that uses platform-native UI and GPU acceleration
145+
cask "ghostty"
143146
# Web browser
144147
cask "google-chrome"
145148
# Tools to protect your emails and files
@@ -166,8 +169,6 @@ cask "tailscale-app"
166169
cask "temurin"
167170
# Free and open-source OpenVPN client
168171
cask "tunnelblick"
169-
# Rust-based terminal
170-
cask "warp"
171172
# Multiplayer code editor
172173
cask "zed"
173174
# Video communication and virtual meeting platform

β€Žtests/test_dotfiles.pyβ€Ž

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def setUp(self):
3434
self.fish_log = self.logs_dir / "fish.log"
3535
self.fisher_log = self.logs_dir / "fisher.log"
3636
self.brew_log = self.logs_dir / "brew.log"
37+
self.duti_log = self.logs_dir / "duti.log"
3738

3839
self.write_stub(
3940
"sudo",
@@ -93,6 +94,13 @@ def setUp(self):
9394
esac
9495
done
9596
97+
exit 0
98+
""",
99+
)
100+
self.write_stub(
101+
"duti",
102+
"""#!/bin/bash
103+
printf '%s\n' \"$*\" >> \"$FAKE_DUTI_LOG\"
96104
exit 0
97105
""",
98106
)
@@ -107,6 +115,7 @@ def setUp(self):
107115
"FAKE_FISHER_LOG": str(self.fisher_log),
108116
"FAKE_BREW_LOG": str(self.brew_log),
109117
"FAKE_SUDO_LOG": str(self.sudo_log),
118+
"FAKE_DUTI_LOG": str(self.duti_log),
110119
}
111120
)
112121

@@ -183,7 +192,7 @@ def snapshot_managed_repo(self) -> dict[str, tuple[str, str | None]]:
183192
"fish",
184193
"claude",
185194
"opencode",
186-
"warp",
195+
"ghostty",
187196
"codex",
188197
"factory",
189198
"fisher",
@@ -400,13 +409,15 @@ def test_starship_creates_first_run_destination(self):
400409
self.assertEqual(starship_result.returncode, 0, msg=starship_result.stderr)
401410
self.assertTrue((self.home / ".config" / "starship.toml").exists())
402411

403-
def test_warp_setup_restores_settings_and_tab_configs(self):
404-
result = self.run_cmd("bash", "warp/setup.sh")
412+
def test_ghostty_setup_restores_config_and_sets_default_terminal(self):
413+
result = self.run_cmd("bash", "ghostty/setup.sh")
405414

406415
self.assertEqual(result.returncode, 0, msg=result.stderr)
407-
self.assertTrue((self.home / ".warp" / "settings.toml").exists())
408-
self.assertTrue(
409-
(self.home / ".warp" / "default_tab_configs" / "worktree.toml").exists()
416+
self.assertTrue((self.home / ".config" / "ghostty" / "config").exists())
417+
self.assertTrue(self.duti_log.exists())
418+
self.assertIn(
419+
"com.mitchellh.ghostty",
420+
self.duti_log.read_text(encoding="utf-8"),
410421
)
411422

412423
def test_codex_setup_seeds_config_when_absent_and_preserves_existing(self):
@@ -497,16 +508,13 @@ def test_update_backs_up_curated_opencode_files(self):
497508
self.assertTrue((self.fixture / "opencode" / "dcp.jsonc").exists())
498509
self.assertTrue((self.fixture / "opencode" / "prompts" / "custom.md").exists())
499510

500-
def test_update_backs_up_warp_config(self):
511+
def test_update_backs_up_ghostty_config(self):
501512
self.seed_update_sources()
502513

503514
result = self.run_cmd("bash", "update.sh")
504515

505516
self.assertEqual(result.returncode, 0, msg=result.stderr)
506-
self.assertTrue((self.fixture / "warp" / "settings.toml").exists())
507-
self.assertTrue(
508-
(self.fixture / "warp" / "default_tab_configs" / "worktree.toml").exists()
509-
)
517+
self.assertTrue((self.fixture / "ghostty" / "config").exists())
510518

511519
def test_update_strips_codex_project_paths(self):
512520
self.seed_update_sources()
@@ -893,11 +901,8 @@ def seed_update_sources(self) -> None:
893901
)
894902
self.write_file(opencode_dir / "prompts" / "custom.md", "prompt\n")
895903

896-
warp_dir = self.home / ".warp"
897-
self.write_file(warp_dir / "settings.toml", "[appearance]\nfont_size = 13.0\n")
898-
self.write_file(
899-
warp_dir / "default_tab_configs" / "worktree.toml", 'name = "Worktree"\n'
900-
)
904+
ghostty_dir = self.home / ".config" / "ghostty"
905+
self.write_file(ghostty_dir / "config", "theme = GitHub Dark\n")
901906

902907
codex_dir = self.home / ".codex"
903908
self.write_file(

β€Župdate.shβ€Ž

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,7 @@ stage_directory "$opencode_dir/prompts" "opencode/prompts"
240240
# Keep the legacy repo-only agent directory pruned.
241241
track_target "opencode/agent"
242242

243-
warp_dir="$HOME/.warp"
244-
stage_file "$warp_dir/settings.toml" "warp/settings.toml"
245-
stage_directory "$warp_dir/default_tab_configs" "warp/default_tab_configs"
243+
stage_file "$HOME/.config/ghostty/config" "ghostty/config"
246244

247245
stage_codex_config
248246
stage_file "$HOME/.codex/rules/default.rules" "codex/rules/default.rules"

β€Žwarp/default_tab_configs/worktree.tomlβ€Ž

Lines changed: 0 additions & 27 deletions
This file was deleted.

β€Žwarp/settings.tomlβ€Ž

Lines changed: 0 additions & 136 deletions
This file was deleted.

0 commit comments

Comments
Β (0)