aboutsummaryrefslogtreecommitdiff
#+title: Dotfiles
#+author: Aryadev Chavali
#+description: README for Dotfiles

General configuration for my system, that system being composed of two
things:
- Emacs
- The bootstrap for Emacs

[[file:emacs-screenshot.png]]

* Setup
Assumptions:
- You're on Linux
- This repository is located at =~/Dotfiles=
- You have [[https://www.gnu.org/software/stow/][GNU/stow]]

#+begin_src sh
mkdir -p ~/.local/src \
      ~/.local/bin \
      ~/.local/lib \
      ~/.local/share \
      ~/.config \
      ~/Downloads \
      ~/Code \
      ~/Media \
      ~/Projects \
      ~/Text;

cd Dotfiles;
stow Emacs tmux vim Shell XServer Scripts SystemD SXHkD mpv aspell \
     ClangFormat Dunst Zathura
#+end_src

* Why use this
Please don't.  If you're looking for inspiration, this is where it
dies.  I don't maintain this for anyone but me; verily, I have no
shame about it.  Don't expect this to work for you if you're not
willing to roll your sleeves up.
* 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