theme: YoRHa dark — NieR:Automata interface on the space-1 wallpaper

Replaces the Persona x Mocha rice. NieR's menu language is kept whole —
plain rectangles, hairline rules, letter-spaced upright capitals, a square
marker on the current row, corner ticks round panels, and selection shown
by inverting the row — but the colours come from ~/.wallpapers/space-1.jpg
rather than from the game's beige: the grey-green void as the ground, the
suit's sage grey as text, the planet's white as the one accent, and the
hull's red indicator lights as the alarm.

The Persona geometry is switched off rather than ripped out: Theme.skew
and Theme.cut are 0, so P5Panel, Skew and Geom collapse to rectangles.
Overshoot easing, italics and black weights are gone shell-wide.

New, borrowed from caelestia's screen border: bar/Frame.qml draws the bar,
the rail and a thin left/bottom band as one hull on the bottom layer, with
the desktop as a rounded opening cut out of it. Frame also owns all four
exclusive zones, so the bar and rail are placed from the screen edge.

Hyprland moves to 1px borders lit from the planet white into grey, a soft
wide shadow and gaps measured from the opening. Alacritty, fish and dunst
get matching YoRHa palettes. Neovim, GTK/Qt and btop are still Mocha.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
nvrlandClaude Opus 5.5 committed 2026-10-04 20:10:53 +02:00
1 parent 5be22d86a9
commit 18091a7109
56 files changed
+796 -605

No files matched your search

