updated README, generates bootstrap from within Emacs

This commit is contained in:
Phuntsok Drak-pa 2019-10-21 01:22:46 +02:00
parent 5b635e51fc
commit 98d36b43c0
2 changed files with 530 additions and 457 deletions

268
.yadm/bootstrap Executable file → Normal file
View File

@ -1,15 +1,52 @@
#!/usr/bin/fish #!/usr/bin/fish
############################################################################### # -*- mode: fish -*-
# Bootstrap file for Phundraks dotfiles #
# # set keyboardconf \
# Please be aware you will need `fish' and `git' installed to run this # 'Section "InputClass"
# file. No other packages are required. # Identifier "system-keyboard"
############################################################################### MatchIsKeyboard "on"
Option "XkbLayout" "fr,fr,us"
Option "XkbModel" "pc104"
Option "XkbVariant" "bepo,,"
Option "XkbOptions" "grp:menu_toggle"
EndSection'
printf "\n# Set keyboard layout #########################################################\n\n"
echo $keyboardconf | sudo tee /etc/X11/xorg.conf.d/00-keyboard.conf
set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
printf "\n# Set our locale ##############################################################\n\n"
for item in $mylocales
if test (grep -e "#$item" /etc/locale.gen)
sudo sed -i "/$item/s/^#//g" /etc/locale.gen
end
end
set localeconf "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"
echo $localeconf | sudo tee /etc/locale.conf
printf "\n# Generate locale #############################################################\n\n"
sudo locale-gen
printf "\n# Create directories for mounting #############################################\n\n"
sudo mkdir -p /mnt/{USB,CD,Android}
sudo chown $USER:(id -g $USER) /mnt/{USB,CD,Android}
printf "\n# Set fish as the default shell ###############################################\n\n" printf "\n# Set fish as the default shell ###############################################\n\n"
chsh -s /usr/bin/fish chsh -s /usr/bin/fish
# install yay if it isnt already
if ! test which yay if ! test which yay
printf "\n# Installing yay ##############################################################\n\n" printf "\n# Installing yay ##############################################################\n\n"
cd cd
@ -23,41 +60,90 @@ else
end end
printf "\n# Installing Spacemacs ########################################################\n\n" printf "\n# Installing Spacemacs ########################################################\n\n"
rm -rf ~/.emacs.d
git clone --single-branch --branch develop https://github.com/syl20bnr/spacemacs ~/.emacs.d git clone --single-branch --branch develop https://github.com/syl20bnr/spacemacs ~/.emacs.d
printf "\n# Emacs, Envtpl ###############################################################\n\n" yadm checkout -- ~/.emacs.d/private/
yay -Syu emacs python-envtpl-git
if ! test (echo "phundrak" | sed -e "s/^.*$USER//I")
printf "\n# Update yadms remotes #######################################################\n\n"
yadm remote set-url origin git@labs.phundrak.fr:phundrak/dotfiles.git
yadm remote add github git@github.com:phundrak/dotfiles.git
printf "\n# Decrypt encrypted dotfiles ##################################################\n\n"
yadm decrypt
end
printf '\n# Install envtpl ##############################################################\n\n'
yay -Syu python-envtpl-git
printf "\n# Getting yadm susbmodules ####################################################\n\n" printf "\n# Getting yadm susbmodules ####################################################\n\n"
yadm submodule update --init --recursive yadm submodule update --init --recursive
if ! test (echo "phundrak" | sed -e "s/^.*$USER//I")
printf "\n# Update yadms remotes #######################################################\n\n"
yadm remote set-url origin git@labs.phundrak.fr:phundrak/dotfiles.git
yadm remote add github git@github.com:phundrak/dotfiles.git
printf "\n# Decrypt encrypted dotfiles ##################################################\n\n"
yadm decrypt
end
printf "\n# Generating alt files ########################################################\n\n" printf "\n# Generating alt files ########################################################\n\n"
yadm alt yadm alt
for f in (find ~/etc -type f)
set dest (echo $f | sed -n 's/^.*etc\(.*\)$/\/etc\1/p')
sudo ln -s $f $dest
end
read --prompt "echo 'Symlink .nanorc to roots .nanorc? (Y/n): ' " -l nanoroot
if test $nanoroot = 'y' || test $nanoroot = "Y" || test $nanoroot = ''
printf "\n# Symlinking .nanorc to roots .nanorc ########################################\n\n"
sudo ln -s $HOME/.nanorc /root/.nanorc
end
set PACKAGES \
asar ascii aspell-en aspell-fr assimp awesome-terminal-fonts base-devel bat \
biber bleachbit bluez-firmware bluez-utils bookworm boost bzip2 chromium clisp \
compton cppcheck cppreference cppreference-devhelp cpupower cronie cryptsetup \
device-mapper diffutils discord-canary discount ditaa dmenu dmenu-lpass docker \
docker-compose doxygen dunst dwarffortress emacs exfat-utils ffmpegthumbnailer \
findutils firefox flake8 font-mathematica fontforge freeglut fzf gcc-libs gdb \
gimp glibc gnome-disk-utility gnome-epub-thumbnailer gnu-free-fonts gnuplot \
go-tools graphviz htop i3-gaps i3lock-blur i3status igdm-bin inetutils \
j4-dmenu-desktop jfsutils jmtpfs lastpass-cli less linux-headers lldb \
logrotate lvm2 ly-git meson minted mpc mpd mpd-rich-presence-discord-git mpv \
mupdf-tools nano ncdu ncmpcpp nemo-fileroller nemo-preview neofetch netctl \
networkmanager networkmanager-openvpn nm-connection-editor nnn nomacs \
noto-fonts-emoji npm ntfs-3g numlockx openssh p7zip pacman-contrib pandoc-bin \
pavucontrol pciutils pcurses pdfpc polybar pulseaudio-bluetooth \
python-envtpl-git python-pip python-pywal qemu r raw-thumbnailer redshift \
reflector rofi rofi-wifi-menu-git rsync rtv rustup s-nail samba scrot sent \
shadow siji-git simplescreenrecorder speedcrunch sshfs st-luke-git \
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 valgrind \
vim w3m wget x11-ssh-askpass xclip xdg-user-dirs-gtk xorg-drivers xorg-apps \
xfsprogs xorg-server xorg-xinit xss-lock yapf
printf "\n# Installing needed packages ##################################################\n\n" printf "\n# Installing needed packages ##################################################\n\n"
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 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 yapf yay -S --needed $PACKAGES
printf "\n# Installing tryones compton fork ############################################\n\n" printf "\n# Installing tryones compton fork ############################################\n\n"
yay -S compton-tryone-git yay -S compton-tryone-git
# enable our services for Docker, Emacs and our ssh server
printf "\n# Enabling and starting Docker ################################################\n\n" printf "\n# Enabling and starting Docker ################################################\n\n"
sudo systemctl enable --now docker sudo systemctl enable --now docker
printf "\n# Adding user to Docker group #################################################\n\n"
sudo usermod -aG docker $USER read --prompt "echo 'Do you wish to be added to the `docker` group? (Y/n): ' " -l adddockergroup
if test $adddockergroup = 'y' || test $adddockergroup = "Y" || test $adddockergroup = ''
sudo usermod -aG docker $USER
end
printf "\n# Enabling Emacs as user service ##############################################\n\n" printf "\n# Enabling Emacs as user service ##############################################\n\n"
systemctl --user enable --now emacs systemctl --user enable --now emacs
# echo "Enable ssh server?"
read --prompt "echo 'Do you want to activate the ssh server? (Y/n): ' " -l sshdserver read --prompt "echo 'Do you want to activate the ssh server? (Y/n): ' " -l sshdserver
if test $sshdserver = 'y' || test $sshdserver = "Y" || test $sshdserver = '' if test $sshdserver = 'y' || test $sshdserver = "Y" || test $sshdserver = ''
printf "\n# Enabling ssh server #########################################################\n\n" printf "\n# Enabling ssh server #########################################################\n\n"
@ -66,8 +152,13 @@ end
printf "\n# Installing fisher ###########################################################\n\n" printf "\n# Installing fisher ###########################################################\n\n"
curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
printf "\n# Installing fisher extensions ################################################\n\n"
fisher add edc/bass franciscolourenco/done jethrokuan/fzf jethrokuan/z jorgebucaran/fish-getopts laughedelic/pisces matchai/spacefish tuvistavie/fish-ssh-agent set FISHEXTENSIONS \
edc/bass franciscolourenco/done jethrokuan/fzf jethrokuan/z \
jorgebucaran/fish-getopts laughedelic/pisces matchai/spacefish \
tuvistavie/fish-ssh-agent
fisher add $FISHEXTENSIONS
printf "\n# Install i3-gaps-rounded #####################################################\n\n" printf "\n# Install i3-gaps-rounded #####################################################\n\n"
cd ~/fromGIT cd ~/fromGIT
@ -87,138 +178,19 @@ cd polybar_another_battery
go get -u github.com/distatus/battery/cmd/battery go get -u github.com/distatus/battery/cmd/battery
make build make build
ln -s polybar-ab ~/.local/bin/polybar-ab
printf "\n# Install Reveal.JS ###########################################################\n\n" printf "\n# Install Reveal.JS ###########################################################\n\n"
cd ~/fromGIT cd ~/fromGIT
git clone https://github.com/hakimel/reveal.js.git git clone https://github.com/hakimel/reveal.js.git
printf "\n# Set our locale ##############################################################\n\n"
# This is assuming the only enabled locale is en_US.UTF-8
# echo "fr_FR.UTF-8 UTF-8
# ja_JP.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
for item in $mylocales
if test (grep -e "#$item" /etc/locale.gen)
sudo sed -i "/$item/s/^#//g" /etc/locale.gen
end
end
echo "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" | sudo tee /etc/locale.conf
printf "\n# Set keyboard layout #########################################################\n\n"
echo 'Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "fr,fr,us"
Option "XkbModel" "pc104"
Option "XkbVariant" "bepo,,"
Option "XkbOptions" "grp:menu_toggle"
EndSection' | sudo tee /etc/X11/xorg.conf.d/00-keyboard.conf
printf "\n# Generate locale #############################################################\n\n"
sudo locale-gen
printf "\n# Create some directories for mounting our drives #############################\n\n"
sudo mkdir -p /mnt/{USB,CD,Android}
sudo chown $USER:(id -g $USER) /mnt/{USB,CD,Android}
printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n" printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
rustup default nightly rustup default nightly
rustup toolchain install stable rustup toolchain install stable
printf "\n# Add rust utilities ##########################################################\n\n" printf "\n# Add rust utilities ##########################################################\n\n"
cargo install rustfmt racer cargo install rustfmt racer
read --prompt "echo 'Symlink .nanorc to roots .nanorc? (Y/n): ' " -l sshdserver
if test $sshdserver = 'y' || test $sshdserver = "Y" || test $sshdserver = ''
printf "\n# Symlinking .nanorc to roots .nanorc ########################################\n\n"
set source $HOME/.nanorc
sudo ln -s $source /root/.nanorc
end
printf "\n# Clean the pacman and yay cache ##############################################\n\n" printf "\n# Clean the pacman and yay cache ##############################################\n\n"
yay -Sc yay -Sc --noconfirm
printf "\n# Add abbreviations for fish ##################################################\n\n"
abbr -a -U -- S 'sudo systemctl'
abbr -a -U -- chgrp 'chgrp --preserve-root'
abbr -a -U -- chmod 'chmod --preserve-root'
abbr -a -U -- chown 'chown --preserve-root'
abbr -a -U -- clang 'clang -Wall'
abbr -a -U -- clang++ 'clang++ -Wall'
abbr -a -U -- clean clear
abbr -a -U -- compress 'tar -czf'
abbr -a -U -- cp 'cp -i'
abbr -a -U -- cpuinfo lscpu
abbr -a -U -- cdebug 'cmake -DCMAKE_BUILD_TYPE=Debug'
abbr -a -U -- crelease 'cmake -DCMAKE_BUILD_TYPE=Release'
abbr -a -U -- dc docker-compose
abbr -a -U -- dcd 'docker-compose down'
abbr -a -U -- dcr 'docker-compose run --rm'
abbr -a -U -- dcu 'docker-compose up'
abbr -a -U -- dcub 'docker-compose up --build'
abbr -a -U -- df 'df -H'
abbr -a -U -- diskspace 'sudo df -h | grep -E "sd|lv|Size"'
abbr -a -U -- du 'du -ch'
abbr -a -U -- e 'emacsclient -c'
abbr -a -U -- ei3 'vim ~/.config/i3/config##yadm.j2'
abbr -a -U -- epoly 'vim ~/.config/polybar/config'
abbr -a -U -- enw 'emacsclient -c -nw'
abbr -a -U -- exi exit
abbr -a -U -- exti exit
abbr -a -U -- feh 'feh -Zx.'
abbr -a -U -- flac 'youtube-dl -x --audio-format flac --audio-quality 0'
abbr -a -U -- g++ 'g++ -Wall -std=c++17'
abbr -a -U -- gcc 'gcc -Wall -std=c18'
abbr -a -U -- gpumeminfo 'grep -i --color memory /var/log/Xorg.0.log'
abbr -a -U -- hist history
abbr -a -U -- hotp htop
abbr -a -U -- install 'sudo pacman -Sy'
abbr -a -U -- la 'ls -A --color'
abbr -a -U -- ll 'ls -alh | less'
abbr -a -U -- ln 'ln -i'
abbr -a -U -- lns 'ln -si'
abbr -a -U -- ls 'ls --color'
abbr -a -U -- lsl 'ls -ahl'
abbr -a -U -- meminfo 'free -m -l -t'
abbr -a -U -- mp3 'youtube-dl -x --audio-format flac --audio-quality 0'
abbr -a -U -- mpv 'mpv --no-border --force-window=no'
abbr -a -U -- mv 'mv -i'
abbr -a -U -- nmcli 'nmcli -p -c auto'
abbr -a -U -- optimize 'sudo pacman-optimize && sync'
abbr -a -U -- p 'sudo pacman'
abbr -a -U -- please 'sudo -A'
abbr -a -U -- pscpu 'ps auxf | sort -nr -k 3'
abbr -a -U -- pscpu10 'ps auxf | sort -nr -k 3 | head -10'
abbr -a -U -- psmem 'ps auxf | sort -nr -k 4'
abbr -a -U -- psmem10 'ps auxf | sort -nr -k 4 | head -10'
abbr -a -U -- purge 'yay -Sc'
abbr -a -U -- q exit
abbr -a -U -- randcommit 'git commit -m (curl -s whatthecommit.com/index.txt)'
abbr -a -U -- remove 'sudo pacman -Rscnd'
abbr -a -U -- rm 'rm -I'
abbr -a -U -- rmd 'rm --preserve-root -Ir'
abbr -a -U -- rmdf 'rm --preserve-root -Irf'
abbr -a -U -- rmf 'rm --preserve-root -If'
abbr -a -U -- s 'systemctl --user'
abbr -a -U -- search 'pacman -Ss'
abbr -a -U -- sudo 'sudo -A'
abbr -a -U -- swipl 'clear && swipl -q && clear'
abbr -a -U -- texhash 'sudo texhash'
abbr -a -U -- tlmgr tllocalmgr
abbr -a -U -- umountC 'cd ~; and sudo umount /media/C'
abbr -a -U -- umountD 'cd; and sudo umount /media/Marpa'
abbr -a -U -- untar 'tar -xvzf'
abbr -a -U -- update 'sudo pacman -Syu'
abbr -a -U -- vi vim
abbr -a -U -- wget 'wget -c'

