These are my personal notes setting up Razer Book 13 with Arch Linux using Hyprland as window manager. Iam using full disk encryption, and btrfs as filesystem.
Main usage is for Kubernetes/Virtualization/DevOps Stuff and some gaming. Configs for localisations are for german, so adjust for your needs.
A big THANK to SOL for getting me into hyprland. Most of the Hyprland config is from his repo. Kudos!
[TOC]
Boot into BIOS and change your Harwareclock to UTC. Now booting Arch Linux, using a prepared Usbstick
Change keyboard layout with loadkeys de-latin1-nodeadkeys
I also change the font to much bigger size to be better readable on this 13" screen with setfont sun12x22
For Network i use wireless, if you need wired please check the Arch WiKi.
Launch iwctl
and connect to your AP station wlan0 connect YOURSSID
Type exit
to leave.
Update System clock with timedatectl set-ntp true
-
My Disk is
nvme0n1
, check withlsblk
-
Partition disk using
gdisk /dev/nvme0n1
with this simple layout: -
o
for new partition table -
n,1,<ENTER>,+1024M,ef00
for EFI Boot -
n,2,<ENTER>,+16384M,8200
for swap partition -
n,3,<ENTER>,<ENTER>,8300
for system partition -
w
to save layout
Format the EFI Partition
mkfs.vfat -F 32 /dev/nvme0n1p1
cryptsetup luksFormat /dev/nvme0n1p3
cryptsetup open /dev/nvme0n1p3 cryptsys
Create btrfs filesystem for root partition.
mkfs.btrfs -f /dev/mapper/cryptsys
Mount Partitions und create Subvol for btrfs.
mount /dev/mapper/cryptsys /mnt
btrfs sub create /mnt/@
btrfs sub create /mnt/@home
Just unmount with umount /mnt
and remount with subvolumes:
mount -o noatime,compress=zstd,commit=120,ssd,discard=async,subvol=@ /dev/mapper/cryptsys /mnt
mkdir -p /mnt/boot
mkdir -p /mnt/home
mount -o noatime,compress=zstd,commit=120,ssd,discard=async,subvol=@home /dev/mapper/cryptsys /mnt/home
mount /dev/nvme0n1p1 /mnt/boot/
Check mountmoints with df -Th
Just install a base system with some tools for first boot:
pacstrap /mnt base base-devel linux linux-firmware btrfs-progs \
intel-ucode networkmanager zsh git git-lfs curl wget reflector nano-syntax-highlighting
After this, generate the filesystem table using
genfstab -p /mnt >> /mnt/etc/fstab
Add some zsh configs for a nicer experience
cp /etc/zsh/zprofile /mnt/root/.zprofile && \
cp /etc/zsh/zshrc /mnt/root/.zshrc
arch-chroot /mnt /bin/zsh
echo {MYHOSTNAME} > /etc/hostname
echo LANG=de_DE.UTF-8 > /etc/locale.conf
echo LANGUAGE=de_DE >> /etc/locale.conf
echo KEYMAP=de-latin1-nodeadkeys > /etc/vconsole.conf
echo FONT=sun12x22 >> /etc/vconsole.conf
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Modify nano /etc/hosts
with these entries. For static IPs, remove 127.0.1.1
127.0.0.1 localhost
::1 localhost
127.0.1.1 {MYHOSTNAME}.localdomain {MYHOSTNAME}
nano /etc/locale.gen
to uncomment the following lines. Change it to your locale and keep en_US cause some tools may need it.
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
en_US.UTF-8
Execute locale-gen
to create the locales now
Set root password and shell
passwd && \
chsh -s /bin/zsh
Edit the configuration with nano /etc/mkinitcpio.conf
and add i915
to the MODULES section.
I use systemd init style, so add sd-vconsole and sd-encrypt
to hooks between
block/filesystems like:
HOOKS="base systemd keyboard autodetect modconf kms block sd-vconsole sd-encrypt filesystems fsck"
create Initramfs using mkinitcpio -p linux
bootctl --path=/boot install
installs bootloader
nano /boot/loader/loader.conf
delete anything and add these few lines and save
default arch.conf
timeout 1
editor 0
nano /boot/loader/entries/arch.conf
with these lines and save.
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
Append boot options with this command:
echo "options rd.luks.name=$(blkid -s UUID -o value /dev/nvme0n1p3)=cryptsys \
rd.luks.options=password-echo=no root=/dev/mapper/cryptsys \
rootflags=subvol=@ rw" >> /boot/loader/entries/arch.conf
I dont use suspend-to-disk, so i add the swap partition to crypttab und add the swap entry to fstab.
To /etc/crypttab
add this line
cryptswap /dev/nvme0n1p2 /dev/urandom swap,cipher=aes-xts-plain64,size=256
And in /etc/fstab
add to end of file
/dev/mapper/cryptswap none swap defaults 0 0
reflector --country 'Germany' --latest 10 --sort score --protocol https --save /etc/pacman.d/mirrorlist
Type exit
to exit chroot
umount -R /mnt/
to unmount all volumes
Now its time to reboot
into the new system!
Enable networkmanager on boot
systemctl enable --now NetworkManager
nmcli device wifi connect "{YOURSSID}" password "{SSIDPASSWORD}"
I want to disable all kind of WLAN powersaving, cause i had issues
For NetworkManager
# /etc/NetworkManager/conf.d/wifi-powersave-off.conf
[connection]
wifi.powersave = 2
And also for kernel module
# /etc/modprobe.d/iwlwifi.conf
options iwlwifi power_save=0
options iwlwifi uapsd_disable=0
options iwlmvm power_scheme=1
systemctl enable --now systemd-timesyncd
(You may look at /etc/systemd/timesyncd.conf
for default values and change if necessary)
Create a new local user and point to zsh
useradd -m -g users -G wheel,lp,power,audio -s /bin/zsh {MYUSERNAME}
passwd {MYUSERNAME}
Execute EDITOR=nano visudo
and uncomment %wheel ALL=(ALL) ALL
Now exit
and relogin with the new {MYUSERNAME}
Change to your homedirectory and
mkdir -p .config/nano
cp /etc/nanorc ~/.config/nano/nanorc
Edit nanorc
and add this line
include "/usr/share/nano-syntax-highlighting/*.nanorc"
Fix a bug in the 2020.10.10-1
realease of the package with
sed -i 's/icolor brightnormal/icolor normal/g' /usr/share/nano-syntax-highlighting/nanorc.nanorc
In /etc/makepkg.conf
search the line for OPTIONS=(strip ....
and change debug
to !debug
I want to use YAY for managing packets
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si --noconfirm
Add some color tweaks to pacman, add this to /etc/pacman.conf
misc options
colors
ILoveCandy
This tools, i found usefull, will be installed:
-
hyprland: this is the compositor
-
alacritty: my default terminal
-
waybar: wayland bar with hyprland support
-
firefox-developer-edition: my default browser
-
swww: used to set a desktop background image
-
swaylock-effects: allows for the locking of the desktop its a fork that adds some editional visual effects
-
wofi: application launcher menu
-
mako: graphical notification daemon
-
xdg-desktop-portal-hyprland: xdg-desktop-portal backend for hyprland
-
thunar: graphical file manager
-
mc: midnight commander, a terminal file manager
-
polkit-gnome: to get superuser access on some graphical application
-
brightnessctl: control monitor and keyboard bright level
-
bluez: bluetooth service
-
bluez-utils: command line utilities to interact with bluettoth devices
-
blueman: bluetooth manager
-
network-manager-applet: managing network connection
-
gvfs: automount usb drives, etc
-
thunar-archive-plugin: front ent for thunar to work with compressed files
-
file-roller: tools for working with compressed files
-
btop: terminal resource monitor
-
pacman-contrib: adds additional tools for pacman. needed for showing system updates in the waybar
-
xsensors: GTK app for hardware temperature
-
gnome-power-manager: app for power management
-
ttf-jetbrains-mono-nerd: the main font
-
noto-fonts-emoji: emoji fonts
-
cantarell-fonts: nice fonts
-
ttf-dejavu: also nice fonts
-
lxappearance: set GTK theme
-
xfce4-settings: needed to set GTK theme
-
pipewire: audio server
-
sof-firmware, alsa-firmware and alsa-ucm-settings are needed for this Razer Book
yay -Sy hyprland alacritty waybar firefox-developer-edition-i18n-de \
swww swaylock-effects wofi mako xdg-desktop-portal-hyprland \
brightnessctl mc thunar polkit-gnome pipewire-alsa pipewire-jack xsensors \
bluez bluez-utils blueman network-manager-applet gvfs gnome-power-manager \
thunar-archive-plugin file-roller btop pacman-contrib power-profiles-daemon \
ttf-jetbrains-mono-nerd noto-fonts-emoji cantarell-fonts ttf-dejavu \
lxappearance xfce4-settings sof-firmware alsa-firmware alsa-ucm-conf
Enable bluetooth and remove some might installed desktop portals
sudo systemctl enable bluetooth
yay -R --noconfirm xdg-desktop-portal-gnome xdg-desktop-portal-gtk
#/etc/environment
MOZ_ENABLE_WAYLAND=1
Copy the dotfiles to their locations and edit them as needed..
Apply a system-wide dark theme and statusbar/launcher based on Catppuccin (mocha)
ln -sf ~/.config/waybar/style/style-dark.css ~/.config/waybar/style.css
ln -sf ~/.config/wofi/style/style-dark.css ~/.config/wofi/style.css
xfconf-query -c xsettings -p /Net/ThemeName -s "Adwaita-dark"
xfconf-query -c xsettings -p /Net/IconThemeName -s "Adwaita-dark"
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
gsettings set org.gnome.desktop.interface icon-theme "Adwaita-dark"
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
I like to use oh-my-zsh with powerlevel10k theme
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
See example zshrc config in my repo
For screenshots i use the swappy
sudo pacman -Sy grim slurp jq otf-font-awesome swappy
Apps and tools i use for devops tasks
Iam using VSCode binary and install it from AUR using
yay -S visual-studio-code-bin
I use pyenv to switch between python versions and pip for installing ansible.
Add export PATH=$HOME/.local/bin/:$PATH
to the PATH variable in .zshrc
sudo pacman -Sy pyenv terraform
Add this to .zshrc
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
List avaiable version using pyenv install --list
and install the desired version with
pyenv install 3.9.16
pyenv global 3.9.16
Install Ansible using pip
python -m pip install --upgrade pip
python -m pip install --user ansible ansible-lint
I go for QEMU/KVM as my hypervisor
sudo pacman -S qemu virt-manager virt-viewer dnsmasq vde2 \
bridge-utils openbsd-netcat libguestfs dmidecode
sudo systemctl enable --now libvirtd
Enable normal user access by editing /etc/libvirt/libvirtd.conf
and enable this lines:
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
Add your user to the group libvirt
sudo usermod -a -G libvirt $(whoami)
Enable nested virtualization
echo "options kvm-intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf
Minikube and stuff
sudo pacman -S minikube kubectl helm go k9s kubeone
Set kvm2 as default driver for minikube
minikube config set driver kvm2
For Openlens use the repo from AUR
yay -S openlens-bin
For k8s configs i use context switching (each config is in its own directory to keep it clean) and set some code in my zshrc:
## Kubectl Context Config
# Set the default kube context if present
DEFAULT_KUBE_CONTEXTS="$HOME/.kube/config"
if test -f "${DEFAULT_KUBE_CONTEXTS}"
then
export KUBECONFIG="$DEFAULT_KUBE_CONTEXTS"
fi
# Additional contexts should be in ~/.kube/configs/XXXX-XXX-XX/xxx.yml/pem/..
KUBE_CONTEXTS="$HOME/.kube/configs"
mkdir -p "${KUBE_CONTEXTS}"
OIFS="$IFS"
IFS=$'\n'
for contextFile in `find "${KUBE_CONTEXTS}" -type f -name "*.yml" -or -name "*.json"`
do
export KUBECONFIG="$contextFile:$KUBECONFIG"
done
IFS="$OIFS"
Create a directory named [email protected]/
inside the systemd system unit files directory like:
sudo mkdir -p /etc/systemd/system/[email protected]/
Create a file in this folder called override.conf with the following content:
# /etc/systemd/system/[email protected]/override.conf
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin {MYUSERNAME} --noclear %I $TERM
Now reload systemd and enable getty@tty1 like:
sudo systemctl daemon-reload
sudo systemctl enable getty@tty1
To my zshrc i add theese lines at the end to autostart the hyprland desktop (script in my dotfiles):
if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then
exec Hyprland
fi
After reboot you will be booted straight into hyprland desktop
Install openrazer driver and polychromatic frontend from AUR
yay -Sy openrazer-meta
sudo gpasswd -a $USER plugdev
yay -Sy polychromatic.git
I would also like to use yubikey to unlock the luks partition. Install the needed FIDO lib and add yubikey to luks partition headers
sudo pacman -Sy libfido2
systemd-cryptenroll --fido2-device=auto /dev/nvme0n1p3
Now edit this line to cryptab:
cryptsys /dev/nvme0n1p3 - fido2-device=auto
Change kernel boot parameters to use fido2. Edit /boot/loader/entries/arch.conf and edit the rd.luks.options to:
options .. rd.luks.options=fido2-device=auto root=..
Now after reboot, yubikey is required to unluck luks partion
Comment out [multilib]
section in /etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist
sudo pacman -Sy lib32-mesa vulkan-intel lib32-vulkan-intel vulkan-icd-loader \
lib32-vulkan-icd-loader lib32-systemd ttf-liberation
Reboot your book and start installing the steam client
Install the client from arh repos using
sudo pacman -Sy steam
Many Games just runs, few of them needs special launch parameters. The Arch Linux Wiki is good place to start.
Some games come bundled with old versions of SDL, which do not support Wayland and might break entirely if you set SDL_VIDEODRIVER=wayland which you normaly do under:
Go to the Game, Properties and Launch options:
SDL_VIDEODRIVER=wayland %command%
You can also set it via terminal in your current session with:
set -x SDL_VIDEODRIVER 'wayland'
This way, SDL_VIDEODRIVER
can also set to x11