#+TITLE: Phundrak’s dotfiles
#+AUTHOR: Lucien "Phundrak” Cartier-Tilet
#+EMAIL: phundrak@phundrak.fr
#+OPTIONS: H:4 broken_links:mark email:t ^:{} auto_id:t

# ### LaTeX ####################################################################
#+LATEX_CLASS: conlang
#+LaTeX_CLASS_OPTIONS: [a4paper,twoside]
#+LATEX_HEADER_EXTRA: \usepackage{tocloft} \setlength{\cftchapnumwidth}{3em}
#+LATEX_HEADER_EXTRA: \usepackage{xltxtra,fontspec,xunicode,svg}
#+LATEX_HEADER_EXTRA: \usepackage[total={17cm,24cm}]{geometry}
#+LATEX_HEADER_EXTRA: \setromanfont{Charis SIL}
#+LATEX_HEADER_EXTRA: \usepackage{xcolor}
#+LATEX_HEADER_EXTRA: \usepackage{hyperref}
#+LATEX_HEADER_EXTRA: \hypersetup{colorlinks=true,linkbordercolor=red,linkcolor=blue,pdfborderstyle={/S/U/W 1}}
#+LATEX_HEADER_EXTRA: \usepackage{multicol}
#+LATEX_HEADER_EXTRA: \usepackage{indentfirst}
#+LATEX_HEADER_EXTRA: \sloppy

# ### HTML #####################################################################
#+HTML_DOCTYPE: html5
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's dotfiles" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's dotfiles" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Installation instructions for Phundrak's dotfiles" />
#+HTML_HEAD_EXTRA: <script src="https://kit.fontawesome.com/4d42d0c8c5.js"></script>
#+HTML_HEAD_EXTRA: <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
#+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.fr/img/mahakala-128x128.png" type="img/png" media="screen" />
#+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.fr/img/favicon.ico" type="image/x-icon" media="screen" />
#+HTML_HEAD_EXTRA: <meta property="og:image" content="https://cdn.phundrak.fr/img/rich_preview.png" />
#+HTML_HEAD_EXTRA: <meta name="twitter:card" content="summary" />
#+HTML_HEAD_EXTRA: <meta name="twitter:site" content="@phundrak" />
#+HTML_HEAD_EXTRA: <meta name="twitter:creator" content="@phundrak" />
#+HTML_HEAD_EXTRA: <style>.org-svg{width:auto}</style>
#+INFOJS_OPT: view:info toc:1 home:https://phundrak.fr/ toc:t
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="https://langue.phundrak.fr/css/htmlize.min.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="https://langue.phundrak.fr/css/main.css"/>
#+HTML_HEAD_EXTRA: <script src="https://langue.phundrak.fr/js/jquery.min.js"></script>
#+HTML_HEAD_EXTRA: <script defer src="https://langue.phundrak.fr/js/main.js"></script>

