diff --git a/noctalia/colors.json b/noctalia/colors.json new file mode 100644 index 0000000..fb88025 --- /dev/null +++ b/noctalia/colors.json @@ -0,0 +1,18 @@ +{ + "mError": "#f38ba8", + "mHover": "#94e2d5", + "mOnError": "#11111b", + "mOnHover": "#11111b", + "mOnPrimary": "#11111b", + "mOnSecondary": "#11111b", + "mOnSurface": "#cdd6f4", + "mOnSurfaceVariant": "#a3b4eb", + "mOnTertiary": "#11111b", + "mOutline": "#4c4f69", + "mPrimary": "#cba6f7", + "mSecondary": "#fab387", + "mShadow": "#11111b", + "mSurface": "#1e1e2e", + "mSurfaceVariant": "#313244", + "mTertiary": "#94e2d5" +} diff --git a/noctalia/plugins.json b/noctalia/plugins.json new file mode 100644 index 0000000..8c7d7b9 --- /dev/null +++ b/noctalia/plugins.json @@ -0,0 +1,16 @@ +{ + "sources": [ + { + "enabled": true, + "name": "Noctalia Plugins", + "url": "https://github.com/noctalia-dev/noctalia-plugins" + } + ], + "states": { + "polkit-agent": { + "enabled": true, + "sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins" + } + }, + "version": 2 +} diff --git a/noctalia/plugins/polkit-agent/Main.qml b/noctalia/plugins/polkit-agent/Main.qml new file mode 100644 index 0000000..83948ff --- /dev/null +++ b/noctalia/plugins/polkit-agent/Main.qml @@ -0,0 +1,50 @@ +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Effects +import QtQuick +import Quickshell +import Quickshell.Services.Polkit +import Quickshell.Wayland +import qs.Commons +import qs.Widgets +import qs.Services.UI + +Item { + id: root + property var pluginApi: null + + PolkitAgent { + id: agent + + onIsActiveChanged: { + if (isActive) { + openWindow() + } else { + closeWindow() + } + } + } + + property var window: null + + function openWindow() { + if (window === null) { + window = Qt.createComponent("PolkitWindow.qml").createObject(root, { + flow: agent.flow, + pluginApi: Qt.binding(function() { return root.pluginApi }) + }); + window.visible = true; + } else { + window.flow = agent.flow + window.pluginApi = root.pluginApi + window.visible = true + } + } + + function closeWindow() { + if (window !== null) { + window.destroy(); + window = null; + } + } +} diff --git a/noctalia/plugins/polkit-agent/PolkitWindow.qml b/noctalia/plugins/polkit-agent/PolkitWindow.qml new file mode 100644 index 0000000..82278d4 --- /dev/null +++ b/noctalia/plugins/polkit-agent/PolkitWindow.qml @@ -0,0 +1,211 @@ +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Effects +import QtQuick +import Quickshell +import Quickshell.Services.Polkit +import Quickshell.Wayland +import qs.Commons +import qs.Widgets +import qs.Services.UI + +PanelWindow { + id: polkitWindow + + property AuthFlow flow + property var pluginApi + + Connections { + target: flow + function onFailedChanged() { + if (flow && flow.failed) { + ToastService.showError( + pluginApi ? pluginApi.tr("error.failed.title") : "Authentication Failed", + pluginApi ? pluginApi.tr("error.failed.message") : "The password you entered was incorrect." + ) + } + } + } + + // Layer above everything else (critical system prompt) + WlrLayershell.layer: WlrLayer.Overlay + WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive + + readonly property real shadowPadding: Style.shadowBlurMax + Style.marginL + + // Explicit size - include shadowPadding so the shadow isn't clipped at window corners + implicitWidth: 400 * Style.uiScaleRatio + shadowPadding * 2 + implicitHeight: contentLayout.implicitHeight + (Style.marginL * 2) + shadowPadding * 2 + + color: "transparent" + + Item { + id: contentContainer + anchors.fill: parent + anchors.margins: shadowPadding + focus: true + + Keys.onPressed: function(event) { + if (!flow) return; + + if (Keybinds.checkKey(event, "escape", Settings)) { + flow.cancelAuthenticationRequest(); + event.accepted = true; + } else if (Keybinds.checkKey(event, "enter", Settings)) { + if (passwordInput.text !== "") { + flow.submit(passwordInput.text); + passwordInput.text = ""; + } + event.accepted = true; + } + } + + + transform: Translate { + id: shakeTranslate + x: 0 + } + + // Error animation + SequentialAnimation { + id: errorShake + running: flow && flow.failed + loops: 1 + + NumberAnimation { target: shakeTranslate; property: "x"; from: 0; to: -10; duration: 50; easing.type: Easing.InOutQuad } + NumberAnimation { target: shakeTranslate; property: "x"; from: -10; to: 10; duration: 50; easing.type: Easing.InOutQuad } + NumberAnimation { target: shakeTranslate; property: "x"; from: 10; to: -10; duration: 50; easing.type: Easing.InOutQuad } + NumberAnimation { target: shakeTranslate; property: "x"; from: -10; to: 10; duration: 50; easing.type: Easing.InOutQuad } + NumberAnimation { target: shakeTranslate; property: "x"; from: 10; to: 0; duration: 50; easing.type: Easing.InOutQuad } + } + + // Shadow effect (behind background) + NDropShadow { + anchors.fill: customBackground + source: customBackground + autoPaddingEnabled: true + z: -1 + } + + Rectangle { + id: customBackground + anchors.fill: parent + radius: Style.radiusL + color: Qt.alpha(Color.mSurface, 0.95) + border.color: (flow && (flow.failed || flow.supplementaryIsError)) ? Color.mError : Color.mOutline + border.width: Style.borderS + + Behavior on border.color { + ColorAnimation { duration: Style.animationFast } + } + } + + ColumnLayout { + id: contentLayout + anchors.centerIn: parent + width: parent.width - (Style.marginL * 2) + spacing: Style.marginM + + // Header with Icon + RowLayout { + Layout.fillWidth: true + spacing: Style.marginM + + NImageRounded { + Layout.preferredWidth: Style.fontSizeXXL * 2 + Layout.preferredHeight: Style.fontSizeXXL * 2 + imagePath: (flow && flow.iconName) ? Quickshell.iconPath(flow.iconName) : "" + fallbackIcon: "lock" + borderWidth: 0 + } + + ColumnLayout { + Layout.fillWidth: true + spacing: Style.marginXS + + NText { + text: flow ? flow.message : (pluginApi ? pluginApi.tr("window.title") : "Authentication Required") + pointSize: Style.fontSizeL + font.weight: Style.fontWeightBold + color: Color.mOnSurface + wrapMode: Text.Wrap + Layout.fillWidth: true + } + + NText { + text: flow ? flow.actionId : "" + pointSize: Style.fontSizeXS + color: Color.mOnSurfaceVariant + wrapMode: Text.Wrap + Layout.fillWidth: true + visible: text !== "" + } + } + } + + // Supplementary Message (Error or prompt) + NText { + visible: flow && flow.supplementaryMessage !== "" + text: flow ? flow.supplementaryMessage : "" + pointSize: Style.fontSizeS + color: (flow && flow.supplementaryIsError) ? Color.mError : Color.mOnSurfaceVariant + wrapMode: Text.Wrap + Layout.fillWidth: true + } + + // Input Field + NTextInput { + id: passwordInput + Layout.fillWidth: true + placeholderText: flow ? flow.inputPrompt : (pluginApi ? pluginApi.tr("prompt.password") : "Password") + label: (flow && flow.isResponseRequired) ? (pluginApi ? pluginApi.tr("prompt.password") : "Password") : "" + inputItem.echoMode: (flow && !flow.responseVisible) ? TextInput.Password : TextInput.Normal + visible: flow && flow.isResponseRequired + + onAccepted: { + if (flow) { + flow.submit(passwordInput.text) + passwordInput.text = "" + } + } + } + + // Actions + RowLayout { + Layout.fillWidth: true + Layout.topMargin: Style.marginS + spacing: Style.marginM + + Item { Layout.fillWidth: true } // Spacer + + NButton { + text: pluginApi ? pluginApi.tr("action.cancel") : "Cancel" + backgroundColor: Color.mSurfaceVariant + textColor: Color.mOnSurfaceVariant + outlined: false + onClicked: { + if (flow) flow.cancelAuthenticationRequest() + } + } + + NButton { + text: pluginApi ? pluginApi.tr("action.authenticate") : "Authenticate" + backgroundColor: Color.mPrimary + textColor: Color.mOnPrimary + enabled: flow && flow.isResponseRequired + onClicked: { + if (flow) { + flow.submit(passwordInput.text) + passwordInput.text = "" + } + } + } + } + } + } + + // Focus handling + Component.onCompleted: { + passwordInput.inputItem.forceActiveFocus() + } +} diff --git a/noctalia/plugins/polkit-agent/README.md b/noctalia/plugins/polkit-agent/README.md new file mode 100644 index 0000000..2200fa6 --- /dev/null +++ b/noctalia/plugins/polkit-agent/README.md @@ -0,0 +1,13 @@ +# Polkit Agent + +This plugin provides a Polkit authentication agent for Noctalia. It allows you to authenticate actions that require elevated privileges directly within the shell. + +![Preview](preview.png) + +## Important + +To use this plugin, you **must disable or uninstall your existing polkit authentication agent** (e.g., `polkit-gnome`, `polkit-kde-agent`, `lxpolkit`, etc). + +Having multiple polkit agents running simultaneously will cause conflicts and prevent this plugin from working correctly. + +> You may need to **restart your session or computer** after enabling this plugin for the changes to take effect and for the new agent to be registered properly. \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/de.json b/noctalia/plugins/polkit-agent/i18n/de.json new file mode 100644 index 0000000..d52d98c --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/de.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Authentifizierung erforderlich" + }, + "prompt": { + "password": "Passwort" + }, + "action": { + "cancel": "Abbrechen", + "authenticate": "Authentifizieren" + }, + "error": { + "failed": { + "title": "Authentifizierung fehlgeschlagen", + "message": "Das eingegebene Passwort war falsch." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/en.json b/noctalia/plugins/polkit-agent/i18n/en.json new file mode 100644 index 0000000..8beb58c --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/en.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Authentication Required" + }, + "prompt": { + "password": "Password" + }, + "action": { + "cancel": "Cancel", + "authenticate": "Authenticate" + }, + "error": { + "failed": { + "title": "Authentication Failed", + "message": "The password you entered was incorrect." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/es.json b/noctalia/plugins/polkit-agent/i18n/es.json new file mode 100644 index 0000000..e20df44 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/es.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Autenticación requerida" + }, + "prompt": { + "password": "Contraseña" + }, + "action": { + "cancel": "Cancelar", + "authenticate": "Autenticar" + }, + "error": { + "failed": { + "title": "Autenticación fallida", + "message": "La contraseña introducida es incorrecta." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/fr.json b/noctalia/plugins/polkit-agent/i18n/fr.json new file mode 100644 index 0000000..20b0a1a --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/fr.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Authentification requise" + }, + "prompt": { + "password": "Mot de passe" + }, + "action": { + "cancel": "Annuler", + "authenticate": "S'authentifier" + }, + "error": { + "failed": { + "title": "Authentification échouée", + "message": "Le mot de passe saisi est incorrect." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/hu.json b/noctalia/plugins/polkit-agent/i18n/hu.json new file mode 100644 index 0000000..7b7cc1d --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/hu.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Hitelesítés szükséges" + }, + "prompt": { + "password": "Jelszó" + }, + "action": { + "cancel": "Mégse", + "authenticate": "Hitelesítés" + }, + "error": { + "failed": { + "title": "Hitelesítés sikertelen", + "message": "A megadott jelszó helytelen volt." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/ja.json b/noctalia/plugins/polkit-agent/i18n/ja.json new file mode 100644 index 0000000..a75d265 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/ja.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "認証が必要です" + }, + "prompt": { + "password": "パスワード" + }, + "action": { + "cancel": "キャンセル", + "authenticate": "認証" + }, + "error": { + "failed": { + "title": "認証に失敗しました", + "message": "入力されたパスワードが正しくありません。" + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/ko-KR.json b/noctalia/plugins/polkit-agent/i18n/ko-KR.json new file mode 100644 index 0000000..8eaa4df --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/ko-KR.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "인증 필요" + }, + "prompt": { + "password": "비밀번호" + }, + "action": { + "cancel": "취소", + "authenticate": "인증" + }, + "error": { + "failed": { + "title": "인증 실패", + "message": "입력한 비밀번호가 올바르지 않습니다." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/ku.json b/noctalia/plugins/polkit-agent/i18n/ku.json new file mode 100644 index 0000000..4459ce1 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/ku.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Nasname pêwîst e" + }, + "prompt": { + "password": "Şîfre" + }, + "action": { + "cancel": "Betal bike", + "authenticate": "Nasnameyê bipesend bike" + }, + "error": { + "failed": { + "title": "Nasname têk çû", + "message": "Şîfreya ku hûn nivîsandin şaş e." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/nl.json b/noctalia/plugins/polkit-agent/i18n/nl.json new file mode 100644 index 0000000..bf80c09 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/nl.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Authenticatie vereist" + }, + "prompt": { + "password": "Wachtwoord" + }, + "action": { + "cancel": "Annuleren", + "authenticate": "Authenticeren" + }, + "error": { + "failed": { + "title": "Authenticatie mislukt", + "message": "Het ingevoerde wachtwoord was onjuist." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/nn-HN.json b/noctalia/plugins/polkit-agent/i18n/nn-HN.json new file mode 100644 index 0000000..6bbaf0f --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/nn-HN.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Autentisering kreves" + }, + "prompt": { + "password": "Passord" + }, + "action": { + "cancel": "Avbryt", + "authenticate": "Autentiser" + }, + "error": { + "failed": { + "title": "Autentisering mislyktes", + "message": "Passordet du skrev inn var feil." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/nn-NO.json b/noctalia/plugins/polkit-agent/i18n/nn-NO.json new file mode 100644 index 0000000..868c980 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/nn-NO.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Autentisering krevst" + }, + "prompt": { + "password": "Passord" + }, + "action": { + "cancel": "Avbryt", + "authenticate": "Autentiser" + }, + "error": { + "failed": { + "title": "Autentisering mislukkast", + "message": "Passordet du skreiv inn var feil." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/pl.json b/noctalia/plugins/polkit-agent/i18n/pl.json new file mode 100644 index 0000000..66184ca --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/pl.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Wymagane uwierzytelnienie" + }, + "prompt": { + "password": "Hasło" + }, + "action": { + "cancel": "Anuluj", + "authenticate": "Uwierzytelnij" + }, + "error": { + "failed": { + "title": "Uwierzytelnienie nie powiodło się", + "message": "Wprowadzone hasło jest nieprawidłowe." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/pt.json b/noctalia/plugins/polkit-agent/i18n/pt.json new file mode 100644 index 0000000..f4af699 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/pt.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Autenticação Necessária" + }, + "prompt": { + "password": "Senha" + }, + "action": { + "cancel": "Cancelar", + "authenticate": "Autenticar" + }, + "error": { + "failed": { + "title": "Autenticação Falhou", + "message": "A senha introduzida está incorreta." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/ru.json b/noctalia/plugins/polkit-agent/i18n/ru.json new file mode 100644 index 0000000..d70e837 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/ru.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Требуется аутентификация" + }, + "prompt": { + "password": "Пароль" + }, + "action": { + "cancel": "Отмена", + "authenticate": "Аутентифицировать" + }, + "error": { + "failed": { + "title": "Ошибка аутентификации", + "message": "Введен неверный пароль." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/sv.json b/noctalia/plugins/polkit-agent/i18n/sv.json new file mode 100644 index 0000000..f7af9f1 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/sv.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Autentisering krävs" + }, + "prompt": { + "password": "Lösenord" + }, + "action": { + "cancel": "Avbryt", + "authenticate": "Autentisera" + }, + "error": { + "failed": { + "title": "Autentisering misslyckades", + "message": "Det angivna lösenordet var felaktigt." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/tr.json b/noctalia/plugins/polkit-agent/i18n/tr.json new file mode 100644 index 0000000..1384ee1 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/tr.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Kimlik Doğrulaması Gerekli" + }, + "prompt": { + "password": "Parola" + }, + "action": { + "cancel": "İptal", + "authenticate": "Doğrula" + }, + "error": { + "failed": { + "title": "Kimlik Doğrulama Başarısız", + "message": "Girdiğiniz parola yanlış." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/uk-UA.json b/noctalia/plugins/polkit-agent/i18n/uk-UA.json new file mode 100644 index 0000000..24daa3c --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/uk-UA.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Потрібна аутентифікація" + }, + "prompt": { + "password": "Пароль" + }, + "action": { + "cancel": "Скасувати", + "authenticate": "Аутентифікувати" + }, + "error": { + "failed": { + "title": "Помилка аутентифікації", + "message": "Введений пароль неправильний." + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/vi.json b/noctalia/plugins/polkit-agent/i18n/vi.json new file mode 100644 index 0000000..4872e37 --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/vi.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "Yêu cầu xác thực" + }, + "prompt": { + "password": "Mật khẩu" + }, + "action": { + "cancel": "Hủy", + "authenticate": "Xác thực" + }, + "error": { + "failed": { + "title": "Xác thực thất bại", + "message": "Mật khẩu bạn nhập không đúng." + } + } +} diff --git a/noctalia/plugins/polkit-agent/i18n/zh-CN.json b/noctalia/plugins/polkit-agent/i18n/zh-CN.json new file mode 100644 index 0000000..4b4cfdc --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/zh-CN.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "需要身份验证" + }, + "prompt": { + "password": "密码" + }, + "action": { + "cancel": "取消", + "authenticate": "验证" + }, + "error": { + "failed": { + "title": "身份验证失败", + "message": "您输入的密码不正确。" + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/i18n/zh-TW.json b/noctalia/plugins/polkit-agent/i18n/zh-TW.json new file mode 100644 index 0000000..f739c9e --- /dev/null +++ b/noctalia/plugins/polkit-agent/i18n/zh-TW.json @@ -0,0 +1,18 @@ +{ + "window": { + "title": "需要身份驗證" + }, + "prompt": { + "password": "密碼" + }, + "action": { + "cancel": "取消", + "authenticate": "驗證" + }, + "error": { + "failed": { + "title": "身份驗證失敗", + "message": "您輸入的密碼不正確。" + } + } +} \ No newline at end of file diff --git a/noctalia/plugins/polkit-agent/manifest.json b/noctalia/plugins/polkit-agent/manifest.json new file mode 100644 index 0000000..30eb5e2 --- /dev/null +++ b/noctalia/plugins/polkit-agent/manifest.json @@ -0,0 +1,24 @@ +{ + "id": "polkit-agent", + "name": "Polkit Agent", + "version": "1.0.6", + "minNoctaliaVersion": "4.4.3", + "author": "Noctalia Team ", + "official": true, + "license": "MIT", + "repository": "https://github.com/noctalia-dev/noctalia-plugins", + "description": "Provides a Polkit authentication agent.", + "tags": [ + "System", + "Security" + ], + "entryPoints": { + "main": "Main.qml" + }, + "dependencies": { + "plugins": [] + }, + "metadata": { + "defaultSettings": {} + } +} diff --git a/noctalia/plugins/polkit-agent/preview.png b/noctalia/plugins/polkit-agent/preview.png new file mode 100644 index 0000000..debee8a Binary files /dev/null and b/noctalia/plugins/polkit-agent/preview.png differ diff --git a/noctalia/settings.json b/noctalia/settings.json new file mode 100644 index 0000000..3416b91 --- /dev/null +++ b/noctalia/settings.json @@ -0,0 +1,703 @@ +{ + "appLauncher": { + "autoPasteClipboard": false, + "clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store", + "clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store", + "clipboardWrapText": true, + "customLaunchPrefix": "", + "customLaunchPrefixEnabled": false, + "density": "default", + "enableClipPreview": true, + "enableClipboardChips": true, + "enableClipboardHistory": true, + "enableClipboardSmartIcons": true, + "enableSessionSearch": true, + "enableSettingsSearch": true, + "enableWindowsSearch": true, + "iconMode": "tabler", + "ignoreMouseInput": false, + "overviewLayer": false, + "pinnedApps": [ + ], + "position": "center", + "screenshotAnnotationTool": "", + "showCategories": true, + "showIconBackground": false, + "sortByMostUsed": true, + "terminalCommand": "alacritty -e", + "viewMode": "list" + }, + "audio": { + "mprisBlacklist": [ + ], + "preferredPlayer": "", + "spectrumFrameRate": 30, + "spectrumMirrored": true, + "visualizerType": "linear", + "volumeFeedback": false, + "volumeFeedbackSoundFile": "", + "volumeOverdrive": false, + "volumeStep": 5 + }, + "bar": { + "autoHideDelay": 500, + "autoShowDelay": 150, + "backgroundOpacity": 0.93, + "barType": "simple", + "capsuleColorKey": "none", + "capsuleOpacity": 1, + "contentPadding": 2, + "density": "comfortable", + "displayMode": "always_visible", + "enableExclusionZoneInset": true, + "fontScale": 1, + "frameRadius": 12, + "frameThickness": 8, + "hideOnOverview": false, + "marginHorizontal": 4, + "marginVertical": 4, + "middleClickAction": "none", + "middleClickCommand": "", + "middleClickFollowMouse": false, + "monitors": [ + ], + "mouseWheelAction": "none", + "mouseWheelWrap": true, + "outerCorners": false, + "position": "top", + "reverseScroll": false, + "rightClickAction": "controlCenter", + "rightClickCommand": "", + "rightClickFollowMouse": true, + "screenOverrides": [ + ], + "showCapsule": true, + "showOnWorkspaceSwitch": true, + "showOutline": false, + "useSeparateOpacity": false, + "widgetSpacing": 6, + "widgets": { + "center": [ + { + "clockColor": "none", + "customFont": "", + "formatHorizontal": "HH:mm ddd, MMM dd", + "formatVertical": "HH mm - dd MM", + "id": "Clock", + "tooltipFormat": "HH:mm ddd, MMM dd", + "useCustomFont": false + } + ], + "left": [ + { + "colorizeSystemIcon": "none", + "colorizeSystemText": "none", + "customIconPath": "", + "enableColorization": false, + "icon": "rocket", + "iconColor": "none", + "id": "Launcher", + "useDistroLogo": false + }, + { + "compactMode": true, + "diskPath": "/", + "iconColor": "none", + "id": "SystemMonitor", + "showCpuCores": false, + "showCpuFreq": false, + "showCpuTemp": true, + "showCpuUsage": true, + "showDiskAvailable": false, + "showDiskUsage": false, + "showDiskUsageAsPercent": false, + "showGpuTemp": false, + "showLoadAverage": false, + "showMemoryAsPercent": false, + "showMemoryUsage": true, + "showNetworkStats": false, + "showSwapUsage": false, + "textColor": "none", + "useMonospaceFont": true, + "usePadding": false + }, + { + "compactMode": false, + "hideMode": "hidden", + "hideWhenIdle": false, + "id": "MediaMini", + "maxWidth": 145, + "panelShowAlbumArt": true, + "scrollingMode": "hover", + "showAlbumArt": true, + "showArtistFirst": true, + "showProgressRing": true, + "showVisualizer": false, + "textColor": "none", + "useFixedWidth": false, + "visualizerType": "linear" + }, + { + "characterCount": 2, + "colorizeIcons": false, + "emptyColor": "secondary", + "enableScrollWheel": true, + "focusedColor": "primary", + "followFocusedScreen": false, + "fontWeight": "bold", + "groupedBorderOpacity": 1, + "hideUnoccupied": false, + "iconScale": 0.8, + "id": "Workspace", + "labelMode": "index", + "occupiedColor": "secondary", + "pillSize": 0.6, + "showApplications": false, + "showApplicationsHover": false, + "showBadge": true, + "showLabelsOnlyWhenOccupied": true, + "unfocusedIconsOpacity": 1 + }, + { + "colorizeIcons": false, + "hideMode": "visible", + "id": "ActiveWindow", + "maxWidth": 350, + "scrollingMode": "hover", + "showIcon": true, + "showText": true, + "textColor": "none", + "useFixedWidth": true + } + ], + "right": [ + { + "blacklist": [ + ], + "chevronColor": "none", + "colorizeIcons": false, + "drawerEnabled": false, + "hidePassive": false, + "id": "Tray", + "pinned": [ + ] + }, + { + "hideWhenZero": false, + "hideWhenZeroUnread": false, + "iconColor": "none", + "id": "NotificationHistory", + "showUnreadBadge": true, + "unreadBadgeColor": "primary" + }, + { + "deviceNativePath": "__default__", + "displayMode": "graphic-clean", + "hideIfIdle": false, + "hideIfNotDetected": true, + "id": "Battery", + "showNoctaliaPerformance": false, + "showPowerProfiles": false + }, + { + "displayMode": "onhover", + "iconColor": "none", + "id": "Volume", + "middleClickCommand": "pwvucontrol || pavucontrol", + "textColor": "none" + }, + { + "applyToAllMonitors": false, + "displayMode": "onhover", + "iconColor": "none", + "id": "Brightness", + "textColor": "none" + }, + { + "colorizeDistroLogo": false, + "colorizeSystemIcon": "none", + "colorizeSystemText": "none", + "customIconPath": "", + "enableColorization": false, + "icon": "noctalia", + "id": "ControlCenter", + "useDistroLogo": false + } + ] + } + }, + "brightness": { + "backlightDeviceMappings": [ + ], + "brightnessStep": 5, + "enableDdcSupport": false, + "enforceMinimum": true + }, + "calendar": { + "cards": [ + { + "enabled": true, + "id": "calendar-header-card" + }, + { + "enabled": true, + "id": "calendar-month-card" + }, + { + "enabled": true, + "id": "weather-card" + } + ] + }, + "colorSchemes": { + "darkMode": true, + "generationMethod": "tonal-spot", + "manualSunrise": "06:30", + "manualSunset": "18:30", + "monitorForColors": "", + "predefinedScheme": "Catppuccin", + "schedulingMode": "off", + "syncGsettings": true, + "useWallpaperColors": false + }, + "controlCenter": { + "cards": [ + { + "enabled": true, + "id": "profile-card" + }, + { + "enabled": true, + "id": "shortcuts-card" + }, + { + "enabled": true, + "id": "audio-card" + }, + { + "enabled": false, + "id": "brightness-card" + }, + { + "enabled": true, + "id": "weather-card" + }, + { + "enabled": true, + "id": "media-sysmon-card" + } + ], + "diskPath": "/", + "position": "close_to_bar_button", + "shortcuts": { + "left": [ + { + "id": "Network" + }, + { + "id": "Bluetooth" + }, + { + "id": "WallpaperSelector" + }, + { + "id": "NoctaliaPerformance" + } + ], + "right": [ + { + "id": "Notifications" + }, + { + "id": "PowerProfile" + }, + { + "id": "KeepAwake" + }, + { + "id": "NightLight" + } + ] + } + }, + "desktopWidgets": { + "enabled": false, + "gridSnap": false, + "gridSnapScale": false, + "monitorWidgets": [ + ], + "overviewEnabled": true + }, + "dock": { + "animationSpeed": 1, + "backgroundOpacity": 1, + "colorizeIcons": false, + "deadOpacity": 0.6, + "displayMode": "auto_hide", + "dockType": "attached", + "enabled": true, + "floatingRatio": 1, + "groupApps": false, + "groupClickAction": "cycle", + "groupContextMenuMode": "extended", + "groupIndicatorStyle": "dots", + "inactiveIndicators": false, + "indicatorColor": "primary", + "indicatorOpacity": 0.6, + "indicatorThickness": 3, + "launcherIcon": "", + "launcherIconColor": "none", + "launcherPosition": "end", + "launcherUseDistroLogo": false, + "monitors": [ + ], + "onlySameOutput": true, + "pinnedApps": [ + ], + "pinnedStatic": false, + "position": "bottom", + "showDockIndicator": true, + "showLauncherIcon": false, + "sitOnFrame": false, + "size": 1 + }, + "general": { + "allowPanelsOnScreenWithoutBar": true, + "allowPasswordWithFprintd": false, + "animationDisabled": false, + "animationSpeed": 1, + "autoStartAuth": false, + "avatarImage": "/home/bgrolleman/.face", + "boxRadiusRatio": 1, + "clockFormat": "hh\\nmm", + "clockStyle": "custom", + "compactLockScreen": false, + "dimmerOpacity": 0.2, + "enableBlurBehind": true, + "enableLockScreenCountdown": true, + "enableLockScreenMediaControls": false, + "enableShadows": true, + "forceBlackScreenCorners": false, + "iRadiusRatio": 1, + "keybinds": { + "keyDown": [ + "Down" + ], + "keyEnter": [ + "Return", + "Enter" + ], + "keyEscape": [ + "Esc" + ], + "keyLeft": [ + "Left" + ], + "keyRemove": [ + "Del" + ], + "keyRight": [ + "Right" + ], + "keyUp": [ + "Up" + ] + }, + "language": "", + "lockOnSuspend": true, + "lockScreenAnimations": false, + "lockScreenBlur": 0, + "lockScreenCountdownDuration": 10000, + "lockScreenMonitors": [ + ], + "lockScreenTint": 0, + "passwordChars": false, + "radiusRatio": 1, + "reverseScroll": false, + "scaleRatio": 1, + "screenRadiusRatio": 1, + "shadowDirection": "bottom_right", + "shadowOffsetX": 2, + "shadowOffsetY": 3, + "showChangelogOnStartup": true, + "showHibernateOnLockScreen": false, + "showScreenCorners": false, + "showSessionButtonsOnLockScreen": true, + "smoothScrollEnabled": true, + "telemetryEnabled": true + }, + "hooks": { + "colorGeneration": "", + "darkModeChange": "", + "enabled": false, + "performanceModeDisabled": "", + "performanceModeEnabled": "", + "screenLock": "", + "screenUnlock": "", + "session": "", + "startup": "", + "wallpaperChange": "" + }, + "idle": { + "customCommands": "[]", + "enabled": false, + "fadeDuration": 5, + "lockCommand": "", + "lockTimeout": 660, + "resumeLockCommand": "", + "resumeScreenOffCommand": "", + "resumeSuspendCommand": "", + "screenOffCommand": "", + "screenOffTimeout": 600, + "suspendCommand": "", + "suspendTimeout": 1800 + }, + "location": { + "analogClockInCalendar": false, + "autoLocate": false, + "firstDayOfWeek": 1, + "hideWeatherCityName": false, + "hideWeatherTimezone": false, + "name": "Amersfoort, The Netherlandsk", + "showCalendarEvents": true, + "showCalendarWeather": true, + "showWeekNumberInCalendar": false, + "use12hourFormat": false, + "useFahrenheit": false, + "weatherEnabled": true, + "weatherShowEffects": true, + "weatherTaliaMascotAlways": false + }, + "network": { + "bluetoothAutoConnect": true, + "bluetoothDetailsViewMode": "grid", + "bluetoothHideUnnamedDevices": false, + "bluetoothRssiPollIntervalMs": 60000, + "bluetoothRssiPollingEnabled": false, + "disableDiscoverability": false, + "networkPanelView": "wifi", + "wifiDetailsViewMode": "grid" + }, + "nightLight": { + "autoSchedule": true, + "dayTemp": "6500", + "enabled": false, + "forced": false, + "manualSunrise": "06:30", + "manualSunset": "18:30", + "nightTemp": "4000" + }, + "noctaliaPerformance": { + "disableDesktopWidgets": true, + "disableWallpaper": true + }, + "notifications": { + "backgroundOpacity": 1, + "clearDismissed": true, + "criticalUrgencyDuration": 15, + "density": "default", + "enableBatteryToast": true, + "enableKeyboardLayoutToast": true, + "enableMarkdown": false, + "enableMediaToast": false, + "enabled": true, + "location": "top_right", + "lowUrgencyDuration": 3, + "monitors": [ + ], + "normalUrgencyDuration": 8, + "overlayLayer": true, + "respectExpireTimeout": false, + "saveToHistory": { + "critical": true, + "low": false, + "normal": true + }, + "sounds": { + "criticalSoundFile": "", + "enabled": false, + "excludedApps": "discord,firefox,chrome,chromium,edge", + "lowSoundFile": "", + "normalSoundFile": "", + "separateSounds": false, + "volume": 0.5 + } + }, + "osd": { + "autoHideMs": 2000, + "backgroundOpacity": 1, + "enabled": true, + "enabledTypes": [ + 0, + 1, + 2 + ], + "location": "top_right", + "monitors": [ + ], + "overlayLayer": true + }, + "plugins": { + "autoUpdate": false, + "notifyUpdates": true + }, + "sessionMenu": { + "countdownDuration": 10000, + "enableCountdown": true, + "largeButtonsLayout": "single-row", + "largeButtonsStyle": true, + "position": "center", + "powerOptions": [ + { + "action": "lock", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "1" + }, + { + "action": "suspend", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "2" + }, + { + "action": "hibernate", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "3" + }, + { + "action": "reboot", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "4" + }, + { + "action": "logout", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "5" + }, + { + "action": "shutdown", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "6" + }, + { + "action": "rebootToUefi", + "command": "", + "countdownEnabled": true, + "enabled": true, + "keybind": "7" + }, + { + "action": "userspaceReboot", + "command": "", + "countdownEnabled": true, + "enabled": false, + "keybind": "" + } + ], + "showHeader": true, + "showKeybinds": true + }, + "settingsVersion": 59, + "systemMonitor": { + "batteryCriticalThreshold": 5, + "batteryWarningThreshold": 20, + "cpuCriticalThreshold": 90, + "cpuWarningThreshold": 80, + "criticalColor": "", + "diskAvailCriticalThreshold": 10, + "diskAvailWarningThreshold": 20, + "diskCriticalThreshold": 90, + "diskWarningThreshold": 80, + "enableDgpuMonitoring": false, + "externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor", + "gpuCriticalThreshold": 90, + "gpuWarningThreshold": 80, + "memCriticalThreshold": 90, + "memWarningThreshold": 80, + "swapCriticalThreshold": 90, + "swapWarningThreshold": 80, + "tempCriticalThreshold": 90, + "tempWarningThreshold": 80, + "useCustomColors": false, + "warningColor": "" + }, + "templates": { + "activeTemplates": [ + ], + "enableUserTheming": false + }, + "ui": { + "boxBorderEnabled": false, + "fontDefault": "Adwaita Sans", + "fontDefaultScale": 1, + "fontFixed": "monospace", + "fontFixedScale": 1, + "panelBackgroundOpacity": 0.93, + "panelsAttachedToBar": true, + "scrollbarAlwaysVisible": true, + "settingsPanelMode": "attached", + "settingsPanelSideBarCardStyle": false, + "tooltipsEnabled": true, + "translucentWidgets": false + }, + "wallpaper": { + "automationEnabled": false, + "directory": "/home/bgrolleman/Documents/Resources/Backgrounds", + "enableMultiMonitorDirectories": false, + "enabled": true, + "favorites": [ + ], + "fillColor": "#000000", + "fillMode": "crop", + "hideWallpaperFilenames": false, + "linkLightAndDarkWallpapers": true, + "monitorDirectories": [ + ], + "overviewBlur": 0.4, + "overviewEnabled": false, + "overviewTint": 0.6, + "panelPosition": "follow_bar", + "randomIntervalSec": 300, + "setWallpaperOnAllMonitors": true, + "showHiddenFiles": false, + "skipStartupTransition": false, + "solidColor": "#1a1a2e", + "sortOrder": "name", + "transitionDuration": 1500, + "transitionEdgeSmoothness": 0.05, + "transitionType": [ + "fade", + "disc", + "stripes", + "wipe", + "pixelate", + "honeycomb" + ], + "useOriginalImages": false, + "useSolidColor": false, + "useWallhaven": false, + "viewMode": "single", + "wallhavenApiKey": "", + "wallhavenCategories": "111", + "wallhavenOrder": "desc", + "wallhavenPurity": "100", + "wallhavenQuery": "", + "wallhavenRatios": "", + "wallhavenResolutionHeight": "", + "wallhavenResolutionMode": "atleast", + "wallhavenResolutionWidth": "", + "wallhavenSorting": "relevance", + "wallpaperChangeMode": "random" + } +} diff --git a/setup.sh b/setup.sh index bfbab32..81efd7b 100755 --- a/setup.sh +++ b/setup.sh @@ -20,11 +20,12 @@ configlink() { checkdir ~/.config link ~/.profile ~/.dotfiles/profile -link ~/.config/i3 ~/.dotfiles/i3 +configlink i3 configlink tmux configlink nvim configlink kitty configlink polybar configlink picom.conf configlink niri +configlink noctalia