# dotfiles_v2

Dotfiles repo migrated from `dotfiles/` to the current `flow-cli` layout.

## Key layout rules

- `_shared/<package>/...` is linked for every profile.
- `<profile>/<package>/...` is linked only for that profile.
- A package-local `_root/` maps to absolute paths via sudo.
  - Example: `_shared/dnsmasq/_root/opt/homebrew/etc/dnsmasq.conf` ->
    `/opt/homebrew/etc/dnsmasq.conf`
- Package target paths are home-relative from package root.
  - Example: `_shared/bin/.bin/flow` -> `~/.bin/flow`

## Flow config

Config files live at:

- `_shared/flow/.config/flow/config.yaml`
- `_shared/flow/.config/flow/packages.yaml`
- `_shared/flow/.config/flow/profiles.yaml`

## External modules (submodule-style packages)

This repo uses flow module packages for shared components:

- `_shared/nvim/_module.yaml` -> `git@gitea.tomastm.com:tomas.mirchev/nvim-config.git`
- `_shared/barg/_module.yaml` -> `git@gitea.tomastm.com:tomas.mirchev/barg-parser.git`

Module packages are refreshed by flow on `dotfiles init` and `dotfiles sync`.

Useful commands:

```bash
flow dotfiles modules list
flow dotfiles modules sync
```

## Profiles

- `macos`
- `linux`

## Quick start

```bash
flow dotfiles init --repo /absolute/path/to/dotfiles_v2
flow dotfiles modules sync
flow dotfiles link --profile macos
flow bootstrap run --profile macos --var HOSTNAME=mymac --var USER_EMAIL=you@example.com --dry-run
```

## Migrated packages from original dotfiles

- Shared: `bin`, `git`, `gitignore`, `zsh`, `tmux`, `htop`, `addpaths`, `dnsmasq`, `nvim` (module),
  `barg` (module)
- macOS: `ghostty`, `wezterm`, `kitty`, `alacritty`, `karabiner`, `linearmouse`, `rectangle`,
  `borders`, `sol`, `homebrew`, `setup`
- Linux: `kwin`

## Notes

- `flow-cli` treats target conflicts as errors (including `_shared` vs profile), so package paths
  must stay unique.
