Files
menologion/quickshell/modules/Panel.qml
T
funkpower 7beb53fc94 the documented way to use this did not work
`import qs.horologion.modules` was the README's headline instruction and it
fails outright: Quickshell resolves `qs` against the host config root, not
the subtree, so in an empty shell the type is unavailable and in a populated
one the widget would have silently bound to the host's Config and Theme
instead of its own. The imports inside are now relative and each directory
carries a qmldir, so `import "horologion/modules"` works in any host and the
three pieces really are usable on their own.

  - refresh() dropped a request made while a run was in flight, so a
    jurisdiction or date set a moment after startup never took effect until
    midnight. It queues now.
  - The waybar script exited non-zero on its error paths, and waybar hides a
    module whose script does that -- so a missing typikon made the module
    vanish rather than say so, and the .error CSS was dead. An unrecognised
    --format field raised instead of rendering empty, and the tooltip
    interpolated unescaped text into Pango markup, which matters because
    --update-menaion fetches commemorations from a page nobody here controls.
  - The installer aborted the whole run at the point where it printed
    'leaving it alone', and a wholly successful run exited 1 because the last
    statement was a failed [ -d ] test under set -e. --help demanded typikon,
    which is what --help would have told you to install.
  - eww painted every day with the feast colour and printed a dangling
    separator, because it compares against "" and eww renders a JSON null as
    the string "null". The parenthesised ?: form two lines away was already
    right. The week list also repeated today.

pip install typikon installed nothing; there is no such package, and that was
the first line of every install path. Pascha now carries its label instead of
being a bare ISO date in a corner.

tests/smoke.sh covers the scripts, which is where all of this lived and where
nothing was covered. It caught two of these while being written.
2026-09-18 10:29:37 -04:00

55 lines
1.4 KiB
QML

import QtQuick
import QtQuick.Layouts
import ".."
import "../services"
// Chrome for the widget. Slightly translucent so a wallpaper reads through it,
// opaque enough to stay legible over a busy picture.
Rectangle {
id: root
property string title: ""
property string note: ""
default property alias content: body.data
Layout.fillWidth: true
implicitHeight: col.implicitHeight + 28
radius: Config.radius
color: Qt.alpha(Theme.surface, Config.opacity)
border.width: 1
border.color: Qt.alpha(Theme.overlay, 0.7)
ColumnLayout {
id: col
anchors.fill: parent
anchors.margins: 14
spacing: 10
RowLayout {
Layout.fillWidth: true
visible: root.title !== ""
Text {
Layout.fillWidth: true
text: root.title
color: Theme.accent
font.family: Config.font
font.pixelSize: Config.fontSize
font.bold: true
}
Text {
text: root.note
color: Theme.fgDim
font.family: Config.font
font.pixelSize: Config.fontSize - 2
}
}
Item {
id: body
Layout.fillWidth: true
implicitHeight: children.length > 0 ? children[0].implicitHeight : 0
onWidthChanged: if (children.length > 0) children[0].width = width
}
}
}