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>
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
LICENSEand inmetacity-1/metacity-theme-1.xml.
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_colorwas#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.
GtkSwitchis new — it barely existed in MATE in 2016 and the original never styled it.- Notebook tab padding is
3px 10pxrather than1px 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 titlebarselected_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()ormin()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.
