160 lines
7.1 KiB
Markdown
160 lines
7.1 KiB
Markdown
# Omarchy customization layer
|
||
|
||
A layered installer that sets up [Omarchy](https://omarchy.org) (Arch + Hyprland)
|
||
with these dotfiles and an opinionated set of removals and swaps. It does **not**
|
||
fork Omarchy — it patches the package list before Omarchy's own installer runs,
|
||
then layers customizations on top using Omarchy's documented extension points, so
|
||
it survives `omarchy-update`.
|
||
|
||
## Environment required
|
||
|
||
This is a **full system installer**, not a sandbox-safe script. Run it only on a
|
||
machine you intend to set up as an Omarchy workstation.
|
||
|
||
- **OS:** a fresh **Arch Linux** install (x86_64). The script aborts if
|
||
`/etc/arch-release` is absent. Arch derivatives (EndeavourOS, CachyOS) are
|
||
untested.
|
||
- **State:** ideally a clean Arch base — Omarchy's installer reconfigures
|
||
bootloader, login (SDDM/Limine), services, and the graphics stack. Existing
|
||
configs at the symlink targets are backed up to `*.pre-omarchy.<timestamp>`,
|
||
not deleted.
|
||
- **Privileges:** a regular user with **`sudo`** rights (do **not** run as root).
|
||
The installer will prompt for `sudo` and change your login shell to `zsh`.
|
||
- **Network:** outbound HTTPS to GitHub, the Arch/AUR mirrors, the Omarchy
|
||
mirror, and `brave.com` (Brave Origin Beta). A working `pacman` mirrorlist.
|
||
- **Required commands:** `git` and `sudo` (preflight checks these). `curl` is
|
||
used for the optional `nvm` install; everything else is installed by Omarchy.
|
||
- **Hardware:** designed around a single **3440×1440 @ 120Hz** ultrawide (see
|
||
`files/hypr-monitors.lua`); adjust that file for other displays.
|
||
- **Time/space:** expect a long run (full desktop + AUR builds) and several GB of
|
||
downloads.
|
||
|
||
> Heads-up: there is no unattended/dry-run mode. Omarchy's own installer is
|
||
> interactive in places. Don't run this on a daily-driver you can't reimage.
|
||
|
||
## Installation
|
||
|
||
On a fresh Arch Linux system, as your normal (non-root) user:
|
||
|
||
```bash
|
||
# 1. Clone these dotfiles
|
||
git clone https://github.com/brianpooe/dotfiles.git ~/dotfiles
|
||
|
||
# 2. Run the installer (clones Omarchy, installs it, applies the layer)
|
||
~/dotfiles/omarchy/install.sh
|
||
|
||
# 3. Reboot (or log out and back in) to start the zsh + Hyprland session
|
||
```
|
||
|
||
Re-apply just the customization layer after an `omarchy-update` — this skips the
|
||
Omarchy core install and only re-applies removals/swaps/symlinks/overrides:
|
||
|
||
```bash
|
||
~/dotfiles/omarchy/install.sh --layer-only
|
||
~/dotfiles/omarchy/install.sh --help # show usage
|
||
```
|
||
|
||
### Configuration (environment variables)
|
||
|
||
| Variable | Default | Purpose |
|
||
|----------|---------|---------|
|
||
| `OMARCHY_REPO` | `basecamp/omarchy` | Omarchy source repo (`owner/name`) |
|
||
| `OMARCHY_REF` | `master` | Omarchy branch/tag to install |
|
||
| `OMARCHY_PATH` | `~/.local/share/omarchy` | Where Omarchy is cloned |
|
||
| `DOTFILES_DIR` | repo root (auto-detected) | Source dir for symlinks |
|
||
| `DEFAULT_FONT` | `JetBrainsMono Nerd Font` | System monospace font |
|
||
| `NVM_VERSION` | `v0.40.1` | Pinned nvm release |
|
||
|
||
Example — install a specific Omarchy tag with a different font:
|
||
|
||
```bash
|
||
OMARCHY_REF=v3.0.0 DEFAULT_FONT="CaskaydiaMono Nerd Font" \
|
||
~/dotfiles/omarchy/install.sh
|
||
```
|
||
|
||
## What it does
|
||
|
||
1. **Clones Omarchy** to `~/.local/share/omarchy` (override with `OMARCHY_REPO` /
|
||
`OMARCHY_REF`).
|
||
2. **Patches the package list** (`lib/packages.sh`) before Omarchy installs.
|
||
3. **Runs Omarchy's own installer** (`install.sh`) for the full system setup.
|
||
4. **Applies the layer**: Brave Origin Beta as default browser, WezTerm as
|
||
default terminal, dotfile deps + symlinks, and menu/theme overrides.
|
||
|
||
## Changes vs. upstream Omarchy
|
||
|
||
### Packages removed (from `install/omarchy-base.packages`)
|
||
|
||
| Category | Packages |
|
||
|-----------------|----------|
|
||
| Shell tools | `tobi-try` (the `try` tool) |
|
||
| TUIs | `lazydocker`, `cliamp` (Clamp) |
|
||
| GUIs | `obsidian`, `pinta`, `signal-desktop`, `obs-studio`, `kdenlive` |
|
||
| Commercial apps | `1password-beta`, `1password-cli`, `spotify`, `typora`, `libreoffice-fresh` |
|
||
| Browser | `chromium` (replaced by Brave Origin Beta) |
|
||
|
||
> Note: current Omarchy has no "Commercial apps" *menu* — the commercial items
|
||
> are base packages, so they are removed from the package list.
|
||
|
||
- **Default web apps** (frameless PWA wrappers): `install/packaging/webapps.sh`
|
||
is cleared, so none are installed.
|
||
- **Lazydocker TUI entry** removed from `install/packaging/tuis.sh` (Disk Usage
|
||
kept).
|
||
|
||
### Browser
|
||
|
||
- **Brave Origin Beta** (https://brave.com/origin/linux/beta/) installed via
|
||
Omarchy's native `omarchy-install-browser brave-origin` (AUR package
|
||
`brave-origin-beta-bin`) and set as default with `omarchy-default-browser`.
|
||
- Because `omarchy-launch-webapp` routes through the default browser, removing
|
||
Chromium is safe once Brave Origin is the default.
|
||
|
||
### Terminal
|
||
|
||
- **WezTerm** installed and set as the default terminal by writing
|
||
`~/.config/xdg-terminals.list` (desktop id `org.wezfurlong.wezterm.desktop`).
|
||
Omarchy's `Super+Return` runs `xdg-terminal-exec`, which honors that file.
|
||
- WezTerm **follows the active Omarchy theme**: `.config/wezterm/wezterm.lua`
|
||
reads `~/.config/omarchy/current/theme/colors.toml` (the palette Omarchy
|
||
generates for every theme), falling back to Kanagawa Wave when Omarchy is
|
||
absent. A `theme-set` hook (`~/.config/omarchy/hooks/theme-set.d/wezterm`)
|
||
bumps the config mtime after a theme switch so WezTerm live-reloads.
|
||
|
||
### Menu (`Super + Alt + Space`)
|
||
|
||
Overrides are installed to `~/.config/omarchy/extensions/menu.sh` (sourced by
|
||
`omarchy-menu` after its functions are defined, so the redefinitions win):
|
||
|
||
- **Setup** — removed: System Sleep, DNS, Security (kept: Audio, Wifi, Bluetooth,
|
||
Power Profile, Monitors, Keybindings, Input, Defaults, Config).
|
||
- **Install** — removed: Web App, TUI, Service, Development, Editor, Terminal,
|
||
Browser, AI, Gaming, Windows (kept: Package, AUR, Style).
|
||
|
||
The removed submenu functions still exist in Omarchy but are unreachable from the
|
||
launcher. Regenerate `files/menu.sh` from upstream if Omarchy's menu changes.
|
||
|
||
## Theming model
|
||
|
||
Terminal and editor colors are **decoupled by design** (Option A):
|
||
|
||
- **WezTerm** follows whatever Omarchy theme is active.
|
||
- **Neovim / tmux / starship** stay on Kanagawa via the dotfiles' `KANAGAWA_THEME`
|
||
env chain in `.zshrc`, independent of Omarchy. (`WEZTERM_THEME` from that chain
|
||
is now unused.)
|
||
|
||
## Files
|
||
|
||
| File | Purpose |
|
||
|------|---------|
|
||
| `install.sh` | Entry point / orchestration |
|
||
| `lib/common.sh` | Helpers (logging, symlink-with-backup, paths) |
|
||
| `lib/packages.sh` | Patches Omarchy's package list / webapps / tuis |
|
||
| `lib/browser.sh` | Brave Origin Beta install + default |
|
||
| `lib/terminal.sh` | WezTerm install + default terminal |
|
||
| `lib/dotfiles.sh` | Dotfile deps (zsh, plugins, tpm, nvm) + symlinks |
|
||
| `lib/font.sh` | Sets the default font (JetBrainsMono Nerd Font) |
|
||
| `lib/overrides.sh` | Installs menu overrides + WezTerm theme hook |
|
||
| `files/menu.sh` | Menu overrides (symlinked into Omarchy) |
|
||
| `files/theme-set-wezterm` | Theme-switch hook that reloads WezTerm |
|
||
| `files/hypr-wezterm.lua` | Hyprland rule tagging WezTerm as a terminal |
|
||
| `files/hypr-monitors.lua` | Monitor config: 3440x1440@120 ultrawide, 1x scale |
|