https://github.com/igorjs/omacos
Opinionated one-command macOS setup with Tokyo Night theme
https://github.com/igorjs/omacos
automation dotfiles macos setup shell
Last synced: about 8 hours ago
JSON representation
Opinionated one-command macOS setup with Tokyo Night theme
- Host: GitHub
- URL: https://github.com/igorjs/omacos
- Owner: igorjs
- License: apache-2.0
- Created: 2026-06-08T06:41:12.000Z (18 days ago)
- Default Branch: main
- Last Pushed: 2026-06-18T13:59:28.000Z (7 days ago)
- Last Synced: 2026-06-18T14:26:46.374Z (7 days ago)
- Topics: automation, dotfiles, macos, setup, shell
- Language: Shell
- Homepage:
- Size: 153 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING-RULES.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
# OmacOS
One-command macOS setup. Tokyo Night themed. Modular and re-runnable.
OmacOS is the macOS equivalent of [Omakub](https://omakub.org/) and [Omarchy](https://omarchy.com/): a single `./install.sh` that turns a fresh Mac into a fully configured development environment. Every script is idempotent, so you can re-run it safely at any time. Configs are symlinked from the repo by default, so your settings stay version-controlled.
---
## Why "OmacOS"?
**Omakase** (お任せ) is a Japanese phrase meaning roughly "I leave it up to you," from the verb *makaseru*, to entrust. In a sushi restaurant, ordering omakase means handing the decisions to the chef: no menu, no choosing, you trust their judgment to serve the best of what they have. It is the opposite of a la carte.
OmacOS applies that idea to a Mac dev environment: rather than making you pick every tool and setting, it ships opinionated, curated defaults that you trust and set up with one command. The name is Omakase + macOS, in the spirit of Omakub (Ubuntu) and Omarchy (Arch).
---
## Prerequisites
- A Mac running macOS Sequoia (15) or later
- An internet connection
- That's it
The installer handles Xcode Command Line Tools, Rosetta 2 (Apple Silicon), Homebrew, and everything else automatically.
---
## Installation
```bash
git clone https://github.com/igorjs/omacos.git ~/omacos
cd ~/omacos
./install.sh
```
Or, to copy config files instead of symlinking them:
```bash
./install.sh --copy
```
---
## What Gets Installed
### Window Manager
- **AeroSpace** - tiling window manager with Vim-style keybindings (Alt+hjkl to focus, Alt+Shift+hjkl to move)
### Terminal
- **Ghostty** - GPU-accelerated terminal with Tokyo Night theme and JetBrainsMono Nerd Font
- **tmux** - terminal multiplexer with Tokyo Night status bar
### Editor
- **Zed** - primary editor (`EDITOR="zed --wait"`, `git core.editor = "zed --wait"`), Tokyo Night theme
- **Neovim 0.11+** - terminal fallback editor, configured with lazy.nvim, Treesitter, native LSP, and blink.cmp completion
### Shell
- **Starship** - fast cross-shell prompt with git status, Tokyo Night colors
- zsh-autosuggestions - fish-style suggestions as you type
- zsh-syntax-highlighting - command syntax coloring
### CLI Tools
- ripgrep, fd, fzf, jq, bat, eza, zoxide, lazygit, gh
### Languages (via mise)
- Node.js LTS
- Python (latest, plus uv for package management)
- Go (latest)
- Rust (stable, with rustfmt, clippy, rust-analyzer, rust-src)
### Containers
- **Docker Desktop** - note: requires one manual launch to complete setup
### AI
- **Claude Code** - Anthropic's AI coding tool (requires a paid Anthropic plan or API key)
---
## Post-Install Manual Steps
After the installer finishes, a few things require manual action:
1. **AeroSpace Accessibility permission**: System Settings > Privacy and Security > Accessibility, toggle on AeroSpace. Required for window management to work.
2. **Docker Desktop first launch**: Open Spotlight (Cmd+Space), search "Docker", launch it. Accept the license and allow the helper tool installation.
3. **GitHub CLI authentication**:
```bash
gh auth login
```
4. **Zed: Tokyo Night extension**: Open Zed, press Cmd+Shift+X, search "Tokyo Night", install the extension.
5. **macOS Sequoia appearance tweaks**: System Settings > Appearance lets you set Icon Style and Folder Color. These settings have no stable scriptable defaults keys, so they require manual selection.
6. **Restart your shell**: Open a new terminal window, or run `source ~/.zshrc`.
---
## Theme System
OmacOS ships with the **Tokyo Night** theme. Themes live in `themes//` and consist of:
| File | Purpose |
|------|---------|
| `ghostty.conf` | Ghostty theme line |
| `tmux.conf` | tmux status bar colors |
| `zed.json` | Zed theme setting |
| `starship.toml` | Starship color palette |
| `nvim.lua` | Neovim colorscheme |
| `zsh.zsh` | zsh-autosuggestions and zsh-syntax-highlighting colors |
| `macos.sh` | macOS accent color and wallpaper |
| `wallpaper.png` | Desktop wallpaper |
### Apply a theme
```bash
omacos theme set tokyonight
```
### List available themes
```bash
omacos theme list
```
### Add a new theme
1. Create `themes/mytheme/` with the files listed above.
2. Run `omacos theme set mytheme`.
The `starship.toml` in a theme defines a `[palettes.active]` block that gets concatenated onto `config/starship.toml`. The base config uses named palette colors (blue, green, etc.), so themes only need to override those color values.
---
## CLI Reference
```
omacos theme set Apply a theme to all tools
omacos theme list List available themes
omacos update Update Homebrew packages, Claude Code, and re-apply theme
omacos snapshot [label] Take a macOS defaults snapshot
omacos export [dir] Export Brewfile + key defaults plists with a restore.sh
omacos doctor Check system health, print pass/fail for all components
```
---
## Settings Snapshot Tool
`tools/mac-snapshot.sh` lets you capture and diff macOS `defaults` before and after changing a setting in System Settings, so you can find the exact `defaults write` command to reproduce it.
### Take a snapshot
```bash
tools/mac-snapshot.sh snapshot before-changes
```
### Watch for changes (interactive)
```bash
tools/mac-snapshot.sh watch
```
This takes a before snapshot, prompts you to change one setting, then takes an after snapshot and shows you exactly what changed, including suggested `defaults write` commands to add to `macos/defaults.sh`.
### List snapshots
```bash
tools/mac-snapshot.sh list
```
### Diff two snapshots
```bash
tools/mac-snapshot.sh diff before-changes after-changes
```
### Export current settings
```bash
tools/mac-snapshot.sh export
# or via the CLI:
omacos export
```
Exports a `Brewfile`, key domain plists, and a `restore.sh` script.
---
## Language Runtimes (mise)
[mise](https://mise.jdx.dev/) manages language runtimes globally and per-project. Global versions are set during install. Per-project versions are configured in a `.mise.toml` file in the project root.
A sample `.mise.toml` is included at the repo root. Copy it to any project to pin versions:
```bash
cp ~/omacos/.mise.toml myproject/.mise.toml
```
mise activates automatically on `cd` into a directory with a `.mise.toml`.
### uv for Python packages
Rather than `pip install`, use [uv](https://docs.astral.sh/uv/) for fast, reproducible Python package management:
```bash
uv init myproject
uv add requests
uv run python main.py
```
### Rust via mise
mise installs Rust via rustup. The rust-analyzer component is included, so it works out of the box in Neovim and Zed.
---
## Known Quirks
- **TPM plugin install focus**: After pressing `prefix+I` to install tmux plugins, the "Done, press ENTER" screen requires a mouse click before Enter works. This is a macOS window-focus edge case triggered by TPM's install overlay. It only happens during plugin installation (once per machine).
- **security.sh requires sudo**: `macos/security.sh` (firewall, SSH, mDNS) needs `sudo`. If running in a non-interactive context where sudo isn't pre-authenticated, it will prompt. Run `sudo -v` first or execute it manually: `bash macos/security.sh`.
- **Safari privacy defaults**: macOS sandboxes Safari's preferences. The `SendDoNotTrackHTTPHeader` default can only be written after Safari has been opened at least once. The installer silently skips it otherwise.
---
## Honest macOS Limits
A few things cannot be fully scripted on macOS:
- **Accent color** is capped at 8 Apple presets. There is no stable way to set an arbitrary hex color as the system accent. `defaults write -g AppleAccentColor -int 5` sets "Purple" (closest to Tokyo Night's `#bb9af7`).
- **Sequoia Icon Style and Folder Color** have no stable scriptable defaults keys as of this writing. Set them in System Settings > Appearance.
- **Window chrome** (titlebars, traffic lights) cannot be arbitrarily themed system-wide. Individual apps like Ghostty use `window-decoration = false` to hide their chrome.
- **Keyboard layout** changes typically require a logout to register. The `macos/locale.sh` sets the defaults key, but you may need to also add the layout manually in System Settings > Keyboard > Text Input > Edit.
Use `tools/mac-snapshot.sh watch` to discover new scriptable keys as macOS evolves.
---
## Adding Future Themes
To add Catppuccin, Gruvbox, or any other theme:
1. Create `themes/catppuccin/` (or your theme name).
2. Add each file following the pattern of `themes/tokyonight/`.
3. The `starship.toml` in your theme should define `[palettes.active]` with the same color names (blue, cyan, green, red, yellow, purple, fg, muted).
4. Test with: `omacos theme set catppuccin`
---
## v2 Roadmap
Features noted for a future v2 release:
- **Raycast** - launcher and productivity tool (would replace Spotlight usage)
- **Sketchybar** - custom menu bar with Tokyo Night styling
These are intentionally excluded from v1 to keep the initial setup minimal and reliable. Uncomment the relevant lines in `Brewfile` to install them manually.
---
## Inspiration
- [Omakub](https://omakub.org/) by DHH - the Ubuntu equivalent
- [Omarchy](https://omarchy.com/) - Arch Linux variant
- [Tokyo Night](https://github.com/folke/tokyonight.nvim) color scheme by Folke Vereecken