A personal dotfiles repository for a modern Linux desktop environment using Sway (Wayland compositor) with declarative package management through home-manager/Nix.
This repository contains configuration files for a complete Wayland-first desktop environment optimized for development work. All user packages are managed declaratively through home-manager/Nix, providing reproducible environments and simplified maintenance.
- ποΈ Wayland-first desktop with Sway tiling window manager
- π¦ Declarative package management with home-manager/Nix (95+ packages)
- π U2F hardware key authentication for system and web services
- π XDG Base Directory compliance for clean home directory organization
- π Reproducible environments with complete configuration in version control
ββ USER SPACE βββββββββββββββββββββββββββββββββββββ β home-manager/Nix (PRIMARY & ONLY) β β ββ Development Tools (rust, node, python...) β β ββ Desktop Environment (sway, waybar, mako...) β β ββ Applications (firefox, vlc, steam...) β β ββ System Libraries (fonts, certificates...) β β ββ Configuration Management (git, zsh, emacs) β βββββββββββββββββββββββββββββββββββββββββββββββββββ ββ SYSTEM SPACE βββββββββββββββββββββββββββββββββββ β DNF/RPM (System packages only) β β ββ Kernel and drivers β β ββ System services (systemd, etc.) β β ββ Core libraries (glibc, etc.) β β ββ Hardware firmware β βββββββββββββββββββββββββββββββββββββββββββββββββββ ββ SANDBOXED ββββββββββββββββββββββββββββββββββββββ β Flatpak (Platform runtimes only) β β ββ No user applications installed β β ββ System platform dependencies only β βββββββββββββββββββββββββββββββββββββββββββββββββββ
- Fedora-based Linux system (or compatible)
- Nix package manager installed
- home-manager configured
- Clone this repository to your home directory
- Enable Nix flakes (if not already enabled):
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
- Apply home-manager flake configuration:
cd ~/.config/home-manager home-manager switch --flake .
- Reload Sway configuration:
swaymsg reload
| Component | Purpose | Configuration |
|---|---|---|
| Sway | Wayland compositor & tiling WM | .config/sway/config |
| Waybar | Status bar | .config/waybar/ |
| Wofi | Application launcher | .config/wofi/ |
| Mako | Notification daemon | .config/mako/ |
| Swaylock | Screen locker (DISABLED) | .config/swaylock/ (unused) |
| Kanshi | Multi-monitor management | .config/kanshi/ |
| Gammastep | Blue light filter | Configured via home-manager |
| Tool | Purpose | Configuration |
|---|---|---|
| Emacs | Primary editor (XDG compliant) | .config/emacs/init.el |
| Alacritty | Terminal emulator | .config/alacritty/ |
| Zsh | Shell with custom theme | .config/zsh/ |
| Tmux | Terminal multiplexer | .config/tmux/ |
| Git | Version control | Managed via home-manager |
- Primary: home-manager/Nix Flakes (ALL user packages - 95+)
- System: DNF/RPM (kernel, drivers, system services only)
- Sandboxed: Flatpak (platform runtimes only, no user applications)
Configured for enhanced security across:
- GDM/GNOME login
- sudo administrative tasks
- ~~Swaylock screen unlock~~ (currently disabled due to unlock issues)
- Web services (GitHub, GitLab, cloud providers)
See ADR-0004 for implementation details.
- GitHub, GitLab
- Porkbun, Namecheap (domain management)
- Bitwarden (password management)
- AWS and other cloud providers
All applications are configured to respect XDG directories where possible:
~/.config/- Application configuration~/.cache/- Non-essential cached data~/.local/share/- Application data files~/.local/state/- Application state data
. βββ .config/ # Application configurations β βββ home-manager/ # Nix package & config management β βββ sway/ # Window manager configuration β βββ waybar/ # Status bar configuration β βββ emacs/ # Editor configuration β βββ zsh/ # Shell configuration βββ docs/ # Documentation & ADRs β βββ architecture/adr/ # Architecture Decision Records βββ CLAUDE.md # AI assistant guidance βββ README.org # This file
# Install new packages: Edit .config/home-manager/home.nix, then:
cd ~/.config/home-manager
home-manager switch --flake .
# Update flake inputs (like package updates):
nix flake update
# Update specific input only:
nix flake lock --update-input nixpkgs
# System updates (base OS only):
sudo dnf upgrade --refresh
# Check package status:
ls ~/.nix-profile/bin/ | wc -l # Count available binaries# Apply home-manager changes:
cd ~/.config/home-manager
home-manager switch --flake .
# Reload Sway:
swaymsg reload
# Restart Waybar (if needed):
nohup waybar &# Commit configuration changes:
git add .config/ docs/
git commit -m "Add feature X to improve Y
Explain why change was needed and context.
Reference ADR-XXX if architectural decision.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>"All significant architectural decisions are documented in docs/architecture/adr/:
- ADR-0000: Record Architecture Decisions
- ADR-0001: Complete Package Manager Consolidation
- ADR-0002: Sway Window Manager with Wayland-First Desktop Environment
- ADR-0003: XDG Base Directory Specification Compliance
- ADR-0004: U2F Hardware Key Authentication
- ADR-0005: Line Length and Text Formatting Standards
- ADR-0006: Trailing Whitespace Policy
- ADR-0007: Git Commit Message Standards
- ADR-0008: Viber AppImage Packaging Solution (Superseded)
- ADR-0009: Complete Guix Package Manager Elimination
- ADR-0010: Home Manager Flakes Migration
- ADR-0011: Viber nixGL Integration and Dynamic Icon Extraction
CLAUDE.md- Guidance for AI assistant sessions- Package reports and migration documentation available in root directory
- Sleep recovery: Laptop screen may not restore after sleep (Sway limitation)
- Firefox crashes: Occasional crashes when reloading Sway or returning from sleep
- Waybar disappears: Restart with
nohup waybar &if status bar disappears
- Non-XDG applications: Firefox, Thunderbird, Kodi donβt respect XDG directories
- Legacy compatibility: Some applications may require XWayland for proper operation
- Swaylock disabled: Screen locker disabled due to unlock failures with home-manager/Nix version
- Alternative: Currently relying on system-level screen locking only
- Status: Investigating alternative screen lock solutions
- Package status: nixpkgs viber package broken due to libxml2 compatibility (GitHub Issue #421440)
- Solution: nixGL-wrapped AppImage with dynamic icon extraction
- Features:
- β Hardware acceleration via nixGL
- β Proper font rendering (direct AppImage execution)
- β Working links (custom xdg-open wrapper for Firefox)
- β Official Viber icon (dynamically extracted from AppImage)
- β No binary files stored in git repository
- Status: Fully functional with excellent user experience
- Guix elimination: β Completely eliminated as of 2025-08-06 (ADR-0009)
- Flakes migration: β Migrated to modern flakes-based workflow (ADR-0010)
- Status: Clean, unified package management through home-manager/Nix flakes only
- Reproducibility: All dependencies pinned in flake.lock for consistent builds
# Sway IPC socket issues:
export SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pgrep -x sway).sock
# Temporary build space (if /tmp is full):
sudo mount -o remount,size=15G /tmp- Run
home-manager switchafter configuration changes - Periodic
sudo dnf upgrade --refreshfor system packages - Monitor
~/.nix-profile/bin/for binary availability - Update ADRs when making architectural changes
- Configuration files are tracked in git
- XDG compliance allows selective backup (exclude cache directories)
- Complete user environment reproducible from
home.nix
Last major update: 2025-08-11 - Flakes migration and Viber improvements Packages managed: 95+ via home-manager/Nix Flakes Architecture: Wayland-first with modern security features and hardware acceleration Reproducibility: Complete user environment with locked dependencies (flake.lock)
β
*This repository represents a fully consolidated, reproducible desktop environment optimized for development productivity and modern security practices.*