๐ dotfiles โ sway ยท waybar ยท catppuccin
A complete, keyboard-driven Wayland desktop in one command.
Sway ยท Waybar ยท Wofi ยท Foot ยท Kitty ยท Mako ยท Swaylock ยท Swayidle ยท Wlogout ยท Gammastep ยท Swappy
โจ Features
| ๐จ One theme everywhere | Catppuccin Mocha across sway, waybar, wofi, terminals, notifications and the lock screen |
| ๐งฉ Modular sway config | Split into config.d/ files: appearance, input, outputs, keys, modes, rules, autostart |
| ๐ Rich Waybar | Floating pill bar: workspaces, media player, calendar clock, weather, CPU/RAM/temp/disk drawer, volume, brightness, network, bluetooth, battery, update counter, caffeine, night light, Do Not Disturb, tray, power |
| โจ๏ธ Built-in cheat sheet | Super + / shows every keybinding in a searchable list, generated from the config |
| ๐ธ Screenshots | Area / screen / window, copied to the clipboard and saved, with an "Open" button and swappy annotation |
| ๐ Clipboard history | Super + Shift + V, text and images (cliphist) |
| ๐ Emoji & symbol picker | Super + .: ~1900 emoji, arrows, math and Greek, copied and typed for you |
| ๐ฏ Colour picker | Super + Shift + P, click any pixel โ hex in clipboard |
| ๐ Volume & brightness OSD | Notification pop-ups with a progress bar that replace each other instead of stacking |
| ๐ Night light | Gammastep / wlsunset toggle with a bar indicator |
| ๐ Do Not Disturb | Hides everything except critical notifications |
| ๐ผ Wallpaper switcher | Random or pick from a menu, remembered across reboots (2 themed wallpapers included) |
| ๐ค Smart idle | Dim โ lock โ screens off, never while a video is fullscreen |
| โฌ๏ธ Drop-down terminal | Super + ` Quake-style terminal |
| ๐ก Safe installer | Backs up your old configs, dry-run mode, one-command uninstall that restores them |
๐ฆ Install
Quick start
git clone https://github.com/<you>/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh --all
That installs the packages, the Nerd Font, and links every config into ~/.config.
Then log out, choose "Sway" on the login screen, and log in.
๐ก Not sure? Run
./install.sh --all --dry-runfirst. It prints every step without changing anything.
Step by step
1. Clone the repo anywhere you like (the configs are symlinked, so keep the folder):
git clone https://github.com/<you>/dotfiles.git ~/dotfiles && cd ~/dotfiles
2. Install the programs. The installer detects your package manager:
./install.sh --packages
Or install them by hand
Ubuntu / Debian
sudo apt install $(grep -vE '^\s*(#|$)' packages/apt.txt)
Arch
sudo pacman -S --needed $(grep -vE '^\s*(#|$)' packages/pacman.txt)
# wlogout is in the AUR: yay -S wlogout
Fedora
sudo dnf install --skip-unavailable $(grep -vE '^\s*(#|$)' packages/dnf.txt)
3. Install the icon font (JetBrainsMono Nerd Font, downloaded into ~/.local/share/fonts):
./install.sh --fonts
4. Link the configs. Anything already in ~/.config/<app> is moved to
~/.local/state/dotfiles/backups/<date>/ first:
./install.sh # all apps
./install.sh waybar mako # or only some
5. Check that nothing is missing:
./install.sh --check
6. Start sway
-
From a login screen (GDM, SDDM, โฆ): log out, click the gear / session menu, pick Sway.
-
From a TTY: log in and run
sway. To start it automatically on TTY1, add this to~/.profile(or~/.zprofile):if [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then exec sway fi
Installer options
./install.sh [options] [module ...]
-a, --all Full setup: packages + fonts + symlinks
-p, --packages Install dependencies (apt, pacman or dnf)
-f, --fonts Download JetBrainsMono Nerd Font
-l, --link Symlink configs into ~/.config (default)
-c, --check Show which required programs are missing
-u, --uninstall Remove the symlinks and restore your latest backup
-n, --dry-run Print what would happen, change nothing
-y, --yes Don't ask for confirmation
Prefer make? make help lists the same actions (make all, make link, make check, make lint, make reload, make uninstall).
Updating
Because everything is symlinked, updating is just:
cd ~/dotfiles && git pull && make reload
Uninstall
./install.sh --uninstall
Removes the symlinks and puts your previous configs back from the latest backup.
โจ๏ธ Keybindings
Super is the Windows key. Press Super + / at any time for the full searchable list.
Essentials
| Keys | Action |
|---|---|
Super + Enter |
Terminal (foot) |
Super + Shift + Enter |
Terminal (kitty) |
Super + D |
App launcher |
Super + Shift + D |
Run a command |
Super + Q |
Close window |
Super + / |
Keybinding cheat sheet |
Super + Escape |
Lock screen |
Super + Shift + E |
Power menu |
Super + Shift + X |
System mode: lock, exit, suspend, reboot, poweroff |
Super + Shift + C |
Reload sway |
Super + B / Super + E |
Browser / file manager |
Windows & layout
| Keys | Action |
|---|---|
Super + H J K L / arrows |
Move focus |
Super + Shift + H J K L / arrows |
Move window |
Super + 1 โฆ 0 |
Go to workspace 1โ10 |
Super + Shift + 1 โฆ 0 |
Send window to workspace |
Super + Tab |
Previous workspace |
Super + Alt + โ / โ |
Previous / next workspace |
Super + F |
Fullscreen |
Super + Shift + Space |
Toggle floating |
Super + Space |
Switch focus between tiling and floating |
Super + Shift + S |
Sticky (show on every workspace) |
Super + ; / Super + V |
Split horizontal / vertical |
Super + S / Super + T / Super + O |
Stacking / tabbed / toggle split |
Super + A |
Focus parent |
Super + R |
Resize mode (hjkl, Shift for big steps, Esc to exit) |
Super + G |
Toggle gaps |
Super + - / Super + Shift + - |
Show / send to scratchpad |
Super + ` |
Drop-down terminal |
Super + F12 |
Passthrough mode (all keys go to the app, for VMs) |
Super + drag |
Move floating window (right-drag resizes) |
Tools
| Keys | Action |
|---|---|
Print |
Screenshot an area |
Shift + Print |
Screenshot the screen |
Super + Print |
Screenshot the focused window |
Super + Shift + Print |
Screenshot an area and annotate it |
Super + Shift + V |
Clipboard history |
Super + . |
Emoji & symbol picker |
Super + Shift + P |
Colour picker |
Super + W / Super + Shift + W |
Pick / random wallpaper |
Super + Shift + T |
Toggle night light |
Super + N |
Toggle Do Not Disturb |
Super + Shift + N / Super + Alt + N |
Dismiss all / restore last notification |
Super + Shift + B |
Hide / show waybar |
| Media keys | Volume, mic, brightness, play/pause, next/prev (work on the lock screen) |
Super + F1 / F2 / F3 |
Mute / volume down / up (keyboards without media keys) |
Super + P |
Play / pause |
๐ Waybar
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ launcher workspaces โถ media โ clock โ weather cpuโธ vol light net bt bat โ
โ โ โ updates caffeine night dnd tray powerโ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
| Module | Click | Right-click | Scroll |
|---|---|---|---|
| Launcher | App launcher | Cheat sheet | |
| Workspaces | Switch | Cycle | |
| Media | Play / pause | Next / previous | |
| Clock | Show full date | Year / month calendar | Change month |
| Weather | Open wttr.in | ||
| CPU (hover to expand RAM, temp, disk) | Open btop | ||
| Volume | Mute | Pavucontrol | Volume ยฑ5 (middle-click: mic) |
| Brightness | Brightness ยฑ5 | ||
| Network | nmtui | Connection editor | |
| Bluetooth | Blueman | ||
| Updates | Upgrade in a terminal | ||
| Eye icon | Caffeine (no screen lock) | ||
| Moon / sun | Night light | ||
| Bell | Do Not Disturb | Restore last notification | |
| Power | Power menu | wlogout |
๐ Structure
dotfiles/
โโโ install.sh # installer (packages, fonts, links, backup, uninstall)
โโโ Makefile # make all / link / check / lint / reload / uninstall
โโโ packages/ # package lists: apt.txt, pacman.txt, dnf.txt
โโโ wallpapers/ # default wallpapers (Catppuccin)
โโโ config/ # each folder โ ~/.config/<folder>
โโโ sway/
โ โโโ config # variables + colour palette
โ โโโ config.d/
โ โ โโโ 10-appearance.conf
โ โ โโโ 20-input.conf # keyboard layout, touchpad
โ โ โโโ 30-output.conf # monitors
โ โ โโโ 40-keybindings.conf
โ โ โโโ 50-modes.conf # resize, passthrough, system
โ โ โโโ 60-rules.conf # floating windows, PiP, idle inhibit
โ โ โโโ 70-bar.conf
โ โ โโโ 80-autostart.conf
โ โโโ scripts/ # volume, brightness, screenshot, powermenu,
โ # clipboard, emoji, colorpicker, keybinds,
โ # wallpaper, nightlight, dnd, idle, dropterm โฆ
โโโ waybar/ # config.jsonc, style.css, scripts/ (weather, updates)
โโโ wofi/ # launcher + dmenu theme
โโโ foot/ kitty/ # terminals
โโโ mako/ # notifications (+ Do Not Disturb mode)
โโโ swaylock/ # lock screen
โโโ wlogout/ # graphical power menu
โโโ gammastep/ # night light
โโโ swappy/ # screenshot annotation
๐ Customising
Machine-specific settings go in config/sway/config.d/99-local.conf. It's git-ignored and loaded last, so it overrides everything:
# 99-local.conf
output eDP-1 scale 1.25
output HDMI-A-1 position 1920,0
input type:keyboard xkb_layout us,de
set $browser chromium
| What | Where |
|---|---|
| Monitors, scaling, positions | sway/config.d/30-output.conf (list them with swaymsg -t get_outputs, or use wdisplays) |
| Keyboard layout, CapsโEsc, touchpad | sway/config.d/20-input.conf |
| Default apps (terminal, browser, files) | variables at the top of sway/config |
| Colours | palette in sway/config, waybar/style.css, wofi/style.css (same names everywhere) |
| Gaps & borders | sway/config.d/10-appearance.conf |
| Lock / screen-off timers | sway/scripts/idle.sh (LOCK, SCREEN, SUSPEND) |
| Weather city & units | set WEATHER_LOCATION="Berlin" and WEATHER_UNITS=u (US) or m (metric) in ~/.config/environment.d/weather.conf |
| Night-light location & warmth | gammastep/config.ini (set your own lat / lon) |
| Wallpapers | drop images in ~/Pictures/Wallpapers, then Super + W |
| Screenshot folder | SCREENSHOT_DIR env var (default ~/Pictures/Screenshots) |
| Extra emoji / symbols | add lines to sway/scripts/emoji.txt |
| Waybar modules | waybar/config.jsonc (icons are \uXXXX escapes, find more at nerdfonts.com/cheat-sheet) |
| New keybinding in the cheat sheet | put a #: description line right above the bindsym |
After editing: Super + Shift + C reloads sway (waybar and mako reload with it). make lint checks the sway config for errors.
๐ฉบ Troubleshooting
Icons show as boxes in waybar
The Nerd Font isn't installed. Run ./install.sh --fonts, then fc-cache -f and restart waybar (Super + Shift + C).
Screen sharing doesn't work (Zoom, Meet, OBSโฆ)
Install xdg-desktop-portal-wlr and make sure 80-autostart.conf runs dbus-update-activation-environment. Log out and back in. In Firefox, check that widget.use-xdg-desktop-portal is enabled.
Volume / brightness keys do nothing
- Volume needs PipeWire (
wpctl) orpamixer. - Brightness needs
brightnessctland your user in thevideogroup:sudo usermod -aG video $USER, then log out and in. - Run the script by hand to see errors:
~/.config/sway/scripts/volume.sh up
Wrong temperature sensor
List sensors with ls /sys/class/hwmon/*/temp*_input and set hwmon-path in the temperature block of waybar/config.jsonc.
NVIDIA
Start sway with sway --unsupported-gpu. On GDM, edit /usr/share/wayland-sessions/sway.desktop and change Exec=sway to Exec=sway --unsupported-gpu.
Sway won't start / black screen
From a TTY run sway -d 2> ~/sway.log and look for [ERROR] lines. Check the config with sway -C.
Weather shows nothing
wttr.in may be rate-limiting you or be offline. The module keeps the last good result in ~/.cache/waybar-weather.json. Test with ~/.config/waybar/scripts/weather.sh.
๐ Credits
- Colours: Catppuccin (MIT)
- Sway ยท Waybar ยท Nerd Fonts ยท wttr.in
Feel free to fork, copy and adapt anything here.