blob: 0698279f14cf003c641d4aed7f75fc1253d615be (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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.jpg][.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
|