# `requirements.txt`
* cli-ui        -> build user interface in the terminal
* colorama      -> dependency of cli-ui
* unidecode     -> dependency of cli-ui
* ruamel.yaml   -> load and dump yaml with python
* path          -> create path objects (alternative to os.path)

# `bootstrap.sh`
* installs pip
* uses pip to install from requirements.txt
* installs rustup
* uses cargo to install fd-find and exa
* copies xkb-symbols: https://medium.com/@damko/a-simple-humble-but-comprehensive-guide-to-xkb-for-linux-6f1ad5e13450

# `configs.yml`
* holds the symlinks, git clones and config writes

# `install.py`

## main()
* parses args: undefined number of programs as a list
* has a flag to overwrite (--force)
* Installer is a class, --force flag is passed to constructor
* runs Installer.install with the programs list

## class Installer(force=False)
* self.conf -> load `configs.yml`
* self.this_dir = getcwd()
* self.home = ~ (expanduser)
* self.force = force
* install():
    - if no program in list, programs are found in self.conf
    - for each program, run install_program(program)
* install_program(program)
    - print program name
    - look up program conf and assign to `todo` variable
    - for each action in `todo`, call corresponding method
* do_clone(url, dest, branch='master'):
    - create dirs for dest recursively
    - use subprocess to issue git clone command
* do_copy(src, dest):
    - create dirs for dest recursively
    - copy a config file to dest
* do_download(*, url, dest, executable=False):
    - create dirs for dest recursively
    - fetch url to dest
    - if it should be executable, chmod it to 755
* do_run(args):
    - args is a list
    - from that list, create a command
    - subprocess.check_call(command)
* do_symlink(src, dest):
    - if is_dir make tree from parent.parent
    - if not is_dir make tree from parent
    - if dest is a link, remove it
    - create the symlink
* do_write(src, contents):
    - create path to src
    - format the content with self.this_dir and self.home
    - add newline at end
    - write to file