config.phundrak.com/README.org
2019-09-26 16:50:39 +02:00

409 lines
19 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Phundraks dotfiles
#+AUTHOR: Lucien "Phundrak” Cartier-Tilet
#+EMAIL: phundrak@phundrak.fr
#+HTML_HEAD: <meta name="description" content="Phundrak's dotfiles" />
#+HTML_HEAD: <meta property="og:title" content="Phundrak's dotfiles" />
#+HTML_HEAD: <meta property="og:description" content="Installation instructions for Phundrak's dotfiles" />
#+OPTIONS: H:4 broken_links:mark email:t ^:{} auto_id:t
#+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_DOCTYPE: html5
#+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://langue.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]]
- [[#update-the-system][Update the system]]
- [[#install-yay-and-all-the-official-repos-packages][Install =yay= and all the official repos packages]]
- [[#set-up-yadm][Set up =yadm=]]
- [[#get-the-dotfiles][Get the dotfiles]]
- [[#generate-the-alt-dotfiles][Generate the alt dotfiles]]
- [[#set-up-emacs][Set up Emacs]]
- [[#download-spacemacs][Download Spacemacs]]
- [[#set-the-custom-layers][Set the custom layers]]
- [[#symlink-the-emacs-config][Symlink the Emacs config]]
- [[#install-the-fish-shell][Install the Fish shell]]
- [[#install-fisher][Install fisher]]
- [[#install-the-fish-config-and-custom-functions][Install the fish config and custom functions]]
- [[#install-the-dotfiles][Install the dotfiles]]
- [[#update-the-submodules][Update the submodules]]
- [[#update-the-remotes][Update the remotes]]
- [[#symlink-the-dotfiles][Symlink the dotfiles]]
- [[#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]]
- [[#install-rust][Install Rust]]
- [[#install-the-toolchains][Install the toolchains]]
- [[#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
[[./img/neofetch.png]]
[[./img/emacs.png]]
[[./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 computers and my travelling laptops 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 (Ive 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:
#+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.
** Update the system
First of all, lets make sure we have a sorted mirrorlist for pacman.
#+BEGIN_SRC fish :exports code :dir /sudo::
pacman -Sy reflector
reflector --country France --country Germany --latest 200 \
--protocol http --protocol httpqs --sort rate \
--save /etc/pacman.d/mirrorlist
#+END_SRC
Now, lets update the system in order to be sure to have the latest
version.
#+BEGIN_SRC fish :dir /sudo:: :exports code
sudo pacman -Syu --noconfirm
sudo pacman -S git emacs --needed --noconfirm
#+END_SRC
** 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).
Lets clone it in a folder =fromGIT= that will be in our home folder. This is
also where well download every other packages well install from git.
#+BEGIN_SRC fish :dir ~ :exports code
mkdir -p fromGIT
cd fromGIT
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si --noconfirm
#+END_SRC
Now, we can install all the packages I usually have installed on my computer.
#+BEGIN_SRC fish :dir /sudo:: :exports code
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
#+END_SRC
Given how many packages will be install from the AUR, Ill 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 [[https://labs.phundrak.fr/phundrak/dotfiles][labs.phundrak.fr]]:
#+BEGIN_SRC fish :dir ~ :exports code
yadm clone https://labs.phundrak.fr/phundrak/dotfiles.git
#+END_SRC
- From [[https://github.com/phundrak/dotfiles][Github]]:
#+BEGIN_SRC fish :dir ~ :exports code
yadm clone https://gitlab.com/phundrak/dotfiles.git
#+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 fish :dir ~ :exports code
yadm alt
#+END_SRC
** Set up Emacs
The first thing to do after setting up our system is setting up Emacs.
*** Download Spacemacs
First, lets download Spacemacs.
#+BEGIN_SRC fish :dir ~ :exports code
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
#+END_SRC
Lets switch Spacemacs branch to =develop=.
#+BEGIN_SRC fish :dir ~/.emacs.d :exports code
git checkout develop
#+END_SRC
*** Set the custom layers
As mentionned above, I use some custom layers. Lets symlink these to the
private folder of our =.emacs.d/= folder.
#+BEGIN_SRC fish :dir ~/.emacs.d/private :exports code
for d in ~/dotfiles/spacemacs-layers/*
ln -s $d
end
#+END_SRC
*** Symlink the Emacs config
Lets not forget our Spacemacs/Emacs config, well symlink it to our home
directory.
#+BEGIN_SRC fish :dir ~ :exports code
ln -s ~/dotfiles/.spacemacs
#+END_SRC
** 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
Lets 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
*** Install the fish config and custom functions
I will be symlinking my fishfile to its location =~/.config=.
#+BEGIN_SRC fish :dir ~/.config/ :exports code
ln -s ~/dotfiles/config.fish
#+END_SRC
Now, in the =functions= subdirectory, lets symlink all of my custom
functions.
#+BEGIN_SRC fish :dir ~/.config/fish/functions :exports code
for f in ~/dotfiles/fishfunctions/*.fish
ln -s $f
end
#+END_SRC
** Install the dotfiles
*** Update the submodules
Alright, lets do something about all these dotfiles laying around. First,
lets symlink those that are in our home directory.
#+BEGIN_SRC fish :exports code
yadm submodule update
#+END_SRC
*** Update the remotes
Now, lets make sure we have the correct remotes set up for the dotfiles.
#+BEGIN_SRC fish :exports code :dir ~/dotfiles
yadm remote set-url origin "git@labs.phundrak.fr:phundrak/dotfiles.git"
yadm remote set-url github "git@github.com:phundrak/dotfiles.git"
#+END_SRC
*** Symlink the dotfiles
Lets now symlink our dotfiles. First, well take care of those that should
be symlinked to our home directory.
#+BEGIN_SRC fish :dir ~ :exports code
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
#+END_SRC
Finally, lets symlink everything that belongs to the =~/.config= folder.
#+BEGIN_SRC fish :dir ~/.config :exports code
for elem in ~/dotfiles/.config/*
ln -s $elem
end
#+END_SRC
** 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, lets 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
Lets also create the =~/.local/bin/= directory in which I will put some
custom executables, including the executable we just built.
*** Download Reveal.JS
Now, lets 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
** 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 stable
#+END_SRC
This will both download the stable toolchain and set it as the default one.
Now to install the nightly toolchain, lets run this:
#+BEGIN_SRC fish :exports code
rustup toolchain install nightly
#+END_SRC
This one is updated about daily (hence the name), so well often have to run
the following command:
#+BEGIN_SRC fish :exports code
rustup update
#+END_SRC
** Clean the =pacman= and =yay= cache
Finally, we are almost done! Lets clean the cache of =pacman= and =yay=
#+BEGIN_SRC fish :dir /sudo:: :exports code
yay -Sc --noconfirm
#+END_SRC
* 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, its your
own responsibility.