import QtQuick import QtQuick.Layouts import qs.services import qs.modules.common import qs.modules.common.widgets ContentPage { forceWidth: true ContentSection { icon: "neurology" title: Translation.tr("AI") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("System prompt") text: Config.options.ai.systemPrompt wrapMode: TextEdit.Wrap onTextChanged: { Qt.callLater(() => { Config.options.ai.systemPrompt = text; }); } } } ContentSection { icon: "music_cast" title: Translation.tr("Music Recognition") ConfigSpinBox { icon: "timer_off" text: Translation.tr("Total duration timeout (s)") value: Config.options.musicRecognition.timeout from: 10 to: 100 stepSize: 2 onValueChanged: { Config.options.musicRecognition.timeout = value; } } ConfigSpinBox { icon: "av_timer" text: Translation.tr("Polling interval (s)") value: Config.options.musicRecognition.interval from: 2 to: 10 stepSize: 1 onValueChanged: { Config.options.musicRecognition.interval = value; } } } ContentSection { icon: "cell_tower" title: Translation.tr("Networking") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("User agent (for services that require it)") text: Config.options.networking.userAgent wrapMode: TextEdit.Wrap onTextChanged: { Config.options.networking.userAgent = text; } } } ContentSection { icon: "memory" title: Translation.tr("Resources") ConfigSpinBox { icon: "av_timer" text: Translation.tr("Polling interval (ms)") value: Config.options.resources.updateInterval from: 100 to: 10000 stepSize: 100 onValueChanged: { Config.options.resources.updateInterval = value; } } } ContentSection { icon: "file_open" title: Translation.tr("Save paths") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Video Recording Path") text: Config.options.screenRecord.savePath wrapMode: TextEdit.Wrap onTextChanged: { Config.options.screenRecord.savePath = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Screenshot Path (leave empty to just copy)") text: Config.options.screenSnip.savePath wrapMode: TextEdit.Wrap onTextChanged: { Config.options.screenSnip.savePath = text; } } } ContentSection { icon: "search" title: Translation.tr("Search") ConfigSwitch { text: Translation.tr("Use Levenshtein distance-based algorithm instead of fuzzy") checked: Config.options.search.sloppy onCheckedChanged: { Config.options.search.sloppy = checked; } StyledToolTip { text: Translation.tr("Could be better if you make a ton of typos,\nbut results can be weird and might not work with acronyms\n(e.g. \"GIMP\" might not give you the paint program)") } } ContentSubsection { title: Translation.tr("Prefixes") ConfigRow { uniform: true MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Action") text: Config.options.search.prefix.action wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.action = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Clipboard") text: Config.options.search.prefix.clipboard wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.clipboard = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Emojis") text: Config.options.search.prefix.emojis wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.emojis = text; } } } ConfigRow { uniform: true MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Math") text: Config.options.search.prefix.math wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.math = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Shell command") text: Config.options.search.prefix.shellCommand wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.shellCommand = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Web search") text: Config.options.search.prefix.webSearch wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.webSearch = text; } } } } ContentSubsection { title: Translation.tr("Web search") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Base URL") text: Config.options.search.engineBaseUrl wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.engineBaseUrl = text; } } } } // There's no update indicator in ii for now so we shouldn't show this yet // ContentSection { // icon: "deployed_code_update" // title: Translation.tr("System updates (Arch only)") // ConfigSwitch { // text: Translation.tr("Enable update checks") // checked: Config.options.updates.enableCheck // onCheckedChanged: { // Config.options.updates.enableCheck = checked; // } // } // ConfigSpinBox { // icon: "av_timer" // text: Translation.tr("Check interval (mins)") // value: Config.options.updates.checkInterval // from: 60 // to: 1440 // stepSize: 60 // onValueChanged: { // Config.options.updates.checkInterval = value; // } // } // } ContentSection { icon: "weather_mix" title: Translation.tr("Weather") ConfigRow { ConfigSwitch { buttonIcon: "assistant_navigation" text: Translation.tr("Enable GPS based location") checked: Config.options.bar.weather.enableGPS onCheckedChanged: { Config.options.bar.weather.enableGPS = checked; } } ConfigSwitch { buttonIcon: "thermometer" text: Translation.tr("Fahrenheit unit") checked: Config.options.bar.weather.useUSCS onCheckedChanged: { Config.options.bar.weather.useUSCS = checked; } StyledToolTip { text: Translation.tr("It may take a few seconds to update") } } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("City name") text: Config.options.bar.weather.city wrapMode: TextEdit.Wrap onTextChanged: { Config.options.bar.weather.city = text; } } ConfigSpinBox { icon: "av_timer" text: Translation.tr("Polling interval (m)") value: Config.options.bar.weather.fetchInterval from: 5 to: 50 stepSize: 5 onValueChanged: { Config.options.bar.weather.fetchInterval = value; } } } }