pragma Singleton import QtQuick import Quickshell import "themes" QtObject { id: root readonly property var theme: Goldencity // ──────────────────────────────────────────────────────────────────────── // Widgets // ──────────────────────────────────────────────────────────────────────── property bool enableBgDate: true property bool sideBarSysInfo: true property bool sideBarMpris: true property bool sideBarWeather: true property string sideBarPosition: "right" // "left" or "right" property bool enablePolkit: true // ──────────────────────────────────────────────────────────────────────── // BAR // ──────────────────────────────────────────────────────────────────────── property string barPosition: "top" property int barHeight: 35 property int margin: 15 property int radius: 20 // ──────────────────────────────────────────────────────────────────────── // FRAME // ──────────────────────────────────────────────────────────────────────── property string frameVariant: "card" // "card" or "bar" property int frameBorderWidth: 3 property int frameBarPadTop: 5 // bar variant: padding from top edge property int frameBarPadBottom: 5 // bar variant: padding from bottom edge // ── Module Lists ────────────────────────────────────────────────────────── property var leftModules: ["Logo", "Stats", "Crypto"] property var centerModules: ["Workspace"] property var rightModules: ["Tray", "Notifications", "Volume", "Network", "Battery" ,"Clock"] // ── Logo ───────────────────────────────────────────────────────────── property int logoIconSize: 23 // icon font size; container width scales with it property string logoIcon: "󱄅" // Nerd Font glyph for the logo property int logoSpinDuration: 600 // spin animation duration in ms // ── Panel Styling ───────────────────────────────────────────────────────── property int panelBorderWidth: 1 property int moduleSpacing: 5 // space between modules within a panel property int panelSpacing: 12 // gap between left / center / right panels property int moduleHeight: 23 // default chip height for bar modules // ── Popup Styling ───────────────────────────────────────────────────────── property int popupRadius: 18 property int popupBorderWidth: 1 property int popupAnimDuration: 250 property string popupAnimType: "bubbleslide" // "bubbleslide" or "slide" // ── Clock Module ───────────────────────────────────────────────────────── property bool clockExtendEnabled: true // seconds extension on hover for clock // ── Timezone (IANA name, e.g. "America/New_York", "Europe/London") ────────── // Leave empty to use the system timezone. property string timezone: "" // Date format used in the clock popup and background date widget. // "MDY" → month/day/year (e.g. May 14, 2026) // "DMY" → day/month/year (e.g. 14 May 2026) property string dateFormat: "DMY" // ── Tray Styling ───────────────────────────────────────────────────────── property int trayToggleSize: 23 // size of the expand/collapse arrow button property int trayIconSize: 20 // size of each system tray item icon // ── Stats Styling ───────────────────────────────────────────────────────── property int statsRingSize: 22 property int statsRingFontSize: 12 property int statsIconSize: 10 // Where the percentage label appears when stats are expanded. // "right" → label to the right of the ring; "left" → label to the left. property string statsLabelPosition: "right" // If true, percentage labels are visible on startup without clicking. property bool statsStartExpanded: false property bool statsShowCpu: true property bool statsShowMem: true property bool statsShowDisk: true property bool statsShowCpuTemp: true property bool statsShowGpuTemp: true // ── Volume Module ───────────────────────────────────────────────────────── property bool volumeShakeEnabled: true // rotation shake for volume chip property int volumeIconSize: 20 property int volumeSliderHeight: 2 property int volumeHandleSize: 20 property int volumePopupWidth: 280 property int volumeOutputMax: 100 property int volumeInputMax: 200 // ──────────────────────────────────────────────────────────────────────── // NOTIFICATIONS // ──────────────────────────────────────────────────────────────────────── property bool notificationShakeEnabled: true // bell ringing shake for notifications property string notificationPosition: "topright" property int notificationHistorySize: 50 // ── Toast timeouts (milliseconds) ───────────────────────────────────────── property int notifTimeoutLow: 3500 property int notifTimeoutNormal: 5000 property int notifTimeoutCritical: 0 property int notifIconSize: 18 property int notifToastEdgePad: 10 // extra gap between toast cards and the frame border // ──────────────────────────────────────────────────────────────────────── // LAUNCHER // ──────────────────────────────────────────────────────────────────────── property string launcherScript: Quickshell.env("HOME") + "/.config/quickshell/launcher/launcher.sh" property string launcherCacheDir: "/tmp/qs_launcher" property bool launcherCloseOnClickOutside: true property bool launcherSelectFirst: false property bool launcherMipmapIcons: false // ──────────────────────────────────────────────────────────────────────── // CRYPTO // ──────────────────────────────────────────────────────────────────────── // ── Coin/currency pairs to cycle ────────────────────────────────────────── // Each entry is a { coin, currency } object. The bar chip fetches one pair // per timer tick and auto-rotates to the next after each successful fetch. // // coin – CoinGecko coin ID, e.g. "bitcoin", "monero", "solana" // currency – quote currency: "usd", "eur", "brl", "btc", "eth", … // // Single pair → [{ coin: "bitcoin", currency: "usd" }] // Three pairs → [{ coin: "bitcoin", currency: "usd" }, // { coin: "monero", currency: "usd" }, // { coin: "solana", currency: "brl" }] // // This list is the *default*; pairs can be added/removed live in the // Settings popup and those changes are persisted across restarts. property var cryptoPairs: [{ coin: "bitcoin", currency: "usd" }, { coin: "ethereum", currency: "eur" }, { coin: "monero", currency: "usd" }, { coin: "bitcoin", currency: "eur" }, { coin: "bitcoin", currency: "brl" }, { coin: "ethereum", currency: "usd" }] // ── Compact label decimals ──────────────────────────────────────────────── // 0 → "80k" // 1 → "80.0k" (default) // 3 → "80.000k" property int cryptoDecimals: 2 // ── Poll interval ───────────────────────────────────────────────────────── // Seconds between CoinGecko requests. Each tick fetches one pair // and advances to the next in the cycle. Free tier allows ~30 req/min. property int cryptoRefreshSec: 120 // ── Bar rotate interval ──────────────────────────────────────────────────── // Seconds between auto-rotating the displayed pair. 0 = disabled. // Uses cached data (no API call), instant switching. property int cryptoRotateSec: 10 // ── Bar chip icon ───────────────────────────────────────────────────────── // Show the coin icon glyph ("󰿤") on the bar chip. property bool cryptoShowIcon: true // ──────────────────────────────────────────────────────────────────────── // WEATHER // ──────────────────────────────────────────────────────────────────────── property string weatherLocation: "" // city name, e.g. "London" or "New+York"; empty → auto-detect from IP property int weatherRefreshMin: 30 // update interval in minutes }