Skip to content

big-comm/layout-switcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Community Layout Switcher

A GTK4 + libadwaita application for switching GNOME desktop layouts, managing shell extensions, fonts, visual effects, and themes.

License Platform Python GTK Libadwaita GNOME Tests i18n


Overview

Community Layout Switcher is the appearance-management tool for BigCommunity Linux. It lets users reshape the GNOME desktop — panels, docks, extensions, fonts and themes — without editing dconf or logging out, while staying compatible with the distribution's comm-gnome-config sync services.

Features

  • Layouts — Apply curated desktop layouts (BigGnome, Desk UX, Hybrid, G-Unity, Classic, Minimal) with one click. Automatic pre-apply backup; per-layout user snapshots with a Plasma-style Resume your changes or Apply original prompt when revisiting a customized layout.
  • Community Menu — Bundled GNOME Shell 50 menu used independently from ArcMenu: application list in Classic, application grid in Desk UX, and Mint-style categories in Hybrid.
  • Fonts — Interface / document / monospace / legacy title selectors via Gtk.FontDialog, plus hinting and antialiasing controls, a searchable list of installed families with live previews, and quick access to Google Fonts.
  • Themes — GTK, icon and shell themes with real previews (actual folder icon from each icon theme; accent color parsed from each theme's CSS), search filter and one-click apply.
  • Effects — Dedicated page for visual extensions (Desktop Cube, Magic Lamp, Compiz Windows, Desktop Icons NG). Installs prefer pacman for stability and fall back to extensions.gnome.org.
  • Extensions — Three sub-tabs:
    • Featured — curated set with one-click install/toggle/remove.
    • Browse — full search of extensions.gnome.org inside the app, with sort, compatibility filter, screenshots carousel, recent comments and direct install.
    • Installed — every installed extension with toggle, remove, Update badge and Update all button when new versions are available. Optional auto-update is opt-in in the main menu.
  • Backups — Every apply creates a timestamped dconf dump. A dedicated dialog lists all backups with restore/delete and a manual-snapshot button.
  • Sync-aware — Cooperates with the dconf-sync-gnome.service from comm-gnome-config: the monitor is paused around each apply, user extensions are suspended to avoid transient error states, and the final state is persisted atomically to ~/.config/dconf/settings.gnome.

Screenshots

Screenshots go in docs/screenshots/ and are referenced here.

Requirements

  • GNOME Shell 45+
  • Python 3.10+
  • PyGObject bindings for GTK 4 and libadwaita 1
  • dconf, gsettings, gnome-extensions (standard on GNOME systems)

Installation

Arch Linux / BigCommunity

sudo pacman -S layout-switcher

Build from source (Arch)

git clone https://github.com/big-comm/layout-switcher.git
cd layout-switcher/pkgbuild
makepkg -si

Manual install (any distro with GTK 4 + libadwaita)

git clone https://github.com/big-comm/layout-switcher.git
cd layout-switcher
sudo cp -r usr/ /

Usage

Launch from the application grid or run layout-switcher from a terminal. The sidebar exposes the five sections:

Layouts   Fonts   Themes   Effects   Extensions

The hamburger menu gives access to Backups… (restore or snapshot the dconf state) and About.

Development

# run from the checkout without installing
python usr/share/layout-switcher/main.py

# lint + format
ruff check .
ruff format .

# tests (235 unit tests, no display required)
python -m pytest tests/ -q

Project layout

usr/share/layout-switcher/
├── main.py                          # Adw.Application entry point
├── constants.py                     # APP_ID, LAYOUTS, i18n setup
├── utils.py                         # subprocess + gsettings helpers
├── backup_manager.py                # timestamped dconf dumps
├── snapshot_manager.py              # per-layout user snapshots
├── layout_applier.py                # atomic apply orchestration
├── extension_manager.py             # install / toggle / remove / update
├── shell_reloader.py                # D-Bus cascade reload (no logout)
├── ego_client.py                    # extensions.gnome.org HTTP client
├── ego_cache.py                     # disk cache (JSON TTL + thumbs LRU)
├── update_checker.py                # detect & apply EGO updates
├── theme_manager.py                 # GTK / icons / shell theme apply
├── theme_preview.py                 # folder icon + CSS color extraction
├── settings_store.py                # JSON settings + GSettings watcher
└── ui/
    ├── window.py                    # main window, sidebar, menu
    ├── page_layouts.py              # layout grid with Resume/Original
    ├── page_fonts.py                # font selectors + installed list
    ├── page_themes.py               # GTK / icons / shell with previews
    ├── page_effects.py              # featured visual extensions
    ├── page_extensions.py           # Featured / Browse / Installed
    ├── ext_browse_view.py           # paginated EGO search + cards
    ├── ext_detail_view.py           # carousel + comments + actions
    ├── dialog_backups.py            # backup management dialog
    ├── widgets.py                   # shared custom widgets
    └── styles.py                    # APP_CSS

usr/share/locale/                    # .po sources + compiled .mo (28 languages)
tests/                               # pytest unit tests
pkgbuild/                            # Arch PKGBUILD

Translations

User-facing strings are wrapped with tr() and extracted to usr/share/locale/layout-switcher.pot. The catalog is compiled to .mo files for 29 languages:

bg · cs · da · de · el · en · es · et · fi · fr · he · hr · hu · is · it · ja · ko · nl · no · pl · pt · pt_BR · ro · ru · sk · sv · tr · uk · zh

Add or update a translation

# 1. Regenerate the POT from source
find usr/share/layout-switcher -name '*.py' | xargs xgettext \
    --keyword=tr --language=Python --from-code=UTF-8 \
    --output=usr/share/locale/layout-switcher.pot \
    --package-name=layout-switcher

# 2. Create/merge a language catalog
msgmerge --update usr/share/locale/<lang>.po usr/share/locale/layout-switcher.pot

# 3. Translate the msgstr entries, then compile
msgfmt -o usr/share/locale/<lang>/LC_MESSAGES/layout-switcher.mo \
          usr/share/locale/<lang>.po

License

The layout switcher is MIT. The bundled Community Menu is a modified GPL-2.0-or-later derivative; see its COPYING and UPSTREAM.md files.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors