// This file is parsed with a custom JSONC parser.
// Don't expect every JSONC feature in... say, vscode, to work.
{
    // General stuff
    "ai": {
        "defaultGPTProvider": "ollama_llama_3_2",
        "defaultTemperature": 0.5,
        "enhancements": true,
        "charsEachUpdate": 50, // Lower = smoother update rate, but more update lag
        "keep_alive": -1, // For ollama. -1 means forever
        "useHistory": false,
        "safety": true,
        "writingCursor": " ...", // Warning: Using weird characters can mess up Markdown rendering
        "proxyUrl": null, // Can be "socks5://127.0.0.1:9050" or "http://127.0.0.1:8080" for example. Leave it blank if you don't need it.
        "extraGptModels": {
            // Below is an example. Copy to user_options.jsonc and edit it
            // The base url is conveniently ollama's btw
            // "model_id": {
            //     "name": "User-added model",
            //     "logo_name": "ollama-symbolic",
            //     "description": "A model added by the user",
            //     "base_url": "http://localhost:11434/v1/chat/completions",
            //     "key_get_url": "",
            //     "requires_key": false,
            //     "key_file": "api_key_file.txt",
            //     "model": "model-name"
            // },
        }
    },
    "animations": {
        "choreographyDelay": 35,
        "durationSmall": 110,
        "durationLarge": 180
    },
    "appearance": {
        "autoDarkMode": { // Turns on dark mode in certain hours. Time in 24h format
            "enabled": false,
            "from": "18:10",
            "to": "6:10"
        },
        "borderless": false, // Uhm experimental...
        "keyboardUseFlag": false, // Use flag emoji instead of abbreviation letters
        "layerSmoke": false,
        "layerSmokeStrength": 0.2,
        "barRoundCorners": 1, // 0: No, 1: Yes
        "fakeScreenRounding": 2 // 0: None | 1: Always | 2: When not fullscreen
    },
    "apps": {
        "bluetooth": "blueberry",
        "imageViewer": "loupe",
        "network": "XDG_CURRENT_DESKTOP=\"gnome\" gnome-control-center wifi",
        "settings": "XDG_CURRENT_DESKTOP=\"gnome\" gnome-control-center",
        "taskManager": "gnome-usage",
        "terminal": "foot" // This is only for shell actions
    },
    "bar": {
        // Whether to show Swap and CPU usage when there's media. RAM is always shown.
        "alwaysShowFullResources": false, 
        // Array of bar modes for each monitor. Hit Ctrl+Alt+Slash to cycle.
        // Modes: "normal", "focus" (workspace indicator only), "nothing"
        // Example for four monitors: ["normal", "focus", "normal", "nothing"]
        "modes": [
            "normal"
        ]
    },
    "battery": {
        "low": 20,
        "critical": 10,
        "warnLevels": [
            20,
            15,
            5
        ],
        "warnTitles": [
            "Low battery",
            "Very low battery",
            "Critical Battery"
        ],
        "warnMessages": [
            "Plug in the charger",
            "You there?",
            "PLUG THE CHARGER ALREADY"
        ],
        "suspendThreshold": 3
    },
    "brightness": {
        // Object of controller names for each monitor, either "brightnessctl" or "ddcutil" or "auto"
        // "default" one will be used if unspecified
        // Examples
        // "eDP-1": "brightnessctl",
        // "DP-1": "ddcutil",
        "controllers": {
            "default": "auto"
        }
    },
    "cheatsheet": {
        "keybinds": {
            "configPath": "" // Path to hyprland keybind config file. Leave empty for default (~/.config/hypr/hyprland/keybinds.conf)
        }
    },
    "gaming": {
        "crosshair": {
            "size": 20,
            "color": "rgba(113,227,32,0.9)"
        }
    },
    "i18n": {
        "langCode": "", //Customize the locale, such as zh_CN,Optional value references "~/.config/ags/i18n/locales/"
        "extraLogs": false
    },
    "monitors": {
        "scaleMethod": "division" // Either "division" [default] or "gdk"
    },
    "music": {
        "preferredPlayer": "plasma-browser-integration"
    },
    "onScreenKeyboard": {
        "layout": "qwerty_full" // See modules/onscreenkeyboard/onscreenkeyboard.js for available layouts
    },
    "overview": {
        "scale": 0.18, // Relative to screen size
        "numOfRows": 2,
        "numOfCols": 5,
        "wsNumScale": 0.09,
        "wsNumMarginScale": 0.07
    },
    "sidebar": {
        "image": {
            "columns": 2,
            "batchCount": 20,
            "allowNsfw": false
        },
        "pages": {
            "order": [
                "apis",
                "tools"
            ],
            "defaultPage": "apis",
            "apis": {
                "order": [
                    "gemini",
                    "gpt",
                    "waifu",
                    "booru"
                ],
                "defaultPage": "gemini"
            }
        },
        "quickToggles": {
            "order": [
                "wifi",
                "bluetooth",
                "nightlight",
                "gamemode",
                "idleinhibitor",
                "cloudflarewarp"
            ]
        },
        "calendar": {
            "expandByDefault": true
        }
    },
    "search": {
        "enableFeatures": {
            "actions": true,
            "commands": true,
            "mathResults": true,
            "directorySearch": true,
            "aiSearch": true,
            "webSearch": true
        },
        "engineBaseUrl": "https://www.google.com/search?q=",
        "excludedSites": [
            "quora.com"
        ]
    },
    "time": {
        // See https://docs.gtk.org/glib/method.DateTime.format.html
        // Here's the 12h format: "%I:%M%P"
        // For seconds, add "%S" and set interval to 1000
        "format": "%H:%M",
        "interval": 5000,
        "dateFormatLong": "%A, %d/%m", // On bar
        "dateInterval": 5000,
        "dateFormat": "%d/%m", // On notif time
        "calendarDateFormat": "%d %B %Y"
    },
    "weather": {
        "city": "",
        "preferredUnit": "C" // Either C or F
    },
    "workspaces": {
        "shown": 10
    },
    "dock": {
        "enabled": false,
        "hiddenThickness": 5,
        "pinnedApps": [
            "firefox",
            "org.gnome.Nautilus"
        ],
        "layer": "top",
        "monitorExclusivity": true, // Dock will move to other monitor along with focus if enabled
        "searchPinnedAppIcons": false, // Try to search for the correct icon if the app class isn't an icon name
        "trigger": [
            "client-added",
            "client-removed"
        ], // client_added, client_move, workspace_active, client_active
        // Automatically hide dock after `interval` ms since trigger
        "autoHide": [
            {
                "trigger": "client-added",
                "interval": 500
            },
            {
                "trigger": "client-removed",
                "interval": 500
            }
        ]
    },
    // Longer stuff
    "icons": {
        // Find the window's icon by its class with levenshteinDistance
        // The file names are processed at startup, so if there
        // are too many files in the search path it'll affect performance
        // Example: ["/usr/share/icons/Tela-nord/scalable/apps"]
        "searchPaths": [
            ""
        ],
        "symbolicIconTheme": {
            "dark": "Adwaita",
            "light": "Adwaita"
        },
        "substitutions": {
            "code-url-handler": "visual-studio-code",
            "Code": "visual-studio-code",
            "GitHub Desktop": "github-desktop",
            "Minecraft* 1.20.1": "minecraft",
            "gnome-tweaks": "org.gnome.tweaks",
            "pavucontrol-qt": "pavucontrol",
            "wps": "wps-office2019-kprometheus",
            "wpsoffice": "wps-office2019-kprometheus",
            "footclient": "foot",
            "": "image-missing"
        },
        "regexSubstitutions": [
            {
                "regex": "/^steam_app_(\\d+)$/",
                "replace": "steam_icon_$1"
            }
        ]
    },
    "keybinds": {
        // Format: "Modifier_1+...+Modifier_n+key". The key is CaSe SeNsItIvE!
        // Modifiers: Shift Ctrl Alt Hyper Meta
        // See https://docs.gtk.org/gdk3/index.html#constants for keys (listed as KEY_key)
        // You can assign multiple keybinds for the same action. Just split them with a comma
        // Example: "Ctrl+Page_Down, ctrl+Tab" 
        "overview": {
            "altMoveLeft": "Ctrl+B",
            "altMoveRight": "Ctrl+F",
            "deleteToEnd": "Ctrl+K"
        },
        "sidebar": {
            "apis": {
                "nextTab": "Page_Down",
                "prevTab": "Page_Up"
            },
            "options": { // Right sidebar
                "nextTab": "Page_Down",
                "prevTab": "Page_Up"
            },
            "expand": "Ctrl+E",
            "pin": "Ctrl+P",
            "cycleTab": "Ctrl+Tab",
            "nextTab": "Ctrl+Page_Down",
            "prevTab": "Ctrl+Page_Up"
        },
        "cheatsheet": {
            "keybinds": {
                "nextTab": "Page_Down",
                "prevTab": "Page_Up"
            },
            "nextTab": "Ctrl+Page_Down",
            "prevTab": "Ctrl+Page_Up",
            "cycleTab": "Ctrl+Tab"
        }
    }
}