diff options
author | Jacob Janzen <jjanzenn@proton.me> | 2024-08-07 22:34:10 -0500 |
---|---|---|
committer | Jacob Janzen <jjanzenn@proton.me> | 2024-08-07 22:34:10 -0500 |
commit | 3832e2c085e5137f78cdf5f0c1e9cf273ffbc338 (patch) | |
tree | a2bd6bd1119aacbaa23ede55ad3ff1c46a76ea57 /index.org | |
parent | 05a87bb0eb20345694a09c9e5e5930028c0c0339 (diff) |
complete my configuration migration
Diffstat (limited to 'index.org')
-rw-r--r-- | index.org | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/index.org b/index.org new file mode 100644 index 0000000..b8c2396 --- /dev/null +++ b/index.org @@ -0,0 +1,107 @@ +#+title: Dotfiles =/= + +This page is the home of my dotfiles. They are written using literate programming in Emacs Org-Mode. The =install= script installs the dotfiles in their correct places and installs itself as an executable called =update-home= on the path to allow myself to run the script without having the repository downloaded on my system. + +* Directories +- [[./config/index.org][.config/]] +- [[./local/index.org][.local/]] +- [[./ssh/index.org][.ssh/]] + +* Files +- [[./clang-format.org][.clang-format]] +- [[./gitconfig.org][.gitconfig]] +- [[./profile.org][.profile]] +- [[./zshrc.org][.zshrc]] +- [[./wallpaper][.wallpaper]] + +* Install Script +It can be run as =./install=, so make it explicit what binary to run it with (POSIX shell). +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + #!/bin/sh +#+end_src + +Save the old log file. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + mv ~/.update-home.log ~/.update-home.log.old +#+end_src + +Install the dotfiles repository at =~/.dotfiles= if it doesn't already exist. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + if ! test -d ~/.dotfiles; then + echo Installing dotfiles... + git clone git@git.sr.ht:~jjanzen/.dotfiles ~/.dotfiles >> ~/.update-home.log + fi +#+end_src + +POSIX shell doesn't have =pushd= and =popd=. We do it manually by saving the current path before moving to =~/.dotfiles=. Exit if the =cd= call fails (it shouldn't). +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + CWD=$(pwd) + cd ~/.dotfiles || exit +#+end_src + +Stash any existing changes before moving to the main branch and pulling any new changes from the remote. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + { + git stash + git checkout main + git pull --rebase + } >> ~/.update-home.log +#+end_src + +If the =update-home= executable has changed, replace it and bootstrap into the new one. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + if ! diff ~/.dotfiles/install ~/.local/bin/update-home >> ~/.update-home.log; then + cp ~/.dotfiles/install ~/.local/bin/update-home || exit 1 + echo Changes have been made to the install script. + echo Running the new install script. + ~/.local/bin/update-home + exit + fi +#+end_src + +Extract each configuration file from its literate =.org= file into its correct location by running =org-babel-tangle= on each =.org= file. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + echo Installing configuration files... + find -- * -type f -name "*.org" | while read -r file; do + emacs --batch "${file}" -f package-initialize --eval '(org-babel-tangle)' >> ~/.update-home.log + done +#+end_src + +Install the [[./wallpaper][wallpaper]] file. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + echo Installing wallpaper... + cp wallpaper ~/.wallpaper +#+end_src + +Install any missing fonts by extracting the corresponding =tar.gz= archive. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + fonts_changed=false + if ! test -d ~/.local/share/fonts/ComputerModern; then + echo Computer Modern font missing. Installing... + tar xf ~/.dotfiles/local/share/fonts/ComputerModern.tar.gz -C ~/.local/share/fonts >> ~/.update-home.log + fonts_changed=true + fi + if ! test -f ~/.local/share/fonts/NFM.ttf; then + echo Nerd Font Mono font missing. Installing... + tar xf ~/.dotfiles/local/share/fonts/NFM.tar.gz -C ~/.local/share/fonts >> ~/.update-home.log + fonts_changed=true + fi + if ! test -d ~/.local/share/fonts/SauceCodePro; then + echo Source Code Pro Nerd Font missing. Installing... + tar xf ~/.dotfiles/local/share/fonts/SauceCodePro.tar.gz -C ~/.local/share/fonts >> ~/.update-home.log + fonts_changed=true + fi +#+end_src + +If any missing fonts were installed, update the font cache. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + if [ $fonts_changed = true ]; then + echo Updating the font cache... + fc-cache -f >> ~/.update-home.log + fi +#+end_src + +Move the user back to where they came from. +#+begin_src sh :tangle ~/.dotfiles/install :mkdirp yes + cd "${CWD}" || exit +#+end_src |