- Window Manager • Hyprland
- Shell • Oh My Zsh w/ Starship Prompt
- Terminal • kitty
- Panel • Waybar (Patched waybar following Hyprland FAQ)
- Notification Daemon • Dunst
- Launcher • wofi
- File Manager • Ranger
- IDE • NvChad-V2
- GTK • GTK
- Icon • Icon theme
- Cursor • Cursor theme
sudo pacman -S base-devel
mkdir $HOME/git
cd $HOME/git
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
yay -S hyprland-git dunst hyprpaper-git waybar-hyprland-git \
qt5-wayland qt6-wayland
# themes
yay -S catppuccin-gtk-theme-mocha nwg-look
# apps
yay -S cava ranger zsh starship neovim
# graphical file manager (optional)
yay -S thunar thunar archive-plugin file-roller
You will need to have generated an SSH key and added it to your github (or alternatively, use the read-only URL of https://github.com/lachie-underhill/dotfiles
).
git clone [email protected]:lachie-underhill/dotfiles.git $HOME/dotfiles
cd $HOME/dotfiles
GNU Stow (or just stow) is a symbolink link manager and is used to manage all of my dotfiles.
You'll notice that all of the config is stored in folders pertaining to the software that the config is for. For example, all the config required for dunst is in a folder named dunst
.
You can then use stow to create symlinks in the required config location for those apps to pick them up.
stow hyprland nvim waybar
Note: You will need to delete the existing files/directories if they already exist
If you're interested in learning more about how this method works, I'd highly recommend checking out this article by Alex Pearce.
/r/unixporn for endless inspo
Detailed Breakdown of my Arch Install
If you're not me, you probably don't need to be reading this. I mainly just wanted to have this process documented so I don't have to keep rediscovering solutions to problems I've already solved.
If you aren't me and you're just curious, keep reading! Don't expect this to make much sense or even be up to date though. You can think of this as a highly opinionated version of the Arch Installation Guide.
- Have an Arch ISO on a USB (w/ Ventoy or RUFUS)
- Boot into said USB
- Connect to the internet (iwctl docs for Wi-Fi)
It is assumed you already have an empty drive, or a drive with unallocated space to be used for this installation.
All instructions will be assuming an install on /dev/sda
. Modify where required if using a different disk.
Using whatever paritioning tool you like (fdisk, gdisk etc.), you will need two partitions:
- EFI partition on the boot drive (will already exist if dual-booting with Windows)
- Will most likely be
/dev/sda1
- 100MB is fine, but if it's feasible, create with 512MB
- Fat32 format (
mkfs.fat -F 32 /dev/sda1
)
- Will most likely be
- Root partition
- EXT4 format (
mkfs.ext4 /dev/sda2
)
- EXT4 format (
You can create an additional Home Partition (ext4
) to use for your /home
directory if you like. I'm sure there's a good reason to do this, but I haven't ever felt the need.
Pacman uses something called the mirrorlist, which defines where to pull packages from when downloading. The default mirrorlist will most likely be quite slow, sometimes to the point of downloads timing out. We can use a tool called reflector
to optimise this mirrorlist to ensure fast downloads.
pacman -Syy
pacman -S reflector
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
reflector -c "Australia" -l 10 --save /etc/pacman.d/mirrorlist
Now on to the fun part - actually installing Arch.
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
# optional - if using Home Partition
mount /dev/sda3 /mnt/home
Add whatever packages you want to add to your actual Arch installation.
pacstrap /mnt base linux linux-firmware linux-headers vim git networkmanager
We've manually mounted our partitions, but when we reboot these mounts will disappear. Using genfstab
, we can tell the system to mount these partitions every time.
genfstab -U /mnt >> /mnt/etc/fstab
For the rest of this installation, we'll chroot into our actual install.
arch-chroot /mnt
# Set timezone
ln -sf /usr/share/zoneinfo/Australia/Brisbane /etc/localtime
# Generate /etc/adjtime
hwclock --systohc
Edit /etc/locale.gen
and uncomment your locale (eg. en_AU.UTF-8
), then generate locales.
locale-gen
echo LANG=en_AU.UTF-8 > /etc/locale.conf
export LANG=en_AU.UTF-8
echo myhostname > /etc/hostname
touch /etc/hosts
Edit /etc/hosts
file to include the following (replace myhostname with the hostname you chose earlier).
127.0.0.1 localhost
::1 localhost
127.0.0.1 myhostname
systemctl enable NetworkManager.service
# Set root password
passwd
# Add sudo group
pacman -S sudo
groupadd sudo
# Create user
useradd -m username
passwd username
# Add user to groups
usermod -aG wheel,sudo username
Modify visudo file using visudo
command and uncomment/add the following lines:
%wheel ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
It's recommended to install grub now, even if you want to use REFInd later. REFInd really doesn't like being installed when using the live disk, because the refind-install
script isn't that smart (or I'm not smart enough to use it properly).
If you missed the step before, make sure the EFI partition is mounted at /boot/efi
.
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi
grub-mkconfig -o /boot/grub/grub.cfg
# Exit chroot environment
exit
# Unmount all partitions
umount -R /mnt
reboot
Remove your installation media, and make sure you boot into your new install.
It's recommended to verify you can boot into both Arch and Windows at this point.
You obviously only need to do this if you have an NVIDIA GPU.
# Use nvidia-open-dkms if using supported GPU:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
pacman -S nvidia-dkms
In /etc/mkinitcpio.conf
, add nvidia nvidia_modeset nvidia_uvm nvidia_drm
to your MODULES
mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img
echo options nvidia-drm modeset=1 > /etc/modprobe.d/nvidia.conf
To avoid the possibility of forgetting to update initramfs after an NVIDIA driver upgrade, add the following to /etc/pacman.d/hooks/nvidia.hook
:
[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia-dkms # or nvidia-open-dkms if installed above
Target=linux
[Action]
Description=Update NVIDIA module in initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'