mirror of
https://github.com/danbulant/dots-hyprland
synced 2026-05-19 04:08:48 +00:00
360 lines
18 KiB
QML
360 lines
18 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.6
|
|
property real harmonizeThreshold: 100
|
|
property real termFgBoost: 0.35
|
|
property bool forceDarkMode: false
|
|
}
|
|
}
|
|
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 JsonObject lockBlur: JsonObject {
|
|
property bool enable: false
|
|
property int radius: 100
|
|
property bool centerClock: true
|
|
property bool showLockedText: true
|
|
property real extraZoom: 1.1
|
|
}
|
|
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: true // Makes the below a whitelist for the tray and blacklist for the pinned area
|
|
property list<string> pinnedItems: [ ]
|
|
}
|
|
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 deadPixelWorkaround: JsonObject { // Hyprland leaves out 1 pixel on the right for interactions
|
|
property bool enable: false
|
|
}
|
|
}
|
|
|
|
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 wallpaperSelector: JsonObject {
|
|
property bool useSystemFileDialog: false
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
}
|
|
}
|