An Artix Hyprland configuration for my daily computer.
- OS: Artix Linux (runit)
- WM: Hyprland (Wayland)
- Terminal: Kitty
- Shell: Bash
- Editor: nvim
bash/: Bash login + interactive files (.bash_profile,.bashrc)home/: Files that live at the root of$HOME(e.g.Makefile)hypr/: Hyprland configurationnvim/: Neovim configurationwaybar/: Waybar configurationwofi/: Wofi launcher stylingswaync/: SwayNC configurationwireplumber/: WirePlumber priority rulesrunit/user/: User runit services (pipewire stack, set-wallpaper, battery-notify, obsidian-theme)runit/system/: System runit services (displaylink)obsidian/: Shared Obsidian config (appearance, plugins, theme) — symlinked into every vault by theobsidian-themerunit servicescripts/: Custom system tools (~/.local/bin)configs/: Small configuration files (sysctl, modules-load, gtk, NetworkManager)claude/: Claude Code skills (claude/skills/→~/.claude/skills/)docs/: Documentation
git clone https://github.com/OscarCarPu/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# Packages from docs/packages.md (bootstraps yay if needed) + uv-managed
# Python tooling (pyright, ruff) for nvim
bash install-packages.sh
# User-level symlinks (configs, runit user services, scripts)
bash install.sh
# System-level symlinks (sudo): /etc/sysctl.d, /etc/modules-load.d, /etc/runit/sv
bash install.sh --systemThe package list lives in docs/packages.md. System
bring-up (runit, drivers, post-install fixes) is in
docs/system.md.
User (bash install.sh):
bash/.bash_profile→~/.bash_profilebash/.bashrc→~/.bashrchome/Makefile→~/Makefilehypr→~/.config/hyprnvim→~/.config/nvimwaybar→~/.config/waybarwofi→~/.config/wofiswaync→~/.config/swayncwireplumber→~/.config/wireplumbergit/.gitconfig→~/.gitconfigconfigs/user-places.xbel→~/.local/share/user-places.xbelconfigs/gtk-3.0/bookmarks→~/.config/gtk-3.0/bookmarksconfigs/gtk-3.0/settings.ini→~/.config/gtk-3.0/settings.iniclaude/skills→~/.claude/skillsscripts/*→~/.local/bin/runit/user/<svc>/{run,log/run}→~/.local/share/runit/sv/<svc>/...
System (bash install.sh --system):
configs/sysctl.d/90-disable-ipv6.conf→/etc/sysctl.d/90-disable-ipv6.confconfigs/modules-load.d/evdi.conf→/etc/modules-load.d/evdi.confconfigs/pacman.conf→/etc/pacman.confrunit/system/displaylink/{run,log/run}→/etc/runit/sv/displaylink/...
- Packages: Packages — single source of truth for what's installed
- System: System — kernel, runit, drivers, network, post-install fixes
- Desktop: Desktop — Hyprland, Waybar, monitors, startup, power menu
- Workflow: Workflow — git aliases, Makefile, bookmarks, bt-spotify, boot-bench
- Seafile: Seafile — file sync, Cloudflare wrapper, ignore patterns
- Claude Code: Claude — custom skills
- Neovim: Neovim
- Homelab: Homelab
- No symlink, no entry — everything must go through
install.sh - Document as you go