# Getting started The Python requirements are all in `requirements.txt`, so before starting you need to issue the following command: ```sh $ pip install -r requirements.txt --user ``` **without** using sudo. Using sudo with pip is a bad idea because it will interfere with your distribution's package manager. If you're on a fresh install, you won't have `pip` installed, so you'll need: ```sh $ sudo pacman -S python-pip ``` or ```sh $ sudo apt install python3-pip ``` The authentication details are stored in `secrets`. Therefore, you have a template `secrets.template` that you need to copy and rename: ```sh $ cp secrets{.template,} ``` Modify the resulting file, and then run `./install.py` with needed flags (`./install.py -h` is your friend). # About the files in the repo * `borg_backup.sh`<br> Borg backup script. Used by a pacman hook to backup my system, but it can also be run manually. * `configs.yml`<br> Lists the things to install, which includes programs, symlinks, git clones, shell commands... * `dotfiles/`<br> The actual dotfiles. They are symlinked to the location that the system expects to find them. * `firefox_addons.txt`<br> I like to install my Firefox add-ons manually in the Firefox add-on manager, so this file just reminds me what to install and includes the urls to each add-on. * `install.py`<br> Installs everything using `configs.yml`. This is the file to actually run. * `rsync_backup.sh`<br> rsync backup script. Used by a systemd timer to backup my system, but it can also be run manually. * `secrets.template`<br> Contains environment variables for authentication and personnalization. Use it to create a file named `secrets`. * `shellcheck_binary_fix.sh`<br> When running this on ARM, pacman there was no shellcheck package, so this script installs the pre-compiled binary instead. If your package manager finds shellcheck, this script won't run. * `todo`<br> Never seems to remain empty... # YML commands `configs.yml` contains instructions as keys, which trigger commands. Here is a brief explanation of the implemented commands: * `clone`<br> Perform a `git clone`. With `-f`, remove and clone. With `-u`, perform a `git pull`. Branch can also be specified. * `copy`<br> Copy a file. With `-f`, overwrite existing. * `download`<br> Download a file with a URL. With `-f`, overwrite existing. * `install`<br> Use the package manager to install a package. Specific packages for Debian-based or Arch-based distros can be set. * `include`<br> Include another config file (also yml). * `run`<br> Pass a line of text to a subshell. A condition can be added to launch the command. * `depend`<br> Install another part of the config file before. * `symlink`<br> Make a symlink. * `symlink_dir`<br> Make a symlink to a directory. * `append`<br> Append text to the end of a file. Will only append if the content isn't already in the file. * `write`<br> Write text to a file, overwriting if it exists. # Thanks The idea for the architecture was taken from Dimitri Merejkowsky's [GitHub](https://github.com/dmerejkowsky/dotfiles).