mirror of
https://github.com/danbulant/dots-hyprland
synced 2026-05-24 12:22:09 +00:00
The systray id is intended for programmatic use rather than frontend presentation. It is recommended to use the tooltipTitle and title attributes when available, and these should be updated upon entry, as their values may change dynamically.
345 lines
17 KiB
QML
345 lines
17 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
|
|
Singleton {
|
|
id: root
|
|
property string filePath: Directories.shellConfigPath
|
|
property alias options: configOptionsJsonAdapter
|
|
property bool ready: false
|
|
|
|
function setNestedValue(nestedKey, value) {
|
|
let keys = nestedKey.split(".");
|
|
let obj = root.options;
|
|
let parents = [obj];
|
|
|
|
// Traverse and collect parent objects
|
|
for (let i = 0; i < keys.length - 1; ++i) {
|
|
if (!obj[keys[i]] || typeof obj[keys[i]] !== "object") {
|
|
obj[keys[i]] = {};
|
|
}
|
|
obj = obj[keys[i]];
|
|
parents.push(obj);
|
|
}
|
|
|
|
// Convert value to correct type using JSON.parse when safe
|
|
let convertedValue = value;
|
|
if (typeof value === "string") {
|
|
let trimmed = value.trim();
|
|
if (trimmed === "true" || trimmed === "false" || !isNaN(Number(trimmed))) {
|
|
try {
|
|
convertedValue = JSON.parse(trimmed);
|
|
} catch (e) {
|
|
convertedValue = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
obj[keys[keys.length - 1]] = convertedValue;
|
|
}
|
|
|
|
FileView {
|
|
path: root.filePath
|
|
watchChanges: true
|
|
onFileChanged: reload()
|
|
onAdapterUpdated: writeAdapter()
|
|
onLoaded: root.ready = true
|
|
onLoadFailed: error => {
|
|
if (error == FileViewError.FileNotFound) {
|
|
writeAdapter();
|
|
}
|
|
}
|
|
|
|
JsonAdapter {
|
|
id: configOptionsJsonAdapter
|
|
property JsonObject policies: JsonObject {
|
|
property int ai: 1 // 0: No | 1: Yes | 2: Local
|
|
property int weeb: 1 // 0: No | 1: Open | 2: Closet
|
|
}
|
|
|
|
property JsonObject ai: JsonObject {
|
|
property string systemPrompt: "## Style\n- Use casual tone, don't be formal! Make sure you answer precisely without hallucination and prefer bullet points over walls of text. You can have a friendly greeting at the beginning of the conversation, but don't repeat the user's question\n\n## Context (ignore when irrelevant)\n- You are a helpful and inspiring sidebar assistant on a {DISTRO} Linux system\n- Desktop environment: {DE}\n- Current date & time: {DATETIME}\n- Focused app: {WINDOWCLASS}\n\n## Presentation\n- Use Markdown features in your response: \n - **Bold** text to **highlight keywords** in your response\n - **Split long information into small sections** with h2 headers and a relevant emoji at the start of it (for example `## 🐧 Linux`). Bullet points are preferred over long paragraphs, unless you're offering writing support or instructed otherwise by the user.\n- Asked to compare different options? You should firstly use a table to compare the main aspects, then elaborate or include relevant comments from online forums *after* the table. Make sure to provide a final recommendation for the user's use case!\n- Use LaTeX formatting for mathematical and scientific notations whenever appropriate. Enclose all LaTeX '$$' delimiters. NEVER generate LaTeX code in a latex block unless the user explicitly asks for it. DO NOT use LaTeX for regular documents (resumes, letters, essays, CVs, etc.).\n"
|
|
property string tool: "functions" // search, functions, or none
|
|
property list<var> extraModels: [
|
|
{
|
|
"api_format": "openai", // Most of the time you want "openai". Use "gemini" for Google's models
|
|
"description": "This is a custom model. Edit the config to add more! | Anyway, this is DeepSeek R1 Distill LLaMA 70B",
|
|
"endpoint": "https://openrouter.ai/api/v1/chat/completions",
|
|
"homepage": "https://openrouter.ai/deepseek/deepseek-r1-distill-llama-70b:free", // Not mandatory
|
|
"icon": "spark-symbolic", // Not mandatory
|
|
"key_get_link": "https://openrouter.ai/settings/keys", // Not mandatory
|
|
"key_id": "openrouter",
|
|
"model": "deepseek/deepseek-r1-distill-llama-70b:free",
|
|
"name": "Custom: DS R1 Dstl. LLaMA 70B",
|
|
"requires_key": true
|
|
}
|
|
]
|
|
}
|
|
|
|
property JsonObject appearance: JsonObject {
|
|
property bool extraBackgroundTint: true
|
|
property int fakeScreenRounding: 2 // 0: None | 1: Always | 2: When not fullscreen
|
|
property JsonObject transparency: JsonObject {
|
|
property bool enable: false
|
|
property bool automatic: true
|
|
property real backgroundTransparency: 0.11
|
|
property real contentTransparency: 0.57
|
|
}
|
|
property JsonObject wallpaperTheming: JsonObject {
|
|
property bool enableAppsAndShell: true
|
|
property bool enableQtApps: true
|
|
property bool enableTerminal: true
|
|
property JsonObject terminalGenerationProps: JsonObject {
|
|
property real harmony: 0.8
|
|
property real harmonizeThreshold: 100
|
|
property real termFgBoost: 0.35
|
|
}
|
|
}
|
|
property JsonObject palette: JsonObject {
|
|
property string type: "auto" // Allowed: auto, scheme-content, scheme-expressive, scheme-fidelity, scheme-fruit-salad, scheme-monochrome, scheme-neutral, scheme-rainbow, scheme-tonal-spot
|
|
}
|
|
}
|
|
|
|
property JsonObject audio: JsonObject {
|
|
// Values in %
|
|
property JsonObject protection: JsonObject {
|
|
// Prevent sudden bangs
|
|
property bool enable: false
|
|
property real maxAllowedIncrease: 10
|
|
property real maxAllowed: 99
|
|
}
|
|
}
|
|
|
|
property JsonObject apps: JsonObject {
|
|
property string bluetooth: "kcmshell6 kcm_bluetooth"
|
|
property string network: "kitty -1 fish -c nmtui"
|
|
property string networkEthernet: "kcmshell6 kcm_networkmanagement"
|
|
property string taskManager: "plasma-systemmonitor --page-name Processes"
|
|
property string terminal: "kitty -1" // This is only for shell actions
|
|
}
|
|
|
|
property JsonObject background: JsonObject {
|
|
property bool fixedClockPosition: false
|
|
property real clockX: -500
|
|
property real clockY: -500
|
|
property bool showClock: true
|
|
property string wallpaperPath: ""
|
|
property string thumbnailPath: ""
|
|
property JsonObject parallax: JsonObject {
|
|
property bool vertical: false
|
|
property bool autoVertical: false
|
|
property bool enableWorkspace: true
|
|
property real workspaceZoom: 1.07 // Relative to your screen, not wallpaper size
|
|
property bool enableSidebar: true
|
|
}
|
|
property string quote: ""
|
|
property bool hideWhenFullscreen: true
|
|
}
|
|
|
|
property JsonObject bar: JsonObject {
|
|
property JsonObject autoHide: JsonObject {
|
|
property bool enable: false
|
|
property bool pushWindows: false
|
|
property JsonObject showWhenPressingSuper: JsonObject {
|
|
property bool enable: true
|
|
property int delay: 140
|
|
}
|
|
}
|
|
property bool bottom: false // Instead of top
|
|
property int cornerStyle: 0 // 0: Hug | 1: Float | 2: Plain rectangle
|
|
property bool borderless: false // true for no grouping of items
|
|
property string topLeftIcon: "spark" // Options: "distro" or any icon name in ~/.config/quickshell/ii/assets/icons
|
|
property bool showBackground: true
|
|
property bool verbose: true
|
|
property bool vertical: false
|
|
property JsonObject resources: JsonObject {
|
|
property bool alwaysShowSwap: true
|
|
property bool alwaysShowCpu: true
|
|
property int memoryWarningThreshold: 95
|
|
property int swapWarningThreshold: 85
|
|
property int cpuWarningThreshold: 90
|
|
}
|
|
property list<string> screenList: [] // List of names, like "eDP-1", find out with 'hyprctl monitors' command
|
|
property JsonObject utilButtons: JsonObject {
|
|
property bool showScreenSnip: true
|
|
property bool showColorPicker: false
|
|
property bool showMicToggle: false
|
|
property bool showKeyboardToggle: true
|
|
property bool showDarkModeToggle: true
|
|
property bool showPerformanceProfileToggle: false
|
|
}
|
|
property JsonObject tray: JsonObject {
|
|
property bool monochromeIcons: true
|
|
property bool showItemId: false
|
|
property bool invertPinnedItems: false // Makes the below a whitelist for the tray and blacklist for the pinned area
|
|
property list<string> pinnedItems: [ "Fcitx" ]
|
|
}
|
|
property JsonObject workspaces: JsonObject {
|
|
property bool monochromeIcons: true
|
|
property int shown: 10
|
|
property bool showAppIcons: true
|
|
property bool alwaysShowNumbers: false
|
|
property int showNumberDelay: 300 // milliseconds
|
|
property list<string> numberMap: ["1", "2"] // Characters to show instead of numbers on workspace indicator
|
|
property bool useNerdFont: false
|
|
}
|
|
property JsonObject weather: JsonObject {
|
|
property bool enable: false
|
|
property bool enableGPS: true // gps based location
|
|
property string city: "" // When 'enableGPS' is false
|
|
property bool useUSCS: false // Instead of metric (SI) units
|
|
property int fetchInterval: 10 // minutes
|
|
}
|
|
}
|
|
|
|
property JsonObject battery: JsonObject {
|
|
property int low: 20
|
|
property int critical: 5
|
|
property bool automaticSuspend: true
|
|
property int suspend: 3
|
|
}
|
|
|
|
property JsonObject conflictKiller: JsonObject {
|
|
property bool autoKillNotificationDaemons: false
|
|
property bool autoKillTrays: false
|
|
}
|
|
|
|
property JsonObject dock: JsonObject {
|
|
property bool enable: false
|
|
property bool monochromeIcons: true
|
|
property real height: 60
|
|
property real hoverRegionHeight: 2
|
|
property bool pinnedOnStartup: false
|
|
property bool hoverToReveal: true // When false, only reveals on empty workspace
|
|
property list<string> pinnedApps: [ // IDs of pinned entries
|
|
"org.kde.dolphin", "kitty",]
|
|
property list<string> ignoredAppRegexes: []
|
|
}
|
|
|
|
property JsonObject interactions: JsonObject {
|
|
property JsonObject scrolling: JsonObject {
|
|
property bool fasterTouchpadScroll: false // Enable faster scrolling with touchpad
|
|
property int mouseScrollDeltaThreshold: 120 // delta >= this then it gets detected as mouse scroll rather than touchpad
|
|
property int mouseScrollFactor: 120
|
|
property int touchpadScrollFactor: 450
|
|
}
|
|
}
|
|
|
|
property JsonObject language: JsonObject {
|
|
property string ui: "auto" // UI language. "auto" for system locale, or specific language code like "zh_CN", "en_US"
|
|
property JsonObject translator: JsonObject {
|
|
property string engine: "auto" // Run `trans -list-engines` for available engines. auto should use google
|
|
property string targetLanguage: "auto" // Run `trans -list-all` for available languages
|
|
property string sourceLanguage: "auto"
|
|
}
|
|
}
|
|
|
|
property JsonObject light: JsonObject {
|
|
property JsonObject night: JsonObject {
|
|
property bool automatic: true
|
|
property string from: "19:00" // Format: "HH:mm", 24-hour time
|
|
property string to: "06:30" // Format: "HH:mm", 24-hour time
|
|
property int colorTemperature: 5000
|
|
}
|
|
}
|
|
|
|
property JsonObject media: JsonObject {
|
|
// Attempt to remove dupes (the aggregator playerctl one and browsers' native ones when there's plasma browser integration)
|
|
property bool filterDuplicatePlayers: true
|
|
}
|
|
|
|
property JsonObject networking: JsonObject {
|
|
property string userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
|
|
}
|
|
|
|
property JsonObject osd: JsonObject {
|
|
property int timeout: 1000
|
|
}
|
|
|
|
property JsonObject osk: JsonObject {
|
|
property string layout: "qwerty_full"
|
|
property bool pinnedOnStartup: false
|
|
}
|
|
|
|
property JsonObject overview: JsonObject {
|
|
property bool enable: true
|
|
property real scale: 0.18 // Relative to screen size
|
|
property real rows: 2
|
|
property real columns: 5
|
|
}
|
|
|
|
property JsonObject resources: JsonObject {
|
|
property int updateInterval: 3000
|
|
}
|
|
|
|
property JsonObject search: JsonObject {
|
|
property int nonAppResultDelay: 30 // This prevents lagging when typing
|
|
property string engineBaseUrl: "https://www.google.com/search?q="
|
|
property list<string> excludedSites: ["quora.com"]
|
|
property bool sloppy: false // Uses levenshtein distance based scoring instead of fuzzy sort. Very weird.
|
|
property JsonObject prefix: JsonObject {
|
|
property bool showDefaultActionsWithoutPrefix: true
|
|
property string action: "/"
|
|
property string clipboard: ";"
|
|
property string emojis: ":"
|
|
property string math: "="
|
|
property string shellCommand: "$"
|
|
property string webSearch: "?"
|
|
}
|
|
}
|
|
|
|
property JsonObject sidebar: JsonObject {
|
|
property bool keepRightSidebarLoaded: true
|
|
property JsonObject translator: JsonObject {
|
|
property int delay: 300 // Delay before sending request. Reduces (potential) rate limits and lag.
|
|
}
|
|
property JsonObject booru: JsonObject {
|
|
property bool allowNsfw: false
|
|
property string defaultProvider: "yandere"
|
|
property int limit: 20
|
|
property JsonObject zerochan: JsonObject {
|
|
property string username: "[unset]"
|
|
}
|
|
}
|
|
property JsonObject cornerOpen: JsonObject {
|
|
property bool enable: true
|
|
property bool bottom: false
|
|
property bool valueScroll: true
|
|
property bool clickless: false
|
|
property real cornerRegionWidth: 60
|
|
property real cornerRegionHeight: 2
|
|
property bool visualize: false
|
|
}
|
|
}
|
|
|
|
property JsonObject time: JsonObject {
|
|
// https://doc.qt.io/qt-6/qtime.html#toString
|
|
property string format: "hh:mm"
|
|
property string shortDateFormat: "dd/MM"
|
|
property string dateFormat: "ddd, dd/MM"
|
|
property JsonObject pomodoro: JsonObject {
|
|
property string alertSound: ""
|
|
property int breakTime: 300
|
|
property int cyclesBeforeLongBreak: 4
|
|
property int focus: 1500
|
|
property int longBreak: 900
|
|
}
|
|
}
|
|
|
|
property JsonObject windows: JsonObject {
|
|
property bool showTitlebar: true // Client-side decoration for shell apps
|
|
property bool centerTitle: true
|
|
}
|
|
|
|
property JsonObject hacks: JsonObject {
|
|
property int arbitraryRaceConditionDelay: 20 // milliseconds
|
|
}
|
|
|
|
property JsonObject screenshotTool: JsonObject {
|
|
property bool showContentRegions: true
|
|
}
|
|
}
|
|
}
|
|
}
|