Documenting my setup. I don't want to automate this with ansible/scripting but wanted to be able to pick and choose depending on my usecase and hardware.
Necessary in some circumstances where archinstall is unable to format the disk.
All data will be lost.
NVMe: /dev/nvme0n1
SATA: /dev/sda
wipefs -a /dev/nvme0n1
Needed if using Wi-Fi for installation.
iwctl
Device name is typically wlan0
.
Substitute MyWiFiSSID
with actual SSID.
station wlan0 connect MyWiFiSSID
Update archinstall script
pacman -Sy archinstall --noconfirm
archinstall
Only necessary if swap/zram is not selected with archinstall.
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
sudo chmod 0600 /swapfile
sudo mkswap -U clear /swapfile
sudo swapon /swapfile
Update /etc/fstab
.
sudo vim /etc/fstab
Contents of /etc/fstab
:
/swapfile none swap defaults 0 0
sudo vim /etc/pacman.conf
Uncomment the following lines in /etc/pacman.conf
:
Color
[multilib]
Include = /etc/pacman.d/mirrorlist
sudo pacman -Syu
sudo pacman -S pacman-contrib --needed
sudo pacman -S reflector --needed
Set country code: US
sudo vim /etc/xdg/reflector/reflector.conf
Contents of /etc/xdg/reflector/reflector.conf
:
--country US
sudo systemctl enable reflector.timer --now
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
makepkg -si
cd ..
rm -rf yay-bin
yay -S power-profiles-daemon --needed
sudo systemctl enable power-profiles-daemon.service --now
AMD Ryzen only, for reading power statistics using mangohud.
yay -S zenpower3-dkms --needed
Intel only
yay -S thermald --needed
sudo systemctl enable thermald.service --now
If a Bluetooth adapter installed.
sudo systemctl enable bluetooth.service --now
Installed and enabled by default when using archinstall.
yay -S util-linux --needed
sudo systemctl enable fstrim.timer --now
Microcode installed automatically when using archinstall.
Intel
yay -S intel-ucode --needed
AMD
yay -S amd-ucode --needed
Nvidia hybrid graphics laptop only.
yay -S nvidia-prime --needed
yay -S linux-zen linux-zen-headers --needed
yay -S linux-lts linux-lts-headers --needed
Nvidia hybrid graphics only, needed only when running non-mainline kernel.
yay -S nvidia-dkms --needed
If dual booting, install os-prober
yay -S os-prober --needed
If using more than one kernel, edit grub.
sudo vim /etc/default/grub
Contents of /etc/default/grub
:
GRUB_DEFAULT=saved
...
GRUB_SAVEDEFAULT=true
...
GRUB_DISABLE_SUBMENU=y
...
GRUB_DISABLE_OS_PROBER=false # if dual booting
sudo grub-mkconfig -o /boot/grub/grub.cfg
yay -S man-db \
man-pages \
tldr --needed
yay -S firefox --needed
yay -S steam \
gamemode \
gamescope \
mangohud \
goverlay \
minecraft-launcher --needed
yay -S vim \
sublime-text-4 \
visual-studio-code-bin \
cursor-bin \
git
net-tools --needed
yay -S docker docker-compose --needed
sudo systemctl enable docker.service --now
sudo usermod -a -G docker $USER
yay -S kubectl \
helm \
minikube \
kind-bin \
k9s --needed
Contents of ~/.zshrc
:
source <(kubectl completion zsh)
source <(helm completion zsh)
source <(minikube completion zsh)
source <(kind completion zsh)
yay -S libvirt \
qemu \
virt-manager \
iptables-nft \
dnsmasq \
dmidecode \
bridge-utils \
openbsd-netcat \
virt-manager --needed
sudo systemctl enable libvirtd.service --now
sudo usermod -a -G libvirt $USER
yay -S vagrant --needed
vagrant plugin install vagrant-libvirt
yay -S zsh --needed
touch ~/.zshrc
chsh -s $(which zsh)
Configure zsh history.
Contents of ~/.zshrc
:
HISTFILE=~/.zsh_history
HISTSIZE=1001
SAVEHIST=1000
setopt EXTENDED_HISTORY
setopt HIST_EXPIRE_DUPS_FIRST
setopt HIST_FIND_NO_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS
setopt HIST_SAVE_NO_DUPS
setopt INC_APPEND_HISTORY
yay -S zsh-syntax-highlighting \
zsh-history-substring-search \
zsh-autosuggestions \
zsh-autocomplete --needed
Contents of ~/.zshrc
:
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-autocomplete/zsh-autocomplete.plugin.zsh
yay starship --needed
starship preset gruvbox-rainbow -o ~/.config/starship.toml
Contents of ~/.zshrc
:
eval "$(starship init zsh)"
In lieu of starship and manual zsh configurations above:
yay -S antigen --needed
Contents of ~/.zshrc
:
source /usr/share/zsh/share/antigen.zsh
antigen use oh-my-zsh
antigen bundle git
antigen bundle command-not-found
antigen bundle docker
antigen bundle docker-compose
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-history-substring-search
antigen bundle zsh-users/zsh-completions
antigen theme romkatv/powerlevel10k
antigen apply
yay -S bat \
eza \
ripgrep \
fzf --needed
Contents of ~/.zshrc
:
alias cat='bat'
alias less='bat'
alias ls='eza'
alias ll='eza -ahl --group-directories-first --icons --color always'
alias tree='eza --tree'
yay -S ttf-firacode-nerd ttf-nerd-fonts-symbols --needed
yay -S alacritty alacritty-themes --needed
alacritty-themes --create
Contents of ~/.config/alacritty/alacritty.toml
:
general.import = [
"/usr/lib/node_modules/alacritty-themes/themes/Gruvbox-Dark.toml"
]
[font]
size = 18
[font.normal]
family = "FiraCode Nerd Font"
[font.bold]
family = "FiraCode Nerd Font"
[font.italic]
family = "FiraCode Nerd Font"
[font.bold_italic]
family = "FiraCode Nerd Font"
yay -S fish --needed
touch ~/.config/fish/config.fish
chsh -s $(which fish)
Contents of ~/.config/fish/config.fish
if status is-interactive
set -U fish_greeting "π"
set -U EDITOR vim
set -U BROWSER firefox
function ll
eza -Ahl --group-directories-first --icons --color always $argv
end
function tree
eza -A --tree --icons --color always $argv
end
function cat
bat
end
function less
bat
end
function yyy
yay --noconfirm && yay -Yc --noconfirm && yay -Sc --noconfirm
end
end
ssh-keygen
Add public key to github before testing.
ssh -T [email protected]
git config --global user.name 'Matt Siedenburg'
git config --global user.email '[email protected]'