1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00

settings: mecha re-organization

This commit is contained in:
bbedward
2025-12-03 17:25:40 -05:00
parent 2c7f24a913
commit 788da62777
40 changed files with 10034 additions and 9580 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -19,15 +19,14 @@ FocusScope {
color: "transparent"
Loader {
id: personalizationLoader
id: wallpaperLoader
anchors.fill: parent
active: root.currentIndex === 0
visible: active
focus: active
sourceComponent: Component {
PersonalizationTab {
WallpaperTab {
parentModal: root.parentModal
}
}
@@ -41,7 +40,6 @@ FocusScope {
Loader {
id: timeWeatherLoader
anchors.fill: parent
active: root.currentIndex === 1
visible: active
@@ -58,7 +56,6 @@ FocusScope {
Loader {
id: keybindsLoader
anchors.fill: parent
active: root.currentIndex === 2
visible: active
@@ -77,7 +74,6 @@ FocusScope {
Loader {
id: topBarLoader
anchors.fill: parent
active: root.currentIndex === 3
visible: active
@@ -95,14 +91,13 @@ FocusScope {
}
Loader {
id: widgetsLoader
id: workspacesLoader
anchors.fill: parent
active: root.currentIndex === 4
visible: active
focus: active
sourceComponent: WidgetTweaksTab {}
sourceComponent: WorkspacesTab {}
onActiveChanged: {
if (active && item) {
@@ -113,7 +108,6 @@ FocusScope {
Loader {
id: dockLoader
anchors.fill: parent
active: root.currentIndex === 5
visible: active
@@ -132,7 +126,6 @@ FocusScope {
Loader {
id: displaysLoader
anchors.fill: parent
active: root.currentIndex === 6
visible: active
@@ -149,7 +142,6 @@ FocusScope {
Loader {
id: networkLoader
anchors.fill: parent
active: root.currentIndex === 7
visible: active
@@ -166,7 +158,6 @@ FocusScope {
Loader {
id: printerLoader
anchors.fill: parent
active: root.currentIndex === 8
visible: active
@@ -183,7 +174,6 @@ FocusScope {
Loader {
id: launcherLoader
anchors.fill: parent
active: root.currentIndex === 9
visible: active
@@ -200,7 +190,6 @@ FocusScope {
Loader {
id: themeColorsLoader
anchors.fill: parent
active: root.currentIndex === 10
visible: active
@@ -216,14 +205,13 @@ FocusScope {
}
Loader {
id: powerLoader
id: lockScreenLoader
anchors.fill: parent
active: root.currentIndex === 11
visible: active
focus: active
sourceComponent: PowerSettings {}
sourceComponent: LockScreenTab {}
onActiveChanged: {
if (active && item) {
@@ -234,7 +222,6 @@ FocusScope {
Loader {
id: pluginsLoader
anchors.fill: parent
active: root.currentIndex === 12
visible: active
@@ -253,7 +240,6 @@ FocusScope {
Loader {
id: aboutLoader
anchors.fill: parent
active: root.currentIndex === 13
visible: active
@@ -267,5 +253,133 @@ FocusScope {
}
}
}
Loader {
id: typographyMotionLoader
anchors.fill: parent
active: root.currentIndex === 14
visible: active
focus: active
sourceComponent: TypographyMotionTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: soundsLoader
anchors.fill: parent
active: root.currentIndex === 15
visible: active
focus: active
sourceComponent: SoundsTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: mediaPlayerLoader
anchors.fill: parent
active: root.currentIndex === 16
visible: active
focus: active
sourceComponent: MediaPlayerTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: notificationsLoader
anchors.fill: parent
active: root.currentIndex === 17
visible: active
focus: active
sourceComponent: NotificationsTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: osdLoader
anchors.fill: parent
active: root.currentIndex === 18
visible: active
focus: active
sourceComponent: OSDTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: runningAppsLoader
anchors.fill: parent
active: root.currentIndex === 19
visible: active
focus: active
sourceComponent: RunningAppsTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: systemUpdaterLoader
anchors.fill: parent
active: root.currentIndex === 20
visible: active
focus: active
sourceComponent: SystemUpdaterTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
Loader {
id: powerSleepLoader
anchors.fill: parent
active: root.currentIndex === 21
visible: active
focus: active
sourceComponent: PowerSleepTab {}
onActiveChanged: {
if (active && item) {
Qt.callLater(() => item.forceActiveFocus());
}
}
}
}
}

View File

@@ -41,7 +41,7 @@ FloatingWindow {
title: I18n.tr("Settings", "settings window title")
minimumSize: Qt.size(500, 400)
implicitWidth: 800
implicitHeight: 800
implicitHeight: 875
color: Theme.withAlpha(Theme.surfaceContainer, Theme.popupTransparency)
visible: false
@@ -121,29 +121,18 @@ FloatingWindow {
focus: true
Keys.onPressed: event => {
const tabCount = 13;
if (event.key === Qt.Key_Escape) {
hide();
event.accepted = true;
return;
}
if (event.key === Qt.Key_Down) {
currentTabIndex = (currentTabIndex + 1) % tabCount;
if (event.key === Qt.Key_Down || (event.key === Qt.Key_Tab && !event.modifiers)) {
sidebar.navigateNext();
event.accepted = true;
return;
}
if (event.key === Qt.Key_Up) {
currentTabIndex = (currentTabIndex - 1 + tabCount) % tabCount;
event.accepted = true;
return;
}
if (event.key === Qt.Key_Tab && !event.modifiers) {
currentTabIndex = (currentTabIndex + 1) % tabCount;
event.accepted = true;
return;
}
if (event.key === Qt.Key_Backtab || (event.key === Qt.Key_Tab && event.modifiers & Qt.ShiftModifier)) {
currentTabIndex = (currentTabIndex - 1 + tabCount) % tabCount;
if (event.key === Qt.Key_Up || event.key === Qt.Key_Backtab || (event.key === Qt.Key_Tab && event.modifiers & Qt.ShiftModifier)) {
sidebar.navigatePrevious();
event.accepted = true;
return;
}

View File

@@ -7,105 +7,324 @@ import qs.Services
import qs.Widgets
Rectangle {
id: sidebarContainer
id: root
property int currentIndex: 0
property var parentModal: null
readonly property var allSidebarItems: [
property var expandedCategories: ({})
property var autoExpandedCategories: ({})
readonly property var categoryStructure: [
{
"id": "personalization",
"text": I18n.tr("Personalization"),
"icon": "person",
"icon": "palette",
"children": [
{
"text": I18n.tr("Wallpaper"),
"icon": "wallpaper",
"tabIndex": 0
},
{
"text": I18n.tr("Theme & Colors"),
"icon": "format_paint",
"tabIndex": 10
},
{
"text": I18n.tr("Typography & Motion"),
"icon": "text_fields",
"tabIndex": 14
},
{
"text": I18n.tr("Time & Weather"),
"icon": "schedule",
"tabIndex": 1
},
{
"text": I18n.tr("Keyboard Shortcuts"),
"icon": "keyboard",
"shortcutsOnly": true,
"tabIndex": 2
"text": I18n.tr("Sounds"),
"icon": "volume_up",
"tabIndex": 15,
"soundsOnly": true
}
]
},
{
"id": "dankbar",
"text": I18n.tr("Dank Bar"),
"icon": "toolbar",
"tabIndex": 3
},
{
"text": I18n.tr("Widgets"),
"icon": "widgets",
"id": "workspaces_widgets",
"text": I18n.tr("Workspaces & Widgets"),
"icon": "dashboard",
"collapsedByDefault": true,
"children": [
{
"text": I18n.tr("Workspaces"),
"icon": "view_module",
"tabIndex": 4
},
{
"text": I18n.tr("Media Player"),
"icon": "music_note",
"tabIndex": 16
},
{
"text": I18n.tr("Notifications"),
"icon": "notifications",
"tabIndex": 17
},
{
"text": I18n.tr("On-screen Displays"),
"icon": "tune",
"tabIndex": 18
},
{
"text": I18n.tr("Running Apps"),
"icon": "apps",
"tabIndex": 19,
"hyprlandNiriOnly": true
},
{
"text": I18n.tr("System Updater"),
"icon": "refresh",
"tabIndex": 20
}
]
},
{
"id": "dock_launcher",
"text": I18n.tr("Dock & Launcher"),
"icon": "apps",
"collapsedByDefault": true,
"children": [
{
"text": I18n.tr("Dock"),
"icon": "dock_to_bottom",
"tabIndex": 5
},
{
"text": I18n.tr("Launcher"),
"icon": "grid_view",
"tabIndex": 9
}
]
},
{
"id": "input",
"text": I18n.tr("Keyboard Shortcuts"),
"icon": "keyboard",
"tabIndex": 2,
"shortcutsOnly": true
},
{
"id": "displays",
"text": I18n.tr("Displays"),
"icon": "monitor",
"tabIndex": 6
},
{
"id": "network",
"text": I18n.tr("Network"),
"icon": "wifi",
"dmsOnly": true,
"tabIndex": 7
"tabIndex": 7,
"dmsOnly": true
},
{
"id": "printers",
"text": I18n.tr("Printers"),
"icon": "print",
"cupsOnly": true,
"tabIndex": 8
},
{
"text": I18n.tr("Launcher"),
"icon": "apps",
"tabIndex": 9
},
{
"text": I18n.tr("Theme & Colors"),
"icon": "palette",
"tabIndex": 10
"tabIndex": 8,
"cupsOnly": true
},
{
"id": "power_security",
"text": I18n.tr("Power & Security"),
"icon": "power",
"icon": "security",
"collapsedByDefault": true,
"children": [
{
"text": I18n.tr("Lock Screen"),
"icon": "lock",
"tabIndex": 11
},
{
"text": I18n.tr("Power & Sleep"),
"icon": "power_settings_new",
"tabIndex": 21
}
]
},
{
"id": "plugins",
"text": I18n.tr("Plugins"),
"icon": "extension",
"tabIndex": 12
},
{
"id": "separator",
"separator": true
},
{
"id": "about",
"text": I18n.tr("About"),
"icon": "info",
"tabIndex": 13
}
]
readonly property var sidebarItems: allSidebarItems.filter(item => {
function isItemVisible(item) {
if (item.dmsOnly && NetworkService.usingLegacy)
return false;
if (item.cupsOnly && !CupsService.cupsAvailable)
return false;
if (item.shortcutsOnly && !KeybindsService.available)
return false;
if (item.soundsOnly && !AudioService.soundsAvailable)
return false;
if (item.hyprlandNiriOnly && !CompositorService.isNiri && !CompositorService.isHyprland)
return false;
return true;
})
}
function hasVisibleChildren(category) {
if (!category.children)
return false;
return category.children.some(child => isItemVisible(child));
}
function isCategoryVisible(category) {
if (category.separator)
return true;
if (!isItemVisible(category))
return false;
if (category.children && !hasVisibleChildren(category))
return false;
return true;
}
function toggleCategory(categoryId) {
var newExpanded = Object.assign({}, expandedCategories);
newExpanded[categoryId] = !isCategoryExpanded(categoryId);
expandedCategories = newExpanded;
var newAutoExpanded = Object.assign({}, autoExpandedCategories);
delete newAutoExpanded[categoryId];
autoExpandedCategories = newAutoExpanded;
}
function isCategoryExpanded(categoryId) {
if (expandedCategories[categoryId] !== undefined) {
return expandedCategories[categoryId];
}
var category = categoryStructure.find(cat => cat.id === categoryId);
if (category && category.collapsedByDefault) {
return false;
}
return true;
}
function isChildActive(category) {
if (!category.children)
return false;
return category.children.some(child => child.tabIndex === currentIndex);
}
function findParentCategory(tabIndex) {
for (var i = 0; i < categoryStructure.length; i++) {
var cat = categoryStructure[i];
if (cat.children) {
for (var j = 0; j < cat.children.length; j++) {
if (cat.children[j].tabIndex === tabIndex) {
return cat;
}
}
}
}
return null;
}
function autoExpandForTab(tabIndex) {
var parent = findParentCategory(tabIndex);
if (!parent)
return;
if (!isCategoryExpanded(parent.id)) {
var newExpanded = Object.assign({}, expandedCategories);
newExpanded[parent.id] = true;
expandedCategories = newExpanded;
var newAutoExpanded = Object.assign({}, autoExpandedCategories);
newAutoExpanded[parent.id] = true;
autoExpandedCategories = newAutoExpanded;
}
}
function autoCollapseIfNeeded(oldTabIndex, newTabIndex) {
var oldParent = findParentCategory(oldTabIndex);
var newParent = findParentCategory(newTabIndex);
if (oldParent && oldParent !== newParent && autoExpandedCategories[oldParent.id]) {
var newExpanded = Object.assign({}, expandedCategories);
newExpanded[oldParent.id] = false;
expandedCategories = newExpanded;
var newAutoExpanded = Object.assign({}, autoExpandedCategories);
delete newAutoExpanded[oldParent.id];
autoExpandedCategories = newAutoExpanded;
}
}
function navigateNext() {
const currentItemIndex = sidebarItems.findIndex(item => item.tabIndex === currentIndex);
const nextIndex = (currentItemIndex + 1) % sidebarItems.length;
currentIndex = sidebarItems[nextIndex].tabIndex;
var flatItems = getFlatNavigableItems();
var currentPos = flatItems.findIndex(item => item.tabIndex === currentIndex);
var oldIndex = currentIndex;
if (currentPos === -1) {
currentIndex = flatItems[0]?.tabIndex ?? 0;
} else {
var nextPos = (currentPos + 1) % flatItems.length;
currentIndex = flatItems[nextPos].tabIndex;
}
autoCollapseIfNeeded(oldIndex, currentIndex);
autoExpandForTab(currentIndex);
}
function navigatePrevious() {
const currentItemIndex = sidebarItems.findIndex(item => item.tabIndex === currentIndex);
const prevIndex = (currentItemIndex - 1 + sidebarItems.length) % sidebarItems.length;
currentIndex = sidebarItems[prevIndex].tabIndex;
var flatItems = getFlatNavigableItems();
var currentPos = flatItems.findIndex(item => item.tabIndex === currentIndex);
var oldIndex = currentIndex;
if (currentPos === -1) {
currentIndex = flatItems[0]?.tabIndex ?? 0;
} else {
var prevPos = (currentPos - 1 + flatItems.length) % flatItems.length;
currentIndex = flatItems[prevPos].tabIndex;
}
autoCollapseIfNeeded(oldIndex, currentIndex);
autoExpandForTab(currentIndex);
}
function getFlatNavigableItems() {
var items = [];
for (var i = 0; i < categoryStructure.length; i++) {
var cat = categoryStructure[i];
if (cat.separator || !isCategoryVisible(cat))
continue;
if (cat.tabIndex !== undefined && !cat.children) {
items.push(cat);
}
if (cat.children) {
for (var j = 0; j < cat.children.length; j++) {
var child = cat.children[j];
if (isItemVisible(child)) {
items.push(child);
}
}
}
}
return items;
}
width: 270
@@ -120,17 +339,16 @@ Rectangle {
Column {
id: sidebarColumn
width: parent.width
leftPadding: Theme.spacingS
rightPadding: Theme.spacingS
bottomPadding: Theme.spacingL
topPadding: Theme.spacingM + 2
spacing: Theme.spacingXS
spacing: 2
ProfileSection {
width: parent.width - parent.leftPadding - parent.rightPadding
parentModal: sidebarContainer.parentModal
parentModal: root.parentModal
}
Rectangle {
@@ -142,55 +360,184 @@ Rectangle {
Item {
width: parent.width - parent.leftPadding - parent.rightPadding
height: Theme.spacingL
height: Theme.spacingM
}
Repeater {
id: sidebarRepeater
model: root.categoryStructure
model: sidebarContainer.sidebarItems
delegate: Rectangle {
delegate: Column {
id: categoryDelegate
required property int index
required property var modelData
property bool isActive: sidebarContainer.currentIndex === modelData.tabIndex
width: parent.width - parent.leftPadding - parent.rightPadding
height: 44
visible: root.isCategoryVisible(modelData)
spacing: 2
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
visible: categoryDelegate.modelData.separator === true
}
Item {
width: parent.width
height: Theme.spacingS
visible: categoryDelegate.modelData.separator === true
}
Rectangle {
id: categoryRow
width: parent.width
height: 40
radius: Theme.cornerRadius
color: isActive ? Theme.primary : tabMouseArea.containsMouse ? Theme.surfaceHover : "transparent"
visible: categoryDelegate.modelData.separator !== true
color: {
var hasTab = categoryDelegate.modelData.tabIndex !== undefined && !categoryDelegate.modelData.children;
var isActive = hasTab && root.currentIndex === categoryDelegate.modelData.tabIndex;
if (isActive)
return Theme.primary;
if (categoryMouseArea.containsMouse)
return Theme.surfaceHover;
return "transparent";
}
Row {
anchors.left: parent.left
anchors.leftMargin: Theme.spacingM
anchors.right: parent.right
anchors.rightMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingM
DankIcon {
name: modelData.icon || ""
name: categoryDelegate.modelData.icon || ""
size: Theme.iconSize - 2
color: parent.parent.isActive ? Theme.primaryText : Theme.surfaceText
color: {
var hasTab = categoryDelegate.modelData.tabIndex !== undefined && !categoryDelegate.modelData.children;
var isActive = hasTab && root.currentIndex === categoryDelegate.modelData.tabIndex;
return isActive ? Theme.primaryText : Theme.surfaceText;
}
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: modelData.text || ""
text: categoryDelegate.modelData.text || ""
font.pixelSize: Theme.fontSizeMedium
color: parent.parent.isActive ? Theme.primaryText : Theme.surfaceText
font.weight: parent.parent.isActive ? Font.Medium : Font.Normal
font.weight: {
var hasTab = categoryDelegate.modelData.tabIndex !== undefined && !categoryDelegate.modelData.children;
var isActive = hasTab && root.currentIndex === categoryDelegate.modelData.tabIndex;
var childActive = root.isChildActive(categoryDelegate.modelData);
return (isActive || childActive) ? Font.Medium : Font.Normal;
}
color: {
var hasTab = categoryDelegate.modelData.tabIndex !== undefined && !categoryDelegate.modelData.children;
var isActive = hasTab && root.currentIndex === categoryDelegate.modelData.tabIndex;
return isActive ? Theme.primaryText : Theme.surfaceText;
}
anchors.verticalCenter: parent.verticalCenter
width: parent.width - Theme.iconSize - Theme.spacingM - (categoryDelegate.modelData.children ? expandIcon.width + Theme.spacingS : 0)
elide: Text.ElideRight
}
DankIcon {
id: expandIcon
name: root.isCategoryExpanded(categoryDelegate.modelData.id) ? "expand_less" : "expand_more"
size: Theme.iconSize - 4
color: Theme.surfaceVariantText
anchors.verticalCenter: parent.verticalCenter
visible: categoryDelegate.modelData.children !== undefined && categoryDelegate.modelData.children.length > 0
}
}
MouseArea {
id: categoryMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
if (categoryDelegate.modelData.children) {
root.toggleCategory(categoryDelegate.modelData.id);
} else if (categoryDelegate.modelData.tabIndex !== undefined) {
root.currentIndex = categoryDelegate.modelData.tabIndex;
}
}
}
Behavior on color {
ColorAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
}
Column {
id: childrenColumn
width: parent.width
spacing: 2
visible: categoryDelegate.modelData.children !== undefined && root.isCategoryExpanded(categoryDelegate.modelData.id)
clip: true
Repeater {
model: categoryDelegate.modelData.children || []
delegate: Rectangle {
id: childDelegate
required property int index
required property var modelData
width: childrenColumn.width
height: 36
radius: Theme.cornerRadius
visible: root.isItemVisible(modelData)
color: {
var isActive = root.currentIndex === modelData.tabIndex;
if (isActive)
return Theme.primary;
if (childMouseArea.containsMouse)
return Theme.surfaceHover;
return "transparent";
}
Row {
anchors.left: parent.left
anchors.leftMargin: Theme.spacingL + Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingM
DankIcon {
name: childDelegate.modelData.icon || ""
size: Theme.iconSize - 4
color: {
var isActive = root.currentIndex === childDelegate.modelData.tabIndex;
return isActive ? Theme.primaryText : Theme.surfaceVariantText;
}
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: childDelegate.modelData.text || ""
font.pixelSize: Theme.fontSizeSmall + 1
font.weight: root.currentIndex === childDelegate.modelData.tabIndex ? Font.Medium : Font.Normal
color: {
var isActive = root.currentIndex === childDelegate.modelData.tabIndex;
return isActive ? Theme.primaryText : Theme.surfaceText;
}
anchors.verticalCenter: parent.verticalCenter
}
}
MouseArea {
id: tabMouseArea
id: childMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: () => {
sidebarContainer.currentIndex = modelData.tabIndex;
onClicked: {
root.currentIndex = childDelegate.modelData.tabIndex;
}
}
@@ -204,4 +551,7 @@ Rectangle {
}
}
}
}
}
}
}

View File

@@ -3,6 +3,7 @@ import QtQuick.Effects
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: aboutTab
@@ -122,13 +123,17 @@ Item {
Row {
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingL
spacing: parent.width < 350 ? Theme.spacingM : Theme.spacingL
property bool compactLogo: parent.width < 400
property bool hideLogo: parent.width < 280
Image {
id: logoImage
visible: !parent.hideLogo
anchors.verticalCenter: parent.verticalCenter
width: 120
width: parent.compactLogo ? 80 : 120
height: width * (569.94629 / 506.50931)
fillMode: Image.PreserveAspectFit
smooth: true
@@ -148,7 +153,7 @@ Item {
Text {
anchors.verticalCenter: parent.verticalCenter
text: "DANK LINUX"
font.pixelSize: 48
font.pixelSize: parent.compactLogo ? 32 : 48
font.weight: Font.Bold
font.family: interFont.name
color: Theme.surfaceText
@@ -163,7 +168,8 @@ Item {
StyledText {
text: {
if (!SystemUpdateService.shellVersion) return "dms";
if (!SystemUpdateService.shellVersion)
return "dms";
let version = SystemUpdateService.shellVersion;
@@ -194,6 +200,82 @@ Item {
width: parent.width
}
Row {
id: resourceButtonsRow
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingS
property bool compactMode: parent.width < 400
DankButton {
id: docsButton
text: resourceButtonsRow.compactMode ? "" : I18n.tr("Docs")
iconName: "menu_book"
iconSize: 18
backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08)
textColor: Theme.surfaceText
onClicked: Qt.openUrlExternally("https://danklinux.com/docs")
onHoveredChanged: {
if (hovered)
resourceTooltip.show(resourceButtonsRow.compactMode ? I18n.tr("Docs") + " - danklinux.com/docs" : "danklinux.com/docs", docsButton, 0, 0, "bottom");
else
resourceTooltip.hide();
}
}
DankButton {
id: pluginsButton
text: resourceButtonsRow.compactMode ? "" : I18n.tr("Plugins")
iconName: "extension"
iconSize: 18
backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08)
textColor: Theme.surfaceText
onClicked: Qt.openUrlExternally("https://plugins.danklinux.com")
onHoveredChanged: {
if (hovered)
resourceTooltip.show(resourceButtonsRow.compactMode ? I18n.tr("Plugins") + " - plugins.danklinux.com" : "plugins.danklinux.com", pluginsButton, 0, 0, "bottom");
else
resourceTooltip.hide();
}
}
DankButton {
id: githubButton
text: resourceButtonsRow.compactMode ? "" : I18n.tr("GitHub")
iconName: "code"
iconSize: 18
backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08)
textColor: Theme.surfaceText
onClicked: Qt.openUrlExternally("https://github.com/AvengeMedia/DankMaterialShell")
onHoveredChanged: {
if (hovered)
resourceTooltip.show(resourceButtonsRow.compactMode ? "GitHub - AvengeMedia/DankMaterialShell" : "github.com/AvengeMedia/DankMaterialShell", githubButton, 0, 0, "bottom");
else
resourceTooltip.hide();
}
}
DankButton {
id: kofiButton
text: resourceButtonsRow.compactMode ? "" : I18n.tr("Ko-fi")
iconName: "favorite"
iconSize: 18
backgroundColor: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12)
textColor: Theme.primary
onClicked: Qt.openUrlExternally("https://ko-fi.com/danklinux")
onHoveredChanged: {
if (hovered)
resourceTooltip.show(resourceButtonsRow.compactMode ? I18n.tr("Ko-fi") + " - ko-fi.com/danklinux" : "ko-fi.com/danklinux", kofiButton, 0, 0, "bottom");
else
resourceTooltip.hide();
}
}
}
DankTooltipV2 {
id: resourceTooltip
}
Item {
id: communityIcons
anchors.horizontalCenter: parent.horizontalCenter
@@ -459,166 +541,6 @@ Item {
}
}
StyledRect {
width: parent.width
height: techSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: techSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "code"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Resources")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
Grid {
width: parent.width
columns: 2
columnSpacing: Theme.spacingL
rowSpacing: Theme.spacingS
StyledText {
text: I18n.tr("Website:")
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: `<a href="https://danklinux.com" style="text-decoration:none; color:${Theme.primary};">danklinux.com</a>`
linkColor: Theme.primary
textFormat: Text.RichText
onLinkActivated: url => Qt.openUrlExternally(url)
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
MouseArea {
anchors.fill: parent
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
acceptedButtons: Qt.NoButton
propagateComposedEvents: true
}
}
StyledText {
text: I18n.tr("Plugins:")
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: `<a href="https://plugins.danklinux.com" style="text-decoration:none; color:${Theme.primary};">plugins.danklinux.com</a>`
linkColor: Theme.primary
textFormat: Text.RichText
onLinkActivated: url => Qt.openUrlExternally(url)
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
MouseArea {
anchors.fill: parent
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
acceptedButtons: Qt.NoButton
propagateComposedEvents: true
}
}
StyledText {
text: I18n.tr("Github:")
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
}
Row {
spacing: 4
StyledText {
text: `<a href="https://github.com/AvengeMedia/DankMaterialShell" style="text-decoration:none; color:${Theme.primary};">DankMaterialShell</a>`
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
linkColor: Theme.primary
textFormat: Text.RichText
onLinkActivated: url => Qt.openUrlExternally(url)
anchors.verticalCenter: parent.verticalCenter
MouseArea {
anchors.fill: parent
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
acceptedButtons: Qt.NoButton
propagateComposedEvents: true
}
}
StyledText {
text: I18n.tr("- Support Us With a Star ⭐")
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
anchors.verticalCenter: parent.verticalCenter
}
}
StyledText {
text: I18n.tr("System Monitoring:")
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
}
Row {
spacing: 4
StyledText {
text: `<a href="https://github.com/AvengeMedia/dgop" style="text-decoration:none; color:${Theme.primary};">dgop</a>`
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
linkColor: Theme.primary
textFormat: Text.RichText
onLinkActivated: url => Qt.openUrlExternally(url)
anchors.verticalCenter: parent.verticalCenter
MouseArea {
anchors.fill: parent
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
acceptedButtons: Qt.NoButton
propagateComposedEvents: true
}
}
StyledText {
text: I18n.tr("- Stateless System Monitoring")
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
anchors.verticalCenter: parent.verticalCenter
}
}
}
}
}
StyledRect {
visible: DMSService.isConnected
width: parent.width
@@ -772,57 +694,20 @@ Item {
}
}
// Support Section
StyledRect {
width: parent.width
height: supportSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Row {
id: supportSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
spacing: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
DankIcon {
name: "volunteer_activism"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Support Development")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
anchors.horizontalCenter: parent.horizontalCenter
text: `<a href="https://github.com/AvengeMedia/DankMaterialShell/blob/master/LICENSE" style="text-decoration:none; color:${Theme.surfaceVariantText};">MIT License</a>`
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
textFormat: Text.RichText
wrapMode: Text.NoWrap
onLinkActivated: url => Qt.openUrlExternally(url)
Item {
width: parent.width - parent.spacing - kofiButton.width - supportSection.children[0].width
height: 1
}
DankButton {
id: kofiButton
text: I18n.tr("Donate on Ko-fi")
iconName: "favorite"
iconSize: 20
backgroundColor: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08)
textColor: Theme.primary
anchors.verticalCenter: parent.verticalCenter
onClicked: Qt.openUrlExternally("https://ko-fi.com/danklinux")
}
MouseArea {
anchors.fill: parent
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
acceptedButtons: Qt.NoButton
propagateComposedEvents: true
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -120,12 +120,10 @@ Item {
function onBindSaved(key) {
keybindsTab._savedScrollY = flickable.contentY;
keybindsTab._preserveScroll = true;
keybindsTab._editingKey = key;
}
function onBindRemoved(key) {
keybindsTab._savedScrollY = flickable.contentY;
keybindsTab._preserveScroll = true;
keybindsTab._editingKey = "";
}
}
@@ -597,15 +595,50 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
bindData: modelData
isExpanded: keybindsTab.expandedKey === modelData.action
restoreKey: isExpanded ? keybindsTab._editingKey : ""
panelWindow: keybindsTab.parentModal
onToggleExpand: keybindsTab.toggleExpanded(modelData.action)
onSaveBind: (originalKey, newData) => {
KeybindsService.saveBind(originalKey, newData);
keybindsTab._editingKey = newData.key;
keybindsTab.expandedKey = modelData.action;
}
onRemoveBind: key => KeybindsService.removeBind(key)
onRestoreKeyConsumed: keybindsTab._editingKey = ""
onRemoveBind: key => {
const remainingKey = bindItem.keys.find(k => k.key !== key)?.key ?? "";
KeybindsService.removeBind(key);
keybindsTab._editingKey = remainingKey;
}
onIsExpandedChanged: {
if (!isExpanded || !keybindsTab._editingKey)
return;
const keyExists = keys.some(k => k.key === keybindsTab._editingKey);
if (keyExists) {
restoreKey = keybindsTab._editingKey;
keybindsTab._editingKey = "";
}
}
onKeysChanged: {
if (!isExpanded || !keybindsTab._editingKey)
return;
const keyExists = keys.some(k => k.key === keybindsTab._editingKey);
if (keyExists) {
restoreKey = keybindsTab._editingKey;
keybindsTab._editingKey = "";
}
}
Connections {
target: keybindsTab
function on_EditingKeyChanged() {
if (!bindItem.isExpanded || !keybindsTab._editingKey)
return;
const keyExists = bindItem.keys.some(k => k.key === keybindsTab._editingKey);
if (keyExists) {
bindItem.restoreKey = keybindsTab._editingKey;
keybindsTab._editingKey = "";
}
}
}
}
}
}

View File

@@ -3,9 +3,10 @@ import qs.Common
import qs.Modals.FileBrowser
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: recentAppsTab
id: root
FileBrowserModal {
id: logoFileBrowser
@@ -13,9 +14,7 @@ Item {
browserIcon: "image"
browserType: "generic"
filterExtensions: ["*.svg", "*.png", "*.jpg", "*.jpeg", "*.webp"]
onFileSelected: path => {
SettingsData.set("launcherLogoCustomPath", path.replace("file://", ""));
}
onFileSelected: path => SettingsData.set("launcherLogoCustomPath", path.replace("file://", ""))
}
DankFlickable {
@@ -30,40 +29,10 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
StyledRect {
SettingsCard {
width: parent.width
height: launcherLogoSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: launcherLogoSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "apps"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Launcher Button Logo")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
iconName: "apps"
title: I18n.tr("Launcher Button Logo")
StyledText {
width: parent.width
@@ -75,7 +44,7 @@ Item {
Item {
width: parent.width
height: logoModeGroup.height
height: logoModeGroup.implicitHeight
DankButtonGroup {
id: logoModeGroup
@@ -112,16 +81,22 @@ Item {
onSelectionChanged: (index, selected) => {
if (!selected)
return;
if (index === 0) {
switch (index) {
case 0:
SettingsData.set("launcherLogoMode", "apps");
} else if (index === 1) {
break;
case 1:
SettingsData.set("launcherLogoMode", "os");
} else if (index === 2) {
break;
case 2:
SettingsData.set("launcherLogoMode", "dank");
} else if (index === 3) {
break;
case 3:
SettingsData.set("launcherLogoMode", "compositor");
} else if (index === 4) {
break;
case 4:
SettingsData.set("launcherLogoMode", "custom");
break;
}
}
}
@@ -130,16 +105,8 @@ Item {
Row {
width: parent.width
visible: SettingsData.launcherLogoMode === "custom"
opacity: visible ? 1 : 0
spacing: Theme.spacingM
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
StyledRect {
width: parent.width - selectButton.width - Theme.spacingM
height: 36
@@ -173,14 +140,6 @@ Item {
width: parent.width
spacing: Theme.spacingL
visible: SettingsData.launcherLogoMode !== "apps"
opacity: visible ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
Column {
width: parent.width
@@ -214,18 +173,23 @@ Item {
onSelectionChanged: (index, selected) => {
if (!selected)
return;
if (index === 0) {
switch (index) {
case 0:
SettingsData.set("launcherLogoColorOverride", "");
} else if (index === 1) {
break;
case 1:
SettingsData.set("launcherLogoColorOverride", "primary");
} else if (index === 2) {
break;
case 2:
SettingsData.set("launcherLogoColorOverride", "surface");
} else if (index === 3) {
break;
case 3:
const currentOverride = SettingsData.launcherLogoColorOverride;
const isPreset = currentOverride === "" || currentOverride === "primary" || currentOverride === "surface";
if (isPreset) {
SettingsData.set("launcherLogoColorOverride", "#ffffff");
}
break;
}
}
}
@@ -253,7 +217,8 @@ Item {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
if (PopoutService.colorPickerModal) {
if (!PopoutService.colorPickerModal)
return;
PopoutService.colorPickerModal.selectedColor = SettingsData.launcherLogoColorOverride;
PopoutService.colorPickerModal.pickerTitle = I18n.tr("Choose Launcher Logo Color");
PopoutService.colorPickerModal.onColorSelectedCallback = function (selectedColor) {
@@ -265,184 +230,57 @@ Item {
}
}
}
}
Column {
width: parent.width
spacing: Theme.spacingS
Column {
width: 120
spacing: Theme.spacingS
anchors.horizontalCenter: parent.horizontalCenter
StyledText {
SettingsSliderRow {
text: I18n.tr("Size Offset")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText
font.weight: Font.Medium
anchors.horizontalCenter: parent.horizontalCenter
}
DankSlider {
width: 100
height: 20
minimum: -12
maximum: 12
value: SettingsData.launcherLogoSizeOffset
unit: ""
showValue: true
wheelEnabled: false
thumbOutlineColor: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
anchors.horizontalCenter: parent.horizontalCenter
onSliderValueChanged: newValue => {
SettingsData.set("launcherLogoSizeOffset", newValue);
}
}
}
defaultValue: 0
onSliderValueChanged: newValue => SettingsData.set("launcherLogoSizeOffset", newValue)
}
Item {
Column {
width: parent.width
height: customControlsFlow.height
spacing: Theme.spacingM
visible: {
const override = SettingsData.launcherLogoColorOverride;
return override !== "" && override !== "primary" && override !== "surface";
}
opacity: visible ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
Flow {
id: customControlsFlow
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingS
Column {
width: 120
spacing: Theme.spacingS
StyledText {
SettingsSliderRow {
text: I18n.tr("Brightness")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText
font.weight: Font.Medium
anchors.horizontalCenter: parent.horizontalCenter
}
DankSlider {
width: 100
height: 20
minimum: 0
maximum: 100
value: Math.round(SettingsData.launcherLogoBrightness * 100)
unit: "%"
showValue: true
wheelEnabled: false
thumbOutlineColor: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
anchors.horizontalCenter: parent.horizontalCenter
onSliderValueChanged: newValue => {
SettingsData.set("launcherLogoBrightness", newValue / 100);
}
}
defaultValue: 100
onSliderValueChanged: newValue => SettingsData.set("launcherLogoBrightness", newValue / 100)
}
Column {
width: 120
spacing: Theme.spacingS
StyledText {
SettingsSliderRow {
text: I18n.tr("Contrast")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText
font.weight: Font.Medium
anchors.horizontalCenter: parent.horizontalCenter
}
DankSlider {
width: 100
height: 20
minimum: 0
maximum: 200
value: Math.round(SettingsData.launcherLogoContrast * 100)
unit: "%"
showValue: true
wheelEnabled: false
thumbOutlineColor: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
anchors.horizontalCenter: parent.horizontalCenter
onSliderValueChanged: newValue => {
SettingsData.set("launcherLogoContrast", newValue / 100);
}
}
defaultValue: 100
onSliderValueChanged: newValue => SettingsData.set("launcherLogoContrast", newValue / 100)
}
Column {
width: 120
spacing: Theme.spacingS
StyledText {
SettingsToggleRow {
text: I18n.tr("Invert on mode change")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText
font.weight: Font.Medium
anchors.horizontalCenter: parent.horizontalCenter
}
DankToggle {
width: 32
height: 18
checked: SettingsData.launcherLogoColorInvertOnMode
anchors.horizontalCenter: parent.horizontalCenter
onToggled: checked => {
SettingsData.set("launcherLogoColorInvertOnMode", checked);
}
}
}
}
onToggled: checked => SettingsData.set("launcherLogoColorInvertOnMode", checked)
}
}
}
}
StyledRect {
SettingsCard {
width: parent.width
height: launchPrefixSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: launchPrefixSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "terminal"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Launch Prefix")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
iconName: "terminal"
title: I18n.tr("Launch Prefix")
StyledText {
width: parent.width
@@ -456,278 +294,58 @@ Item {
width: parent.width
text: SettingsData.launchPrefix
placeholderText: I18n.tr("Enter launch prefix (e.g., 'uwsm-app')")
onTextEdited: {
SettingsData.set("launchPrefix", text);
}
}
onTextEdited: SettingsData.set("launchPrefix", text)
}
}
StyledRect {
SettingsCard {
width: parent.width
height: sortingSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
iconName: "sort_by_alpha"
title: I18n.tr("Sorting & Layout")
Column {
id: sortingSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "sort_by_alpha"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
SettingsToggleRow {
text: I18n.tr("Sort Alphabetically")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
Item {
width: parent.width - parent.children[0].width - parent.children[1].width - sortToggle.width - Theme.spacingM * 3
height: 1
}
DankToggle {
id: sortToggle
width: 32
height: 18
description: I18n.tr("When enabled, apps are sorted alphabetically. When disabled, apps are sorted by usage frequency.")
checked: SettingsData.sortAppsAlphabetically
anchors.verticalCenter: parent.verticalCenter
onToggled: checked => {
SettingsData.set("sortAppsAlphabetically", checked);
}
}
onToggled: checked => SettingsData.set("sortAppsAlphabetically", checked)
}
StyledText {
width: parent.width
text: I18n.tr("When enabled, apps are sorted alphabetically. When disabled, apps are sorted by usage frequency.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
}
}
}
StyledRect {
width: parent.width
height: gridColumnsSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: gridColumnsSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "grid_view"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
SettingsSliderRow {
text: I18n.tr("Grid Columns")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
StyledText {
width: parent.width
text: I18n.tr("Adjust the number of columns in grid view mode.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
}
Column {
width: 120
spacing: Theme.spacingS
anchors.horizontalCenter: parent.horizontalCenter
DankSlider {
width: 100
height: 20
description: I18n.tr("Adjust the number of columns in grid view mode.")
minimum: 2
maximum: 8
value: SettingsData.appLauncherGridColumns
unit: ""
showValue: true
wheelEnabled: false
thumbOutlineColor: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
anchors.horizontalCenter: parent.horizontalCenter
onSliderValueChanged: newValue => {
SettingsData.set("appLauncherGridColumns", newValue);
}
}
}
defaultValue: 5
onSliderValueChanged: newValue => SettingsData.set("appLauncherGridColumns", newValue)
}
}
StyledRect {
SettingsCard {
width: parent.width
height: niriOverviewSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
iconName: "open_in_new"
title: I18n.tr("Niri Integration")
visible: CompositorService.isNiri
Column {
id: niriOverviewSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "open_in_new"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
SettingsToggleRow {
text: I18n.tr("Close Overview on Launch")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
Item {
width: parent.width - parent.children[0].width - parent.children[1].width - niriOverviewToggle.width - Theme.spacingM * 3
height: 1
}
DankToggle {
id: niriOverviewToggle
width: 32
height: 18
description: I18n.tr("When enabled, launching an app from the launcher will automatically close the Niri overview if it's open.")
checked: SettingsData.spotlightCloseNiriOverview
anchors.verticalCenter: parent.verticalCenter
onToggled: checked => {
SettingsData.set("spotlightCloseNiriOverview", checked);
}
}
onToggled: checked => SettingsData.set("spotlightCloseNiriOverview", checked)
}
StyledText {
width: parent.width
text: I18n.tr("When enabled, launching an app from the launcher will automatically close the Niri overview if it's open.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
}
}
}
StyledRect {
width: parent.width
height: niriOverlayEnabledSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
visible: CompositorService.isNiri
Column {
id: niriOverlayEnabledSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "layers"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
SettingsToggleRow {
text: I18n.tr("Enable Overview Overlay")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
Item {
width: parent.width - parent.children[0].width - parent.children[1].width - niriOverlayToggle.width - Theme.spacingM * 3
height: 1
}
DankToggle {
id: niriOverlayToggle
width: 32
height: 18
description: I18n.tr("When enabled, shows the launcher overlay when typing in Niri overview mode. Disable this if you prefer to not have the launcher when typing on Niri overview or want to use other launcher in the overview.")
checked: SettingsData.niriOverviewOverlayEnabled
anchors.verticalCenter: parent.verticalCenter
onToggled: checked => {
SettingsData.set("niriOverviewOverlayEnabled", checked);
}
onToggled: checked => SettingsData.set("niriOverviewOverlayEnabled", checked)
}
}
StyledText {
SettingsCard {
width: parent.width
text: I18n.tr("When enabled, shows the launcher overlay when typing in Niri overview mode. Disable this if you prefer to not have the launcher when typing on Niri overview or want to use other launcher in the overview.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
}
}
}
StyledRect {
width: parent.width
height: recentlyUsedSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: recentlyUsedSection
iconName: "history"
title: I18n.tr("Recently Used Apps")
property var rankedAppsModel: {
var apps = [];
@@ -746,43 +364,26 @@ Item {
apps.sort(function (a, b) {
if (a.usageCount !== b.usageCount)
return b.usageCount - a.usageCount;
return a.name.localeCompare(b.name);
});
return apps.slice(0, 20);
}
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "history"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Recently Used Apps")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
width: parent.width - clearAllButton.width - Theme.spacingM
text: I18n.tr("Apps are ordered by usage frequency, then last used, then alphabetically.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
anchors.verticalCenter: parent.verticalCenter
}
Item {
width: parent.width - parent.children[0].width - parent.children[1].width - clearAllButton.width - Theme.spacingM * 3
height: 1
}
DankActionButton {
id: clearAllButton
iconName: "delete_sweep"
iconSize: Theme.iconSize - 2
iconColor: Theme.error
@@ -794,29 +395,19 @@ Item {
}
}
StyledText {
width: parent.width
text: I18n.tr("Apps are ordered by usage frequency, then last used, then alphabetically.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
}
Column {
id: rankedAppsList
width: parent.width
spacing: Theme.spacingS
Repeater {
model: recentlyUsedSection.rankedAppsModel
model: parent.parent.rankedAppsModel
delegate: Rectangle {
width: rankedAppsList.width
height: 48
radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 0.3)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.1)
border.width: 0
Row {
@@ -863,7 +454,6 @@ Item {
text: {
if (!modelData.lastUsed)
return "Never used";
var date = new Date(modelData.lastUsed);
var now = new Date();
var diffMs = now - date;
@@ -872,16 +462,12 @@ Item {
var diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
if (diffMins < 1)
return I18n.tr("Last launched just now");
if (diffMins < 60)
return I18n.tr("Last launched %1 minute%2 ago").arg(diffMins).arg(diffMins === 1 ? "" : "s");
if (diffHours < 24)
return I18n.tr("Last launched %1 hour%2 ago").arg(diffHours).arg(diffHours === 1 ? "" : "s");
if (diffDays < 7)
return I18n.tr("Last launched %1 day%2 ago").arg(diffDays).arg(diffDays === 1 ? "" : "s");
return I18n.tr("Last launched %1").arg(date.toLocaleDateString());
}
font.pixelSize: Theme.fontSizeSmall
@@ -910,12 +496,11 @@ Item {
StyledText {
width: parent.width
text: recentlyUsedSection.rankedAppsModel.length === 0 ? "No apps have been launched yet." : ""
text: parent.parent.rankedAppsModel.length === 0 ? "No apps have been launched yet." : ""
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
horizontalAlignment: Text.AlignHCenter
visible: recentlyUsedSection.rankedAppsModel.length === 0
}
visible: parent.parent.rankedAppsModel.length === 0
}
}
}

View File

@@ -0,0 +1,183 @@
import QtQuick
import Quickshell
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "lock"
title: I18n.tr("Lock Screen")
SettingsToggleRow {
text: I18n.tr("Show Power Actions")
description: I18n.tr("Show power, restart, and logout buttons on the lock screen")
checked: SettingsData.lockScreenShowPowerActions
onToggled: checked => SettingsData.set("lockScreenShowPowerActions", checked)
}
StyledText {
text: I18n.tr("loginctl not available - lock integration requires DMS socket connection")
font.pixelSize: Theme.fontSizeSmall
color: Theme.warning
visible: !SessionService.loginctlAvailable
width: parent.width
wrapMode: Text.Wrap
}
SettingsToggleRow {
text: I18n.tr("Enable loginctl lock integration")
description: I18n.tr("Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen")
checked: SessionService.loginctlAvailable && SettingsData.loginctlLockIntegration
enabled: SessionService.loginctlAvailable
onToggled: checked => {
if (!SessionService.loginctlAvailable)
return;
SettingsData.set("loginctlLockIntegration", checked);
}
}
SettingsToggleRow {
text: I18n.tr("Lock before suspend")
description: I18n.tr("Automatically lock the screen when the system prepares to suspend")
checked: SettingsData.lockBeforeSuspend
visible: SessionService.loginctlAvailable && SettingsData.loginctlLockIntegration
onToggled: checked => SettingsData.set("lockBeforeSuspend", checked)
}
SettingsToggleRow {
text: I18n.tr("Enable fingerprint authentication")
description: I18n.tr("Use fingerprint reader for lock screen authentication (requires enrolled fingerprints)")
checked: SettingsData.enableFprint
visible: SettingsData.fprintdAvailable
onToggled: checked => SettingsData.set("enableFprint", checked)
}
}
SettingsCard {
width: parent.width
iconName: "monitor"
title: I18n.tr("Lock Screen Display")
visible: Quickshell.screens.length > 1
StyledText {
text: I18n.tr("Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
width: parent.width
wrapMode: Text.Wrap
}
SettingsDropdownRow {
id: lockScreenMonitorDropdown
text: I18n.tr("Active Lock Screen Monitor")
options: {
var opts = [I18n.tr("All Monitors")];
var screens = Quickshell.screens;
for (var i = 0; i < screens.length; i++) {
opts.push(SettingsData.getScreenDisplayName(screens[i]));
}
return opts;
}
Component.onCompleted: {
if (SettingsData.lockScreenActiveMonitor === "all") {
currentValue = I18n.tr("All Monitors");
return;
}
var screens = Quickshell.screens;
for (var i = 0; i < screens.length; i++) {
if (screens[i].name === SettingsData.lockScreenActiveMonitor) {
currentValue = SettingsData.getScreenDisplayName(screens[i]);
return;
}
}
currentValue = I18n.tr("All Monitors");
}
onValueChanged: value => {
if (value === I18n.tr("All Monitors")) {
SettingsData.set("lockScreenActiveMonitor", "all");
return;
}
var screens = Quickshell.screens;
for (var i = 0; i < screens.length; i++) {
if (SettingsData.getScreenDisplayName(screens[i]) === value) {
SettingsData.set("lockScreenActiveMonitor", screens[i].name);
return;
}
}
}
}
Row {
width: parent.width
spacing: Theme.spacingM
visible: SettingsData.lockScreenActiveMonitor !== "all"
Column {
width: parent.width - inactiveColorPreview.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
text: I18n.tr("Inactive Monitor Color")
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Color displayed on monitors without the lock screen")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
width: parent.width
wrapMode: Text.Wrap
}
}
Rectangle {
id: inactiveColorPreview
width: 48
height: 48
radius: Theme.cornerRadius
color: SettingsData.lockScreenInactiveColor
border.color: Theme.outline
border.width: 1
anchors.verticalCenter: parent.verticalCenter
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
if (!PopoutService.colorPickerModal)
return;
PopoutService.colorPickerModal.selectedColor = SettingsData.lockScreenInactiveColor;
PopoutService.colorPickerModal.pickerTitle = I18n.tr("Inactive Monitor Color");
PopoutService.colorPickerModal.onColorSelectedCallback = function (selectedColor) {
SettingsData.set("lockScreenInactiveColor", selectedColor);
};
PopoutService.colorPickerModal.show();
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,42 @@
import QtQuick
import qs.Common
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "music_note"
title: I18n.tr("Media Player Settings")
SettingsToggleRow {
text: I18n.tr("Wave Progress Bars")
description: I18n.tr("Use animated wave progress bars for media playback")
checked: SettingsData.waveProgressEnabled
onToggled: checked => SettingsData.set("waveProgressEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Scroll song title")
description: I18n.tr("Scroll title if it doesn't fit in widget")
checked: SettingsData.scrollTitleEnabled
onToggled: checked => SettingsData.set("scrollTitleEnabled", checked)
}
}
}
}
}

View File

@@ -0,0 +1,208 @@
import QtQuick
import qs.Common
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
readonly property var timeoutOptions: [
{
text: I18n.tr("Never"),
value: 0
},
{
text: I18n.tr("1 second"),
value: 1000
},
{
text: I18n.tr("3 seconds"),
value: 3000
},
{
text: I18n.tr("5 seconds"),
value: 5000
},
{
text: I18n.tr("8 seconds"),
value: 8000
},
{
text: I18n.tr("10 seconds"),
value: 10000
},
{
text: I18n.tr("15 seconds"),
value: 15000
},
{
text: I18n.tr("30 seconds"),
value: 30000
},
{
text: I18n.tr("1 minute"),
value: 60000
},
{
text: I18n.tr("2 minutes"),
value: 120000
},
{
text: I18n.tr("5 minutes"),
value: 300000
},
{
text: I18n.tr("10 minutes"),
value: 600000
}
]
function getTimeoutText(value) {
if (value === undefined || value === null || isNaN(value))
return I18n.tr("5 seconds");
for (let i = 0; i < timeoutOptions.length; i++) {
if (timeoutOptions[i].value === value)
return timeoutOptions[i].text;
}
if (value === 0)
return I18n.tr("Never");
if (value < 1000)
return value + "ms";
if (value < 60000)
return Math.round(value / 1000) + " " + I18n.tr("seconds");
return Math.round(value / 60000) + " " + I18n.tr("minutes");
}
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "notifications"
title: I18n.tr("Notification Popups")
SettingsDropdownRow {
text: I18n.tr("Popup Position")
description: I18n.tr("Choose where notification popups appear on screen")
currentValue: {
if (SettingsData.notificationPopupPosition === -1)
return "Top Center";
switch (SettingsData.notificationPopupPosition) {
case SettingsData.Position.Top:
return "Top Right";
case SettingsData.Position.Bottom:
return "Bottom Left";
case SettingsData.Position.Left:
return "Top Left";
case SettingsData.Position.Right:
return "Bottom Right";
default:
return "Top Right";
}
}
options: ["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left"]
onValueChanged: value => {
switch (value) {
case "Top Right":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Top);
break;
case "Top Left":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Left);
break;
case "Top Center":
SettingsData.set("notificationPopupPosition", -1);
break;
case "Bottom Right":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Right);
break;
case "Bottom Left":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Bottom);
break;
}
SettingsData.sendTestNotifications();
}
}
SettingsToggleRow {
text: I18n.tr("Notification Overlay")
description: I18n.tr("Display all priorities over fullscreen apps")
checked: SettingsData.notificationOverlayEnabled
onToggled: checked => SettingsData.set("notificationOverlayEnabled", checked)
}
}
SettingsCard {
width: parent.width
iconName: "notifications_off"
title: I18n.tr("Do Not Disturb")
SettingsToggleRow {
text: I18n.tr("Enable Do Not Disturb")
description: I18n.tr("Suppress notification popups while enabled")
checked: SessionData.doNotDisturb
onToggled: checked => SessionData.setDoNotDisturb(checked)
}
}
SettingsCard {
width: parent.width
iconName: "timer"
title: I18n.tr("Notification Timeouts")
SettingsDropdownRow {
text: I18n.tr("Low Priority")
description: I18n.tr("Timeout for low priority notifications")
currentValue: root.getTimeoutText(SettingsData.notificationTimeoutLow)
options: root.timeoutOptions.map(opt => opt.text)
onValueChanged: value => {
for (let i = 0; i < root.timeoutOptions.length; i++) {
if (root.timeoutOptions[i].text === value) {
SettingsData.set("notificationTimeoutLow", root.timeoutOptions[i].value);
break;
}
}
}
}
SettingsDropdownRow {
text: I18n.tr("Normal Priority")
description: I18n.tr("Timeout for normal priority notifications")
currentValue: root.getTimeoutText(SettingsData.notificationTimeoutNormal)
options: root.timeoutOptions.map(opt => opt.text)
onValueChanged: value => {
for (let i = 0; i < root.timeoutOptions.length; i++) {
if (root.timeoutOptions[i].text === value) {
SettingsData.set("notificationTimeoutNormal", root.timeoutOptions[i].value);
break;
}
}
}
}
SettingsDropdownRow {
text: I18n.tr("Critical Priority")
description: I18n.tr("Timeout for critical priority notifications")
currentValue: root.getTimeoutText(SettingsData.notificationTimeoutCritical)
options: root.timeoutOptions.map(opt => opt.text)
onValueChanged: value => {
for (let i = 0; i < root.timeoutOptions.length; i++) {
if (root.timeoutOptions[i].text === value) {
SettingsData.set("notificationTimeoutCritical", root.timeoutOptions[i].value);
break;
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,147 @@
import QtQuick
import qs.Common
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "tune"
title: I18n.tr("On-screen Displays")
SettingsDropdownRow {
text: I18n.tr("OSD Position")
description: I18n.tr("Choose where on-screen displays appear on screen")
currentValue: {
switch (SettingsData.osdPosition) {
case SettingsData.Position.Top:
return "Top Right";
case SettingsData.Position.Left:
return "Top Left";
case SettingsData.Position.TopCenter:
return "Top Center";
case SettingsData.Position.Right:
return "Bottom Right";
case SettingsData.Position.Bottom:
return "Bottom Left";
case SettingsData.Position.BottomCenter:
return "Bottom Center";
case SettingsData.Position.LeftCenter:
return "Left Center";
case SettingsData.Position.RightCenter:
return "Right Center";
default:
return "Bottom Center";
}
}
options: ["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left", "Bottom Center", "Left Center", "Right Center"]
onValueChanged: value => {
switch (value) {
case "Top Right":
SettingsData.set("osdPosition", SettingsData.Position.Top);
break;
case "Top Left":
SettingsData.set("osdPosition", SettingsData.Position.Left);
break;
case "Top Center":
SettingsData.set("osdPosition", SettingsData.Position.TopCenter);
break;
case "Bottom Right":
SettingsData.set("osdPosition", SettingsData.Position.Right);
break;
case "Bottom Left":
SettingsData.set("osdPosition", SettingsData.Position.Bottom);
break;
case "Bottom Center":
SettingsData.set("osdPosition", SettingsData.Position.BottomCenter);
break;
case "Left Center":
SettingsData.set("osdPosition", SettingsData.Position.LeftCenter);
break;
case "Right Center":
SettingsData.set("osdPosition", SettingsData.Position.RightCenter);
break;
}
}
}
SettingsToggleRow {
text: I18n.tr("Always Show Percentage")
description: I18n.tr("Display volume and brightness percentage values in OSD popups")
checked: SettingsData.osdAlwaysShowValue
onToggled: checked => SettingsData.set("osdAlwaysShowValue", checked)
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
SettingsToggleRow {
text: I18n.tr("Volume")
description: I18n.tr("Show on-screen display when volume changes")
checked: SettingsData.osdVolumeEnabled
onToggled: checked => SettingsData.set("osdVolumeEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Media Volume")
description: I18n.tr("Show on-screen display when media player volume changes")
checked: SettingsData.osdMediaVolumeEnabled
onToggled: checked => SettingsData.set("osdMediaVolumeEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Brightness")
description: I18n.tr("Show on-screen display when brightness changes")
checked: SettingsData.osdBrightnessEnabled
onToggled: checked => SettingsData.set("osdBrightnessEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Idle Inhibitor")
description: I18n.tr("Show on-screen display when idle inhibitor state changes")
checked: SettingsData.osdIdleInhibitorEnabled
onToggled: checked => SettingsData.set("osdIdleInhibitorEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Microphone Mute")
description: I18n.tr("Show on-screen display when microphone is muted/unmuted")
checked: SettingsData.osdMicMuteEnabled
onToggled: checked => SettingsData.set("osdMicMuteEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Caps Lock")
description: I18n.tr("Show on-screen display when caps lock state changes")
checked: SettingsData.osdCapsLockEnabled
onToggled: checked => SettingsData.set("osdCapsLockEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Power Profile")
description: I18n.tr("Show on-screen display when power profile changes")
checked: SettingsData.osdPowerProfileEnabled
onToggled: checked => SettingsData.set("osdPowerProfileEnabled", checked)
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,459 @@
import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
readonly property var timeoutOptions: ["Never", "1 minute", "2 minutes", "3 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes", "30 minutes", "1 hour", "1 hour 30 minutes", "2 hours", "3 hours"]
readonly property var timeoutValues: [0, 60, 120, 180, 300, 600, 900, 1200, 1800, 3600, 5400, 7200, 10800]
function getTimeoutIndex(timeout) {
var idx = timeoutValues.indexOf(timeout);
return idx >= 0 ? idx : 0;
}
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "schedule"
title: I18n.tr("Idle Settings")
Row {
width: parent.width
spacing: Theme.spacingM
StyledText {
text: I18n.tr("Power source")
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
visible: BatteryService.batteryAvailable
}
Item {
width: Theme.spacingS
height: 1
visible: BatteryService.batteryAvailable
}
DankButtonGroup {
id: powerCategory
anchors.verticalCenter: parent.verticalCenter
visible: BatteryService.batteryAvailable
model: ["AC Power", "Battery"]
currentIndex: 0
selectionMode: "single"
checkEnabled: false
}
}
SettingsToggleRow {
text: I18n.tr("Prevent idle for media")
description: I18n.tr("Inhibit idle timeout when audio or video is playing")
checked: SettingsData.preventIdleForMedia
visible: IdleService.idleMonitorAvailable
onToggled: checked => SettingsData.set("preventIdleForMedia", checked)
}
SettingsToggleRow {
text: I18n.tr("Fade to lock screen")
description: I18n.tr("Gradually fade the screen before locking with a configurable grace period")
checked: SettingsData.fadeToLockEnabled
onToggled: checked => SettingsData.set("fadeToLockEnabled", checked)
}
SettingsDropdownRow {
id: fadeGracePeriodDropdown
property var periodOptions: ["1 second", "2 seconds", "3 seconds", "4 seconds", "5 seconds", "10 seconds", "15 seconds", "20 seconds", "30 seconds"]
property var periodValues: [1, 2, 3, 4, 5, 10, 15, 20, 30]
text: I18n.tr("Fade grace period")
options: periodOptions
visible: SettingsData.fadeToLockEnabled
enabled: SettingsData.fadeToLockEnabled
Component.onCompleted: {
const currentPeriod = SettingsData.fadeToLockGracePeriod;
const index = periodValues.indexOf(currentPeriod);
currentValue = index >= 0 ? periodOptions[index] : "5 seconds";
}
onValueChanged: value => {
const index = periodOptions.indexOf(value);
if (index < 0)
return;
SettingsData.set("fadeToLockGracePeriod", periodValues[index]);
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
SettingsDropdownRow {
id: lockDropdown
text: I18n.tr("Automatically lock after")
options: root.timeoutOptions
Connections {
target: powerCategory
function onCurrentIndexChanged() {
const currentTimeout = powerCategory.currentIndex === 0 ? SettingsData.acLockTimeout : SettingsData.batteryLockTimeout;
lockDropdown.currentValue = root.timeoutOptions[root.getTimeoutIndex(currentTimeout)];
}
}
Component.onCompleted: {
const currentTimeout = powerCategory.currentIndex === 0 ? SettingsData.acLockTimeout : SettingsData.batteryLockTimeout;
currentValue = root.timeoutOptions[root.getTimeoutIndex(currentTimeout)];
}
onValueChanged: value => {
const index = root.timeoutOptions.indexOf(value);
if (index < 0)
return;
const timeout = root.timeoutValues[index];
if (powerCategory.currentIndex === 0) {
SettingsData.set("acLockTimeout", timeout);
} else {
SettingsData.set("batteryLockTimeout", timeout);
}
}
}
SettingsDropdownRow {
id: monitorDropdown
text: I18n.tr("Turn off monitors after")
options: root.timeoutOptions
Connections {
target: powerCategory
function onCurrentIndexChanged() {
const currentTimeout = powerCategory.currentIndex === 0 ? SettingsData.acMonitorTimeout : SettingsData.batteryMonitorTimeout;
monitorDropdown.currentValue = root.timeoutOptions[root.getTimeoutIndex(currentTimeout)];
}
}
Component.onCompleted: {
const currentTimeout = powerCategory.currentIndex === 0 ? SettingsData.acMonitorTimeout : SettingsData.batteryMonitorTimeout;
currentValue = root.timeoutOptions[root.getTimeoutIndex(currentTimeout)];
}
onValueChanged: value => {
const index = root.timeoutOptions.indexOf(value);
if (index < 0)
return;
const timeout = root.timeoutValues[index];
if (powerCategory.currentIndex === 0) {
SettingsData.set("acMonitorTimeout", timeout);
} else {
SettingsData.set("batteryMonitorTimeout", timeout);
}
}
}
SettingsDropdownRow {
id: suspendDropdown
text: I18n.tr("Suspend system after")
options: root.timeoutOptions
Connections {
target: powerCategory
function onCurrentIndexChanged() {
const currentTimeout = powerCategory.currentIndex === 0 ? SettingsData.acSuspendTimeout : SettingsData.batterySuspendTimeout;
suspendDropdown.currentValue = root.timeoutOptions[root.getTimeoutIndex(currentTimeout)];
}
}
Component.onCompleted: {
const currentTimeout = powerCategory.currentIndex === 0 ? SettingsData.acSuspendTimeout : SettingsData.batterySuspendTimeout;
currentValue = root.timeoutOptions[root.getTimeoutIndex(currentTimeout)];
}
onValueChanged: value => {
const index = root.timeoutOptions.indexOf(value);
if (index < 0)
return;
const timeout = root.timeoutValues[index];
if (powerCategory.currentIndex === 0) {
SettingsData.set("acSuspendTimeout", timeout);
} else {
SettingsData.set("batterySuspendTimeout", timeout);
}
}
}
Column {
width: parent.width
spacing: Theme.spacingS
visible: SessionService.hibernateSupported
StyledText {
text: I18n.tr("Suspend behavior")
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
leftPadding: Theme.spacingM
}
DankButtonGroup {
id: suspendBehaviorSelector
anchors.horizontalCenter: parent.horizontalCenter
model: ["Suspend", "Hibernate", "Suspend then Hibernate"]
selectionMode: "single"
checkEnabled: false
Connections {
target: powerCategory
function onCurrentIndexChanged() {
const behavior = powerCategory.currentIndex === 0 ? SettingsData.acSuspendBehavior : SettingsData.batterySuspendBehavior;
suspendBehaviorSelector.currentIndex = behavior;
}
}
Component.onCompleted: {
const behavior = powerCategory.currentIndex === 0 ? SettingsData.acSuspendBehavior : SettingsData.batterySuspendBehavior;
currentIndex = behavior;
}
onSelectionChanged: (index, selected) => {
if (!selected)
return;
if (powerCategory.currentIndex === 0) {
SettingsData.set("acSuspendBehavior", index);
} else {
SettingsData.set("batterySuspendBehavior", index);
}
}
}
}
StyledText {
text: I18n.tr("Idle monitoring not supported - requires newer Quickshell version")
font.pixelSize: Theme.fontSizeSmall
color: Theme.error
anchors.horizontalCenter: parent.horizontalCenter
visible: !IdleService.idleMonitorAvailable
}
}
SettingsCard {
width: parent.width
iconName: "tune"
title: I18n.tr("Power Menu Customization")
StyledText {
text: I18n.tr("Customize which actions appear in the power menu")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
width: parent.width
wrapMode: Text.Wrap
}
SettingsToggleRow {
text: I18n.tr("Use Grid Layout")
description: I18n.tr("Display power menu actions in a grid instead of a list")
checked: SettingsData.powerMenuGridLayout
onToggled: checked => SettingsData.set("powerMenuGridLayout", checked)
}
SettingsDropdownRow {
id: defaultActionDropdown
text: I18n.tr("Default selected action")
options: ["Reboot", "Log Out", "Power Off", "Lock", "Suspend", "Restart DMS", "Hibernate"]
property var actionValues: ["reboot", "logout", "poweroff", "lock", "suspend", "restart", "hibernate"]
Component.onCompleted: {
const currentAction = SettingsData.powerMenuDefaultAction || "logout";
const index = actionValues.indexOf(currentAction);
currentValue = index >= 0 ? options[index] : "Log Out";
}
onValueChanged: value => {
const index = options.indexOf(value);
if (index < 0)
return;
SettingsData.set("powerMenuDefaultAction", actionValues[index]);
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
Column {
width: parent.width
spacing: Theme.spacingS
Repeater {
model: [
{
key: "reboot",
label: I18n.tr("Show Reboot")
},
{
key: "logout",
label: I18n.tr("Show Log Out")
},
{
key: "poweroff",
label: I18n.tr("Show Power Off")
},
{
key: "lock",
label: I18n.tr("Show Lock")
},
{
key: "suspend",
label: I18n.tr("Show Suspend")
},
{
key: "restart",
label: I18n.tr("Show Restart DMS"),
desc: I18n.tr("Restart the DankMaterialShell")
},
{
key: "hibernate",
label: I18n.tr("Show Hibernate"),
desc: I18n.tr("Only visible if hibernate is supported by your system"),
hibernate: true
}
]
SettingsToggleRow {
required property var modelData
text: modelData.label
description: modelData.desc || ""
visible: !modelData.hibernate || SessionService.hibernateSupported
checked: SettingsData.powerMenuActions.includes(modelData.key)
onToggled: checked => {
let actions = [...SettingsData.powerMenuActions];
if (checked && !actions.includes(modelData.key)) {
actions.push(modelData.key);
} else if (!checked) {
actions = actions.filter(a => a !== modelData.key);
}
SettingsData.set("powerMenuActions", actions);
}
}
}
}
}
SettingsCard {
width: parent.width
iconName: "check_circle"
title: I18n.tr("Power Action Confirmation")
SettingsToggleRow {
text: I18n.tr("Hold to Confirm Power Actions")
description: I18n.tr("Require holding button/key to confirm power off, restart, suspend, hibernate and logout")
checked: SettingsData.powerActionConfirm
onToggled: checked => SettingsData.set("powerActionConfirm", checked)
}
SettingsSliderRow {
text: I18n.tr("Hold Duration")
description: I18n.tr("How long to hold the button to confirm the action")
minimum: 1
maximum: 10
unit: "s"
visible: SettingsData.powerActionConfirm
value: SettingsData.powerActionHoldDuration
onSliderValueChanged: newValue => SettingsData.set("powerActionHoldDuration", newValue)
}
}
SettingsCard {
width: parent.width
iconName: "developer_mode"
title: I18n.tr("Custom Power Actions")
Repeater {
model: [
{
key: "customPowerActionLock",
label: I18n.tr("Custom Lock Command"),
placeholder: "/usr/bin/myLock.sh"
},
{
key: "customPowerActionLogout",
label: I18n.tr("Custom Logout Command"),
placeholder: "/usr/bin/myLogout.sh"
},
{
key: "customPowerActionSuspend",
label: I18n.tr("Custom Suspend Command"),
placeholder: "/usr/bin/mySuspend.sh"
},
{
key: "customPowerActionHibernate",
label: I18n.tr("Custom Hibernate Command"),
placeholder: "/usr/bin/myHibernate.sh"
},
{
key: "customPowerActionReboot",
label: I18n.tr("Custom Reboot Command"),
placeholder: "/usr/bin/myReboot.sh"
},
{
key: "customPowerActionPowerOff",
label: I18n.tr("Custom Power Off Command"),
placeholder: "/usr/bin/myPowerOff.sh"
}
]
Column {
required property var modelData
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: modelData.label
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
width: parent.width
height: 48
placeholderText: modelData.placeholder
backgroundColor: Theme.withAlpha(Theme.surfaceContainerHighest, Theme.popupTransparency)
normalBorderColor: Theme.outlineMedium
focusedBorderColor: Theme.primary
Component.onCompleted: {
var val = SettingsData[modelData.key];
if (val)
text = val;
}
onTextEdited: {
SettingsData.set(modelData.key, text.trim());
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,35 @@
import QtQuick
import qs.Common
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "apps"
title: I18n.tr("Running Apps Settings")
SettingsToggleRow {
text: I18n.tr("Running Apps Only In Current Workspace")
description: I18n.tr("Show only apps running in current workspace")
checked: SettingsData.runningAppsCurrentWorkspace
onToggled: checked => SettingsData.set("runningAppsCurrentWorkspace", checked)
}
}
}
}
}

View File

@@ -1,103 +0,0 @@
import QtQuick
import qs.Common
import qs.Widgets
Column {
id: root
property string title: ""
property string iconName: ""
property alias content: contentLoader.sourceComponent
property bool expanded: false
property bool collapsible: true
property bool lazyLoad: true
width: parent.width
spacing: expanded ? Theme.spacingM : 0
Component.onCompleted: {
if (!collapsible)
expanded = true;
}
MouseArea {
width: parent.width
height: headerRow.height
enabled: collapsible
hoverEnabled: collapsible
onClicked: {
if (collapsible)
expanded = !expanded;
}
Rectangle {
anchors.fill: parent
color: parent.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : "transparent"
radius: Theme.radiusS
}
Row {
id: headerRow
width: parent.width
spacing: Theme.spacingS
topPadding: Theme.spacingS
bottomPadding: Theme.spacingS
DankIcon {
name: root.collapsible ? (root.expanded ? "expand_less" : "expand_more") : root.iconName
size: Theme.iconSize - 2
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
Behavior on rotation {
NumberAnimation {
duration: Appearance.anim.durations.fast
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}
}
DankIcon {
name: root.iconName
size: Theme.iconSize - 4
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
visible: root.collapsible
}
StyledText {
text: root.title
font.pixelSize: Theme.fontSizeLarge
color: Theme.surfaceText
font.weight: Font.Medium
anchors.verticalCenter: parent.verticalCenter
}
}
}
Rectangle {
width: parent.width
height: 1
color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12)
visible: expanded || !collapsible
}
Loader {
id: contentLoader
width: parent.width
active: lazyLoad ? expanded || !collapsible : true
visible: expanded || !collapsible
asynchronous: true
opacity: visible ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}
}
}

View File

@@ -0,0 +1,156 @@
import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
tab: "sounds"
tags: ["sound", "audio", "notification", "volume"]
title: I18n.tr("System Sounds")
iconName: SettingsData.soundsEnabled ? "volume_up" : "volume_off"
visible: AudioService.soundsAvailable
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "enable", "system"]
settingKey: "soundsEnabled"
text: I18n.tr("Enable System Sounds")
description: I18n.tr("Play sounds for system events")
checked: SettingsData.soundsEnabled
onToggled: checked => SettingsData.set("soundsEnabled", checked)
}
Column {
width: parent.width
spacing: Theme.spacingM
visible: SettingsData.soundsEnabled
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.2
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "theme", "system"]
settingKey: "useSystemSoundTheme"
visible: AudioService.gsettingsAvailable
text: I18n.tr("Use System Theme")
description: I18n.tr("Use sound theme from system settings")
checked: SettingsData.useSystemSoundTheme
onToggled: checked => SettingsData.set("useSystemSoundTheme", checked)
}
SettingsDropdownRow {
tab: "sounds"
tags: ["sound", "theme", "select"]
settingKey: "soundTheme"
visible: SettingsData.useSystemSoundTheme && AudioService.availableSoundThemes.length > 0
enabled: SettingsData.useSystemSoundTheme && AudioService.availableSoundThemes.length > 0
text: I18n.tr("Sound Theme")
description: I18n.tr("Select system sound theme")
options: AudioService.availableSoundThemes
currentValue: {
const theme = AudioService.currentSoundTheme;
if (theme && AudioService.availableSoundThemes.includes(theme))
return theme;
return AudioService.availableSoundThemes.length > 0 ? AudioService.availableSoundThemes[0] : "";
}
onValueChanged: value => {
if (value && value !== AudioService.currentSoundTheme)
AudioService.setSoundTheme(value);
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.2
visible: AudioService.gsettingsAvailable
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "notification", "new"]
settingKey: "soundNewNotification"
text: I18n.tr("New Notification")
description: I18n.tr("Play sound when new notification arrives")
checked: SettingsData.soundNewNotification
onToggled: checked => SettingsData.set("soundNewNotification", checked)
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "volume", "changed"]
settingKey: "soundVolumeChanged"
text: I18n.tr("Volume Changed")
description: I18n.tr("Play sound when volume is adjusted")
checked: SettingsData.soundVolumeChanged
onToggled: checked => SettingsData.set("soundVolumeChanged", checked)
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "power", "plugged"]
settingKey: "soundPluggedIn"
visible: BatteryService.batteryAvailable
text: I18n.tr("Plugged In")
description: I18n.tr("Play sound when power cable is connected")
checked: SettingsData.soundPluggedIn
onToggled: checked => SettingsData.set("soundPluggedIn", checked)
}
}
}
Rectangle {
width: parent.width
height: notAvailableText.implicitHeight + Theme.spacingM * 2
radius: Theme.cornerRadius
color: Qt.rgba(Theme.warning.r, Theme.warning.g, Theme.warning.b, 0.12)
visible: !AudioService.soundsAvailable
Row {
anchors.fill: parent
anchors.margins: Theme.spacingM
spacing: Theme.spacingM
DankIcon {
name: "info"
size: Theme.iconSizeSmall
color: Theme.warning
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
id: notAvailableText
font.pixelSize: Theme.fontSizeSmall
text: I18n.tr("System sounds are not available. Install canberra-gtk-play for sound support.")
wrapMode: Text.WordWrap
width: parent.width - Theme.iconSizeSmall - Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
}
}
}
}
}
}

View File

@@ -0,0 +1,133 @@
import QtQuick
import qs.Common
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "refresh"
title: I18n.tr("System Updater")
SettingsToggleRow {
text: I18n.tr("Use Custom Command")
description: I18n.tr("Use custom command for update your system")
checked: SettingsData.updaterUseCustomCommand
onToggled: checked => {
if (!checked) {
updaterCustomCommand.text = "";
updaterTerminalCustomClass.text = "";
SettingsData.set("updaterCustomCommand", "");
SettingsData.set("updaterTerminalAdditionalParams", "");
}
SettingsData.set("updaterUseCustomCommand", checked);
}
}
FocusScope {
width: parent.width - Theme.spacingM * 2
height: customCommandColumn.implicitHeight
anchors.left: parent.left
anchors.leftMargin: Theme.spacingM
Column {
id: customCommandColumn
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: I18n.tr("System update custom command")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
id: updaterCustomCommand
width: parent.width
height: 48
placeholderText: "myPkgMngr --sysupdate"
backgroundColor: Theme.withAlpha(Theme.surfaceContainerHighest, Theme.popupTransparency)
normalBorderColor: Theme.outlineMedium
focusedBorderColor: Theme.primary
Component.onCompleted: {
if (SettingsData.updaterCustomCommand) {
text = SettingsData.updaterCustomCommand;
}
}
onTextEdited: SettingsData.set("updaterCustomCommand", text.trim())
MouseArea {
anchors.fill: parent
onPressed: mouse => {
updaterCustomCommand.forceActiveFocus();
mouse.accepted = false;
}
}
}
}
}
FocusScope {
width: parent.width - Theme.spacingM * 2
height: terminalParamsColumn.implicitHeight
anchors.left: parent.left
anchors.leftMargin: Theme.spacingM
Column {
id: terminalParamsColumn
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: I18n.tr("Terminal custom additional parameters")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
id: updaterTerminalCustomClass
width: parent.width
height: 48
placeholderText: "-T udpClass"
backgroundColor: Theme.withAlpha(Theme.surfaceContainerHighest, Theme.popupTransparency)
normalBorderColor: Theme.outlineMedium
focusedBorderColor: Theme.primary
Component.onCompleted: {
if (SettingsData.updaterTerminalAdditionalParams) {
text = SettingsData.updaterTerminalAdditionalParams;
}
}
onTextEdited: SettingsData.set("updaterTerminalAdditionalParams", text.trim())
MouseArea {
anchors.fill: parent
onPressed: mouse => {
updaterTerminalCustomClass.forceActiveFocus();
mouse.accepted = false;
}
}
}
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,7 @@ import QtQuick.Layouts
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
@@ -21,169 +22,49 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
StyledRect {
width: parent.width
height: timeSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
SettingsCard {
tab: "time"
tags: ["time", "clock", "format", "24hour"]
title: I18n.tr("Time Format")
iconName: "schedule"
Column {
id: timeSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "schedule"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
Column {
width: parent.width - Theme.iconSize - Theme.spacingM - toggle.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
SettingsToggleRow {
tab: "time"
tags: ["time", "24hour", "format"]
settingKey: "use24HourClock"
text: I18n.tr("24-Hour Format")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Use 24-hour time format instead of 12-hour AM/PM")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankToggle {
id: toggle
anchors.verticalCenter: parent.verticalCenter
description: I18n.tr("Use 24-hour time format instead of 12-hour AM/PM")
checked: SettingsData.use24HourClock
onToggled: checked => {
return SettingsData.set("use24HourClock", checked);
}
}
}
}
onToggled: checked => SettingsData.set("use24HourClock", checked)
}
StyledRect {
width: parent.width
height: timeSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: secondsSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "schedule"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
Column {
width: parent.width - Theme.iconSize - Theme.spacingM - toggle.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
text: I18n.tr("Show seconds")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Clock show seconds")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankToggle {
id: toggleSec
anchors.verticalCenter: parent.verticalCenter
SettingsToggleRow {
tab: "time"
tags: ["time", "seconds", "clock"]
settingKey: "showSeconds"
text: I18n.tr("Show Seconds")
description: I18n.tr("Display seconds in the clock")
checked: SettingsData.showSeconds
onToggled: checked => {
return SettingsData.set("showSeconds", checked);
}
}
}
}
}
StyledRect {
width: parent.width
height: dateSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: dateSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "calendar_today"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Date Format")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
onToggled: checked => SettingsData.set("showSeconds", checked)
}
}
DankDropdown {
height: 50
SettingsCard {
tab: "time"
tags: ["date", "format", "calendar"]
title: I18n.tr("Date Format")
iconName: "calendar_today"
SettingsDropdownRow {
tab: "time"
tags: ["date", "format", "topbar"]
settingKey: "clockDateFormat"
text: I18n.tr("Top Bar Format")
description: "Preview: " + (SettingsData.clockDateFormat ? new Date().toLocaleDateString(Qt.locale(), SettingsData.clockDateFormat) : new Date().toLocaleDateString(Qt.locale(), "ddd d"))
options: ["System Default", "Day Date", "Day Month Date", "Month Date", "Numeric (M/D)", "Numeric (D/M)", "Full with Year", "ISO Date", "Full Day & Month", "Custom..."]
currentValue: {
if (!SettingsData.clockDateFormat || SettingsData.clockDateFormat.length === 0) {
if (!SettingsData.clockDateFormat || SettingsData.clockDateFormat.length === 0)
return "System Default";
}
const presets = [
{
"format": "ddd d",
@@ -218,12 +99,9 @@ Item {
"label": "Full Day & Month"
}
];
const match = presets.find(p => {
return p.format === SettingsData.clockDateFormat;
});
const match = presets.find(p => p.format === SettingsData.clockDateFormat);
return match ? match.label : I18n.tr("Custom: ") + SettingsData.clockDateFormat;
}
options: ["System Default", "Day Date", "Day Month Date", "Month Date", "Numeric (M/D)", "Numeric (D/M)", "Full with Year", "ISO Date", "Full Day & Month", "Custom..."]
onValueChanged: value => {
const formatMap = {
"System Default": "",
@@ -245,14 +123,36 @@ Item {
}
}
DankDropdown {
height: 50
DankTextField {
id: customFormatInput
width: parent.width - Theme.spacingM * 2
x: Theme.spacingM
visible: false
placeholderText: I18n.tr("Enter custom top bar format (e.g., ddd MMM d)")
text: SettingsData.clockDateFormat
onTextChanged: {
if (visible && text)
SettingsData.set("clockDateFormat", text);
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
SettingsDropdownRow {
tab: "time"
tags: ["date", "format", "lock", "screen"]
settingKey: "lockDateFormat"
text: I18n.tr("Lock Screen Format")
description: "Preview: " + (SettingsData.lockDateFormat ? new Date().toLocaleDateString(Qt.locale(), SettingsData.lockDateFormat) : new Date().toLocaleDateString(Qt.locale(), Locale.LongFormat))
options: ["System Default", "Day Date", "Day Month Date", "Month Date", "Numeric (M/D)", "Numeric (D/M)", "Full with Year", "ISO Date", "Full Day & Month", "Custom..."]
currentValue: {
if (!SettingsData.lockDateFormat || SettingsData.lockDateFormat.length === 0) {
if (!SettingsData.lockDateFormat || SettingsData.lockDateFormat.length === 0)
return "System Default";
}
const presets = [
{
"format": "ddd d",
@@ -287,12 +187,9 @@ Item {
"label": "Full Day & Month"
}
];
const match = presets.find(p => {
return p.format === SettingsData.lockDateFormat;
});
const match = presets.find(p => p.format === SettingsData.lockDateFormat);
return match ? match.label : I18n.tr("Custom: ") + SettingsData.lockDateFormat;
}
options: ["System Default", "Day Date", "Day Month Date", "Month Date", "Numeric (M/D)", "Numeric (D/M)", "Full with Year", "ISO Date", "Full Day & Month", "Custom..."]
onValueChanged: value => {
const formatMap = {
"System Default": "",
@@ -314,23 +211,10 @@ Item {
}
}
DankTextField {
id: customFormatInput
width: parent.width
visible: false
placeholderText: I18n.tr("Enter custom top bar format (e.g., ddd MMM d)")
text: SettingsData.clockDateFormat
onTextChanged: {
if (visible && text)
SettingsData.set("clockDateFormat", text);
}
}
DankTextField {
id: customLockFormatInput
width: parent.width
width: parent.width - Theme.spacingM * 2
x: Theme.spacingM
visible: false
placeholderText: I18n.tr("Enter custom lock screen format (e.g., dddd, MMMM d)")
text: SettingsData.lockDateFormat
@@ -342,15 +226,20 @@ Item {
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
Rectangle {
width: parent.width - Theme.spacingM * 2
x: Theme.spacingM
height: formatHelp.implicitHeight + Theme.spacingM * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.1)
border.width: 0
Column {
id: formatHelp
anchors.fill: parent
anchors.margins: Theme.spacingM
spacing: Theme.spacingXS
@@ -375,25 +264,21 @@ Item {
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• dd - Day (01-31)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• ddd - Day name (Mon)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• dddd - Day name (Monday)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• M - Month (1-12)")
font.pixelSize: Theme.fontSizeSmall
@@ -410,25 +295,21 @@ Item {
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• MMM - Month (Jan)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• MMMM - Month (January)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• yy - Year (24)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
StyledText {
text: I18n.tr("• yyyy - Year (2024)")
font.pixelSize: Theme.fontSizeSmall
@@ -439,209 +320,84 @@ Item {
}
}
}
}
StyledRect {
width: parent.width
height: enableWeatherSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
SettingsCard {
tab: "time"
tags: ["weather", "enable", "forecast"]
title: I18n.tr("Weather")
iconName: "cloud"
Column {
id: enableWeatherSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "cloud"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
Column {
width: parent.width - Theme.iconSize - Theme.spacingM - enableToggle.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
SettingsToggleRow {
tab: "time"
tags: ["weather", "enable"]
settingKey: "weatherEnabled"
text: I18n.tr("Enable Weather")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Show weather information in top bar and control center")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankToggle {
id: enableToggle
anchors.verticalCenter: parent.verticalCenter
description: I18n.tr("Show weather information in top bar and control center")
checked: SettingsData.weatherEnabled
onToggled: checked => {
return SettingsData.set("weatherEnabled", checked);
}
}
}
}
onToggled: checked => SettingsData.set("weatherEnabled", checked)
}
StyledRect {
Column {
width: parent.width
height: temperatureSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
spacing: 0
visible: SettingsData.weatherEnabled
opacity: visible ? 1 : 0
Column {
id: temperatureSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
Rectangle {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "thermostat"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
height: 1
color: Theme.outline
opacity: 0.15
}
Column {
width: parent.width - Theme.iconSize - Theme.spacingM - temperatureToggle.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
SettingsToggleRow {
tab: "time"
tags: ["weather", "imperial", "fahrenheit", "units"]
settingKey: "useFahrenheit"
text: I18n.tr("Use Imperial Units")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Use Imperial units (°F, mph, inHg) instead of Metric (°C, km/h, hPa)")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankToggle {
id: temperatureToggle
anchors.verticalCenter: parent.verticalCenter
description: I18n.tr("Use Imperial units (°F, mph, inHg) instead of Metric (°C, km/h, hPa)")
checked: SettingsData.useFahrenheit
onToggled: checked => {
return SettingsData.set("useFahrenheit", checked);
}
}
}
onToggled: checked => SettingsData.set("useFahrenheit", checked)
}
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
}
StyledRect {
Rectangle {
width: parent.width
height: locationSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
visible: SettingsData.weatherEnabled
opacity: visible ? 1 : 0
Column {
id: locationSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "location_on"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
height: 1
color: Theme.outline
opacity: 0.15
}
Column {
width: parent.width - Theme.iconSize - Theme.spacingM - autoLocationToggle.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
SettingsToggleRow {
tab: "time"
tags: ["weather", "location", "auto", "gps"]
settingKey: "useAutoLocation"
text: I18n.tr("Auto Location")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Automatically determine your location using your IP address")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankToggle {
id: autoLocationToggle
anchors.verticalCenter: parent.verticalCenter
description: I18n.tr("Automatically determine your location using your IP address")
checked: SettingsData.useAutoLocation
onToggled: checked => {
return SettingsData.set("useAutoLocation", checked);
}
}
onToggled: checked => SettingsData.set("useAutoLocation", checked)
}
Column {
width: parent.width
spacing: Theme.spacingXS
spacing: Theme.spacingM
visible: !SettingsData.useAutoLocation
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.2
opacity: 0.15
}
Item {
width: parent.width
height: locationContent.height
Column {
id: locationContent
width: parent.width - Theme.spacingM * 2
x: Theme.spacingM
spacing: Theme.spacingM
StyledText {
text: I18n.tr("Custom Location")
font.pixelSize: Theme.fontSizeMedium
@@ -676,23 +432,21 @@ Item {
Component.onCompleted: {
if (SettingsData.weatherCoordinates) {
const coords = SettingsData.weatherCoordinates.split(',');
if (coords.length > 0) {
if (coords.length > 0)
text = coords[0].trim();
}
}
}
Connections {
target: SettingsData
function onWeatherCoordinatesChanged() {
if (SettingsData.weatherCoordinates) {
const coords = SettingsData.weatherCoordinates.split(',');
if (coords.length > 0) {
if (coords.length > 0)
latitudeInput.text = coords[0].trim();
}
}
}
}
onTextEdited: {
if (text && longitudeInput.text) {
@@ -728,23 +482,21 @@ Item {
Component.onCompleted: {
if (SettingsData.weatherCoordinates) {
const coords = SettingsData.weatherCoordinates.split(',');
if (coords.length > 1) {
if (coords.length > 1)
text = coords[1].trim();
}
}
}
Connections {
target: SettingsData
function onWeatherCoordinatesChanged() {
if (SettingsData.weatherCoordinates) {
const coords = SettingsData.weatherCoordinates.split(',');
if (coords.length > 1) {
if (coords.length > 1)
longitudeInput.text = coords[1].trim();
}
}
}
}
onTextEdited: {
if (text && latitudeInput.text) {
@@ -776,7 +528,6 @@ Item {
keyNavigationBacktab: longitudeInput
onLocationSelected: (displayName, coordinates) => {
SettingsData.setWeatherLocation(displayName, coordinates);
const coords = coordinates.split(',');
if (coords.length >= 2) {
latitudeInput.text = coords[0].trim();
@@ -787,51 +538,16 @@ Item {
}
}
}
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
}
StyledRect {
width: parent.width
height: weatherDisplaySection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
SettingsCard {
tab: "time"
tags: ["weather", "current", "display"]
title: I18n.tr("Current Weather")
iconName: "visibility"
visible: SettingsData.weatherEnabled
opacity: visible ? 1 : 0
Column {
id: weatherDisplaySection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "visibility"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Current Weather")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
Column {
width: parent.width
@@ -960,10 +676,9 @@ Item {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
if (WeatherService.weather.available) {
if (WeatherService.weather.available)
SettingsData.set("useFahrenheit", !SettingsData.useFahrenheit);
}
}
enabled: WeatherService.weather.available
}
}
@@ -1065,7 +780,6 @@ Item {
radius: 16
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1)
anchors.horizontalCenter: parent.horizontalCenter
DankIcon {
anchors.centerIn: parent
name: "device_thermostat"
@@ -1077,14 +791,12 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
StyledText {
text: I18n.tr("Feels Like")
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
text: (SettingsData.useFahrenheit ? (WeatherService.weather.feelsLikeF || WeatherService.weather.tempF) : (WeatherService.weather.feelsLike || WeatherService.weather.temp)) + "°"
font.pixelSize: Theme.fontSizeSmall + 1
@@ -1112,7 +824,6 @@ Item {
radius: 16
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1)
anchors.horizontalCenter: parent.horizontalCenter
DankIcon {
anchors.centerIn: parent
name: "humidity_low"
@@ -1124,14 +835,12 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
StyledText {
text: I18n.tr("Humidity")
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
text: WeatherService.weather.humidity ? WeatherService.weather.humidity + "%" : "--"
font.pixelSize: Theme.fontSizeSmall + 1
@@ -1159,7 +868,6 @@ Item {
radius: 16
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1)
anchors.horizontalCenter: parent.horizontalCenter
DankIcon {
anchors.centerIn: parent
name: "air"
@@ -1171,14 +879,12 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
StyledText {
text: I18n.tr("Wind")
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
text: {
if (!WeatherService.weather.wind)
@@ -1186,10 +892,8 @@ Item {
const windKmh = parseFloat(WeatherService.weather.wind);
if (isNaN(windKmh))
return WeatherService.weather.wind;
if (SettingsData.useFahrenheit) {
const windMph = Math.round(windKmh * 0.621371);
return windMph + " mph";
}
if (SettingsData.useFahrenheit)
return Math.round(windKmh * 0.621371) + " mph";
return WeatherService.weather.wind;
}
font.pixelSize: Theme.fontSizeSmall + 1
@@ -1217,7 +921,6 @@ Item {
radius: 16
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1)
anchors.horizontalCenter: parent.horizontalCenter
DankIcon {
anchors.centerIn: parent
name: "speed"
@@ -1229,24 +932,19 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
StyledText {
text: I18n.tr("Pressure")
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
text: {
if (!WeatherService.weather.pressure)
return "--";
const pressureHpa = WeatherService.weather.pressure;
if (SettingsData.useFahrenheit) {
const pressureInHg = (pressureHpa * 0.02953).toFixed(2);
return pressureInHg + " inHg";
}
return pressureHpa + " hPa";
if (SettingsData.useFahrenheit)
return (WeatherService.weather.pressure * 0.02953).toFixed(2) + " inHg";
return WeatherService.weather.pressure + " hPa";
}
font.pixelSize: Theme.fontSizeSmall + 1
color: Theme.surfaceText
@@ -1273,7 +971,6 @@ Item {
radius: 16
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1)
anchors.horizontalCenter: parent.horizontalCenter
DankIcon {
anchors.centerIn: parent
name: "rainy"
@@ -1285,14 +982,12 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
StyledText {
text: I18n.tr("Rain Chance")
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
text: WeatherService.weather.precipitationProbability ? WeatherService.weather.precipitationProbability + "%" : "0%"
font.pixelSize: Theme.fontSizeSmall + 1
@@ -1320,7 +1015,6 @@ Item {
radius: 16
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1)
anchors.horizontalCenter: parent.horizontalCenter
DankIcon {
anchors.centerIn: parent
name: "wb_sunny"
@@ -1332,14 +1026,12 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
StyledText {
text: I18n.tr("Visibility")
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
text: I18n.tr("Good")
font.pixelSize: Theme.fontSizeSmall + 1
@@ -1353,14 +1045,6 @@ Item {
}
}
}
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
}
}
}
}

View File

@@ -0,0 +1,285 @@
import QtQuick
import qs.Common
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
property var cachedFontFamilies: []
property var cachedMonoFamilies: []
property bool fontsEnumerated: false
function enumerateFonts() {
var fonts = [];
var availableFonts = Qt.fontFamilies();
for (var i = 0; i < availableFonts.length; i++) {
var fontName = availableFonts[i];
if (fontName.startsWith("."))
continue;
fonts.push(fontName);
}
fonts.sort();
fonts.unshift("Default");
cachedFontFamilies = fonts;
var monoFonts = [];
for (var j = 0; j < availableFonts.length; j++) {
var fontName2 = availableFonts[j];
if (fontName2.startsWith("."))
continue;
var lowerName = fontName2.toLowerCase();
if (lowerName.includes("mono") || lowerName.includes("code") || lowerName.includes("console") || lowerName.includes("terminal") || lowerName.includes("courier") || lowerName.includes("jetbrains") || lowerName.includes("fira") || lowerName.includes("hack") || lowerName.includes("source code") || lowerName.includes("cascadia")) {
monoFonts.push(fontName2);
}
}
monoFonts.sort();
monoFonts.unshift("Default");
cachedMonoFamilies = monoFonts;
}
Timer {
id: fontEnumerationTimer
interval: 50
running: false
onTriggered: {
if (fontsEnumerated)
return;
enumerateFonts();
fontsEnumerated = true;
}
}
Component.onCompleted: {
fontEnumerationTimer.start();
}
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
tab: "typography"
tags: ["font", "family", "text", "typography"]
title: I18n.tr("Typography")
iconName: "text_fields"
SettingsDropdownRow {
tab: "typography"
tags: ["font", "family", "normal", "text"]
settingKey: "fontFamily"
text: I18n.tr("Normal Font")
description: I18n.tr("Select the font family for UI text")
options: root.fontsEnumerated ? root.cachedFontFamilies : ["Default"]
currentValue: SettingsData.fontFamily === Theme.defaultFontFamily ? "Default" : (SettingsData.fontFamily || "Default")
enableFuzzySearch: true
popupWidthOffset: 100
maxPopupHeight: 400
onValueChanged: value => {
if (value === "Default")
SettingsData.set("fontFamily", Theme.defaultFontFamily);
else
SettingsData.set("fontFamily", value);
}
}
SettingsDropdownRow {
tab: "typography"
tags: ["font", "monospace", "code", "terminal"]
settingKey: "monoFontFamily"
text: I18n.tr("Monospace Font")
description: I18n.tr("Select monospace font for process list and technical displays")
options: root.fontsEnumerated ? root.cachedMonoFamilies : ["Default"]
currentValue: SettingsData.monoFontFamily === SettingsData.defaultMonoFontFamily ? "Default" : (SettingsData.monoFontFamily || "Default")
enableFuzzySearch: true
popupWidthOffset: 100
maxPopupHeight: 400
onValueChanged: value => {
if (value === "Default")
SettingsData.set("monoFontFamily", SettingsData.defaultMonoFontFamily);
else
SettingsData.set("monoFontFamily", value);
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
SettingsDropdownRow {
tab: "typography"
tags: ["font", "weight", "bold", "light"]
settingKey: "fontWeight"
text: I18n.tr("Font Weight")
description: I18n.tr("Select font weight for UI text")
options: ["Thin", "Extra Light", "Light", "Regular", "Medium", "Demi Bold", "Bold", "Extra Bold", "Black"]
currentValue: {
switch (SettingsData.fontWeight) {
case Font.Thin:
return "Thin";
case Font.ExtraLight:
return "Extra Light";
case Font.Light:
return "Light";
case Font.Normal:
return "Regular";
case Font.Medium:
return "Medium";
case Font.DemiBold:
return "Demi Bold";
case Font.Bold:
return "Bold";
case Font.ExtraBold:
return "Extra Bold";
case Font.Black:
return "Black";
default:
return "Regular";
}
}
onValueChanged: value => {
var weight;
switch (value) {
case "Thin":
weight = Font.Thin;
break;
case "Extra Light":
weight = Font.ExtraLight;
break;
case "Light":
weight = Font.Light;
break;
case "Regular":
weight = Font.Normal;
break;
case "Medium":
weight = Font.Medium;
break;
case "Demi Bold":
weight = Font.DemiBold;
break;
case "Bold":
weight = Font.Bold;
break;
case "Extra Bold":
weight = Font.ExtraBold;
break;
case "Black":
weight = Font.Black;
break;
default:
weight = Font.Normal;
break;
}
SettingsData.set("fontWeight", weight);
}
}
SettingsSliderRow {
tab: "typography"
tags: ["font", "scale", "size", "zoom"]
settingKey: "fontScale"
text: I18n.tr("Font Scale")
description: I18n.tr("Scale all font sizes throughout the shell")
minimum: 75
maximum: 150
value: Math.round(SettingsData.fontScale * 100)
unit: "%"
defaultValue: 100
onSliderValueChanged: newValue => SettingsData.set("fontScale", newValue / 100)
}
}
SettingsCard {
tab: "typography"
tags: ["animation", "speed", "motion", "duration"]
title: I18n.tr("Animation Speed")
iconName: "animation"
Item {
width: parent.width
height: animationSpeedGroup.implicitHeight
clip: true
DankButtonGroup {
id: animationSpeedGroup
anchors.horizontalCenter: parent.horizontalCenter
buttonPadding: parent.width < 480 ? Theme.spacingS : Theme.spacingL
minButtonWidth: parent.width < 480 ? 44 : 64
textSize: parent.width < 480 ? Theme.fontSizeSmall : Theme.fontSizeMedium
model: [I18n.tr("None"), I18n.tr("Short"), I18n.tr("Medium"), I18n.tr("Long"), I18n.tr("Custom")]
selectionMode: "single"
currentIndex: SettingsData.animationSpeed
onSelectionChanged: (index, selected) => {
if (!selected)
return;
SettingsData.set("animationSpeed", index);
}
Connections {
target: SettingsData
function onAnimationSpeedChanged() {
animationSpeedGroup.currentIndex = SettingsData.animationSpeed;
}
}
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.15
}
SettingsSliderRow {
id: durationSlider
tab: "typography"
tags: ["animation", "duration", "custom", "speed"]
settingKey: "customAnimationDuration"
text: I18n.tr("Custom Duration")
description: I18n.tr("Fine-tune animation timing in milliseconds")
minimum: 0
maximum: 750
value: Theme.currentAnimationBaseDuration
unit: "ms"
defaultValue: 200
onSliderValueChanged: newValue => {
SettingsData.set("animationSpeed", SettingsData.AnimationSpeed.Custom);
SettingsData.set("customAnimationDuration", newValue);
}
Connections {
target: SettingsData
function onAnimationSpeedChanged() {
if (SettingsData.animationSpeed === SettingsData.AnimationSpeed.Custom)
return;
durationSlider.value = Theme.currentAnimationBaseDuration;
}
}
Connections {
target: Theme
function onCurrentAnimationBaseDurationChanged() {
if (SettingsData.animationSpeed === SettingsData.AnimationSpeed.Custom)
return;
durationSlider.value = Theme.currentAnimationBaseDuration;
}
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,873 +0,0 @@
import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
Item {
id: widgetTweaksTab
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
StyledRect {
width: parent.width
height: workspaceSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: workspaceSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "view_module"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Workspace Settings")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
DankToggle {
width: parent.width
text: I18n.tr("Workspace Index Numbers")
description: I18n.tr("Show workspace index numbers in the top bar workspace switcher")
checked: SettingsData.showWorkspaceIndex
onToggled: checked => {
return SettingsData.set("showWorkspaceIndex", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Workspace Padding")
description: I18n.tr("Always show a minimum of 3 workspaces, even if fewer are available")
checked: SettingsData.showWorkspacePadding
onToggled: checked => {
return SettingsData.set("showWorkspacePadding", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Show Workspace Apps")
description: I18n.tr("Display application icons in workspace indicators")
checked: SettingsData.showWorkspaceApps
visible: CompositorService.isNiri || CompositorService.isHyprland
onToggled: checked => {
return SettingsData.set("showWorkspaceApps", checked);
}
}
Row {
width: parent.width - Theme.spacingL
spacing: Theme.spacingL
visible: SettingsData.showWorkspaceApps
opacity: visible ? 1 : 0
anchors.left: parent.left
anchors.leftMargin: Theme.spacingL
Column {
width: 120
spacing: Theme.spacingS
StyledText {
text: I18n.tr("Max apps to show")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText
font.weight: Font.Medium
}
DankTextField {
width: 100
height: 28
placeholderText: "#ffffff"
text: SettingsData.maxWorkspaceIcons
maximumLength: 7
font.pixelSize: Theme.fontSizeSmall
topPadding: Theme.spacingXS
bottomPadding: Theme.spacingXS
onEditingFinished: {
SettingsData.set("maxWorkspaceIcons", parseInt(text, 10));
}
}
}
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
}
DankToggle {
width: parent.width
text: I18n.tr("Per-Monitor Workspaces")
description: I18n.tr("Show only workspaces belonging to each specific monitor.")
checked: SettingsData.workspacesPerMonitor
onToggled: checked => {
return SettingsData.set("workspacesPerMonitor", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Show Occupied Workspaces Only")
description: I18n.tr("Display only workspaces that contain windows")
checked: SettingsData.showOccupiedWorkspacesOnly
visible: CompositorService.isNiri || CompositorService.isHyprland
onToggled: checked => {
return SettingsData.set("showOccupiedWorkspacesOnly", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Show All Tags")
description: I18n.tr("Show all 9 tags instead of only occupied tags (DWL only)")
checked: SettingsData.dwlShowAllTags
visible: CompositorService.isDwl
onToggled: checked => {
return SettingsData.set("dwlShowAllTags", checked);
}
}
}
}
StyledRect {
width: parent.width
height: mediaSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: mediaSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "music_note"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Media Player Settings")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
DankToggle {
width: parent.width
text: I18n.tr("Wave Progress Bars")
description: I18n.tr("Use animated wave progress bars for media playback")
checked: SettingsData.waveProgressEnabled
onToggled: checked => {
return SettingsData.set("waveProgressEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Scroll song title")
description: I18n.tr("Scroll title if it doesn't fit in widget")
checked: SettingsData.scrollTitleEnabled
onToggled: checked => {
return SettingsData.set("scrollTitleEnabled", checked);
}
}
}
}
StyledRect {
width: parent.width
height: updaterSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: updaterSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "refresh"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("System Updater")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
DankToggle {
width: parent.width
text: I18n.tr("Use Custom Command")
description: I18n.tr("Use custom command for update your system")
checked: SettingsData.updaterUseCustomCommand
onToggled: checked => {
if (!checked) {
updaterCustomCommand.text = "";
updaterTerminalCustomClass.text = "";
SettingsData.set("updaterCustomCommand", "");
SettingsData.set("updaterTerminalAdditionalParams", "");
}
return SettingsData.set("updaterUseCustomCommand", checked);
}
}
FocusScope {
width: parent.width - Theme.spacingM * 2
height: customCommandColumn.implicitHeight
anchors.left: parent.left
anchors.leftMargin: Theme.spacingM
Column {
id: customCommandColumn
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: I18n.tr("System update custom command")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
id: updaterCustomCommand
width: parent.width
height: 48
placeholderText: "myPkgMngr --sysupdate"
backgroundColor: Theme.withAlpha(Theme.surfaceContainerHighest, Theme.popupTransparency)
normalBorderColor: Theme.outlineMedium
focusedBorderColor: Theme.primary
Component.onCompleted: {
if (SettingsData.updaterCustomCommand) {
text = SettingsData.updaterCustomCommand;
}
}
onTextEdited: {
SettingsData.set("updaterCustomCommand", text.trim());
}
MouseArea {
anchors.fill: parent
onPressed: mouse => {
updaterCustomCommand.forceActiveFocus();
mouse.accepted = false;
}
}
}
}
}
FocusScope {
width: parent.width - Theme.spacingM * 2
height: terminalParamsColumn.implicitHeight
anchors.left: parent.left
anchors.leftMargin: Theme.spacingM
Column {
id: terminalParamsColumn
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: I18n.tr("Terminal custom additional parameters")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
id: updaterTerminalCustomClass
width: parent.width
height: 48
placeholderText: "-T udpClass"
backgroundColor: Theme.withAlpha(Theme.surfaceContainerHighest, Theme.popupTransparency)
normalBorderColor: Theme.outlineMedium
focusedBorderColor: Theme.primary
Component.onCompleted: {
if (SettingsData.updaterTerminalAdditionalParams) {
text = SettingsData.updaterTerminalAdditionalParams;
}
}
onTextEdited: {
SettingsData.set("updaterTerminalAdditionalParams", text.trim());
}
MouseArea {
anchors.fill: parent
onPressed: mouse => {
updaterTerminalCustomClass.forceActiveFocus();
mouse.accepted = false;
}
}
}
}
}
}
}
StyledRect {
width: parent.width
height: runningAppsSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
visible: CompositorService.isNiri || CompositorService.isHyprland
Column {
id: runningAppsSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "apps"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Running Apps Settings")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
DankToggle {
width: parent.width
text: I18n.tr("Running Apps Only In Current Workspace")
description: I18n.tr("Show only apps running in current workspace")
checked: SettingsData.runningAppsCurrentWorkspace
onToggled: checked => {
return SettingsData.set("runningAppsCurrentWorkspace", checked);
}
}
}
}
StyledRect {
width: parent.width
height: workspaceIconsSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
visible: SettingsData.hasNamedWorkspaces()
Column {
id: workspaceIconsSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "label"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Named Workspace Icons")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
StyledText {
width: parent.width
text: I18n.tr("Configure icons for named workspaces. Icons take priority over numbers when both are enabled.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.outline
wrapMode: Text.WordWrap
}
Repeater {
model: SettingsData.getNamedWorkspaces()
Rectangle {
width: parent.width
height: workspaceIconRow.implicitHeight + Theme.spacingM
radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 0.5)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.3)
border.width: 0
Row {
id: workspaceIconRow
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingM
StyledText {
text: "\"" + modelData + "\""
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
width: 150
elide: Text.ElideRight
}
DankIconPicker {
id: iconPicker
anchors.verticalCenter: parent.verticalCenter
Component.onCompleted: {
var iconData = SettingsData.getWorkspaceNameIcon(modelData);
if (iconData) {
setIcon(iconData.value, iconData.type);
}
}
onIconSelected: (iconName, iconType) => {
SettingsData.setWorkspaceNameIcon(modelData, {
"type": iconType,
"value": iconName
});
setIcon(iconName, iconType);
}
Connections {
target: SettingsData
function onWorkspaceIconsUpdated() {
var iconData = SettingsData.getWorkspaceNameIcon(modelData);
if (iconData) {
iconPicker.setIcon(iconData.value, iconData.type);
} else {
iconPicker.setIcon("", "icon");
}
}
}
}
Rectangle {
width: 28
height: 28
radius: Theme.cornerRadius
color: clearMouseArea.containsMouse ? Theme.errorHover : Theme.surfaceContainer
border.color: clearMouseArea.containsMouse ? Theme.error : Theme.outline
border.width: 0
anchors.verticalCenter: parent.verticalCenter
DankIcon {
name: "close"
size: 16
color: clearMouseArea.containsMouse ? Theme.error : Theme.outline
anchors.centerIn: parent
}
MouseArea {
id: clearMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
SettingsData.removeWorkspaceNameIcon(modelData);
}
}
}
Item {
width: parent.width - 150 - 240 - 28 - Theme.spacingM * 4
height: 1
}
}
}
}
}
}
StyledRect {
width: parent.width
height: notificationSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: notificationSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "notifications"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Notification Popups")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
Column {
width: parent.width
spacing: 0
leftPadding: Theme.spacingM
rightPadding: Theme.spacingM
DankDropdown {
width: parent.width - parent.leftPadding - parent.rightPadding
text: I18n.tr("Popup Position")
description: I18n.tr("Choose where notification popups appear on screen")
currentValue: {
if (SettingsData.notificationPopupPosition === -1) {
return "Top Center";
}
switch (SettingsData.notificationPopupPosition) {
case SettingsData.Position.Top:
return "Top Right";
case SettingsData.Position.Bottom:
return "Bottom Left";
case SettingsData.Position.Left:
return "Top Left";
case SettingsData.Position.Right:
return "Bottom Right";
default:
return "Top Right";
}
}
options: ["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left"]
onValueChanged: value => {
switch (value) {
case "Top Right":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Top);
break;
case "Top Left":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Left);
break;
case "Top Center":
SettingsData.set("notificationPopupPosition", -1);
break;
case "Bottom Right":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Right);
break;
case "Bottom Left":
SettingsData.set("notificationPopupPosition", SettingsData.Position.Bottom);
break;
}
SettingsData.sendTestNotifications();
}
}
}
}
}
StyledRect {
width: parent.width
height: osdRow.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Row {
id: osdRow
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
DankIcon {
name: "tune"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
Column {
width: parent.width - Theme.iconSize - Theme.spacingM - osdToggle.width - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
text: I18n.tr("Always Show OSD Percentage")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
StyledText {
text: I18n.tr("Display volume and brightness percentage values by default in OSD popups")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankToggle {
id: osdToggle
anchors.verticalCenter: parent.verticalCenter
checked: SettingsData.osdAlwaysShowValue
onToggled: checked => {
SettingsData.set("osdAlwaysShowValue", checked);
}
}
}
}
StyledRect {
width: parent.width
height: osdSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)
border.width: 0
Column {
id: osdSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "notification_important"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("On-screen Displays")
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
Column {
width: parent.width
spacing: 0
leftPadding: Theme.spacingM
rightPadding: Theme.spacingM
DankDropdown {
width: parent.width - parent.leftPadding - parent.rightPadding
text: I18n.tr("OSD Position")
description: I18n.tr("Choose where on-screen displays appear on screen")
currentValue: {
switch (SettingsData.osdPosition) {
case SettingsData.Position.Top:
return "Top Right";
case SettingsData.Position.Left:
return "Top Left";
case SettingsData.Position.TopCenter:
return "Top Center";
case SettingsData.Position.Right:
return "Bottom Right";
case SettingsData.Position.Bottom:
return "Bottom Left";
case SettingsData.Position.BottomCenter:
return "Bottom Center";
case SettingsData.Position.LeftCenter:
return "Left Center";
case SettingsData.Position.RightCenter:
return "Right Center";
default:
return "Bottom Center";
}
}
options: ["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left", "Bottom Center", "Left Center", "Right Center"]
onValueChanged: value => {
switch (value) {
case "Top Right":
SettingsData.set("osdPosition", SettingsData.Position.Top);
break;
case "Top Left":
SettingsData.set("osdPosition", SettingsData.Position.Left);
break;
case "Top Center":
SettingsData.set("osdPosition", SettingsData.Position.TopCenter);
break;
case "Bottom Right":
SettingsData.set("osdPosition", SettingsData.Position.Right);
break;
case "Bottom Left":
SettingsData.set("osdPosition", SettingsData.Position.Bottom);
break;
case "Bottom Center":
SettingsData.set("osdPosition", SettingsData.Position.BottomCenter);
break;
case "Left Center":
SettingsData.set("osdPosition", SettingsData.Position.LeftCenter);
break;
case "Right Center":
SettingsData.set("osdPosition", SettingsData.Position.RightCenter);
break;
}
}
}
}
DankToggle {
width: parent.width
text: I18n.tr("Volume OSD")
description: I18n.tr("Show on-screen display when volume changes")
checked: SettingsData.osdVolumeEnabled
onToggled: checked => {
return SettingsData.set("osdVolumeEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Media Volume OSD")
description: I18n.tr("Show on-screen display when media player volume changes")
checked: SettingsData.osdMediaVolumeEnabled
onToggled: checked => {
return SettingsData.set("osdMediaVolumeEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Brightness OSD")
description: I18n.tr("Show on-screen display when brightness changes")
checked: SettingsData.osdBrightnessEnabled
onToggled: checked => {
return SettingsData.set("osdBrightnessEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Idle Inhibitor OSD")
description: I18n.tr("Show on-screen display when idle inhibitor state changes")
checked: SettingsData.osdIdleInhibitorEnabled
onToggled: checked => {
return SettingsData.set("osdIdleInhibitorEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Microphone Mute OSD")
description: I18n.tr("Show on-screen display when microphone is muted/unmuted")
checked: SettingsData.osdMicMuteEnabled
onToggled: checked => {
return SettingsData.set("osdMicMuteEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Caps Lock OSD")
description: I18n.tr("Show on-screen display when caps lock state changes")
checked: SettingsData.osdCapsLockEnabled
onToggled: checked => {
return SettingsData.set("osdCapsLockEnabled", checked);
}
}
DankToggle {
width: parent.width
text: I18n.tr("Power Profile OSD")
description: I18n.tr("Show on-screen display when power profile changes")
checked: SettingsData.osdPowerProfileEnabled
onToggled: checked => {
return SettingsData.set("osdPowerProfileEnabled", checked);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,71 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Common
import qs.Widgets
Item {
id: root
property string tab: ""
property var tags: []
property string settingKey: ""
property string text: ""
property string description: ""
property alias model: buttonGroup.model
property alias currentIndex: buttonGroup.currentIndex
property alias selectionMode: buttonGroup.selectionMode
property alias buttonHeight: buttonGroup.buttonHeight
property alias minButtonWidth: buttonGroup.minButtonWidth
property alias buttonPadding: buttonGroup.buttonPadding
property alias checkIconSize: buttonGroup.checkIconSize
property alias textSize: buttonGroup.textSize
property alias spacing: buttonGroup.spacing
property alias checkEnabled: buttonGroup.checkEnabled
signal selectionChanged(int index, bool selected)
width: parent?.width ?? 0
height: 60
Row {
id: contentRow
width: parent.width - Theme.spacingM * 2
x: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingM
Column {
width: parent.width - buttonGroup.width - Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingXS
StyledText {
text: root.text
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
elide: Text.ElideRight
width: parent.width
visible: root.text !== ""
}
StyledText {
text: root.description
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
visible: root.description !== ""
}
}
DankButtonGroup {
id: buttonGroup
anchors.verticalCenter: parent.verticalCenter
selectionMode: "single"
onSelectionChanged: (index, selected) => root.selectionChanged(index, selected)
}
}
}

View File

@@ -0,0 +1,121 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Common
import qs.Widgets
StyledRect {
id: root
property string tab: ""
property var tags: []
property string title: ""
property string iconName: ""
property bool collapsible: false
property bool expanded: true
default property alias content: contentColumn.children
width: parent?.width ?? 0
height: {
var hasHeader = root.title !== "" || root.iconName !== "";
if (collapsed)
return headerRow.height + Theme.spacingL * 2;
var h = Theme.spacingL * 2 + contentColumn.height;
if (hasHeader)
h += headerRow.height + Theme.spacingM;
return h;
}
radius: Theme.cornerRadius
color: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
readonly property bool collapsed: collapsible && !expanded
readonly property bool hasHeader: root.title !== "" || root.iconName !== ""
property bool animationsEnabled: false
Component.onCompleted: Qt.callLater(() => animationsEnabled = true)
Behavior on height {
enabled: root.animationsEnabled
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
Column {
id: mainColumn
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: root.hasHeader ? Theme.spacingM : 0
clip: true
Item {
id: headerRow
width: parent.width
height: root.hasHeader ? Math.max(headerIcon.height, headerText.height) : 0
visible: root.hasHeader
Row {
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingM
DankIcon {
id: headerIcon
name: root.iconName
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
visible: root.iconName !== ""
}
StyledText {
id: headerText
text: root.title
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
visible: root.title !== ""
}
}
DankIcon {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
name: root.expanded ? "expand_less" : "expand_more"
size: Theme.iconSize - 2
color: Theme.surfaceVariantText
visible: root.collapsible
}
MouseArea {
anchors.fill: parent
enabled: root.collapsible
cursorShape: root.collapsible ? Qt.PointingHandCursor : Qt.ArrowCursor
onClicked: {
if (!root.collapsible)
return;
root.expanded = !root.expanded;
}
}
}
Column {
id: contentColumn
width: parent.width
spacing: Theme.spacingM
visible: !root.collapsed
opacity: root.collapsed ? 0 : 1
Behavior on opacity {
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Widgets
DankDropdown {
id: root
property string tab: ""
property var tags: []
property string settingKey: ""
width: parent?.width ?? 0
addHorizontalPadding: true
}

View File

@@ -0,0 +1,99 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Common
import qs.Widgets
Item {
id: root
property string tab: ""
property var tags: []
property string settingKey: ""
property string text: ""
property string description: ""
property alias value: slider.value
property alias minimum: slider.minimum
property alias maximum: slider.maximum
property alias unit: slider.unit
property alias wheelEnabled: slider.wheelEnabled
property alias thumbOutlineColor: slider.thumbOutlineColor
property int defaultValue: -1
signal sliderValueChanged(int newValue)
width: parent?.width ?? 0
height: headerRow.height + Theme.spacingXS + slider.height
Column {
id: contentColumn
width: parent.width - Theme.spacingM * 2
x: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingXS
Row {
id: headerRow
width: parent.width
height: labelColumn.height
spacing: Theme.spacingS
Column {
id: labelColumn
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingXS
width: parent.width - resetButtonContainer.width - Theme.spacingS
StyledText {
text: root.text
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
visible: root.text !== ""
}
StyledText {
text: root.description
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
visible: root.description !== ""
}
}
Item {
id: resetButtonContainer
width: root.defaultValue >= 0 ? 36 : 0
height: 36
anchors.verticalCenter: parent.verticalCenter
DankActionButton {
id: resetButton
anchors.centerIn: parent
buttonSize: 36
iconName: "restart_alt"
iconSize: 20
visible: root.defaultValue >= 0 && slider.value !== root.defaultValue
backgroundColor: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
iconColor: Theme.surfaceVariantText
onClicked: {
slider.value = root.defaultValue;
root.sliderValueChanged(root.defaultValue);
}
}
}
}
DankSlider {
id: slider
width: parent.width
height: 32
showValue: true
wheelEnabled: false
thumbOutlineColor: Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
onSliderValueChanged: newValue => root.sliderValueChanged(newValue)
}
}
}

View File

@@ -0,0 +1,14 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Widgets
DankToggle {
id: root
property string tab: ""
property var tags: []
property string settingKey: ""
width: parent?.width ?? 0
}

View File

@@ -0,0 +1,224 @@
import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
width: parent.width
iconName: "view_module"
title: I18n.tr("Workspace Settings")
SettingsToggleRow {
text: I18n.tr("Workspace Index Numbers")
description: I18n.tr("Show workspace index numbers in the top bar workspace switcher")
checked: SettingsData.showWorkspaceIndex
onToggled: checked => SettingsData.set("showWorkspaceIndex", checked)
}
SettingsToggleRow {
text: I18n.tr("Workspace Padding")
description: I18n.tr("Always show a minimum of 3 workspaces, even if fewer are available")
checked: SettingsData.showWorkspacePadding
onToggled: checked => SettingsData.set("showWorkspacePadding", checked)
}
SettingsToggleRow {
text: I18n.tr("Show Workspace Apps")
description: I18n.tr("Display application icons in workspace indicators")
checked: SettingsData.showWorkspaceApps
visible: CompositorService.isNiri || CompositorService.isHyprland
onToggled: checked => SettingsData.set("showWorkspaceApps", checked)
}
Row {
width: parent.width - Theme.spacingL
spacing: Theme.spacingL
visible: SettingsData.showWorkspaceApps
opacity: visible ? 1 : 0
anchors.left: parent.left
anchors.leftMargin: Theme.spacingL
Column {
width: 120
spacing: Theme.spacingS
StyledText {
text: I18n.tr("Max apps to show")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText
font.weight: Font.Medium
}
DankTextField {
width: 100
height: 28
placeholderText: "#ffffff"
text: SettingsData.maxWorkspaceIcons
maximumLength: 7
font.pixelSize: Theme.fontSizeSmall
topPadding: Theme.spacingXS
bottomPadding: Theme.spacingXS
onEditingFinished: SettingsData.set("maxWorkspaceIcons", parseInt(text, 10))
}
}
Behavior on opacity {
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
}
SettingsToggleRow {
text: I18n.tr("Per-Monitor Workspaces")
description: I18n.tr("Show only workspaces belonging to each specific monitor.")
checked: SettingsData.workspacesPerMonitor
onToggled: checked => SettingsData.set("workspacesPerMonitor", checked)
}
SettingsToggleRow {
text: I18n.tr("Show Occupied Workspaces Only")
description: I18n.tr("Display only workspaces that contain windows")
checked: SettingsData.showOccupiedWorkspacesOnly
visible: CompositorService.isNiri || CompositorService.isHyprland
onToggled: checked => SettingsData.set("showOccupiedWorkspacesOnly", checked)
}
SettingsToggleRow {
text: I18n.tr("Show All Tags")
description: I18n.tr("Show all 9 tags instead of only occupied tags (DWL only)")
checked: SettingsData.dwlShowAllTags
visible: CompositorService.isDwl
onToggled: checked => SettingsData.set("dwlShowAllTags", checked)
}
}
SettingsCard {
width: parent.width
iconName: "label"
title: I18n.tr("Named Workspace Icons")
visible: SettingsData.hasNamedWorkspaces()
StyledText {
width: parent.width
text: I18n.tr("Configure icons for named workspaces. Icons take priority over numbers when both are enabled.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.outline
wrapMode: Text.WordWrap
}
Repeater {
model: SettingsData.getNamedWorkspaces()
Rectangle {
width: parent.width
height: workspaceIconRow.implicitHeight + Theme.spacingM
radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 0.5)
border.width: 0
Row {
id: workspaceIconRow
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingM
StyledText {
text: "\"" + modelData + "\""
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
width: 150
elide: Text.ElideRight
}
DankIconPicker {
id: iconPicker
anchors.verticalCenter: parent.verticalCenter
Component.onCompleted: {
var iconData = SettingsData.getWorkspaceNameIcon(modelData);
if (iconData) {
setIcon(iconData.value, iconData.type);
}
}
onIconSelected: (iconName, iconType) => {
SettingsData.setWorkspaceNameIcon(modelData, {
"type": iconType,
"value": iconName
});
setIcon(iconName, iconType);
}
Connections {
target: SettingsData
function onWorkspaceIconsUpdated() {
var iconData = SettingsData.getWorkspaceNameIcon(modelData);
if (iconData) {
iconPicker.setIcon(iconData.value, iconData.type);
} else {
iconPicker.setIcon("", "icon");
}
}
}
}
Rectangle {
width: 28
height: 28
radius: Theme.cornerRadius
color: clearMouseArea.containsMouse ? Theme.errorHover : Theme.surfaceContainer
border.width: 0
anchors.verticalCenter: parent.verticalCenter
DankIcon {
name: "close"
size: 16
color: clearMouseArea.containsMouse ? Theme.error : Theme.outline
anchors.centerIn: parent
}
MouseArea {
id: clearMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: SettingsData.removeWorkspaceNameIcon(modelData)
}
}
Item {
width: parent.width - 150 - 240 - 28 - Theme.spacingM * 4
height: 1
}
}
}
}
}
}
}
}

View File

@@ -55,7 +55,6 @@ Item {
signal saveBind(string originalKey, var newData)
signal removeBind(string key)
signal cancelEdit
signal restoreKeyConsumed
implicitHeight: contentColumn.implicitHeight
height: implicitHeight
@@ -67,7 +66,6 @@ Item {
return;
if (restoreKey) {
restoreToKey(restoreKey);
restoreKeyConsumed();
} else {
resetEdits();
}
@@ -77,7 +75,6 @@ Item {
if (!isExpanded || !restoreKey)
return;
restoreToKey(restoreKey);
restoreKeyConsumed();
}
function restoreToKey(keyToFind) {

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": "%1 adaptador(es), ninguno conectado"
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- Apóyanos con una estrella"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1 evento"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "Formato de 24 horas"
},
"24-hour format": {
"24-hour format": "Formato de 24 horas"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "De terceros"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "Clima de la semana"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "Un archivo con este nombre ya existe. ¿Quieres reemplazarlo?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": "Activo"
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": "Activo:"
},
@@ -128,6 +170,9 @@
"All": {
"All": "Todo"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "Todo el día"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "Siempre mostrar el porcentaje en el OSD"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": "Iconos fijos"
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "Nivel de batería y gestión de energía"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "Conectar pantalla de bloqueo a las señales dbus de loginctl. Deshabilitar si se usa una pantalla de bloqueo externa"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "Capacidad"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": "Indicador de Bloq Mayús"
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "Elije dónde aparecen los indicadores en pantalla"
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": "Cifrado"
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": "Cerrar vista general al iniciar"
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "Sobrescribir color"
},
"Color Picker": {
"Color Picker": "Selector de color"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "Temperatura de color para el día"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "Compositor"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "Configuración activada"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "Controlar la reproducción en curso"
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": "Controla la opacidad de todas las ventanas, modales y sus capas de contenido (DankDash, Ajustes, Cajón de aplicaciones, Centro de control, etc.)"
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "Copiar Nombre del Proceso"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "Redondeo de esquinas (0 = esquinas cuadradas)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "Personal"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "Ubicación personalizada"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "Acciones de energía personalizadas"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "Transparencia personalizada"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearch no disponible"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": "Modo oscuro"
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": "Formato de nombre"
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "Mostrar un panel con aplicaciones fijadas y activas que puede colocarse en el borde superior, inferior, izquierdo o derecho de la pantalla"
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": "Mostrar acciones en una cuadrícula en vez de una lista"
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": "Ajustes de pantalla para "
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "Mostrar porcentaje de volumen y brillo en los avisos OSD"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "Pantallas"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "Dock"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "Posición del dock"
},
"Dock Transparency": {
"Dock Transparency": "Transparencia del dock"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "Dominio (opcional)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": "Habilitar barra"
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "Habilitar temperatura GPU"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "Información del archivo"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "Encontrar texto"
},
"Find in note...": {
"Find in note...": "Encontrar en notas..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "Control de gamma no disponible. Requiere DMS API v6+."
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "GitHub:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "Con qué frecuencia cambiar el fondo de pantalla"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": "Importar VPN"
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "Incluir transiciones"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "Matar el proceso"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "Usado hace %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "Pantalla de bloqueo"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "Formato en la pantalla de bloqueo"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "Cerrar sesión"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "Texto largo"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": "Medio necesario"
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "Ajustes del reproductor"
},
"Media Players (": {
"Media Players (": "Reproductores ("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": "Volumen multimedia OSD"
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "Memoria"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": "Micrófono"
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": "Silencio del micrófono OSD"
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "Mostrar velocidad de descarga y subida de la red"
},
"Never": {
"Never": ""
},
"New": {
"New": "Nuevo"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "Temperatura nocturna"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": "Ninguna"
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "Prioridad normal"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": "Bandeja de salida no encontrada"
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": "Posición: "
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "Energía y seguridad"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "Confirmación de acción"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "Opciones de Energía"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "Perfil de Energía Degradada"
},
"Power Profile OSD": {
"Power Profile OSD": "Perfil de energía OSD"
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "Escalar todos los tamaños de fuente"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "Escanear"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "Seleccionar el grosor de la fuente"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "Seleccionar monitor para configurar el fondo de pantalla"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "Seleccionar tema de sonidos del sistema"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Selecciona el algoritmo de colores del fondo de pantalla"
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "Ajustes"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: Borrar todo • Esc: Cerrar "
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": "Mostrar Reiniciar DMS"
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": "Mostrar Suspender"
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "Tamaño relativo"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "Ordenar alfabéticamente"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "Tema de sonidos"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "Espaciador"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "Apoyar desarrollo"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "Superficie"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "Monitoreo del sistema:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "Bandeja del sistema"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "Iconos del área de notificaciones del sistema"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "Notificaciones emergentes del sistema"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "Los complementos de terceros son creados por la comunidad y no cuentan con soporte oficial de DankMaterialShell.\\n\\nEstos complementos pueden representar riesgos de seguridad y privacidad - instálalos bajo tu propia responsabilidad."
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "Este widget evita que la GPU entre en estados de apagado y puede afectar significativamente la batería en portátiles. No se recomienda usarlo en portátiles con gráficos híbridos."
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "Tiempo y clima"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": "Tiempo agotado"
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "Para actualizar, ejecute el siguiente comando:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "Mensajes emergentes"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "Efecto de transición"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Apagar monitores después de"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": "No disponible"
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "Efecto visual usado al cambiar el fondo de pantalla"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "Cambio de volumen"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "Espacios de trabajo"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": "Si"
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "Tienes cambios sin guardar. ¿Guardar antes de abrir otro archivo?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": "Elegir tema personalizado"
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "Seleccionar fondo de pantalla"
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "eventos"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl no disponible - integración requiere conexión al socket DMS"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "Matugen no detectado - tematización dinámica no disponible"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "oficial"
},
"profile image file browser title": {
"Select Profile Image": "Elegir foto de perfil"
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": "Ajustes"
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": "Elegir carpeta de fondos de pantalla"
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "• Instalar solo desde fuentes confiables"
},

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": ""
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- Supportaci Con Una Stella ⭐"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1 evento"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "Formato 24-Ore"
},
"24-hour format": {
"24-hour format": "formato 24-ore"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "terze parti"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "Previsioni 7-giorni"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "Un file con questo nome esiste già. Vuoi sovrascriverlo?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": ""
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": ""
},
@@ -128,6 +170,9 @@
"All": {
"All": "Tutto"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "Tutto il giorno"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "Visualizza sempre percentuale OSD"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": "Icone sempre attive"
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "Livello batteria e gestione energetica"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "Collega il blocca schermo ai segnali dbus da loginctl.\nDisabilità se stai usando un blocca schermo esterno"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "Capacità"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": "Indicatore Maiuscolo"
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "Scegli dove i messaggi appaiono sullo schermo"
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": ""
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": "Chiudi Overview all'Avvio"
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "Sostituzione Colore"
},
"Color Picker": {
"Color Picker": "Prelievo Colore"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "Temperatura colore per il giorno"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "Compositor\n"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "Configurazione attivata"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "Controllo media attualmente in riproduzione "
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": "Controlla l'opacità di tutti i popup, delle finestre modali e dei relativi livelli di contenuto (Dank Dash, Impostazioni, App Drawer, Centro di controllo, ecc.)"
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "Copia Nome Processo"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "Raggio Angoli (0 = angoli squadrati)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "Personalizzato"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "Posizione Personalizzata"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "Azione Alimentazione Personalizzate"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "Trasparenza personalizzata"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearch non disponibile"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": "Modalità Scura"
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": "Formato del nome visualizzato"
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "Visualizza una dock con applicazioni pinnate ed in esecuzione che possono essere posizionate nell'angolo superiore, inferiore, sinistro o destro dello schermo"
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": "Visualizza le azioni di alimentazioni in griglia invece di una lista"
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": "Impostazioni display per "
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "Mostra di default la percentuale volume e luminosità nei popups OSD"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "Displays"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "Dock"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "Posizione Dock"
},
"Dock Transparency": {
"Dock Transparency": "Trasparenza Dock"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "Dominio (opzionale)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": "Abilita Barra"
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "Abilita Temperatura GPU"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "Informazioni File"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "Trova nel Testo"
},
"Find in note...": {
"Find in note...": "Trova in note..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "Gamma control non disponibile. Richiede API DMS v6+."
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "Github:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "Quanto spesso cambiare lo sfondo"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": ""
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "Includi Transizioni"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "Chiusura Processo"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "Ultimo avviato %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "Blocca Schermo"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "Formato Blocca Schermo"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "Log Out"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "Testo Lungo"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": "Media Richiesti"
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "Impostazioni Media Player"
},
"Media Players (": {
"Media Players (": "Media Players ("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": "OSD Volume Media"
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "Memoria"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": "Microfono"
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": "OSD Microfono Muto"
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "Mostra velocità di download e upload della rete"
},
"Never": {
"Never": ""
},
"New": {
"New": "Nuovo"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "Temperatura Notte"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": "Nulla"
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "Priorità Normale"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": "Vassoio Uscita Mancante"
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": "Posizione"
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "Alimentazione & Sicurezza"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "Conferma Azioni Alimentazione"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "Opzioni Alimentazione"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "Degradamento profilo energetico"
},
"Power Profile OSD": {
"Power Profile OSD": "OSD Profilo Alimentazione"
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "Scala tutte le dimensioni dei font"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "Scansiona"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "Seleziona peso font"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "Selezionare il monitor per configurare lo sconto"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "Seleziona tema suoni di sistema"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Seleziona l'algoritmo tavolozza usato per i colori basati sullo sfondo"
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "Impostazioni"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: Elimina tutto • Esc: Chiude"
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": "Mostra Riavvia DMS"
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": "Mostra Sospendi"
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "Dimensione Offset"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "Ordina Alfabeticamente"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "Tema Suoni"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "Spaziatore"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "Supporta Sviluppo"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "Superficie"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "Monitoraggio Sistema:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "Vassoio Sistema"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "Icone area notifiche di sistema"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "Notiche toast di sistema"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "I plugin di terze parti sono creati dalla community e non sono ufficialmente supportati da DankMaterialShell.\\n\\nQuesti plugin possono comportare rischi per la sicurezza e la privacy - installare a proprio rischio."
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "Questo widget impedisce gli stati di spegnimento della GPU, che possono influire in modo significativo sulla durata della batteria sui laptop. Non è consigliabile utilizzare questo su laptop con grafica ibrida."
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "Orario & Meteo"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": "Scaduto"
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "Per aggiornare, esegui il seguente comando:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "Messaggi Toast"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "Effetto Transizione"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Spegni monitors dopo"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": ""
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "Effetto visivo usato quando cambia lo sfondo"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "Volume Cambiato"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "Switcher Workspace"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": ""
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "Ci sono modifiche non salvate. Salvare prima di aprire un file?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": "Seleziona Tema Personalizzato"
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "Seleziona Sfondo"
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "eventi"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl non disponibile - integrazione blocco richiede connessione socket DMS"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "matugen non rilevato - tema dinamico non disponibile"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "ufficiale"
},
"profile image file browser title": {
"Select Profile Image": "Seleziona Immagine Profilo"
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": "Impostazioni"
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": "Seleziona Cartella Sfondo"
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "• Installa solo da sorgenti fidate"
},

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": ""
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- 星を付けて応援してください⭐"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1件のイベント"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "24時間形式"
},
"24-hour format": {
"24-hour format": "24時間形式"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "サードパーティ"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "7日間予報"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "この名前のファイルは既に存在します。上書きしてもよろしいですか?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": ""
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": ""
},
@@ -128,6 +170,9 @@
"All": {
"All": "全て"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "毎日"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "常に OSD パーセンテージを表示"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": "常時表示アイコン"
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "バッテリーレベルおよび電源管理"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "ロック画面をloginctlからのdbus信号にバインド。外部ロック画面を使用している場合は無効に"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "容量"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": "Caps Lock インジケーター"
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "OSDの表示する場所を選んでください"
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": ""
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": "起動中のときに概要を閉じる"
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "色のオーバーライド"
},
"Color Picker": {
"Color Picker": "カラーピッカー"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "昼間の色温度"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "コンポジター"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "設定が適用されました"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "現在再生中のメディアを制御"
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": "すべてのポップアウト、モーダル、およびそれらのコンテンツレイヤー(DankDash、設定、アプリドロワー、コントロールセンターなど)の不透明度を制御"
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "プロセス名をコピー"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "コーナー半径0 = 角丸なし)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "カスタム"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "カスタムロケーション"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "カスタム電源アクション"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "カスタム透明度"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearchが利用できません"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": "ダークモード"
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": "名称形式を表示"
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "画面の上、下、左、右の端に配置できる、ピン留めされた実行中のアプリケーションを含むドックを表示します"
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": "電源メニューのアクションをリストではなくグリッドに表示"
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": "以下の設定を表示 "
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "OSDポップアップに音量と輝度のパーセンテージ値をデフォルトで表示"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "表示"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "ドック"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "ドック位置"
},
"Dock Transparency": {
"Dock Transparency": "ドックの透明度"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "ドメイン (オプション)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": "バーを起用"
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "GPU温度を有効にする"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "ファイル情報"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "テキスト内検索"
},
"Find in note...": {
"Find in note...": "メモで検索..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "ガンマ制御は使用できません。DMS API v6+ が必要です。"
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "GitHub:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "壁紙を切り替える間隔"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": ""
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "トランジションを含める"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "プロセスを強制終了"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "最終起動日 %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "ロック画面"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "ロック画面のフォーマット"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "ログアウト"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "長文"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": "メディアが必要"
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "メディアプレーヤーの設定"
},
"Media Players (": {
"Media Players (": "メディアプレーヤー("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": "メディア音量OSD"
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "メモリ"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": "マイク"
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": "マイクミュートOSD"
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "ネットワークのダウンロードおよびアップロード速度を表示"
},
"Never": {
"Never": ""
},
"New": {
"New": "新しい"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "夜間の温度"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": "ない"
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "通常の優先度"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": "アウトプットトレイが見つかりませんでした"
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": "位置: "
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "電源とセキュリティ"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "電源アクションの確認"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "電源オプション"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "電源プロファイルの劣化"
},
"Power Profile OSD": {
"Power Profile OSD": "電源プロファイルOSD"
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "すべてのフォントサイズを拡大縮小"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "スキャン"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "フォントの太さを選ぶ"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "壁紙を設定するモニターを選ぶ"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "システムサウンドテーマを選ぶ"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "壁紙ベースの色で、使用するパレットアルゴリズムを選ぶ"
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "設定"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: すべてクリア • Esc: 閉じる"
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": "DMS再起動を表示"
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": "一時停止を表示"
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "サイズオフセット"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "アルファベット順に並べ替える"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "サウンドテーマ"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "間隔"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "開発をサポート"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "表面"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "システム監視:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "システムトレイ"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "システム通知エリアアイコン"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "システムトースト通知"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "サードパーティプラグインはコミュニティによって作成されており、DankMaterialShellによる公式サポートはありません。\\n\\nこれらのプラグインはセキュリティやプライバシーのリスクをもたらす可能性があります - 自己責任でインストールしてください。"
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "このウィジェットはGPUの省電力状態を防ぎ、ートパソコンのバッテリー寿命に大きな影響を与える可能性があります。ハイブリッドグラフィックス搭載のートパソコンでの使用は推奨されません。"
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "時間および天気"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": "タイムアウト"
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "更新するには以下のコマンドを実行してください:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "トーストメッセージ"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "トランジション効果"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "後にモニターの電源を切る"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": ""
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "壁紙が変更される時に使用されるビジュアルエフェクト"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "音量変更"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "ワークスペーススイッチャー"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": ""
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "保存されていない変更があります。ファイルを開く前に保存しますか?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": "カスタムテーマを選んでください"
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "壁紙を選んでください"
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "イベント"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctlが利用できません- ロック統合のためにDMS socketの接続が必要です。"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "matugen が検出されません - ダイナミックテーマ設定は利用できません"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "公式"
},
"profile image file browser title": {
"Select Profile Image": "プロファイル画像を選んでください"
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": "設定"
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": "壁紙のディレクトリを選んでください"
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "• 信頼できるソースからのみインストールする"
},

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": "%1 adapter(y), brak połączenia"
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- Wesprzyj nas gwiazdką ⭐"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1 wydarzenie"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "Format 24-godzinny"
},
"24-hour format": {
"24-hour format": "format 24-godzinny"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "strona trzecia"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "Prognoza 7-dniowa"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "Plik o takiej nazwie już istnieje. Czy chcesz go nadpisać?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": "Aktywny"
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": "Aktywny: "
},
@@ -128,6 +170,9 @@
"All": {
"All": "Wszystkie"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "Cały dzień"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "Zawsze pokazuj procent w OSD"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": "Ikony zawsze włączone"
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "Poziom baterii i zarządzanie zasilaniem"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "Powiąż ekran blokady z sygnałami dbus z loginctl. Wyłącz, jeśli używasz zewnętrznego ekranu blokady"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "Pojemność"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": "Wskaźnik caps locka"
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "Wybierz miejsce wyświetlania informacji na ekranie"
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": "Szyfr"
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": "Zamknij podgląd przy uruchomieniu"
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "Nadpisanie koloru"
},
"Color Picker": {
"Color Picker": "Próbnik kolorów"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "Temperatura barwowa w ciągu dnia"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "Kompozytor"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "Konfiguracja aktywowana"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "Steruj aktualnie odtwarzanymi multimediami"
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": "Kontroluje przezroczystość wszystkich wyskakujących okienek, okien modalnych i ich warstw zawartości (DankDash, Ustawienia, Szuflada aplikacji, Centrum sterowania itp.)"
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "Kopiuj nazwę procesu"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "Promień narożnika (0 = kwadratowe narożniki)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "Niestandardowy"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "Niestandardowa lokalizacja"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "Niestandardowe akcje zasilania"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "Niestandardowa przezroczystość"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearch niedostępny"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": "Tryb ciemny"
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": "Format nazwy wyświetlanej"
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "Wyświetla dok z przypiętymi i uruchomionymi aplikacjami, który można umieścić na górze, na dole, po lewej lub po prawej stronie ekranu."
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": "Wyświetl elementy menu zasilania w siatce zamiast listy"
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": "Ustawienia wyświetlania dla "
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "Domyślnie wyświetlaj wartości procentowe głośności i jasności w wyskakujących okienkach OSD"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "Ekrany"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "Dok"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "Pozycja Doka"
},
"Dock Transparency": {
"Dock Transparency": "Przezroczystość Doka"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "Domena (opcjonalnie)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": "Włącz pasek"
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "Pokaż temperaturę GPU"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "Informacje"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "Znajdź w tekście"
},
"Find in note...": {
"Find in note...": "Znajdź w notatce..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "Kontrola gamma niedostępna. Wymaga DMS API w wersji 6+."
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "Github:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "Jak często zmieniać tapetę"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": "Importuj VPN"
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "Uwzględnij przejścia"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "Zabij proces"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "Ostatnio uruchomiony %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "Ekran blokady"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "Format ekranu blokady"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "Wyloguj"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "Długi tekst"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": "Wymagany nośnik"
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "Ustawienia odtwarzacza multimediów"
},
"Media Players (": {
"Media Players (": "Odtwarzacze multimediów ("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": "OSD głośności multimediów"
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "Pamięć"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": "Mikrofon"
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": "OSD Wyciszenia Mikrofonu"
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "Wyświetlanie prędkości pobierania i wysyłania sieci"
},
"Never": {
"Never": ""
},
"New": {
"New": "Nowy"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "Temperatura w nocy"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": "Brak"
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "Normalny priorytet"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": "Brak tacy wyjściowej"
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": "Stanowisko: "
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "Zasilanie i bezpieczeństwo"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "Potwierdzenie działania zasilania"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "Opcje zasilania"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "Pogorszenie profilu zasilania"
},
"Power Profile OSD": {
"Power Profile OSD": "OSD Profilu Zasilania"
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "Skaluj wszystkie rozmiary czcionek"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "Skanuj"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "Wybierz grubość czcionki"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "Wybierz monitor, aby skonfigurować tapetę"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "Wybierz motyw dźwiękowy systemu"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Wybierz algorytm palety używany dla kolorów tapet."
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "Ustawienia"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: Wyczyść wszystko • Esc: Zamknij"
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": "Pokaż ponowne uruchomienie DMS"
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": "Pokaż zawieszenie"
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "Przesunięcie rozmiaru"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "Sortuj alfabetycznie"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "Motyw dźwiękowy"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "Odstęp"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "Wspieraj rozwój"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "Powierzchnia"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "Monitorowanie systemu:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "Zasobnik systemowy"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "Ikony obszaru powiadomień systemowych"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "Powiadomienia o toastach systemowych"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "Wtyczki firm trzecich są tworzone przez społeczność i nie są oficjalnie wspierane przez DankMaterialShell.\\n\\nTe wtyczki mogą stanowić zagrożenie dla bezpieczeństwa i prywatności - instaluj na własne ryzyko."
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "Ten widżet zapobiega wyłączaniu zasilania GPU, co może znacznie wpłynąć na żywotność baterii w laptopach. Nie zaleca się używania go na laptopach z hybrydową grafiką."
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "Czas i pogoda"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": "Przekroczono limit czasu"
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "Aby dokonać aktualizacji, uruchom następujące polecenie:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "Wiadomości toastowe"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "Efekt przejścia"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Wyłącz monitory po"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": "Niedostępny"
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "Efekt wizualny używany przy zmianie tapety"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "Zmieniony wolumen"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "Przełącznik obszarów roboczych"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": "Tak"
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "Masz niezapisane zmiany. Zapisać przed otwarciem pliku?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": "Wybierz niestandardowy motyw"
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "Wybierz tapetę"
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "wydarzenia"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl niedostępny - integracja blokady wymaga połączenia z gniazdem DMS"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "nie wykryto matugen - dynamiczne motywy niedostępne"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "oficjalny"
},
"profile image file browser title": {
"Select Profile Image": "Wybierz obraz profilowy"
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": "Ustawienia"
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": "Wybierz katalog z tapetami"
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "• Instaluj tylko z zaufanych źródeł"
},

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": ""
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- Apoie-nos com uma Estrela ⭐"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1 evento"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "Formato de 24 Horas"
},
"24-hour format": {
"24-hour format": "formato de 24 horas"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "Terceiros"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "Previsão do Tempo de 7 Dias"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "Um arquivo com esse nome já existe. Você quer sobrescrevê-lo?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": ""
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": ""
},
@@ -128,6 +170,9 @@
"All": {
"All": "Todos"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "O dia todo"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "Sempre mostrar porcetagem no OSD"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": ""
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "Nível de bateria e manejamento de energia"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "Vincular o bloqueio de tela aos sinais do DBus do loginctl. Desative se estiver usando um bloqueio de tela externo"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "Capacidade"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": ""
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": ""
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": ""
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": ""
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "Sobrescrever Cor"
},
"Color Picker": {
"Color Picker": "Seletor de Cores"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "Temperatura de cor durante o dia"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "Compositor"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "Configuração ativada"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "Controlar mídia que está sendo reproduzida"
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": ""
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "Copiar Nome do Processo"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "Ângulo da quina (0 = quina quadrilátera)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "Customizado"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "Customizar Localização"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "Ações de Energia Customizadas"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "Transparência Customizada"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearch não disponível"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": ""
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": ""
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "Exibir um dock com aplicativos que estão sendo utilizados, e que pode ser posicionada no superior, inferior, esquerda ou direita dos cantos da tela"
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": ""
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": ""
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "Mostrar porcentagem de volume e brilho por padrão nos pop ups de OSD"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "Telas"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "Dock"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "Posição da Dock"
},
"Dock Transparency": {
"Dock Transparency": "Transparência da Dock"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "Domínio (opcional)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": ""
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "Habilitar Temperatura da GPU"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "Informação do Arquivo"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "Procurar no Texto"
},
"Find in note...": {
"Find in note...": "Procurar na nota..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "Controle de gama não disponível. Necessário DMS API v6+."
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "Github:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "Tempo entre papéis de parede"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": ""
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "Incluir Transições"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "Matar Processo"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "Lançado pela última vez em %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "Tela de Bloqueio"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "Formato da Tela de Bloqueio"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "Sair"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "Longo Texto"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": ""
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "Configurações do Reprodutor de Mídia"
},
"Media Players (": {
"Media Players (": "Reprodutores de Mídia("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": ""
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "Memória"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": ""
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": ""
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "Monitor de velocidades de download e upload da rede"
},
"Never": {
"Never": ""
},
"New": {
"New": "Novo"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "Temperatura Noturna"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": ""
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "Prioridade Normal"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": ""
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": ""
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "Energia & Segurança"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "Confirmação de Ação de Energia"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "Opções de Energia"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "Degradação do Perfil de Energia"
},
"Power Profile OSD": {
"Power Profile OSD": ""
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "Ajustar todos os tamanhos de fonte"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "Escanear"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "Selecionar espessura da fonte"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "Selecionar monitor para configurar papel de parede"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "Selecionar tema do som do sistema"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Selecione o algoritmo usado para cores baseadas no papel de parede"
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "Configurações"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: Apagar tudo • Esc: Fechar"
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": ""
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": ""
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "Ajuste de Tamanho"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "Ordenar Alfabeticamente"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "Tema do Som"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "Espaçador"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "Apoie o Desenvolvimento"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "Superfície"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "Monitoramento do Sistema:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "Bandeja do Sistema"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "Área de ícones de notificações do sistema"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "Notificações toast do sistema"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "Plugins de terceiros são criados pela comunidade e não têm suporte oficial do DankMaterialShell.\\n\\nEsses plugins podem representar riscos à segurança e à privacidade - instale por sua conta e risco."
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "Este widget mantém a GPU ativa, podendo reduzir a duração da bateria. Não recomendado em laptops com gráficos híbridos."
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "Hora & Clima"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": ""
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "Para atualizar, execute o seguinte comando:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "Mensagens Toast"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "Efeito de Transição"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Desligar monitores depois de"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": ""
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "Efeito visual usado na mudança do papel de parede"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "Volume Alterado"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "Seletor de Áreas de Trabalho"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": ""
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "Você tem mudanças não salvas. Deseja salvar antes de abrir um arquivo?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": ""
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": ""
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "eventos"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl não disponível - integração com bloqueio requer conexão de socket DMS"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "matugen não detectado - tematização dinâmica não disponível"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "oficial"
},
"profile image file browser title": {
"Select Profile Image": ""
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": ""
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": ""
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "Instale apenas de fontes confiáveis"
},

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": ""
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- 给个 Star ⭐来表示支持吧"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1个事件"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "24小时制"
},
"24-hour format": {
"24-hour format": "24小时制"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "第三方"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "七日天气预报"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "已存在同名文件,是否覆盖?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": ""
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": ""
},
@@ -128,6 +170,9 @@
"All": {
"All": "全部"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "每天"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "始终显示 OSD 百分比"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": "总显示的图标"
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "电池电量与电源管理"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "将锁屏绑定到来自 loginctl 的 dbus 信号。如使用外部锁屏程序,请禁用此项"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "电池容量"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": "大小写指示灯"
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "选择OSD在屏幕上出现的位置"
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": ""
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": "在启动时关闭概览"
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "覆盖颜色"
},
"Color Picker": {
"Color Picker": "取色器"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "白天模式色温"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "合成器"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "已应用配置"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "控制当前播放的媒体"
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": "控制所有弹出窗口、模态及其内容层DankDash、设置、应用抽屉、控制中心等的不透明度"
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "复制进程名"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "圆角半径0 = 直角)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "自定义"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "自定义位置"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "自定义电源操作"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "自定义透明度"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearch 不可用"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": "暗色模式"
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": "显示名称格式"
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "显示一个包含固定和运行中应用的程序坞,可放置在屏幕四边任意位置"
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": "通过网格而非列表显示电源菜单"
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": "显示设置 "
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "在OSD弹窗中默认显示音量与亮度数值"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "显示"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "程序坞"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "程序坞位置"
},
"Dock Transparency": {
"Dock Transparency": "程序坞透明度"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "域(可选)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": "启用状态栏"
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "显示 GPU 温度"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "文件信息"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "查找文本"
},
"Find in note...": {
"Find in note...": "在便签中查找..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "伽玛控制不可用,需要 DMS API v6+。"
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "Github:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "壁纸轮换频率"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": ""
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "包含过渡效果"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "结束进程"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "上次启动于 %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "锁屏"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "锁屏格式"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "注销"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "长文本"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": "需要纸张"
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "媒体播放器设置"
},
"Media Players (": {
"Media Players (": "媒体播放器 ("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": "媒体音量OSD"
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "内存"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": "麦克风"
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": "OSD麦克风静音"
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "显示网络下载与上传速度"
},
"Never": {
"Never": ""
},
"New": {
"New": "新建"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "夜间色温"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": "无"
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "标准通知"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": "未检测到出纸盒"
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": "位置: "
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "电源与安全"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "电源操作确认"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "电源菜单"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "电源配置性能下降"
},
"Power Profile OSD": {
"Power Profile OSD": "OSD电源配置"
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "缩放所有字体大小"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "扫描"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "选择字体粗细"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "选择要设置壁纸的屏幕"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "选择系统声音主题"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "选择从壁纸取色的配色方案"
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "设置"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: 清空 • Esc: 关闭"
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": "显示重启 DMS"
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": "显示挂起"
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "尺寸偏移"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "按字母顺序排序"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "声音主题"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "空白占位"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "支持开发"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "表面色"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "系统监测:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "系统托盘"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "系统通知区域图标"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "系统弹出式通知"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "第三方插件由社区开发DankMaterialShell 不提供官方支持。\\n\\n这些插件可能存在隐私和安全隐患请自行承担风险。"
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "此组件会阻止 GPU 进入省电状态,可能会显著影响笔记本的电池续航。不建议在配备混合显卡的笔记本上使用。"
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "时间与天气"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": "超时"
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "请运行以下命令以更新:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "弹出式信息"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "过渡效果"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "在此时间后关闭显示器"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": ""
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "壁纸切换时的动画效果"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "音量变化"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "工作区切换器"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": ""
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "检测到未保存的更改,是否在打开文件前保存?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": "选择自定义主题"
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "选择壁纸"
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "事件"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl 不可用 - 启用锁定集成需连接 DMS socket"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "未检测到 Matugen动态主题不可用"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "官方"
},
"profile image file browser title": {
"Select Profile Image": "选择个人信息图像"
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": "设置"
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": "选择壁纸位置"
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "• 仅从可信来源安装"
},

View File

@@ -1,4 +1,7 @@
{
"%1 DMS bind(s) may be overridden by config binds that come after the include.": {
"%1 DMS bind(s) may be overridden by config binds that come after the include.": ""
},
"%1 adapter(s), none connected": {
"%1 adapter(s), none connected": "%1 個轉接器,未連接"
},
@@ -32,21 +35,57 @@
"- Support Us With a Star ⭐": {
"- Support Us With a Star ⭐": "- 給我們點個 Star ⭐ 來支持我們"
},
"0 = square corners": {
"0 = square corners": ""
},
"1 event": {
"1 event": "1 個活動"
},
"1 minute": {
"1 minute": ""
},
"1 second": {
"1 second": ""
},
"10 minutes": {
"10 minutes": ""
},
"10 seconds": {
"10 seconds": ""
},
"15 seconds": {
"15 seconds": ""
},
"2 minutes": {
"2 minutes": ""
},
"24-Hour Format": {
"24-Hour Format": "24 小時制"
},
"24-hour format": {
"24-hour format": "24 小時制"
},
"3 seconds": {
"3 seconds": ""
},
"30 seconds": {
"30 seconds": ""
},
"3rd party": {
"3rd party": "第三方"
},
"5 minutes": {
"5 minutes": ""
},
"5 seconds": {
"5 seconds": ""
},
"7-Day Forecast": {
"7-Day Forecast": "七天氣象預報"
},
"8 seconds": {
"8 seconds": ""
},
"A file with this name already exists. Do you want to overwrite it?": {
"A file with this name already exists. Do you want to overwrite it?": "檔案名稱已存在。是否要覆蓋它?"
},
@@ -86,6 +125,9 @@
"Active": {
"Active": "啟用"
},
"Active Lock Screen Monitor": {
"Active Lock Screen Monitor": ""
},
"Active: ": {
"Active: ": "啟用:"
},
@@ -128,6 +170,9 @@
"All": {
"All": "所有"
},
"All Monitors": {
"All Monitors": ""
},
"All day": {
"All day": "全天"
},
@@ -140,6 +185,9 @@
"Always Show OSD Percentage": {
"Always Show OSD Percentage": "OSD 始終顯示百分比"
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
"Always on icons": {
"Always on icons": "始終顯示圖示"
},
@@ -335,6 +383,9 @@
"Battery level and power management": {
"Battery level and power management": "電量與電源管理"
},
"Behavior": {
"Behavior": ""
},
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": {
"Bind lock screen to dbus signals from loginctl. Disable if using an external lock screen": "將鎖定畫面綁定到 loginctl 的 dbus 訊號。如果使用外部鎖屏,請停用"
},
@@ -434,6 +485,9 @@
"Capacity": {
"Capacity": "容量"
},
"Caps Lock": {
"Caps Lock": ""
},
"Caps Lock Indicator": {
"Caps Lock Indicator": "大小寫鎖定指示器"
},
@@ -488,6 +542,9 @@
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "選擇螢幕顯示出現在螢幕上的位置"
},
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": {
"Choose which monitor shows the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.": ""
},
"Cipher": {
"Cipher": "密碼"
},
@@ -530,12 +587,18 @@
"Close Overview on Launch": {
"Close Overview on Launch": "啟動時關閉概覽"
},
"Color Mode": {
"Color Mode": ""
},
"Color Override": {
"Color Override": "顏色覆蓋"
},
"Color Picker": {
"Color Picker": "顏色選擇器"
},
"Color displayed on monitors without the lock screen": {
"Color displayed on monitors without the lock screen": ""
},
"Color temperature for day time": {
"Color temperature for day time": "白天螢幕的顏色溫度"
},
@@ -578,6 +641,9 @@
"Compositor": {
"Compositor": "合成器"
},
"Config action: %1": {
"Config action: %1": ""
},
"Configuration activated": {
"Configuration activated": "配置已啟動"
},
@@ -629,6 +695,9 @@
"Control currently playing media": {
"Control currently playing media": "控制目前播放器"
},
"Controls opacity of all popouts, modals, and their content layers": {
"Controls opacity of all popouts, modals, and their content layers": ""
},
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": {
"Controls opacity of all popouts, modals, and their content layers (DankDash, Settings, App Drawer, Control Center, etc.)": "控制所有彈出式介面、模態對話框及其內容層級的不透明度 (適用於 DankDash、設定、應用程式抽屜、控制中心等)"
},
@@ -650,6 +719,9 @@
"Copy Process Name": {
"Copy Process Name": "複製程序名"
},
"Corner Radius": {
"Corner Radius": ""
},
"Corner Radius (0 = square corners)": {
"Corner Radius (0 = square corners)": "圓角半徑 (0 = 方角)"
},
@@ -686,12 +758,33 @@
"Custom": {
"Custom": "自訂"
},
"Custom Duration": {
"Custom Duration": ""
},
"Custom Hibernate Command": {
"Custom Hibernate Command": ""
},
"Custom Location": {
"Custom Location": "自訂位置"
},
"Custom Lock Command": {
"Custom Lock Command": ""
},
"Custom Logout Command": {
"Custom Logout Command": ""
},
"Custom Power Actions": {
"Custom Power Actions": "自訂電源選項"
},
"Custom Power Off Command": {
"Custom Power Off Command": ""
},
"Custom Reboot Command": {
"Custom Reboot Command": ""
},
"Custom Suspend Command": {
"Custom Suspend Command": ""
},
"Custom Transparency": {
"Custom Transparency": "自訂透明度"
},
@@ -746,6 +839,9 @@
"DankSearch not available": {
"DankSearch not available": "DankSearch 不可用"
},
"DankShell & System Icons (requires restart)": {
"DankShell & System Icons (requires restart)": ""
},
"Dark Mode": {
"Dark Mode": "深色主題"
},
@@ -842,6 +938,9 @@
"Display Name Format": {
"Display Name Format": "顯示名稱格式"
},
"Display a dock with pinned and running applications": {
"Display a dock with pinned and running applications": ""
},
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": {
"Display a dock with pinned and running applications that can be positioned at the top, bottom, left, or right edge of the screen": "顯示一個帶有固定和正在運行的應用程式的 Dock這些應用程式可以放置在螢幕的頂部、底部、左側或右側邊緣"
},
@@ -863,12 +962,18 @@
"Display power menu actions in a grid instead of a list": {
"Display power menu actions in a grid instead of a list": "以網格而非列表顯示電源選單操作"
},
"Display seconds in the clock": {
"Display seconds in the clock": ""
},
"Display settings for ": {
"Display settings for ": "顯示設定適用於"
},
"Display volume and brightness percentage values by default in OSD popups": {
"Display volume and brightness percentage values by default in OSD popups": "在 OSD 彈出視窗中預設顯示音量和亮度百分比值"
},
"Display volume and brightness percentage values in OSD popups": {
"Display volume and brightness percentage values in OSD popups": ""
},
"Displays": {
"Displays": "螢幕"
},
@@ -884,12 +989,21 @@
"Dock": {
"Dock": "Dock"
},
"Dock & Launcher": {
"Dock & Launcher": ""
},
"Dock Position": {
"Dock Position": "Dock 位置"
},
"Dock Transparency": {
"Dock Transparency": "Dock 透明度"
},
"Dock Visibility": {
"Dock Visibility": ""
},
"Docs": {
"Docs": ""
},
"Domain (optional)": {
"Domain (optional)": "網域 (可選)"
},
@@ -938,6 +1052,9 @@
"Enable Bar": {
"Enable Bar": "啟用欄"
},
"Enable Do Not Disturb": {
"Enable Do Not Disturb": ""
},
"Enable GPU Temperature": {
"Enable GPU Temperature": "啟用 GPU 溫度"
},
@@ -1148,12 +1265,21 @@
"File Information": {
"File Information": "檔案資訊"
},
"Files": {
"Files": ""
},
"Find in Text": {
"Find in Text": "尋找文字"
},
"Find in note...": {
"Find in note...": "尋找筆記..."
},
"Fine-tune animation timing in milliseconds": {
"Fine-tune animation timing in milliseconds": ""
},
"First Time Setup": {
"First Time Setup": ""
},
"Fix Now": {
"Fix Now": ""
},
@@ -1226,6 +1352,9 @@
"Gamma control not available. Requires DMS API v6+.": {
"Gamma control not available. Requires DMS API v6+.": "Gamma 控制不可用。需要 DMS API v6+。"
},
"GitHub": {
"GitHub": ""
},
"Github:": {
"Github:": "Github:"
},
@@ -1310,6 +1439,9 @@
"Hourly Forecast": {
"Hourly Forecast": ""
},
"How long to hold the button to confirm the action": {
"How long to hold the button to confirm the action": ""
},
"How often to change wallpaper": {
"How often to change wallpaper": "多久更換一次桌布"
},
@@ -1355,6 +1487,9 @@
"Import VPN": {
"Import VPN": "匯入 VPN"
},
"Inactive Monitor Color": {
"Inactive Monitor Color": ""
},
"Include Transitions": {
"Include Transitions": "包括過渡"
},
@@ -1424,6 +1559,9 @@
"Kill Process": {
"Kill Process": "結束程序"
},
"Ko-fi": {
"Ko-fi": ""
},
"Last launched %1": {
"Last launched %1": "上次啟動於 %1"
},
@@ -1499,6 +1637,9 @@
"Lock Screen": {
"Lock Screen": "鎖定螢幕"
},
"Lock Screen Display": {
"Lock Screen Display": ""
},
"Lock Screen Format": {
"Lock Screen Format": "鎖定螢幕格式"
},
@@ -1508,6 +1649,9 @@
"Log Out": {
"Log Out": "登出"
},
"Long": {
"Long": ""
},
"Long Text": {
"Long Text": "長文字"
},
@@ -1586,15 +1730,24 @@
"Media Needed": {
"Media Needed": "需要媒體"
},
"Media Player": {
"Media Player": ""
},
"Media Player Settings": {
"Media Player Settings": "媒體播放設定"
},
"Media Players (": {
"Media Players (": "媒體播放 ("
},
"Media Volume": {
"Media Volume": ""
},
"Media Volume OSD": {
"Media Volume OSD": "媒體音量 OSD"
},
"Medium": {
"Medium": ""
},
"Memory": {
"Memory": "記憶體"
},
@@ -1607,6 +1760,9 @@
"Microphone": {
"Microphone": "麥克風"
},
"Microphone Mute": {
"Microphone Mute": ""
},
"Microphone Mute OSD": {
"Microphone Mute OSD": "麥克風靜音 OSD"
},
@@ -1691,6 +1847,9 @@
"Network download and upload speed display": {
"Network download and upload speed display": "顯示網路下載跟上傳速度"
},
"Never": {
"Never": ""
},
"New": {
"New": "新"
},
@@ -1715,6 +1874,9 @@
"Night Temperature": {
"Night Temperature": "夜間色溫"
},
"Niri Integration": {
"Niri Integration": ""
},
"Niri compositor actions (focus, move, etc.)": {
"Niri compositor actions (focus, move, etc.)": ""
},
@@ -1790,6 +1952,9 @@
"None": {
"None": "無"
},
"Normal Font": {
"Normal Font": ""
},
"Normal Priority": {
"Normal Priority": "普通優先級"
},
@@ -1898,6 +2063,9 @@
"Output Tray Missing": {
"Output Tray Missing": "輸出托盤遺失"
},
"Overridden by config": {
"Overridden by config": ""
},
"Override": {
"Override": ""
},
@@ -2015,9 +2183,15 @@
"Position: ": {
"Position: ": "位置:"
},
"Possible Override Conflicts": {
"Possible Override Conflicts": ""
},
"Power & Security": {
"Power & Security": "電源與安全"
},
"Power & Sleep": {
"Power & Sleep": ""
},
"Power Action Confirmation": {
"Power Action Confirmation": "電源操作確認"
},
@@ -2030,12 +2204,18 @@
"Power Options": {
"Power Options": "電源選項"
},
"Power Profile": {
"Power Profile": ""
},
"Power Profile Degradation": {
"Power Profile Degradation": "電源配置降級"
},
"Power Profile OSD": {
"Power Profile OSD": "電源設定檔 OSD"
},
"Power source": {
"Power source": ""
},
"Precipitation Chance": {
"Precipitation Chance": ""
},
@@ -2240,6 +2420,9 @@
"Scale all font sizes": {
"Scale all font sizes": "縮放所有字體大小"
},
"Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": ""
},
"Scan": {
"Scan": "掃描"
},
@@ -2318,6 +2501,9 @@
"Select font weight": {
"Select font weight": "選擇字體粗細"
},
"Select font weight for UI text": {
"Select font weight for UI text": ""
},
"Select monitor to configure wallpaper": {
"Select monitor to configure wallpaper": "選擇指定螢幕桌布"
},
@@ -2330,6 +2516,9 @@
"Select system sound theme": {
"Select system sound theme": "選擇系統音效主題"
},
"Select the font family for UI text": {
"Select the font family for UI text": ""
},
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "請選擇調色板演算法,以桌布的顏色為基底。"
},
@@ -2360,12 +2549,18 @@
"Settings": {
"Settings": "設定"
},
"Setup": {
"Setup": ""
},
"Shell": {
"Shell": ""
},
"Shift+Del: Clear All • Esc: Close": {
"Shift+Del: Clear All • Esc: Close": "Shift+Del: 清除所有 • Esc: 關閉"
},
"Short": {
"Short": ""
},
"Shortcuts": {
"Shortcuts": ""
},
@@ -2405,6 +2600,9 @@
"Show Restart DMS": {
"Show Restart DMS": "顯示重新啟動 DMS"
},
"Show Seconds": {
"Show Seconds": ""
},
"Show Suspend": {
"Show Suspend": "顯示暫停"
},
@@ -2498,12 +2696,21 @@
"Size Offset": {
"Size Offset": "大小偏移"
},
"Sizing": {
"Sizing": ""
},
"Sort Alphabetically": {
"Sort Alphabetically": "按字母順序排序"
},
"Sorting & Layout": {
"Sorting & Layout": ""
},
"Sound Theme": {
"Sound Theme": "音效主題"
},
"Sounds": {
"Sounds": ""
},
"Spacer": {
"Spacer": "空白間隔"
},
@@ -2552,6 +2759,9 @@
"Support Development": {
"Support Development": "支援開發"
},
"Suppress notification popups while enabled": {
"Suppress notification popups while enabled": ""
},
"Surface": {
"Surface": "表面"
},
@@ -2591,6 +2801,9 @@
"System Monitoring:": {
"System Monitoring:": "系統監視器:"
},
"System Sounds": {
"System Sounds": ""
},
"System Tray": {
"System Tray": "系統匣"
},
@@ -2609,6 +2822,9 @@
"System notification area icons": {
"System notification area icons": "顯示常駐程式狀態圖示和系統通知"
},
"System sounds are not available. Install canberra-gtk-play for sound support.": {
"System sounds are not available. Install canberra-gtk-play for sound support.": ""
},
"System toast notifications": {
"System toast notifications": "系統快顯通知"
},
@@ -2657,6 +2873,9 @@
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "第三方插件由社群創建,不受 DankMaterialShell 官方支援。\\n\\n這些插件可能會帶來安全性和隱私風險 - 安裝後風險自負。"
},
"This bind is overridden by config.kdl": {
"This bind is overridden by config.kdl": ""
},
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": {
"This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics.": "此部件可防止 GPU 電源關閉,這會嚴重影響筆記型電腦的電池續航時間。不建議在配備混合顯示卡的筆記型電腦上使用此功能。"
},
@@ -2669,9 +2888,21 @@
"Time & Weather": {
"Time & Weather": "時間與天氣"
},
"Time Format": {
"Time Format": ""
},
"Timed Out": {
"Timed Out": "逾時"
},
"Timeout for critical priority notifications": {
"Timeout for critical priority notifications": ""
},
"Timeout for low priority notifications": {
"Timeout for low priority notifications": ""
},
"Timeout for normal priority notifications": {
"Timeout for normal priority notifications": ""
},
"Title": {
"Title": ""
},
@@ -2681,6 +2912,9 @@
"To update, run the following command:": {
"To update, run the following command:": "若要更新,請執行以下命令:"
},
"To use this DMS bind, remove or change the keybind in your config.kdl": {
"To use this DMS bind, remove or change the keybind in your config.kdl": ""
},
"Toast Messages": {
"Toast Messages": "快顯通知"
},
@@ -2720,12 +2954,21 @@
"Transition Effect": {
"Transition Effect": "切換動畫效果"
},
"Transparency": {
"Transparency": ""
},
"Turn off monitors after": {
"Turn off monitors after": "關閉螢幕之後"
},
"Type": {
"Type": ""
},
"Typography": {
"Typography": ""
},
"Typography & Motion": {
"Typography & Motion": ""
},
"Unavailable": {
"Unavailable": "不可用"
},
@@ -2867,6 +3110,9 @@
"Visual effect used when wallpaper changes": {
"Visual effect used when wallpaper changes": "桌布變更時所使用的視覺效果"
},
"Volume": {
"Volume": ""
},
"Volume Changed": {
"Volume Changed": "音量改變"
},
@@ -2969,6 +3215,12 @@
"Workspace Switcher": {
"Workspace Switcher": "工作區切換器"
},
"Workspaces": {
"Workspaces": ""
},
"Workspaces & Widgets": {
"Workspaces & Widgets": ""
},
"Yes": {
"Yes": "是"
},
@@ -2984,12 +3236,18 @@
"You have unsaved changes. Save before opening a file?": {
"You have unsaved changes. Save before opening a file?": "您有未儲存的變更。是否先保存再開檔案?"
},
"apps": {
"apps": ""
},
"custom theme file browser title": {
"Select Custom Theme": "選擇自訂主題"
},
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "選擇桌布"
},
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl exists but is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": {
"dms/binds.kdl is not included in config.kdl. Custom keybinds will not work until this is fixed.": ""
},
@@ -3005,18 +3263,27 @@
"events": {
"events": "活動"
},
"files": {
"files": ""
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl 不可用 - 鎖定整合需要 DMS 套接字連接"
},
"matugen not detected - dynamic theming unavailable": {
"matugen not detected - dynamic theming unavailable": "未偵測到 matugen - 動態主題不可用"
},
"minutes": {
"minutes": ""
},
"official": {
"official": "官方"
},
"profile image file browser title": {
"Select Profile Image": "選擇個人資料圖片"
},
"seconds": {
"seconds": ""
},
"settings window title": {
"Settings": "設定"
},
@@ -3029,6 +3296,15 @@
"wallpaper directory file browser title": {
"Select Wallpaper Directory": "選擇桌布目錄"
},
"wallpaper settings disable description": {
"Use an external wallpaper manager like swww, hyprpaper, or swaybg.": ""
},
"wallpaper settings disable toggle": {
"Disable Built-in Wallpapers": ""
},
"wallpaper settings external management": {
"External Wallpaper Management": ""
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "• 僅從受信任的來源安裝"
},

File diff suppressed because it is too large Load Diff