* Table of Contents                                        :TOC_4_gh:noexport:
- [[#presentation][Presentation]]
- [[#features][Features]]
- [[#screenshots][Screenshots]]
- [[#dependencies][Dependencies]]
- [[#installation][Installation]]
  - [[#install-arch-linux][Install Arch Linux]]
    - [[#get-the-latest-live-system-with-fast-mirrors][Get the latest live system with fast mirrors]]
    - [[#install-the-system][Install the system]]
  - [[#install-yay-if-it-hasnt-been-done-during-the-system-installation][Install =yay= if it hasn’t been done during the system installation]]
  - [[#update-the-system][Update the system]]
  - [[#set-up-yadm][Set up =yadm=]]
    - [[#get-the-dotfiles][Get the dotfiles]]
    - [[#update-the-remotes][Update the remotes]]
    - [[#get-our-git-submodules][Get our git submodules]]
    - [[#generate-the-alt-dotfiles][Generate the alt dotfiles]]
  - [[#set-up-emacs][Set up Emacs]]
  - [[#install-our-needed-packages][Install our needed packages]]
  - [[#enable-and-start-some-services][Enable and start some services]]
  - [[#install-fisher-and-our-fish-shell-extensions][Install Fisher and our fish shell extensions]]
  - [[#install-packages-from-git][Install packages from git]]
    - [[#install-i3-gaps-rounded][Install =i3-gaps-rounded=]]
    - [[#install-polybar-battery][Install Polybar Battery]]
    - [[#download-revealjs][Download Reveal.JS]]
  - [[#set-your-locale][Set your locale]]
  - [[#launch-x][Launch X]]
  - [[#create-some-directories][Create some directories]]
  - [[#install-rust][Install Rust]]
    - [[#install-the-toolchains][Install the toolchains]]
    - [[#install-some-utilities][Install some utilities]]
  - [[#clean-the-pacman-and-yay-cache][Clean the =pacman= and =yay= cache]]
- [[#licence][Licence]]

* Presentation
  [[http://spacemacs.org][file:https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]]

  This is my collection of dotfiles  for my daily GNU/Linux environment, tweaked
  to  my  liking. If  you  wish  to  get the  same  setup  as mine,  follow  the
  instructions below.

  As you can see,  I personally use [[https://fishshell.com/][fish]] as my shell of  choice, and [[https://www.gnu.org/software/emacs/][Emacs]] using
  [[http://spacemacs.org][Spacemacs]] (still with Emacs keybinding) as my main text editor.

  I also  use [[https://github.com/resloved/i3][Resloved]]’s [[https://github.com/resloved/i3][fork]] of  [[https://github.com/Airblader/i3][i3-gaps]] with two [[https://github.com/jaagr/polybar][polybar]]  bars and [[https://github.com/tryone144][Tryone144]]’s
  [[https://github.com/tryone144/compton][fork]] of [[https://github.com/chjj/compton][Compton]]. The colors scheme for [[https://github.com/davatorium/rofi][rofi]], Emacs and polybar are chosen from
  the wallpapers using [[https://github.com/dylanaraps/pywal][pywal]].

* Features
  - Emacs configuration perfectly tailored for my own use
  - Beautiful and comfy i3 and polybar configuration
  - And enough information  below to get basically the same  distro install as I
    have on my main computer and my travel laptop.

* Screenshots

  #+ATTR_HTML: :width 100%
  #+CAPTION: Desktop with Neofetch in the terminal
  [[./img/neofetch.png]]

  #+CAPTION: Desktop with Emacs opened
  #+ATTR_HTML: :width 100%
  [[./img/emacs.png]]

  #+CAPTION: Desktop with Rofi
  #+ATTR_HTML: :width 100%
  [[./img/rofi.png]]

* Dependencies
  Of course, some dependencies are needed for  my dotfiles to work well. Here is
  a non-exhaustive list of software needed by these configuration files:
  - [[https://www.gnu.org/software/emacs/][GNU/Emacs]] >= 26.2
    - [[http://spacemacs.org][Spacemacs]] (develop branch)
    - My [[https://labs.phundrak.fr/phundrak/conlang-layer][conlanging layer]]
    - [[https://github.com/venmos/w3m-layer][Venmos]]’ [[https://github.com/venmos/w3m-layer][w3m layer]]
  - The [[https://fishshell.com/][Fish shell]], using [[https://github.com/jorgebucaran/fisher][fisher]]
  - [[https://lukesmith.xyz/][Luke Smith]]’s [[https://github.com/LukeSmithxyz/st][fork]] of [[https://st.suckless.org/][st]]
  - [[https://resloved.info/][Resloved]]’s [[https://github.com/resloved/i3][i3-gaps-rounded]] fork of [[https://github.com/Airblader/i3][Airblader]]’s [[https://github.com/Airblader/i3][i3-gaps]], itself a fork of [[https://i3wm.org/][i3]]
  - [[https://github.com/yshui/compton][Compton]], more specificaly [[https://github.com/tryone144/compton][Tryone]]’s [[https://github.com/tryone144/compton][fork]]
  - [[https://github.com/dylanaraps/pywal/][pywal]]
  - [[https://tools.suckless.org/dmenu/][dmenu]]
  - [[https://github.com/enkore/j4-dmenu-desktop][j4-dmenu-desktop]]
  - [[https://github.com/davatorium/rofi][Rofi]]
  - [[https://github.com/gpoore/minted][minted]]
  - [[https://www.rust-lang.org/][Rust]] (stable and nightly)
  - [[https://www.latex-project.org/][LaTeX]] and [[http://xetex.sourceforge.net/][XeTeX]] (=texlive= packages on Arch Linux)
  - [[https://github.com/tmux/tmux][tmux]], based on [[https://github.com/gpakosz/.tmux][this repo]]’s configuration by [[https://pempek.net/][Grégory Pakosz]].
  - And a bunch of other stuff, see below
  And some other stuff scattered around in my dotfiles.

  BTW, I use Arch.

* Installation
  Here will be  presented what I do to  get my system up and running  on a fresh
  Arch Linux install.  These installation instructions were written  in order to
  get an Arch  Linux distribution up and running with  the same configuration as
  my main computer’s and my travelling laptop’s configuration.

** Install Arch Linux
   I usually install Arch from the [[https://www.archlinux.org/download/][vanilla  ISO]], however I began using [[https://github.com/MatMoul/archfi][archfi]] to
   install easily the  distro (I’ve done it  so many times, I know  how it works
   now). Usually, my  distros will be installed on at  least two partitions, one
   dedicated to  =/home=, the other to  the root partition =/=.

   If the computer  supports EFI bootloaders, the EFI partition  will be mounted
   on =/boot=. I  generally use rEFInd as  my boot manager, but if  you are more
   comfortable with  another one, just install  what you want. Be  aware that if
   you format  your =/boot= partition,  you will  delete all boot  managers that
   already exist; so, if  you are dual-booting, *DO NOT FORMAT  IT*. Yes, I made
   the mistake of wiping the Windows boot manager.

   The swap partition is always at least 4GB large, and I should have a total of
   12GB of combined RAM and swap. This means  on my main computer I have 16GB of
   RAM and 4GB of swap, but on my thinkpad I have 4GB of RAM and 8GB of swap.


*** Get the latest live system with fast mirrors
    When you boot into the live ISO, execute the following command:
    #+BEGIN_SRC sh :exports code
      pacman -Syu reflector
      reflector --country France --country Germany --latest 200 \
                --protocol http --protocol https --sort rate \
                --save /etc/pacman.d/mirrorlist
    #+END_SRC
    This will update the packages from your  live ISO, and you will get the best
    mirrors for your  installation. Of course, change  the countries accordingly
    to your location.

*** Install the system
    Then you can use a custom script to ease your installation of Arch if you do
    not wish to do it manually.  Personally, I’ve done it several times already,
    I know  how the distro works,  I just want to  be able to install  my distro
    quickly now.
    #+BEGIN_SRC sh :exports code
      wget archfi.sf.net/archfi
      # Or from matmoul.github.io/archfi if SourceForge is down
      sh archfi
    #+END_SRC
    Then, follow the  instructions and install Arch Linux.  Take the opportunity
    to install  as many packages  as you  need, mainly =yay=  which I use  as my
    package manager (it is just a wrapper for =pacman=) and AUR helper.

    Once your  system is  installed, reboot and  remove your  installation media
    from your computer.

** Install =yay= if it hasn’t been done during the system installation
   Next step is  to install the AUR  helper =yay=. *DO NOT* use  =yaourt=, it is
   discontinued, seriously updated and represents a serious security flaw.

   Let’s clone =yay= in a folder =fromGIT= that will be in our home folder. This
   is also where we’ll download every other packages we’ll install from git.
   #+BEGIN_SRC sh :dir ~ :exports code
     mkdir -p fromGIT
     cd fromGIT
     git clone https://aur.archlinux.org/yay.git
     cd yay
     makepkg -si --noconfirm
   #+END_SRC
   We now have our AUR helper!

** Update the system
   Congrats, Arch  is now  installed on your  system! But we  are not  done yet.
   Let’s update the  system, just in case some packages  were updated during the
   installation. And  let’s install  =yadm= (our  dotfiles manager)  and =emacs=
   while we’re at it.
   #+BEGIN_SRC sh :exports code
     yay -Syua yadm emacs python-envtpl-git
   #+END_SRC

** Set up =yadm=
   =yadm= is my  dotfiles manager. It has some very  interesting, including host
   and   machine-specific  files   and  file   content,  as   can  be   seen  in
   =.config/i3/config##yadm.j2=. It  also manages some files  system-wide (well,
   actually =home=-wide), so you usually don’t have to symlink anything.

   For  some reason,  when I’m  in i3,  polybar crashes  when I  run any  =yadm=
   command, so I made the =C-S-p= shortcut to relaunch it at will.

*** Get the dotfiles
    You should clone the dotfiles with the help of =yadm=. For that purpose, you
    can execute either of the two following commands.
    - From [[https://labs.phundrak.fr/phundrak/dotfiles][labs.phundrak.fr]]:
      #+BEGIN_SRC sh :dir ~ :exports code
        yadm clone https://labs.phundrak.fr/phundrak/dotfiles.git
      #+END_SRC
    - From [[https://github.com/phundrak/dotfiles][Github]]:
      #+BEGIN_SRC sh :dir ~ :exports code
        yadm clone https://github.com/phundrak/dotfiles.git
      #+END_SRC

    To decrypt the encrypted files, run the following command:
    #+BEGIN_SRC sh :dir ~ :exports code
      yadm decrypt
    #+END_SRC
    It will ask the passphrase.

*** Update the remotes
    Now, let’s make sure we have the correct remotes set up for the dotfiles.
    #+BEGIN_SRC sh :exports code :dir ~/dotfiles
      yadm remote set-url origin https://labs.phundrak.fr/phundrak/dotfiles.git
      yadm remote add github https://github.com/phundrak/dotfiles.git
    #+END_SRC
    You can swap the  two links if you feel more comfortable  with Github as the
    =origin=  remote,  just  rename  the   =github=  remote  to  something  like
    =phundraklabs= or something like that.

    If you have already  generated (or copied, but don’t do  that) your SSH keys
    and  uploaded them  to  Github and/or  to  Phundrak Labs,  you  can use  the
    following urls instead as the remotes’ urls.
    #+BEGIN_SRC text
      git@labs.phundrak.fr:phundrak/dotfiles.git
      git@github.com:phundrak/dotfiles.git
    #+END_SRC

*** Get our git submodules
    Our dotfiles  rely on a couple  of submodules we should  get. Let’s download
    them.
    #+BEGIN_SRC sh :dir ~ :exports code
      yadm submodule update --init --recursive
    #+END_SRC

*** Generate the alt dotfiles
    We  will  need to  generate  the  host-specific  dotfiles.  We can  run  the
    following command:
    #+BEGIN_SRC sh :dir ~ :exports code
      yadm alt
    #+END_SRC
    And with that, we should have all  of our dotfiles placed where they need to
    be!

** Set up Emacs
   Now that  we have our  dotfiles installed, let’s  set up Emacs.  First, let’s
   download Spacemacs.
   #+BEGIN_SRC sh :dir ~ :exports code
     git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
   #+END_SRC

   In our =.emacs.d= directory, let’s switch Spacemacs’ branch to =develop=.
   #+BEGIN_SRC sh :dir ~/.emacs.d :exports code
     git checkout develop
   #+END_SRC
   The rest  of this README’s  code blocks should  now be executable  from Emacs
   itself, and we should be able to have a perfectly running Emacs installation.
   That’s the power of Org-mode!

** Install our needed packages
   Now, we can install all the packages I usually have installed on my computer.
   #+BEGIN_SRC sh :dir /sudo:: :exports code
     yay -S --needed asar ascii aspell-en aspell-fr assimp autoconf automake \
         awesome-terminal-fonts bash bat biber binutils bison bleachbit \
         bluez-firmware bluez-utils bookworm boost bzip2 chromium clisp compton \
         coreutils cppcheck cppreference cppreference-devhelp cpupower cronie \
         cryptsetup cups device-mapper dhcpcd diffutils discord-canary discount \
         ditaa dmenu dmenu-lpass docker docker-compose doxygen dunst dwarffortress \
         e2fsprogs emacs exfat-utils fakeroot feh ffmpegthumbnailer file \
         filesystem findutils fingerprint-gui firefox fish flake8 flex \
         font-mathematica fontforge freeglut fzf gawk gcc gcc-libs gdb gettext \
         gimp git glibc gnome-disk-utility gnome-epub-thumbnailer gnu-free-fonts \
         gnuplot go-tools graphviz grep gzip htop i3-gaps i3lock-blur i3status \
         icecat-bin  igdm-bin inetutils intel-ucode iproute2 iputils \
         j4-dmenu-desktop jfsutils jmtpfs lastpass-cli less libnewt libtool \
         licenses light linux-headers lldb logrotate lsof lvm2 m4 make man-db \
         man-pages mate-polkit mdadm meson minted mpc mpd \
         mpd-rich-presence-discord-git mpv mupdf-tools nano nasm ncdu ncmpcpp \
         nemo-fileroller nemo-preview neofetch netctl networkmanager \
         networkmanager-openvpn nm-connection-editor nnn nomacs noto-fonts-emoji \
         npm ntfs-3g numlockx openmp openssh p7zip pacman pacman-contrib pandoc-bin \
         patch pavucontrol pciutils pcurses pdfpc perl pkgconf polybar procps-ng \
         psmisc pulseaudio-bluetooth python-envtpl-git python-pip python-pywal qemu \
         r raw-thumbnailer redshift refind-efi reflector reiserfsprogs rofi \
         rofi-wifi-menu-git rsync rtv rustup s-nail samba scrot sdl2_gfx sdl2_image \
         sdl2_mixer sdl2_ttf sed sent shadow siji-git simplescreenrecorder \
         speedcrunch sshfs st-luke-git sudo sysfsutils systemd-sysvcompat tar \
         texinfo texlive-bibtexextra texlive-bin texlive-core texlive-fontsextra \
         texlive-formatsextra texlive-games texlive-humanities texlive-langchinese \
         texlive-langcyrillic texlive-langextra texlive-langgreek \
         texlive-langjapanese texlive-langkorean texlive-latexextra \
         texlive-localmanager-git texlive-music texlive-pictures texlive-pstricks \
         texlive-publishers texlive-science tmux tree  ttf-arphic-uming ttf-baekmuk \
         ttf-bitstream-vera ttf-dejavu  ttf-google-fonts-opinionated-git \
         ttf-joypixels ttf-liberation  ttf-material-design-icons-git ttf-ms-fonts \
         ttf-symbola  ttf-tibetan-machine ttf-twemoji-color ttf-unifont unicode \
         unicode-emoji  unrar usbutils util-linux valgrind vi vim vulkan-headers \
         w3m wget which  whois x11-ssh-askpass xclip xdg-user-dirs-gtk \
         xf86-input-wacom  xf86-video-intel xfce4-power-manager xfsprogs \
         xorg-server xorg-xinit xss-lock xorg-xprop yadm
   #+END_SRC
   Given how many packages  will be install from the AUR,  I’ll probably have to
   type my password a few times.

   For  some  reasons,  if  you directly  install  =compton-tryone-git=  without
   installing =compton= first,  the package won’t work, which is  why I made you
   install   =compton=   in   the   command   above.   Now   you   can   install
   =compton-tryone-git=. It will  replace =compton=, so say “yes”  when it warns
   you about the package conflict and whether =compton= should be removed.
   #+BEGIN_SRC fish :exports code
     yay -S compton-tryone-git
   #+END_SRC

** Enable and start some services
   As you can see above, docker has been installed. Let’s enable and start its
   service.
   #+BEGIN_SRC fish :dir /sudo:: :exports code
     systemctl enable docker
     systemctl start docker
   #+END_SRC
   I also usually add myself as a member of the =docker= group because I don’t
   like prefixing every single docker command with =sudo=. So let’s execute this
   command:
   #+BEGIN_SRC fish :exports code
     sudo usermod -aG docker $USER
   #+END_SRC

   Depending  on  my  machine,  I  might enable  the  SSH  server  shipped  with
   =openssh=. Edit  your =/etc/ssh/sshd_config=  file as  needed, then  let’s do
   that here:
   #+BEGIN_SRC fish :dir /sudo:: :exports code
     systemctl enable sshd
     systemctl start sshd
   #+END_SRC

** Install Fisher and our fish shell extensions
   As mentionned above,  I use the fish shell  as my main shell. And  I use some
   extensions  too that  I installed  from fisher,  and custom  functions.First,
   let’s install fisher:
   #+BEGIN_SRC fish :exports code
     curl https://git.io/fisher --create-dirs -sLo \
     ~/.config/fish/functions/fisher.fish
   #+END_SRC

   Awesome! Now, onto the fisher packages:
   #+BEGIN_SRC fish :exports code
     fisher add edc/bass franciscolourenco/done jethrokuan/fzf jethrokuan/z \
     jorgebucaran/fish-getopts laughedelic/pisces matchai/spacefish \
     tuvistavie/fish-ssh-agent
   #+END_SRC
   Now  our fish  shell is  ready  to rock!  Plus,  we already  have our  custom
   functions installed from our dotfiles!

** Install packages from git
   Now, we move on to the installation of git-based packages.

*** Install =i3-gaps-rounded=
    I know we already installed =i3-gaps=  from the AUR, why reinstall it? Well,
    that is  certainly bad practices,  but this allowed  me to already  have the
    needed dependencies for building =i3=  installed. Now, let’s clone it, build
    it,  and  install it.  It  will  required  the  password during  the  actual
    installation.
    #+BEGIN_SRC fish :dir ~/fromGIT :exports code
      git clone https://github.com/resloved/i3.git i3-gaps-rounded
      cd i3-gaps-rounded
      rm -rf build
      autoreconf --force --install
      mkdir build && cd build
      ../configure --prefix=/usr --sysconfdir=/etc --disable-sanitizers
      make
      sudo make install
    #+END_SRC

*** Install Polybar Battery
    I use a custom  tool for my battery indicator which  also launches a warning
    when  the battery  is low.  However, I  need to  build it,  since it  is not
    available in the repos nor the AUR.
    #+BEGIN_SRC fish :dir ~/fromGIT :exports code
      git clone https://github.com/drdeimos/polybar_another_battery.git
      cd polybar_another_battery
      go get -u github.com/distatus/battery/cmd/battery
      make build
    #+END_SRC

    Let’s also  create the =~/.local/bin/=  directory in  which I will  put some
    custom executables, including the executable we just built.

*** Download Reveal.JS
    Now, let’s  download [[https://revealjs.com/#/][Reveal.JS]]. I use  it for some of  my Org presentations,
    and I set it so it is found in =~/fromGIT=.
    #+BEGIN_SRC fish :dir ~/fromGIT :exports code
      git clone https://github.com/hakimel/reveal.js.git
    #+END_SRC

** Set your locale
   Arch’s default locale configuration is crap. Like… really. It took me a while
   to figure out why some elements in  polybar didn’t work along with some other
   pieces  of  software.  So,  go  and  uncomment  the  locales  you’ll  use  in
   =/etc/locale.gen=.  I   personally  have  =en_US.UTF-8=,   =fr_FR.UTF-8=  and
   =ja_JP.UTF-8= uncommented, but what you choose  is really up to you. Then run
   the following command as sudo.
   #+BEGIN_SRC fish :dir /sudo:: :exports code
     locale-gen
   #+END_SRC

   Now you can edit your =/etc/locale.conf= file. Mine looks like this, edit it
   to fit your needs.
   #+BEGIN_SRC conf :exports code
     LANG=en_US.UTF-8
     LC_COLLATE=C
     LC_NAME=fr_FR.UTF-8
     LC_NUMERIC=fr_FR.UTF-8
     LC_IDENTIFICATION=fr_FR.UTF-8
     LC_TELEPHONE=fr_FR.UTF-8
     LC_MONETARY=fr_FR.UTF-8
     LC_PAPER=fr_FR.UTF-8
     LC_ADDRESS=fr_FR.UTF-8
     LC_TIME=fr_FR.UTF-8
     LC_MEASUREMENT=fr_FR.UTF-8
   #+END_SRC

** Launch X
   Aaaand  we  should finally  be  good  to launch  X  for  the first  time!  My
   installation logs me in the tty by default,  and I do this by choice, I don’t
   really like display managers or desktop environments. So, to launch i3, let’s
   run =startx=.

** Create some directories
   Thanks to the  [[file:.local/bin/dmount][dmount]] and [[file:.local/bin/dumount][dumount]] utilities, mounting  and unmounting devices
   can be done very  easily. And to add to some easiness,  let’s create a couple
   of directories dedicated to what we might mount on our computer:
   #+BEGIN_SRC fish :dir /sudo:: :exports code
     mkdir -p /mnt/{USB,CD,Android}
   #+END_SRC
   And in case we need to mount  some ext4 partitions on these, let’s change the
   ownership of these directories.
   #+BEGIN_SRC fish :exports code
     sudo chown $USER:(id -g $USER) /mnt/{USB,CD,Android}
   #+END_SRC

** Install Rust
*** Install the toolchains
    When using rust, I bounce between two toolchains, the =stable= toolchain and
    the =nightly=  toolchain. To  install them,  I will  use =rustup=  which has
    already been installed.
    #+BEGIN_SRC fish :exports code
      rustup default nightly
    #+END_SRC
    This will both download the nightly toolchain and set it as the default one.
    Yup, I like to live dangerously. Now to install the stable toolchain, let’s
    run this:
    #+BEGIN_SRC fish :exports code
      rustup toolchain install stable
    #+END_SRC
    The nightly  toolchain is  ironically updated about  daily (hence  the name…
    sort of?), so we’ll often have to run the following command:
    #+BEGIN_SRC fish :exports code
      rustup update
    #+END_SRC

*** Install some utilities
    We’ll need some utilities when developing Rust from Emacs, namely =rustfmt=
    and =racer=. Let’s install them with =cargo=.
    #+BEGIN_SRC fish
      cargo install rustfmt racer
    #+END_SRC

** Clean the =pacman= and =yay= cache
   Finally, we are almost done! Let’s clean the cache of =pacman= and =yay=
   #+BEGIN_SRC fish :dir /sudo:: :exports code
     yay -Sc --noconfirm
   #+END_SRC
   You  should now  run a  system pretty  close to  the one  I have  on my  main
   computer and my thinkpad.

* Licence
  All of my  dotfiles (and my dotfiles  only) are available under  the GNU GPLv3
  Licence. Please  consult [[file:LICENCE.md]] for  more information. In  short: you
  are free to  access, edit and redistribute  all of my dotfiles  under the same
  licence and as allowed by the licence, and if you fuck up something, it’s your
  own responsibility.
