aboutsummaryrefslogtreecommitdiff
path: root/gentoo/install.org
blob: 9a9c0aaa75f88754378e651e9412382785612617 (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
#+title: Install Script

This 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.
     chmod +x ~/.local/bin/update-home
     ~/.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.png][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