#+title: Dotfiles #+author: Aryadev Chavali #+description: README for Dotfiles This repository contains all of my custom configurations for programs I use daily. * Setup instructions 1) Clone repository to =~/Dotfiles= 2) Construct the following directories: + =~/.local= + =src= + =bin= + =lib= + =share= + =~/.config= + =~/Downloads= + =~/Code= + =~/Media= + =~/Projects= 3) Install [[https://www.gnu.org/software/stow/][GNU/stow]] 4) Go into the repository then pick which modules you want to install + To install a module use ~stow ~ + To remove a module use ~stow -D ~ *NOTE*: GNU/Stow just symbolically links the internals of a module to the home directory i.e. ~stow ~ just symlinks =~/Dotfiles//*= to =~/=. This is why the organisation of each module is slightly weird. This also means you don't need to follow step (3): you can just perform the symlinks yourself if you wish. * Emacs archives On a fresh machine it takes a horrendous amount of time to completely setup my Emacs configuration. This is largely due to /straight/ (the package manager I use for Emacs) having to pull over 80 git repositories for the different packages in my configuration, which is obviously a network bound task. In comparison, it takes a much shorter time to build the Lisp in these packages then load my configuration. Hence I've introduced this measure: a compressed archive of a minimal viable configuration for Emacs. This contains my configuration files, custom Lisp code, all the repositories for external packages I use and the straight package cache. Instead of downloading each repository individually, this archive contains all of them immediately. On my current machine after downloading the archive it takes around 209s to completely build the system including both package and custom Lisp compilation. Once this is done Emacs takes less than 1 second to boot. *NOTE*: This time doesn't include the native compilation time, as that is asynchronous anyway. ** Scripts *IMPORTANT*: These are heavy scripts, expect them to take a while. Therefore, if in Emacs, do _not_ run these via ~C-c C-c~ because it will block the main thread. This script generates the archive: #+begin_src sh tar --use-compress-program="zstdmt -19 -T0" \ -cvf emacs-config.tar.zst \ ~/.config/emacs/config.org \ ~/.config/emacs/early-init.el \ ~/.config/emacs/init.el \ ~/.config/emacs/elisp/ \ ~/.config/emacs/.config/custom.el \ ~/.config/emacs/straight/versions/default.el \ ~/.config/emacs/straight/repos/ #+end_src And this script sends it over via rsync #+begin_src sh rsync -avz --info=progress2 --info=name0 emacs-config.tar.zst \ root@aryadevchavali.com:/var/www/html/resources #+end_src