Files
dots-hyprland/dots/.config/quickshell/ii/modules/settings/BackgroundConfig.qml
T
2025-11-28 23:10:33 +03:00

576 lines
22 KiB
QML

import QtQuick
import QtQuick.Layouts
import qs.services
import qs.modules.common
import qs.modules.common.widgets
ContentPage {
forceWidth: true
ContentSection {
icon: "sync_alt"
title: Translation.tr("Parallax")
ConfigSwitch {
buttonIcon: "unfold_more_double"
text: Translation.tr("Vertical")
checked: Config.options.background.parallax.vertical
onCheckedChanged: {
Config.options.background.parallax.vertical = checked;
}
}
ConfigRow {
uniform: true
ConfigSwitch {
buttonIcon: "counter_1"
text: Translation.tr("Depends on workspace")
checked: Config.options.background.parallax.enableWorkspace
onCheckedChanged: {
Config.options.background.parallax.enableWorkspace = checked;
}
}
ConfigSwitch {
buttonIcon: "side_navigation"
text: Translation.tr("Depends on sidebars")
checked: Config.options.background.parallax.enableSidebar
onCheckedChanged: {
Config.options.background.parallax.enableSidebar = checked;
}
}
}
ConfigSpinBox {
icon: "loupe"
text: Translation.tr("Preferred wallpaper zoom (%)")
value: Config.options.background.parallax.workspaceZoom * 100
from: 100
to: 150
stepSize: 1
onValueChanged: {
Config.options.background.parallax.workspaceZoom = value / 100;
}
}
}
ContentSection {
icon: "clock_loader_40"
title: Translation.tr("Widget: Clock")
id: settingsClock
function stylePresent(styleName) {
if (!Config.options.background.widgets.clock.showOnlyWhenLocked && Config.options.background.widgets.clock.style === styleName) {
return true;
}
if (Config.options.background.widgets.clock.styleLocked === styleName) {
return true;
}
return false;
}
readonly property bool digitalPresent: stylePresent("digital")
readonly property bool cookiePresent: stylePresent("cookie")
ConfigRow {
Layout.fillWidth: true
ConfigSwitch {
Layout.fillWidth: false
buttonIcon: "check"
text: Translation.tr("Enable")
checked: Config.options.background.widgets.clock.enable
onCheckedChanged: {
Config.options.background.widgets.clock.enable = checked;
}
}
Item {
Layout.fillWidth: true
}
ConfigSelectionArray {
Layout.fillWidth: false
currentValue: Config.options.background.widgets.clock.placementStrategy
onSelected: newValue => {
Config.options.background.widgets.clock.placementStrategy = newValue;
}
options: [
{
displayName: Translation.tr("Draggable"),
icon: "drag_pan",
value: "free"
},
{
displayName: Translation.tr("Least busy"),
icon: "category",
value: "leastBusy"
},
{
displayName: Translation.tr("Most busy"),
icon: "shapes",
value: "mostBusy"
},
]
}
}
ConfigSwitch {
buttonIcon: "lock_clock"
text: Translation.tr("Show only when locked")
checked: Config.options.background.widgets.clock.showOnlyWhenLocked
onCheckedChanged: {
Config.options.background.widgets.clock.showOnlyWhenLocked = checked;
}
}
ConfigRow {
ContentSubsection {
visible: !Config.options.background.widgets.clock.showOnlyWhenLocked
title: Translation.tr("Clock style")
Layout.fillWidth: true
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.style
onSelected: newValue => {
Config.options.background.widgets.clock.style = newValue;
}
options: [
{
displayName: Translation.tr("Digital"),
icon: "timer_10",
value: "digital"
},
{
displayName: Translation.tr("Cookie"),
icon: "cookie",
value: "cookie"
}
]
}
}
ContentSubsection {
title: Translation.tr("Clock style (locked)")
Layout.fillWidth: false
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.styleLocked
onSelected: newValue => {
Config.options.background.widgets.clock.styleLocked = newValue;
}
options: [
{
displayName: Translation.tr("Digital"),
icon: "timer_10",
value: "digital"
},
{
displayName: Translation.tr("Cookie"),
icon: "cookie",
value: "cookie"
}
]
}
}
}
ContentSubsection {
visible: settingsClock.digitalPresent
title: Translation.tr("Digital clock settings")
ConfigRow {
ConfigSwitch {
buttonIcon: "vertical_distribute"
text: Translation.tr("Vertical")
checked: Config.options.background.widgets.clock.digital.vertical
onCheckedChanged: {
Config.options.background.widgets.clock.digital.vertical = checked;
}
}
ConfigSwitch {
buttonIcon: "animation"
text: Translation.tr("Animate time change")
checked: Config.options.background.widgets.clock.digital.animateChange
onCheckedChanged: {
Config.options.background.widgets.clock.digital.animateChange = checked;
}
}
}
ConfigRow {
ConfigSwitch {
buttonIcon: "date_range"
text: Translation.tr("Show date")
checked: Config.options.background.widgets.clock.digital.showDate
onCheckedChanged: {
Config.options.background.widgets.clock.digital.showDate = checked;
}
}
ConfigSwitch {
buttonIcon: "activity_zone"
text: Translation.tr("Use adaptive alignment")
checked: Config.options.background.widgets.clock.digital.adaptiveAlignment
onCheckedChanged: {
Config.options.background.widgets.clock.digital.adaptiveAlignment = checked;
}
StyledToolTip {
text: Translation.tr("Aligns the date and quote to left, center or right depending on its position on the screen.")
}
}
}
ConfigSlider {
text: Translation.tr("Font weight")
value: Config.options.background.widgets.clock.digital.weight
usePercentTooltip: false
buttonIcon: "format_bold"
from: 1
to: 1000
onValueChanged: {
Config.options.background.widgets.clock.digital.weight = value;
}
}
ConfigSlider {
text: Translation.tr("Font Size")
value: Config.options.background.widgets.clock.digital.size
usePercentTooltip: false
buttonIcon: "format_size"
from: 70
to: 150
onValueChanged: {
Config.options.background.widgets.clock.digital.size = value;
}
}
}
ContentSubsection {
visible: settingsClock.cookiePresent
title: Translation.tr("Cookie clock settings")
ConfigSwitch {
buttonIcon: "wand_stars"
text: Translation.tr("Auto styling with Gemini")
checked: Config.options.background.widgets.clock.cookie.aiStyling
onCheckedChanged: {
Config.options.background.widgets.clock.cookie.aiStyling = checked;
}
StyledToolTip {
text: Translation.tr("Uses Gemini to categorize the wallpaper then picks a preset based on it.\nYou'll need to set Gemini API key on the left sidebar first.\nImages are downscaled for performance, but just to be safe,\ndo not select wallpapers with sensitive information.")
}
}
ConfigSwitch {
buttonIcon: "airwave"
text: Translation.tr("Use old sine wave cookie implementation")
checked: Config.options.background.widgets.clock.cookie.useSineCookie
onCheckedChanged: {
Config.options.background.widgets.clock.cookie.useSineCookie = checked;
}
StyledToolTip {
text: "Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing"
}
}
ConfigSpinBox {
icon: "add_triangle"
text: Translation.tr("Sides")
value: Config.options.background.widgets.clock.cookie.sides
from: 0
to: 40
stepSize: 1
onValueChanged: {
Config.options.background.widgets.clock.cookie.sides = value;
}
}
ConfigSwitch {
buttonIcon: "autoplay"
text: Translation.tr("Constantly rotate")
checked: Config.options.background.widgets.clock.cookie.constantlyRotate
onCheckedChanged: {
Config.options.background.widgets.clock.cookie.constantlyRotate = checked;
}
StyledToolTip {
text: "Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical."
}
}
ConfigRow {
ConfigSwitch {
enabled: Config.options.background.widgets.clock.cookie.dialNumberStyle === "dots" || Config.options.background.widgets.clock.cookie.dialNumberStyle === "full"
buttonIcon: "brightness_7"
text: Translation.tr("Hour marks")
checked: Config.options.background.widgets.clock.cookie.hourMarks
onEnabledChanged: {
checked = Config.options.background.widgets.clock.cookie.hourMarks;
}
onCheckedChanged: {
Config.options.background.widgets.clock.cookie.hourMarks = checked;
}
StyledToolTip {
text: "Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons"
}
}
ConfigSwitch {
enabled: Config.options.background.widgets.clock.cookie.dialNumberStyle !== "numbers"
buttonIcon: "timer_10"
text: Translation.tr("Digits in the middle")
checked: Config.options.background.widgets.clock.cookie.timeIndicators
onEnabledChanged: {
checked = Config.options.background.widgets.clock.cookie.timeIndicators;
}
onCheckedChanged: {
Config.options.background.widgets.clock.cookie.timeIndicators = checked;
}
StyledToolTip {
text: "Can't be turned on when using 'Numbers' dial style for aesthetic reasons"
}
}
}
}
ContentSubsection {
visible: settingsClock.cookiePresent
title: Translation.tr("Dial style")
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.cookie.dialNumberStyle
onSelected: newValue => {
Config.options.background.widgets.clock.cookie.dialNumberStyle = newValue;
if (newValue !== "dots" && newValue !== "full") {
Config.options.background.widgets.clock.cookie.hourMarks = false;
}
if (newValue === "numbers") {
Config.options.background.widgets.clock.cookie.timeIndicators = false;
}
}
options: [
{
displayName: "",
icon: "block",
value: "none"
},
{
displayName: Translation.tr("Dots"),
icon: "graph_6",
value: "dots"
},
{
displayName: Translation.tr("Full"),
icon: "history_toggle_off",
value: "full"
},
{
displayName: Translation.tr("Numbers"),
icon: "counter_1",
value: "numbers"
}
]
}
}
ContentSubsection {
visible: settingsClock.cookiePresent
title: Translation.tr("Hour hand")
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.cookie.hourHandStyle
onSelected: newValue => {
Config.options.background.widgets.clock.cookie.hourHandStyle = newValue;
}
options: [
{
displayName: "",
icon: "block",
value: "hide"
},
{
displayName: Translation.tr("Classic"),
icon: "radio",
value: "classic"
},
{
displayName: Translation.tr("Hollow"),
icon: "circle",
value: "hollow"
},
{
displayName: Translation.tr("Fill"),
icon: "eraser_size_5",
value: "fill"
},
]
}
}
ContentSubsection {
visible: settingsClock.cookiePresent
title: Translation.tr("Minute hand")
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.cookie.minuteHandStyle
onSelected: newValue => {
Config.options.background.widgets.clock.cookie.minuteHandStyle = newValue;
}
options: [
{
displayName: "",
icon: "block",
value: "hide"
},
{
displayName: Translation.tr("Classic"),
icon: "radio",
value: "classic"
},
{
displayName: Translation.tr("Thin"),
icon: "line_end",
value: "thin"
},
{
displayName: Translation.tr("Medium"),
icon: "eraser_size_2",
value: "medium"
},
{
displayName: Translation.tr("Bold"),
icon: "eraser_size_4",
value: "bold"
},
]
}
}
ContentSubsection {
visible: settingsClock.cookiePresent
title: Translation.tr("Second hand")
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.cookie.secondHandStyle
onSelected: newValue => {
Config.options.background.widgets.clock.cookie.secondHandStyle = newValue;
}
options: [
{
displayName: "",
icon: "block",
value: "hide"
},
{
displayName: Translation.tr("Classic"),
icon: "radio",
value: "classic"
},
{
displayName: Translation.tr("Line"),
icon: "line_end",
value: "line"
},
{
displayName: Translation.tr("Dot"),
icon: "adjust",
value: "dot"
},
]
}
}
ContentSubsection {
visible: settingsClock.cookiePresent
title: Translation.tr("Date style")
ConfigSelectionArray {
currentValue: Config.options.background.widgets.clock.cookie.dateStyle
onSelected: newValue => {
Config.options.background.widgets.clock.cookie.dateStyle = newValue;
}
options: [
{
displayName: "",
icon: "block",
value: "hide"
},
{
displayName: Translation.tr("Bubble"),
icon: "bubble_chart",
value: "bubble"
},
{
displayName: Translation.tr("Border"),
icon: "rotate_right",
value: "border"
},
{
displayName: Translation.tr("Rect"),
icon: "rectangle",
value: "rect"
}
]
}
}
ContentSubsection {
title: Translation.tr("Quote")
ConfigSwitch {
buttonIcon: "check"
text: Translation.tr("Enable")
checked: Config.options.background.widgets.clock.quote.enable
onCheckedChanged: {
Config.options.background.widgets.clock.quote.enable = checked;
}
}
MaterialTextArea {
Layout.fillWidth: true
placeholderText: Translation.tr("Quote")
text: Config.options.background.widgets.clock.quote.text
wrapMode: TextEdit.Wrap
onTextChanged: {
Config.options.background.widgets.clock.quote.text = text;
}
}
}
}
ContentSection {
icon: "weather_mix"
title: Translation.tr("Widget: Weather")
ConfigRow {
Layout.fillWidth: true
ConfigSwitch {
Layout.fillWidth: false
buttonIcon: "check"
text: Translation.tr("Enable")
checked: Config.options.background.widgets.weather.enable
onCheckedChanged: {
Config.options.background.widgets.weather.enable = checked;
}
}
Item {
Layout.fillWidth: true
}
ConfigSelectionArray {
Layout.fillWidth: false
currentValue: Config.options.background.widgets.weather.placementStrategy
onSelected: newValue => {
Config.options.background.widgets.weather.placementStrategy = newValue;
}
options: [
{
displayName: Translation.tr("Draggable"),
icon: "drag_pan",
value: "free"
},
{
displayName: Translation.tr("Least busy"),
icon: "category",
value: "leastBusy"
},
{
displayName: Translation.tr("Most busy"),
icon: "shapes",
value: "mostBusy"
},
]
}
}
}
}