Skip to content

About

Full Ubuntu 24.04 Sway/Wayland desktop setup — install script, dotfiles, pywal theming, waybar, and system config

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ubuntu-dotfiles

Full desktop configuration for a Sway/Wayland setup on Ubuntu 24.04. Covers apt packages, snaps, Python tools, Iosevka Nerd Fonts, Gruvbox-Material-Dark theming, pywal dynamic colour theming, waybar, kitty, fish, and all system-level config.

Quick Start

git clone https://github.com/dhillon-m/ubuntu-dotfiles.git ~/ubuntu-dotfiles
cd ~/ubuntu-dotfiles
chmod +x install.sh
./install.sh

Flags:

Flag Effect
--skip-repos Skip adding PPAs / external repos
--skip-apt Skip apt package install
--skip-snaps Skip snap installs
--skip-fonts Skip Iosevka Nerd Font download
--dotfiles-only Only link configs, skip all package installs

Hardware-Specific Configuration

After running the installer, edit these files to match your actual hardware. The installer will remind you of each step.

1. Display outputs (~/.config/sway/config)

Find your output names:

swaymsg -t get_outputs

Edit the ── CONFIGURE YOUR DISPLAYS ── section in ~/.config/sway/config. Update:

  • Output names (e.g. DP-1, HDMI-A-2)
  • Positions, scales, transforms
  • Workspace-to-output assignments

2. Wallpaper script (~/.local/bin/setwallpaper)

Edit the MONITORS dict at the top of the script to match your displays. Usage after configuring:

setwallpaper ~/Pictures/wallpapers/something.jpg
# or, for a file already in ~/Pictures/wallpapers/:
setwallpaper something

Splits a single image across all monitors and updates sway config to persist on reload.

3. Lock screen (~/.config/gtklock/style.css)

