My Qtile build with a couple scratchpads. Built mainly for X11.
  • Python 58.8%
  • Shell 41.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Drew 70da014609 Add gvfs-fuse so non-GIO apps can open files on GVfs mounts
gvfs-backends lets Thunar mount and browse smb:// shares, but without
the FUSE bridge at /run/user/<uid>/gvfs, non-GIO apps (mpv, editors,
etc.) silently fail to open files on those shares.

Reported in butterknife#12.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 17:16:37 -04:00
qtile modifying theme.conf for kitty usage 2026-07-11 13:50:49 -04:00
screenshots update readme image 2025-10-01 01:51:04 -04:00
.gitignore updating suggested .gitignore 2025-09-30 13:50:42 -04:00
CHANGELOG.md update new codeberg project 2025-10-01 01:47:53 -04:00
CONTRIBUTING.md update stale codeberg references 2026-07-26 21:30:33 -04:00
install.sh Add gvfs-fuse so non-GIO apps can open files on GVfs mounts 2026-08-03 17:16:37 -04:00
LICENSE Add GPL-2.0 license 2026-02-01 18:00:07 -05:00
QUICKSTART.md Point all URLs at Butterforge (justaguy.dev) — repos, raw script fetches, apt endpoint, wikis, issues, badges 2026-07-26 21:11:21 +00:00
README.md update stale codeberg references 2026-07-26 21:30:33 -04:00

🐍 qtile-setup

Made for Debian Qtile

Qtile Desktop

A complete Qtile setup script for Debian-based systems. Features dynamic tiling layouts, powerful keybindings, a unified theme switcher, and a polished desktop experience — ready to roll out of the box.

Part of the JustAGuy Linux window manager collection — installable standalone or via butterknife, the installer for Butterbian.

📦 System Requirements

  • Debian 12 (Bookworm) - Uses pipx installation method
  • Debian 13 (Trixie) - Uses native qtile package from repository
  • Ubuntu and other Debian-based systems - Uses pipx installation method

The installer automatically detects your system version and chooses the appropriate installation method.

Installation Method

The installer automatically chooses the best method based on your system:

  • Uses the native qtile package from Debian repositories (v0.31.0)
  • Simple and clean: sudo apt install qtile python3-psutil
  • Stable and tested - Debian's rigorous testing ensures reliability
  • All dependencies handled automatically by the package manager
  • Integrates seamlessly with the system
  • Better system integration than pipx installation
  • Note: python3-psutil is required for CPU and memory monitoring widgets in the qtile bar

Debian 12 (Bookworm) and older

  • Uses pipx to install Qtile 0.31.0 in an isolated environment
  • Why pipx?
    • Qtile is not available in Debian 12 repositories
    • Provides access to qtile when system packages aren't available
    • Isolated environment prevents Python package conflicts
  • Version Note: Installs Qtile 0.31.0 specifically as version 0.33+ has compatibility issues with Debian 12

Manual Installation Options

If you prefer to handle Qtile installation yourself:

# Debian 13+ (recommended - stable and well-tested)
sudo apt install qtile python3-psutil

# Debian 12 or if system package unavailable (use version 0.31.0)
pipx install qtile==0.31.0 && pipx inject qtile psutil

# Then run the installer with config-only mode
./install.sh --only-config

🚀 Quick Start

git clone https://justaguy.dev/drew/qtile-setup.git
cd qtile-setup
chmod +x install.sh
./install.sh

⚠️ XLibre users: This script installs xorg as part of its core packages, which will replace XLibre if you've installed it. Remove xorg from PACKAGES_CORE in install.sh before running, or use --only-config to skip package installation entirely.

Installation Options

./install.sh [OPTIONS]

Options:
  --only-config       Only copy config files (skip packages and external tools)
  --help              Show usage information

Advanced Usage Examples

# Update only configuration files (skip all package/tool installations)
./install.sh --only-config

📦 What It Installs

Core Components

Component Purpose
qtile Dynamic tiling window manager
python3-psutil System monitoring for qtile bar
rofi App launcher + power menu
dunst Lightweight notifications
picom (yshui) Compositor with transparency
thunar File manager (+plugins)
kitty Terminal emulator
firefox-esr Default web browser
flameshot Screenshot tool
pamixer Audio control
feh Wallpaper manager
xsettingsd Live GTK theme updates
xfce4-power-manager Power management
network-manager-gnome Network management
micro Terminal text editor
qimgv Lightweight image viewer
exa/eza Modern ls replacement

Themes & Fonts

Component Purpose
Orchis Theme GTK theme (all dark variants + Nord + Dracula)
Colloid Icons Icon theme (all color schemes)
Nerd Fonts Patched fonts with icons

🎨 Theme Switcher

Press Super + Shift + T to open the theme picker. Select a theme and your entire desktop switches instantly — qtile bar, wallpaper, notifications, launcher, terminal, GTK apps, and icons.

Available Themes (12)

Catppuccin, Doom One, Dracula, Everforest, GitHub Dark, Gruvbox, Gruvbox Dark, Kanagawa, Monokai, Moonfly, Nord, Retro

What Gets Switched

Component Method Live Refresh
Qtile (bar, borders) Swaps color function in config.py, restarts qtile Yes
Wallpaper feh sets immediately, updates autostart.sh Yes
Dunst (notifications) Copies themed config, restarts dunst Yes
Rofi (launcher/menus) Copies themed .rasi files Next launch
Kitty (terminal) Applies theme via kitty +kitten themes, reloads all windows Yes
GTK theme + icons Updates settings.ini, restarts xsettingsd Yes

