From 88a3f09de553e11985f12ecaf40f334fad729ab9 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 9 Aug 2025 00:13:48 +1000 Subject: config: make appearance configurable --- README.md | 36 +++++++++++++++ config/Appearance.qml | 86 ++++------------------------------- config/AppearanceConfig.qml | 91 ++++++++++++++++++++++++++++++++++++++ config/Config.qml | 2 + modules/launcher/WallpaperList.qml | 10 +++-- services/Colours.qml | 7 +-- 6 files changed, 147 insertions(+), 85 deletions(-) create mode 100644 config/AppearanceConfig.qml diff --git a/README.md b/README.md index 5b43125..cb5fb45 100644 --- a/README.md +++ b/README.md @@ -147,10 +147,46 @@ git pull All configuration options are in `~/.config/caelestia/shell.json`. +> [!NOTE] +> The example configuration only includes recommended configuration options. For more advanced customisation +> such as modifying the size of individual items or changing constants in the code, there are some other +> options which can be found in the source files in the `config` directory. +
Example configuration ```json { + "appearance": { + "anim": { + "durations": { + "scale": 1 + } + }, + "font": { + "family": { + "material": "Material Symbols Rounded", + "mono": "JetBrains Mono NF", + "sans": "IBM Plex Sans" + }, + "size": { + "scale": 1 + } + }, + "padding": { + "scale": 1 + }, + "rounding": { + "scale": 1 + }, + "spacing": { + "scale": 1 + }, + "transparency": { + "enabled": false, + "base": 0.85, + "layers": 0.4 + } + }, "general": { "apps": { "terminal": ["foot"], diff --git a/config/Appearance.qml b/config/Appearance.qml index 6da7fd9..241c21a 100644 --- a/config/Appearance.qml +++ b/config/Appearance.qml @@ -1,84 +1,14 @@ pragma Singleton import Quickshell -import QtQuick Singleton { - id: root - - readonly property Rounding rounding: Rounding {} - readonly property Spacing spacing: Spacing {} - readonly property Padding padding: Padding {} - readonly property FontStuff font: FontStuff {} - readonly property Anim anim: Anim {} - - component Rounding: QtObject { - readonly property int small: 12 - readonly property int normal: 17 - readonly property int large: 25 - readonly property int full: 1000 - } - - component Spacing: QtObject { - readonly property int small: 7 - readonly property int smaller: 10 - readonly property int normal: 12 - readonly property int larger: 15 - readonly property int large: 20 - } - - component Padding: QtObject { - readonly property int small: 5 - readonly property int smaller: 7 - readonly property int normal: 10 - readonly property int larger: 12 - readonly property int large: 15 - } - - component FontFamily: QtObject { - readonly property string sans: "IBM Plex Sans" - readonly property string mono: "JetBrains Mono NF" - readonly property string material: "Material Symbols Rounded" - } - - component FontSize: QtObject { - readonly property int small: 11 - readonly property int smaller: 12 - readonly property int normal: 13 - readonly property int larger: 15 - readonly property int large: 18 - readonly property int extraLarge: 28 - } - - component FontStuff: QtObject { - readonly property FontFamily family: FontFamily {} - readonly property FontSize size: FontSize {} - } - - component AnimCurves: QtObject { - readonly property list emphasized: [0.05, 0, 2 / 15, 0.06, 1 / 6, 0.4, 5 / 24, 0.82, 0.25, 1, 1, 1] - readonly property list emphasizedAccel: [0.3, 0, 0.8, 0.15, 1, 1] - readonly property list emphasizedDecel: [0.05, 0.7, 0.1, 1, 1, 1] - readonly property list standard: [0.2, 0, 0, 1, 1, 1] - readonly property list standardAccel: [0.3, 0, 1, 1, 1, 1] - readonly property list standardDecel: [0, 0, 0, 1, 1, 1] - readonly property list expressiveFastSpatial: [0.42, 1.67, 0.21, 0.9, 1, 1] - readonly property list expressiveDefaultSpatial: [0.38, 1.21, 0.22, 1, 1, 1] - readonly property list expressiveEffects: [0.34, 0.8, 0.34, 1, 1, 1] - } - - component AnimDurations: QtObject { - readonly property int small: 200 - readonly property int normal: 400 - readonly property int large: 600 - readonly property int extraLarge: 1000 - readonly property int expressiveFastSpatial: 350 - readonly property int expressiveDefaultSpatial: 500 - readonly property int expressiveEffects: 200 - } - - component Anim: QtObject { - readonly property AnimCurves curves: AnimCurves {} - readonly property AnimDurations durations: AnimDurations {} - } + // Literally just here to shorten accessing stuff :woe: + // Also kinda so I can keep accessing it with `Appearance.xxx` instead of `Config.appearance.xxx` + readonly property AppearanceConfig.Rounding rounding: Config.appearance.rounding + readonly property AppearanceConfig.Spacing spacing: Config.appearance.spacing + readonly property AppearanceConfig.Padding padding: Config.appearance.padding + readonly property AppearanceConfig.FontStuff font: Config.appearance.font + readonly property AppearanceConfig.Anim anim: Config.appearance.anim + readonly property AppearanceConfig.Transparency transparency: Config.appearance.transparency } diff --git a/config/AppearanceConfig.qml b/config/AppearanceConfig.qml new file mode 100644 index 0000000..c5c07c1 --- /dev/null +++ b/config/AppearanceConfig.qml @@ -0,0 +1,91 @@ +import Quickshell.Io + +JsonObject { + property Rounding rounding: Rounding {} + property Spacing spacing: Spacing {} + property Padding padding: Padding {} + property FontStuff font: FontStuff {} + property Anim anim: Anim {} + property Transparency transparency: Transparency {} + + component Rounding: JsonObject { + property real scale: 1 + property int small: 12 * scale + property int normal: 17 * scale + property int large: 25 * scale + property int full: 1000 * scale + } + + component Spacing: JsonObject { + property real scale: 1 + property int small: 7 * scale + property int smaller: 10 * scale + property int normal: 12 * scale + property int larger: 15 * scale + property int large: 20 * scale + } + + component Padding: JsonObject { + property real scale: 1 + property int small: 5 * scale + property int smaller: 7 * scale + property int normal: 10 * scale + property int larger: 12 * scale + property int large: 15 * scale + } + + component FontFamily: JsonObject { + property string sans: "IBM Plex Sans" + property string mono: "JetBrains Mono NF" + property string material: "Material Symbols Rounded" + } + + component FontSize: JsonObject { + property real scale: 1 + property int small: 11 * scale + property int smaller: 12 * scale + property int normal: 13 * scale + property int larger: 15 * scale + property int large: 18 * scale + property int extraLarge: 28 * scale + } + + component FontStuff: JsonObject { + property FontFamily family: FontFamily {} + property FontSize size: FontSize {} + } + + component AnimCurves: JsonObject { + property list emphasized: [0.05, 0, 2 / 15, 0.06, 1 / 6, 0.4, 5 / 24, 0.82, 0.25, 1, 1, 1] + property list emphasizedAccel: [0.3, 0, 0.8, 0.15, 1, 1] + property list emphasizedDecel: [0.05, 0.7, 0.1, 1, 1, 1] + property list standard: [0.2, 0, 0, 1, 1, 1] + property list standardAccel: [0.3, 0, 1, 1, 1, 1] + property list standardDecel: [0, 0, 0, 1, 1, 1] + property list expressiveFastSpatial: [0.42, 1.67, 0.21, 0.9, 1, 1] + property list expressiveDefaultSpatial: [0.38, 1.21, 0.22, 1, 1, 1] + property list expressiveEffects: [0.34, 0.8, 0.34, 1, 1, 1] + } + + component AnimDurations: JsonObject { + property real scale: 1 + property int small: 200 * scale + property int normal: 400 * scale + property int large: 600 * scale + property int extraLarge: 1000 * scale + property int expressiveFastSpatial: 350 * scale + property int expressiveDefaultSpatial: 500 * scale + property int expressiveEffects: 200 * scale + } + + component Anim: JsonObject { + property AnimCurves curves: AnimCurves {} + property AnimDurations durations: AnimDurations {} + } + + component Transparency: JsonObject { + property bool enabled: false + property real base: 0.85 + property real layers: 0.4 + } +} diff --git a/config/Config.qml b/config/Config.qml index a4a4a87..4311286 100644 --- a/config/Config.qml +++ b/config/Config.qml @@ -7,6 +7,7 @@ import Quickshell.Io Singleton { id: root + property alias appearance: adapter.appearance property alias general: adapter.general property alias background: adapter.background property alias bar: adapter.bar @@ -31,6 +32,7 @@ Singleton { JsonAdapter { id: adapter + property AppearanceConfig appearance: AppearanceConfig {} property GeneralConfig general: GeneralConfig {} property BackgroundConfig background: BackgroundConfig {} property BarConfig bar: BarConfig {} diff --git a/modules/launcher/WallpaperList.qml b/modules/launcher/WallpaperList.qml index 4e2a175..9c402ad 100644 --- a/modules/launcher/WallpaperList.qml +++ b/modules/launcher/WallpaperList.qml @@ -1,3 +1,5 @@ +pragma ComponentBehavior: Bound + import "items" import qs.services import qs.config @@ -18,11 +20,11 @@ PathView { const max = Config.launcher.maxWallpapers; const maxItemsOnScreen = Math.floor(screenWidth / itemWidth); - const visible = Math.min(maxItemsOnScreen, max, scriptModel.values.length) + const visible = Math.min(maxItemsOnScreen, max, scriptModel.values.length); if (visible === 2) - return 1 - else if (visible > 1 && visible %2 === 0) - return visible - 1 + return 1; + else if (visible > 1 && visible % 2 === 0) + return visible - 1; return visible; } diff --git a/services/Colours.qml b/services/Colours.qml index aef2da3..eab898e 100644 --- a/services/Colours.qml +++ b/services/Colours.qml @@ -1,6 +1,7 @@ pragma Singleton pragma ComponentBehavior: Bound +import qs.config import qs.utils import Quickshell import Quickshell.Io @@ -93,9 +94,9 @@ Singleton { } component Transparency: QtObject { - property bool enabled: false - property real base: 0.8 - property real layers: 0.4 + readonly property bool enabled: Appearance.transparency.enabled + readonly property real base: Appearance.transparency.base - (root.light ? 0.1 : 0) + readonly property real layers: Appearance.transparency.layers } component M3TPalette: QtObject { -- cgit v1.2.3-freya