Skip to content

phcurado/dotfiles

Repository files navigation

~/dotfiles

Dotfile configuration for archlinux.

Screenshots

Main Screen

Neovim with Snacks Dashboard

Quick Start

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 --no-folding .

# 6. Set zsh as default shell
chsh -s /usr/bin/zsh

# 7. Reboot
reboot

SDDM will start on boot. Select niri and login. Open a terminal with Super + T and connect to WiFi using noctalia's network panel.

System Configuration

Enable required system services after installing packages:

sudo systemctl enable --now NetworkManager
sudo systemctl enable sddm

Main Packages

Paru

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 /tmp/paru
cd /tmp/paru
makepkg -si

Note

All packages below are included in arch-pkgs/pkgs.txt and can be installed at once with make install. The individual install commands are shown for reference only.

Neovim

Neovim is my preferred text editor.

paru neovim

Ghostty

Ghostty 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 ghostty

Tmux

tmux is a terminal multiplexer.

paru tmux

To install plugins, open a tmux session and press prefix + I (prefix is Ctrl + a).

Mise

Mise manages versions of programming languages and tools.

paru mise
mise install   # Install versions from mise.toml

Zsh

Zsh is my preferred shell.

paru zsh
chsh -s /usr/bin/zsh

Reboot or log out/in to apply.

Starship

Starship is a cross-shell prompt.

paru starship

GNU Stow

GNU Stow manages symlinks for dotfiles.

paru stow
stow --no-folding .

If files conflict, use --adopt to override:

stow --no-folding --adopt .

Additional Packages

Install packages from the saved list:

make install
# or: paru -S --needed - < arch-pkgs/pkgs.txt

Save current packages to file:

make tofile
# or: paru -Qqen > arch-pkgs/pkgs.txt

Review arch-pkgs/pkgs.txt before installing - some packages may be system-specific.

Makefile Commands

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

Additional Configuration

Niri

Niri is my window manager (Wayland scrolling compositor).

Noctalia Shell provides the desktop shell (bar, notifications, launcher, lock screen, etc). WiFi is managed via NetworkManager through noctalia's network panel.

Keybindings

Key Action
Super + T Terminal
Super + Space App launcher
Super + Q Close window
Super + M Session menu
Super + Alt + L Lock screen
Super + Ctrl + W Random wallpaper
Print Screenshot (full)
Ctrl + Print Screenshot (screen)
Alt + Print Screenshot (window)
Super + Y Voice typing (hold)

Voice Typing (Voxtype)

Voxtype provides voice-to-text. Before first use, download the Whisper model:

voxtype setup --download

Press Super + Y to start recording, press again to stop and transcribe.

voxtype setup gpu    # Enable GPU acceleration (Vulkan)
voxtype setup model  # Select transcription model

Note

Voxtype is still experimental on this config

Optional Services

Bluetooth

sudo systemctl enable --now bluetooth.service

Syncthing

Syncthing is a continuous file synchronization program.

systemctl --user enable --now syncthing

Access the web UI at localhost:8384 or search "Syncthing" in the app launcher.

Secrets Management (SOPS + AGE)

Personally I use SOPS with AGE for encrypting secrets in projects. My AGE private key is stored in 1Password and it's restored locally using the OP cli.

On a new machine:

make secrets.setup    # Restores key from 1Password to ~/.config/sops/age/keys.txt

Backup 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 1Password

The keys.txt file is gitignored and never committed.

Macropad

Macropad configuration is in macropad/macropad.ron. Upload using:

ansible-playbook --ask-become-pass ansible-scripts/macropad.yml

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published