Each theme has pre-generated template configs for dunst and rofi in themes/<name>/. Kitty uses its bundled iTerm2/Gogh color scheme collection. GTK live refresh is handled by xsettingsd.

See the Themes wiki page for full details on how the switcher works, the file structure, and how to add new themes.

💡 Special thanks to vinceliuice for the excellent GTK and icon themes.


🔑 Keybindings

Press Super + / to open the keybinding cheat sheet in rofi, grouped by category.

Launch

Shortcut Action
Super + Enter Launch terminal (kitty)
Super + Space Launch Rofi
Super + / Show keybindings
Super + B Launch browser
Super + Shift + B Launch Firefox (Private)
Super + F Launch file manager
Super + E Launch text editor
Super + D Launch Discord
Super + G Launch GIMP
Super + O Launch OBS
Print / Super + S Screenshot (full screen)
Super + Print / Super + Shift + S Screenshot (region select)

Navigation

Shortcut Action
Super + Arrow Keys Move focus directionally
Super + J/K Focus next/previous window
Alt + Tab Cycle windows
Super + Shift + Arrow Keys Move window directionally
Super + Shift + J/K Move window up-left/down-right
Super + Ctrl + Arrow Keys Resize window directionally
Super + 19,0,-,= Switch to workspace (1-12)
Super + Shift + 19,0,-,= Move window to workspace

Layout & Theming

Shortcut Action
Super + Tab Cycle through layouts
Super + Shift + L Layout menu
Super + Shift + T Theme switcher
Super + T Toggle split direction in BSP
Super + Shift + Space Toggle floating (centered 75%)
Super + Shift + Z Reset all window sizes

Window Management

Shortcut Action
Super + Q Close focused window
Super + Shift + R Restart Qtile
Super + Shift + Q Exit Qtile
Super + X Power menu

Media

Shortcut Action
Super + F12 Volume up
Super + F11 Volume down
Super + F10 Mute/Unmute
Super + V Toggle volume scratchpad

🖥️ Layouts

Cycle layouts with Super + Tab or pick one from the layout menu with Super + Shift + L.

  • MonadTall — Classic master-stack
  • BSP — Binary space partitioning
  • Columns — Dynamic column layout (3 columns)
  • Max — Fullscreen stacked windows
  • Floating — Free window placement
  • Zoomy — Zoom-focused layout

📂 Configuration Files

~/.config/qtile/
├── config.py                    # Main Qtile configuration
├── colors.py                    # Color scheme definitions (12 themes)
├── themes/                      # Pre-generated theme templates
│   ├── github_dark/
│   │   ├── dunstrc              # Dunst notification config
│   │   ├── config.rasi          # Rofi app launcher theme
│   │   ├── power.rasi           # Rofi power menu theme
│   │   └── keybinds.rasi        # Rofi keybinds display theme
│   ├── dracula/
│   │   └── ...
│   └── .../                     # (12 theme directories total)
├── dunst/dunstrc                # Active dunst config (swapped on theme switch)
├── rofi/
│   ├── config.rasi              # Active rofi config (swapped on theme switch)
│   ├── power.rasi               # Active power menu config
│   └── keybinds.rasi            # Active keybinds display config
├── picom/picom.conf             # Compositor configuration
├── wallpaper/                   # Wallpaper collection (one per theme)
└── scripts/
    ├── autostart.sh             # Startup: polkit, feh, picom, dunst, xsettingsd
    ├── thememenu                # Theme switcher script
    ├── help                     # Keybind cheat sheet (auto-parsed from config.py)
    ├── power                    # Rofi power menu
    ├── layoutmenu               # Rofi layout switcher
    └── changevolume             # Volume control with notifications

External configs modified by theme switcher:

~/.config/kitty/current-theme.conf  # written by the theme kitten
~/.config/gtk-3.0/settings.ini   # gtk-theme-name, gtk-icon-theme-name
~/.xsettingsd                    # Live GTK theme broadcasting

🔍 HiDPI / 4K Displays

Tiny type on a 4K screen? There's no single scaling knob — each toolkit (X fonts, GTK, Qt, the cursor) has to be told separately. Because qtile launches apps itself, the HiDPI block lives in ~/.config/qtile/config.py (commented, near the top), not in autostart.sh; uncomment it and restart qtile. Full walkthrough — 200% vs 150%, GTK/Qt/cursor, the bar — on the Troubleshooting wiki page under HiDPI / 4K displays.


🪟 Qtile Features

  • Python Configuration: Full Python programming in your config — write functions, use conditionals, import modules
  • 12 Color Themes: Switch your entire desktop with one keybinding via the unified theme switcher
  • Context-Aware Functions: Smart resize/focus that adapts behavior based on current layout (BSP, Columns, MonadTall, Floating)
  • Dynamic Layouts: 6 tiling algorithms with easy switching
  • Waybar-Style Status Bar: 34px height with colored icons, centered clock, system monitoring
  • Toggleable Clock: Click to switch between time and date display
  • Smart Borders: Themed focused borders, 4px width, 10px gaps
  • System Tray: Integrated system tray in the status bar
  • Workspace Management: 12 workspaces with intuitive navigation and window rules
  • Auto-floating: Certain windows automatically float (dialogs, pavucontrol, etc.)
  • Scratchpad Dropdowns: Terminal and volume mixer dropdowns
  • Notifications: Desktop notifications via dunst with volume/layout/theme feedback
  • Self-Parsing Help: Keybinding cheat sheet auto-generated from config.py, grouped by category

License

GPL-2.0 - See LICENSE for details.

Support

Buy me a coffee

Connect


Made with butter by JustAGuyLinux