Marble shell theme: a generated GNOME theme with a Python installer
Shell theme for GNOME DE
At a glance
- What is it?
- Marble shell theme is a shell theme for the GNOME desktop whose colours are generated by a Python script rather than hand-picked, so the same installer can produce red, yellow, green, blue, purple or a custom hue, and can also theme the GDM login screen. The requirements are narrow, GNOME 42 to 50 with the User Themes extension, and the installer writes files into your shell theme directory.
- Who is it for?
- Marble shell theme fits a GNOME user on version 42 to 50 who wants a coordinated shell and quick settings look with a specific accent colour, and who is comfortable running a Python script that writes into the shell theme directory. It does not fit a user on a GNOME version outside that range, and it does not fit anyone who needs the login screen themed without also accepting the extra dependencies and the restart of the display manager.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 89 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A theme whose colours are generated, not chosen
Marble shell theme is a shell theme for the GNOME desktop environment, and the interesting part of the design is that the palette is produced rather than authored. The available colours are listed as red, yellow, green, blue and purple, or a different hue, and the project ships a Python script that generates the theme files for whichever variant you ask for. The theme is based on a design published on pling.com, and the screenshots in the repository show the shell in light and dark mode with the Blur My Shell extension, the panel, quick settings, a modal dialog, the calendar and notification area, and the Dash with Dash to Dock.
The repository layout matches that model. There is install.py at the root, which is the generator and installer, a theme/ directory holding the theme resources, a colors.json file that holds the palette definitions, a tweaks/ directory for the optional adjustments, scripts/, tests/ and a readme-images/ directory with the screenshots. The primary language is listed as Python, the licence is GPL-3.0, the default branch is main, and the last push to the repository was on 2026-07-26, with the most recent release being 50.0.0 on the same date and 48.3.2 from 2025-07-07 before it. The version numbers track the GNOME versions the theme supports, which is a reasonable convention for something in this space.
The requirements are a version range, an extension and Python
The requirements section is short and the first entry is the one that decides whether the theme applies to you at all: GNOME 42 to 50, and the README says correct functionality on other versions is not guaranteed. That is a real constraint rather than a formality, because a shell theme touches the internal widget styles of the shell, and those change between GNOME releases.
The second requirement is the User Themes extension, which is what allows a shell theme to be applied at all, and it is listed as a separate requirement rather than an optional extra. The third is Python 3.10 or higher, which is the interpreter the install script runs under.
There is also an important precondition that is easy to miss. The README asks you to remove any other theme installed globally, specifically one that changes the appearance of the login window, before installing this theme. The reasoning is straightforward: two global themes both writing shell assets will fight, and the result is a broken desktop rather than a mismatched one. The GDM section covers the login window separately, and there the README is explicit that it is not responsible for any damage caused by the installation of the theme, and asks that problems be opened as issues.
Installing the shell theme
The installation is a clone and a script run, with a step in between that matters.
git clone https://github.com/imarkoff/Marble-shell-theme.git
cd Marble-shell-themeThen the program is run with the -a flag, which the README describes as installing all accent colors in light and dark mode.
python install.py -aA stronger accent colour in active buttons is a separate flag, and the example for it is the same command with --filled added.
python install.py -a --filledAfter a successful file creation, the README says to open the Extensions app, go to User Themes and its Settings, and select the shell theme you want. That final step is worth stating plainly, because the script generates the files and the extension is what applies them. The theme is then applied from a settings panel rather than by any other mechanism.
For updates, the README suggests running git pull in the Marble-shell-theme directory and running the program again, and notes that if the Marble theme is used, updates will be applied automatically.
One colour, several colours, or a hue you pick
The tweak table is where the generator's options are documented. The first group is the install target: -a or --all installs all available colors, and then --red, --yellow, --green, --blue, --purple and --gray each install one theme only. The README also shows that several can be combined in a single command.
python install.py --red --green --blueA second group generates a custom theme. The --hue option takes a value from 0 to 360 and generates the theme from that hue prompt, and --name takes a NAME for a custom theme name. A third group controls the look of the result: --filled makes the accent color stronger, and -O or --opaque makes the background color opaque, since by default it is translucent.
There is also a documented escape hatch for anyone who wants to change the palette rather than pick from it. The README says that if you do not like these colors, you can change them in the colors.json file, after the elements. The file is in the repository root, so the palette is a set of values in a JSON document rather than a compiled-in table, and the theme names are generated from those values.
The README also points to Chromaflow as a way to pull an accent color from a wallpaper, which is a reasonable way to make the generated theme match the rest of a desktop.
The GDM login screen is a separate job with separate dependencies
Theming the login screen is a different operation from theming the shell, and the README treats it as such. The GDM command is given as a configuration line with the colour, the filled option, an image path and blur and darken values.
sudo python install.py --gdm --gray --gdm-image /path/to/image.jpg --gdm-blur=40 --gdm-darken=30A simpler form installs a solid colour instead of an image.
sudo python install.py --gdm --blue --filledThe additional requirements for this path are glib2-devel, which is libglib2.0-dev on Debian-based distributions, and imagemagick if you want to apply filters to the background image. After a successful run the GDM service is restarted.
sudo systemctl restart gdmRemoval has its own command, and the README notes it is also the fix for a broken theme.
sudo python install.py --gdm -rThe failure mode it warns about is a death screen, and the recovery path is given: switch to the console with the Ctrl + Alt + F3 key combination, log in, go to the Marble-shell-theme directory and run the removal command, and if that does not help, try reinstalling the gnome-shell package.
Where the generated theme is the wrong choice
Three cases point elsewhere. The first is a user on a GNOME version outside 42 to 50, where the README says correct functionality is not guaranteed. A shell theme is a set of style sheets keyed to the shell's widget structure, and the version range in the requirements is the boundary of what the author has checked.
The second is a user who wants a single fixed design with no generator in the loop. The whole model of this project is that a script produces colour variants, which is a good fit for someone who wants to match a wallpaper or a desktop accent, and a poor fit for someone who has already found the exact theme they want and does not want a Python script running against their shell theme directory. The .colors.json file and the tweaks/ directory exist for that kind of adjustment, but the workflow still assumes generation.
The third is a cautious user who does not want a script writing to the GDM configuration and restarting the display manager. The login screen work needs root, needs glib2-devel and imagemagick, and its own restart step, and the README explicitly disclaims responsibility for damage caused by the installation. The shell half of the theme carries none of that risk, so the two halves can be evaluated separately.
The alternative worth weighing is the icon theme and desktop customisation approach generally, where a curated theme is installed and no generation step is involved. The difference in approach is that Marble produces a coordinated set of shell, panel, quick settings and dialog assets from a palette you choose at install time, rather than a fixed design that either suits your desktop or does not.
Editorial conclusion
Marble shell theme fits a GNOME user on version 42 to 50 who wants a coordinated shell and quick settings look with a specific accent colour, and who is comfortable running a Python script that writes into the shell theme directory. It does not fit a user on a GNOME version outside that range, and it does not fit anyone who needs the login screen themed without also accepting the extra dependencies and the restart of the display manager. Before you run it, remove any other theme installed globally, as the README asks, and check the GDM path's extra requirements of glib2-devel and imagemagick, since the login screen work needs packages the desktop theme does not.
Frequently asked questions
What is the Marble shell theme?
It is a shell theme for the GNOME desktop environment, based on a design published on pling.com, whose colours are generated by a Python install script rather than hand-picked. The available variants are red, yellow, green, blue, purple or a custom hue, and the project is GPL-3.0 licensed with its source in install.py, theme/, colors.json and tweaks/.
What do I need to install the Marble shell theme?
GNOME 42 to 50, since the README says correct functionality on other versions is not guaranteed, the User Themes extension, and Python 3.10 or higher. The README also asks you to remove any other theme installed globally, especially one that changes the login window, before installing this one.
How do I install the Marble shell theme?
Clone the repository, change into the Marble-shell-theme directory and run python install.py -a, which installs all accent colors in light and dark mode, adding --filled for a stronger accent in active buttons. After the files are created you open the Extensions app, go to User Themes and its Settings, and select the shell theme you want.
Can I install just one colour or a custom one with the Marble theme?
Yes. The options are -a or --all for every available colour, or --red, --yellow, --green, --blue, --purple and --gray for a single one, and several can be given in one command such as python install.py --red --green --blue. For a custom theme, --hue takes a value from 0 to 360 and --name sets a custom theme name, and the colours themselves can be edited in the colors.json file.
How do I theme the GDM login screen with the Marble theme?
Run the program with the --gdm option and a colour, for example sudo python install.py --gdm --blue --filled, then restart the service with sudo systemctl restart gdm. This path needs glib2-devel, which is libglib2.0-dev on Debian-based distributions, and imagemagick if you want to apply filters to the background image, and the theme is removed again with sudo python install.py --gdm -r.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/imarkoff-marble-shell-theme)Was this useful?