Files
2026-06-18 21:19:09 +01:00

143 lines
5.4 KiB
Markdown

# warp-dotfiles
Version-controlled [Warp](https://www.warp.dev/) configuration, symlinked into
place on each machine so file-based settings follow me everywhere.
This complements — it does not replace — Warp's cloud features:
- **Settings Sync** (cloud) handles themes, AI settings, feature toggles, and
privacy settings automatically on login.
- **Warp Drive Workflows** (cloud) store reusable, parameterized commands
(e.g. SSH connections).
- **This repo** captures the file-based bits Settings Sync skips: custom
keybindings, custom themes, YAML/tab configs, and local `settings.toml`.
## Layout
```
warp-dotfiles/
├── install.ps1 # symlink installer (Windows / PowerShell)
├── README.md
└── warp/
├── data/ # -> %APPDATA%\warp\Warp\data
│ ├── keybindings.yaml # custom keybindings (if present)
│ ├── tab_configs/ # launch / tab configs (TOML)
│ └── themes/ # custom themes
└── config/ # -> %LOCALAPPDATA%\warp\Warp\config
└── settings.toml # device settings
```
## Symlink mapping
| Repo path | Target on Windows |
| ------------------------------- | ----------------------------------------------- |
| `warp\data\tab_configs` | `%APPDATA%\warp\Warp\data\tab_configs` |
| `warp\data\themes` | `%APPDATA%\warp\Warp\data\themes` |
| `warp\data\keybindings.yaml` | `%APPDATA%\warp\Warp\data\keybindings.yaml` |
| `warp\config\settings.toml` | `%LOCALAPPDATA%\warp\Warp\config\settings.toml` |
Entries whose source does not exist in the repo are skipped, so the script is
safe to run even before you've added keybindings or themes.
> Note: `settings.toml` includes some device-specific values (e.g. startup
> shell). If you don't want it shared across machines, remove that entry from
> `$Entries` in `install.ps1`.
## Set up on a new machine
> The installer is **Windows / PowerShell** only. On macOS or Linux the config
> paths and symlink mechanics differ, so `install.ps1` will not work as-is.
**Prerequisites:** [Git](https://git-scm.com/) and Warp installed. The repo is
public, so cloning needs no authentication.
1. Enable **Developer Mode** so non-admin symlink creation works:
Settings > Privacy & security > For developers > Developer Mode.
(Alternatively, run the installer from an elevated PowerShell.)
2. Clone and run:
```powershell
git clone https://github.com/slaguru666/warp-dotfiles.git $env:USERPROFILE\warp-dotfiles
cd $env:USERPROFILE\warp-dotfiles
pwsh -ExecutionPolicy Bypass -File .\install.ps1
```
3. Restart Warp.
### Useful flags
```powershell
pwsh -File .\install.ps1 -DryRun # preview changes, write nothing
pwsh -File .\install.ps1 -Force # delete existing real targets instead of backing them up
```
Existing real files at a target are backed up to `<target>.bak-<timestamp>`
unless `-Force` is used.
The target roots can also be overridden (handy for testing or non-standard
installs); they default to the standard Warp locations:
```powershell
pwsh -File .\install.ps1 -DataRoot C:\tmp\data -ConfigRoot C:\tmp\config -DryRun
```
- `-DataRoot` — defaults to `%APPDATA%\warp\Warp\data` (tab_configs, themes, keybindings.yaml)
- `-ConfigRoot` — defaults to `%LOCALAPPDATA%\warp\Warp\config` (settings.toml)
### Syncing across machines
The goal is the same on every machine: clone this repo once, then symlink its
files into wherever that machine's Warp reads its config. On most machines the
defaults are correct, so you don't pass any roots:
```powershell
git clone https://github.com/slaguru666/warp-dotfiles.git $env:USERPROFILE\warp-dotfiles
pwsh -File $env:USERPROFILE\warp-dotfiles\install.ps1
```
Use `-DataRoot` / `-ConfigRoot` only when a machine stores Warp's config
somewhere non-standard (e.g. a portable install, a custom `%APPDATA%`, or a
redirected profile). Point them at that machine's Warp `data` and `config`
folders:
```powershell
pwsh -File .\install.ps1 `
-DataRoot D:\PortableWarp\warp\Warp\data `
-ConfigRoot D:\PortableWarp\warp\Warp\config
```
Tip: add `-DryRun` first to confirm the resolved roots before linking. Once
linked, every machine shares the same tracked files — edit on one, `git push`,
then `git pull` on the others. Because Warp also runs **Settings Sync** in the
cloud, prefer keeping device-specific values (startup shell, preferred editor)
out of the synced `settings.toml`, or drop that entry from `$Entries` as noted
above.
## Repository status: archived (read-only)
This repository is **archived** on GitHub (read-only):
- **Consuming the config still works** — `git clone` and `git pull` work on any
number of machines, and the installer runs normally.
- **Pushing changes is rejected** until the repo is unarchived.
To resume contributing config updates, unarchive it first (requires the
[GitHub CLI](https://cli.github.com/)):
```powershell
gh repo unarchive slaguru666/warp-dotfiles --yes
```
## Updating
Because the targets are symlinks back into this repo, edits made in Warp land
directly in the working tree. Commit and push as usual (after unarchiving, per
the note above):
```powershell
cd $env:USERPROFILE\warp-dotfiles
git add -A
git commit -m "Update Warp config"
git push
```