#+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: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+INFOJS_OPT: view:info toc:1 home:https://phundrak.fr/ toc:t #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: * 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]] - [[#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 #+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://gitlab.com/phundrak/dotfiles.git #+END_SRC *** Update the remotes Now, let’s make sure we have the correct remotes set up for the dotfiles. #+BEGIN_SRC fish :exports code :dir ~/dotfiles yadm remote set-url origin "https://labs.phundrak.fr/phundrak/dotfiles.git" yadm remote add-url 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 =yadm= will need to generate the host-specific dotfiles. To do so, you 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 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-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 xorg-xprop #+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=. ** 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.