Convert the caelestia shell to the NoSignal "design_handoff_quickshell_shell" spec: a slim translucent top bar with floating glass popouts, fixed dark-glass chrome + Material You dynamic accent, square corners, JetBrains Mono. - Theme singleton (services/Theme.qml): design tokens; accent = m3primary (dynamic), fixed glass/text, square radii. - New slim bar as its own PanelWindow (modules/nsbar/NsBar.qml), additive in shell.qml; reuses caelestia services + components. Helpers: BarPill, NsWorkspaces (numbered, active=accent pill), NsOverlay (popout host, one-at-a- time via services/NsShell.qml, outside-click + Esc), components/NsPanel + components/NsSwitch. - Old caelestia frame removed: BarWrapper collapsed; ContentWindow border 0 + borderTop 0; Exclusions zones 0. Drawer engine kept for launcher/OSD/lock. - 9 popouts (modules/nsbar/panels/): Calendar, QuickSettings, Network, Bluetooth, Notifications, Audio, SystemTray, Overview, PowerMenu. - Clock restyled (date muted + time DemiBold). - nexus (Settings) reskinned: dark-glass window + cards, square corners (Nexus.qml, common/ConnectedRect.qml) — keeps all pages/functionality. Launcher kept as-is. Font (JetBrainsMono) + rounding.scale=0 + Super+Alt+Space nexus bind are caelestia/hypr CONFIG and ship in the OS, not this fork. Next: full Material Symbols -> Nerd Font icon remap. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
96 lines
2.8 KiB
QML
96 lines
2.8 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Caelestia.Config
|
|
import qs.components
|
|
import qs.utils
|
|
import qs.modules.bar.popouts as BarPopouts
|
|
|
|
Item {
|
|
id: root
|
|
|
|
required property ShellScreen screen
|
|
required property DrawerVisibilities visibilities
|
|
required property BarPopouts.Wrapper popouts
|
|
required property bool fullscreen
|
|
|
|
readonly property bool disabled: Strings.testRegexList(Config.bar.excludedScreens, screen.name)
|
|
|
|
// NoSignal horizontal top bar: the bar's "thickness" is its HEIGHT (was width
|
|
// for the upstream vertical left-edge bar). clampedHeight/contentHeight and
|
|
// implicitHeight carry the thickness; the wrapper fills the screen width.
|
|
readonly property int clampedHeight: Math.max(Config.border.minThickness, implicitHeight)
|
|
readonly property int padding: Math.max(Tokens.padding.small, Config.border.thickness)
|
|
readonly property int contentHeight: Tokens.sizes.bar.innerWidth + padding * 2
|
|
readonly property int exclusiveZone: !disabled && (Config.bar.persistent || visibilities.bar) ? contentHeight : Config.border.thickness
|
|
// NoSignal redesign: the old caelestia bar is replaced by the slim NsBar
|
|
// PanelWindow. Collapse it (the drawer engine is kept for launcher/OSD/lock).
|
|
readonly property bool shouldBeVisible: false
|
|
property bool isHovered
|
|
|
|
function closeTray(): void {
|
|
(content.item as Bar)?.closeTray();
|
|
}
|
|
|
|
function checkPopout(x: real): void {
|
|
(content.item as Bar)?.checkPopout(x);
|
|
}
|
|
|
|
function handleWheel(x: real, angleDelta: point): void {
|
|
(content.item as Bar)?.handleWheel(x, angleDelta);
|
|
}
|
|
|
|
clip: true
|
|
visible: height > Config.border.thickness
|
|
implicitHeight: fullscreen ? 0 : Config.border.thickness
|
|
|
|
states: State {
|
|
name: "visible"
|
|
when: root.shouldBeVisible
|
|
|
|
PropertyChanges {
|
|
root.implicitHeight: root.contentHeight
|
|
}
|
|
}
|
|
|
|
transitions: [
|
|
Transition {
|
|
from: ""
|
|
to: "visible"
|
|
|
|
Anim {
|
|
target: root
|
|
property: "implicitHeight"
|
|
}
|
|
},
|
|
Transition {
|
|
from: "visible"
|
|
to: ""
|
|
|
|
Anim {
|
|
target: root
|
|
property: "implicitHeight"
|
|
type: Anim.Emphasized
|
|
}
|
|
}
|
|
]
|
|
|
|
Loader {
|
|
id: content
|
|
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
|
|
active: root.shouldBeVisible
|
|
|
|
sourceComponent: Bar {
|
|
height: root.contentHeight
|
|
screen: root.screen
|
|
visibilities: root.visibilities
|
|
popouts: root.popouts // qmllint disable incompatible-type
|
|
fullscreen: root.fullscreen
|
|
}
|
|
}
|
|
}
|