Two things, both closing gaps in work that was already reported done. GNOME's Multitasking panel, in Hyprland's terms: tiling layout, split behaviour, floating-window snapping, workspace wrap-around and back-and-forth, whether applications may take focus, and whether the pointer changes the active display. Hyprland creates and destroys workspaces as you use them, so there is no fixed count to expose, and the page says so rather than leaving a conspicuous absence. The Desktop page described the first two of these as read-only facts -- "Layout: Tiling", "Workspace movement: Dynamic" -- which was never true. Both are ordinary Hyprland options that happened to have no controls, and TextRow's own documentation says a setting the user could reasonably change does not belong in it. Schema defaults are Panama's shipped values from looks.lua rather than Hyprland's own, so restoring defaults returns the desktop to how it ships. 43 mapped options now, from 35. The launcher had no light theme. vicinae.json already selected a theme per system appearance, but both entries pointed at Moon, so choosing light mode left the most frequently opened window on the desktop dark -- a hole in the light/dark work, not a missing feature. Day is authored from the same palette as the kitty Day theme so the two cannot drift, and link-dotfiles now installs every authored theme rather than only the dark one, which is why the gap survived being noticed. Its placeholder colour is not Tokyo Night Day's own: that measures 2.54:1 against the background, below the 3:1 floor for secondary text. This is 3.25:1, the same value used for neovim's light comments. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
135 lines
4.6 KiB
QML
135 lines
4.6 KiB
QML
// Desktop & Dock.
|
|
//
|
|
// The dock timings used to be shown here as text -- "Instant", "250 ms" -- even
|
|
// though they were already stored, mutable integers. They are controls now.
|
|
// The window-layout card keeps text rows because those really are facts about
|
|
// how Panama tiles rather than settings: the adjustable parts of window
|
|
// appearance live on the Appearance page, next to the preview that explains
|
|
// them.
|
|
|
|
import QtQuick
|
|
import qs.config
|
|
import qs.services
|
|
|
|
SettingsPage {
|
|
id: root
|
|
|
|
title: "Desktop & Dock"
|
|
lede: "Keep the shell instant, spatial, and out of your way."
|
|
|
|
SettingsCard {
|
|
title: "Dock"
|
|
|
|
ToggleRow { setting: "dockAutohide" }
|
|
SliderRow { setting: "dockRevealDelayMs"; zeroLabel: "Instant" }
|
|
SliderRow { setting: "dockHideDelayMs"; zeroLabel: "Instant"; divider: false }
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Pinned applications"
|
|
subtitle: "What sits in the Dock whether or not it is running. Order here is the order on screen."
|
|
|
|
DockPinsEditor {
|
|
id: pins
|
|
width: parent.width
|
|
}
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Pin another application"
|
|
|
|
DockAppPicker {
|
|
width: parent.width
|
|
pinned: pins.pinned
|
|
onPicked: id => pins.add(id)
|
|
}
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Window layout"
|
|
subtitle: "Panama follows the Forge mental model with native Hyprland tiling."
|
|
|
|
// These were two read-only rows reporting "Tiling" and "Dynamic", which
|
|
// described settings rather than facts -- both are ordinary Hyprland
|
|
// options that simply had no controls. TextRow's own documentation says
|
|
// a setting the user could reasonably change does not belong in it.
|
|
ChoiceRow { setting: "windowLayout" }
|
|
ToggleRow { setting: "preserveSplit" }
|
|
ChoiceRow { setting: "forceSplit" }
|
|
ToggleRow { setting: "windowSnapping" }
|
|
ActionRow {
|
|
label: "Gaps, corners, and effects"
|
|
detail: "Adjusted on the Appearance page, beside a live preview"
|
|
action: "Open Appearance"
|
|
divider: false
|
|
onTriggered: ShellState.openSettings("appearance")
|
|
}
|
|
}
|
|
|
|
// GNOME's Multitasking panel, in Hyprland's terms.
|
|
SettingsCard {
|
|
title: "Workspaces & focus"
|
|
subtitle: "Hyprland's workspaces are created and destroyed as you use them, so there is no fixed count to set."
|
|
|
|
ToggleRow { setting: "workspaceBackAndForth" }
|
|
ToggleRow { setting: "allowWorkspaceCycles" }
|
|
ToggleRow { setting: "focusOnActivate" }
|
|
ToggleRow { setting: "mouseMoveFocusesMonitor" }
|
|
ChoiceRow { setting: "followMouse"; divider: false }
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Focus"
|
|
|
|
SliderRow { setting: "focusDurationMinutes"; divider: false }
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Snapshots"
|
|
subtitle: SettingsBackup.lastError !== ""
|
|
? SettingsBackup.lastError
|
|
: "Your whole desktop configuration is one file, so a snapshot is a copy of it. Restoring also snapshots what it replaces, so it is itself undoable."
|
|
|
|
ActionRow {
|
|
label: "Back up current settings"
|
|
detail: SettingsBackup.snapshots.length === 0
|
|
? "No snapshots yet"
|
|
: SettingsBackup.snapshots.length + (SettingsBackup.snapshots.length === 1 ? " snapshot kept" : " snapshots kept") + ", newest first"
|
|
action: "Back up now"
|
|
enabled: !SettingsBackup.busy
|
|
divider: SettingsBackup.snapshots.length > 0
|
|
onTriggered: SettingsBackup.save()
|
|
}
|
|
|
|
Repeater {
|
|
id: snapshotRows
|
|
model: SettingsBackup.snapshots
|
|
|
|
ActionRow {
|
|
required property var modelData
|
|
required property int index
|
|
|
|
label: modelData.when
|
|
detail: modelData.keys + " settings"
|
|
action: "Restore"
|
|
enabled: !SettingsBackup.busy
|
|
divider: index < snapshotRows.count - 1
|
|
onTriggered: SettingsBackup.restore(modelData.name)
|
|
}
|
|
}
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Reset"
|
|
subtitle: "Restores Panama's appearance, dock, clock, focus, and display policy, and clears your Home accessory arrangement. Pinned applications, files, and paired devices are not changed."
|
|
|
|
ActionRow {
|
|
label: "Restore Panama defaults"
|
|
detail: "Applies immediately, including to the compositor"
|
|
action: "Restore defaults"
|
|
divider: false
|
|
onTriggered: SystemSettings.restoreDefaults()
|
|
}
|
|
}
|
|
}
|