Unix3r

Build. Break. Learn. Repeat.

Starting0%
Skip to content

unix3r/dotfiles

Public
main
Clone
README.md

๐ŸŒ™ dotfiles โ€” sway ยท waybar ยท catppuccin

A complete, keyboard-driven Wayland desktop in one command.

Sway ยท Waybar ยท Wofi ยท Foot ยท Kitty ยท Mako ยท Swaylock ยท Swayidle ยท Wlogout ยท Gammastep ยท Swappy

sway waybar theme distros


โœจ 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-run first. 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) or pamixer.
  • Brightness needs brightnessctl and your user in the video group: 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

Feel free to fork, copy and adapt anything here.