View File

@ -46,28 +46,38 @@
- [[#install-arch-linux][Install Arch Linux]] - [[#install-arch-linux][Install Arch Linux]]
- [[#get-the-latest-live-system-with-fast-mirrors][Get the latest live system with fast mirrors]] - [[#get-the-latest-live-system-with-fast-mirrors][Get the latest live system with fast mirrors]]
- [[#install-the-system][Install the system]] - [[#install-the-system][Install the system]]
- [[#install-yay-if-it-hasnt-been-done-during-the-system-installation][Install =yay= if it hasnt been done during the system installation]] - [[#install-basic-packages][Install basic packages]]
- [[#update-the-system][Update the system]] - [[#execute-bootstrap][Execute bootstrap]]
- [[#set-up-yadm][Set up =yadm=]] - [[#get-a-correct-keyboard-layout][Get a correct keyboard layout]]
- [[#get-the-dotfiles][Get the dotfiles]] - [[#set-our-locale][Set our locale]]
- [[#update-the-remotes][Update the remotes]] - [[#create-some-folders][Create some folders]]
- [[#get-our-git-submodules][Get our git submodules]] - [[#set-users-shell-to-fish][Set users shell to fish]]
- [[#generate-the-alt-dotfiles][Generate the alt dotfiles]] - [[#install-yay-if-it-isnt-already-installed][Install =yay= if it isnt already installed]]
- [[#set-up-emacs][Set up Emacs]] - [[#setting-up-emacs-installing-spacemacs][Setting up Emacs: Installing Spacemacs]]
- [[#install-our-needed-packages][Install our needed packages]] - [[#set-up-dotfiles][Set up dotfiles]]
- [[#enable-and-start-some-services][Enable and start some services]] - [[#update-our-dotfiles-remotes][Update our dotfiles remotes]]
- [[#install-fisher-and-our-fish-shell-extensions][Install Fisher and our fish shell extensions]] - [[#get-envtpl][Get =envtpl=]]
- [[#install-packages-from-git][Install packages from git]] - [[#update-our-submodules][Update our submodules]]
- [[#install-i3-gaps-rounded][Install =i3-gaps-rounded=]] - [[#generate-our-alt-files][Generate our alt files]]
- [[#install-polybar-battery][Install Polybar Battery]] - [[#symlink-some-system-config-files][Symlink some system config files]]
- [[#download-revealjs][Download Reveal.JS]] - [[#install-basic-packages-1][Install basic packages]]
- [[#set-your-locale][Set your locale]] - [[#installing-tryones-compton-fork][Installing Tryones Compton fork]]
- [[#launch-x][Launch X]] - [[#enable-some-of-our-services][Enable some of our services]]
- [[#create-some-directories][Create some directories]] - [[#docker][Docker]]
- [[#install-rust][Install Rust]] - [[#emacs][Emacs]]
- [[#install-the-toolchains][Install the toolchains]] - [[#ssh-server][SSH server]]
- [[#install-some-utilities][Install some utilities]] - [[#ly][Ly]]
- [[#clean-the-pacman-and-yay-cache][Clean the =pacman= and =yay= cache]] - [[#set-up-our-fish-shell][Set up our fish shell]]
- [[#install-fisher][Install =fisher=]]
- [[#install-our-extensions][Install our extensions]]
- [[#install-packages-from-git][Install packages from git]]
- [[#i3-gaps-rounded][i3-gaps rounded]]
- [[#polybar-battery][Polybar Battery]]
- [[#revealjs][Reveal.JS]]
- [[#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]] - [[#licence][Licence]]
* Presentation * Presentation
@ -151,11 +161,10 @@
12GB of combined RAM and swap. This means on my main computer I have 16GB 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. 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 *** Get the latest live system with fast mirrors
When you boot into the live ISO, execute the following command: When you boot into the live ISO, execute the following command:
#+BEGIN_SRC sh :exports code #+BEGIN_SRC sh :exports code :tangle no
pacman -Syu reflector pacman -Sy reflector
reflector --country France --country Germany --latest 200 \ reflector --country France --country Germany --latest 200 \
--protocol http --protocol https --sort rate \ --protocol http --protocol https --sort rate \
--save /etc/pacman.d/mirrorlist --save /etc/pacman.d/mirrorlist
@ -169,333 +178,425 @@
not wish to do it manually. Personally, Ive done it several times already, not wish to do it manually. Personally, Ive done it several times already,
I know how the distro works, I just want to be able to install my distro I know how the distro works, I just want to be able to install my distro
quickly now. quickly now.
#+BEGIN_SRC sh :exports code #+BEGIN_SRC sh :exports code :tangle no
wget archfi.sf.net/archfi wget archfi.sf.net/archfi
# Or from matmoul.github.io/archfi if SourceForge is down # Or from matmoul.github.io/archfi if SourceForge is down
sh archfi sh archfi
#+END_SRC #+END_SRC
Then, follow the instructions and install Arch Linux. Take the opportunity 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 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. package manager (it is just a wrapper for =pacman=) and AUR helper, and
=pacman-contrib= which will help us installing some packages later.
Once your system is installed, reboot and remove your installation media Once your system is installed, reboot and remove your installation media
from your computer. from your computer.
** Install =yay= if it hasnt been done during the system installation ** Install basic packages
Next step is to install the AUR helper =yay=. *DO NOT* use =yaourt=, it is We will need some basic packages in order to run the bootstrap file. So,
discontinued, seriously updated and represents a serious security flaw. lets install =fish= (our shell running the script) and =git=.
#+BEGIN_SRC sh :exports code :tangle no
Lets clone =yay= in a folder =fromGIT= that will be in our home folder. This sudo pacman -Sy fish git yadm
is also where well download every other packages well 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.
Lets update the system, just in case some packages were updated during the
installation. And lets install =yadm= (our dotfiles manager) and =emacs=
while were at it.
#+BEGIN_SRC sh :exports code
yay -Syua yadm emacs python-envtpl-git
#+END_SRC #+END_SRC
** Set up =yadm= ** Execute bootstrap
=yadm= is my dotfiles manager. It has some very interesting, including host =yadm= comes with a very handy feature: its bootstrap script. We can
and machine-specific files and file content, as can be seen in execute it by running the following command:
=.config/i3/config##yadm.j2=. It also manages some files system-wide (well, #+BEGIN_SRC fish :exports code :tangle no
actually =home=-wide), so you usually dont have to symlink anything. yadm bootstrap
#+END_SRC
For some reason, when Im in i3, polybar crashes when I run any =yadm= Notice these two header files, we can see this is a fish script, hence why we
command, so I made the =C-S-p= shortcut to relaunch it at will. need fish (which is my daily shell anyway).
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
#!/usr/bin/fish
# -*- mode: fish -*-
#+END_SRC
Lets take a look at what it does.
*** Get the dotfiles *** Get a correct keyboard layout
You should clone the dotfiles with the help of =yadm=. For that purpose, you I use mainly the [[https://bepo.fr/wiki/Accueil][bépo]] layout, a French keyboard layout inspired by Dvorak
can execute either of the two following commands. layouts, however I sometimes need to switch back to the standard French
- From [[https://labs.phundrak.fr/phundrak/dotfiles][labs.phundrak.fr]]: AZERTY or the American QWERTY layout, so I make it so the Menu key switches
#+BEGIN_SRC sh :dir ~ :exports code for me my layout between these three. This makes it so my xorg configuration
yadm clone https://labs.phundrak.fr/phundrak/dotfiles.git of my keyboard looks like this:
#+END_SRC #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
- From [[https://github.com/phundrak/dotfiles][Github]]: set keyboardconf \
#+BEGIN_SRC sh :dir ~ :exports code 'Section "InputClass"
yadm clone https://github.com/phundrak/dotfiles.git Identifier "system-keyboard"
#+END_SRC MatchIsKeyboard "on"
Option "XkbLayout" "fr,fr,us"
To decrypt the encrypted files, run the following command: Option "XkbModel" "pc104"
#+BEGIN_SRC sh :dir ~ :exports code Option "XkbVariant" "bepo,,"
yadm decrypt Option "XkbOptions" "grp:menu_toggle"
EndSection'
#+END_SRC #+END_SRC
It will ask the passphrase. So, lets set it as our keyboard configuration.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
*** Update the remotes printf "\n# Set keyboard layout #########################################################\n\n"
Now, lets make sure we have the correct remotes set up for the dotfiles. echo $keyboardconf | sudo tee /etc/X11/xorg.conf.d/00-keyboard.conf
#+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 dont 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 #+END_SRC
*** Get our git submodules *** Set our locale
Our dotfiles rely on a couple of submodules we should get. Lets download I use two main locales, the French and US UTF-8 locales, and I like to keep
them. the Japanese locale activated just in case.
#+BEGIN_SRC sh :dir ~ :exports code #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
yadm submodule update --init --recursive set mylocales "en_US.UTF-8 UTF-8" "fr_FR.UTF-8 UTF-8" "ja_JP.UTF-8 UTF-8"
#+END_SRC
Lets enable these.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Set our locale ##############################################################\n\n"
for item in $mylocales
if test (grep -e "#$item" /etc/locale.gen)
sudo sed -i "/$item/s/^#//g" /etc/locale.gen
end
end
#+END_SRC #+END_SRC
*** Generate the alt dotfiles This is my configuration I usually use when it comes to my locale.
We will need to generate the host-specific dotfiles. We can run the #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
following command: set localeconf "LANG=en_US.UTF-8
#+BEGIN_SRC sh :dir ~ :exports code LC_COLLATE=C
yadm alt 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
Lets set it as our systems locale.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
echo $localeconf | sudo tee /etc/locale.conf
#+END_SRC
Now we can generate our locale!
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Generate locale #############################################################\n\n"
sudo locale-gen
#+END_SRC #+END_SRC
And with that, we should have all of our dotfiles placed where they need to
be!
** Set up Emacs *** Create some folders
Now that we have our dotfiles installed, lets set up Emacs. First, lets Lets create some folders we might need for mounting our drives, Android
download Spacemacs. devices and CDs.
#+BEGIN_SRC sh :dir ~ :exports code #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d printf "\n# Create directories for mounting #############################################\n\n"
#+END_SRC sudo mkdir -p /mnt/{USB,CD,Android}
sudo chown $USER:(id -g $USER) /mnt/{USB,CD,Android}
#+END_SRC
In our =.emacs.d= directory, lets switch Spacemacs branch to =develop=. *** Set users shell to fish
#+BEGIN_SRC sh :dir ~/.emacs.d :exports code First of all, the bootstrap shell will set the users shell to fish.
git checkout develop #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
#+END_SRC printf "\n# Set fish as the default shell ###############################################\n\n"
The rest of this READMEs code blocks should now be executable from Emacs chsh -s /usr/bin/fish
itself, and we should be able to have a perfectly running Emacs installation. #+END_SRC
Thats the power of Org-mode!
** Install our needed packages *** Install =yay= if it isnt already installed
Now, we can install all the packages I usually have installed on my computer. Now well need to be sure =yay=, our AUR helper, is installed on our system.
#+BEGIN_SRC sh :dir /sudo:: :exports code If it is, we dont need to to anything. However, if it isnt, well install
yay -S --needed asar ascii aspell-en aspell-fr assimp autoconf automake \ it manually.
awesome-terminal-fonts bash bat biber binutils bison bleachbit \ #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
bluez-firmware bluez-utils bookworm boost bzip2 chromium clisp compton \ if ! test which yay
coreutils cppcheck cppreference cppreference-devhelp cpupower cronie \ printf "\n# Installing yay ##############################################################\n\n"
cryptsetup cups device-mapper dhcpcd diffutils discord-canary discount \ cd
ditaa dmenu dmenu-lpass docker docker-compose doxygen dunst dwarffortress \ mkdir -p fromGIT
e2fsprogs emacs exfat-utils fakeroot feh ffmpegthumbnailer file \ cd fromGIT
filesystem findutils fingerprint-gui firefox fish flake8 flex \ git clone https://aur.archlinux.org/yay.git
font-mathematica fontforge freeglut fzf gawk gcc gcc-libs gdb gettext \ cd yay
gimp git glibc gnome-disk-utility gnome-epub-thumbnailer gnu-free-fonts \ makepkg -si --noconfirm
gnuplot go-tools graphviz grep gzip htop i3-gaps i3lock-blur i3status \ else
icecat-bin igdm-bin inetutils intel-ucode iproute2 iputils \ printf "\n# yay already installed #######################################################\n\n"
j4-dmenu-desktop jfsutils jmtpfs lastpass-cli less libnewt libtool \ end
licenses light linux-headers lldb logrotate lsof lvm2 m4 make man-db \ #+END_SRC
man-pages mate-polkit mdadm meson minted mpc mpd \ *** Setting up Emacs: Installing Spacemacs
mpd-rich-presence-discord-git mpv mupdf-tools nano nasm ncdu ncmpcpp \ Now, the first thing we want to do with Emacs is install its Spacemacs
nemo-fileroller nemo-preview neofetch netctl networkmanager \ distribution. Well clone its =develop= branch into =~/.emacs.d=. We need to
networkmanager-openvpn nm-connection-editor nnn nomacs noto-fonts-emoji \ do this prior to our dotfiles cloning because of some submodules that are
npm ntfs-3g numlockx openmp openssh p7zip pacman pacman-contrib pandoc-bin \ cloned within our =~/.emacs.d= directory, and git wont let us clone
patch pavucontrol pciutils pcurses pdfpc perl pkgconf polybar procps-ng \ Spacemacs in an already existing and non-empty directory. To make sure it
psmisc pulseaudio-bluetooth python-envtpl-git python-pip python-pywal qemu \ isnt one, lets delete any potentially existing =~/.emacs.d= directory:
r raw-thumbnailer redshift refind-efi reflector reiserfsprogs rofi \ #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
rofi-wifi-menu-git rsync rtv rustup s-nail samba scrot sdl2_gfx sdl2_image \ printf "\n# Installing Spacemacs ########################################################\n\n"
sdl2_mixer sdl2_ttf sed sent shadow siji-git simplescreenrecorder \ rm -rf ~/.emacs.d
speedcrunch sshfs st-luke-git sudo sysfsutils systemd-sysvcompat tar \ #+END_SRC
texinfo texlive-bibtexextra texlive-bin texlive-core texlive-fontsextra \ Now we can clone Spacemacs:
texlive-formatsextra texlive-games texlive-humanities texlive-langchinese \ #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
texlive-langcyrillic texlive-langextra texlive-langgreek \ git clone --single-branch --branch develop https://github.com/syl20bnr/spacemacs ~/.emacs.d
texlive-langjapanese texlive-langkorean texlive-latexextra \ #+END_SRC
texlive-localmanager-git texlive-music texlive-pictures texlive-pstricks \ And we can restore what might have been deleted in our =~/.emacs.d/private=
texlive-publishers texlive-science tmux tree ttf-arphic-uming ttf-baekmuk \ directory:
ttf-bitstream-vera ttf-dejavu ttf-google-fonts-opinionated-git \ #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
ttf-joypixels ttf-liberation ttf-material-design-icons-git ttf-ms-fonts \ yadm checkout -- ~/.emacs.d/private/
ttf-symbola ttf-tibetan-machine ttf-twemoji-color ttf-unifont unicode \ #+END_SRC
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, Ill probably have to
type my password a few times.
For some reasons, if you directly install =compton-tryone-git= without *** Set up dotfiles
installing =compton= first, the package wont work, which is why I made you **** Update our dotfiles remotes
install =compton= in the command above. Now you can install This line in the bootstrap script will test if the current user is using my
=compton-tryone-git=. It will replace =compton=, so say “yes” when it warns username. If yes, its probably me.
you about the package conflict and whether =compton= should be removed. #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
#+BEGIN_SRC fish :exports code if ! test (echo "phundrak" | sed -e "s/^.*$USER//I")
yay -S compton-tryone-git #+END_SRC
#+END_SRC If it is me installing and using these dotfiles, I want the remotes of my
dotfiles to be set to ssh remotes using my ssh keys.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Update yadms remotes #######################################################\n\n"
yadm remote set-url origin git@labs.phundrak.fr:phundrak/dotfiles.git
yadm remote add github git@github.com:phundrak/dotfiles.git
#+END_SRC
I will also want to decrypt my encrypted files, such as said ssh keys.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Decrypt encrypted dotfiles ##################################################\n\n"
yadm decrypt
#+END_SRC
Finally, lets close this =if= statement.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
end
#+END_SRC
** Enable and start some services **** Get =envtpl=
As you can see above, docker has been installed. Lets enable and start its Before we set our dotfiles up, lets make sure =envtpl= is correctly
service. installed. This package will be needed for generating our alt dotfiles.
#+BEGIN_SRC fish :dir /sudo:: :exports code #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
systemctl enable docker printf '\n# Install envtpl ##############################################################\n\n'
systemctl start docker yay -Syu python-envtpl-git
#+END_SRC #+END_SRC
I also usually add myself as a member of the =docker= group because I dont
like prefixing every single docker command with =sudo=. So lets 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 **** Update our submodules
=openssh=. Edit your =/etc/ssh/sshd_config= file as needed, then lets do Now we can download the various dependencies of our dotfiles. To do so,
that here: lets run the following command:
#+BEGIN_SRC fish :dir /sudo:: :exports code #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
systemctl enable sshd printf "\n# Getting yadm susbmodules ####################################################\n\n"
systemctl start sshd yadm submodule update --init --recursive
#+END_SRC #+END_SRC
** Install Fisher and our fish shell extensions **** Generate our alt files
As mentionned above, I use the fish shell as my main shell. And I use some Now this should be the last manipulation on our dotfiles: lets create our
extensions too that I installed from fisher, and custom functions.First, alternate files:
lets install fisher: #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
#+BEGIN_SRC fish :exports code printf "\n# Generating alt files ########################################################\n\n"
curl https://git.io/fisher --create-dirs -sLo \ yadm alt
~/.config/fish/functions/fisher.fish #+END_SRC
#+END_SRC
Awesome! Now, onto the fisher packages: **** Symlink some system config files
#+BEGIN_SRC fish :exports code We have some files in [[file:ect/][etc/]] that are to be symlinked to =/etc=.
fisher add edc/bass franciscolourenco/done jethrokuan/fzf jethrokuan/z \ #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
jorgebucaran/fish-getopts laughedelic/pisces matchai/spacefish \ for f in (find ~/etc -type f)
tuvistavie/fish-ssh-agent set dest (echo $f | sed -n 's/^.*etc\(.*\)$/\/etc\1/p')
#+END_SRC sudo ln -s $f $dest
Now our fish shell is ready to rock! Plus, we already have our custom end
functions installed from our dotfiles! #+END_SRC
** Install packages from git We may also want to symlink our [[file:.nanorc][nanorc]] to the =/root= directory for when we
Now, we move on to the installation of git-based packages. use =nano= as =sudo=.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
read --prompt "echo 'Symlink .nanorc to roots .nanorc? (Y/n): ' " -l nanoroot
if test $nanoroot = 'y' || test $nanoroot = "Y" || test $nanoroot = ''
printf "\n# Symlinking .nanorc to roots .nanorc ########################################\n\n"
sudo ln -s $HOME/.nanorc /root/.nanorc
end
#+END_SRC
*** Install =i3-gaps-rounded= *** Install basic packages
Lets set in a custom varible what packages well be needing.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
set PACKAGES \
asar ascii aspell-en aspell-fr assimp awesome-terminal-fonts base-devel bat \
biber bleachbit bluez-firmware bluez-utils bookworm boost bzip2 chromium clisp \
compton cppcheck cppreference cppreference-devhelp cpupower cronie cryptsetup \
device-mapper diffutils discord-canary discount ditaa dmenu dmenu-lpass docker \
docker-compose doxygen dunst dwarffortress emacs exfat-utils ffmpegthumbnailer \
findutils firefox flake8 font-mathematica fontforge freeglut fzf gcc-libs gdb \
gimp glibc gnome-disk-utility gnome-epub-thumbnailer gnu-free-fonts gnuplot \
go-tools graphviz htop i3-gaps i3lock-blur i3status igdm-bin inetutils \
j4-dmenu-desktop jfsutils jmtpfs lastpass-cli less linux-headers lldb \
logrotate lvm2 ly-git meson minted mpc mpd mpd-rich-presence-discord-git mpv \
mupdf-tools nano ncdu ncmpcpp nemo-fileroller nemo-preview neofetch netctl \
networkmanager networkmanager-openvpn nm-connection-editor nnn nomacs \
noto-fonts-emoji npm ntfs-3g numlockx openssh p7zip pacman-contrib pandoc-bin \
pavucontrol pciutils pcurses pdfpc polybar pulseaudio-bluetooth \
python-envtpl-git python-pip python-pywal qemu r raw-thumbnailer redshift \
reflector rofi rofi-wifi-menu-git rsync rtv rustup s-nail samba scrot sent \
shadow siji-git simplescreenrecorder speedcrunch sshfs st-luke-git \
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 valgrind \
vim w3m wget x11-ssh-askpass xclip xdg-user-dirs-gtk xorg-drivers xorg-apps \
xfsprogs xorg-server xorg-xinit xss-lock yapf
#+END_SRC
These are the minimum I would have in my own installation. You can edit it
however you want. Lets install those.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Installing needed packages ##################################################\n\n"
yay -S --needed $PACKAGES
#+END_SRC
*** Installing Tryones Compton fork
For some reason, I found installing directly this fork does not work, and I
need to install it after I installed the regular compton packages.
=compton-tryone-git= will replace =compton= which will be removed.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Installing tryones compton fork ############################################\n\n"
yay -S compton-tryone-git
#+END_SRC
*** Enable some of our services
We have installed some packages which require some services to run. Lets
enable them.
**** Docker
First, lets activate Docker.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Enabling and starting Docker ################################################\n\n"
sudo systemctl enable --now docker
#+END_SRC
Now, if we wish it, we can be added to the =docker= group so we wont have
to type =sudo= each time we call Docker or Docker Compose.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
read --prompt "echo 'Do you wish to be added to the `docker` group? (Y/n): ' " -l adddockergroup
if test $adddockergroup = 'y' || test $adddockergroup = "Y" || test $adddockergroup = ''
sudo usermod -aG docker $USER
end
#+END_SRC
**** Emacs
Emacs will run as a user service, which means it wont be launched until we
log in.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Enabling Emacs as user service ##############################################\n\n"
systemctl --user enable --now emacs
#+END_SRC
**** SSH server
Maybe we want to activate an SSH server on our machine. If so, we can
enable it. Lets ask the question.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
read --prompt "echo 'Do you want to activate the ssh server? (Y/n): ' " -l sshdserver
if test $sshdserver = 'y' || test $sshdserver = "Y" || test $sshdserver = ''
printf "\n# Enabling ssh server #########################################################\n\n"
sudo systemctl enable --now sshd
end
#+END_SRC
**** Ly
Ly is a display manager based on ncurses which I find nice enough for me to
use (I generally dont like using display managers). Lets enable it, and
lets disable tty2 while were at it (Ly uses it to run X).
#+BEGIN_SRC fish
sudo systemctl enable --now ly
sudo systemctl disable getty@tty2
#+END_SRC
*** Set up our fish shell
**** Install =fisher=
We will be using =fisher= as our extensions manager for Fish. Lets install
it.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Installing fisher ###########################################################\n\n"
curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
#+END_SRC
**** Install our extensions
I generally use the following extensions in my Fish shell.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
set FISHEXTENSIONS \
edc/bass franciscolourenco/done jethrokuan/fzf jethrokuan/z \
jorgebucaran/fish-getopts laughedelic/pisces matchai/spacefish \
tuvistavie/fish-ssh-agent
#+END_SRC
Lets install these:
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
fisher add $FISHEXTENSIONS
#+END_SRC
*** Install packages from git
Now, lets install some packages from git directly.
**** i3-gaps rounded
I know we already installed =i3-gaps= from the AUR, why reinstall it? Well, 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 that is certainly bad practices, but this allowed me to already have the
needed dependencies for building =i3= installed. Now, lets clone it, build needed dependencies for building =i3= installed. Now, lets clone it, build
it, and install it. It will required the password during the actual it, and install it. Doing this is probably very bad practices though, be
installation. warned.
#+BEGIN_SRC fish :dir ~/fromGIT :exports code #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Install i3-gaps-rounded #####################################################\n\n"
cd ~/fromGIT
git clone https://github.com/resloved/i3.git i3-gaps-rounded git clone https://github.com/resloved/i3.git i3-gaps-rounded
cd i3-gaps-rounded cd i3-gaps-rounded
rm -rf build rm -rf build
autoreconf --force --install autoreconf --force --install
mkdir build && cd build mkdir build && cd build
../configure --prefix=/usr --sysconfdir=/etc --disable-sanitizers ../configure --prefix=/usr --sysconfdir=/etc --disable-sanitizers
make make -j
sudo make install sudo make install
#+END_SRC #+END_SRC
*** Install Polybar Battery **** Polybar Battery
I use a custom tool for my battery indicator which also launches a warning Now lets install =polybar-battery=. This is a binary that Ill use in my
when the battery is low. However, I need to build it, since it is not [[file:.config/i3/config][i3 config]] to indicate my battery level. It also sends a notification on low
available in the repos nor the AUR. battery and on charging completed.
#+BEGIN_SRC fish :dir ~/fromGIT :exports code #+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
git clone https://github.com/drdeimos/polybar_another_battery.git printf "\n# Install polybar-battery #####################################################\n\n"
cd polybar_another_battery cd ~/fromGIT
go get -u github.com/distatus/battery/cmd/battery git clone https://github.com/drdeimos/polybar_another_battery.git
make build cd polybar_another_battery
go get -u github.com/distatus/battery/cmd/battery
make build
#+END_SRC
Now, we have our binary, lets symlink it in our local binary directory,
=~/.local/bin=.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
ln -s polybar-ab ~/.local/bin/polybar-ab
#+END_SRC
**** Reveal.JS
I sometimes use Reveal.JS to make presentations, and I set its location in
my [[file:.spacemacs][dotspacemacs]] file to be in =~/fromGIT=, so lets clone it there.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Install Reveal.JS ###########################################################\n\n"
cd ~/fromGIT
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 :tangle ~/.yadm/bootstrap
printf "\n# Install the rust toolchains, nightly is the default one #####################\n\n"
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,
lets run this:
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
rustup toolchain install stable
#+END_SRC
**** Install some utilities
Well need some utilities when developing Rust from Emacs, namely =rustfmt=
and =racer=. Lets install them with =cargo=.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Add rust utilities ##########################################################\n\n"
cargo install rustfmt racer
#+END_SRC
*** Clean the =pacman= and =yay= cache
Finally, we are almost done! Lets clean the cache of =pacman= and =yay=.
#+BEGIN_SRC fish :exports code :tangle ~/.yadm/bootstrap
printf "\n# Clean the pacman and yay cache ##############################################\n\n"
yay -Sc --noconfirm
#+END_SRC #+END_SRC
You should now run a system pretty close to the one I have on my main
Lets also create the =~/.local/bin/= directory in which I will put some computer and my thinkpad.
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
** Set your locale
Archs default locale configuration is crap. Like… really. It took me a while
to figure out why some elements in polybar didnt work along with some other
pieces of software. So, go and uncomment the locales youll 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 dont
really like display managers or desktop environments. So, to launch i3, lets
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, lets 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, lets 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, lets
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 well often have to run the following command:
#+BEGIN_SRC fish :exports code
rustup update
#+END_SRC
*** Install some utilities
Well need some utilities when developing Rust from Emacs, namely =rustfmt=
and =racer=. Lets install them with =cargo=.
#+BEGIN_SRC fish
cargo install rustfmt racer
#+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
You should now run a system pretty close to the one I have on my main
computer and my thinkpad.
* Licence * Licence
All of my dotfiles (and my dotfiles only) are available under the GNU GPLv3 All of my dotfiles (and my dotfiles only) are available under the GNU GPLv3