The CSS uses output names as window selectors (window#DP-3, window#HDMI-A-1). Update these to match your output names. The installer renders this file with your $HOME path substituted.

4. GPU waybar widget (~/.config/waybar/main/scripts/gpu.sh)

If you have an AMD discrete GPU alongside an iGPU, set DISCRETE_PCI to the PCI address of your discrete card:

lspci | grep -i vga
# e.g.: 03:00.0 VGA compatible controller: AMD Radeon RX 6700 XT
# → DISCRETE_PCI="0000:03:00.0"

If you have a single GPU or an Nvidia GPU, the script will need adjustment.


Software Stack

Window manager & desktop

Component Package
Window manager sway
Status bar waybar (config in config/waybar/)
Launcher fuzzel
Notifications mako-notifier
Terminal kitty
Shell fish
Lock screen gtklock
Screenshots grim + slurp + wl-clipboard

Theming

Component Tool
Dynamic colours pywal — generates all colour files from a wallpaper or scheme
GTK theme Gruvbox-Material-Dark (installed to ~/.local/share/themes/)
Icon theme Gruvbox-Material-Dark (from Papirus PPA)
Qt theming qt5ct / qt6ct + Kvantum, theme generated by wal
Font Iosevka Nerd Font (all weights, installed to ~/.local/share/fonts/)
Terminal colours kitty — sourced from ~/.cache/wal/colors-kitty.conf
Waybar colours sourced from ~/.cache/wal/colors-waybar.css
Sway border colours sourced from ~/.cache/wal/colors-sway

pywal workflow

                  wal --theme luna
                        │
              wal/templates/* ──► ~/.cache/wal/
                        │
         ┌──────────────┼──────────────────────┐
         ▼              ▼                       ▼
   colors-kitty    waybar-main.jsonc       colors-sway
   colors-waybar   waybar-secondary.jsonc  fuzzel.ini
   btop.theme      gtklock.css             mako
   kvantum.kvconfig vesktop.css            micro.micro

After wal runs, it executes ~/.config/wal/postscripts/animation.sh, which:

  1. Clears anifetch
  2. Symlinks the matching .gif to ~/.config/wal/animations/current_animation.gif
  3. Applies colours to Vesktop (if walcord is installed)

Reload Sway after changing theme: Mod+Shift+c

Colour schemes live in config/wal/colorschemes/dark/:

  • luna — Gruvbox Material Dark (default)
  • auar — high-contrast yellow-on-black

Applications (manual install required)

App Source
ProtonVPN https://protonvpn.com/support/linux-ubuntu-vpn-setup/
Jackett https://github.com/Jackett/Jackett/releases → extract to /opt/Jackett
qBittorrent https://www.qbittorrent.org/download (AppImage → ~/.local/bin/qbittorrent.AppImage)
Vesktop Installed via apt (in repos after adding key)

Sway Key Bindings

Binding Action
Mod+Return Open kitty
Mod+d Open fuzzel launcher
Mod+Shift+e Power menu
Mod+Shift+q Kill window
Mod+Shift+c Reload sway config
Mod+Tab Window picker (fuzzel)
Print Screenshot region → clipboard
Mod+Print Screenshot region → ~/Pictures/screenshot-*.png
Mod+h/j/k/l Focus left/down/up/right
Mod+Shift+h/j/k/l Move window
Mod+1–0 Switch workspace
Mod+Shift+1–0 Move window to workspace
Mod+f Fullscreen
Mod+r Resize mode
Mod+Shift+space Toggle floating
Mod+b/v Split horizontal/vertical
Mod+Shift+minus Send to scratchpad
Mod+minus Show scratchpad

Odd workspaces (1,3,5,7,9) → primary monitor. Even (2,4,6,8,10) → secondary. Workspace icons use planetary symbols: ☿♀♁☾♂♃♄♅♆♇

Waybar click actions

Widget Click Right-click
CPU btop preset 1 (CPU view) —
GPU btop preset 2 (GPU view) —
Memory btop preset 3 (memory view) —
Network Toggle WiFi WiFi network picker
VPN Toggle ProtonVPN Country picker
Volume Mute toggle pavucontrol

Repo Structure

ubuntu-dotfiles/
├── install.sh                   # Main installer
├── config/
│   ├── sway/                    # Sway WM config + power-menu.sh
│   ├── kitty/                   # kitty.conf (fonts, padding, keymaps)
│   ├── fish/                    # config.fish + fish_variables
│   ├── fuzzel/                  # fuzzel.ini (wal-themed, no icons)
│   ├── mako/                    # mako notification config
│   ├── waybar/
│   │   ├── main/style.css       # Bar styling (imports wal colours)
│   │   ├── main/scripts/        # Custom shell modules (cpu, gpu, mem, net, vpn…)
│   │   └── secondary/style.css  # Same CSS for secondary monitor bar
│   ├── gtk-3.0/settings.ini
│   ├── gtk-4.0/settings.ini
│   ├── gtklock/                 # Lock screen config + style (HOME_PLACEHOLDER)
│   ├── micro/                   # micro editor config
│   ├── btop/                    # btop.conf (gruvbox theme, block graphs)
│   ├── qt5ct/                   # Qt5 theming
│   ├── Kvantum/                 # Kvantum theme pointer (wal generates the theme)
│   └── wal/
│       ├── templates/           # pywal templates → ~/.cache/wal/
│       ├── colorschemes/dark/   # luna.json (Gruvbox) + auar.json
│       └── postscripts/         # animation.sh (runs after wal applies a theme)
├── local/bin/
│   └── setwallpaper             # Splits wallpaper across multi-monitor setup
└── etc/
    ├── keyd/default.conf        # Middle-click → Shift remap
    ├── udev/hwdb.d/             # Mouse button remap via hwdb
    ├── udev/rules.d/            # ddcutil i2c access
    ├── modprobe.d/              # bluetooth: disable_ertm
    └── systemd/system/          # jackett.service

About

Full Ubuntu 24.04 Sway/Wayland desktop setup — install script, dotfiles, pywal theming, waybar, and system config

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages