xsway packages a clean Sway setup with Waybar, sensible developer defaults,
privacy indicators, media status, brightness controls, app launch shortcuts, and
a small installer. The public entry points are Bash wrappers around local
Ansible playbooks:
install.shuninstall.sh
Inspect install.sh before running it, especially because optional package
installation and network service changes may prompt for sudo.
| Area | Included |
|---|---|
| Desktop | Sway config, Waybar theme, launcher, terminal, file manager, lock/logout/session helpers |
| Status bar | Audio, battery, network, MPRIS media, brightness, privacy indicators |
| Networking | Optional impala integration backed by iwd |
| Fonts | Optional user-local 0xProto Nerd Font install |
| Installer | Dry-run mode, backups, managed markers, copy or GNU Stow symlink mode |
| Cleanup | Uninstall flow that moves managed installs aside and can restore backups |
| Distribution | Status |
|---|---|
| Fedora | Supported |
| Debian | Experimental |
| Ubuntu | Experimental, treated as Debian family |
Run the installer as your normal user:
./install.shDo not run the installer with sudo. It manages user-local files under
~/.config, ~/.local, and ~/.local/state. When package installation or
system service changes are enabled, it prompts for sudo internally.
Run a dry run first if you want to see the planned package and dotfile actions:
./install.sh --dry-runInstall only the Sway config and skip packages, fonts, impala, and service changes:
./install.sh --dotfiles-onlyFor development, use GNU Stow symlinks instead of copying the config:
./install.sh --symlinkCopying remains the default so the installed config keeps working after the repository is moved or deleted.
If ansible-playbook is missing, install.sh offers to install ansible-core
through the system package manager:
# Fedora
sudo dnf install ansible-core
# Debian/Ubuntu
sudo apt-get install ansible-coreUse --no-ansible-bootstrap if you want to manage Ansible yourself.
Package manifests live in packages/:
packages/fedora.txtpackages/debian.txt
The package set covers the Sway desktop pieces used by this config: Sway,
Waybar, kitty, rofi, nautilus, wlogout, swaylock, grim, audio
helpers, PipeWire helpers, portal support, iwd, impala, 0xProto Nerd Font,
and font fallback packages.
The Sway config remains in this repository under sway/. The installer copies
or symlinks it to:
~/.config/sway
Machine-specific values are grouped at the top of sway/config:
set $background #0b1220
set $wallpaper ""
set $laptop_output eDP-1
set $keyboard_layout es
set $term kitty
set $menu rofi -show drun -show-icons
set $browser xdg-open about:blank
set $file_manager nautilus
set $logout wlogout
set $locker swaylock
set $screenshot grim
set $session_menu $scripts_dir/session-menu.shUse swaymsg -t get_outputs to find your display output name.
Sway first applies $background as a solid color. If $wallpaper points to an
existing file, a helper script applies that image on top:
set $wallpaper /path/to/wallpaperHelper scripts support these optional environment variables:
SWAY_CONFIG_DIR default: $XDG_CONFIG_HOME/sway or ~/.config/sway
BRIGHTNESS_DEVICE default: first readable /sys/class/backlight device
BRIGHTNESS_STEP_PERCENT default: 5
TERMINAL default: kitty
NETWORK_TUI default: impala
The optional fontconfig rule in sway/fontconfig/50-web-fonts.conf maps common
web font fallbacks to 0xProto. Install it at
~/.config/fontconfig/conf.d/50-web-fonts.conf and run fc-cache -f.
The installer:
- detects the distribution from
/etc/os-release - optionally installs packages using
dnforapt-get - downloads 0xProto Nerd Font into
~/.local/share/fonts/xsway/0xProto - downloads the latest Linux
impalarelease asset into~/.local/bin/impala - optionally enables
iwd.serviceand disablesNetworkManager.service/wpa_supplicant.service - validates helper scripts referenced by Sway and Waybar
- ensures scripts under
sway/scripts/are executable - writes managed markers so uninstall can identify xsway-owned files
- writes
~/.local/state/xsway/network-services.ymlbefore changing network service state
It does not overwrite an existing Sway config in place.
If ~/.config/sway already exists and is not this repository, the installer
moves it to a timestamped backup before creating the managed copy:
~/.config/sway.backup.YYYYMMDD-HHMMSS
If an older xsway symlink is found, the installer replaces it with a standalone
copy unless --symlink is passed again.
./uninstall.shDo not run the uninstaller with sudo. It needs to manage the current user's
Sway config and saved state.
The uninstaller removes old managed symlinks, unstows Stow-managed installs when
possible, moves managed xsway copies to a timestamped
~/.config/sway.xsway-removed.* path, and moves managed Nerd Font and impala
installs aside. If a backup exists, it offers to restore the latest one.
If the installer changed network services for impala, uninstall offers to restore the saved service states. Restoring network services can disconnect the current session.
- Debian and Ubuntu package names are experimental.
- Font installation requires network access unless you pass
--no-fonts. impalais installed frompythops/impalaGitHub release artifacts and requiresiwd.- By default, the installer prompts before enabling
iwd.serviceand disablingNetworkManager.service/wpa_supplicant.service. Pass--no-network-servicesto skip this. - Machine-specific config values live at the top of
sway/config. - Privacy indicators are PipeWire-oriented. Browser camera capture can vary by
browser and portal setup, so the camera indicator also falls back to checking
active
/dev/video*users.
- tighten Debian/Ubuntu package names after broader testing
- add Ansible syntax checks to CI once the repo has a public workflow
- add release tags and a simple changelog
- consider optional health checks for portals, PipeWire, and fonts
