# Milan's Omarchy Config

This repository is the source of truth for Milan's Omarchy workstation.
Configs are restored with symlinks so future edits should happen here.

## Fresh install

```bash
git clone https://git.ta52.dk/milan/omarchy-config.git

cd omarchy-config

./bootstrap.sh
```

## Restore on an existing install

```bash
./install.sh
```

## Installation options

The installer respects environment variables to customize behavior:

- `UPDATE_SYSTEM=1` - Update the system packages before installing (skipped by default on fresh Omarchy installs)
- `ENABLE_SYSTEM_SERVICES=1` - Enable system-level services (user services are enabled by default)
- `INSTALL_SMB=1` - Run the optional SMB automount installer

Example:

```bash
UPDATE_SYSTEM=1 ENABLE_SYSTEM_SERVICES=1 ./install.sh
```

## Installer behavior

The installer is designed to be:

- **Idempotent** - Safe to run multiple times
- **Robust** - Continues after non-critical failures and reports them at the end
- **Fast** - Does not update the system by default
- **Deterministic** - Same results on each run
- **Minimal** - Requires minimal user interaction

All configs are backed up before being replaced. Backups are stored in `~/.local/state/omarchy-config/backups/`.

## Configuration symlinking

Entire config directories are symlinked from this repository into `~/.config`. This means:

- **Pro**: Configs are centrally managed and changes propagate immediately
- **Con**: New files added to managed directories in `~/.config` will not automatically appear in git
  - Future Omarchy config additions inside symlinked directories must be committed manually from this repo
  - This is an intentional trade-off for centralized management

## Fonts

Fonts from the `fonts/` directory are symlinked to `~/.local/share/fonts/omarchy-config` and the system font cache is updated automatically.

## Update repository

After changing your setup:

```bash
./backup.sh

git add .

git commit -m "Update"

git push
```

## Structure

- `tracked-configs.txt` lists every managed config symlink
- `configs/` stores files that restore into `~/.config`
- `bash/` stores `.bashrc` and `.bash_aliases` when enabled in `tracked-configs.txt`
- `scripts/` restores executable helpers into `~/.local/bin`
- `applications/` restores custom launchers into `~/.local/share/applications`
- `fonts/` symlinks into `~/.local/share/fonts/omarchy-config`
- `system/` stores exported service and system package metadata
- `smb/` stores SMB automount templates without credentials