-1
View File
@@ -36,7 +36,6 @@ Item {
font.family: Theme.fontDisplay
font.pixelSize: Theme.fsSmall
font.weight: Font.DemiBold
font.italic: true
renderType: Text.NativeRendering
}
-2
View File
@@ -16,7 +16,6 @@ Item {
font.family: Theme.fontDisplay
font.pixelSize: Theme.fsHuge
font.weight: Theme.weightDisplay
font.italic: true
renderType: Text.NativeRendering
}
@@ -45,7 +44,6 @@ Item {
font.family: Theme.fontDisplay
font.pixelSize: Theme.fsSmall
font.weight: Font.DemiBold
font.italic: true
renderType: Text.NativeRendering
}
-1
View File
@@ -163,7 +163,6 @@ Popout {
font.family: Theme.fontDisplay
font.pixelSize: Theme.fsSmall
font.weight: Font.DemiBold
font.italic: true
renderType: Text.NativeRendering
}
+1 -2
View File
@@ -145,8 +145,7 @@ Popout {
}
font.family: Theme.fontDisplay
font.pixelSize: Theme.fsSmall
font.italic: true
font.weight: cell.modelData.today ? Font.Black : Font.Medium
font.weight: cell.modelData.today ? Font.DemiBold : Font.Medium
renderType: Text.NativeRendering
}
}
+3 -5
View File
@@ -123,8 +123,7 @@ Popout {
color: Theme.text
pixelSize: Theme.fsLarge
family: Theme.fontDisplay
weight: Font.Black
italic: true
weight: Font.DemiBold
}
Marquee {
@@ -134,7 +133,6 @@ Popout {
color: Theme.primary
pixelSize: Theme.fsSmall
family: Theme.fontDisplay
italic: true
weight: Font.DemiBold
}
@@ -359,7 +357,7 @@ Popout {
color: {
if (!tb.enabled) return Theme.alpha(Theme.muted, 0.5);
if (tb.activeFocus) return Theme.treatmentFocusText;
// Ink on the accent slab. White on light blue was barely 2:1.
// Ink on the accent slab, for contrast.
if (tbHover.hovered && tb.primary) return Theme.ink;
return Theme.text;
}
@@ -367,7 +365,7 @@ Popout {
scale: tbHover.hovered && tb.enabled ? 1.12 : 1.0
Behavior on scale {
NumberAnimation { duration: Theme.durBase; easing.type: Easing.OutBack }
NumberAnimation { duration: Theme.durBase; easing.type: Easing.OutCubic }
}
HoverHandler {
+2 -3
View File
@@ -56,8 +56,7 @@ Popout {
color: Theme.muted
font.family: Theme.fontDisplay
font.pixelSize: Theme.fsBody
font.italic: true
font.weight: Font.Black
font.weight: Font.DemiBold
font.letterSpacing: 3
renderType: Text.NativeRendering
}
@@ -84,7 +83,7 @@ Popout {
properties: "x"
from: 40
duration: Theme.durSlow
easing.type: Easing.OutBack
easing.type: Easing.OutCubic
}
NumberAnimation {
property: "opacity"
+10 -11
View File
@@ -2,8 +2,8 @@ import QtQuick
import "root:/config"
import "root:/components"
// Title bar for a popout: glyph, print-shadowed heading, right-aligned status
// text, and a rule with a chopped accent tail.
// Title bar for a popout, in the NieR header pattern: glyph, tracked heading,
// right-aligned status text, and a hairline rule that ends in a square.
Item {
id: root
@@ -31,7 +31,6 @@ Item {
anchors.verticalCenter: parent.verticalCenter
text: root.title.toUpperCase()
pixelSize: Theme.fsLarge
letterSpacing: 1.5
}
}
@@ -50,19 +49,19 @@ Item {
Rectangle {
anchors.bottom: parent.bottom
anchors.bottomMargin: (Theme.marker - 1) / 2
anchors.left: parent.left
anchors.right: parent.right
anchors.rightMargin: 22
height: 2
color: Theme.alpha(root.accent, 0.8)
anchors.right: endMark.left
height: 1
color: Theme.alpha(root.accent, 0.6)
}
Skew {
Rectangle {
id: endMark
anchors.bottom: parent.bottom
anchors.right: parent.right
width: 16
height: 2
width: Theme.marker
height: Theme.marker
color: Theme.accent
lean: 1.4
}
}
+4 -10
View File
@@ -10,20 +10,14 @@ P5Panel {
fill: Theme.mantle
fillOpacity: 0.97
// A neutral keyline. `tone` used to colour the whole border at 75%, and
// since most panels pass the resting text colour that put a pale 2px frame
// around every popout — the loudest thing on screen for no reason. The
// tone lives in the slash now; the frame is structure.
// The frame is structure: a neutral hairline. The tone goes into the
// corner ticks, which is where NieR puts the one bright mark on a panel.
border: Theme.surfaceAlt
borderWidth: Theme.stroke
halftone: textured
halftoneColor: tone
halftoneOpacity: 0.06
sheen: true
slash: true
slashColor: tone
slashWidth: 5
lean: 0.06
chop: 16
ticks: true
tickColor: tone
padding: Theme.padM
}
+3 -4
View File
@@ -29,7 +29,7 @@ PopupWindow {
// The slab's own lean and padding, which the entries sit inside. Sizing the
// window to the entry widths alone left every label short by that inset and
// elided perfectly ordinary items.
readonly property real slabLean: 0.06
readonly property real slabLean: Theme.skew
readonly property real slabPad: Theme.padS
readonly property real contentHeight: list.implicitHeight + slabPad * 2
@@ -114,7 +114,6 @@ PopupWindow {
anchors.fill: parent
tone: Theme.accent
padding: root.slabPad
chop: 12
lean: root.slabLean
TrayMenuList {
@@ -139,12 +138,12 @@ PopupWindow {
}
NumberAnimation {
target: holder; property: "scale"
to: 1.0; duration: Theme.durSlow; easing.type: Easing.OutBack
to: 1.0; duration: Theme.durSlow; easing.type: Easing.OutCubic
}
NumberAnimation {
target: holder; property: "x"
from: root.bleed + 14; to: root.bleed
duration: Theme.durSlow; easing.type: Easing.OutBack
duration: Theme.durSlow; easing.type: Easing.OutCubic
}
}
+4 -19
View File
@@ -84,19 +84,12 @@ Column {
width: root.width
// ------------------------------------------------------ separator
//
// A horizontal rule slants by a fraction of its own width, so at
// menu width the house lean turns a hairline into a 30px diagonal
// gash straight across the entries above and below it. The rise is
// pinned in pixels instead, matching the rail's dividers.
Skew {
Rectangle {
anchors.verticalCenter: parent.verticalCenter
visible: row.entry.isSeparator
width: parent.width - Theme.padM * 2
x: Theme.padM
height: 1
vertical: true
lean: width > 0 ? 5 / width : 0
color: Theme.alpha(Theme.outline, 0.9)
}
@@ -226,20 +219,12 @@ Column {
NumberAnimation { duration: Theme.durFast; easing.type: Easing.OutExpo }
}
// The guide rule down the side of an expanded submenu.
//
// Same trap the separators hit, from the other direction: the
// house lean is a fraction of *height*, and this rule is as tall
// as the submenu. A Wi-Fi list of thirty networks made it 600px
// tall, which sheared a 1px hairline into a 150px crimson wedge
// lying across every entry in the list. The rise is pinned in
// pixels, and it is declared before the entries so it can never
// paint over them again.
Skew {
// The guide rule down the side of an expanded submenu,
// declared before the entries so it can never paint over them.
Rectangle {
x: Theme.padS
width: 1
height: parent.height
lean: height > 0 ? 5 / height : 0
visible: row.expanded
color: Theme.alpha(Theme.accent, 0.8)
}