Files
zavageandClaude Opus 5 d56294b00f Port to GTK 3.24 and recolour to the film palette
The GTK3 sheets targeted GTK 3.18 and broke at 3.20, when the CSS class
model was replaced by element nodes. On 3.24 they parsed but matched almost
nothing: buttons, entries, tabs, scales and scrollbars rendered as bare
rectangles. Rewritten against the node model.

gtk-3.0/
  gtk.css       colour definitions only - recolour the theme here
  widgets.css   all widget rules, node-selector based
  mate.css      MATE panel, applets, window list, Caja, terminal
  gtk-dark.css  alias of gtk.css (the theme is already dark)
  legacy/       the original 3.18 sheets, moved aside for reference

Palette retargeted to the WAR10CK window in Live Free or Die Hard:
bg #23425E, accent #BA6A07. Supporting shades derived with the original
theme's own ratios (raised x1.42, recessed x0.72). Text had to be lifted -
the old #868A8E scores 3.0:1 on #23425E, so normal text is #B4C4D2
(5.85:1) and bright text #E8F0F7 (9.06:1).

metacity-1/ pixmaps remapped by projecting each pixel onto the segment
between its two nearest source anchors and re-blending against the new
ones, so antialiased edges stay clean. Titlebar is ~7px taller, its text
is centred and no longer a hardcoded #6d7379 for both focus states, and
the idle window-button glyphs are white instead of a dim orange that
turned to mud on the lighter bar.

