<commit_before># perdian does dotfiles

After having managed my personal configurations and install scripts manually for years I got tired of setting up the different settings over and over again when switching to a new computer, making  sure all the machines that I use (at home, in the office, my personal server, etc.) are all  configured similarly and have all the bits and pieces in place I expect from them.

This dotfiles project is the result (or let's call it work in progress) of me wanting to have all these tweaks versioned and easy to access at any time.

As with many projects I'm standing on the shoulders of great people and have recklessly copied ideas and configurations from many sources, most prominently [<NAME>](https://github.com/holman/dotfiles) and [<NAME>](https://github.com/ryanb/dotfiles).

## What's inside

My personal collection of configurations mostly designed to work on macOS but also on Linux flavors (like Ubuntu which powers my personal webserver).
I'm far from suggesting that it works for everybody but it definitely works for me.
If you find it interesting [fork it](https://github.com/perdian/dotfiles/fork), remove what you don't use, and build on what you do use.
The project itself is not necessarily designed to be used as is by anyone else but should merely servce as an idea of how *your* personal dotfiles could be structured.

However: If you are lazy and just want to completely copy my personal stuff: Feel free to do so!

## Environments

I do not want *all* dotfiles to be available on *all* environments.
For example certain configurations only apply to my personal machine (that is running macOS) and not my server (that is running Ubuntu).

The concept of *environments* provides an abstraction for this where during the bootstrap process (when opening a new terminal) a series of discovery processes is started and only those environments discovered will be made available.

All environment specific scripts and settings are stored inside the `environments` subfolder.
Each subfolder within the `environments` subfolder represents a separate set of settings specific to that environment.
The environment itself is included during the bootstrap process depending on its *activation criteria*:

The `default` environment will be included automatically.
The `macos` and `linux` environments will also be included automatically if the startup process discovers that it's running on macOS or Linux.

All other environments must be selected manually by adding a line for each environment into a file named `.dotfiles-environment` located in the personal home directory.

Within the dotfiles project there are currently no manually selectable environment available as so far everything works fine for me with the automatic environments.

### Topics

The individual configuration files and resources inside the environments are grouped around *topic areas*, where each topic area is represented by its own subdirectory below the environment directory.

Anything with an extension of `.zsh` will get automatically included into your zsh shell.

Anything with an extension of `.symlink` will get symlinked into a target directory inside the users home directory (or the home directory itself). The part between an (optional) 'at' character and the `.symlink` extension will determine the exact target directory below the users home directory. If no explicit target directory is given (the extension is just `.symlink`) then the link will be created inside the users home directory (`$HOME`). Otherwise the part between the 'at' character and the `.symlink` extension will be translated into the actual directory inside the home directory, where all 'at' characters will be replaced by a forward slash. So for example the file `private.xml@Library@Application Support@karabiner.symlink` will be translated to the actual target directory `~/Library/Application Support/karabiner`.

### Components

There are a few special files inside the hierarchy.<commit_msg>Remove obsolete documentation<commit_after># perdian does dotfiles

After having managed my personal configurations and install scripts manually for years I got tired of setting up the different settings over and over again when switching to a new computer, making  sure all the machines that I use (at home, in the office, my personal server, etc.) are all  configured similarly and have all the bits and pieces in place I expect from them.

This dotfiles project is the result (or let's call it work in progress) of me wanting to have all these tweaks versioned and easy to access at any time.

As with many projects I'm standing on the shoulders of great people and have recklessly copied ideas and configurations from many sources, most prominently [Zach Holman](https://github.com/holman/dotfiles) and [<NAME>](https://github.com/ryanb/dotfiles).

## What's inside

My personal collection of configurations mostly designed to work on macOS but also on Linux flavors (like Ubuntu which powers my personal webserver).
I'm far from suggesting that it works for everybody but it definitely works for me.
If you find it interesting [fork it](https://github.com/perdian/dotfiles/fork), remove what you don't use, and build on what you do use.
The project itself is not necessarily designed to be used as is by anyone else but should merely servce as an idea of how *your* personal dotfiles could be structured.

However: If you are lazy and just want to completely copy my personal stuff: Feel free to do so!

## Environments

I do not want *all* dotfiles to be available on *all* environments.
For example certain configurations only apply to my personal machine (that is running macOS) and not my server (that is running Ubuntu).

The concept of *environments* provides an abstraction for this where during the bootstrap process (when opening a new terminal) a series of discovery processes is started and only those environments discovered will be made available.

All environment specific scripts and settings are stored inside the `environments` subfolder.
Each subfolder within the `environments` subfolder represents a separate set of settings specific to that environment.
The environment itself is included during the bootstrap process depending on its *activation criteria*:

The `default` environment will be included automatically.
The `macos` and `linux` environments will also be included automatically if the startup process discovers that it's running on macOS or Linux.

All other environments must be selected manually by adding a line for each environment into a file named `.dotfiles-environment` located in the personal home directory.

Within the dotfiles project there are currently no manually selectable environment available as so far everything works fine for me with the automatic environments.

### Topics

The individual configuration files and resources inside the environments are grouped around *topic areas*, where each topic area is represented by its own subdirectory below the environment directory.

### Components

There are a few special files inside the hierarchy.
{'fraction_non_alphanumeric': 0.04190101237345332, 'fraction_numerical': 0.0, 'mean_word_length': 4.942355889724311, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 1}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1477551', 'n_tokens_mistral': 1589, 'n_tokens_neox': 1531, 'n_words': 1059}