Dotfile configuration for archlinux.
After a fresh Arch install, you'll be in a TTY. Run these steps to get a working desktop:
# 1. Install prerequisites
sudo pacman -S --needed base-devel git stow
# 2. Install paru (AUR helper)
git clone https://aur.archlinux.org/paru.git /tmp/paru
cd /tmp/paru && makepkg -si
# 3. Clone dotfiles
cd ~/
git clone --recurse-submodules -j8 git@github.com:phcurado/dotfiles.git
cd dotfiles
# 4. Install all packages
make install
# 5. Create symlinks
stow .
# 6. Install system configs (iwd for WiFi)
./install-system.sh
# 7. Enable services
sudo systemctl enable --now systemd-resolved
sudo systemctl enable --now iwd
sudo systemctl enable --now bluetooth.service
sudo systemctl enable sddm
# 8. Disable NetworkManager if installed (conflicts with iwd)
sudo systemctl disable --now NetworkManager
# 9. Set zsh as default shell
chsh -s /usr/bin/zsh
# 10. Reboot
rebootSDDM will start on boot. Select Hyprland and login. Open a terminal with Super + Q and connect to WiFi using impala.
This dotfiles setup uses SOPS with AGE for encrypting secrets in projects. The AGE private key is stored in 1Password and restored locally.
On a new machine:
make secrets.setup # Restores key from 1Password to .config/sops/age/keys.txtBackup your key (if generating a new one):
mkdir -p .config/sops/age
age-keygen -o .config/sops/age/keys.txt
make secrets.backup # Shows key to copy to 1PasswordThe keys.txt file is gitignored and never committed.
Paru is an AUR helper for installing packages from the Arch User Repository.
sudo pacman -S --needed base-devel
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -siNeovim is my preferred text editor.
paru neovimGhostty is a modern terminal emulator.
Important
Ghostty is configured to use the font 0xProto Nerd Font. Install it or change the font in .config/ghostty/config. List available fonts with ghostty +list-fonts.
paru ghosttytmux is a terminal multiplexer.
paru tmuxTo install plugins, open a tmux session and press prefix + I (prefix is Ctrl + a).
Mise manages versions of programming languages and tools.
paru mise
mise install # Install versions from mise.tomlZsh is my preferred shell.
paru zsh
chsh -s /usr/bin/zshReboot or log out/in to apply.
Starship is a cross-shell prompt.
paru starshipGNU Stow manages symlinks for dotfiles.
paru stow
stow .If files conflict, use --adopt to override:
stow --adopt .Install packages from the saved list:
make install
# or: paru -S - < arch-pkgs/pkgs.txtSave current packages to file:
make tofile
# or: paru -Qqen > arch-pkgs/pkgs.txtReview arch-pkgs/pkgs.txt before installing - some packages may be system-specific.
| Command | Description |
|---|---|
make install |
Install packages from arch-pkgs/pkgs.txt |
make show |
List installed packages |
make tofile |
Save installed packages to pkgs.txt |
make cleanCache |
Clean paru cache |
make secrets.setup |
Restore AGE key from 1Password |
make secrets.backup |
Show AGE key for backup to 1Password |
Enable bluetooth service:
sudo systemctl enable --now bluetooth.serviceMacropad configuration is in macropad/macropad.ron. Upload using:
ansible-playbook --ask-become-pass ansible-scripts/macropad.ymlHyprland is my window manager (Wayland). Start it from TTY with Hyprland.
WiFi uses iwd + Impala instead of NetworkManager. The system config (/etc/iwd/main.conf) is installed via ./install-system.sh.
Important
iwd requires systemd-resolved for DNS resolution. The install script enables it automatically and disables NetworkManager if present (they conflict).
| Key | Action |
|---|---|
Super + Q |
Terminal |
Super + Space |
App launcher |
Super + C |
Close window |
Super + M |
Power menu (wlogout) |
Super + L |
Lock screen |
Super + T |
Voice typing (hold) |
Super + Ctrl + W/S |
Next/prev wallpaper |
Print |
Screenshot (full) |
Super + Print |
Screenshot (region) |
Voxtype provides voice-to-text. Before first use, download the Whisper model:
voxtype setup --downloadHold Super + T to record, release to transcribe.



