# `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