# `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.py -> 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 defaults to 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)