# README.md of chezmoi repo

This is my chezmoi dotfiles repo

## One line install

```bash
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply https://code.lksz.me/lksz/dotfiles.git
```

## Why even bother?

I work on multiple platforms:
* Windows 11 - as my home PC (not covered directly by this repo... yet)
* TrueNAS SCALE/Linux servers (mine and my backup-buddy friend home-labs
  I manage/support)
* MacOS - Work MacBook Pro
* Linux - @Work log analysis tech servers, (on which I do not have root
  access).

This repo helps me keep these environments (excluding the
Windows/Powershell one for now) as comfortable and predictable for me as
possible.

## Philosophy / Design Guidelines

Do as much setup as possible at once, make maintenance simple, don't
slow down productivity (it's bad for my ADHD).

If a tool is missing, find a single-binary solution that can be managed
by `.chezmoiexternals`. **rust** and **go** based tools are best for
this.

Assume a system has `bash`, `git`, `curl` or `wget`, anything else that
is missing, chezmoi should be able to grab.

NEVER store personal identifying secrets/details or work/employer
specific details in the repo.

Assume others will be interested in investigating/cloning this
envrionment (I know, a bit arrogant), so keep it as generic as possible,
so it can be shared.

## Repo structure

The root dir of the repo is for documentation/orientation, as little
content as possible.

It contains:

* A 'throwaway' chezmoi bootstrap environment:

  ```
  .chezmoiscripts/
  .chezmoi.toml.tmpl
  .chezmoiignore
  .gitignore
  ```
* This `README.md` and a `docs` directory for additional documentation.
* `chezmoi.roots` containing environment specific chezmoi roots.

## Bootstrap

`.chezmoiroot` points to the source-state of the current envrionments.  
I creted this so I can ensure I have the necessary tooling to
effectively initialize an envrionment assuming as little as possible.

Initializing the bootstrap envrionment, detects the macine type,
generates the `.chezmoiroot`, scraps the bootstrap configuration and
initializes chezmoi now that `.chezmoiroot` exitst.

This is why `.gitignore` ignores `.chezmoiroot`, as it is different on
every machine.

## The Different Envrionments

At this point Home and Home.MacOS are almost identical and they will
probably be merged in the future.

I crated the MacOS envionrment when I was unsure about the differences,
wanting to separate the envrionments while I currate them.

Both are POSIX based (to a degree), and my expectation for them is to
behave in as similar a manner as possible.

To make the envrionments 'inherit' from one another, I've written
`symclone.sh`, a tool script that creats symlinks across different
chezmoi environments.

For more information abot each envrionment, see their respective (WIP)
`README.md` files.