Scrollbars are deliberately not accent-coloured; @scrollbar_slider
(#454F5A) keeps them quiet at rest and findable on hover.

Fixes a transparent-body bug: GtkDialog and GtkAssistant do not use the
`window` CSS node in 3.20+, so every dialog, About box and file chooser
rendered as a hole through to the desktop.

Attribution and the GPL-3.0 modification notice added to README.md,
index.theme and metacity-theme-1.xml. Licence unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 05:58:09 -06:00

7.6 KiB

Diehard4

GTK3 Theme

This is a modified version of Diehard4. Original theme by obscurant (2016). Modified in September 2026 by zavage: the GTK3 sheets were rewritten for the post-3.20 CSS node model (the originals target GTK 3.18 and render almost nothing on 3.24), and the palette was retargeted to the on-screen colours from Live Free or Die Hard. See the sections at the end of this file for the full list of changes.

Licensed GPL-3.0, same as the original. Original copyright is retained in LICENSE and in metacity-1/metacity-theme-1.xml.

screenshot

Full rewrite of the gtk2/gtk3 themes. Includes themes for cinnamon, openbox, xfwm, pekwm and tint2. Unity support is included, but it's not so great.

Font is cure, from the Artwiz font pack (install guide).
Icons are Faenza and Variations.
Wallpaper
Audacious skin

Changelog
v1.5 (3/17/16)
• Cinnamon theme rewrite
• gtk3 tab padding reduction
• Fixes to unselected tab close button
• Fixes to terminal tabs

v1.4
• gtk3 toolbar, menubar padding reduction
• gtk3 Menubar text color
• gtk3 Tweaks to seekbars
• Metacity text color

v1.3
• Fixed resize bug with some applications

v1.2
• gtk2 menu arrow selected
• gtk2 input padding
• gtk2 progress bar height
• Added style for Reddit Reader desklet in Cinnamon theme


GTK3 port (v2.0, 2026-09-18)

The GTK3 half of this theme was written for GTK 3.18 and stopped working when GTK 3.20 replaced the CSS class model with element nodes. On GTK 3.24 the old sheets parsed but matched almost nothing, so buttons, entries, tabs, scales and scrollbars rendered as bare rectangles.

gtk-3.0/ has been rewritten against the current node model:

file contents
gtk.css colour definitions only — recolour the theme here
widgets.css all widget rules, node-selector based
mate.css MATE panel, applets, window list, Caja, terminal
gtk-dark.css alias of gtk.css (the theme is already dark)
legacy/ the original 3.18 sheets, unmodified, for reference

Palette, metrics and design language are unchanged. Deliberate deviations, all made because the original value no longer reads on 3.24:

  • trough_border_color was #111B25, within one step of the window background — scale, progressbar and switch troughs were invisible. Now @light_color, the same border entries already used.
  • Keyboard focus draws a faint dashed outline. The original set -GtkWidget-focus-line-width: 0, which on 3.24 leaves no focus cue at all.
  • Entries take an accent-coloured border on focus.
  • GtkSwitch is new — it barely existed in MATE in 2016 and the original never styled it.
  • Notebook tab padding is 3px 10px rather than 1px 8px; the old value is below the minimum tab height GTK now enforces.

Do not put gtk-application-prefer-dark-theme in gtk-3.0/settings.ini. It makes GTK reload the theme, which re-reads the file, and applications hang on startup. The theme ships without a settings.ini for that reason.

The GTK2 sheet (gtk-2.0/gtkrc) is untouched and still correct — GTK2 never changed under it. It needs the gtk2 and gtk-engines packages installed to have any effect.

Window decorations come from metacity-1/, which Marco (MATE) reads directly. Emerald is not required and has not been maintained since the Compiz Fusion era.

Screen-accurate recolour (2026-09-18)

Palette retargeted to the WAR10CK window in Live Free or Die Hard:

  • bg_color #23425E — window and titlebar
  • selected_bg_color #BA6A07 — the orange edge bars and accents

Supporting shades are derived from those two with the original theme's own ratios (raised x1.42, recessed x0.72). Text had to be lifted: the old #868A8E scores only 3.0:1 on #23425E, so normal text is now #B4C4D2 (5.85:1) and bright text #E8F0F7 (9.06:1).

The metacity-1/ pixmaps were remapped the same way — each pixel is projected onto the segment between its two nearest source anchors (#9F440D orange, #0D151D navy, #C5CBD1 glyph) and re-blended against the new anchors, so antialiased edges stay clean. Originals are in metacity-1.orig/.

Titlebar is taller: title_vertical_pad 0 -> 4 and title_border top/bottom 5/0 -> 2/2, roughly +7px. The titlebar pixmaps are drawn with height="height" so they stretch to fit — no art changes needed. Title text was hardcoded #6d7379 for both focus states; it is now #E8F0F7 focused / #8CA2B6 unfocused, and vertically centred with y="(height - title_height) / 2" instead of the old y="0-3" fudge.

GTK headerbars (CSD apps) went from min-height: 32px to 40px to match.

Why the left bar has no diagonal corner

The Emerald original cut the orange bar at 45 degrees at the bottom-left. That was tried here and reverted — Marco cannot reproduce it. Recording why, so nobody burns an afternoon rediscovering it:

  • Marco ignores per-pixel alpha in frame images. Transparent pixels composite onto black, not onto the desktop, so a cut-away corner renders as a black triangle over the wallpaper. Verified by placing a magenta window behind the corner: the cut came out black, not magenta. Marco can only shape-clip the rounded_* corners, which is a binary mask and not usable for this. Emerald drew true ARGB decorations; Marco does not.
  • Filling the cut with the frame colour instead does render correctly, but it reads as the bar tapering into the border rather than a corner cut out of it, which is not the effect — hence the revert.
  • Do not use max() or min() in a draw_ops expression. Marco segfaults when it draws a frame using one — no parse error, no warning, the window manager dies and every window loses its decorations. It only crashes once a frame is actually drawn, so a WM started with no windows open looks fine. Plain arithmetic (height - 13) is safe, and Marco clamps negative results on very short windows without complaint.

GtkDialog and GtkAssistant do not use the window CSS node in 3.20+ — they are dialog and assistant. A theme that only styles window leaves every dialog, About box, file chooser, colour/font picker and app chooser with a fully transparent body that renders as a hole through to the desktop. All three node names are covered in the toplevel background rule.

Window buttons: the state attribute in metacity-theme-1.xml is the mouse state, not window focus — normal is idle and prelight is hover, and the draw_ops names are misleading about which is which. The idle minimise/maximise/close glyphs were a dim orange (#7F5A29) that worked on the old near-black bar and turned to mud on #23425E; all three are now #E8F0F7, with the orange square still appearing on hover.

Scrollbars are deliberately not accent-coloured. An always-on-screen element in #BA6A07 reads as an alarm, so the slider uses @scrollbar_slider (#454F5A) — 1.63:1 against the trough at rest, rising to 2.49:1 on hover so it is still easy to find and grab. Change that one token in gtk.css to restyle every scrollbar; hover, active and disabled are derived from it with shade().

Marco caches the metacity theme, so after editing it you must switch the Marco theme away and back for changes to show. GTK3 reloads CSS on file change by itself.