Everything to get a working desktop with my config. Lots of Emacs stuff though, and lots of org-mode tangling. https://config.phundrak.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Phuntsok Drak-pa 7f573e8826 Added graphviz package 3 years ago
.config better i3 shortcuts 3 years ago
dev initial commit for new repo 3 years ago
fishfunctions updated to v2 of wttr.in 3 years ago
img Updated screenshots, from x220 3 years ago
private initial commit for new repo 3 years ago
spacemacs-layers fixed some submodules madness 3 years ago
tmux@01c91ba523 fixed some submodules madness 3 years ago
.Xresources moved xresources file 3 years ago
.gitattributes initial commit for new repo 3 years ago
.gitignore initial commit for new repo 3 years ago
.gitignore_global initial commit for new repo 3 years ago
.gitmodules fixed some submodules madness 3 years ago
.nanorc initial commit for new repo 3 years ago
.rustfmt.toml initial commit for new repo 3 years ago
.signature updated email signature 3 years ago
.spacemacs updated tray position to a correct value in polybar 3 years ago
.tmux.conf.local added tmux configuration 3 years ago
2019-09-21-172222_1366x768_scrot.png Added instructions to install Arch Linux from the live ISO 3 years ago
CODE_OF_CONDUCT.md initial commit for new repo 3 years ago
LICENSE.md initial commit for new repo 3 years ago
README.org Added graphviz package 3 years ago
config.fish fixed some submodules madness 3 years ago
enable_touch.sh never noticed this typo lmao 3 years ago
eshell-alias Back on stable Emacs, removed eshell alias that is not working 3 years ago
xsetwacom-my-preferences initial commit for new repo 3 years ago


Phundrak’s dotfiles


file:<img src=" title="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 fish as my shell of choice, and Emacs using Spacemacs (still with Emacs keybinding) as my main text editor.

I also use Resloved’s fork of i3-gaps with two polybar bars and Tryone144’s fork of Compton. The colors scheme for rofi, Emacs and polybar are chosen from the wallpapers using pywal.


  • 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.






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:

And some other stuff scattered around in my dotfiles.

BTW, I use Arch.


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 vanilla ISO, however I began using 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 /. When you boot into the live ISO, execute the following command:

  wget archfi.sf.net/archfi
  # Or from matmoul.github.io/archfi if SourceForge is down
  sh archfi

Then, follow the instructions and install Arch Linux.

Update the system

First of all, let’s make sure we have a sorted mirrorlist for pacman.

  pacman -Sy reflector
  reflector --country France --country Germany --latest 200 \
            --protocol http --protocol httpqs --sort rate \
            --save /etc/pacman.d/mirrorlist

Now, let’s update the system in order to be sure to have the latest version.

  sudo pacman -Syu --noconfirm
  sudo pacman -S git emacs --needed --noconfirm

Install yay and all the official repos’ packages

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 it 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.

  mkdir -p fromGIT
  cd fromGIT
  git clone https://aur.archlinux.org/yay.git
  cd yay
  makepkg -si --noconfirm

Now, we can install all the packages I usually have installed on my computer.

  yay -S --needed --noconfirm 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-tryone-git coreutils cppcheck cppreference cppreference-devhelp \
  cpupower cronie cryptsetup cups device-mapper dhcpcd diffutils\
  discord-canary discount ditaa dmenu dmenu-lpass docker docker-compose \
  doxygen 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 grep gzip htop i3-gaps i3lock-blur \
  i3status icecat-bin igdm-bin inetutils intel-ucode iproute2 iputils \
  j4-dmenu-desktop jfsutils lastpass-cli less libnewt libtool licenses \
  light linux linux-firmware 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 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-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 yadm graphviz

Given how many packages will be install from the AUR, I’ll probably have to type my password a few times.

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 dotfiles/.config/i3/config##yadm.j2.

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 labs.phundrak.fr:

      yadm clone https://labs.phundrak.fr/phundrak/dotfiles.git
  • From Github:

      yadm clone https://gitlab.com/phundrak/dotfiles.git

Generate the alt dotfiles

yadm will need to generate the host-specific dotfiles. To do so, you can run the following command:

  yadm alt

Set up Emacs

The first thing to do after setting up our system is setting up Emacs.

Download Spacemacs

First, let’s download Spacemacs.

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

Let’s switch Spacemacs’ branch to develop.

git checkout develop

Set the custom layers

As mentionned above, I use some custom layers. Let’s symlink these to the private folder of our .emacs.d/ folder.

  for d in ~/dotfiles/spacemacs-layers/*
      ln -s $d

Symlink the Emacs config

Let’s not forget our Spacemacs/Emacs config, we’ll symlink it to our home directory.

  ln -s ~/dotfiles/.spacemacs

Install the Fish shell

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.

Install fisher

Let’s install fisher:

  curl https://git.io/fisher --create-dirs -sLo \

Awesome! Now, onto the fisher packages:

  fisher add edc/bass franciscolourenco/done jethrokuan/fzf jethrokuan/z \
             jorgebucaran/fish-getopts laughedelic/pisces \
             matchai/spacefish tuvistavie/fish-ssh-agent

Install the fish config and custom functions

I will be symlinking my fishfile to its location ~/.config.

ln -s ~/dotfiles/config.fish

Now, in the functions subdirectory, let’s symlink all of my custom functions.

  for f in ~/dotfiles/fishfunctions/*.fish
      ln -s $f

Install the dotfiles

Update the submodules

Alright, let’s do something about all these dotfiles laying around. First, let’s symlink those that are in our home directory.

  yadm submodule update

Update the remotes

Now, let’s make sure we have the correct remotes set up for the dotfiles.

  yadm remote set-url origin "git@labs.phundrak.fr:phundrak/dotfiles.git"
  yadm remote set-url github "git@github.com:phundrak/dotfiles.git"

Symlink the dotfiles

Let’s now symlink our dotfiles. First, we’ll take care of those that should be symlinked to our home directory.

  ln -s ~/dotfiles/.Xresources
  ln -s ~/dotfiles/.gitignore_global
  ln -s ~/dotfiles/.nanorc
  ln -s ~/dotfiles/rustfmt.toml
  ln -s ~/dotfiles/.signature
  ln -s ~/dotfiles/.tmux.conf.local
  ln -s ~/dotfiles/tmux/.tmux.conf
  ln -s ~/dotfiles/.config/i3 .i3

Finally, let’s symlink everything that belongs to the ~/.config folder.

  for elem in ~/dotfiles/.config/*
      ln -s $elem

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.

  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
  sudo make install

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.

  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

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 Reveal.JS. I use it for some of my Org presentations, and I set it so it is found in ~/fromGIT.

  git clone https://github.com/hakimel/reveal.js.git

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.

  rustup default stable

This will both download the stable toolchain and set it as the default one. Now to install the nightly toolchain, let’s run this:

  rustup toolchain install nightly

This one is updated about daily (hence the name), so we’ll often have to run the following command:

  rustup update

Clean the pacman and yay cache

Finally, we are almost done! Let’s clean the cache of pacman and yay

  yay -Sc --noconfirm


All of my dotfiles (and my dotfiles only) are available under the GNU GPLv3 Licence. Please consult /phundrak/dotfiles/src/commit/7f573e8826ddd5c0da9c9f99d63b4052c1641cb4/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.