Merge branch 'main' into bluetooth-clean

This commit is contained in:
Danny
2026-01-04 22:01:54 +01:00
committed by GitHub
216 changed files with 10130 additions and 6009 deletions
+3 -1
View File
@@ -1,4 +1,6 @@
.qmlls.ini
.zed
.idea
.vscode
.vscode
*.code-workspace
RELEASE.md
+3 -2
View File
@@ -109,7 +109,7 @@
"name": "punctuation.definition",
"scope": "punctuation.definition.string.begin,punctuation.definition.string.end",
"settings": {
"foreground": "{{colors.secondary.default.hex}}"
"foreground": "{{colors.primary.default.hex}}"
}
},
{
@@ -1787,6 +1787,7 @@
"editorOverviewRuler.wordHighlightForeground": "{{colors.secondary.default.hex}}",
"editorOverviewRuler.wordHighlightStrongForeground": "{{colors.secondary.default.hex}}",
"editorRuler.foreground": "{{colors.outline_variant.default.hex}}",
"editorStickyScrollHover.background": "{{colors.surface_variant.default.hex}}",
"editorSuggestWidget.background": "{{colors.surface.default.hex}}",
"editorSuggestWidget.border": "{{colors.outline.default.hex}}",
"editorSuggestWidget.foreground": "{{colors.on_surface.default.hex}}",
@@ -1983,4 +1984,4 @@
"welcomePage.buttonHoverBackground": "{{colors.primary.default.hex}}20",
"widget.shadow": "{{colors.background.default.hex}}5c"
}
}
}
+1 -1
View File
@@ -88,7 +88,7 @@ body {
--bg-2: {{colors.surface_container_low.default.hex}}; /* dark buttons */
--bg-3: {{colors.surface_container.default.hex}}; /* spacing, secondary elements */
--bg-4: {{colors.surface.default.hex}}; /* main background color */
--hover: {{colors.surface_container_high.default.hex}}20; /* channels and buttons when hovered */
--hover: {{colors.on_surface.default.hex}}15; /* channels and buttons when hovered */
--active: {{colors.surface_container_highest.default.hex}}40; /* channels and buttons when clicked or selected */
--active-2: {{colors.surface.default.hex}}30; /* extra state for transparent buttons */
--message-hover: {{colors.surface_variant.default.hex}}40; /* messages when hovered */
+38 -33
View File
@@ -3,11 +3,6 @@
[mgr]
cwd = { fg = "{{colors.on_surface.default.hex}}" }
# Tab
tab_active = { fg = "{{colors.on_primary.default.hex}}", bg = "{{colors.primary.default.hex}}", bold = true }
tab_inactive = { fg = "{{colors.primary_container.default.hex}}", bg = "{{colors.on_primary_container.default.hex}}" }
tab_width = 1
# Find
find_keyword = { fg = "{{colors.error.default.hex}}", bold = true, italic = true, underline = true }
find_position = { fg = "{{colors.error.default.hex}}", bold = true, italic = true }
@@ -32,20 +27,9 @@ border_style = { fg = "{{colors.primary.default.hex}}" }
# : Status [[[
[status]
separator_style = { bg = "{{colors.on_primary.default.hex}}", fg = "#F4A261" }
[mode]
# Mode
normal_main = { bg = "{{colors.primary.default.hex}}", fg = "{{colors.on_primary.default.hex}}", bold = true }
normal_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
# Select mode
select_main = { bg = "{{colors.secondary.default.hex}}", fg = "{{colors.on_secondary.default.hex}}", bold = true }
select_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
# Unset mode
unset_main = { bg = "{{colors.tertiary.default.hex}}", fg = "{{colors.on_tertiary.default.hex}}", bold = true }
unset_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
overall = { fg = "{{colors.primary.default.hex}}" }
sep_left = { open = "", close = "" }
sep_right = { open = "", close = "" }
# Progress
progress_label = { bold = true }
@@ -53,20 +37,27 @@ progress_normal = { fg = "{{colors.primary.default.hex}}", bg = "{{colors.surfac
progress_error = { fg = "{{colors.error.default.hex}}", bg = "{{colors.surface.default.hex}}" }
# Permissions
permissions_t = { fg = "{{colors.secondary.default.hex}}" }
permissions_w = { fg = "{{colors.tertiary.default.hex}}" }
permissions_x = { fg = "{{colors.error.default.hex}}" }
permissions_r = { fg = "{{colors.tertiary_container.default.hex}}" }
permissions_s = { fg = "{{colors.primary_container.default.hex}}" }
perm_type = { fg = "{{colors.secondary.default.hex}}" }
perm_write = { fg = "{{colors.tertiary.default.hex}}" }
perm_exec = { fg = "{{colors.error.default.hex}}" }
perm_read = { fg = "{{colors.tertiary_container.default.hex}}" }
perm_sep = { fg = "{{colors.primary_container.default.hex}}" }
# : ]]]
# : Select [[[
# : Mode [[[
[select]
border = { fg = "{{colors.primary.default.hex}}" }
active = { fg = "{{colors.tertiary.default.hex}}", bold = true }
[mode]
normal_main = { bg = "{{colors.primary.default.hex}}", fg = "{{colors.on_primary.default.hex}}", bold = true }
normal_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
select_main = { bg = "{{colors.secondary.default.hex}}", fg = "{{colors.on_secondary.default.hex}}", bold = true }
select_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
unset_main = { bg = "{{colors.tertiary.default.hex}}", fg = "{{colors.on_tertiary.default.hex}}", bold = true }
unset_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" }
# : ]]]
@@ -75,10 +66,13 @@ active = { fg = "{{colors.tertiary.default.hex}}", bold = true }
[input]
border = { fg = "{{colors.primary.default.hex}}" }
title = {}
value = { fg = "{{colors.on_surface.default.hex}}" }
selected = { reversed = true }
# : ]]]
# : Tabs [[[
[tabs]
@@ -91,7 +85,7 @@ sep_inner = { open = "[", close = "]" }
# : Completion [[[
[completion]
[cmp]
border = { fg = "{{colors.primary.default.hex}}", bg = "{{colors.on_primary.default.hex}}" }
# : ]]]
@@ -120,12 +114,23 @@ separator_style = { fg = "{{colors.on_surface.default.hex}}" }
# : ]]]
# : Spotter [[[
[spot]
border = { fg = "{{colors.primary.default.hex}}" }
title = { fg = "{{colors.primary.default.hex}}" }
tbl_col = { fg = "{{colors.on_surface.default.hex}}" }
tbl_cell = { fg = "{{colors.on_surface.default.hex}}", bg = "{{colors.surface.default.hex}}" }
# : ]]]
# : Help [[[
[help]
on = { fg = "{{colors.on_surface.default.hex}}" }
run = { fg = "{{colors.on_surface.default.hex}}" }
hovered = { reversed = true, bold = true }
footer = { fg = "{{colors.on_secondary.default.hex}}", bg = "{{colors.secondary.default.hex}}" }
# : ]]]
@@ -159,12 +164,12 @@ rules = [
{ mime = "application/{pdf,doc,rtf}", fg = "#a6e3a1" },
# Special files
{ name = "*", is = "orphan", bg = "{{colors.error_container.default.hex}}" },
{ name = "*", is = "exec", fg = "{{colors.on_error_container.default.hex}}" },
{ mime = "*", is = "orphan", fg = "{{colors.on_error_container.default.hex}}", bg = "{{colors.error_container.default.hex}}" },
{ mime = "application/*exec*", fg = "{{colors.error.default.hex}}" },
# Fallback
{ name = "*", fg = "{{colors.on_surface.default.hex}}" },
{ name = "*/", fg = "{{colors.primary.default.hex}}" },
{ url = "*", fg = "{{colors.on_surface.default.hex}}" },
{ url = "*/", fg = "{{colors.primary.default.hex}}" },
]
# : ]]]
@@ -0,0 +1,121 @@
* {
--base: {{colors.surface_container_lowest.default.hex}};
--surface: {{colors.surface_container_low.default.hex}};
--overlay: {{colors.surface_container.default.hex}};
--muted: {{colors.surface_container_high.default.hex}};
--subtle: {{colors.surface_container_highest.default.hex}};
--text: {{colors.on_surface.default.hex}};
--secondary: {{colors.secondary.default.hex}};
--primary: {{colors.primary.default.hex}};
--on_primary: {{colors.on_primary.default.hex}};
}
:root {
/* Core Color Palette Overrides */
--zen-colors-primary: var(--base) !important;
--zen-primary-color: var(--base) !important;
--zen-colors-secondary: var(--surface) !important;
--zen-colors-tertiary: var(--overlay) !important;
--zen-colors-border: var(--primary) !important;
/* Backgrounds */
--toolbar-bgcolor: var(--base) !important;
--newtab-background-color: var(--overlay) !important;
--zen-themed-toolbar-bg: var(--base) !important;
--zen-main-browser-background: var(--base) !important;
--toolbox-bgcolor-inactive: var(--base) !important;
/* Text & Icons */
--lwt-text-color: var(--text) !important;
--toolbarbutton-icon-fill: var(--primary) !important;
--toolbar-field-color: var(--text) !important;
--toolbar-field-focus-color: var(--text) !important;
--toolbar-color: var(--text) !important;
--tab-selected-textcolor: var(--primary) !important;
--newtab-text-primary-color: var(--text) !important;
/* Popups & Menus */
--arrowpanel-color: var(--text) !important;
--arrowpanel-background: var(--overlay) !important;
/* Sidebar Stuff */
--sidebar-text-color: var(--text) !important;
--lwt-sidebar-text-color: var(--text) !important;
--lwt-sidebar-background-color: var(--base) !important;
/* --- Tab Selection --- */
--tab-selected-textcolor: var(--primary) !important;
}
/* Element Specific Overrides */
#permissions-granted-icon {
color: var(--base) !important;
}
.sidebar-placesTree {
background-color: var(--surface) !important;
}
#zen-workspaces-button {
background-color: var(--surface) !important;
}
#urlbar-background {
background-color: var(--surface) !important;
}
.tab-background[selected=""] {
background: var(--overlay) !important;
}
.content-shortcuts {
background-color: var(--surface) !important;
border-color: var(--secondary) !important;
}
.urlbarView-url {
color: var(--primary) !important;
}
#zenEditBookmarkPanelFaviconContainer {
background: var(--base) !important;
}
#zen-toast-container {
color: var(--primary) !important;
}
toolbar .toolbarbutton-1 {
&:not([disabled]) {
&:is([open], [checked]) > :is(
.toolbarbutton-icon,
.toolbarbutton-text,
.toolbarbutton-badge-stack
) {
fill: var(--base);
}
}
}
#TabsToolbar {
background-color: var(--base) !important;
}
hbox#titlebar {
background-color: var(--base) !important;
}
#zen-appcontent-navbar-container {
background-color: var(--base) !important;
}
/* Zen toast/indicator contrast visibility issue fix */
#zen-toast-container {
color: var(--primary) !important;
}
/* Pane UI button visibility issue fix */
#PanelUI-menu-button[open] .toolbarbutton-icon {
fill: var(--primary) !important;
}
@@ -0,0 +1,87 @@
/* Common variables affecting all pages */
@-moz-document url-prefix("about:") {
:root {
--in-content-page-color: {{colors.secondary.default.hex}} !important;
--color-accent-primary: {{colors.primary.default.hex}} !important;
/* --color-accent-primary-hover: rgb(249, 217, 240) !important;
--color-accent-primary-active: rgb(245, 195, 219) !important; */
background-color: {{colors.surface_container.default.hex}} !important;
--in-content-page-background: {{colors.surface_container.default.hex}} !important;
}
}
/* Variables and styles specific to about:newtab and about:home */
@-moz-document url("about:newtab"), url("about:home") {
:root {
--newtab-background-color: {{colors.surface_container.default.hex}} !important;
--newtab-background-color-secondary: {{colors.surface_container_high.default.hex}} !important;
--newtab-element-hover-color: {{colors.surface_container_high.default.hex}} !important;
--newtab-text-primary-color: {{colors.secondary.default.hex}} !important;
--newtab-wordmark-color: {{colors.secondary.default.hex}} !important;
--newtab-primary-action-background: {{colors.primary.default.hex}} !important;
}
.icon {
color: {{colors.primary.default.hex}} !important;
}
.card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title {
color: {{colors.primary.default.hex}} !important;
}
}
/* Variables and styles specific to about:preferences */
@-moz-document url-prefix("about:preferences") {
:root {
--zen-colors-tertiary: {{colors.surface_container_low.default.hex}} !important;
--in-content-text-color: {{colors.secondary.default.hex}} !important;
--link-color: {{colors.primary.default.hex}} !important;
/* --link-color-hover: rgb(249, 217, 240) !important; */
--zen-colors-primary: {{colors.surface_container_high.default.hex}} !important;
--in-content-box-background: {{colors.surface_container_high.default.hex}} !important;
--zen-primary-color: {{colors.primary.default.hex}} !important;
}
groupbox , moz-card{
background: {{colors.surface_container.default.hex}} !important;
}
button,
groupbox menulist {
background: {{colors.surface_container_high.default.hex}} !important;
color: {{colors.secondary.default.hex}} !important;
}
.main-content {
background-color: {{colors.surface_container_lowest.default.hex}} !important;
}
}
/* Variables and styles specific to about:addons */
@-moz-document url-prefix("about:addons") {
:root {
--zen-dark-color-mix-base: {{colors.surface_container_low.default.hex}} !important;
--background-color-box: {{colors.surface_container.default.hex}} !important;
}
}
/* Variables and styles specific to about:protections */
@-moz-document url-prefix("about:protections") {
:root {
--zen-primary-color: {{colors.surface_container.default.hex}} !important;
--in-content-primary-button-text-color-hover: {{colors.secondary.default.hex}} !important;
--in-content-primary-button-background: {{colors.surface_container.default.hex}} !important;
--in-content-primary-button-text-color: {{colors.secondary.default.hex}} !important;
}
.card {
background-color: {{colors.surface_container_high.default.hex}} !important;
}
}
/* Pane UI button visibility issue fix */
#PanelUI-menu-button[open] .toolbarbutton-icon {
fill: {{colors.primary.default.hex}} !important;
}
}
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Wenn der Ausgabetext diesem Wert entspricht, wird die Schaltfläche eingeklappt.",
"label": "Einklappbedingung"
},
"color-selection": {
"description": "Designfarben auf Symbol und Text anwenden.",
"label": "Farbe auswählen"
},
"display-command-output": {
"description": "Befehl eingeben, der in regelmäßigen Abständen ausgeführt wird. Die erste Zeile seiner Ausgabe wird als Text angezeigt.",
"label": "Befehlsausgabe anzeigen",
"stream-description": "Geben Sie einen Befehl ein, der kontinuierlich ausgeführt werden soll."
},
"dynamic-text": "Dynamischer Text",
"enable-colorization": {
"description": "Färbung für das benutzerdefinierte Schaltflächensymbol und den Text aktivieren, Designfarben anwenden.",
"label": "Färbung aktivieren"
},
"hide-mode": {
"alwaysExpanded": "Immer erweitert",
"description": "Steuert die Sichtbarkeit des Widgets, wenn der Befehl keine Ausgabe hat.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Wählen Sie, wie dieser Wert angezeigt werden soll.",
"label": "Anzeigemodus"
},
"show-icon": {
"description": "Das Tastaturlayout-Symbol anzeigen.",
"label": "Symbol anzeigen"
}
},
"launcher": {
"use-primary-color": {
"description": "Wenn aktiviert, wird die Primärfarbe zur Hervorhebung verwendet.",
"label": "Primärfarbe verwenden"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Zeige GPU-Temperaturwerte an, falls verfügbar.",
"label": "GPU-Temperatur"
},
"load-average": {
"description": "Systemlastdurchschnitt anzeigen.",
"label": "Lastdurchschnitt"
},
"memory-percentage": {
"description": "Speicherverbrauch als Prozentsatz statt absolute Werte anzeigen.",
"label": "Speicher als Prozentsatz"
@@ -481,6 +503,7 @@
"device-address": "Geräteadresse",
"disabled": "Bluetooth ist deaktiviert",
"disconnect": "Trennen",
"disconnecting": "Verbindung wird getrennt...",
"discoverable": "Sichtbar",
"enable-message": "Aktivieren Sie Bluetooth, um verfügbare Geräte zu sehen.",
"info": "Info",
@@ -494,6 +517,14 @@
"refresh-devices": "Geräte aktualisieren",
"scanning": "Scannen nach Geräten...",
"signal": "Signal",
"signal-text": {
"excellent": "Signal: Ausgezeichnet",
"fair": "Signal: Schwach",
"good": "Signal: Gut",
"poor": "Signal: Schlecht",
"unknown": "Signal: Unbekannt",
"very-poor": "Signal: Sehr schlecht"
},
"title": "Bluetooth",
"trusted": "Vertrauenswürdig",
"unpair": "Entkoppeln"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Unserem Discord beitreten",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Feedback geben"
},
"empty": "Es sind noch keine Versionshinweise verfügbar.",
"highlight-title": "Highlights",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Bluetooth aktivieren",
"enable-dnd": "'Nicht stören' aktivieren",
"enable-wifi": "WLAN aktivieren",
"launcher-settings": "Launcher-Einstellungen",
"lower-to-bottom": "Senken bis zum Anschlag / Ganz nach unten senken",
"next": "Nächste/r/s",
"open-calendar": "Kalender öffnen",
@@ -631,7 +664,35 @@
"webbrowser": "Webbrowser"
},
"delete": "Löschen",
"no-results": "Keine Ergebnisse gefunden",
"pin": "Anheften",
"providers": {
"applications": "Anwendungen",
"calculator": "Rechner",
"calculator-deprecated": "Der Befehl >calc ist veraltet und wird bald entfernt. Bitte geben Sie stattdessen mathematische Ausdrücke direkt in die Suche ein.",
"calculator-description": "Rechner — mathematische Ausdrücke auswerten",
"calculator-enter-expression": "Mathematischen Ausdruck eingeben",
"calculator-error": "Fehler",
"calculator-name": "Rechner",
"clipboard": "Zwischenablageverlauf",
"clipboard-clear-description": "Gesamten Zwischenablageverlauf löschen",
"clipboard-clear-description-full": "Alle Elemente aus dem Zwischenablageverlauf entfernen",
"clipboard-clear-history": "Zwischenablageverlauf löschen",
"clipboard-delete": "Zwischenablageeintrag löschen",
"clipboard-history-disabled": "Zwischenablageverlauf deaktiviert",
"clipboard-history-disabled-description": "Zwischenablageverlauf in den Einstellungen aktivieren oder cliphist installieren",
"clipboard-loading": "Lade Zwischenablageverlauf...",
"clipboard-loading-description": "Bitte warten",
"clipboard-search-description": "Zwischenablageverlauf durchsuchen",
"command": "Befehl",
"command-description": "Shell-Befehle ausführen",
"command-name": "Befehl",
"emoji": "Emoji-Auswahl",
"emoji-loading": "Lade Emojis...",
"emoji-loading-description": "Bitte warten",
"emoji-no-recent": "Noch keine kürzlich verwendeten Emojis.",
"emoji-search-description": "Emojis suchen und kopieren"
},
"unpin": "Lösen"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "System-Ausgabe + Mikrofon-Eingabe",
"microphone-input": "Mikrofon-Eingabe",
"none": "Kein Audio",
"system-output": "System-Ausgabe"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Beim Hover Scrollen",
"never": "Nie Scrollen"
},
"session-menu-grid-layout": {
"grid": "Raster",
"single-row": "Einzelne Reihe"
},
"settings-panel-mode": {
"attached": "Panel an der Leiste angeheftet",
"centered": "Zentriertes Feld",
@@ -823,31 +889,6 @@
"select": "Auswählen",
"test": "Test"
},
"plugins": {
"applications": "Anwendungen",
"calculator": "Rechner",
"calculator-description": "Rechner — mathematische Ausdrücke auswerten",
"calculator-enter-expression": "Mathematischen Ausdruck eingeben",
"calculator-error": "Fehler",
"calculator-name": "Rechner",
"clipboard": "Zwischenablageverlauf",
"clipboard-clear-description": "Gesamten Zwischenablageverlauf löschen",
"clipboard-clear-description-full": "Alle Elemente aus dem Zwischenablageverlauf entfernen",
"clipboard-clear-history": "Zwischenablageverlauf löschen",
"clipboard-delete": "Zwischenablageeintrag löschen",
"clipboard-history-disabled": "Zwischenablageverlauf deaktiviert",
"clipboard-history-disabled-description": "Zwischenablageverlauf in den Einstellungen aktivieren oder cliphist installieren",
"clipboard-loading": "Lade Zwischenablageverlauf...",
"clipboard-loading-description": "Bitte warten",
"clipboard-search-description": "Zwischenablageverlauf durchsuchen",
"command": "Befehl",
"command-description": "Shell-Befehle ausführen",
"command-name": "Befehl",
"emoji": "Emoji-Auswahl",
"emoji-loading": "Lade Emojis...",
"emoji-loading-description": "Bitte warten",
"emoji-search-description": "Emojis suchen und kopieren"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Leitet Farben ab, die eng mit dem zugrunde liegenden Bild übereinstimmen.",
"scheme-expressive": "Lebendige Farbpalette mit verspielter Sättigung.",
"scheme-fidelity": "Farbtreue Palette, die die Originalfarbtöne beibehält.",
"scheme-fruit-salad": "Farbenfroher Mix aus leuchtenden, kontrastreichen Akzenten.",
"scheme-monochrome": "Minimale Farbpalette, die auf einem einzigen Farbton basiert.",
"scheme-neutral": "Gedämpfte Farbpalette mit dezenten und beruhigenden Tönen.",
"scheme-rainbow": "Vielfältige Palette, die das gesamte Spektrum abdeckt.",
"scheme-tonal-spot": "Ausgewogene Farbpalette mit gezielten Akzenten."
},
"description": "Wählen Sie die Farbschema-Generierungsmethode, die Matugen verwenden soll, um Farben aus Ihrem Hintergrundbild zu erstellen.",
"label": "Matugen-Schema-Typ"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Schreibe {filepath} und lade neu"
},
"zen-browser": {
"description": "Schreibe {Dateipfad}; kopiere in die chrome/userChrome.css deines Zen-Profils."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Befehl, der beim Klicken auf die Schaltfläche \"Annotieren\" im Zwischenablageverlauf ausgeführt wird. Das Bild wird an diesen Befehl weitergeleitet.",
"label": "Annotationstool",
"placeholder": "gradia, satty -f -"
},
"clip-preview": {
"description": "Zeige eine Vorschau des Inhalts der Zwischenablage an, wenn der Befehl >clip verwendet wird.",
"label": "Clip-Vorschau aktivieren"
@@ -1826,6 +1866,10 @@
"description": "Kategorienregisterkarten zum Filtern von Anwendungen anzeigen.",
"label": "Kategorien anzeigen"
},
"show-icon-background": {
"description": "Zeige einen abgerundeten Rechteck-Hintergrund hinter Icons.",
"label": "Symbolhintergrund anzeigen"
},
"sort-by-usage": {
"description": "Wenn aktiviert, erscheinen häufig gestartete Apps zuerst in der Liste.",
"label": "Nach Häufigkeit sortieren"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Bluetooth-Verwaltung aktivieren.",
"label": "Bluetooth aktivieren"
"label": "Bluetooth aktivieren",
"rssi-polling": {
"description": "Periodisch RSSI für verbundene Geräte über bluetoothctl abfragen. Ist möglicherweise nicht für alle Geräte verfügbar; verbraucht bei Aktivierung minimale Ressourcen.",
"label": "Bluetooth-Signalabfrage"
}
},
"section": {
"description": "WLAN- und Bluetooth-Verbindungen verwalten."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Überprüfen Sie Ihre Plugin-Quellen oder aktualisieren Sie die Liste.",
"no-plugins-label": "Keine Plugins verfügbar"
},
"collision": {
"already-installed": "Dieses Plugin ist bereits installiert.",
"custom-version-exists": "Eine benutzerdefinierte Version von \"{source}\" ist bereits installiert.",
"official-version-exists": "Die offizielle Version dieses Plugins ist bereits installiert."
},
"filter": {
"all": "Alle",
"downloaded": "Heruntergeladen",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Keine Plugins installiert"
},
"installing": "{Plugin} wird installiert...",
"open-plugins-tab": "Plugin-Einstellungen öffnen",
"plugin-settings-title": "{plugin} Einstellungen",
"refresh": {
"refreshing": "Aktualisiere Plugin-Liste...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Plugin nicht geladen",
"settings-saved": "Plugin-Einstellungen gespeichert",
"source": {
"custom": "Benutzerdefinierte Quelle",
"official": "Offiziell"
},
"sources": {
"add-custom": "Benutzerdefiniertes Repository hinzufügen",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Alle aktualisieren ({count})",
"update-all-success": "Alle Plugins wurden erfolgreich aktualisiert.",
"update-available": "{count} Plugin-Update(s) verfügbar",
"update-available_plural": "{count} Plugin-Aktualisierungen verfügbar",
"update-error": "Fehler beim Aktualisieren des Plugins: {plugin}: {error}",
"update-incompatible": "Benötigt Noctalia v{version} oder höher",
"update-pending": "v{aktuell} → v{neu} (benötigt Noctalia v{erforderlich})",
"update-success": "{plugin} wurde auf v{version} aktualisiert",
"update-version": "v{aktuell} → v{neu}",
"updating": "Aktualisierung läuft..."
@@ -2339,6 +2399,10 @@
"label": "Allgemein"
}
},
"large-buttons-layout": {
"description": "Wählen Sie, wie die Sitzungsmenü-Schaltflächen angezeigt werden.",
"label": "Layout mit großen Schaltflächen"
},
"large-buttons-style": {
"description": "Das Sitzungsmenü mit großen Schaltflächen in einem Rasterlayout anzeigen.",
"label": "Stil: Große Schaltflächen"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Hervorhebungsfarben"
},
"load-average-section": {
"label": "Lastdurchschnitt"
},
"memory-section": {
"label": "Speicherverbrauch"
},
@@ -2438,6 +2505,10 @@
"label": "Animationsgeschwindigkeit",
"reset": "Animationsgeschwindigkeit zurücksetzen"
},
"box-border": {
"description": "Zeigt eine Umrandung um Inhaltsbereiche an.",
"label": "Containerumriss"
},
"box-border-radius": {
"description": "Passt die Eckenrundung wichtiger Layoutbereiche an, wie z. B. Seitenleisten, Karten und Inhaltsbereiche.",
"label": "Behälterradius",
@@ -2564,8 +2635,8 @@
"tooltip": "Hintergrundbild-Ordner"
},
"hide-wallpaper-filenames": {
"description": "Hintergrundbilddateinamen im Auswahlmenü ausblenden.",
"label": "Dateinamen ausblenden"
"tooltip-hide": "Dateinamen ausblenden",
"tooltip-show": "Dateinamen anzeigen"
},
"monitor-specific": {
"description": "Unterschiedlichen Hintergrundbild-Ordner für jeden Monitor festlegen.",
@@ -2648,6 +2719,7 @@
"download": "Herunterladen",
"download-speed": "Download-Geschwindigkeit",
"gpu-temp": "GPU-Temperatur",
"load-average": "Lastdurchschnitt",
"memory": "Arbeitsspeicher",
"title": "Systemüberwachung",
"upload": "Hochladen",
@@ -2664,6 +2736,7 @@
"low-desc": "Batterie ist bei {percent}%. Bitte schließen Sie das Ladegerät an."
},
"bluetooth": {
"address-copied": "Adresse in die Zwischenablage kopiert",
"confirm-code": "Bestätigungscode {value} auf dem anderen Gerät bestätigen.",
"connect-failed": "Verbindung mit dem Gerät fehlgeschlagen",
"disabled": "Deaktiviert",
@@ -2706,7 +2779,8 @@
"enabled": "Aktiviert"
},
"keyboard-layout": {
"changed": "Tastaturlayout geändert zu {layout}"
"changed": "Tastaturlayout geändert zu {layout}",
"title": "Tastatur"
},
"kofi": {
"opened": "Ko-fi-Seite in Ihrem Browser geöffnet"
@@ -2780,6 +2854,7 @@
"close": "Schließen",
"collapse": "Seitenleiste einklappen",
"connect-disconnect-devices": "Bluetooth-Gerät",
"copy-address": "Adresse kopieren",
"delete-notification": "Benachrichtigung löschen",
"disable-keep-awake": "Wach halten",
"do-not-disturb-disabled": "Nicht stören",
@@ -2798,10 +2873,12 @@
"list-view": "Listenansicht",
"manage-vpn": "VPN-Verbindungen",
"manage-wifi": "WLAN",
"max-widgets-reached": "Maximale Anzahl an Widgets erreicht",
"microphone-volume-at": "Mikrofonlautstärke: {volume}%",
"move-to-center-section": "Mittlere Sektion",
"move-to-left-section": "Linke Sektion",
"move-to-right-section": "Rechte Sektion",
"move-to-section": "Gehe zu {section}",
"mute": "Stummschalten",
"next-media": "Nächster Titel",
"next-month": "Nächster Monat",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Nachtlicht (nicht verfügbar)",
"noctalia-performance-disabled": "Noctalia-Leistungsmodus",
"noctalia-performance-enabled": "Noctalia-Leistungsmodus",
"open-annotation-tool": "Mit dem Anmerkungswerkzeug öffnen",
"open-control-center": "Kontrollzentrum",
"open-notification-history-disable-dnd": "Benachrichtigungsverlauf",
"open-notification-history-enable-dnd": "Benachrichtigungsverlauf",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Ein API-Schlüssel ist erforderlich, um auf NSFW-Inhalte zuzugreifen.",
"label": "API-Schlüssel",
"managed-by-env": "Verwaltet über die Umgebungsvariable NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Gib deinen Wallhaven API-Schlüssel ein"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Suchen:",
"solid-color": {
"tooltip": "Einfarbiger Hintergrund"
},
"sorting": {
"date_added": "Hinzugefügt am",
"favorites": "Favoriten",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Gewitter",
"unknown": "Unbekannt"
},
"widget": {
"file-picker": {
"title": "Datei auswählen"
}
},
"widgets": {
"color-picker": {
"apply": "Anwenden",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Aktion erforderlich",
"available-interfaces": "Verfügbare Schnittstellen",
"available-networks": "Verfügbare Netzwerke",
"connect": "Verbinden",
"connected": "Verbunden",
"disabled": "WLAN ist deaktiviert",
"disconnect": "Trennen",
"disconnected": "Getrennt",
"disconnecting": "Verbindung wird getrennt...",
"dns": "DNS",
"enable-message": "Aktivieren Sie WLAN, um verfügbare Netzwerke zu sehen.",
@@ -3042,12 +3131,15 @@
"frequency": "Frequenz",
"gateway": "Gateway: Gateway",
"info": "Info",
"interface": "Netzwerkschnittstelle",
"internet": "Internet",
"internet-connected": "Mit dem Internet verbunden",
"internet-limited": "Kein Internet",
"internet-status": "Internetstatus",
"ipv4": "IPv4",
"known-networks": "Bekannte Netzwerke",
"link-speed": "Verbindungsgeschwindigkeit",
"no-ethernet-devices": "Keine Ethernet-Geräte erkannt",
"no-networks": "Keine Netzwerke gefunden",
"password": "Passwort",
"saved": "Gespeichert",
+167 -90
View File
@@ -142,12 +142,20 @@
"description": "If the output text matches this value, the button will collapse.",
"label": "Collapse condition"
},
"color-selection": {
"description": "Apply theme colors to icon and text.",
"label": "Select Color"
},
"display-command-output": {
"description": "Enter a command to run at a regular interval. The first line of its output will be displayed as text.",
"label": "Display command output",
"stream-description": "Enter a command to run continuously."
},
"dynamic-text": "Dynamic text",
"enable-colorization": {
"description": "Enable colorization for the custom button icon and text, applying theme colors.",
"label": "Enable Colorization"
},
"hide-mode": {
"alwaysExpanded": "Always expanded",
"description": "Controls widget visibility when the command has no output.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Choose how you'd like this value to appear.",
"label": "Display mode"
},
"show-icon": {
"description": "Display the keyboard layout icon.",
"label": "Show icon"
}
},
"launcher": {
"use-primary-color": {
"description": "When enabled, this applies the primary color for emphasis.",
"label": "Use primary color"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Show GPU temperature readings if available.",
"label": "GPU temperature"
},
"load-average": {
"description": "Display system load average.",
"label": "Load average"
},
"memory-percentage": {
"description": "Show memory usage as a percentage instead of absolute values.",
"label": "Memory as percentage"
@@ -478,10 +500,10 @@
"connect": "Connect",
"connected-devices": "Connected devices",
"connecting": "Connecting...",
"disconnecting": "Disconnecting...",
"device-address": "Device address",
"disabled": "Bluetooth is disabled",
"disconnect": "Disconnect",
"disconnecting": "Disconnecting...",
"discoverable": "Discoverable",
"enable-message": "Enable Bluetooth to see available devices.",
"info": "Info",
@@ -496,11 +518,11 @@
"scanning": "Scanning for devices...",
"signal": "Signal",
"signal-text": {
"unknown": "Signal: Unknown",
"excellent": "Signal: Excellent",
"good": "Signal: Good",
"fair": "Signal: Fair",
"good": "Signal: Good",
"poor": "Signal: Poor",
"unknown": "Signal: Unknown",
"very-poor": "Signal: Very poor"
},
"title": "Bluetooth",
@@ -538,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Join our Discord",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Give feedback"
},
"empty": "Release notes are not available yet.",
"highlight-title": "Highlights",
@@ -582,6 +605,7 @@
"enable-bluetooth": "Enable Bluetooth",
"enable-dnd": "Enable Do Not Disturb",
"enable-wifi": "Enable Wi-Fi",
"launcher-settings": "Launcher settings",
"lower-to-bottom": "Lower to bottom",
"next": "Next",
"open-calendar": "Open calendar",
@@ -640,7 +664,35 @@
"webbrowser": "Web Browser"
},
"delete": "Delete",
"no-results": "No results found",
"pin": "Pin",
"providers": {
"applications": "Applications",
"calculator": "Calculator",
"calculator-deprecated": "The >calc command is deprecated and will be removed soon. Please type math expressions directly in search instead.",
"calculator-description": "Calculator — evaluate mathematical expressions",
"calculator-enter-expression": "Enter a mathematical expression",
"calculator-error": "Error",
"calculator-name": "Calculator",
"clipboard": "Clipboard history",
"clipboard-clear-description": "Clear all clipboard history",
"clipboard-clear-description-full": "Remove all items from clipboard history",
"clipboard-clear-history": "Clear clipboard history",
"clipboard-delete": "Delete clipboard entry",
"clipboard-history-disabled": "Clipboard history disabled",
"clipboard-history-disabled-description": "Enable clipboard history in settings or install cliphist",
"clipboard-loading": "Loading clipboard history...",
"clipboard-loading-description": "Please wait",
"clipboard-search-description": "Search clipboard history",
"command": "Command",
"command-description": "Run shell commands",
"command-name": "Command",
"emoji": "Emoji picker",
"emoji-loading": "Loading emojis...",
"emoji-loading-description": "Please wait",
"emoji-no-recent": "No recent emojis yet",
"emoji-search-description": "Search and copy emojis"
},
"unpin": "Unpin"
},
"lock-screen": {
@@ -761,6 +813,7 @@
"audio-sources": {
"both": "System output + microphone input",
"microphone-input": "Microphone input",
"none": "No audio",
"system-output": "System output"
},
"color-range": {
@@ -783,6 +836,10 @@
"hover": "Scroll on hover",
"never": "Never scroll"
},
"session-menu-grid-layout": {
"grid": "Grid",
"single-row": "Single Row"
},
"settings-panel-mode": {
"attached": "Panel attached to bar",
"centered": "Centered panel",
@@ -832,31 +889,6 @@
"select": "Select",
"test": "Test"
},
"plugins": {
"applications": "Applications",
"calculator": "Calculator",
"calculator-description": "Calculator — evaluate mathematical expressions",
"calculator-enter-expression": "Enter a mathematical expression",
"calculator-error": "Error",
"calculator-name": "Calculator",
"clipboard": "Clipboard history",
"clipboard-clear-description": "Clear all clipboard history",
"clipboard-clear-description-full": "Remove all items from clipboard history",
"clipboard-clear-history": "Clear clipboard history",
"clipboard-delete": "Delete clipboard entry",
"clipboard-history-disabled": "Clipboard history disabled",
"clipboard-history-disabled-description": "Enable clipboard history in settings or install cliphist",
"clipboard-loading": "Loading clipboard history...",
"clipboard-loading-description": "Please wait",
"clipboard-search-description": "Search clipboard history",
"command": "Command",
"command-description": "Run shell commands",
"command-name": "Command",
"emoji": "Emoji picker",
"emoji-loading": "Loading emojis...",
"emoji-loading-description": "Please wait",
"emoji-search-description": "Search and copy emojis"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1134,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Derives colors that closely match the underlying image.",
"scheme-expressive": "Vibrant palette with playful saturation.",
"scheme-fidelity": "High-fidelity palette that preserves source hues.",
"scheme-fruit-salad": "Colorful mix of bright contrasting accents.",
"scheme-monochrome": "Minimal palette built around a single hue.",
"scheme-neutral": "Muted palette with subdued and calming tones.",
"scheme-rainbow": "Diverse palette spanning the full spectrum.",
"scheme-tonal-spot": "Balanced palette with focused accents."
},
"description": "Choose the color scheme generation method that Matugen will use to create colors from your wallpaper.",
"label": "Matugen scheme type"
},
"section": {
@@ -1277,6 +1300,9 @@
},
"zed": {
"description": "Write {filepath} and reload"
},
"zen-browser": {
"description": "Write {filepath}; copy into your Zen profile's chrome/userChrome.css"
}
},
"section": {
@@ -1635,7 +1661,7 @@
"label": "Dock size"
},
"inactive-indicators": {
"description": "Display indicatator pills for all apps, not just the currently active one.",
"description": "Display indicator pills for all apps, not just the currently active one.",
"label": "Running Indicators"
},
"pinned-static": {
@@ -1795,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Command to run when clicking the annotate button in clipboard history, The image will be piped to this command.",
"label": "Annotation tool",
"placeholder": "e.g. 'gradia', 'satty -f -'"
},
"clip-preview": {
"description": "Show a preview of the clipboard content when using the >clip command.",
"label": "Enable clip preview"
@@ -1835,6 +1866,10 @@
"description": "Show category tabs for filtering applications.",
"label": "Show categories"
},
"show-icon-background": {
"description": "Show a rounded rectangle background behind icons.",
"label": "Show icon background"
},
"sort-by-usage": {
"description": "When enabled, frequently launched apps appear first in the list.",
"label": "Sort by most used"
@@ -1951,8 +1986,8 @@
"description": "Activate Bluetooth management.",
"label": "Enable Bluetooth",
"rssi-polling": {
"label": "Bluetooth signal polling",
"description": "Periodically sample RSSI for connected devices via bluetoothctl. May not be available for all devices; uses minimal resources when enabled."
"description": "Periodically sample RSSI for connected devices via bluetoothctl. May not be available for all devices; uses minimal resources when enabled.",
"label": "Bluetooth signal polling"
}
},
"section": {
@@ -2184,6 +2219,11 @@
"no-plugins-description": "Check your plugin sources or refresh the list.",
"no-plugins-label": "No plugins available"
},
"collision": {
"already-installed": "This plugin is already installed",
"custom-version-exists": "A custom version from \"{source}\" is already installed",
"official-version-exists": "The official version of this plugin is already installed"
},
"filter": {
"all": "All",
"downloaded": "Downloaded",
@@ -2204,6 +2244,7 @@
"no-plugins-label": "No plugins installed"
},
"installing": "Installing {plugin}...",
"open-plugins-tab": "Open plugins settings",
"plugin-settings-title": "{plugin} Settings",
"refresh": {
"refreshing": "Refreshing plugins list...",
@@ -2212,16 +2253,20 @@
"settings": {
"tooltip": "Plugin settings"
},
"settings-error-not-loaded": "Plugin not loaded",
"settings-saved": "Plugin settings saved",
"settings-error-not-loaded": "Plugin not loaded.",
"settings-saved": "Plugin settings saved.",
"source": {
"custom": "Custom source",
"official": "Official"
},
"sources": {
"add-custom": "Add custom repository",
"add-dialog": {
"description": "Add a GitHub repository as a plugin source.",
"error": "Failed to add plugin source",
"error": "Failed to add plugin source.",
"name": "Repository name",
"name-placeholder": "My Custom Plugins",
"success": "Plugin source added successfully",
"success": "Plugin source added successfully.",
"title": "Add plugin source",
"url": "Repository URL"
},
@@ -2243,10 +2288,12 @@
"uninstalling": "Uninstalling {plugin}...",
"update": "Update",
"update-all": "Update All ({count})",
"update-all-success": "All plugins updated successfully",
"update-available": "{count} plugins update(s) available",
"update-all-success": "All plugins updated successfully.",
"update-available": "New plugin update available",
"update-available_plural": "New plugin updates available ({count})",
"update-error": "Failed to update plugin: {plugin}: {error}",
"update-incompatible": "Requires Noctalia v{version} or higher",
"update-pending": "v{current} → v{new} (requires Noctalia v{required})",
"update-success": "Updated {plugin} to v{version}",
"update-version": "v{current} → v{new}",
"updating": "Updating..."
@@ -2352,6 +2399,10 @@
"label": "General"
}
},
"large-buttons-layout": {
"description": "Choose how session menu buttons are displayed.",
"label": "Large buttons layout"
},
"large-buttons-style": {
"description": "Display the session menu with large buttons in a grid layout.",
"label": "Large buttons style"
@@ -2408,6 +2459,9 @@
"highlight-colors-section": {
"label": "Highlight colors"
},
"load-average-section": {
"label": "Load average"
},
"memory-section": {
"label": "Memory usage"
},
@@ -2451,6 +2505,10 @@
"label": "Animation speed",
"reset": "Reset animation speed"
},
"box-border": {
"description": "Displays an outline around content areas.",
"label": "Container outline"
},
"box-border-radius": {
"description": "Adjusts the corner roundness of major layout sections, such as sidebars, cards, and content panels.",
"label": "Container Radius",
@@ -2577,8 +2635,8 @@
"tooltip": "Wallpaper folder"
},
"hide-wallpaper-filenames": {
"description": "Hide wallpaper filenames in the selector.",
"label": "Hide filenames"
"tooltip-hide": "Hide Filenames",
"tooltip-show": "Show Filenames"
},
"monitor-specific": {
"description": "Set a different wallpaper folder for each monitor.",
@@ -2661,6 +2719,7 @@
"download": "Download",
"download-speed": "Download Speed",
"gpu-temp": "GPU Temp",
"load-average": "Load Average",
"memory": "Memory",
"title": "System Monitor",
"upload": "Upload",
@@ -2671,8 +2730,8 @@
"enabled": "Enabled"
},
"airplane-mode": {
"disabled": "Disabled",
"enabled": "Enabled",
"disabled": "Disabled.",
"enabled": "Enabled.",
"title": "Airplane Mode"
},
"battery": {
@@ -2680,6 +2739,7 @@
"low-desc": "Battery is at {percent}%. Please connect the charger."
},
"bluetooth": {
"address-copied": "Address copied to clipboard",
"confirm-code": "Confirm code {value} on the other device",
"connect-failed": "Failed to connect to device",
"disabled": "Disabled",
@@ -2693,8 +2753,7 @@
"pair-failed": "Failed to pair device",
"passkey-required": "Passkey required by the device",
"pincode-required": "PIN code required by the device",
"state-change-failed": "Failed to change Bluetooth state",
"address-copied": "Address copied to clipboard"
"state-change-failed": "Failed to change Bluetooth state"
},
"clipboard": {
"unavailable": "Clipboard history unavailable",
@@ -2702,7 +2761,7 @@
},
"dark-mode": {
"dark-mode": "Dark Mode",
"enabled": "Enabled",
"enabled": "Enabled.",
"light-mode": "Light Mode"
},
"do-not-disturb": {
@@ -2712,78 +2771,79 @@
"enabled-desc": "You'll find these notifications in your history."
},
"internet": {
"limited": "Connected without internet"
"limited": "Connected without internet."
},
"ipc": {
"powerpanel-deprecated": "PowerPanel has been renamed to SessionMenu, this IPC call will be deprecated soon. Please use \"ipc call sessionMenu toggle\" instead.",
"sidepanel-deprecated": "SidePanel has been renamed to ControlCenter, this IPC call will be deprecated soon. Please use \"ipc call controlCenter toggle\" instead."
},
"keep-awake": {
"disabled": "Disabled",
"enabled": "Enabled"
"disabled": "Disabled.",
"enabled": "Enabled."
},
"keyboard-layout": {
"changed": "Keyboard layout changed to {layout}"
"changed": "Keyboard layout changed to {layout}.",
"title": "Keyboard"
},
"kofi": {
"opened": "Ko-fi page opened in your browser"
"opened": "Ko-fi page opened in your browser."
},
"missing-control-center": {
"description": "The control center widget has been removed from the bar. To access it from the bar again, you will need to re-add the widget. You can open it with right clicking on the bar too.",
"label": "Last control center widget removed"
},
"night-light": {
"disabled": "Disabled",
"enabled": "Enabled",
"forced": "Forced activation",
"normal": "Normal mode",
"not-installed": "wlsunset not installed"
"disabled": "Disabled.",
"enabled": "Enabled.",
"forced": "Forced activation.",
"normal": "Normal mode.",
"not-installed": "wlsunset not installed."
},
"noctalia-performance": {
"disabled": "Performance mode disabled",
"enabled": "Performance mode enabled",
"disabled": "Performance mode disabled.",
"enabled": "Performance mode enabled.",
"label": "Noctalia Performance"
},
"power-profile": {
"changed": "Power profile changed",
"changed": "Power profile changed.",
"profile-name": "{profile}"
},
"recording": {
"failed-general": "Recorder exited with an error",
"failed-gpu": "gpu-screen-recorder exited unexpectedly",
"failed-start": "Failed to start recording",
"failed-general": "Recorder exited with an error.",
"failed-gpu": "gpu-screen-recorder exited unexpectedly.",
"failed-start": "Failed to start recording.",
"no-portals": "Desktop portals not running",
"no-portals-desc": "Start xdg-desktop-portal and a compositor portal (wlr/hyprland/gnome/kde).",
"not-installed": "gpu-screen-recorder not installed",
"not-installed-desc": "Please install gpu-screen-recorder to use screen recording features.",
"saved": "Recording saved",
"started": "Recording started",
"saved": "Recording saved.",
"started": "Recording started.",
"stopping": "Stopping recording…"
},
"theming-processor-failed": {
"desc-generic": "Encountered an error while processing templates",
"desc-generic": "Encountered an error while processing templates.",
"title-matugen": "Matugen templating processing failed",
"title-predefined": "Predefined color cheme processing failed"
"title-predefined": "Predefined color scheme processing failed"
},
"vpn": {
"connected": "Connected to '{name}'",
"disconnected": "Disconnected from '{name}'"
"connected": "Connected to '{name}'.",
"disconnected": "Disconnected from '{name}'."
},
"wallpaper-colors": {
"disabled": "Wallpaper colors disabled",
"enabled": "Wallpaper colors enabled",
"label": "Wallpaper colors generation",
"not-installed": "Matugen not installed — required for wallpaper color extraction"
"disabled": "Wallpaper colors disabled.",
"enabled": "Wallpaper colors enabled.",
"label": "Wallpaper colors",
"not-installed": "Matugen not installed — required for wallpaper color extraction."
},
"wifi": {
"connected": "Connected to '{ssid}'",
"connection-failed": "Connection failed",
"connection-timeout": "Connection timeout",
"disabled": "Disabled",
"disconnected": "Disconnected from '{ssid}'",
"enabled": "Enabled",
"incorrect-password": "Incorrect password",
"network-not-found": "Network not found"
"connected": "Connected to '{ssid}'.",
"connection-failed": "Connection failed.",
"connection-timeout": "Connection timeout.",
"disabled": "Disabled.",
"disconnected": "Disconnected from '{ssid}'.",
"enabled": "Enabled.",
"incorrect-password": "Incorrect password.",
"network-not-found": "Network not found."
}
},
"tooltips": {
@@ -2797,6 +2857,7 @@
"close": "Close",
"collapse": "Collapse sidebar",
"connect-disconnect-devices": "Bluetooth device",
"copy-address": "Copy address",
"delete-notification": "Delete notification",
"disable-keep-awake": "Keep Awake",
"do-not-disturb-disabled": "Do Not Disturb",
@@ -2815,10 +2876,12 @@
"list-view": "List view",
"manage-vpn": "VPN connections",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Maximum widgets reached",
"microphone-volume-at": "Microphone volume: {volume}%",
"move-to-center-section": "Center section",
"move-to-left-section": "Left section",
"move-to-right-section": "Right section",
"move-to-section": "Move to {section}",
"mute": "Mute",
"next-media": "Next track",
"next-month": "Next month",
@@ -2828,6 +2891,7 @@
"night-light-not-installed": "Night Light (not available)",
"noctalia-performance-disabled": "Noctalia Performance Mode",
"noctalia-performance-enabled": "Noctalia Performance Mode",
"open-annotation-tool": "Open with annotation tool",
"open-control-center": "Control center",
"open-notification-history-disable-dnd": "Notification history",
"open-notification-history-enable-dnd": "Notification history",
@@ -2844,7 +2908,6 @@
"refresh-devices": "Refresh devices",
"refresh-wallhaven": "Refresh Wallhaven results",
"refresh-wallpaper-list": "Refresh wallpaper list",
"copy-address": "Copy address",
"remove-widget": "Remove widget",
"screen-recorder-not-installed": "Screen recorder (not installed)",
"search": "Search",
@@ -2876,6 +2939,7 @@
"apikey": {
"help": "An API key is required to access NSFW content.",
"label": "API Key",
"managed-by-env": "Managed via NOCTALIA_WALLHAVEN_API_KEY environment variable.",
"placeholder": "Enter your Wallhaven API Key"
},
"apply-all-monitors": {
@@ -2913,6 +2977,9 @@
}
},
"search": "Search",
"solid-color": {
"tooltip": "Solid color background"
},
"sorting": {
"date_added": "Date added",
"favorites": "Favorites",
@@ -2961,6 +3028,11 @@
"thunderstorm": "Thunderstorm",
"unknown": "Unknown"
},
"widget": {
"file-picker": {
"title": "Select a file"
}
},
"widgets": {
"color-picker": {
"apply": "Apply",
@@ -3045,11 +3117,13 @@
"wifi": {
"panel": {
"action-required": "Action required",
"available-interfaces": "Available interfaces",
"available-networks": "Available networks",
"connect": "Connect",
"connected": "Connected",
"disabled": "WiFi is disabled",
"disconnect": "Disconnect",
"disconnected": "Disconnected",
"disconnecting": "Disconnecting…",
"dns": "DNS",
"enable-message": "Enable WiFi to see available networks.",
@@ -3060,12 +3134,15 @@
"frequency": "Frequency",
"gateway": "Gateway",
"info": "Info",
"interface": "Network interface",
"internet": "Internet",
"internet-connected": "Internet connected",
"internet-limited": "No internet",
"internet-status": "Internet status",
"ipv4": "IPv4",
"known-networks": "Known networks",
"link-speed": "Link speed",
"no-ethernet-devices": "No Ethernet devices detected",
"no-networks": "No WiFi networks found",
"password": "Password",
"saved": "Saved",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Si el texto de salida coincide con este valor, el botón se colapsará.",
"label": "Condición de colapso"
},
"color-selection": {
"description": "Aplicar colores del tema al icono y al texto.",
"label": "Seleccionar color"
},
"display-command-output": {
"description": "Ingresa un comando para ejecutar a intervalos regulares. La primera línea de su salida se mostrará como texto.",
"label": "Mostrar salida de comando",
"stream-description": "Introduce un comando para ejecutar continuamente."
},
"dynamic-text": "Texto dinámico",
"enable-colorization": {
"description": "Habilitar la coloración para el icono y el texto del botón personalizado, aplicando los colores del tema.",
"label": "Habilitar coloración"
},
"hide-mode": {
"alwaysExpanded": "Siempre expandido",
"description": "Controla la visibilidad del widget cuando el comando no tiene salida.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Elige cómo te gustaría que apareciera este valor.",
"label": "Modo de visualización"
},
"show-icon": {
"description": "Mostrar el icono de la distribución del teclado.",
"label": "Mostrar icono"
}
},
"launcher": {
"use-primary-color": {
"description": "Cuando está habilitado, esto aplica el color primario para dar énfasis.",
"label": "Usar color primario"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Mostrar las lecturas de temperatura de la GPU si están disponibles.",
"label": "Temperatura de la GPU"
},
"load-average": {
"description": "Mostrar promedio de carga del sistema.",
"label": "Promedio de carga"
},
"memory-percentage": {
"description": "Mostrar el uso de memoria como porcentaje en lugar de valores absolutos.",
"label": "Memoria como porcentaje"
@@ -481,6 +503,7 @@
"device-address": "Dirección del dispositivo",
"disabled": "Bluetooth está desactivado",
"disconnect": "Desconectar",
"disconnecting": "Desconectando...",
"discoverable": "Visible",
"enable-message": "Activa Bluetooth para ver los dispositivos disponibles.",
"info": "Información",
@@ -494,6 +517,14 @@
"refresh-devices": "Actualizar dispositivos",
"scanning": "Buscando dispositivos...",
"signal": "Señal",
"signal-text": {
"excellent": "Señal: Excelente",
"fair": "Señal: Regular",
"good": "Señal: Buena",
"poor": "Señal: Débil",
"unknown": "Señal: Desconocida",
"very-poor": "Señal: Muy mala"
},
"title": "Bluetooth",
"trusted": "Confiable",
"unpair": "Desemparejar"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Únete a nuestro Discord",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Dar retroalimentación"
},
"empty": "Las notas de la versión aún no están disponibles.",
"highlight-title": "Cambios destacados",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Activar Bluetooth",
"enable-dnd": "Activar No molestar",
"enable-wifi": "Activar Wi-Fi",
"launcher-settings": "Ajustes del lanzador",
"lower-to-bottom": "Bajar hasta el fondo",
"next": "Siguiente",
"open-calendar": "Abrir calendario",
@@ -631,7 +664,35 @@
"webbrowser": "Navegador web"
},
"delete": "Borrar",
"no-results": "No se encontraron resultados.",
"pin": "Anclar",
"providers": {
"applications": "Aplicaciones",
"calculator": "Calculadora",
"calculator-deprecated": "El comando >calc está obsoleto y será eliminado pronto. Por favor, escribe expresiones matemáticas directamente en la búsqueda en su lugar.",
"calculator-description": "Calculadora — evalúa expresiones matemáticas",
"calculator-enter-expression": "Ingresa una expresión matemática",
"calculator-error": "Error",
"calculator-name": "Calculadora",
"clipboard": "Historial del portapapeles",
"clipboard-clear-description": "Limpiar todo el historial del portapapeles",
"clipboard-clear-description-full": "Eliminar todos los elementos del historial del portapapeles",
"clipboard-clear-history": "Limpiar historial del portapapeles",
"clipboard-delete": "Borrar entrada del portapapeles",
"clipboard-history-disabled": "Historial del portapapeles desactivado",
"clipboard-history-disabled-description": "Activa el historial del portapapeles en la configuración o instala cliphist",
"clipboard-loading": "Cargando historial del portapapeles...",
"clipboard-loading-description": "Por favor espera",
"clipboard-search-description": "Buscar en el historial del portapapeles",
"command": "Comando",
"command-description": "Ejecutar comandos de shell",
"command-name": "Comando",
"emoji": "Selector de emojis",
"emoji-loading": "Cargando emojis...",
"emoji-loading-description": "Por favor espera",
"emoji-no-recent": "Aún no hay emojis recientes.",
"emoji-search-description": "Buscar y copiar emojis"
},
"unpin": "Desanclar"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Salida del sistema + entrada del micrófono",
"microphone-input": "Entrada del micrófono",
"none": "No audio",
"system-output": "Salida del sistema"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Desplazar al Pasar",
"never": "Nunca Desplazar"
},
"session-menu-grid-layout": {
"grid": "Cuadrícula",
"single-row": "Fila única"
},
"settings-panel-mode": {
"attached": "Panel adjunto a la barra",
"centered": "Panel centrado",
@@ -823,31 +889,6 @@
"select": "Seleccionar",
"test": "Probar"
},
"plugins": {
"applications": "Aplicaciones",
"calculator": "Calculadora",
"calculator-description": "Calculadora — evalúa expresiones matemáticas",
"calculator-enter-expression": "Ingresa una expresión matemática",
"calculator-error": "Error",
"calculator-name": "Calculadora",
"clipboard": "Historial del portapapeles",
"clipboard-clear-description": "Limpiar todo el historial del portapapeles",
"clipboard-clear-description-full": "Eliminar todos los elementos del historial del portapapeles",
"clipboard-clear-history": "Limpiar historial del portapapeles",
"clipboard-delete": "Borrar entrada del portapapeles",
"clipboard-history-disabled": "Historial del portapapeles desactivado",
"clipboard-history-disabled-description": "Activa el historial del portapapeles en la configuración o instala cliphist",
"clipboard-loading": "Cargando historial del portapapeles...",
"clipboard-loading-description": "Por favor espera",
"clipboard-search-description": "Buscar en el historial del portapapeles",
"command": "Comando",
"command-description": "Ejecutar comandos de shell",
"command-name": "Comando",
"emoji": "Selector de emojis",
"emoji-loading": "Cargando emojis...",
"emoji-loading-description": "Por favor espera",
"emoji-search-description": "Buscar y copiar emojis"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Deriva colores que coinciden estrechamente con la imagen subyacente.",
"scheme-expressive": "Paleta vibrante con saturación juguetona.",
"scheme-fidelity": "Paleta de alta fidelidad que preserva los tonos originales",
"scheme-fruit-salad": "Mezcla colorida de acentos brillantes y contrastantes.",
"scheme-monochrome": "Paleta minimalista construida en torno a un solo tono.",
"scheme-neutral": "Paleta apagada con tonos suaves y relajantes.",
"scheme-rainbow": "Paleta diversa que abarca todo el espectro.",
"scheme-tonal-spot": "Paleta equilibrada con acentos definidos."
},
"description": "Elige el método de generación de esquemas de color que Matugen usará para crear colores a partir de tu fondo de pantalla.",
"label": "Tipo de esquema Matugen"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Escribir {filepath} y recargar"
},
"zen-browser": {
"description": "Escribe {filepath}; copia en el archivo chrome/userChrome.css de tu perfil de Zen."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Comando para ejecutar al hacer clic en el botón de anotar en el historial del portapapeles. La imagen se enviará a este comando.",
"label": "Herramienta de anotación",
"placeholder": "gradia, satty -f -"
},
"clip-preview": {
"description": "Muestra una vista previa del contenido del portapapeles al usar el comando >clip.",
"label": "Activar vista previa del portapapeles"
@@ -1826,6 +1866,10 @@
"description": "Mostrar pestañas de categorías para filtrar aplicaciones.",
"label": "Mostrar categorías"
},
"show-icon-background": {
"description": "Mostrar un fondo rectangular redondeado detrás de los iconos.",
"label": "Mostrar fondo del icono"
},
"sort-by-usage": {
"description": "Cuando está activado, las aplicaciones más utilizadas aparecen primero en la lista.",
"label": "Ordenar por más usados"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Activar la gestión de Bluetooth.",
"label": "Activar Bluetooth"
"label": "Activar Bluetooth",
"rssi-polling": {
"description": "Muestrear periódicamente el RSSI de los dispositivos conectados a través de bluetoothctl. Puede no estar disponible para todos los dispositivos; utiliza recursos mínimos cuando está habilitado.",
"label": "Sondeo de señal Bluetooth"
}
},
"section": {
"description": "Gestiona las conexiones Wi-Fi y Bluetooth."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Comprueba las fuentes de tu plugin o actualiza la lista.",
"no-plugins-label": "No hay plugins disponibles."
},
"collision": {
"already-installed": "Este plugin ya está instalado.",
"custom-version-exists": "Ya hay instalada una versión personalizada de \"{source}\"",
"official-version-exists": "La versión oficial de este plugin ya está instalada."
},
"filter": {
"all": "Todo",
"downloaded": "Descargado",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "No hay plugins instalados."
},
"installing": "Instalando {plugin}...",
"open-plugins-tab": "Abrir la configuración de los plugins",
"plugin-settings-title": "Ajustes de {plugin}",
"refresh": {
"refreshing": "Actualizando la lista de plugins...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Plugin no cargado",
"settings-saved": "Ajustes del plugin guardados",
"source": {
"custom": "Fuente personalizada",
"official": "Oficial"
},
"sources": {
"add-custom": "Añadir repositorio personalizado",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Actualizar todo ({count})",
"update-all-success": "Todos los plugins se actualizaron correctamente.",
"update-available": "{count} actualización(es) de plugin(s) disponible(s)",
"update-available_plural": "{count} actualizaciones de plugins disponibles",
"update-error": "Error al actualizar el plugin: {plugin}: {error}",
"update-incompatible": "Requiere Noctalia v{version} o superior",
"update-pending": "v{actual} → v{nuevo} (requiere Noctalia v{requerida})",
"update-success": "{plugin} actualizado a la versión {version}",
"update-version": "v{actual} → v{nuevo}",
"updating": "Actualizando..."
@@ -2339,6 +2399,10 @@
"label": "General"
}
},
"large-buttons-layout": {
"description": "Elige cómo se muestran los botones del menú de sesión.",
"label": "Diseño de botones grandes"
},
"large-buttons-style": {
"description": "Mostrar el menú de sesión con botones grandes en un diseño de cuadrícula.",
"label": "Estilo de botones grandes"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Colores de resaltado"
},
"load-average-section": {
"label": "Promedio de carga"
},
"memory-section": {
"label": "Uso de memoria"
},
@@ -2438,6 +2505,10 @@
"label": "Velocidad de animación",
"reset": "Restablecer la velocidad de la animación"
},
"box-border": {
"description": "Muestra un contorno alrededor de las áreas de contenido.",
"label": "Contorno del contenedor"
},
"box-border-radius": {
"description": "Ajusta la redondez de las esquinas de las secciones principales del diseño, como barras laterales, tarjetas y paneles de contenido.",
"label": "Radio del contenedor",
@@ -2564,8 +2635,8 @@
"tooltip": "Carpeta de fondos de pantalla"
},
"hide-wallpaper-filenames": {
"description": "Oculta los nombres de archivo del fondo de pantalla en el selector.",
"label": "Ocultar nombres de archivo"
"tooltip-hide": "Ocultar nombres de archivo",
"tooltip-show": "Mostrar nombres de archivo"
},
"monitor-specific": {
"description": "Establece una carpeta de fondos de pantalla diferente para cada monitor.",
@@ -2648,6 +2719,7 @@
"download": "Descargar",
"download-speed": "Velocidad de descarga",
"gpu-temp": "Temperatura de la GPU",
"load-average": "Promedio de carga",
"memory": "Memoria",
"title": "Monitor del sistema",
"upload": "Subir",
@@ -2664,6 +2736,7 @@
"low-desc": "La batería está al {percent}%. Por favor, conecta el cargador."
},
"bluetooth": {
"address-copied": "Dirección copiada al portapapeles",
"confirm-code": "Confirma el código {value} en el otro dispositivo.",
"connect-failed": "Error al conectar con el dispositivo",
"disabled": "Desactivado",
@@ -2706,7 +2779,8 @@
"enabled": "Activado"
},
"keyboard-layout": {
"changed": "Distribución de teclado cambiada a {layout}"
"changed": "Distribución de teclado cambiada a {layout}",
"title": "Teclado"
},
"kofi": {
"opened": "Página de Ko-fi abierta en tu navegador"
@@ -2780,6 +2854,7 @@
"close": "Cerrar",
"collapse": "Colapsar barra lateral",
"connect-disconnect-devices": "Dispositivo Bluetooth",
"copy-address": "Copiar dirección",
"delete-notification": "Eliminar notificación",
"disable-keep-awake": "Mantener despierto",
"do-not-disturb-disabled": "No molestar",
@@ -2798,10 +2873,12 @@
"list-view": "Vista de lista",
"manage-vpn": "Conexiones VPN",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Se ha alcanzado el número máximo de widgets.",
"microphone-volume-at": "Volumen del micrófono: {volume}%",
"move-to-center-section": "Sección central",
"move-to-left-section": "Sección izquierda",
"move-to-right-section": "Sección derecha",
"move-to-section": "Mover a {section}",
"mute": "Silenciar",
"next-media": "Siguiente pista",
"next-month": "Mes siguiente",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Luz nocturna (no disponible)",
"noctalia-performance-disabled": "Modo de rendimiento Noctalia",
"noctalia-performance-enabled": "Modo de rendimiento Noctalia",
"open-annotation-tool": "Abrir con herramienta de anotación",
"open-control-center": "Centro de control",
"open-notification-history-disable-dnd": "Historial de notificaciones",
"open-notification-history-enable-dnd": "Historial de notificaciones",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Se requiere una clave API para acceder a contenido NSFW.",
"label": "Clave API",
"managed-by-env": "Gestionado a través de la variable de entorno NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Introduce tu clave API de Wallhaven"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Buscar:",
"solid-color": {
"tooltip": "Fondo de color sólido"
},
"sorting": {
"date_added": "Fecha de adición",
"favorites": "Favoritos",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Tormenta",
"unknown": "Desconocido"
},
"widget": {
"file-picker": {
"title": "Seleccionar un archivo"
}
},
"widgets": {
"color-picker": {
"apply": "Aplicar",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Acción requerida",
"available-interfaces": "Interfaces disponibles",
"available-networks": "Redes disponibles",
"connect": "Conectar",
"connected": "Conectado",
"disabled": "Wi-Fi está desactivado",
"disconnect": "Desconectar",
"disconnected": "Desconectado",
"disconnecting": "Desconectando...",
"dns": "DNS",
"enable-message": "Activa Wi-Fi para ver las redes disponibles.",
@@ -3042,12 +3131,15 @@
"frequency": "Frecuencia",
"gateway": "Puerta de enlace",
"info": "Información",
"interface": "Interfaz de red",
"internet": "Internet",
"internet-connected": "Conectado a internet",
"internet-limited": "Sin internet",
"internet-status": "Estado de internet",
"ipv4": "IPv4",
"known-networks": "Redes conocidas",
"link-speed": "Velocidad de enlace",
"no-ethernet-devices": "No se detectaron dispositivos Ethernet.",
"no-networks": "No se encontraron redes",
"password": "Contraseña",
"saved": "Guardado",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Si le texte de sortie correspond à cette valeur, le bouton se repliera.",
"label": "Condition deffondrement"
},
"color-selection": {
"description": "Appliquer les couleurs du thème à l'icône et au texte.",
"label": "Sélectionner la couleur"
},
"display-command-output": {
"description": "Entrez une commande à exécuter à intervalle régulier. La première ligne de sa sortie sera affichée sous forme de texte.",
"label": "Afficher la sortie de la commande",
"stream-description": "Entrez une commande à exécuter en continu."
},
"dynamic-text": "Texte dynamique",
"enable-colorization": {
"description": "Activer la colorisation pour l'icône et le texte du bouton personnalisé, en appliquant les couleurs du thème.",
"label": "Activer la colorisation"
},
"hide-mode": {
"alwaysExpanded": "Toujours étendu",
"description": "Contrôle la visibilité du widget quand la commande n'a pas de sortie.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Choisissez comment vous souhaitez que cette valeur apparaisse.",
"label": "Mode d'affichage"
},
"show-icon": {
"description": "Afficher l'icône de disposition du clavier.",
"label": "Afficher l'icône"
}
},
"launcher": {
"use-primary-color": {
"description": "Quand cette option est activée, elle applique la couleur principale pour mettre en évidence.",
"label": "Utiliser une couleur primaire."
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Afficher les relevés de température du GPU, si disponibles.",
"label": "Température du GPU"
},
"load-average": {
"description": "Afficher la charge moyenne du système.",
"label": "Charge moyenne"
},
"memory-percentage": {
"description": "Afficher l'utilisation de la mémoire en pourcentage au lieu de valeurs absolues.",
"label": "Mémoire en pourcentage"
@@ -481,6 +503,7 @@
"device-address": "Adresse de lappareil",
"disabled": "Le Bluetooth est désactivé",
"disconnect": "Déconnecter",
"disconnecting": "Déconnexion...",
"discoverable": "Détectable",
"enable-message": "Activez le Bluetooth pour voir les appareils disponibles.",
"info": "Infos",
@@ -494,6 +517,14 @@
"refresh-devices": "Actualiser les appareils",
"scanning": "Recherche d'appareils en cours...",
"signal": "Signal",
"signal-text": {
"excellent": "Signal : Excellent",
"fair": "Signal : Moyen",
"good": "Signal : Bon",
"poor": "Signal : Faible",
"unknown": "Signal : Inconnu",
"very-poor": "Signal : Très faible"
},
"title": "Bluetooth",
"trusted": "De confiance",
"unpair": "Désappairer"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Rejoindre notre Discord",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Donner un avis."
},
"empty": "Les notes de version ne sont pas encore disponibles.",
"highlight-title": "Points importants",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Activer le Bluetooth",
"enable-dnd": "Activer le mode Ne pas déranger",
"enable-wifi": "Activer le Wi-Fi",
"launcher-settings": "Paramètres du lanceur",
"lower-to-bottom": "Abaisser au plus bas / Descendre au plus bas",
"next": "Suivant",
"open-calendar": "Ouvrir le calendrier",
@@ -631,7 +664,35 @@
"webbrowser": "Navigateur web"
},
"delete": "Supprimer",
"no-results": "Aucun résultat trouvé.",
"pin": "Épingler",
"providers": {
"applications": "Applications",
"calculator": "Calculatrice",
"calculator-deprecated": "La commande >calc est obsolète et sera bientôt supprimée. Veuillez saisir les expressions mathématiques directement dans la recherche à la place.",
"calculator-description": "Calculatrice — évaluez des expressions mathématiques",
"calculator-enter-expression": "Entrez une expression mathématique",
"calculator-error": "Erreur",
"calculator-name": "Calculatrice",
"clipboard": "Historique du presse-papiers",
"clipboard-clear-description": "Effacer tout l'historique du presse-papiers",
"clipboard-clear-description-full": "Supprimer tous les éléments de l'historique du presse-papiers",
"clipboard-clear-history": "Effacer l'historique du presse-papiers",
"clipboard-delete": "Supprimer l'entrée du presse-papiers",
"clipboard-history-disabled": "Historique du presse-papiers désactivé",
"clipboard-history-disabled-description": "Activez l'historique du presse-papiers dans les paramètres ou installez cliphist",
"clipboard-loading": "Chargement de l'historique du presse-papiers...",
"clipboard-loading-description": "Veuillez patienter",
"clipboard-search-description": "Rechercher dans l'historique du presse-papiers",
"command": "Commande",
"command-description": "Exécuter des commandes shell",
"command-name": "Commande",
"emoji": "Sélecteur d'émojis",
"emoji-loading": "Chargement des émojis...",
"emoji-loading-description": "Veuillez patienter",
"emoji-no-recent": "Aucun emoji récent pour le moment.",
"emoji-search-description": "Rechercher et copier des émojis"
},
"unpin": "Détacher"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Sortie système + entrée microphone",
"microphone-input": "Entrée microphone",
"none": "Pas d'audio",
"system-output": "Sortie système"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Défiler au Survol",
"never": "Ne Jamais Défiler"
},
"session-menu-grid-layout": {
"grid": "Grille",
"single-row": "Une seule rangée"
},
"settings-panel-mode": {
"attached": "Panneau attaché à la barre",
"centered": "Panneau centré",
@@ -823,31 +889,6 @@
"select": "Sélectionner",
"test": "Tester"
},
"plugins": {
"applications": "Applications",
"calculator": "Calculatrice",
"calculator-description": "Calculatrice — évaluez des expressions mathématiques",
"calculator-enter-expression": "Entrez une expression mathématique",
"calculator-error": "Erreur",
"calculator-name": "Calculatrice",
"clipboard": "Historique du presse-papiers",
"clipboard-clear-description": "Effacer tout l'historique du presse-papiers",
"clipboard-clear-description-full": "Supprimer tous les éléments de l'historique du presse-papiers",
"clipboard-clear-history": "Effacer l'historique du presse-papiers",
"clipboard-delete": "Supprimer l'entrée du presse-papiers",
"clipboard-history-disabled": "Historique du presse-papiers désactivé",
"clipboard-history-disabled-description": "Activez l'historique du presse-papiers dans les paramètres ou installez cliphist",
"clipboard-loading": "Chargement de l'historique du presse-papiers...",
"clipboard-loading-description": "Veuillez patienter",
"clipboard-search-description": "Rechercher dans l'historique du presse-papiers",
"command": "Commande",
"command-description": "Exécuter des commandes shell",
"command-name": "Commande",
"emoji": "Sélecteur d'émojis",
"emoji-loading": "Chargement des émojis...",
"emoji-loading-description": "Veuillez patienter",
"emoji-search-description": "Rechercher et copier des émojis"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Dérive des couleurs qui correspondent étroitement à l'image sous-jacente.",
"scheme-expressive": "Palette vibrante avec une saturation ludique.",
"scheme-fidelity": "Palette haute fidélité qui préserve les teintes sources.",
"scheme-fruit-salad": "Mélange coloré d'accents vifs et contrastés.",
"scheme-monochrome": "Palette minimaliste construite autour d'une seule teinte.",
"scheme-neutral": "Palette de couleurs atténuées aux tons doux et apaisants.",
"scheme-rainbow": "Palette diversifiée couvrant tout le spectre.",
"scheme-tonal-spot": "Palette équilibrée avec des accents ciblés."
},
"description": "Choisissez la méthode de génération de palette de couleurs que Matugen utilisera pour créer des couleurs à partir de votre fond d'écran.",
"label": "Type de schéma Matugen"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Écrire {filepath} — le thème Comfy doit être installé et activé manuellement"
},
"zen-browser": {
"description": "Écrivez dans {filepath} ; copiez dans le fichier chrome/userChrome.css de votre profil Zen."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Commande à exécuter lorsque l'on clique sur le bouton d'annotation dans l'historique du presse-papiers. L'image sera envoyée à cette commande.",
"label": "Outil d'annotation",
"placeholder": "gradia, satty -f -"
},
"clip-preview": {
"description": "Afficher un aperçu du contenu du presse-papiers lors de l'utilisation de la commande >clip.",
"label": "Activer l'aperçu du presse-papiers"
@@ -1826,6 +1866,10 @@
"description": "Afficher les onglets de catégories pour filtrer les applications.",
"label": "Afficher les catégories"
},
"show-icon-background": {
"description": "Afficher un arrière-plan rectangulaire arrondi derrière les icônes.",
"label": "Afficher l'arrière-plan de l'icône"
},
"sort-by-usage": {
"description": "Lorsque cette option est activée, les applications fréquemment lancées apparaissent en premier dans la liste.",
"label": "Trier par les plus utilisés"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Activer la gestion Bluetooth.",
"label": "Activer le Bluetooth"
"label": "Activer le Bluetooth",
"rssi-polling": {
"description": "Échantillonner périodiquement le RSSI des appareils connectés via bluetoothctl. Peut ne pas être disponible pour tous les appareils ; utilise un minimum de ressources lorsqu'il est activé.",
"label": "Interrogation du signal Bluetooth"
}
},
"section": {
"description": "Gérez les connexions Wi-Fi et Bluetooth."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Vérifiez les sources de vos plugins ou actualisez la liste.",
"no-plugins-label": "Aucun plugin disponible."
},
"collision": {
"already-installed": "Ce plugin est déjà installé.",
"custom-version-exists": "Une version personnalisée de \"{source}\" est déjà installée.",
"official-version-exists": "La version officielle de cette extension est déjà installée."
},
"filter": {
"all": "Tout",
"downloaded": "Téléchargé",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Aucun plugin installé"
},
"installing": "Installation de {plugin}...",
"open-plugins-tab": "Ouvrir les paramètres des plugins",
"plugin-settings-title": "Paramètres de {plugin}",
"refresh": {
"refreshing": "Actualisation de la liste des plugins...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Plugin non chargé",
"settings-saved": "Paramètres du plugin enregistrés",
"source": {
"custom": "Source personnalisée",
"official": "Officiel/Officielle"
},
"sources": {
"add-custom": "Ajouter un dépôt personnalisé",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Mettre à jour tout ({count})",
"update-all-success": "Tous les plugins ont été mis à jour avec succès.",
"update-available": "{count} mise(s) à jour de plugin(s) disponible(s)",
"update-available_plural": "{count} mises à jour d'extensions disponibles",
"update-error": "Échec de la mise à jour du plugin : {plugin} : {error}",
"update-incompatible": "Nécessite Noctalia v{version} ou une version ultérieure.",
"update-pending": "v{current} → v{new} (nécessite Noctalia v{required})",
"update-success": "Mise à jour du plugin {plugin} vers la version {version}.",
"update-version": "v{actuel} → v{nouveau}",
"updating": "Mise à jour..."
@@ -2339,6 +2399,10 @@
"label": "Général"
}
},
"large-buttons-layout": {
"description": "Choisissez comment les boutons du menu de session sont affichés.",
"label": "Disposition des grands boutons"
},
"large-buttons-style": {
"description": "Afficher le menu de session avec de grands boutons dans une disposition en grille.",
"label": "Style boutons larges"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Couleurs de surlignage"
},
"load-average-section": {
"label": "Charge moyenne"
},
"memory-section": {
"label": "Utilisation mémoire"
},
@@ -2438,6 +2505,10 @@
"label": "Vitesse d'animation",
"reset": "Réinitialiser la vitesse de l'animation"
},
"box-border": {
"description": "Affiche un contour autour des zones de contenu.",
"label": "Contour du conteneur"
},
"box-border-radius": {
"description": "Ajuste de l'arrondi des coins des principales sections de la mise en page, telles que les barres latérales, les cartes et les panneaux de contenu.",
"label": "Rayon du conteneur",
@@ -2564,8 +2635,8 @@
"tooltip": "Dossier des fonds d'écran"
},
"hide-wallpaper-filenames": {
"description": "Masquer les noms de fichiers des fonds d'écran dans le sélecteur.",
"label": "Masquer les noms de fichiers"
"tooltip-hide": "Masquer les noms de fichiers",
"tooltip-show": "Afficher les noms de fichiers"
},
"monitor-specific": {
"description": "Définissez un dossier de fond d'écran différent pour chaque moniteur.",
@@ -2648,6 +2719,7 @@
"download": "Télécharger",
"download-speed": "Vitesse de téléchargement",
"gpu-temp": "Température du GPU",
"load-average": "Charge moyenne",
"memory": "Mémoire",
"title": "Moniteur système",
"upload": "Télécharger",
@@ -2664,6 +2736,7 @@
"low-desc": "La batterie est à {percent}%. Veuillez brancher le chargeur."
},
"bluetooth": {
"address-copied": "Adresse copiée dans le presse-papiers",
"confirm-code": "Confirmer le code {value} sur l'autre appareil.",
"connect-failed": "Échec de la connexion à lappareil",
"disabled": "Désactivé",
@@ -2706,7 +2779,8 @@
"enabled": "Activé"
},
"keyboard-layout": {
"changed": "Disposition du clavier changée vers {layout}"
"changed": "Disposition du clavier changée vers {layout}",
"title": "Clavier"
},
"kofi": {
"opened": "Page Ko-fi ouverte dans votre navigateur"
@@ -2780,6 +2854,7 @@
"close": "Fermer",
"collapse": "Réduire la barre latérale",
"connect-disconnect-devices": "Appareil Bluetooth",
"copy-address": "Copier l'adresse",
"delete-notification": "Supprimer la notification",
"disable-keep-awake": "Rester éveillé",
"do-not-disturb-disabled": "Ne pas déranger",
@@ -2798,10 +2873,12 @@
"list-view": "Vue en liste",
"manage-vpn": "Connexions VPN",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Nombre maximal de widgets atteint.",
"microphone-volume-at": "Volume du microphone : {volume}%",
"move-to-center-section": "Section centrale",
"move-to-left-section": "Section de gauche",
"move-to-right-section": "Section de droite",
"move-to-section": "Aller à {section}",
"mute": "Muet / Couper le son",
"next-media": "Piste suivante",
"next-month": "Mois suivant",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Éclairage nocturne (non disponible)",
"noctalia-performance-disabled": "Mode performance Noctalia",
"noctalia-performance-enabled": "Mode performance Noctalia",
"open-annotation-tool": "Ouvrir avec l'outil d'annotation",
"open-control-center": "Centre de contrôle",
"open-notification-history-disable-dnd": "Historique des notifications",
"open-notification-history-enable-dnd": "Historique des notifications",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Une clé API est requise pour accéder au contenu NSFW.",
"label": "Clé API",
"managed-by-env": "Géré via la variable d'environnement NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Entrez votre clé API Wallhaven"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Rechercher :",
"solid-color": {
"tooltip": "Fond uni."
},
"sorting": {
"date_added": "Date d'ajout",
"favorites": "Favoris",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Orage",
"unknown": "Inconnu"
},
"widget": {
"file-picker": {
"title": "Sélectionner un fichier"
}
},
"widgets": {
"color-picker": {
"apply": "Appliquer",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Action requise",
"available-interfaces": "Interfaces disponibles",
"available-networks": "Réseaux disponibles",
"connect": "Connecter",
"connected": "Connecté",
"disabled": "Le Wi-Fi est désactivé",
"disconnect": "Déconnecter",
"disconnected": "Déconnecté",
"disconnecting": "Déconnexion en cours...",
"dns": "DNS",
"enable-message": "Activez le Wi-Fi pour voir les réseaux disponibles.",
@@ -3042,12 +3131,15 @@
"frequency": "Fréquence",
"gateway": "Passerelle",
"info": "Info",
"interface": "Interface réseau",
"internet": "Internet",
"internet-connected": "Connecté à Internet",
"internet-limited": "Pas d'internet",
"internet-status": "État de la connexion Internet",
"ipv4": "IPv4",
"known-networks": "Réseaux connus",
"link-speed": "Vitesse de liaison",
"no-ethernet-devices": "Aucun périphérique Ethernet détecté.",
"no-networks": "Aucun réseau trouvé",
"password": "Mot de passe",
"saved": "Enregistré",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Ha a kimeneti szöveg megegyezik ezzel az értékkel, a gomb összecsukódik.",
"label": "Összecsukási feltétel"
},
"color-selection": {
"description": "Témák színeinek alkalmazása az ikonra és a szövegre.",
"label": "Szín kiválasztása"
},
"display-command-output": {
"description": "Adjon meg egy parancsot, amelyet rendszeres időközönként futtatni szeretne. A kimenetének első sora szövegként jelenik meg.",
"label": "Parancs kimenetének megjelenítése",
"stream-description": "Adjon meg egy parancsot, amelyet folyamatosan futtatni szeretne."
},
"dynamic-text": "Dinamikus szöveg",
"enable-colorization": {
"description": "Színezés engedélyezése az egyéni gomb ikonjához és szövegéhez, a téma színeinek alkalmazása.",
"label": "Színezés engedélyezése"
},
"hide-mode": {
"alwaysExpanded": "Mindig kibontva",
"description": "Szabályozza a widget láthatóságát, ha a parancsnak nincs kimenete.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Válassza ki, hogyan jelenjen meg ez az érték.",
"label": "Megjelenítési mód"
},
"show-icon": {
"description": "Billentse a billentyűzetkiosztás ikont.",
"label": "Ikon megjelenítése"
}
},
"launcher": {
"use-primary-color": {
"description": "Ha engedélyezve van, akkor a hangsúlyozáshoz az elsődleges színt használja.",
"label": "Használj alapszínt."
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "GPU hőmérséklet-értékek megjelenítése, ha elérhetőek.",
"label": "GPU hőmérséklet"
},
"load-average": {
"description": "Rendszerterhelés átlagának megjelenítése.",
"label": "Átlagos terhelés"
},
"memory-percentage": {
"description": "A memória használatának megjelenítése százalékos értékben, abszolút értékek helyett.",
"label": "Memória százalékban"
@@ -481,6 +503,7 @@
"device-address": "Eszköz címe",
"disabled": "A Bluetooth ki van kapcsolva",
"disconnect": "Kapcsolat bontása",
"disconnecting": "A kapcsolat bontása...",
"discoverable": "Felfedezhető",
"enable-message": "Kapcsolja be a Bluetooth-t az elérhető eszközök megtekintéséhez.",
"info": "Infó",
@@ -494,6 +517,14 @@
"refresh-devices": "Eszközök frissítése",
"scanning": "Eszközök keresése...",
"signal": "Jel",
"signal-text": {
"excellent": "Jelerősség: Kiváló",
"fair": "Jelzés: Gyenge",
"good": "Jel: Jó",
"poor": "Jelerősség: Gyenge",
"unknown": "Jel: Ismeretlen",
"very-poor": "Jelerősség: Nagyon gyenge"
},
"title": "Bluetooth",
"trusted": "Megbízható",
"unpair": "Párosítás megszüntetése"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Csatlakozzon a Discordunkhoz",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Adj visszajelzést"
},
"empty": "A kiadási jegyzetek még nem érhetők el.",
"highlight-title": "Főbb újdonságok",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Bluetooth bekapcsolása",
"enable-dnd": "Ne zavarjanak bekapcsolása",
"enable-wifi": "Wi-Fi bekapcsolása",
"launcher-settings": "Indító beállítások",
"lower-to-bottom": "Engedd le a legaljára / Engedd le az aljára",
"next": "Következő",
"open-calendar": "Naptár megnyitása",
@@ -631,7 +664,35 @@
"webbrowser": "Webböngésző"
},
"delete": "Törlés",
"no-results": "Nincs találat",
"pin": "Rögzítés",
"providers": {
"applications": "Alkalmazások",
"calculator": "Számológép",
"calculator-deprecated": "A >calc parancs elavult, és hamarosan el lesz távolítva. Kérjük, a matematikai kifejezéseket közvetlenül a keresésbe írja be helyette.",
"calculator-description": "Számológép — matematikai kifejezések kiértékelése",
"calculator-enter-expression": "Írjon be egy matematikai kifejezést",
"calculator-error": "Hiba",
"calculator-name": "Számológép",
"clipboard": "Vágólapelőzmények",
"clipboard-clear-description": "Összes vágólapelőzmény törlése",
"clipboard-clear-description-full": "Az összes elem eltávolítása a vágólapelőzményekből",
"clipboard-clear-history": "Vágólapelőzmények törlése",
"clipboard-delete": "Vágólap bejegyzés törlése",
"clipboard-history-disabled": "Vágólapelőzmények kikapcsolva",
"clipboard-history-disabled-description": "Kapcsolja be a vágólapelőzményeket a beállításokban, vagy telepítse a cliphistet",
"clipboard-loading": "Vágólapelőzmények betöltése...",
"clipboard-loading-description": "Kérjük, várjon",
"clipboard-search-description": "Keresés a vágólapelőzményekben",
"command": "Parancs",
"command-description": "Shell parancsok futtatása",
"command-name": "Parancs",
"emoji": "Emoji választó",
"emoji-loading": "Emojik betöltése...",
"emoji-loading-description": "Kérjük, várjon",
"emoji-no-recent": "Nincsenek még legutóbbi emojik",
"emoji-search-description": "Emojik keresése és másolása"
},
"unpin": "Rögzítés feloldása"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Rendszerkimenet + mikrofonbemenet",
"microphone-input": "Mikrofonbemenet",
"none": "No audio",
"system-output": "Rendszerkimenet"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Görgetés rámutatáskor",
"never": "Soha ne görgessen"
},
"session-menu-grid-layout": {
"grid": "Rács",
"single-row": "Egy sor"
},
"settings-panel-mode": {
"attached": "Panel a sávhoz rögzítve",
"centered": "Középre igazított panel",
@@ -823,31 +889,6 @@
"select": "Kiválasztás",
"test": "Teszt"
},
"plugins": {
"applications": "Alkalmazások",
"calculator": "Számológép",
"calculator-description": "Számológép — matematikai kifejezések kiértékelése",
"calculator-enter-expression": "Írjon be egy matematikai kifejezést",
"calculator-error": "Hiba",
"calculator-name": "Számológép",
"clipboard": "Vágólapelőzmények",
"clipboard-clear-description": "Összes vágólapelőzmény törlése",
"clipboard-clear-description-full": "Az összes elem eltávolítása a vágólapelőzményekből",
"clipboard-clear-history": "Vágólapelőzmények törlése",
"clipboard-delete": "Vágólap bejegyzés törlése",
"clipboard-history-disabled": "Vágólapelőzmények kikapcsolva",
"clipboard-history-disabled-description": "Kapcsolja be a vágólapelőzményeket a beállításokban, vagy telepítse a cliphistet",
"clipboard-loading": "Vágólapelőzmények betöltése...",
"clipboard-loading-description": "Kérjük, várjon",
"clipboard-search-description": "Keresés a vágólapelőzményekben",
"command": "Parancs",
"command-description": "Shell parancsok futtatása",
"command-name": "Parancs",
"emoji": "Emoji választó",
"emoji-loading": "Emojik betöltése...",
"emoji-loading-description": "Kérjük, várjon",
"emoji-search-description": "Emojik keresése és másolása"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Az alapul szolgáló képhez szorosan illeszkedő színeket származtat.",
"scheme-expressive": "Élénk paletta játékos telítettséggel.",
"scheme-fidelity": "Nagy pontosságú paletta, amely megőrzi a forrás színtónusait.",
"scheme-fruit-salad": "Színes keveréke az élénk kontrasztos ékezeteknek.",
"scheme-monochrome": "Minimális paletta egyetlen színárnyalat köré építve.",
"scheme-neutral": "Tompa paletta visszafogott és nyugtató tónusokkal.",
"scheme-rainbow": "Változatos paletta, amely a teljes spektrumot lefedi.",
"scheme-tonal-spot": "Kiegyensúlyozott paletta fókuszált hangsúlyokkal."
},
"description": "Válassza ki a színséma-generálási módszert, amellyel a Matugen színeket fog létrehozni a háttérképéből.",
"label": "Matugen séma típusa"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "{filepath} írása és újratöltés"
},
"zen-browser": {
"description": "Írd be ezt a fájlba: {filepath}; másold be a Zen profilod chrome/userChrome.css fájljába."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Parancs, amely a jegyzetelés gombra kattintva fut a vágólap előzményeiben. A kép a parancsra lesz átirányítva.",
"label": "Annotációs eszköz",
"placeholder": "gradia, satty -f -"
},
"clip-preview": {
"description": "Mutassa a vágólap tartalmának előnézetét a >clip parancs használatakor.",
"label": "Vágólap előnézet engedélyezése"
@@ -1826,6 +1866,10 @@
"description": "Kategóriafülek megjelenítése az alkalmazások szűréséhez.",
"label": "Kategóriák megjelenítése"
},
"show-icon-background": {
"description": "Ikonok mögött lekerekített téglalap hátteret mutass.",
"label": "Ikon háttér megjelenítése"
},
"sort-by-usage": {
"description": "Ha engedélyezve van, a gyakran indított alkalmazások jelennek meg először a listán.",
"label": "Rendezés gyakoriság szerint"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "A Bluetooth kezelés aktiválása.",
"label": "Bluetooth bekapcsolása"
"label": "Bluetooth bekapcsolása",
"rssi-polling": {
"description": "Időnként mintavételezi a csatlakoztatott eszközök RSSI-értékét a bluetoothctl-en keresztül. Nem biztos, hogy minden eszközhöz elérhető; engedélyezve minimális erőforrásokat használ.",
"label": "Bluetooth jel lekérdezés"
}
},
"section": {
"description": "Wi-Fi és Bluetooth kapcsolatok kezelése."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Ellenőrizze a bővítményforrásokat, vagy frissítse a listát.",
"no-plugins-label": "Nincsenek elérhető bővítmények"
},
"collision": {
"already-installed": "Ez a bővítmény már telepítve van.",
"custom-version-exists": "Egyéni verzió a következő helyről: \"{source}\" már telepítve van",
"official-version-exists": "A plugin hivatalos verziója már telepítve van."
},
"filter": {
"all": "Összes",
"downloaded": "Letöltött",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Nincs telepített bővítmény"
},
"installing": "Telepítés: {plugin}...",
"open-plugins-tab": "Bővítmények beállításainak megnyitása",
"plugin-settings-title": "{plugin} beállításai",
"refresh": {
"refreshing": "Bővítmények listájának frissítése...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Bővítmény nincs betöltve",
"settings-saved": "Bővítmény beállításai mentve",
"source": {
"custom": "Egyéni forrás",
"official": "hivatalos"
},
"sources": {
"add-custom": "Egyéni adattár hozzáadása",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Összes frissítése ({count})",
"update-all-success": "Minden bővítmény sikeresen frissítve",
"update-available": "{count} frissítés érhető el a bővítményekhez",
"update-available_plural": "{count} bővítményfrissítés érhető el",
"update-error": "Nem sikerült frissíteni a bővítményt: {plugin}: {error}",
"update-incompatible": "Noctalia v{version} vagy újabb szükséges",
"update-pending": "v{current} → v{new} (szükséges Noctalia v{required})",
"update-success": "A(z) {plugin} frissítve lett a v{version} verzióra",
"update-version": "v{current} → v{new}",
"updating": "Frissítés..."
@@ -2339,6 +2399,10 @@
"label": "Általános"
}
},
"large-buttons-layout": {
"description": "Válaszd ki, hogyan jelenjenek meg a munkamenü menügombjai.",
"label": "Nagy gombok elrendezése"
},
"large-buttons-style": {
"description": "A munkamenet menü megjelenítése nagy gombokkal, rácsos elrendezésben.",
"label": "Nagyméretű gombok stílusa"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Kiemelőszínek"
},
"load-average-section": {
"label": "Átlagos terhelés"
},
"memory-section": {
"label": "Memóriahasználat"
},
@@ -2438,6 +2505,10 @@
"label": "Animációs sebesség",
"reset": "Animációs sebesség visszaállítása"
},
"box-border": {
"description": "Tartalomterületek köré vázlatot jelenít meg.",
"label": "Konténer körvonal"
},
"box-border-radius": {
"description": "Beállítja a fő elrendezési szakaszok (például oldalsávok, kártyák és tartalompanelek) saroklekerekítését.",
"label": "Tároló sugár",
@@ -2564,8 +2635,8 @@
"tooltip": "Háttérkép mappa"
},
"hide-wallpaper-filenames": {
"description": "Háttérkép fájlnevek elrejtése a választóban.",
"label": "Fájlnevek elrejtése"
"tooltip-hide": "Fájlnevek elrejtése",
"tooltip-show": "Fájlnevek megjelenítése"
},
"monitor-specific": {
"description": "Külön háttérkép mappa beállítása minden monitorhoz.",
@@ -2648,6 +2719,7 @@
"download": "Letöltés",
"download-speed": "Letöltési sebesség",
"gpu-temp": "GPU hőmérséklet",
"load-average": "Átlagos terhelés",
"memory": "Memória",
"title": "Rendszerfigyelő",
"upload": "Feltöltés",
@@ -2664,6 +2736,7 @@
"low-desc": "Az akkumulátor {percent}%-on van. Kérjük, csatlakoztassa a töltőt."
},
"bluetooth": {
"address-copied": "Cím a vágólapra másolva",
"confirm-code": "Erősítse meg a {value} kódot a másik eszközön",
"connect-failed": "Nem sikerült csatlakozni az eszközhöz",
"disabled": "Kikapcsolva",
@@ -2706,7 +2779,8 @@
"enabled": "Bekapcsolva"
},
"keyboard-layout": {
"changed": "Billentyűzetkiosztás megváltozott: {layout}"
"changed": "Billentyűzetkiosztás megváltozott: {layout}",
"title": "Billentyűzet"
},
"kofi": {
"opened": "A Ko-fi oldal megnyílt a böngészőjében"
@@ -2780,6 +2854,7 @@
"close": "Bezárás",
"collapse": "Oldalsáv összecsukása",
"connect-disconnect-devices": "Bluetooth eszköz",
"copy-address": "Cím másolása",
"delete-notification": "Értesítés törlése",
"disable-keep-awake": "Ébren tartás",
"do-not-disturb-disabled": "Ne zavarjanak",
@@ -2798,10 +2873,12 @@
"list-view": "Lista nézet",
"manage-vpn": "VPN-kapcsolatok",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Elérte a maximális widgetszámot.",
"microphone-volume-at": "Mikrofon hangereje: {volume}%",
"move-to-center-section": "Középső szakasz",
"move-to-left-section": "Bal oldali szakasz",
"move-to-right-section": "Jobb oldali szakasz",
"move-to-section": "Ugrás a(z) {section} szakaszhoz",
"mute": "Némítás",
"next-media": "Következő zene",
"next-month": "Következő hónap",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Éjszakai fény (nem elérhető)",
"noctalia-performance-disabled": "Noctalia teljesítmény mód",
"noctalia-performance-enabled": "Noctalia teljesítmény mód",
"open-annotation-tool": "Megnyitás jegyzetelő eszközzel",
"open-control-center": "Vezérlőközpont",
"open-notification-history-disable-dnd": "Értesítési előzmények",
"open-notification-history-enable-dnd": "Értesítési előzmények",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "NSFW tartalom eléréséhez API kulcs szükséges.",
"label": "API kulcs",
"managed-by-env": "A NOCTALIA_WALLHAVEN_API_KEY környezeti változóval kezelhető.",
"placeholder": "Add meg a Wallhaven API kulcsodat!"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Keresés",
"solid-color": {
"tooltip": "Egyszínű háttér"
},
"sorting": {
"date_added": "Hozzáadás dátuma",
"favorites": "Kedvencek",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Zivatar",
"unknown": "Ismeretlen"
},
"widget": {
"file-picker": {
"title": "Fájl kiválasztása"
}
},
"widgets": {
"color-picker": {
"apply": "Alkalmazás",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Szukseges akció",
"available-interfaces": "Elérhető interfészek",
"available-networks": "Elérhető hálózatok",
"connect": "Csatlakozás",
"connected": "Csatlakozva",
"disabled": "A WiFi ki van kapcsolva",
"disconnect": "Leválasztás",
"disconnected": "Szétkapcsolva",
"disconnecting": "Leválasztás…",
"dns": "DNS",
"enable-message": "Kapcsolja be a WiFi-t az elérhető hálózatok megtekintéséhez.",
@@ -3042,12 +3131,15 @@
"frequency": "Frekvencia",
"gateway": "Átjáró",
"info": "Infó",
"interface": "Hálózati interfész",
"internet": "Internet",
"internet-connected": "Internet csatlakoztatva",
"internet-limited": "Nincs internet",
"internet-status": "Internet állapota",
"ipv4": "IPv4",
"known-networks": "Ismert hálózatok",
"link-speed": "Kapcsolati sebesség",
"no-ethernet-devices": "Nem található Ethernet eszköz.",
"no-networks": "Nem található WiFi-hálózat",
"password": "Jelszó",
"saved": "Mentve",
+140 -48
View File
@@ -142,12 +142,20 @@
"description": "出力テキストがこの値と一致する場合、ボタンを折りたたみます。",
"label": "折りたたみ条件"
},
"color-selection": {
"description": "テーマカラーをアイコンとテキストに適用します。",
"label": "色を選択"
},
"display-command-output": {
"description": "定期的に実行するコマンドを入力します。出力の最初の行がテキストとして表示されます。",
"label": "コマンド出力を表示",
"stream-description": "継続的に実行するコマンドを入力します。"
},
"dynamic-text": "動的テキスト",
"enable-colorization": {
"description": "カスタムボタンのアイコンとテキストのカラーリングを有効にし、テーマカラーを適用します。",
"label": "カラーリングを有効化"
},
"hide-mode": {
"alwaysExpanded": "常に展開",
"description": "コマンドの出力がない場合のウィジェットの表示を制御します。",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "値の表示方法を選択します。",
"label": "表示モード"
},
"show-icon": {
"description": "キーボードレイアウトのアイコンを表示します。",
"label": "アイコンを表示"
}
},
"launcher": {
"use-primary-color": {
"description": "有効にすると、強調のためにプライマリカラーが適用されます。",
"label": "原色を使用してください。"
}
},
"lock-keys": {
@@ -327,9 +345,13 @@
"description": "利用可能な場合、GPU 温度を表示します。",
"label": "GPU 温度"
},
"load-average": {
"description": "システム負荷平均を表示します。",
"label": "負荷平均"
},
"memory-percentage": {
"description": "メモリ使用量を絶対値ではなくパーセンテージで表示します。",
"label": "メモリをパーセント表示"
"label": "メモリをパーセント表示"
},
"memory-usage": {
"description": "現在の RAM 使用量を表示します。",
@@ -481,9 +503,10 @@
"device-address": "デバイスアドレス",
"disabled": "Bluetooth は無効です",
"disconnect": "切断",
"disconnecting": "切断中...",
"discoverable": "発見可能",
"enable-message": "利用可能なデバイスを表示するには Bluetooth を有効にしてください。",
"info": "情報 (Jōhō)",
"info": "情報",
"known-devices": "登録済みデバイス",
"no-devices": "利用可能なデバイスはありません",
"pair": "ペア",
@@ -493,7 +516,15 @@
"pairing-mode": "デバイスがペアリングモードになっていることを確認してください。",
"refresh-devices": "デバイスを更新",
"scanning": "デバイスをスキャン中...",
"signal": "信号 (shingō)",
"signal": "信号",
"signal-text": {
"excellent": "信号: 良好",
"fair": "合図:可",
"good": "信号: 良し",
"poor": "信号:弱い",
"unknown": "信号:不明",
"very-poor": "信号:非常に悪い"
},
"title": "Bluetooth",
"trusted": "信頼できる",
"unpair": "ペアリング解除"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Discord に参加",
"dismiss": "OK"
"dismiss": "OK",
"feedback": "フィードバックをお願いします。"
},
"empty": "リリースノートはまだ利用できません。",
"highlight-title": "ハイライト",
@@ -565,7 +597,7 @@
"close-app": "{app} を閉じる",
"connect-vpn": "{name} に接続",
"cycle-visualizer": "ビジュアライザーを切り替える",
"delete": "削除 (Sakujo)",
"delete": "削除",
"disable-bluetooth": "Bluetooth を無効化",
"disable-dnd": "おやすみモードを無効化",
"disable-wifi": "Wi-Fi を無効化",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Bluetooth を有効化",
"enable-dnd": "おやすみモードを有効化",
"enable-wifi": "Wi-Fi を有効化",
"launcher-settings": "ランチャー設定",
"lower-to-bottom": "一番下まで下げてください。",
"next": "次へ",
"open-calendar": "カレンダーを開く",
@@ -631,7 +664,35 @@
"webbrowser": "ウェブブラウザ"
},
"delete": "削除",
"no-results": "結果が見つかりませんでした。",
"pin": "ピン留め",
"providers": {
"applications": "アプリケーション",
"calculator": "電卓",
"calculator-deprecated": ">calc コマンドは非推奨となり、まもなく削除されます。代わりに、検索で数式を直接入力してください。",
"calculator-description": "電卓 — 数式を計算します",
"calculator-enter-expression": "数式を入力",
"calculator-error": "エラー",
"calculator-name": "電卓",
"clipboard": "クリップボード履歴",
"clipboard-clear-description": "クリップボード履歴をすべて消去",
"clipboard-clear-description-full": "クリップボード履歴からすべての項目を削除します",
"clipboard-clear-history": "クリップボード履歴を消去",
"clipboard-delete": "クリップボードの項目を削除",
"clipboard-history-disabled": "クリップボード履歴は無効です",
"clipboard-history-disabled-description": "設定で履歴を有効にするか、cliphist をインストールしてください",
"clipboard-loading": "クリップボード履歴を読み込み中...",
"clipboard-loading-description": "お待ちください",
"clipboard-search-description": "クリップボード履歴を検索",
"command": "コマンド",
"command-description": "シェルコマンドを実行する",
"command-name": "コマンド",
"emoji": "絵文字選択",
"emoji-loading": "絵文字を読み込み中...",
"emoji-loading-description": "お待ちください",
"emoji-no-recent": "まだ最近使った絵文字はありません。",
"emoji-search-description": "絵文字を検索してコピー"
},
"unpin": "ピン留め解除"
},
"lock-screen": {
@@ -683,7 +744,7 @@
}
},
"colors": {
"error": "エラー (Error)",
"error": "エラー",
"none": "なし",
"onSurface": "文字・アイコン (On Surface)",
"primary": "メインカラー (Primary)",
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "システム出力 + マイク入力",
"microphone-input": "マイク入力",
"none": "No audio",
"system-output": "システム出力"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "ホバー時にスクロール",
"never": "スクロールしない"
},
"session-menu-grid-layout": {
"grid": "グリッド",
"single-row": "単一行"
},
"settings-panel-mode": {
"attached": "バーに吸着",
"centered": "中央に配置",
@@ -823,31 +889,6 @@
"select": "選択",
"test": "テスト"
},
"plugins": {
"applications": "アプリケーション",
"calculator": "電卓",
"calculator-description": "電卓 — 数式を計算します",
"calculator-enter-expression": "数式を入力",
"calculator-error": "エラー",
"calculator-name": "電卓",
"clipboard": "クリップボード履歴",
"clipboard-clear-description": "クリップボード履歴をすべて消去",
"clipboard-clear-description-full": "クリップボード履歴からすべての項目を削除します",
"clipboard-clear-history": "クリップボード履歴を消去",
"clipboard-delete": "クリップボードの項目を削除",
"clipboard-history-disabled": "クリップボード履歴は無効です",
"clipboard-history-disabled-description": "設定で履歴を有効にするか、cliphist をインストールしてください",
"clipboard-loading": "クリップボード履歴を読み込み中...",
"clipboard-loading-description": "お待ちください",
"clipboard-search-description": "クリップボード履歴を検索",
"command": "コマンド",
"command-description": "シェルコマンドを実行する",
"command-name": "コマンド",
"emoji": "絵文字選択",
"emoji-loading": "絵文字を読み込み中...",
"emoji-loading-description": "お待ちください",
"emoji-search-description": "絵文字を検索してコピー"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "元画像に馴染む色を抽出します。",
"scheme-expressive": "彩度が高く、鮮やかで遊び心のあるパレット。",
"scheme-fidelity": "元の色相を保持した、忠実度の高いパレット。",
"scheme-fruit-salad": "明るく対照的なアクセントを混ぜたカラフルなパレット。",
"scheme-monochrome": "単一の色相で構成されたミニマルなパレット。",
"scheme-neutral": "彩度を抑えた、落ち着きのあるパレット。",
"scheme-rainbow": "スペクトル全体をカバーする多様なパレット。",
"scheme-tonal-spot": "アクセントを強調したバランスの良いパレット。"
},
"description": "Matugen が壁紙から色を作成するために使用する配色生成方法を選択してください。",
"label": "Matugen のスキームタイプ"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "{filepath} を書き込み、リロードします。"
},
"zen-browser": {
"description": "{filepath} を記述; Zen プロファイルの chrome/userChrome.css にコピーしてください。"
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "クリップボード履歴のアノテーションボタンをクリックしたときに実行するコマンド。画像はこのコマンドにパイプされます。",
"label": "注釈ツール",
"placeholder": "グラディア、サッティ -f -"
},
"clip-preview": {
"description": ">clip コマンド使用時に、クリップボードの内容をプレビュー表示します。",
"label": "クリップボードのプレビューを有効化"
@@ -1826,6 +1866,10 @@
"description": "アプリケーションを絞り込むためのカテゴリタブを表示します。",
"label": "カテゴリを表示"
},
"show-icon-background": {
"description": "アイコンの背面に角丸の長方形の背景を表示する。",
"label": "アイコンの背景を表示"
},
"sort-by-usage": {
"description": "有効にすると、よく使うアプリがリストの上位に表示されます。",
"label": "使用頻度順に並べ替え"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Bluetooth の管理を有効にします。",
"label": "Bluetooth を有効化"
"label": "Bluetooth を有効化",
"rssi-polling": {
"description": "bluetoothctl 経由で接続されたデバイスのRSSIを定期的にサンプリングします。 すべてのデバイスで利用できるとは限りません。 有効にすると、最小限のリソースを使用します。",
"label": "Bluetooth信号ポーリング"
}
},
"section": {
"description": "Wi-Fi と Bluetooth 接続を管理します。"
@@ -2171,6 +2219,11 @@
"no-plugins-description": "プラグインのソースを確認するか、リストを更新してください。",
"no-plugins-label": "利用可能なプラグインはありません"
},
"collision": {
"already-installed": "このプラグインはすでにインストールされています。",
"custom-version-exists": "\"{source}\" 発 の カスタム版 は 既に インストール されています。",
"official-version-exists": "このプラグインの公式バージョンはすでにインストールされています。"
},
"filter": {
"all": "すべて",
"downloaded": "ダウンロード済み",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "インストールされているプラグインはありません"
},
"installing": "{plugin} をインストール中...",
"open-plugins-tab": "プラグイン設定を開く",
"plugin-settings-title": "{plugin} の設定",
"refresh": {
"refreshing": "プラグインリストを更新中...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "プラグインは読み込まれていません",
"settings-saved": "プラグイン設定を保存しました",
"source": {
"custom": "カスタムソース",
"official": "公式"
},
"sources": {
"add-custom": "カスタムリポジトリを追加",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "すべてアップデート ({count})",
"update-all-success": "すべてのプラグインをアップデートしました。",
"update-available": "{count} 件のプラグインアップデートがあります",
"update-available_plural": "{count} 個のプラグインアップデートがあります",
"update-error": "プラグインのアップデートに失敗しました: {plugin}: {error}",
"update-incompatible": "Noctalia v{version} 以降が必要です。",
"update-pending": "v{current} → v{new} (Noctalia v{required} ga hitsuyou)",
"update-success": "{plugin} を v{version} にアップデートしました。",
"update-version": "v{current} → v{new}",
"updating": "更新中..."
@@ -2339,6 +2399,10 @@
"label": "一般"
}
},
"large-buttons-layout": {
"description": "セッションメニューのボタンの表示方法を選択してください。",
"label": "大きなボタンのレイアウト"
},
"large-buttons-style": {
"description": "セッションメニューを、グリッド配置の大きなボタンで表示します。",
"label": "大きなボタンのスタイル"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "ハイライト色"
},
"load-average-section": {
"label": "負荷平均"
},
"memory-section": {
"label": "メモリ使用量"
},
@@ -2438,6 +2505,10 @@
"label": "アニメーション速度",
"reset": "アニメーション速度をリセット"
},
"box-border": {
"description": "コンテンツ領域の周りにアウトラインを表示します。",
"label": "コンテナの輪郭"
},
"box-border-radius": {
"description": "サイドバー、カード、コンテンツパネルなど、主要なレイアウト部分の角の丸みを調整します。",
"label": "コンテナの角の丸み",
@@ -2564,8 +2635,8 @@
"tooltip": "壁紙フォルダ"
},
"hide-wallpaper-filenames": {
"description": "壁紙選択パネル内で、壁紙のファイル名を非表示にします。",
"label": "ファイル名を表示"
"tooltip-hide": "ファイル名を隠す",
"tooltip-show": "ファイル名を表示"
},
"monitor-specific": {
"description": "ディスプレイごとに異なる壁紙フォルダを設定します。",
@@ -2646,9 +2717,10 @@
"cpu-usage": "CPU使用率",
"disk": "ディスク",
"download": "ダウンロード",
"download-speed": "ダウンロード速度 (Daunrōdo sokudo)",
"download-speed": "ダウンロード速度",
"gpu-temp": "GPU温度",
"memory": "記憶",
"load-average": "負荷平均",
"memory": "メモリ",
"title": "システムモニター",
"upload": "アップロード",
"upload-speed": "アップロード速度"
@@ -2664,6 +2736,7 @@
"low-desc": "バッテリー残量が {percent}% です。充電器を接続してください。"
},
"bluetooth": {
"address-copied": "アドレスをクリップボードにコピーしました。",
"confirm-code": "別のデバイスでコード{value}を確認してください。",
"connect-failed": "デバイスに接続できませんでした。",
"disabled": "無効",
@@ -2706,7 +2779,8 @@
"enabled": "有効"
},
"keyboard-layout": {
"changed": "キーボードレイアウトを {layout} に変更しました"
"changed": "キーボードレイアウトを {layout} に変更しました",
"title": "キーボード"
},
"kofi": {
"opened": "ブラウザで Ko-fi ページを開きました"
@@ -2780,6 +2854,7 @@
"close": "閉じる",
"collapse": "サイドバーを折りたたむ",
"connect-disconnect-devices": "Bluetooth デバイス",
"copy-address": "アドレスをコピー",
"delete-notification": "通知を削除",
"disable-keep-awake": "スリープ防止",
"do-not-disturb-disabled": "おやすみモード",
@@ -2798,10 +2873,12 @@
"list-view": "リスト表示",
"manage-vpn": "VPN 接続",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "ウィジェットの最大数に達しました",
"microphone-volume-at": "マイク音量: {volume}%",
"move-to-center-section": "中央セクション",
"move-to-left-section": "左セクション",
"move-to-right-section": "右セクション",
"move-to-section": "{section} に移動",
"mute": "ミュート",
"next-media": "次のトラック",
"next-month": "翌月",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "夜間モード(利用不可)",
"noctalia-performance-disabled": "Noctalia パフォーマンスモード",
"noctalia-performance-enabled": "Noctalia パフォーマンスモード",
"open-annotation-tool": "注釈ツールで開く",
"open-control-center": "コントロールセンター",
"open-notification-history-disable-dnd": "通知履歴",
"open-notification-history-enable-dnd": "通知履歴",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "成人向けコンテンツにアクセスするには、APIキーが必要です。",
"label": "APIキー",
"managed-by-env": "NOCTALIA_WALLHAVEN_API_KEY 環境変数経由で管理されます。",
"placeholder": "Wallhaven APIキーを入力してください。"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "検索",
"solid-color": {
"tooltip": "無地"
},
"sorting": {
"date_added": "追加日",
"favorites": "お気に入り数",
@@ -2943,6 +3025,11 @@
"thunderstorm": "雷雨",
"unknown": "不明"
},
"widget": {
"file-picker": {
"title": "ファイルを選択"
}
},
"widgets": {
"color-picker": {
"apply": "適用",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "アクションが必要",
"available-interfaces": "利用可能なインターフェース",
"available-networks": "利用可能なネットワーク",
"connect": "接続",
"connected": "接続済み",
"disabled": "Wi-Fi は無効です",
"disconnect": "切断",
"disconnected": "切断されました",
"disconnecting": "切断中...",
"dns": "DNS",
"enable-message": "利用可能なネットワークを表示するには Wi-Fi を有効にしてください。",
@@ -3041,13 +3130,16 @@
"forgetting": "削除中...",
"frequency": "周波数",
"gateway": "ゲートウェイ",
"info": "情報 (Jōhō)",
"info": "情報",
"interface": "ネットワークインターフェース",
"internet": "インターネット",
"internet-connected": "インターネット接続",
"internet-limited": "インターネットなし",
"internet-status": "インターネット接続状況",
"ipv4": "IPv4",
"known-networks": "保存済みネットワーク",
"link-speed": "リンク速度",
"no-ethernet-devices": "イーサネットデバイスが検出されませんでした。",
"no-networks": "ネットワークが見つかりません",
"password": "パスワード",
"saved": "保存済み",
File diff suppressed because it is too large Load Diff
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Als de uitvoer overeenkomt met deze waarde, wordt de knop samengevouwen.",
"label": "Inklapvoorwaarde"
},
"color-selection": {
"description": "Pas themakleuren toe op pictogram en tekst.",
"label": "Kleur selecteren"
},
"display-command-output": {
"description": "Voer een commando in dat regelmatig wordt uitgevoerd. De eerste regel van de uitvoer wordt als tekst weergegeven.",
"label": "Commando-uitvoer weergeven",
"stream-description": "Voer een commando in dat continu wordt uitgevoerd."
},
"dynamic-text": "Dynamische tekst",
"enable-colorization": {
"description": "Kleurtoepassing inschakelen voor het aangepaste knoppictogram en de tekst, met toepassing van themakleuren.",
"label": "Kleurtoepassing inschakelen"
},
"hide-mode": {
"alwaysExpanded": "Altijd uitgeklapt",
"description": "Bepaalt de zichtbaarheid van de widget wanneer het commando geen uitvoer heeft.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Kies hoe je wilt dat deze waarde wordt weergegeven.",
"label": "Weergavemodus"
},
"show-icon": {
"description": "Toon het toetsenbordindeling-icoon.",
"label": "Icoon weergeven"
}
},
"launcher": {
"use-primary-color": {
"description": "Indien ingeschakeld, past dit de primaire kleur toe voor nadruk.",
"label": "Gebruik een primaire kleur"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Toon GPU-temperatuurmetingen indien beschikbaar.",
"label": "GPU-temperatuur"
},
"load-average": {
"description": "Systeembelasting gemiddelde weergeven.",
"label": "Gemiddelde belasting"
},
"memory-percentage": {
"description": "Toon geheugengebruik als percentage in plaats van absolute waarden.",
"label": "Geheugen als percentage"
@@ -481,6 +503,7 @@
"device-address": "Apparaatadres",
"disabled": "Bluetooth is uitgeschakeld",
"disconnect": "Verbreken",
"disconnecting": "Verbinding verbroken...",
"discoverable": "Zichtbaar",
"enable-message": "Schakel Bluetooth in om beschikbare apparaten te zien.",
"info": "Info",
@@ -494,6 +517,14 @@
"refresh-devices": "Apparaten verversen",
"scanning": "Zoeken naar apparaten...",
"signal": "Signaal",
"signal-text": {
"excellent": "Signaal: Uitstekend",
"fair": "Signaal: Redelijk",
"good": "Signaal: Goed",
"poor": "Signaal: Zwak",
"unknown": "Signaal: Onbekend",
"very-poor": "Signaal: Zeer slecht"
},
"title": "Bluetooth",
"trusted": "Vertrouwd",
"unpair": "Ontkoppelen"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Word lid van onze Discord",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Geef feedback"
},
"empty": "Er zijn nog geen release-opmerkingen beschikbaar.",
"highlight-title": "Hoogtepunten",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Bluetooth inschakelen",
"enable-dnd": "Niet Storen inschakelen",
"enable-wifi": "Wi-Fi inschakelen",
"launcher-settings": "Launcher instellingen",
"lower-to-bottom": "Laagste naar beneden",
"next": "Volgende",
"open-calendar": "Open agenda",
@@ -631,7 +664,35 @@
"webbrowser": "Webbrowser"
},
"delete": "Verwijderen",
"no-results": "Geen resultaten gevonden.",
"pin": "Vastmaken",
"providers": {
"applications": "Applicaties",
"calculator": "Rekenmachine",
"calculator-deprecated": "De >calc opdracht is verouderd en zal binnenkort verwijderd worden. Typ wiskundige uitdrukkingen in plaats daarvan direct in de zoekopdracht.",
"calculator-description": "Rekenmachine — bereken wiskundige expressies",
"calculator-enter-expression": "Voer een wiskundige expressie in",
"calculator-error": "Fout",
"calculator-name": "Rekenmachine",
"clipboard": "Klembordgeschiedenis",
"clipboard-clear-description": "Klembordgeschiedenis wissen",
"clipboard-clear-description-full": "Alle items uit de klembordgeschiedenis verwijderen",
"clipboard-clear-history": "Klembordgeschiedenis wissen",
"clipboard-delete": "Klemborditem verwijderen",
"clipboard-history-disabled": "Klembordgeschiedenis uitgeschakeld",
"clipboard-history-disabled-description": "Schakel klembordgeschiedenis in de instellingen in of installeer cliphist",
"clipboard-loading": "Klembordgeschiedenis laden...",
"clipboard-loading-description": "Even geduld",
"clipboard-search-description": "Zoek in klembordgeschiedenis",
"command": "Commando",
"command-description": "Shell-opdrachten uitvoeren",
"command-name": "Commando",
"emoji": "Emoji-kiezer",
"emoji-loading": "Emoji's laden...",
"emoji-loading-description": "Even geduld",
"emoji-no-recent": "Nog geen recente emoji's.",
"emoji-search-description": "Zoek en kopieer emoji's"
},
"unpin": "Losmaken"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Systeemuitvoer + microfooninvoer",
"microphone-input": "Microfooninvoer",
"none": "Geen audio",
"system-output": "Systeemuitvoer"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Scrollen bij hover",
"never": "Nooit scrollen"
},
"session-menu-grid-layout": {
"grid": "Raster",
"single-row": "Enkele rij"
},
"settings-panel-mode": {
"attached": "Paneel bevestigd aan de balk",
"centered": "Gecentreerd paneel",
@@ -823,31 +889,6 @@
"select": "Selecteren",
"test": "Test"
},
"plugins": {
"applications": "Applicaties",
"calculator": "Rekenmachine",
"calculator-description": "Rekenmachine — bereken wiskundige expressies",
"calculator-enter-expression": "Voer een wiskundige expressie in",
"calculator-error": "Fout",
"calculator-name": "Rekenmachine",
"clipboard": "Klembordgeschiedenis",
"clipboard-clear-description": "Klembordgeschiedenis wissen",
"clipboard-clear-description-full": "Alle items uit de klembordgeschiedenis verwijderen",
"clipboard-clear-history": "Klembordgeschiedenis wissen",
"clipboard-delete": "Klemborditem verwijderen",
"clipboard-history-disabled": "Klembordgeschiedenis uitgeschakeld",
"clipboard-history-disabled-description": "Schakel klembordgeschiedenis in de instellingen in of installeer cliphist",
"clipboard-loading": "Klembordgeschiedenis laden...",
"clipboard-loading-description": "Even geduld",
"clipboard-search-description": "Zoek in klembordgeschiedenis",
"command": "Commando",
"command-description": "Shell-opdrachten uitvoeren",
"command-name": "Commando",
"emoji": "Emoji-kiezer",
"emoji-loading": "Emoji's laden...",
"emoji-loading-description": "Even geduld",
"emoji-search-description": "Zoek en kopieer emoji's"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Leidt kleuren af die nauw aansluiten bij de onderliggende afbeelding.",
"scheme-expressive": "Levendig palet met speelse verzadiging.",
"scheme-fidelity": "Palet met hoge getrouwheid dat brontinten behoudt.",
"scheme-fruit-salad": "Kleurrijke mix van heldere contrasterende accenten.",
"scheme-monochrome": "Minimaal palet rond één enkele tint.",
"scheme-neutral": "Gedempt palet met rustige, verzachte tonen.",
"scheme-rainbow": "Gevarieerd palet dat het volledige spectrum bestrijkt.",
"scheme-tonal-spot": "Gebalanceerd palet met gefocuste accenten."
},
"description": "Kies de methode voor het genereren van kleurenschema's die Matugen zal gebruiken om kleuren te maken van je achtergrond.",
"label": "Matugen-schema type"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Schrijf {filepath} en herlaad"
},
"zen-browser": {
"description": "Schrijf {filepath}; kopieer naar het chrome/userChrome.css bestand van je Zen profiel."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Commando dat wordt uitgevoerd bij het klikken op de annotatieknop in de klembordgeschiedenis. De afbeelding wordt naar dit commando gepiped.",
"label": "Annotatietool",
"placeholder": "e.g. 'gradia', 'satty -f -'"
},
"clip-preview": {
"description": "Toon een voorbeeld van de inhoud van het klembord bij gebruik van het >clip-commando.",
"label": "Klembordvoorbeeld inschakelen"
@@ -1826,6 +1866,10 @@
"description": "Categorieën-tabbladen weergeven voor het filteren van applicaties.",
"label": "Categorieën weergeven"
},
"show-icon-background": {
"description": "Toon een afgeronde rechthoek achtergrond achter pictogrammen.",
"label": "Toon pictogramachtergrond"
},
"sort-by-usage": {
"description": "Indien ingeschakeld, verschijnen vaak gestarte apps bovenaan in de lijst.",
"label": "Sorteren op meest gebruikt"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Bluetooth-beheer activeren.",
"label": "Bluetooth inschakelen"
"label": "Bluetooth inschakelen",
"rssi-polling": {
"description": "Periodiek de RSSI bemonsteren voor verbonden apparaten via bluetoothctl. Mogelijk niet beschikbaar voor alle apparaten; gebruikt minimale resources wanneer ingeschakeld.",
"label": "Bluetooth-signaalpolling"
}
},
"section": {
"description": "Beheer Wi-Fi- en Bluetooth-verbindingen."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Controleer je plugin-bronnen of vernieuw de lijst.",
"no-plugins-label": "Geen plug-ins beschikbaar"
},
"collision": {
"already-installed": "Deze plugin is al geïnstalleerd.",
"custom-version-exists": "Er is al een aangepaste versie van \"{source}\" geïnstalleerd.",
"official-version-exists": "De officiële versie van deze plugin is al geïnstalleerd."
},
"filter": {
"all": "Alles",
"downloaded": "Gedownload",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Geen plugins geïnstalleerd"
},
"installing": "{plugin} installeren...",
"open-plugins-tab": "Open plugininstellingen",
"plugin-settings-title": "{plugin} Instellingen",
"refresh": {
"refreshing": "Pluginlijst vernieuwen...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Plugin niet geladen",
"settings-saved": "Plugininstellingen opgeslagen",
"source": {
"custom": "Aangepaste bron",
"official": "Officieel"
},
"sources": {
"add-custom": "Aangepaste repository toevoegen",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Alles bijwerken ({count})",
"update-all-success": "Alle plugins succesvol bijgewerkt",
"update-available": "{count} plugin(s) update(s) beschikbaar",
"update-available_plural": "{count} plugin updates beschikbaar",
"update-error": "Plugin bijwerken mislukt: {plugin}: {error}",
"update-incompatible": "Vereist Noctalia v{version} of hoger",
"update-pending": "v{current} → v{new} (vereist Noctalia v{required})",
"update-success": "{plugin} is bijgewerkt naar v{version}",
"update-version": "v{huidig} → v{nieuw}",
"updating": "Bezig met updaten..."
@@ -2339,6 +2399,10 @@
"label": "Algemeen"
}
},
"large-buttons-layout": {
"description": "Kies hoe sessiemenuknoppen worden weergegeven.",
"label": "Lay-out met grote knoppen"
},
"large-buttons-style": {
"description": "Toon het sessiemenu met grote knoppen in een rasterindeling.",
"label": "Stijl met grote knoppen"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Markeerkleuren"
},
"load-average-section": {
"label": "Gemiddelde belasting"
},
"memory-section": {
"label": "Geheugengebruik"
},
@@ -2438,6 +2505,10 @@
"label": "Animatiesnelheid",
"reset": "Animatiesnelheid resetten"
},
"box-border": {
"description": "Toont een omlijning rond inhoudsgebieden.",
"label": "Containeromtrek"
},
"box-border-radius": {
"description": "Past de hoekronding aan van belangrijke lay-outsecties, zoals zijbalken, kaarten en inhoudspanelen.",
"label": "Container Radius",
@@ -2564,8 +2635,8 @@
"tooltip": "Achtergrondmap"
},
"hide-wallpaper-filenames": {
"description": "Verberg de bestandsnamen van de achtergrond in de selector.",
"label": "Bestandsnamen verbergen"
"tooltip-hide": "Bestandsnamen verbergen",
"tooltip-show": "Bestandsnamen weergeven"
},
"monitor-specific": {
"description": "Stel een andere achtergrondmap in voor elke monitor.",
@@ -2648,6 +2719,7 @@
"download": "Downloaden",
"download-speed": "Downloadsnelheid",
"gpu-temp": "GPU-temperatuur",
"load-average": "Gemiddelde belasting",
"memory": "Geheugen",
"title": "Systeemmonitor",
"upload": "Uploaden",
@@ -2664,6 +2736,7 @@
"low-desc": "De batterij is op {percent}%. Sluit de oplader aan."
},
"bluetooth": {
"address-copied": "Adres gekopieerd naar klembord",
"confirm-code": "Bevestig code {value} op het andere apparaat",
"connect-failed": "Verbinding met apparaat mislukt",
"disabled": "Uitgeschakeld",
@@ -2706,7 +2779,8 @@
"enabled": "\"Wakker houden\" ingeschakeld"
},
"keyboard-layout": {
"changed": "Toetsenbordindeling gewijzigd naar {layout}"
"changed": "Toetsenbordindeling gewijzigd naar {layout}",
"title": "Toetsenbord"
},
"kofi": {
"opened": "Ko-fi-pagina geopend in je browser"
@@ -2780,6 +2854,7 @@
"close": "Sluiten",
"collapse": "Zijbalk inklappen",
"connect-disconnect-devices": "Bluetooth-apparaat",
"copy-address": "Adres kopiëren",
"delete-notification": "Melding verwijderen",
"disable-keep-awake": "Wakker houden",
"do-not-disturb-disabled": "Niet storen",
@@ -2798,10 +2873,12 @@
"list-view": "Lijstweergave",
"manage-vpn": "VPN-verbindingen",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Maximum aantal widgets bereikt.",
"microphone-volume-at": "Microfoonvolume: {volume}%",
"move-to-center-section": "Middelste sectie",
"move-to-left-section": "Linker sectie",
"move-to-right-section": "Rechter sectie",
"move-to-section": "Ga naar {section}",
"mute": "Dempen",
"next-media": "Volgende track",
"next-month": "Volgende maand",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Nachtlicht (niet beschikbaar)",
"noctalia-performance-disabled": "Noctalia-prestatiemodus",
"noctalia-performance-enabled": "Noctalia-prestatiemodus",
"open-annotation-tool": "Openen met annotatietool",
"open-control-center": "Bedieningscentrum",
"open-notification-history-disable-dnd": "Meldingsgeschiedenis",
"open-notification-history-enable-dnd": "Meldingsgeschiedenis",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Een API-sleutel is vereist om toegang te krijgen tot NSFW-content.",
"label": "API-sleutel",
"managed-by-env": "Beheerd via de NOCTALIA_WALLHAVEN_API_KEY omgevingsvariabele.",
"placeholder": "Voer uw Wallhaven API-sleutel in"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Zoeken:",
"solid-color": {
"tooltip": "Effen kleur achtergrond"
},
"sorting": {
"date_added": "Datum toegevoegd",
"favorites": "Favorieten",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Onweer",
"unknown": "Onbekend"
},
"widget": {
"file-picker": {
"title": "Selecteer een bestand"
}
},
"widgets": {
"color-picker": {
"apply": "Toepassen",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Actie vereist",
"available-interfaces": "Beschikbare interfaces",
"available-networks": "Beschikbare netwerken",
"connect": "Verbinden",
"connected": "Verbonden",
"disabled": "Wi-Fi is uitgeschakeld",
"disconnect": "Verbreken",
"disconnected": "Verbinding verbroken",
"disconnecting": "Verbreken...",
"dns": "DNS",
"enable-message": "Schakel Wi-Fi in om beschikbare netwerken te zien.",
@@ -3042,12 +3131,15 @@
"frequency": "Frequentie",
"gateway": "Poort",
"info": "Info",
"interface": "Netwerkinterface",
"internet": "Internet",
"internet-connected": "Verbonden met internet",
"internet-limited": "Geen internet",
"internet-status": "Internetstatus",
"ipv4": "IPv4",
"known-networks": "Bekende netwerken",
"link-speed": "Link snelheid",
"no-ethernet-devices": "Geen Ethernet-apparaten gedetecteerd",
"no-networks": "Geen netwerken gevonden",
"password": "Wachtwoord",
"saved": "Opgeslagen",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Jeśli tekst wyjściowy pasuje do tej wartości, przycisk zostanie zwinięty.",
"label": "Warunek zwinięcia"
},
"color-selection": {
"description": "Zastosuj kolory motywu do ikony i tekstu.",
"label": "Wybierz kolor"
},
"display-command-output": {
"description": "Wpisz polecenie do uruchamiania w regularnych odstępach czasu. Pierwsza linia wyniku zostanie wyświetlona jako tekst.",
"label": "Wyświetl wynik polecenia",
"stream-description": "Wpisz polecenie do uruchamiania w trybie ciągłym."
},
"dynamic-text": "Dynamiczny tekst",
"enable-colorization": {
"description": "Włącz kolorowanie ikony i tekstu niestandardowego przycisku, stosując kolory motywu.",
"label": "Włącz kolorowanie"
},
"hide-mode": {
"alwaysExpanded": "Zawsze rozwinięty",
"description": "Kontroluje widoczność widżetu, gdy polecenie nie zwraca wyniku.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Wybierz sposób wyświetlania tej wartości.",
"label": "Tryb wyświetlania"
},
"show-icon": {
"description": "Wyświetl ikonę układu klawiatury.",
"label": "Pokaż ikonę"
}
},
"launcher": {
"use-primary-color": {
"description": "Po włączeniu, stosuje kolor podstawowy dla podkreślenia.",
"label": "Użyj koloru podstawowego."
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Pokaż odczyty temperatury GPU (jeśli dostępne).",
"label": "Temperatura GPU"
},
"load-average": {
"description": "Wyświetl średnie obciążenie systemu.",
"label": "Średnie obciążenie"
},
"memory-percentage": {
"description": "Pokaż użycie pamięci w procentach zamiast wartości bezwzględnych.",
"label": "Pamięć w procentach"
@@ -481,6 +503,7 @@
"device-address": "Adres urządzenia",
"disabled": "Bluetooth jest wyłączony",
"disconnect": "Odłącz",
"disconnecting": "Rozłączanie...",
"discoverable": "Wykrywalny",
"enable-message": "Włącz Bluetooth, aby zobaczyć dostępne urządzenia.",
"info": "Informacje",
@@ -494,6 +517,14 @@
"refresh-devices": "Odśwież urządzenia",
"scanning": "Skanowanie urządzeń...",
"signal": "Sygnał",
"signal-text": {
"excellent": "Sygnał: Doskonały",
"fair": "Sygnał: Dobry",
"good": "Sygnał: Dobry",
"poor": "Sygnał: Słaby",
"unknown": "Sygnał: Nieznany",
"very-poor": "Sygnał: Bardzo słaby"
},
"title": "Bluetooth",
"trusted": "Zaufany",
"unpair": "Rozłącz"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Dołącz do Discorda",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Przekaż opinię."
},
"empty": "Informacje o wydaniu nie są jeszcze dostępne.",
"highlight-title": "Najważniejsze zmiany",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Włącz Bluetooth",
"enable-dnd": "Włącz Nie przeszkadzać",
"enable-wifi": "Włącz Wi-Fi",
"launcher-settings": "Ustawienia programu uruchamiającego",
"lower-to-bottom": "Opuść na dół.",
"next": "Następny",
"open-calendar": "Otwórz kalendarz",
@@ -631,7 +664,35 @@
"webbrowser": "Przeglądarka www"
},
"delete": "Usuń",
"no-results": "Nie znaleziono wyników.",
"pin": "Przypnij",
"providers": {
"applications": "Aplikacje",
"calculator": "Kalkulator",
"calculator-deprecated": "Polecenie >calc jest przestarzałe i wkrótce zostanie usunięte. Zamiast tego wpisuj wyrażenia matematyczne bezpośrednio w wyszukiwarce.",
"calculator-description": "Kalkulator — obliczaj wyrażenia matematyczne",
"calculator-enter-expression": "Wpisz wyrażenie matematyczne",
"calculator-error": "Błąd",
"calculator-name": "Kalkulator",
"clipboard": "Historia schowka",
"clipboard-clear-description": "Wyczyść całą historię schowka",
"clipboard-clear-description-full": "Usuń wszystkie elementy z historii schowka",
"clipboard-clear-history": "Wyczyść historię schowka",
"clipboard-delete": "Usuń wpis ze schowka",
"clipboard-history-disabled": "Historia schowka wyłączona",
"clipboard-history-disabled-description": "Włącz historię schowka w ustawieniach lub zainstaluj cliphist",
"clipboard-loading": "Ładowanie historii schowka...",
"clipboard-loading-description": "Proszę czekać",
"clipboard-search-description": "Szukaj w historii schowka",
"command": "Polecenie",
"command-description": "Uruchamiaj polecenia powłoki",
"command-name": "Polecenie",
"emoji": "Wybór Emoji",
"emoji-loading": "Ładowanie emoji...",
"emoji-loading-description": "Proszę czekać",
"emoji-no-recent": "Brak ostatnich emoji.",
"emoji-search-description": "Szukaj i kopiuj emoji"
},
"unpin": "Odepnij"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Wyjście systemowe + mikrofon",
"microphone-input": "Wejście mikrofonu",
"none": "Brak dźwięku.",
"system-output": "Wyjście systemowe"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Przewijaj po najechaniu",
"never": "Nigdy nie przewijaj"
},
"session-menu-grid-layout": {
"grid": "Siatka",
"single-row": "Pojedynczy wiersz"
},
"settings-panel-mode": {
"attached": "Panel przypięty do paska",
"centered": "Panel wyśrodkowany",
@@ -823,31 +889,6 @@
"select": "Wybierz",
"test": "Test"
},
"plugins": {
"applications": "Aplikacje",
"calculator": "Kalkulator",
"calculator-description": "Kalkulator — obliczaj wyrażenia matematyczne",
"calculator-enter-expression": "Wpisz wyrażenie matematyczne",
"calculator-error": "Błąd",
"calculator-name": "Kalkulator",
"clipboard": "Historia schowka",
"clipboard-clear-description": "Wyczyść całą historię schowka",
"clipboard-clear-description-full": "Usuń wszystkie elementy z historii schowka",
"clipboard-clear-history": "Wyczyść historię schowka",
"clipboard-delete": "Usuń wpis ze schowka",
"clipboard-history-disabled": "Historia schowka wyłączona",
"clipboard-history-disabled-description": "Włącz historię schowka w ustawieniach lub zainstaluj cliphist",
"clipboard-loading": "Ładowanie historii schowka...",
"clipboard-loading-description": "Proszę czekać",
"clipboard-search-description": "Szukaj w historii schowka",
"command": "Polecenie",
"command-description": "Uruchamiaj polecenia powłoki",
"command-name": "Polecenie",
"emoji": "Wybór Emoji",
"emoji-loading": "Ładowanie emoji...",
"emoji-loading-description": "Proszę czekać",
"emoji-search-description": "Szukaj i kopiuj emoji"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Generuje kolory ściśle dopasowane do obrazu.",
"scheme-expressive": "Żywa paleta z radosnym nasyceniem.",
"scheme-fidelity": "Paleta o wysokiej wierności, zachowująca oryginalne odcienie.",
"scheme-fruit-salad": "Kolorowa mieszanka jasnych, kontrastujących akcentów.",
"scheme-monochrome": "Minimalistyczna paleta zbudowana wokół jednego odcienia.",
"scheme-neutral": "Stonowana paleta ze spokojnymi barwami.",
"scheme-rainbow": "Różnorodna paleta obejmująca pełne spektrum.",
"scheme-tonal-spot": "Zrównoważona paleta ze skupionymi akcentami."
},
"description": "Wybierz metodę generowania schematu kolorów, której Matugen użyje do tworzenia kolorów z Twojej tapety.",
"label": "Typ schematu Matugen"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Zapisz {filepath} i przeładuj"
},
"zen-browser": {
"description": "Zapisz w {filepath}; skopiuj do chrome/userChrome.css w swoim profilu Zen."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Komenda do uruchomienia po kliknięciu przycisku adnotacji w historii schowka. Obraz zostanie przekazany do tej komendy.",
"label": "Narzędzie do adnotacji",
"placeholder": "Przepraszam, nie rozumiem. Proszę podać tekst do przetłumaczenia."
},
"clip-preview": {
"description": "Pokaż podgląd zawartości schowka przy użyciu polecenia >clip.",
"label": "Włącz podgląd schowka"
@@ -1826,6 +1866,10 @@
"description": "Pokaż karty kategorii do filtrowania aplikacji.",
"label": "Pokaż kategorie"
},
"show-icon-background": {
"description": "Pokaż zaokrąglone tło prostokątne za ikonami.",
"label": "Pokaż tło ikony"
},
"sort-by-usage": {
"description": "Gdy włączone, najczęściej uruchamiane aplikacje pojawiają się na początku listy.",
"label": "Sortuj według użycia"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Włącz zarządzanie Bluetooth.",
"label": "Włącz Bluetooth"
"label": "Włącz Bluetooth",
"rssi-polling": {
"description": "Okresowo próbkuje RSSI dla podłączonych urządzeń przez bluetoothctl. Może nie być dostępne dla wszystkich urządzeń; zużywa minimalne zasoby, gdy jest włączone.",
"label": "Odpytywanie sygnału Bluetooth"
}
},
"section": {
"description": "Zarządzaj połączeniami Wi-Fi i Bluetooth."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Sprawdź źródła wtyczek lub odśwież listę.",
"no-plugins-label": "Brak dostępnych wtyczek"
},
"collision": {
"already-installed": "Ta wtyczka jest już zainstalowana.",
"custom-version-exists": "Niestandardowa wersja z \"{source}\" jest już zainstalowana.",
"official-version-exists": "Oficjalna wersja tej wtyczki jest już zainstalowana."
},
"filter": {
"all": "Wszystkie",
"downloaded": "Pobrane",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Brak zainstalowanych wtyczek"
},
"installing": "Instalowanie {plugin}...",
"open-plugins-tab": "Otwórz ustawienia wtyczek",
"plugin-settings-title": "Ustawienia {plugin}",
"refresh": {
"refreshing": "Odświeżanie listy wtyczek...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Wtyczka nie została załadowana",
"settings-saved": "Ustawienia wtyczki zapisane",
"source": {
"custom": "Źródło niestandardowe",
"official": "Oficjalny"
},
"sources": {
"add-custom": "Dodaj własne repozytorium",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Aktualizuj wszystkie ({count})",
"update-all-success": "Wszystkie wtyczki zaktualizowane pomyślnie",
"update-available": "Dostępne aktualizacje dla {count} wtyczek",
"update-available_plural": "Dostępne aktualizacje wtyczek: {count}",
"update-error": "Błąd aktualizacji wtyczki {plugin}: {error}",
"update-incompatible": "Wymaga Noctalia v{version} lub nowszej",
"update-pending": "v{bieżąca} → v{nowa} (wymaga Noctalii v{wymagana})",
"update-success": "Zaktualizowano {plugin} do v{version}",
"update-version": "v{current} → v{new}",
"updating": "Aktualizowanie {plugin}..."
@@ -2339,6 +2399,10 @@
"label": "Ogólne"
}
},
"large-buttons-layout": {
"description": "Wybierz sposób wyświetlania przycisków menu sesji.",
"label": "Układ z dużymi przyciskami"
},
"large-buttons-style": {
"description": "Wyświetlaj menu sesji z dużymi przyciskami w układzie siatki.",
"label": "Styl dużych przycisków"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Kolory podświetlenia"
},
"load-average-section": {
"label": "Średnie obciążenie"
},
"memory-section": {
"label": "Użycie pamięci"
},
@@ -2438,6 +2505,10 @@
"label": "Prędkość animacji",
"reset": "Resetuj prędkość animacji"
},
"box-border": {
"description": "Wyświetla obrys wokół obszarów zawartości.",
"label": "Obrys kontenera"
},
"box-border-radius": {
"description": "Dostosowuje zaokrąglenie narożników głównych sekcji układu, takich jak paski boczne, karty i panele treści.",
"label": "Promień kontenerów",
@@ -2564,8 +2635,8 @@
"tooltip": "Folder tapet"
},
"hide-wallpaper-filenames": {
"description": "Ukryj nazwy plików tapet w selektorze.",
"label": "Ukryj nazwy plików"
"tooltip-hide": "Ukryj nazwy plików",
"tooltip-show": "Pokaż nazwy plików"
},
"monitor-specific": {
"description": "Ustaw inny folder tapet dla każdego monitora.",
@@ -2648,6 +2719,7 @@
"download": "Pobierz",
"download-speed": "Prędkość pobierania",
"gpu-temp": "Temperatura GPU",
"load-average": "Średnie obciążenie",
"memory": "Pamięć",
"title": "Monitor systemu",
"upload": "Prześlij",
@@ -2664,6 +2736,7 @@
"low-desc": "Poziom baterii wynosi {percent}%. Podłącz ładowarkę."
},
"bluetooth": {
"address-copied": "Adres skopiowany do schowka.",
"confirm-code": "Potwierdź kod {value} na drugim urządzeniu.",
"connect-failed": "Nie udało się połączyć z urządzeniem.",
"disabled": "Wyłączony",
@@ -2706,7 +2779,8 @@
"enabled": "Włączone"
},
"keyboard-layout": {
"changed": "Układ klawiatury zmieniony na {layout}"
"changed": "Układ klawiatury zmieniony na {layout}",
"title": "Klawiatura"
},
"kofi": {
"opened": "Strona Ko-fi otwarta w przeglądarce"
@@ -2780,6 +2854,7 @@
"close": "Zamknij",
"collapse": "Zwiń pasek boczny",
"connect-disconnect-devices": "Urządzenie Bluetooth",
"copy-address": "Kopiuj adres",
"delete-notification": "Usuń powiadomienie",
"disable-keep-awake": "Nie usypiaj",
"do-not-disturb-disabled": "Nie przeszkadzać",
@@ -2798,10 +2873,12 @@
"list-view": "Widok listy",
"manage-vpn": "Połączenia VPN",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Osiągnięto maksymalną liczbę widżetów.",
"microphone-volume-at": "Głośność mikrofonu: {volume}%",
"move-to-center-section": "Sekcja środkowa",
"move-to-left-section": "Sekcja lewa",
"move-to-right-section": "Sekcja prawa",
"move-to-section": "Przejdź do {sekcja}",
"mute": "Wycisz",
"next-media": "Następny utwór",
"next-month": "Następny miesiąc",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Podświetlenie nocne (niedostępne)",
"noctalia-performance-disabled": "Tryb wydajności Noctalia",
"noctalia-performance-enabled": "Tryb wydajności Noctalia",
"open-annotation-tool": "Otwórz za pomocą narzędzia do adnotacji.",
"open-control-center": "Centrum sterowania",
"open-notification-history-disable-dnd": "Historia powiadomień",
"open-notification-history-enable-dnd": "Historia powiadomień",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Do dostępu do treści NSFW wymagany jest klucz API.",
"label": "Klucz API",
"managed-by-env": "Zarządzane za pomocą zmiennej środowiskowej NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Wprowadź swój klucz API Wallhaven."
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Szukaj",
"solid-color": {
"tooltip": "Jednolite tło kolorystyczne."
},
"sorting": {
"date_added": "Data dodania",
"favorites": "Ulubione",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Burza",
"unknown": "Nieznane"
},
"widget": {
"file-picker": {
"title": "Wybierz plik"
}
},
"widgets": {
"color-picker": {
"apply": "Zastosuj",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Wymagane działanie.",
"available-interfaces": "Dostępne interfejsy",
"available-networks": "Dostępne sieci",
"connect": "Połącz",
"connected": "Połączono",
"disabled": "Wi-Fi jest wyłączone",
"disconnect": "Odłącz",
"disconnected": "Rozłączony",
"disconnecting": "Rozłączanie...",
"dns": "DNS",
"enable-message": "Włącz Wi-Fi, aby zobaczyć dostępne sieci.",
@@ -3042,12 +3131,15 @@
"frequency": "Częstotliwość",
"gateway": "Brama",
"info": "Informacje",
"interface": "Interfejs sieciowy",
"internet": "Internet",
"internet-connected": "Połączony z internetem",
"internet-limited": "Brak internetu",
"internet-status": "Status internetu",
"ipv4": "IPv4",
"known-networks": "Znane sieci",
"link-speed": "Prędkość łącza",
"no-ethernet-devices": "Nie wykryto żadnych urządzeń Ethernet.",
"no-networks": "Nie znaleziono żadnych sieci",
"password": "Hasło",
"saved": "Zapisano",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Se o texto de saída corresponder a este valor, o botão será recolhido.",
"label": "Condição de recolhimento"
},
"color-selection": {
"description": "Aplicar cores do tema ao ícone e ao texto.",
"label": "Selecionar cor"
},
"display-command-output": {
"description": "Digite um comando para ser executado em um intervalo regular. A primeira linha da sua saída será exibida como texto.",
"label": "Exibir Saída de Comando",
"stream-description": "Insira um comando para executar continuamente."
},
"dynamic-text": "Texto dinâmico",
"enable-colorization": {
"description": "Ativar colorização para o ícone e texto do botão personalizado, aplicando cores do tema.",
"label": "Ativar colorização"
},
"hide-mode": {
"alwaysExpanded": "Sempre expandido",
"description": "Controla a visibilidade do widget quando o comando não tem saída.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Escolha como você gostaria que este valor aparecesse.",
"label": "Modo de exibição"
},
"show-icon": {
"description": "Exibir o ícone do layout do teclado.",
"label": "Mostrar ícone"
}
},
"launcher": {
"use-primary-color": {
"description": "Quando ativado, aplica a cor primária para ênfase.",
"label": "Use cores primárias"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Mostrar as leituras de temperatura da GPU, se disponíveis.",
"label": "Temperatura da GPU"
},
"load-average": {
"description": "Exibir média de carga do sistema.",
"label": "Média de carga"
},
"memory-percentage": {
"description": "Mostrar o uso de memória como percentual em vez de valores absolutos.",
"label": "Memória como percentual"
@@ -481,6 +503,7 @@
"device-address": "Endereço do dispositivo",
"disabled": "O Bluetooth está desativado",
"disconnect": "Desconectar",
"disconnecting": "Desconectando...",
"discoverable": "Visível",
"enable-message": "Ative o Bluetooth para ver os dispositivos disponíveis.",
"info": "Informações",
@@ -494,6 +517,14 @@
"refresh-devices": "Atualizar dispositivos",
"scanning": "Procurando por dispositivos...",
"signal": "Sinal",
"signal-text": {
"excellent": "Sinal: Excelente",
"fair": "Sinal: Justo",
"good": "Sinal: Bom",
"poor": "Sinal: Fraco",
"unknown": "Sinal: Desconhecido",
"very-poor": "Sinal: Muito fraco"
},
"title": "Bluetooth",
"trusted": "Confiável",
"unpair": "Desemparelhar"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Entre no nosso Discord",
"dismiss": "Ok"
"dismiss": "Ok",
"feedback": "Dar feedback"
},
"empty": "As notas da versão ainda não estão disponíveis.",
"highlight-title": "Destaques",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Ativar Bluetooth",
"enable-dnd": "Ativar Não Perturbe",
"enable-wifi": "Ativar Wi-Fi",
"launcher-settings": "Configurações do iniciador",
"lower-to-bottom": "Abaixar para o fundo",
"next": "Próximo(a)",
"open-calendar": "Abrir calendário",
@@ -631,7 +664,35 @@
"webbrowser": "Navegador web"
},
"delete": "Apagar",
"no-results": "Nenhum resultado encontrado.",
"pin": "Fixar",
"providers": {
"applications": "Aplicativos",
"calculator": "Calculadora",
"calculator-deprecated": "O comando >calc está obsoleto e será removido em breve. Por favor, digite expressões matemáticas diretamente na pesquisa.",
"calculator-description": "Calculadora — avalie expressões matemáticas",
"calculator-enter-expression": "Digite uma expressão matemática",
"calculator-error": "Erro",
"calculator-name": "Calculadora",
"clipboard": "Histórico da área de transferência",
"clipboard-clear-description": "Limpar todo o histórico da área de transferência",
"clipboard-clear-description-full": "Remover todos os itens do histórico da área de transferência",
"clipboard-clear-history": "Limpar histórico da área de transferência",
"clipboard-delete": "Apagar entrada da área de transferência",
"clipboard-history-disabled": "Histórico da área de transferência desativado",
"clipboard-history-disabled-description": "Ative o histórico da área de transferência nas configurações ou instale o cliphist",
"clipboard-loading": "Carregando histórico da área de transferência...",
"clipboard-loading-description": "Por favor, aguarde",
"clipboard-search-description": "Pesquisar no histórico da área de transferência",
"command": "Comando",
"command-description": "Executar comandos shell",
"command-name": "Comando",
"emoji": "Seletor de emojis",
"emoji-loading": "Carregando emojis...",
"emoji-loading-description": "Por favor, aguarde",
"emoji-no-recent": "Ainda não há emojis recentes.",
"emoji-search-description": "Buscar e copiar emojis"
},
"unpin": "Desafixar"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Saída do sistema + entrada do microfone",
"microphone-input": "Entrada do microfone",
"none": "No audio",
"system-output": "Saída do sistema"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Rolar ao Passar o Mouse",
"never": "Nunca Rolar"
},
"session-menu-grid-layout": {
"grid": "Grade",
"single-row": "Linha Única"
},
"settings-panel-mode": {
"attached": "Painel anexado à barra",
"centered": "Painel centralizado",
@@ -823,31 +889,6 @@
"select": "Selecionar",
"test": "Testar"
},
"plugins": {
"applications": "Aplicativos",
"calculator": "Calculadora",
"calculator-description": "Calculadora — avalie expressões matemáticas",
"calculator-enter-expression": "Digite uma expressão matemática",
"calculator-error": "Erro",
"calculator-name": "Calculadora",
"clipboard": "Histórico da área de transferência",
"clipboard-clear-description": "Limpar todo o histórico da área de transferência",
"clipboard-clear-description-full": "Remover todos os itens do histórico da área de transferência",
"clipboard-clear-history": "Limpar histórico da área de transferência",
"clipboard-delete": "Apagar entrada da área de transferência",
"clipboard-history-disabled": "Histórico da área de transferência desativado",
"clipboard-history-disabled-description": "Ative o histórico da área de transferência nas configurações ou instale o cliphist",
"clipboard-loading": "Carregando histórico da área de transferência...",
"clipboard-loading-description": "Por favor, aguarde",
"clipboard-search-description": "Pesquisar no histórico da área de transferência",
"command": "Comando",
"command-description": "Executar comandos shell",
"command-name": "Comando",
"emoji": "Seletor de emojis",
"emoji-loading": "Carregando emojis...",
"emoji-loading-description": "Por favor, aguarde",
"emoji-search-description": "Buscar e copiar emojis"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Deriva cores que correspondem de perto à imagem subjacente.",
"scheme-expressive": "Paleta vibrante com saturação divertida.",
"scheme-fidelity": "Paleta de alta fidelidade que preserva as tonalidades originais.",
"scheme-fruit-salad": "Mistura colorida de detalhes contrastantes e vibrantes.",
"scheme-monochrome": "Paleta minimalista construída em torno de uma única tonalidade.",
"scheme-neutral": "Paleta de cores neutras com tons suaves e calmantes.",
"scheme-rainbow": "Paleta diversificada abrangendo todo o espectro.",
"scheme-tonal-spot": "Paleta equilibrada com toques focais."
},
"description": "Escolha o método de geração de esquema de cores que o Matugen usará para criar cores a partir do seu papel de parede.",
"label": "Tipo de esquema Matugen"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Escrever {filepath} e recarregar"
},
"zen-browser": {
"description": "Escreva em {filepath}; copie para o chrome/userChrome.css do seu perfil Zen."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Comando para executar ao clicar no botão de anotação no histórico da área de transferência. A imagem será enviada para este comando.",
"label": "Ferramenta de anotação",
"placeholder": "gradia, satty -f -"
},
"clip-preview": {
"description": "Mostra uma pré-visualização do conteúdo da área de transferência ao usar o comando >clip.",
"label": "Ativar pré-visualização da área de transferência"
@@ -1826,6 +1866,10 @@
"description": "Mostrar abas de categorias para filtrar aplicativos.",
"label": "Mostrar categorias"
},
"show-icon-background": {
"description": "Mostrar um fundo retangular arredondado atrás dos ícones.",
"label": "Mostrar fundo do ícone"
},
"sort-by-usage": {
"description": "Quando ativado, os aplicativos mais usados aparecem primeiro na lista.",
"label": "Ordenar por mais usados"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Ativar gerenciamento de Bluetooth.",
"label": "Ativar Bluetooth"
"label": "Ativar Bluetooth",
"rssi-polling": {
"description": "Amostre periodicamente o RSSI para dispositivos conectados via bluetoothctl. Pode não estar disponível para todos os dispositivos; usa recursos mínimos quando ativado.",
"label": "Sondagem de sinal Bluetooth"
}
},
"section": {
"description": "Gerencie conexões Wi-Fi e Bluetooth."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Verifique as fontes do seu plugin ou atualize a lista.",
"no-plugins-label": "Nenhum plugin disponível."
},
"collision": {
"already-installed": "Este plugin já está instalado.",
"custom-version-exists": "Uma versão personalizada de \"{source}\" já está instalada.",
"official-version-exists": "A versão oficial deste plugin já está instalada."
},
"filter": {
"all": "Tudo",
"downloaded": "Baixado",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Nenhum plugin instalado"
},
"installing": "Instalando {plugin}...",
"open-plugins-tab": "Abrir configurações de plugins",
"plugin-settings-title": "Configurações do {plugin}",
"refresh": {
"refreshing": "Atualizando a lista de plugins...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Plugin não carregado",
"settings-saved": "Configurações do plugin salvas.",
"source": {
"custom": "Fonte personalizada",
"official": "Oficial"
},
"sources": {
"add-custom": "Adicionar repositório personalizado",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Atualizar Tudo ({count})",
"update-all-success": "Todos os plugins foram atualizados com sucesso.",
"update-available": "{count} atualização(ões) de plugin disponível(eis)",
"update-available_plural": "{count} atualizações de plugin disponíveis",
"update-error": "Falha ao atualizar o plugin: {plugin}: {error}",
"update-incompatible": "Requer Noctalia v{version} ou superior",
"update-pending": "v{atual} → v{novo} (requer Noctalia v{requerida})",
"update-success": "{plugin} atualizado para a versão {version}",
"update-version": "v{atual} → v{novo}",
"updating": "Atualizando..."
@@ -2339,6 +2399,10 @@
"label": "Geral"
}
},
"large-buttons-layout": {
"description": "Escolha como os botões do menu de sessão são exibidos.",
"label": "Layout de botões grandes"
},
"large-buttons-style": {
"description": "Exibir o menu de sessão com botões grandes em um layout de grade.",
"label": "Estilo de botões grandes"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Cores de destaque"
},
"load-average-section": {
"label": "Média de carga"
},
"memory-section": {
"label": "Uso de memória"
},
@@ -2438,6 +2505,10 @@
"label": "Velocidade da animação",
"reset": "Redefinir velocidade da animação"
},
"box-border": {
"description": "Exibe um contorno ao redor das áreas de conteúdo.",
"label": "Contorno do recipiente"
},
"box-border-radius": {
"description": "Ajusta o arredondamento dos cantos das principais seções do layout, como barras laterais, cards e painéis de conteúdo.",
"label": "Raio do Contêiner",
@@ -2564,8 +2635,8 @@
"tooltip": "Pasta de papéis de parede"
},
"hide-wallpaper-filenames": {
"description": "Ocultar nomes de arquivos de papel de parede no seletor.",
"label": "Ocultar nomes de arquivos"
"tooltip-hide": "Ocultar nomes de arquivo",
"tooltip-show": "Mostrar nomes de arquivo"
},
"monitor-specific": {
"description": "Defina uma pasta de papel de parede diferente para cada monitor.",
@@ -2648,6 +2719,7 @@
"download": "Baixar",
"download-speed": "Velocidade de Download",
"gpu-temp": "Temperatura da GPU",
"load-average": "Média de carga",
"memory": "Memória",
"title": "Monitor do Sistema",
"upload": "Enviar",
@@ -2664,6 +2736,7 @@
"low-desc": "A bateria está em {percent}%. Por favor, conecte o carregador."
},
"bluetooth": {
"address-copied": "Endereço copiado para a área de transferência",
"confirm-code": "Confirme o código {value} no outro dispositivo.",
"connect-failed": "Falha ao conectar ao dispositivo",
"disabled": "Desativado",
@@ -2706,7 +2779,8 @@
"enabled": "Ativado"
},
"keyboard-layout": {
"changed": "Layout de teclado alterado para {layout}"
"changed": "Layout de teclado alterado para {layout}",
"title": "Teclado"
},
"kofi": {
"opened": "Página do Ko-fi aberta no seu navegador"
@@ -2780,6 +2854,7 @@
"close": "Fechar",
"collapse": "Recolher barra lateral",
"connect-disconnect-devices": "Dispositivo Bluetooth",
"copy-address": "Copiar endereço",
"delete-notification": "Excluir notificação",
"disable-keep-awake": "Manter acordado",
"do-not-disturb-disabled": "Não perturbe",
@@ -2798,10 +2873,12 @@
"list-view": "Visualização em lista",
"manage-vpn": "Conexões VPN",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Número máximo de widgets atingido.",
"microphone-volume-at": "Volume do microfone: {volume}%",
"move-to-center-section": "Seção central",
"move-to-left-section": "Seção esquerda",
"move-to-right-section": "Seção direita",
"move-to-section": "Mover para {section}",
"mute": "Silenciar",
"next-media": "Próxima faixa",
"next-month": "Próximo mês",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Luz noturna (não disponível)",
"noctalia-performance-disabled": "Modo de desempenho Noctalia",
"noctalia-performance-enabled": "Modo de desempenho Noctalia",
"open-annotation-tool": "Abrir com ferramenta de anotação",
"open-control-center": "Central de controle",
"open-notification-history-disable-dnd": "Histórico de notificações",
"open-notification-history-enable-dnd": "Histórico de notificações",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "É necessária uma chave de API para acessar conteúdo NSFW.",
"label": "Chave de API",
"managed-by-env": "Gerenciado através da variável de ambiente NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Insira sua chave da API Wallhaven"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Pesquisar:",
"solid-color": {
"tooltip": "Fundo de cor sólida"
},
"sorting": {
"date_added": "Data de adição",
"favorites": "Favoritos",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Tempestade",
"unknown": "Desconhecido"
},
"widget": {
"file-picker": {
"title": "Selecione um arquivo"
}
},
"widgets": {
"color-picker": {
"apply": "Aplicar",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Ação Requerida",
"available-interfaces": "Interfaces disponíveis",
"available-networks": "Redes Disponíveis",
"connect": "Conectar",
"connected": "Conectado",
"disabled": "O Wi-Fi está desativado",
"disconnect": "Desconectar",
"disconnected": "Desconectado(a)",
"disconnecting": "Desconectando...",
"dns": "DNS",
"enable-message": "Ative o Wi-Fi para ver as redes disponíveis.",
@@ -3042,12 +3131,15 @@
"frequency": "Frequência",
"gateway": "Porta de entrada",
"info": "Informação",
"interface": "Interface de rede",
"internet": "Internet",
"internet-connected": "Conectado à internet",
"internet-limited": "Sem internet",
"internet-status": "Status da internet",
"ipv4": "IPv4",
"known-networks": "Redes Conhecidas",
"link-speed": "Velocidade de ligação",
"no-ethernet-devices": "Nenhum dispositivo Ethernet detectado.",
"no-networks": "Nenhuma rede encontrada",
"password": "Senha",
"saved": "Salva",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Если выходной текст соответствует этому значению, кнопка будет скрыта.",
"label": "Условие скрытия"
},
"color-selection": {
"description": "Применить цвета темы к значку и тексту.",
"label": "Выбрать цвет"
},
"display-command-output": {
"description": "Введите команду для регулярного выполнения. Первая строка ее вывода будет отображаться как текст.",
"label": "Вывод команды",
"stream-description": "Введите команду для непрерывного выполнения."
},
"dynamic-text": "Динамический текст",
"enable-colorization": {
"description": "Включить раскраску значка и текста пользовательской кнопки, применяя цвета темы.",
"label": "Включить раскраску"
},
"hide-mode": {
"alwaysExpanded": "Всегда раскрыт",
"description": "Управляет видимостью виджета, когда команда не имеет вывода.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Выберите, как это значение должно отображаться.",
"label": "Режим отображения"
},
"show-icon": {
"description": "Отображать значок раскладки клавиатуры.",
"label": "Показать значок"
}
},
"launcher": {
"use-primary-color": {
"description": "Если включено, использует основной цвет для выделения.",
"label": "Использовать основной цвет"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Показать показания температуры GPU, если доступны.",
"label": "Температура GPU"
},
"load-average": {
"description": "Показать среднюю нагрузку системы.",
"label": "Средняя нагрузка"
},
"memory-percentage": {
"description": "Показывать использование памяти в процентах вместо абсолютных значений.",
"label": "Память в процентах"
@@ -481,6 +503,7 @@
"device-address": "Адрес устройства",
"disabled": "Bluetooth отключен",
"disconnect": "Отключить",
"disconnecting": "Отключение...",
"discoverable": "Обнаруживаемый",
"enable-message": "Включите Bluetooth, чтобы увидеть доступные устройства.",
"info": "Информация",
@@ -494,6 +517,14 @@
"refresh-devices": "Обновить устройства",
"scanning": "Поиск устройств...",
"signal": "Сигнал",
"signal-text": {
"excellent": "Сигнал: Отличный",
"fair": "Сигнал: Средний",
"good": "Сигнал: Хороший",
"poor": "Сигнал: Плохой",
"unknown": "Сигнал: Неизвестен",
"very-poor": "Сигнал: Очень слабый"
},
"title": "Bluetooth",
"trusted": "Надёжный",
"unpair": "Разорвать пару"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Присоединиться к нашему Discord",
"dismiss": "Ок"
"dismiss": "Ок",
"feedback": "Оставьте отзыв"
},
"empty": "Примечания к выпуску пока недоступны.",
"highlight-title": "Основные изменения",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Включить Bluetooth",
"enable-dnd": "Не беспокоить",
"enable-wifi": "Включить Wi-Fi",
"launcher-settings": "Настройки лаунчера",
"lower-to-bottom": "Опустить до дна",
"next": "Следующий",
"open-calendar": "Открыть календарь",
@@ -631,7 +664,35 @@
"webbrowser": "Веб-браузер"
},
"delete": "Удалить",
"no-results": "Ничего не найдено.",
"pin": "Закрепить",
"providers": {
"applications": "Приложения",
"calculator": "Калькулятор",
"calculator-deprecated": "Команда >calc устарела и скоро будет удалена. Пожалуйста, вводите математические выражения прямо в поиск.",
"calculator-description": "Калькулятор — вычисление математических выражений",
"calculator-enter-expression": "Введите математическое выражение",
"calculator-error": "Ошибка",
"calculator-name": "Калькулятор",
"clipboard": "История буфера обмена",
"clipboard-clear-description": "Очистить всю историю буфера обмена",
"clipboard-clear-description-full": "Удалить все элементы из истории буфера обмена",
"clipboard-clear-history": "Очистить историю буфера обмена",
"clipboard-delete": "Удалить запись из буфера обмена",
"clipboard-history-disabled": "История буфера обмена отключена",
"clipboard-history-disabled-description": "Включите историю буфера обмена в настройках или установите cliphist",
"clipboard-loading": "Загрузка истории буфера обмена...",
"clipboard-loading-description": "Пожалуйста, подождите",
"clipboard-search-description": "Поиск в истории буфера обмена",
"command": "Команда",
"command-description": "Выполнять команды оболочки",
"command-name": "Команда",
"emoji": "Выбор эмодзи",
"emoji-loading": "Загрузка эмодзи...",
"emoji-loading-description": "Пожалуйста, подождите",
"emoji-no-recent": "Недавних эмодзи пока нет.",
"emoji-search-description": "Поиск и копирование эмодзи"
},
"unpin": "Открепить"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Системный вывод + ввод с микрофона",
"microphone-input": "Ввод с микрофона",
"none": "Нет звука",
"system-output": "Системный вывод"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Прокручивать при наведении",
"never": "Никогда не прокручивать"
},
"session-menu-grid-layout": {
"grid": "Сетка",
"single-row": "Один ряд"
},
"settings-panel-mode": {
"attached": "Панель прикреплена к панели",
"centered": "Центрированная панель",
@@ -823,31 +889,6 @@
"select": "Выбрать",
"test": "Тест"
},
"plugins": {
"applications": "Приложения",
"calculator": "Калькулятор",
"calculator-description": "Калькулятор — вычисление математических выражений",
"calculator-enter-expression": "Введите математическое выражение",
"calculator-error": "Ошибка",
"calculator-name": "Калькулятор",
"clipboard": "История буфера обмена",
"clipboard-clear-description": "Очистить всю историю буфера обмена",
"clipboard-clear-description-full": "Удалить все элементы из истории буфера обмена",
"clipboard-clear-history": "Очистить историю буфера обмена",
"clipboard-delete": "Удалить запись из буфера обмена",
"clipboard-history-disabled": "История буфера обмена отключена",
"clipboard-history-disabled-description": "Включите историю буфера обмена в настройках или установите cliphist",
"clipboard-loading": "Загрузка истории буфера обмена...",
"clipboard-loading-description": "Пожалуйста, подождите",
"clipboard-search-description": "Поиск в истории буфера обмена",
"command": "Команда",
"command-description": "Выполнять команды оболочки",
"command-name": "Команда",
"emoji": "Выбор эмодзи",
"emoji-loading": "Загрузка эмодзи...",
"emoji-loading-description": "Пожалуйста, подождите",
"emoji-search-description": "Поиск и копирование эмодзи"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Выводит цвета, которые максимально соответствуют основному изображению.",
"scheme-expressive": "Яркая палитра с игривой насыщенностью.",
"scheme-fidelity": "Палитра высокой точности, сохраняющая исходные оттенки.",
"scheme-fruit-salad": "Красочное сочетание ярких контрастных акцентов.",
"scheme-monochrome": "Минимальная палитра, построенная вокруг одного оттенка.",
"scheme-neutral": "Приглушенная палитра сдержанных и успокаивающих тонов.",
"scheme-rainbow": "Разнообразная палитра, охватывающая весь спектр.",
"scheme-tonal-spot": "Сбалансированная палитра с сфокусированными акцентами."
},
"description": "Выберите метод генерации цветовой схемы, который Matugen будет использовать для создания цветов из ваших обоев.",
"label": "Тип схемы Matugen"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Записать {filepath} и перезагрузить"
},
"zen-browser": {
"description": "Запишите в {filepath}; скопируйте в chrome/userChrome.css вашего профиля Zen."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Команда для запуска при нажатии кнопки аннотирования в истории буфера обмена. Изображение будет передано в эту команду.",
"label": "Инструмент аннотирования",
"placeholder": "градия, сатти -ф -"
},
"clip-preview": {
"description": "Показывать предварительный просмотр содержимого буфера обмена при использовании команды >clip.",
"label": "Включить предварительный просмотр буфера обмена"
@@ -1826,6 +1866,10 @@
"description": "Показывать вкладки категорий для фильтрации приложений.",
"label": "Показывать категории"
},
"show-icon-background": {
"description": "Показывать закругленный прямоугольник в качестве фона для иконок.",
"label": "Показать фон значка"
},
"sort-by-usage": {
"description": "Если включено, часто запускаемые приложения появляются в списке первыми.",
"label": "Сортировать по частоте использования"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Включить управление Bluetooth.",
"label": "Включить Bluetooth"
"label": "Включить Bluetooth",
"rssi-polling": {
"description": "Периодически опрашивать RSSI для подключенных устройств через bluetoothctl. Может быть недоступно для всех устройств; использует минимальные ресурсы при включении.",
"label": "Опрос сигнала Bluetooth"
}
},
"section": {
"description": "Управление Wi-Fi и Bluetooth подключениями."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Проверьте исходники вашего плагина или обновите список.",
"no-plugins-label": "Нет доступных плагинов."
},
"collision": {
"already-installed": "Этот плагин уже установлен.",
"custom-version-exists": "Пользовательская версия из \"{source}\" уже установлена.",
"official-version-exists": "Официальная версия этого плагина уже установлена."
},
"filter": {
"all": "Всё",
"downloaded": "Скачано",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Нет установленных плагинов"
},
"installing": "Установка {plugin}...",
"open-plugins-tab": "Открыть настройки плагинов",
"plugin-settings-title": "Настройки {plugin}",
"refresh": {
"refreshing": "Обновление списка плагинов...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Плагин не загружен",
"settings-saved": "Настройки плагина сохранены",
"source": {
"custom": "Пользовательский источник",
"official": "Официальный"
},
"sources": {
"add-custom": "Добавить пользовательский репозиторий",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Обновить все ({count})",
"update-all-success": "Все плагины успешно обновлены.",
"update-available": "Доступно {count} обновлений плагинов",
"update-available_plural": "Доступно {count} обновлений плагинов",
"update-error": "Не удалось обновить плагин: {plugin}: {error}",
"update-incompatible": "Требуется Noctalia v{version} или выше",
"update-pending": "v{current} → v{new} (требуется Noctalia v{required})",
"update-success": "Плагин {plugin} обновлён до версии {version}",
"update-version": "v{текущее} → v{новое}",
"updating": "Обновление..."
@@ -2339,6 +2399,10 @@
"label": "Общие"
}
},
"large-buttons-layout": {
"description": "Выберите способ отображения кнопок меню сеанса.",
"label": "Крупная раскладка кнопок"
},
"large-buttons-style": {
"description": "Отобразить меню сеанса с большими кнопками в виде сетки.",
"label": "Стиль \"крупные кнопки\""
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Цвета выделения"
},
"load-average-section": {
"label": "Средняя нагрузка"
},
"memory-section": {
"label": "Использование памяти"
},
@@ -2438,6 +2505,10 @@
"label": "Скорость анимации",
"reset": "Сбросить скорость анимации"
},
"box-border": {
"description": "Отображает контур вокруг областей содержимого.",
"label": "Контур контейнера"
},
"box-border-radius": {
"description": "Настраивает скругление углов основных разделов макета, таких как боковые панели, карточки и панели контента.",
"label": "Радиус контейнера",
@@ -2564,8 +2635,8 @@
"tooltip": "Папка с обоями"
},
"hide-wallpaper-filenames": {
"description": "Скрыть имена файлов обоев в селекторе.",
"label": "Скрыть имена файлов"
"tooltip-hide": "Скрыть имена файлов",
"tooltip-show": "Показать имена файлов"
},
"monitor-specific": {
"description": "Установить отдельную папку с обоями для каждого монитора.",
@@ -2648,6 +2719,7 @@
"download": "Скачать",
"download-speed": "Скорость загрузки",
"gpu-temp": "Температура GPU",
"load-average": "Средняя нагрузка",
"memory": "Память",
"title": "Системный монитор",
"upload": "Загрузить",
@@ -2664,6 +2736,7 @@
"low-desc": "Заряд батареи {percent}%. Пожалуйста, подключите зарядное устройство."
},
"bluetooth": {
"address-copied": "Адрес скопирован в буфер обмена",
"confirm-code": "Подтвердите код {value} на другом устройстве.",
"connect-failed": "Не удалось подключиться к устройству",
"disabled": "Отключен",
@@ -2706,7 +2779,8 @@
"enabled": "Включен"
},
"keyboard-layout": {
"changed": "Раскладка клавиатуры изменена на {layout}"
"changed": "Раскладка клавиатуры изменена на {layout}",
"title": "Клавиатура"
},
"kofi": {
"opened": "Страница Ko-fi открыта в вашем браузере"
@@ -2780,6 +2854,7 @@
"close": "Закрыть",
"collapse": "Свернуть боковую панель",
"connect-disconnect-devices": "Устройство Bluetooth",
"copy-address": "Копировать адрес",
"delete-notification": "Удалить уведомление",
"disable-keep-awake": "Не засыпать",
"do-not-disturb-disabled": "Не беспокоить",
@@ -2798,10 +2873,12 @@
"list-view": "Вид списком",
"manage-vpn": "VPN-подключения",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Достигнуто максимальное количество виджетов.",
"microphone-volume-at": "Громкость микрофона: {volume}%",
"move-to-center-section": "Центральная секция",
"move-to-left-section": "Левая секция",
"move-to-right-section": "Правая секция",
"move-to-section": "Перейти к {section}",
"mute": "Отключить звук",
"next-media": "Следующий трек",
"next-month": "Следующий месяц",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Ночной свет (недоступен)",
"noctalia-performance-disabled": "Режим производительности Noctalia",
"noctalia-performance-enabled": "Режим производительности Noctalia",
"open-annotation-tool": "Открыть с помощью инструмента аннотирования",
"open-control-center": "Центр управления",
"open-notification-history-disable-dnd": "История уведомлений",
"open-notification-history-enable-dnd": "История уведомлений",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Для доступа к контенту NSFW требуется ключ API.",
"label": "Ключ API",
"managed-by-env": "Управляется через переменную окружения NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Введите свой API-ключ Wallhaven"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Поиск:",
"solid-color": {
"tooltip": "Однотонный фон"
},
"sorting": {
"date_added": "Дата добавления",
"favorites": "Избранное",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Гроза",
"unknown": "Неизвестно"
},
"widget": {
"file-picker": {
"title": "Выберите файл"
}
},
"widgets": {
"color-picker": {
"apply": "Применить",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Требуется действие",
"available-interfaces": "Доступные интерфейсы",
"available-networks": "Доступные сети",
"connect": "Подключить",
"connected": "Подключено",
"disabled": "Wi-Fi отключен",
"disconnect": "Отключить",
"disconnected": "Отключено",
"disconnecting": "Отключение...",
"dns": "DNS",
"enable-message": "Включите Wi-Fi, чтобы увидеть доступные сети.",
@@ -3042,12 +3131,15 @@
"frequency": "Частота",
"gateway": "Шлюз",
"info": "Информация",
"interface": "Сетевой интерфейс",
"internet": "Интернет",
"internet-connected": "Подключено к интернету",
"internet-limited": "Нет интернета",
"internet-status": "Статус подключения к интернету",
"ipv4": "IPv4",
"known-networks": "Известные сети",
"link-speed": "Скорость соединения",
"no-ethernet-devices": "Ethernet-устройства не обнаружены",
"no-networks": "Сети не найдены",
"password": "Пароль",
"saved": "Сохранено",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Çıktı metni bu değerle eşleşirse düğme daralacak.",
"label": "Daralma durumu"
},
"color-selection": {
"description": "Tema renklerini simgeye ve metne uygula.",
"label": "Renk seç"
},
"display-command-output": {
"description": "Düzenli aralıklarla çalıştırılacak bir komut girin. Çıktısının ilk satırı metin olarak gösterilecektir.",
"label": "Komut Çıktısını Göster",
"stream-description": "Sürekli çalıştırılacak bir komut girin."
},
"dynamic-text": "Hareketli metin",
"enable-colorization": {
"description": "Özel düğme simgesi ve metni için renklendirmeyi etkinleştir, tema renklerini uygula.",
"label": "Renklendirmeyi etkinleştir"
},
"hide-mode": {
"alwaysExpanded": "Her zaman geniş",
"description": "Komutun çıktı vermemesi durumunda gerecin görünürlüğünü kontrol eder.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Bu değerin nasıl görünmesini istediğinizi seçin.",
"label": "Görüntüleme modu"
},
"show-icon": {
"description": "Klavye düzeni simgesini görüntüle.",
"label": "Simgeyi göster"
}
},
"launcher": {
"use-primary-color": {
"description": "Etkinleştirildiğinde, vurgu için birincil rengi uygular.",
"label": "Ana renk kullan."
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "GPU sıcaklık değerleri varsa göster.",
"label": "GPU sıcaklığı"
},
"load-average": {
"description": "Sistem ortalama yükünü göster.",
"label": "Ortalama yük"
},
"memory-percentage": {
"description": "Mutlak değerler yerine bellek kullanımını yüzde olarak göster.",
"label": "Bellek yüzde olarak"
@@ -481,6 +503,7 @@
"device-address": "Cihaz adresi",
"disabled": "Bluetooth devre dışı",
"disconnect": "Bağlantıyı Kes",
"disconnecting": "Bağlantı kesiliyor...",
"discoverable": "Keşfedilebilir",
"enable-message": "Mevcut cihazları görmek için Bluetooth'u etkinleştirin.",
"info": "Bilgi",
@@ -494,6 +517,14 @@
"refresh-devices": "Cihazları yenile",
"scanning": "Cihazlar tarınıyor...",
"signal": "Sinyal",
"signal-text": {
"excellent": "Sinyal: Mükemmel",
"fair": "Sinyal: Adil",
"good": "Sinyal: İyi",
"poor": "Sinyal: Zayıf",
"unknown": "Sinyal: Bilinmiyor",
"very-poor": "Sinyal: Çok zayıf"
},
"title": "Bluetooth",
"trusted": "Güvenilir",
"unpair": "Eşleştirmeyi kaldır"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Discord sunucumuza katıl",
"dismiss": "Tamam"
"dismiss": "Tamam",
"feedback": "Geri bildirim verin"
},
"empty": "Sürüm notları henüz hazır değil.",
"highlight-title": "Öne çıkanlar",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Bluetooth'u etkinleştir",
"enable-dnd": "Rahatsız Etmeyin'i Etkinleştir",
"enable-wifi": "Kablosuz Bağlantıyı etkinleştir",
"launcher-settings": "Başlatıcı ayarları",
"lower-to-bottom": "Alta doğru alçalt",
"next": "Sonraki",
"open-calendar": "Takvimi aç",
@@ -631,7 +664,35 @@
"webbrowser": "Tarayıcı"
},
"delete": "Sil",
"no-results": "Sonuç bulunamadı",
"pin": "Sabitle",
"providers": {
"applications": "Uygulamalar",
"calculator": "Hesap makinesi",
"calculator-deprecated": ">calc komutu kullanımdan kaldırılmıştır ve yakında kaldırılacaktır. Lütfen matematiksel ifadeleri doğrudan aramaya yazın.",
"calculator-description": "Hesap makinesi — matematiksel ifadeleri hesapla",
"calculator-enter-expression": "Matematiksel bir ifade girin",
"calculator-error": "Hata",
"calculator-name": "Hesap makinesi",
"clipboard": "Panoya geçmiş",
"clipboard-clear-description": "Tüm panoya geçmişini temizle",
"clipboard-clear-description-full": "Tüm öğeleri panoya geçmişinden kaldır",
"clipboard-clear-history": "Panoya geçmişini temizle",
"clipboard-delete": "Panodaki öğeyi sil",
"clipboard-history-disabled": "Panoya geçmişi devre dışı",
"clipboard-history-disabled-description": "Panoya geçmişini ayarlarda etkinleştir veya cliphist kur",
"clipboard-loading": "Panoya geçmişi yükleniyor...",
"clipboard-loading-description": "Lütfen bekleyin",
"clipboard-search-description": "Panoya geçmişini ara",
"command": "Komut",
"command-description": "Kabuk komutlarını çalıştır",
"command-name": "Komut",
"emoji": "Emoji seçici",
"emoji-loading": "Emojiler yükleniyor...",
"emoji-loading-description": "Lütfen bekleyin",
"emoji-no-recent": "Henüz yeni emoji yok",
"emoji-search-description": "Emoji arama ve kopyalama"
},
"unpin": "Sabitlemeyi kaldır"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Sistem çıktısı + mikrofon girişi",
"microphone-input": "Mikrofon girişi",
"none": "Ses yok.",
"system-output": "Sistem çıktısı"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Üzerine Gelince Kaydır",
"never": "Asla Kaydırma"
},
"session-menu-grid-layout": {
"grid": "Izgara",
"single-row": "Tek Sıra"
},
"settings-panel-mode": {
"attached": "Panel çubuğa takılı",
"centered": "Ortalanmış panel",
@@ -823,31 +889,6 @@
"select": "Seç",
"test": "Test"
},
"plugins": {
"applications": "Uygulamalar",
"calculator": "Hesap makinesi",
"calculator-description": "Hesap makinesi — matematiksel ifadeleri hesapla",
"calculator-enter-expression": "Matematiksel bir ifade girin",
"calculator-error": "Hata",
"calculator-name": "Hesap makinesi",
"clipboard": "Panoya geçmiş",
"clipboard-clear-description": "Tüm panoya geçmişini temizle",
"clipboard-clear-description-full": "Tüm öğeleri panoya geçmişinden kaldır",
"clipboard-clear-history": "Panoya geçmişini temizle",
"clipboard-delete": "Panodaki öğeyi sil",
"clipboard-history-disabled": "Panoya geçmişi devre dışı",
"clipboard-history-disabled-description": "Panoya geçmişini ayarlarda etkinleştir veya cliphist kur",
"clipboard-loading": "Panoya geçmişi yükleniyor...",
"clipboard-loading-description": "Lütfen bekleyin",
"clipboard-search-description": "Panoya geçmişini ara",
"command": "Komut",
"command-description": "Kabuk komutlarını çalıştır",
"command-name": "Komut",
"emoji": "Emoji seçici",
"emoji-loading": "Emojiler yükleniyor...",
"emoji-loading-description": "Lütfen bekleyin",
"emoji-search-description": "Emoji arama ve kopyalama"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Temel görüntüye yakın renkler türetir.",
"scheme-expressive": "Oyuncak doygunlukla canlı palet.",
"scheme-fidelity": "Kaynak tonlarını koruyan yüksek sadakatli palet.",
"scheme-fruit-salad": "Canlı kontrast aksanların renkli karışımı.",
"scheme-monochrome": "Tek bir ton etrafında inşa edilmiş minimal palet.",
"scheme-neutral": "Sakinleştirici ve bastırılmış tonlarla yumuşak palet.",
"scheme-rainbow": "Tam spektrumu kapsayan çeşitli palet.",
"scheme-tonal-spot": "Odaklanmış aksanlarla dengeli palet."
},
"description": "Matugen'in duvar kağıdınızdan renkler oluşturmak için kullanacağı renk şeması oluşturma yöntemini seçin.",
"label": "Matugen şema türü"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "{filepath} dosyasına yaz ve yeniden yükle"
},
"zen-browser": {
"description": "{dosya yolu} yazın; Zen profilinizin chrome/userChrome.css dosyasına kopyalayın."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Panodaki geçmişte açıklama ekle düğmesine tıklandığında çalıştırılacak komut. Görüntü bu komuta yönlendirilecektir.",
"label": "Açıklama aracı",
"placeholder": "gradia, satty -f -"
},
"clip-preview": {
"description": ">clip komutu kullanılırken panodaki içeriğin önizlemesini gösterir.",
"label": "Panoyu önizlemeyi etkinleştir"
@@ -1826,6 +1866,10 @@
"description": "Uygulamaları filtrelemek için kategori sekmelerini göster.",
"label": "Kategorileri göster"
},
"show-icon-background": {
"description": "Simgelerin arkasında yuvarlak köşeli dikdörtgen bir arka plan göster.",
"label": "Simge arka planını göster"
},
"sort-by-usage": {
"description": "Etkinleştirildiğinde, sıkça başlatılan uygulamalar listede ilk olarak görünür.",
"label": "En çok kullanılana göre sırala"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Bluetooth yönetimini etkinleştir.",
"label": "Bluetooth'u Etkinleştir"
"label": "Bluetooth'u Etkinleştir",
"rssi-polling": {
"description": "Bağlı cihazlar için RSSI'yı bluetoothctl aracılığıyla periyodik olarak örnekleyin. Tüm cihazlar için mevcut olmayabilir; etkinleştirildiğinde minimum kaynak kullanır.",
"label": "Bluetooth sinyal yoklaması"
}
},
"section": {
"description": "Kablosuz ve Bluetooth bağlantılarını yönetin."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Eklenti kaynaklarınızı kontrol edin veya listeyi yenileyin.",
"no-plugins-label": "Kullanılabilir eklenti yok"
},
"collision": {
"already-installed": "Bu eklenti zaten yüklü.",
"custom-version-exists": "\"{source}\" kaynağından özel bir sürüm zaten yüklü.",
"official-version-exists": "Bu eklentinin resmi sürümü zaten yüklü."
},
"filter": {
"all": "Tüm",
"downloaded": "İndirildi",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Eklenti kurulu değil"
},
"installing": "{eklenti} kuruluyor...",
"open-plugins-tab": "Eklenti ayarlarına git",
"plugin-settings-title": "{plugin} Ayarları",
"refresh": {
"refreshing": "Eklenti listesi yenileniyor...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Eklenti yüklenmedi",
"settings-saved": "Eklenti ayarları kaydedildi.",
"source": {
"custom": "Özel kaynak",
"official": "Resmi"
},
"sources": {
"add-custom": "Özel depo ekle",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Tümünü Güncelle ({count})",
"update-all-success": "Tüm eklentiler başarıyla güncellendi.",
"update-available": "{count} eklenti için güncelleme mevcut",
"update-available_plural": "{count} eklenti güncellemesi mevcut",
"update-error": "Eklenti güncellenemedi: {plugin}: {error}",
"update-incompatible": "Noctalia v{version} veya üzeri gerektirir.",
"update-pending": "v{mevcut} → v{yeni} (Noctalia v{gerekli} gerektirir)",
"update-success": "{plugin} v{version} sürümüne güncellendi",
"update-version": "v{mevcut} → v{yeni}",
"updating": "Güncelleniyor..."
@@ -2339,6 +2399,10 @@
"label": "Genel"
}
},
"large-buttons-layout": {
"description": "Oturum menüsü düğmelerinin nasıl görüntüleneceğini seçin.",
"label": "Büyük düğme düzeni"
},
"large-buttons-style": {
"description": "Oturum menüsünü büyük butonlarla ızgara düzeninde görüntüle.",
"label": "Büyük düğme stili"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Vurgulama Renkleri"
},
"load-average-section": {
"label": "Ortalama yük"
},
"memory-section": {
"label": "Bellek Kullanımı"
},
@@ -2438,6 +2505,10 @@
"label": "Animasyon hızı",
"reset": "Animasyon hızını sıfırla"
},
"box-border": {
"description": "İçerik alanlarının etrafında bir çerçeve görüntüler.",
"label": "Konteyner ana hattı"
},
"box-border-radius": {
"description": "Kenar çubukları, kartlar ve içerik panelleri gibi ana düzen bölümlerinin köşe yuvarlaklığını ayarlar.",
"label": "Konteyner Yarıçapı",
@@ -2564,8 +2635,8 @@
"tooltip": "Duvar kâğıdı klasörü"
},
"hide-wallpaper-filenames": {
"description": "Seçicide duvar kâğıdı dosya adlarını gizle.",
"label": "Dosya adlarını gizle"
"tooltip-hide": "Dosya adlarını gizleme",
"tooltip-show": "Dosya Adlarını Göster"
},
"monitor-specific": {
"description": "Her ekran için farklı bir duvar kâğıdı klasörü ayarlayın.",
@@ -2648,6 +2719,7 @@
"download": "İndir",
"download-speed": "İndirme Hızı",
"gpu-temp": "GPU Sıcaklığı",
"load-average": "Ortalama yük",
"memory": "Hafıza",
"title": "Sistem İzleyici",
"upload": "Yükle",
@@ -2664,6 +2736,7 @@
"low-desc": "Batarya % {percent}. Lütfen şarj bağlantısını yapın."
},
"bluetooth": {
"address-copied": "Adres panoya kopyalandı",
"confirm-code": "Diğer cihazdaki {value} kodunu onayla",
"connect-failed": "Cihaza bağlanılamadı",
"disabled": "Devre dışı",
@@ -2706,7 +2779,8 @@
"enabled": "Etkin"
},
"keyboard-layout": {
"changed": "Klavye düzeni {layout} olarak değiştirildi"
"changed": "Klavye düzeni {layout} olarak değiştirildi",
"title": "Klavye"
},
"kofi": {
"opened": "Ko-fi sayfası tarayıcınızda açıldı"
@@ -2780,6 +2854,7 @@
"close": "Kapat",
"collapse": "Kenar çubuğunu daralt",
"connect-disconnect-devices": "Bluetooth cihazı",
"copy-address": "Adresi kopyala",
"delete-notification": "Bildiriyi sil",
"disable-keep-awake": "Uyanık kal",
"do-not-disturb-disabled": "Rahatsız etme",
@@ -2798,10 +2873,12 @@
"list-view": "Liste görünümü",
"manage-vpn": "VPN bağlantıları",
"manage-wifi": "Kablosuz Bağlantı",
"max-widgets-reached": "Maksimum araç sayısına ulaşıldı.",
"microphone-volume-at": "Mikrofon sesi: %{volume}",
"move-to-center-section": "Orta bölüm",
"move-to-left-section": "Sol bölüm",
"move-to-right-section": "Sağ bölüm",
"move-to-section": "{section} bölümüne git.",
"mute": "Sessiz",
"next-media": "Sonraki parça",
"next-month": "Sonraki ay",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Gece ışığı (mevcut değil)",
"noctalia-performance-disabled": "Noctalia performans modu",
"noctalia-performance-enabled": "Noctalia performans modu",
"open-annotation-tool": "Açıklama aracıyla aç",
"open-control-center": "Kontrol merkezi",
"open-notification-history-disable-dnd": "Bildirim geçmişi",
"open-notification-history-enable-dnd": "Bildirim geçmişi",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "NSFW içeriğe erişmek için bir API anahtarı gereklidir.",
"label": "API Anahtarı",
"managed-by-env": "NOCTALIA_WALLHAVEN_API_KEY ortam değişkeni aracılığıyla yönetilir.",
"placeholder": "Wallhaven API Anahtarınızı girin"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Ara:",
"solid-color": {
"tooltip": "Düz renk arka plan"
},
"sorting": {
"date_added": "Eklenme tarihi",
"favorites": "Favoriler",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Fırtına",
"unknown": "Bilinmiyor"
},
"widget": {
"file-picker": {
"title": "Bir dosya seçin"
}
},
"widgets": {
"color-picker": {
"apply": "Uygula",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Eylem gerekiyor",
"available-interfaces": "Kullanılabilir arayüzler",
"available-networks": "Kullanılabilir Ağlar",
"connect": "Bağlan",
"connected": "Bağlı",
"disabled": "Kablosuz Bağlantı devre dışı",
"disconnect": "Bağlantıyı kes",
"disconnected": "Bağlantı kesildi",
"disconnecting": "Bağlantı kesiliyor...",
"dns": "DNS",
"enable-message": "Mevcut ağları görmek için kablosuz bağlantıyı etkinleştirin.",
@@ -3042,12 +3131,15 @@
"frequency": "Frekans",
"gateway": "Geçit",
"info": "Bilgi",
"interface": "Ağ arayüzü",
"internet": "İnternet",
"internet-connected": "İnternete bağlı",
"internet-limited": "İnternet yok",
"internet-status": "İnternet durumu",
"ipv4": "IPv4",
"known-networks": "Bilinen Ağlar",
"link-speed": "Bağlantı hızı",
"no-ethernet-devices": "Ethernet aygıtı algılanmadı",
"no-networks": "Ağ bulunamadı",
"password": "Parola",
"saved": "Kaydedildi",
+132 -40
View File
@@ -142,12 +142,20 @@
"description": "Якщо вихідний текст збігається з цим значенням, кнопка згорнеться.",
"label": "Умова згортання"
},
"color-selection": {
"description": "Застосувати кольори теми до значка та тексту.",
"label": "Вибрати колір"
},
"display-command-output": {
"description": "Введіть команду для запуску з регулярним інтервалом. Перший рядок її виведення відображатиметься як текст.",
"label": "Відображати виведення команди",
"stream-description": "Введіть команду для безперервного запуску."
},
"dynamic-text": "Динамічний текст",
"enable-colorization": {
"description": "Увімкнути розфарбовування для значка та тексту власної кнопки, застосовуючи кольори теми.",
"label": "Увімкнути розфарбовування"
},
"hide-mode": {
"alwaysExpanded": "Завжди розширено",
"description": "Контролює видимість віджета, коли команда не має виведення.",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "Виберіть, як ви хочете, щоб це значення відображалося.",
"label": "Режим відображення"
},
"show-icon": {
"description": "Показувати піктограму розкладки клавіатури.",
"label": "Показати значок"
}
},
"launcher": {
"use-primary-color": {
"description": "Якщо ввімкнено, це застосовує основний колір для підкреслення.",
"label": "Використовуйте основний колір"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "Показувати показники температури GPU, якщо доступні.",
"label": "Температура GPU"
},
"load-average": {
"description": "Показати середнє навантаження системи.",
"label": "Середнє навантаження"
},
"memory-percentage": {
"description": "Показувати використання пам'яті у відсотках замість абсолютних значень.",
"label": "Пам'ять у відсотках"
@@ -481,6 +503,7 @@
"device-address": "Адреса пристрою",
"disabled": "Bluetooth вимкнено",
"disconnect": "Відключити",
"disconnecting": "Відключення...",
"discoverable": "Виявний",
"enable-message": "Увімкніть Bluetooth, щоб побачити доступні пристрої.",
"info": "Інформація",
@@ -494,6 +517,14 @@
"refresh-devices": "Оновити пристрої",
"scanning": "Сканування пристроїв...",
"signal": "Сигнал",
"signal-text": {
"excellent": "Сигнал: Відмінний",
"fair": "Сигнал: Задовільний",
"good": "Сигнал: Добре",
"poor": "Сигнал: Поганий",
"unknown": "Сигнал: Невідомий",
"very-poor": "Сигнал: Дуже слабкий"
},
"title": "Bluetooth",
"trusted": "Надійний",
"unpair": "Розірвати пару"
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "Приєднатися до нашого Discord",
"dismiss": "Ок"
"dismiss": "Ок",
"feedback": "Надати відгук"
},
"empty": "Примітки до релізу ще недоступні.",
"highlight-title": "Основні зміни",
@@ -573,6 +605,7 @@
"enable-bluetooth": "Увімкнути Bluetooth",
"enable-dnd": "Увімкнути режим \"Не турбувати\"",
"enable-wifi": "Увімкнути Wi-Fi",
"launcher-settings": "Налаштування панелі запуску",
"lower-to-bottom": "Опустити донизу",
"next": "Наступний",
"open-calendar": "Відкрити календар",
@@ -631,7 +664,35 @@
"webbrowser": "Веб-браузер"
},
"delete": "Видалити",
"no-results": "Результатів не знайдено",
"pin": "Закріпити",
"providers": {
"applications": "Застосунки",
"calculator": "Калькулятор",
"calculator-deprecated": "Команда >calc застаріла і скоро буде видалена. Будь ласка, введіть математичні вирази безпосередньо в пошуку.",
"calculator-description": "Калькулятор — обчислення математичних виразів",
"calculator-enter-expression": "Введіть математичний вираз",
"calculator-error": "Помилка",
"calculator-name": "Калькулятор",
"clipboard": "Історія буфера обміну",
"clipboard-clear-description": "Очистити всю історію буфера обміну",
"clipboard-clear-description-full": "Видалити всі елементи з історії буфера обміну",
"clipboard-clear-history": "Очистити історію буфера обміну",
"clipboard-delete": "Видалити запис з буфера обміну",
"clipboard-history-disabled": "Історія буфера обміну вимкнена",
"clipboard-history-disabled-description": "Увімкніть історію буфера обміну в налаштуваннях або встановіть cliphist",
"clipboard-loading": "Завантаження історії буфера обміну...",
"clipboard-loading-description": "Зачекайте, будь ласка",
"clipboard-search-description": "Пошук в історії буфера обміну",
"command": "Команда",
"command-description": "Виконати команди оболонки",
"command-name": "Команда",
"emoji": "Обрати емодзі",
"emoji-loading": "Завантаження емодзі...",
"emoji-loading-description": "Зачекайте, будь ласка",
"emoji-no-recent": "Немає нещодавніх емодзі",
"emoji-search-description": "Пошук і копіювання емодзі"
},
"unpin": "Відкріпити"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "Системний вихід + вхід мікрофона",
"microphone-input": "Вхід мікрофона",
"none": "Немає аудіо",
"system-output": "Системний вихід"
},
"color-range": {
@@ -774,6 +836,10 @@
"hover": "Прокручувати при наведенні",
"never": "Ніколи не прокручувати"
},
"session-menu-grid-layout": {
"grid": "Сітка",
"single-row": "Один рядок"
},
"settings-panel-mode": {
"attached": "Панель прикріплена до панелі",
"centered": "Центрована панель",
@@ -823,31 +889,6 @@
"select": "Вибрати",
"test": "Тест"
},
"plugins": {
"applications": "Застосунки",
"calculator": "Калькулятор",
"calculator-description": "Калькулятор — обчислення математичних виразів",
"calculator-enter-expression": "Введіть математичний вираз",
"calculator-error": "Помилка",
"calculator-name": "Калькулятор",
"clipboard": "Історія буфера обміну",
"clipboard-clear-description": "Очистити всю історію буфера обміну",
"clipboard-clear-description-full": "Видалити всі елементи з історії буфера обміну",
"clipboard-clear-history": "Очистити історію буфера обміну",
"clipboard-delete": "Видалити запис з буфера обміну",
"clipboard-history-disabled": "Історія буфера обміну вимкнена",
"clipboard-history-disabled-description": "Увімкніть історію буфера обміну в налаштуваннях або встановіть cliphist",
"clipboard-loading": "Завантаження історії буфера обміну...",
"clipboard-loading-description": "Зачекайте, будь ласка",
"clipboard-search-description": "Пошук в історії буфера обміну",
"command": "Команда",
"command-description": "Виконати команди оболонки",
"command-name": "Команда",
"emoji": "Обрати емодзі",
"emoji-loading": "Завантаження емодзі...",
"emoji-loading-description": "Зачекайте, будь ласка",
"emoji-search-description": "Пошук і копіювання емодзі"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "Генерує кольори, що тісно збігаються з базовим зображенням.",
"scheme-expressive": "Яскрава палітра з грайливою насиченістю.",
"scheme-fidelity": "Високоточна палітра, що зберігає вихідні відтінки.",
"scheme-fruit-salad": "Барвистий мікс яскравих контрастних акцентів.",
"scheme-monochrome": "Мінімальна палітра на основі одного відтінку.",
"scheme-neutral": "Приглушена палітра з стриманими та заспокійливими тонами.",
"scheme-rainbow": "Різноманітна палітра, що охоплює весь спектр.",
"scheme-tonal-spot": "Збалансована палітра з фокусованими акцентами."
},
"description": "Виберіть метод генерації колірної схеми, який Matugen використовуватиме для створення кольорів з ваших шпалер.",
"label": "Тип схеми Matugen"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "Записати {filepath} та перезавантажити"
},
"zen-browser": {
"description": "Запишіть {filepath}; скопіюйте у chrome/userChrome.css вашого профілю Zen."
}
},
"section": {
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "Команда для запуску при натисканні кнопки анотування в історії буфера обміну, зображення буде передано в цю команду.",
"label": "Інструмент анотацій",
"placeholder": "градіа, сатті -ф -"
},
"clip-preview": {
"description": "Показувати попередній перегляд вмісту буфера обміну при використанні команди >clip.",
"label": "Попередній перегляд буфера обміну"
@@ -1826,6 +1866,10 @@
"description": "Показувати вкладки категорій для фільтрації додатків.",
"label": "Показувати категорії"
},
"show-icon-background": {
"description": "Показувати заокруглений прямокутник як фон за іконками.",
"label": "Показати фон іконки"
},
"sort-by-usage": {
"description": "Коли увімкнено, часто використовувані застосунки з'являються першими в списку.",
"label": "Сортувати за використанням"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "Активувати керування Bluetooth.",
"label": "Увімкнути Bluetooth"
"label": "Увімкнути Bluetooth",
"rssi-polling": {
"description": "Періодично збирати дані RSSI для підключених пристроїв через bluetoothctl. Може бути недоступним для всіх пристроїв; використовує мінімум ресурсів, коли ввімкнено.",
"label": "Опитування сигналу Bluetooth"
}
},
"section": {
"description": "Керувати підключеннями Wi-Fi та Bluetooth."
@@ -2171,6 +2219,11 @@
"no-plugins-description": "Перевірте вихідні коди вашого плагіна або оновіть список.",
"no-plugins-label": "Немає доступних плагінів"
},
"collision": {
"already-installed": "Цей плагін вже встановлено.",
"custom-version-exists": "Вже встановлено власну версію з \"{source}\"",
"official-version-exists": "Офіційна версія цього плагіна вже встановлена."
},
"filter": {
"all": "Все",
"downloaded": "Завантажено",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "Немає встановлених плагінів"
},
"installing": "Встановлення {plugin}...",
"open-plugins-tab": "Відкрити налаштування плагінів",
"plugin-settings-title": "Налаштування {plugin}",
"refresh": {
"refreshing": "Оновлення списку плагінів...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "Плагін не завантажено",
"settings-saved": "Налаштування плагіна збережено",
"source": {
"custom": "Власне джерело",
"official": "Офіційний"
},
"sources": {
"add-custom": "Додати власний репозиторій",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "Оновити все ({count})",
"update-all-success": "Усі плагіни успішно оновлено.",
"update-available": "Доступно оновлень для {count} плагінів",
"update-available_plural": "Доступно {count} оновлень плагінів",
"update-error": "Не вдалося оновити плагін: {plugin}: {error}",
"update-incompatible": "Потрібна Noctalia v{version} або вище",
"update-pending": "v{current} → v{new} (потрібно Noctalia v{required})",
"update-success": "Оновлено {plugin} до версії {version}",
"update-version": "v{current} → v{new}",
"updating": "Оновлення..."
@@ -2339,6 +2399,10 @@
"label": "Загальні"
}
},
"large-buttons-layout": {
"description": "Виберіть спосіб відображення кнопок меню сеансу.",
"label": "Розкладка з великими кнопками"
},
"large-buttons-style": {
"description": "Відобразити меню сеансу великими кнопками у вигляді сітки.",
"label": "Стиль великих кнопок"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "Кольори підсвічування"
},
"load-average-section": {
"label": "Середнє навантаження"
},
"memory-section": {
"label": "Використання пам'яті"
},
@@ -2438,6 +2505,10 @@
"label": "Швидкість анімації",
"reset": "Скинути швидкість анімації"
},
"box-border": {
"description": "Відображає контур навколо областей вмісту.",
"label": "Контур контейнера"
},
"box-border-radius": {
"description": "Налаштовує заокруглення кутів основних розділів макета, таких як бічні панелі, картки та панелі контенту.",
"label": "Радіус контейнера",
@@ -2564,8 +2635,8 @@
"tooltip": "Тека шпалер"
},
"hide-wallpaper-filenames": {
"description": "Приховати назви файлів шпалер у селекторі.",
"label": "Приховати назви файлів"
"tooltip-hide": "Приховати імена файлів",
"tooltip-show": "Відображати імена файлів"
},
"monitor-specific": {
"description": "Встановити різні теки шпалер для кожного монітора.",
@@ -2648,6 +2719,7 @@
"download": "Завантажити",
"download-speed": "Швидкість завантаження",
"gpu-temp": "Температура GPU",
"load-average": "Середнє навантаження",
"memory": "Пам'ять",
"title": "Системний монітор",
"upload": "Завантажити",
@@ -2664,6 +2736,7 @@
"low-desc": "Рівень заряду: {percent}%. Будь ласка, підключіть зарядний пристрій."
},
"bluetooth": {
"address-copied": "Адресу скопійовано до буфера обміну",
"confirm-code": "Підтвердьте код {value} на іншому пристрої",
"connect-failed": "Не вдалося під'єднатися до пристрою.",
"disabled": "Вимкнено",
@@ -2706,7 +2779,8 @@
"enabled": "Увімкнено"
},
"keyboard-layout": {
"changed": "Розкладка клавіатури змінена на {layout}"
"changed": "Розкладка клавіатури змінена на {layout}",
"title": "Клавіатура"
},
"kofi": {
"opened": "Сторінка Ko-fi відкрита у вашому браузері"
@@ -2780,6 +2854,7 @@
"close": "Закрити",
"collapse": "Згорнути бічну панель",
"connect-disconnect-devices": "Пристрій Bluetooth",
"copy-address": "Копіювати адресу",
"delete-notification": "Видалити сповіщення",
"disable-keep-awake": "Заборона сну",
"do-not-disturb-disabled": "Не турбувати",
@@ -2798,10 +2873,12 @@
"list-view": "Список",
"manage-vpn": "Підключення VPN",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "Досягнуто максимальної кількості віджетів",
"microphone-volume-at": "Гучність мікрофона: {volume}%",
"move-to-center-section": "Центральна секція",
"move-to-left-section": "Ліва секція",
"move-to-right-section": "Права секція",
"move-to-section": "Перейти до {section}",
"mute": "Вимкнути звук",
"next-media": "Наступний трек",
"next-month": "Наступний місяць",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "Нічне світло (недоступне)",
"noctalia-performance-disabled": "Режим продуктивності Noctalia",
"noctalia-performance-enabled": "Режим продуктивності Noctalia",
"open-annotation-tool": "Відкрити за допомогою інструменту анотацій",
"open-control-center": "Центр керування",
"open-notification-history-disable-dnd": "Історія сповіщень",
"open-notification-history-enable-dnd": "Історія сповіщень",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "Для доступу до контенту NSFW потрібен ключ API.",
"label": "Ключ API",
"managed-by-env": "Керується через змінну середовища NOCTALIA_WALLHAVEN_API_KEY.",
"placeholder": "Введіть свій API-ключ Wallhaven"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "Пошук:",
"solid-color": {
"tooltip": "Однотонний фон"
},
"sorting": {
"date_added": "Дата додавання",
"favorites": "Обране",
@@ -2943,6 +3025,11 @@
"thunderstorm": "Гроза",
"unknown": "Невідомо"
},
"widget": {
"file-picker": {
"title": "Виберіть файл"
}
},
"widgets": {
"color-picker": {
"apply": "Застосувати",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "Вимагається дія",
"available-interfaces": "Доступні інтерфейси",
"available-networks": "Доступні мережі",
"connect": "Підключити",
"connected": "Підключено",
"disabled": "Wi-Fi вимкнено",
"disconnect": "Відключити",
"disconnected": "Відключено",
"disconnecting": "Відключення...",
"dns": "DNS",
"enable-message": "Увімкніть Wi-Fi, щоб побачити доступні мережі.",
@@ -3042,12 +3131,15 @@
"frequency": "Частота",
"gateway": "Шлюз",
"info": "Інформація",
"interface": "Мережевий інтерфейс",
"internet": "Інтернет",
"internet-connected": "Підключено до Інтернету",
"internet-limited": "Немає інтернету",
"internet-status": "Статус Інтернету",
"ipv4": "IPv4",
"known-networks": "Відомі мережі",
"link-speed": "Швидкість з'єднання",
"no-ethernet-devices": "Не виявлено Ethernet-пристроїв.",
"no-networks": "Мереж не знайдено",
"password": "Пароль",
"saved": "Збережено",
+199 -107
View File
@@ -142,12 +142,20 @@
"description": "如果输出文本与此值匹配,按钮将折叠。",
"label": "折叠条件"
},
"color-selection": {
"description": "将主题颜色应用到图标和文本。",
"label": "选择颜色"
},
"display-command-output": {
"description": "输入一个定期运行的命令。其输出的第一行将显示为文本。",
"label": "显示命令输出",
"stream-description": "输入一个要持续运行的命令。"
},
"dynamic-text": "动态文本",
"enable-colorization": {
"description": "启用自定义按钮图标和文本的着色,应用主题颜色。",
"label": "启用着色"
},
"hide-mode": {
"alwaysExpanded": "始终展开",
"description": "控制命令无输出时小部件的可见性。",
@@ -224,6 +232,16 @@
"display-mode": {
"description": "选择您希望此值显示的方式。",
"label": "显示模式"
},
"show-icon": {
"description": "显示键盘布局图标。",
"label": "显示图标"
}
},
"launcher": {
"use-primary-color": {
"description": "启用后,将应用主色来突出显示。",
"label": "使用原色"
}
},
"lock-keys": {
@@ -327,6 +345,10 @@
"description": "显示GPU温度读数(如果可用)。",
"label": "GPU温度"
},
"load-average": {
"description": "显示系统平均负载。",
"label": "平均负载"
},
"memory-percentage": {
"description": "以百分比而不是绝对值显示内存使用情况。",
"label": "内存百分比"
@@ -370,11 +392,11 @@
"label": "仅显示活动工作区"
},
"only-same-monitor": {
"description": "仅显示工具栏所在显示器上的应用。",
"label": "仅同一显示器"
"description": "仅显示任务栏所在显示器上的应用。",
"label": "仅同一显示器"
},
"show-pinned-apps": {
"description": "在任务栏中显示 Dock 上固定的应用。",
"description": "在任务栏中显示停靠栏上固定的应用。",
"label": "显示已置顶的应用"
},
"show-title": {
@@ -481,19 +503,28 @@
"device-address": "设备地址",
"disabled": "蓝牙已禁用",
"disconnect": "断开",
"disconnecting": "正在断开连接...",
"discoverable": "可发现的",
"enable-message": "启用蓝牙以查看可用设备。",
"info": "信息",
"known-devices": "已知设备",
"no-devices": "没有可用设备",
"pair": "对",
"paired": "配对",
"pair": "对",
"paired": "配对",
"paired-devices": "已配对的设备",
"pairing": "配对...",
"pairing-mode": "确保您的设备处于配对模式。",
"refresh-devices": "刷新设备",
"scanning": "正在扫描设备...",
"signal": "信号",
"signal-text": {
"excellent": "信号:极佳",
"fair": "信号:良好",
"good": "信号:良好",
"poor": "信号:弱",
"unknown": "信号:未知",
"very-poor": "信号:非常差"
},
"title": "蓝牙",
"trusted": "可信赖的",
"unpair": "取消配对"
@@ -507,10 +538,10 @@
"countdown": "倒计时",
"duration": "时长",
"hours": "h",
"minutes": "",
"minutes": "m",
"pause": "暂停",
"reset": "重置",
"resume": "简历",
"resume": "继续",
"seconds": "s",
"start": "开始",
"stopwatch": "秒表",
@@ -529,7 +560,8 @@
"panel": {
"buttons": {
"discord": "加入我们的 Discord",
"dismiss": "确定"
"dismiss": "确定",
"feedback": "提供反馈"
},
"empty": "暂时没有可用的发行说明。",
"highlight-title": "重点更新",
@@ -573,6 +605,7 @@
"enable-bluetooth": "启用蓝牙",
"enable-dnd": "启用勿扰模式",
"enable-wifi": "启用 Wi-Fi",
"launcher-settings": "启动器设置",
"lower-to-bottom": "降至底部",
"next": "下一首",
"open-calendar": "打开日历",
@@ -607,7 +640,7 @@
"all": "全部",
"audiovideo": "音频和视频",
"chat": "聊天",
"development": "发",
"development": "发",
"education": "教育",
"emoji": {
"activity": "活动",
@@ -616,7 +649,7 @@
"food": "食物和饮料",
"nature": "自然",
"objects": "物品",
"people": "人物和体",
"people": "人物和体",
"recent": "最近使用",
"symbols": "符号",
"travel": "旅行和地点"
@@ -625,13 +658,41 @@
"graphics": "图形",
"misc": "杂项",
"network": "网络",
"office": "办公",
"office": "办公",
"pinned": "已固定",
"system": "系统",
"webbrowser": "网页浏览器"
},
"delete": "删除",
"no-results": "未找到结果",
"pin": "固定",
"providers": {
"applications": "应用程序",
"calculator": "计算器",
"calculator-deprecated": ">calc 命令已弃用,即将移除。请直接在搜索中输入数学表达式。",
"calculator-description": "计算器 — 计算数学表达式",
"calculator-enter-expression": "输入数学表达式",
"calculator-error": "错误",
"calculator-name": "计算器",
"clipboard": "剪贴板历史记录",
"clipboard-clear-description": "清除所有剪贴板历史记录",
"clipboard-clear-description-full": "从剪贴板历史记录中移除所有项目",
"clipboard-clear-history": "清除剪贴板历史记录",
"clipboard-delete": "删除剪贴板条目",
"clipboard-history-disabled": "剪贴板历史记录已禁用",
"clipboard-history-disabled-description": "在设置中启用剪贴板历史记录或安装 cliphist",
"clipboard-loading": "正在加载剪贴板历史记录...",
"clipboard-loading-description": "请稍候",
"clipboard-search-description": "搜索剪贴板历史记录",
"command": "命令",
"command-description": "运行 shell 命令",
"command-name": "命令",
"emoji": "表情符号选择器",
"emoji-loading": "正在加载表情符号...",
"emoji-loading-description": "请稍候",
"emoji-no-recent": "尚无最近使用的表情符号",
"emoji-search-description": "搜索和复制表情符号"
},
"unpin": "取消固定"
},
"lock-screen": {
@@ -752,6 +813,7 @@
"audio-sources": {
"both": "系统输出 + 麦克风输入",
"microphone-input": "麦克风输入",
"none": "无音频",
"system-output": "系统输出"
},
"color-range": {
@@ -766,7 +828,7 @@
},
"sources": {
"portal": "Portal",
"screen": "屏幕"
"screen": "Screen"
}
},
"scrolling-modes": {
@@ -774,8 +836,12 @@
"hover": "悬停时滚动",
"never": "从不滚动"
},
"session-menu-grid-layout": {
"grid": "网格",
"single-row": "单行"
},
"settings-panel-mode": {
"attached": "面板附加到工具栏",
"attached": "状态栏附属面板",
"centered": "居中面板",
"window": "分离窗口"
},
@@ -823,31 +889,6 @@
"select": "选择",
"test": "测试"
},
"plugins": {
"applications": "应用程序",
"calculator": "计算器",
"calculator-description": "计算器 — 计算数学表达式",
"calculator-enter-expression": "输入数学表达式",
"calculator-error": "错误",
"calculator-name": "计算器",
"clipboard": "剪贴板历史记录",
"clipboard-clear-description": "清除所有剪贴板历史记录",
"clipboard-clear-description-full": "从剪贴板历史记录中移除所有项目",
"clipboard-clear-history": "清除剪贴板历史记录",
"clipboard-delete": "删除剪贴板条目",
"clipboard-history-disabled": "剪贴板历史记录已禁用",
"clipboard-history-disabled-description": "在设置中启用剪贴板历史记录或安装 cliphist",
"clipboard-loading": "正在加载剪贴板历史记录...",
"clipboard-loading-description": "请稍候",
"clipboard-search-description": "搜索剪贴板历史记录",
"command": "命令",
"command-description": "运行 shell 命令",
"command-name": "命令",
"emoji": "表情符号选择器",
"emoji-loading": "正在加载表情符号...",
"emoji-loading-description": "请稍候",
"emoji-search-description": "搜索和复制表情符号"
},
"quickSettings": {
"bluetooth": {
"label": {
@@ -1052,8 +1093,8 @@
"bar": {
"appearance": {
"background-opacity": {
"description": "为任务栏设置背景不透明度。",
"label": "任务栏背景不透明度"
"description": "为状态栏设置背景不透明度。",
"label": "状态栏背景不透明度"
},
"capsule-opacity": {
"description": "设置显示胶囊时小部件背景的不透明度。",
@@ -1064,7 +1105,7 @@
"label": "状态栏密度"
},
"floating": {
"description": "将工具栏显示为浮动的“药丸”形状。",
"description": "将状态栏显示为浮动的“药丸”形状。",
"label": "浮动状态栏"
},
"margins": {
@@ -1094,8 +1135,8 @@
"label": "显示小部件轮廓"
},
"use-separate-opacity": {
"description": "启用后为任务栏背景使用单独的不透明度值。",
"label": "使用单独的任务栏不透明度"
"description": "启用后为状态栏背景使用单独的不透明度值。",
"label": "使用单独的状态栏不透明度"
}
},
"monitors": {
@@ -1125,16 +1166,7 @@
"color-scheme": {
"color-source": {
"matugen-scheme-type": {
"description": {
"scheme-content": "推导出与底层图像紧密匹配的颜色。",
"scheme-expressive": "充满活力的调色板,色彩饱和度高。",
"scheme-fidelity": "保留原始色调的高保真调色板。",
"scheme-fruit-salad": "鲜艳对比色的缤纷组合。",
"scheme-monochrome": "围绕单一色调构建的极简调色板。",
"scheme-neutral": "柔和的色调,沉稳平静。",
"scheme-rainbow": "涵盖整个光谱的多元调色板。",
"scheme-tonal-spot": "平衡的色调,重点突出。"
},
"description": "选择Matugen将使用哪种配色方案生成方法,从您的壁纸中创建颜色。",
"label": "Matugen 配色方案类型"
},
"section": {
@@ -1268,6 +1300,9 @@
},
"zed": {
"description": "写入 {filepath} 并重新加载"
},
"zen-browser": {
"description": "将 {filepath} 写入;复制到你的 Zen 配置文件的 chrome/userChrome.css 中"
}
},
"section": {
@@ -1591,15 +1626,15 @@
"dock": {
"appearance": {
"background-opacity": {
"description": "调整 Dock 的背景不透明度。",
"description": "调整停靠栏的背景不透明度。",
"label": "背景不透明度"
},
"border-radius": {
"description": "调整程序坞的边框半径。",
"description": "调整停靠栏的边框半径。",
"label": "边框半径"
},
"colorize-icons": {
"description": "将主题颜色应用到 Dock 应用图标(仅限非聚焦应用)。",
"description": "将主题颜色应用到停靠栏应用图标(仅限非聚焦应用)。",
"label": "着色图标"
},
"dead-opacity": {
@@ -1609,38 +1644,38 @@
"display": {
"always-visible": "始终可见",
"auto-hide": "自动隐藏",
"description": "选择 Dock 的行为方式。",
"description": "选择停靠栏的行为方式。",
"exclusive": "独占",
"label": "显示"
},
"floating-distance": {
"description": "调整距离屏幕边缘的浮动距离。",
"label": "Dock 浮动距离"
"label": "停靠栏浮动距离"
},
"hide-show-speed": {
"description": "调整 Dock 隐藏/显示动画的速度。",
"description": "调整停靠栏隐藏/显示动画的速度。",
"label": "隐藏/显示速度"
},
"icon-size": {
"description": "调整 Dock 的整体大小。",
"label": "Dock 大小"
"description": "调整停靠栏的整体大小。",
"label": "停靠栏大小"
},
"inactive-indicators": {
"description": "为所有应用显示指示器小药丸,而不仅仅是当前活跃的应用。",
"label": "运行指"
"label": "运行指示器"
},
"pinned-static": {
"description": "始终将固定的应用图标按静态顺序推到左侧。",
"label": "静态固定应用"
},
"section": {
"description": "自定义 Dock 的行为和外观。",
"description": "自定义停靠栏的行为和外观。",
"label": "外观"
}
},
"enabled": {
"description": "完全显示或隐藏 Dock",
"label": "启用 Dock"
"description": "完全显示或隐藏停靠栏",
"label": "启用停靠栏"
},
"monitors": {
"only-same-monitor": {
@@ -1648,11 +1683,11 @@
"label": "仅限来自同一显示器的应用"
},
"section": {
"description": "在特定显示器上显示 Dock。如果未选择任何显示器,则默认为全部。",
"description": "在特定显示器上显示停靠栏。如果未选择任何显示器,则默认为全部。",
"label": "显示器显示"
}
},
"title": "Dock"
"title": "停靠栏"
},
"general": {
"fonts": {
@@ -1696,8 +1731,8 @@
"launch-setup-wizard": "启动安装向导",
"profile": {
"picture": {
"description": "在整个界面中显示您的个人资料图片。",
"label": "{user} 的个人资料图片"
"description": "在整个界面中显示您的个人头像。",
"label": "{user} 的个人头像"
},
"section": {
"description": "编辑您的用户详细信息和头像。",
@@ -1730,11 +1765,11 @@
"hooks": {
"info": {
"command-info": {
"description": "• 命令通过 shell 执行 (sh -c)<br>• 命令在后台运行(分离)<br>• 测试按钮使用当前值执行",
"description": "• 命令通过 shell 执行sh -c<br>• 命令在后台运行(分离)<br>• 测试按钮使用当前值执行",
"label": "钩子命令信息"
},
"parameters": {
"description": "• 壁纸钩子: $1 = 壁纸路径, $2 = 屏幕名称<br>• 主题切换钩子: $1 = true/false (深色模式状态)",
"description": "• 壁纸钩子$1 = 壁纸路径, $2 = 屏幕名称<br>• 主题切换钩子$1 = true/false深色模式状态<br>• 屏幕锁定/解锁钩子:无参数<br>• 性能模式钩子:无参数",
"label": "可用参数"
}
},
@@ -1786,6 +1821,11 @@
},
"launcher": {
"settings": {
"annotation-tool": {
"description": "点击剪贴板历史记录中的注释按钮时要运行的命令。图像将被管道传输到此命令。",
"label": "标注工具",
"placeholder": "格拉迪亚,萨蒂 -f -"
},
"clip-preview": {
"description": "在使用 >clip 命令时显示剪贴板内容的预览。",
"label": "启用剪贴板预览"
@@ -1826,6 +1866,10 @@
"description": "显示用于筛选应用程序的类别标签。",
"label": "显示类别"
},
"show-icon-background": {
"description": "在图标后显示一个圆角矩形背景。",
"label": "显示图标背景"
},
"sort-by-usage": {
"description": "启用后,经常启动的应用程序将显示在列表首位。",
"label": "按使用频率排序"
@@ -1940,7 +1984,11 @@
"network": {
"bluetooth": {
"description": "启用蓝牙管理。",
"label": "启用蓝牙"
"label": "启用蓝牙",
"rssi-polling": {
"description": "定期通过 bluetoothctl 采样已连接设备的 RSSI 值。可能并非适用于所有设备;启用后占用极少资源。",
"label": "蓝牙信号轮询"
}
},
"section": {
"description": "管理 Wi-Fi 和蓝牙连接。"
@@ -2014,7 +2062,7 @@
},
"enable-osd": {
"description": "实时显示音量和亮度变化。",
"label": "启用屏显菜单"
"label": "启用屏幕显示"
},
"enabled": {
"description": "启用或禁用通知守护进程,需要重启 Noctalia shell。",
@@ -2031,29 +2079,29 @@
},
"sounds": {
"enabled": {
"description": "为传入通知启用音效。",
"description": "启用收到通知时的音效。",
"label": "启用通知声音"
},
"excluded-apps": {
"description": "跳过播放具有自己内置声音的特定应用程序的配置通知音。",
"description": "对于自带内置音效的特定应用,跳过播放已配置通知音。",
"label": "排除的应用程序",
"placeholder": "discord,firefox,chrome,chromium,edge"
},
"files": {
"critical": {
"description": "为关键优先级通知播放的声音文件路径。",
"label": "关键紧急声音",
"select-title": "选择关键紧急声音文件"
"description": "为优先级通知播放的声音文件路径。",
"label": "紧急声音",
"select-title": "选择紧急声音文件"
},
"low": {
"description": "为低优先级通知播放的声音文件路径。",
"label": "低紧急声音",
"select-title": "选择低紧急声音文件"
"label": "低紧急声音",
"select-title": "选择低紧急声音文件"
},
"normal": {
"description": "为普通优先级通知播放的声音文件路径。",
"label": "普通紧急声音",
"select-title": "选择普通紧急声音文件"
"description": "为正常优先级通知播放的声音文件路径。",
"label": "正常紧急声音",
"select-title": "选择正常紧急声音文件"
},
"placeholder": "输入声音文件路径",
"section": {
@@ -2072,11 +2120,11 @@
"label": "声音设置"
},
"separate": {
"description": "为低、普通和关键优先级通知使用不同的声音文件。",
"description": "为低、正常和高优先级通知使用不同的声音文件。",
"label": "按优先级使用不同声音"
},
"unavailable": {
"description": "安装 Qt6 多媒体以启用通知声音。",
"description": "安装 Qt6 Multimedia 以启用通知声音。",
"label": "通知声音不可用"
},
"volume": {
@@ -2087,56 +2135,56 @@
"title": "通知",
"toast": {
"keyboard": {
"description": "当键盘布局改变时显示一个Toast提示。",
"description": "当键盘布局改变时显示一个 Toast 提示。",
"label": "键盘布局"
},
"section": {
"description": "配置Toast的外观和行为。",
"label": "吐司"
"description": "配置 Toast 的外观和行为。",
"label": "Toast"
}
}
},
"osd": {
"always-on-top": {
"description": "在全屏窗口和其他图层之上显示OSD。",
"description": "在全屏窗口和其他图层之上显示 OSD。",
"label": "始终置顶"
},
"background-opacity": {
"description": "调整OSD背景的透明度。",
"description": "调整 OSD 背景的透明度。",
"label": "背景透明度"
},
"description": "配置屏幕叠加指示器,例如音量和亮度。",
"duration": {
"auto-hide": {
"description": "调整屏显菜单消失前的时间。",
"description": "调整屏幕显示消失前的时间。",
"label": "自动隐藏超时"
},
"section": {
"description": "屏显菜单自动隐藏前保持可见的时长。",
"description": "屏幕显示自动隐藏前保持可见的时长。",
"label": "自动隐藏超时"
}
},
"enabled": {
"description": "实时显示音量与亮度变化。",
"label": "启用屏显菜单"
"label": "启用屏幕显示"
},
"location": {
"description": "屏显菜单出现的位置。",
"description": "屏幕显示出现的位置。",
"label": "位置"
},
"monitors": {
"section": {
"description": "在特定显示器上显示屏显菜单。若未选择,则默认全部。",
"description": "在特定显示器上显示屏幕显示。若未选择,则默认全部。",
"label": "显示器显示"
}
},
"section": {
"general": {
"description": "配置屏显菜单OSD)的可见性与行为。",
"description": "配置屏幕显示OSD)的可见性与行为。",
"label": "常规"
}
},
"title": "屏显菜单",
"title": "屏幕显示",
"types": {
"brightness": {
"description": "当屏幕亮度发生变化时显示 OSD。",
@@ -2155,8 +2203,8 @@
"label": "锁定键"
},
"section": {
"description": "选择触发OSD的事件。",
"label": "OSD触发事件"
"description": "选择触发 OSD 的事件。",
"label": "OSD 触发事件"
},
"volume": {
"description": "当音频输出音量发生变化时显示 OSD。",
@@ -2171,6 +2219,11 @@
"no-plugins-description": "检查你的插件源或刷新列表。",
"no-plugins-label": "没有可用的插件"
},
"collision": {
"already-installed": "此插件已安装",
"custom-version-exists": "来自“{source}”的自定义版本已安装",
"official-version-exists": "此插件的官方版本已安装。"
},
"filter": {
"all": "全部",
"downloaded": "已下载",
@@ -2191,6 +2244,7 @@
"no-plugins-label": "未安装插件"
},
"installing": "正在安装 {plugin}...",
"open-plugins-tab": "打开插件设置",
"plugin-settings-title": "{插件} 设置",
"refresh": {
"refreshing": "正在刷新插件列表...",
@@ -2201,6 +2255,10 @@
},
"settings-error-not-loaded": "插件未加载",
"settings-saved": "插件设置已保存",
"source": {
"custom": "自定义源",
"official": "官方"
},
"sources": {
"add-custom": "添加自定义存储库",
"add-dialog": {
@@ -2232,8 +2290,10 @@
"update-all": "全部更新({count}",
"update-all-success": "所有插件已成功更新",
"update-available": "有{count}个插件可更新",
"update-available_plural": "{count} 个插件有可用更新",
"update-error": "更新插件失败:{plugin}{error}",
"update-incompatible": "需要 Noctalia v{version} 或更高版本",
"update-pending": "v{当前} → v{新} (需要 Noctalia v{所需})",
"update-success": "已将 {plugin} 更新至 v{version}",
"update-version": "v{当前} → v{新}",
"updating": "正在更新..."
@@ -2339,6 +2399,10 @@
"label": "常规"
}
},
"large-buttons-layout": {
"description": "选择会话菜单按钮的显示方式。",
"label": "大按钮布局"
},
"large-buttons-style": {
"description": "以网格布局显示带有大按钮的会话菜单。",
"label": "大按钮样式"
@@ -2395,6 +2459,9 @@
"highlight-colors-section": {
"label": "高亮颜色"
},
"load-average-section": {
"label": "平均负载"
},
"memory-section": {
"label": "内存使用率"
},
@@ -2417,7 +2484,7 @@
},
"title": "系统监视器",
"use-custom-highlight-colors": {
"description": "关闭时将使用主题默认高亮颜色。",
"description": "禁用时将使用主题默认高亮颜色。",
"label": "使用自定义高亮颜色"
},
"warning-color": {
@@ -2438,6 +2505,10 @@
"label": "动画速度",
"reset": "重置动画速度"
},
"box-border": {
"description": "显示内容区域周围的轮廓。",
"label": "容器轮廓"
},
"box-border-radius": {
"description": "调整主要布局部分(如侧边栏、卡片和内容面板)的圆角程度。",
"label": "容器半径",
@@ -2513,12 +2584,12 @@
"label": "壁纸间隔"
},
"random-wallpaper": {
"description": "按固定间隔调度随机壁纸更改。",
"description": "按固定时间间隔随机更改壁纸。",
"label": "随机壁纸"
},
"scheduled-change": {
"description": "按固定间隔自动更改壁纸。",
"label": "计划更改"
"description": "按固定时间间隔自动更改壁纸。",
"label": "定时更改"
},
"section": {
"label": "自动化"
@@ -2564,8 +2635,8 @@
"tooltip": "壁纸文件夹"
},
"hide-wallpaper-filenames": {
"description": "在选择器中隐藏壁纸文件名",
"label": "隐藏文件名"
"tooltip-hide": "隐藏文件名",
"tooltip-show": "显示文件名"
},
"monitor-specific": {
"description": "为每个显示器设置不同的壁纸文件夹。",
@@ -2648,6 +2719,7 @@
"download": "下载",
"download-speed": "下载速度",
"gpu-temp": "GPU 温度",
"load-average": "平均负载",
"memory": "内存",
"title": "系统监视器",
"upload": "上传",
@@ -2664,6 +2736,7 @@
"low-desc": "电量为 {percent}%。请连接充电器。"
},
"bluetooth": {
"address-copied": "地址已复制到剪贴板",
"confirm-code": "在另一台设备上确认代码 {value}",
"connect-failed": "无法连接到设备",
"disabled": "已禁用",
@@ -2706,7 +2779,8 @@
"enabled": "已启用"
},
"keyboard-layout": {
"changed": "键盘布局已更改为 {layout}"
"changed": "键盘布局已更改为 {layout}",
"title": "键盘"
},
"kofi": {
"opened": "Ko-fi 页面已在您的浏览器中打开"
@@ -2780,6 +2854,7 @@
"close": "关闭",
"collapse": "折叠侧边栏",
"connect-disconnect-devices": "蓝牙设备",
"copy-address": "复制地址",
"delete-notification": "删除通知",
"disable-keep-awake": "保持唤醒",
"do-not-disturb-disabled": "勿扰模式",
@@ -2798,10 +2873,12 @@
"list-view": "列表视图",
"manage-vpn": "VPN 连接",
"manage-wifi": "Wi-Fi",
"max-widgets-reached": "已达到最大小部件数量",
"microphone-volume-at": "麦克风音量:{volume}%",
"move-to-center-section": "中央部分",
"move-to-left-section": "左侧部分",
"move-to-right-section": "右侧部分",
"move-to-section": "移至{section}",
"mute": "静音",
"next-media": "下一首",
"next-month": "下个月",
@@ -2811,6 +2888,7 @@
"night-light-not-installed": "夜间模式(不可用)",
"noctalia-performance-disabled": "Noctalia 性能模式",
"noctalia-performance-enabled": "Noctalia 性能模式",
"open-annotation-tool": "使用注释工具打开",
"open-control-center": "控制中心",
"open-notification-history-disable-dnd": "通知历史记录",
"open-notification-history-enable-dnd": "通知历史记录",
@@ -2845,7 +2923,7 @@
"widget-settings": "小部件设置"
},
"wallpaper": {
"configure-directory": "使用图像配置您的壁纸目录。",
"configure-directory": "配置您的壁纸图片目录。",
"fill-modes": {
"center": "居中",
"crop": "裁剪(填充)",
@@ -2858,6 +2936,7 @@
"apikey": {
"help": "访问 NSFW 内容需要 API 密钥。",
"label": "API 密钥",
"managed-by-env": "通过 NOCTALIA_WALLHAVEN_API_KEY 环境变量进行管理。",
"placeholder": "输入您的Wallhaven API密钥"
},
"apply-all-monitors": {
@@ -2895,6 +2974,9 @@
}
},
"search": "搜索:",
"solid-color": {
"tooltip": "纯色背景"
},
"sorting": {
"date_added": "添加日期",
"favorites": "收藏",
@@ -2943,6 +3025,11 @@
"thunderstorm": "雷暴",
"unknown": "未知"
},
"widget": {
"file-picker": {
"title": "选择文件"
}
},
"widgets": {
"color-picker": {
"apply": "应用",
@@ -3027,11 +3114,13 @@
"wifi": {
"panel": {
"action-required": "需要动作",
"available-interfaces": "可用接口",
"available-networks": "可用网络",
"connect": "连接",
"connected": "已连接",
"disabled": "Wi-Fi 已禁用",
"disconnect": "断开连接",
"disconnected": "已断开连接",
"disconnecting": "正在断开连接...",
"dns": "域名系统",
"enable-message": "启用 Wi-Fi 以查看可用网络。",
@@ -3042,12 +3131,15 @@
"frequency": "频率",
"gateway": "网关",
"info": "信息",
"interface": "网络接口",
"internet": "互联网",
"internet-connected": "已连接互联网",
"internet-limited": "无网络",
"internet-status": "互联网状态",
"ipv4": "IPv4",
"known-networks": "已知网络",
"link-speed": "链路速度",
"no-ethernet-devices": "未检测到以太网设备",
"no-networks": "未找到网络",
"password": "密码",
"saved": "已保存",
+16 -11
View File
@@ -17,13 +17,10 @@
"widgets": {
"left": [
{
"icon": "rocket",
"id": "CustomButton",
"leftClickExec": "qs -c noctalia-shell ipc call launcher toggle"
"id": "Launcher"
},
{
"id": "Clock",
"usePrimaryColor": false
"id": "Clock"
},
{
"id": "SystemMonitor"
@@ -97,9 +94,7 @@
"panelBackgroundOpacity": 0.93,
"panelsAttachedToBar": true,
"settingsPanelMode": "attached",
"wifiDetailsViewMode": "grid",
"bluetoothDetailsViewMode": "grid",
"bluetoothHideUnnamedDevices": false
"boxBorderEnabled": false
},
"location": {
"name": "Tokyo",
@@ -155,6 +150,8 @@
"setWallpaperOnAllMonitors": true,
"fillMode": "crop",
"fillColor": "#000000",
"useSolidColor": false,
"solidColor": "#1a1a2e",
"randomEnabled": false,
"wallpaperChangeMode": "random",
"randomIntervalSec": 300,
@@ -188,10 +185,13 @@
"viewMode": "list",
"showCategories": true,
"iconMode": "tabler",
"ignoreMouseInput": false
"showIconBackground": true,
"ignoreMouseInput": false,
"screenshotAnnotationTool": ""
},
"controlCenter": {
"position": "close_to_bar_button",
"diskPath": "/",
"shortcuts": {
"left": [
{
@@ -267,10 +267,10 @@
"memPollingInterval": 3000,
"diskPollingInterval": 3000,
"networkPollingInterval": 3000,
"loadAvgPollingInterval": 3000,
"useCustomColors": false,
"warningColor": "",
"criticalColor": "",
"diskPath": "/",
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"
},
"dock": {
@@ -291,7 +291,10 @@
"network": {
"wifiEnabled": true,
"bluetoothRssiPollingEnabled": false,
"bluetoothRssiPollIntervalMs": 10000
"bluetoothRssiPollIntervalMs": 10000,
"wifiDetailsViewMode": "grid",
"bluetoothDetailsViewMode": "grid",
"bluetoothHideUnnamedDevices": false
},
"sessionMenu": {
"enableCountdown": true,
@@ -299,6 +302,7 @@
"position": "center",
"showHeader": true,
"largeButtonsStyle": false,
"largeButtonsLayout": "grid",
"showNumberLabels": true,
"powerOptions": [
{
@@ -416,6 +420,7 @@
"mango": false,
"zed": false,
"helix": false,
"zenBrowser": false,
"enableUserTemplates": false
},
"nightLight": {
+11 -3
View File
@@ -28,7 +28,7 @@
"displayMode": "onhover"
},
"Clock": {
"usePrimaryColor": true,
"usePrimaryColor": false,
"useCustomFont": false,
"customFont": "",
"formatHorizontal": "HH:mm ddd, MMM dd",
@@ -68,10 +68,13 @@
"maxTextLength": {
"horizontal": 10,
"vertical": 10
}
},
"enableColorization": false,
"colorizeSystemIcon": "none"
},
"KeyboardLayout": {
"displayMode": "onhover"
"displayMode": "onhover",
"showIcon": true
},
"LockKeys": {
"showCapsLock": true,
@@ -81,6 +84,10 @@
"numLockIcon": "letter-n",
"scrollLockIcon": "letter-s"
},
"Launcher": {
"icon": "rocket",
"usePrimaryColor": false
},
"MediaMini": {
"hideMode": "hidden",
"scrollingMode": "hover",
@@ -113,6 +120,7 @@
"showCpuUsage": true,
"showCpuTemp": true,
"showGpuTemp": false,
"showLoadAverage": false,
"showMemoryUsage": true,
"showMemoryAsPercent": false,
"showNetworkStats": false,
@@ -1,8 +1,8 @@
#!/usr/bin/env bash
# BluetoothConnectionScript.sh
# bluetooth-connect.sh
# Pairs, trusts, and attempts to connect to a Bluetooth device using bluetoothctl.
# Usage: BluetoothConnectionScript.sh <addr> <pairWaitSeconds> <attempts> <intervalSec>
# Usage: bluetooth-connect.sh <addr> <pairWaitSeconds> <attempts> <intervalSec>
set -euo pipefail
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
# Generate a registry.json from all color schemes in Assets/ColorScheme
# Output format matches ~/Development/misc/noctalia/noctalia-colorschemes/registry.json
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
COLORSCHEME_DIR="$PROJECT_ROOT/Assets/ColorScheme"
# Start JSON output
echo '{'
echo ' "version": 1,'
echo ' "themes": ['
first=true
for dir in "$COLORSCHEME_DIR"/*/; do
[ -d "$dir" ] || continue
name=$(basename "$dir")
json_file="$dir/$name.json"
[ -f "$json_file" ] || continue
# Read the JSON file content
content=$(cat "$json_file")
# Extract dark and light objects using jq
dark=$(echo "$content" | jq -c '.dark')
light=$(echo "$content" | jq -c '.light')
# Skip if missing dark or light
[ "$dark" = "null" ] || [ "$light" = "null" ] && continue
# Add comma before all but first entry
if [ "$first" = true ]; then
first=false
else
echo ','
fi
# Output theme entry
printf ' {\n'
printf ' "name": "%s",\n' "$name"
printf ' "path": "%s",\n' "$name"
printf ' "dark": %s,\n' "$dark"
printf ' "light": %s\n' "$light"
printf ' }'
done
echo ''
echo ' ]'
echo '}'
+20 -1
View File
@@ -1,5 +1,24 @@
#!/bin/bash
# Find qsb binary in common locations.
QSB_PATHS=(
"/usr/lib/qt6/bin/qsb"
"/usr/lib64/qt6/bin/qsb"
)
QSB_BIN=""
for path in "${QSB_PATHS[@]}"; do
if [ -x "$path" ]; then
QSB_BIN="$path"
break
fi
done
if [ -z "$QSB_BIN" ]; then
echo "Error: qsb binary not found in any of: ${QSB_PATHS[*]}"
exit 1
fi
# Directory containing the source shaders.
SOURCE_DIR="Shaders/frag/"
@@ -64,7 +83,7 @@ for shader in "${SHADERS_TO_COMPILE[@]}"; do
output_path="$DEST_DIR$shader_name.frag.qsb"
# Construct and run the qsb command.
/usr/lib/qt6/bin/qsb --qt6 -o "$output_path" "$shader"
"$QSB_BIN" --qt6 -o "$output_path" "$shader"
# Print a message to confirm compilation.
echo "Compiled $(basename "$shader") to $output_path"
-5
View File
@@ -45,11 +45,6 @@ Singleton {
readonly property color mHover: customColorsData.mHover
readonly property color mOnHover: customColorsData.mOnHover
// --- Absolute Colors
readonly property color transparent: "transparent"
readonly property color black: "#000000"
readonly property color white: "#ffffff"
// --------------------------------
// Default colors: Rose Pine
QtObject {
+29
View File
@@ -0,0 +1,29 @@
import QtQuick
import Quickshell
import qs.Commons
QtObject {
id: root
// Clear legacy emoji usage cache to adopt new format
function migrate(adapter, logger, rawJson) {
logger.i("Settings", "Migrating settings to v36");
const usagePath = Settings.cacheDir + "emoji_usage.json";
if (!usagePath.endsWith("emoji_usage.json")) {
logger.w("Settings", "Skipping emoji usage cleanup due to unexpected path: " + usagePath);
return true;
}
try {
// Ensure dir exists then remove the file
Quickshell.execDetached(["sh", "-c", `mkdir -p "${Settings.cacheDir}" && rm -f -- "${usagePath}"`]);
logger.i("Settings", "Cleared legacy emoji usage file at: " + usagePath);
} catch (e) {
logger.w("Settings", "Failed to clear emoji usage cache: " + e);
}
return true;
}
}
+79
View File
@@ -0,0 +1,79 @@
import QtQuick
QtObject {
id: root
// Rename WiFi widgets/shortcuts to Network
function migrate(adapter, logger, rawJson) {
logger.i("Settings", "Migrating settings to v37 (WiFi → Network)");
let changed = false;
function migrateArray(contextName, rawArr, adapterArr, setItem) {
if (!adapterArr)
return;
const len = adapterArr.length;
for (let i = 0; i < len; i++) {
// Prefer raw item if present, otherwise use adapter item
const item = rawArr && rawArr[i] !== undefined ? rawArr[i] : adapterArr[i];
if (item === undefined || item === null)
continue;
// Case 1: simple string entries
if (typeof item === "string") {
if (item === "WiFi") {
setItem(i, "Network");
changed = true;
logger.i("Settings", `Migrated ${contextName}[${i}] from WiFi to Network (string entry)`);
}
continue;
}
// Case 2: object entries with id
let id = item.id !== undefined ? item.id : (item.widgetId !== undefined ? item.widgetId : undefined);
if (id === "WiFi") {
var newObj = {};
for (var key in item)
newObj[key] = item[key];
if (newObj.id !== undefined)
newObj.id = "Network";
if (newObj.widgetId !== undefined && newObj.id === undefined)
newObj.widgetId = "Network"; // fallback if older schema used widgetId
setItem(i, newObj);
changed = true;
logger.i("Settings", `Migrated ${contextName}[${i}] from WiFi to Network (object entry)`);
}
}
}
// --- Bar widgets: left/center/right
const sections = ["left", "center", "right"];
for (const section of sections) {
const rawArr = rawJson?.bar?.widgets?.[section];
const adapterArr = adapter?.bar?.widgets?.[section];
migrateArray(`bar.widgets.${section}`, rawArr, adapterArr, function (i, v) {
adapter.bar.widgets[section][i] = v;
});
}
// --- Control Center shortcuts: left/right
const rawLeft = rawJson?.controlCenter?.shortcuts?.left;
const adLeft = adapter?.controlCenter?.shortcuts?.left;
migrateArray("controlCenter.shortcuts.left", rawLeft, adLeft, function (i, v) {
adapter.controlCenter.shortcuts.left[i] = v;
});
const rawRight = rawJson?.controlCenter?.shortcuts?.right;
const adRight = adapter?.controlCenter?.shortcuts?.right;
migrateArray("controlCenter.shortcuts.right", rawRight, adRight, function (i, v) {
adapter.controlCenter.shortcuts.right[i] = v;
});
if (!changed) {
logger.i("Settings", "No WiFi widget IDs found to migrate; leaving settings unchanged");
}
return true;
}
}
+5 -1
View File
@@ -11,7 +11,9 @@ QtObject {
28: migration28Component,
32: migration32Component,
33: migration33Component,
35: migration35Component
35: migration35Component,
36: migration36Component,
37: migration37Component
})
// Migration components
@@ -20,4 +22,6 @@ QtObject {
property Component migration32Component: Migration32 {}
property Component migration33Component: Migration33 {}
property Component migration35Component: Migration35 {}
property Component migration36Component: Migration36 {}
property Component migration37Component: Migration37 {}
}
+21 -14
View File
@@ -25,7 +25,7 @@ Singleton {
- Default cache directory: ~/.cache/noctalia
*/
readonly property alias data: adapter // Used to access via Settings.data.xxx.yyy
readonly property int settingsVersion: 35
readonly property int settingsVersion: 37
readonly property bool isDebug: Quickshell.env("NOCTALIA_DEBUG") === "1"
readonly property string shellName: "noctalia"
readonly property string configDir: Quickshell.env("NOCTALIA_CONFIG_DIR") || (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + "/" + shellName + "/"
@@ -215,13 +215,10 @@ Singleton {
widgets: JsonObject {
property list<var> left: [
{
"icon": "rocket",
"id": "CustomButton",
"leftClickExec": "qs -c noctalia-shell ipc call launcher toggle"
"id": "Launcher"
},
{
"id": "Clock",
"usePrimaryColor": false
"id": "Clock"
},
{
"id": "SystemMonitor"
@@ -302,8 +299,11 @@ Singleton {
// Details view mode persistence for panels
property string wifiDetailsViewMode: "grid" // "grid" or "list"
property string bluetoothDetailsViewMode: "grid" // "grid" or "list"
// Persist the last-opened view for the unified network panel: "wifi" | "ethernet"
property string networkPanelView: "wifi"
// Bluetooth available devices list: hide items without a name
property bool bluetoothHideUnnamedDevices: false
property bool boxBorderEnabled: false
}
// location
@@ -367,6 +367,8 @@ Singleton {
property bool setWallpaperOnAllMonitors: true
property string fillMode: "crop"
property color fillColor: "#000000"
property bool useSolidColor: false
property color solidColor: "#1a1a2e"
property bool randomEnabled: false // Deprecated: use wallpaperChangeMode instead
property string wallpaperChangeMode: "random" // "random" or "alphabetical"
property int randomIntervalSec: 300 // 5 min
@@ -406,18 +408,21 @@ Singleton {
property bool showCategories: true
// Icon mode: "tabler" or "native"
property string iconMode: "tabler"
property bool showIconBackground: true
property bool ignoreMouseInput: false
property string screenshotAnnotationTool: ""
}
// control center
property JsonObject controlCenter: JsonObject {
// Position: close_to_bar_button, center, top_left, top_right, bottom_left, bottom_right, bottom_center, top_center
property string position: "close_to_bar_button"
property string diskPath: "/"
property JsonObject shortcuts
shortcuts: JsonObject {
property list<var> left: [
{
"id": "WiFi"
"id": "Network"
},
{
"id": "Bluetooth"
@@ -491,10 +496,10 @@ Singleton {
property int memPollingInterval: 3000
property int diskPollingInterval: 3000
property int networkPollingInterval: 3000
property int loadAvgPollingInterval: 3000
property bool useCustomColors: false
property string warningColor: ""
property string criticalColor: ""
property string diskPath: "/"
property string externalMonitor: "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"
}
@@ -507,8 +512,7 @@ Singleton {
property real size: 1
property bool onlySameOutput: true
property list<string> monitors: [] // holds dock visibility per monitor
// Desktop entry IDs pinned to the dock (e.g., "org.kde.konsole", "firefox.desktop")
property list<string> pinnedApps: []
property list<string> pinnedApps: [] // Desktop entry IDs pinned to the dock (e.g., "org.kde.konsole", "firefox.desktop")
property bool colorizeIcons: false
property bool pinnedStatic: false
@@ -520,10 +524,11 @@ Singleton {
// network
property JsonObject network: JsonObject {
property bool wifiEnabled: true
// Opt-in Bluetooth RSSI polling (uses bluetoothctl)
property bool bluetoothRssiPollingEnabled: false
// Polling interval in milliseconds for RSSI queries
property int bluetoothRssiPollIntervalMs: 10000
property bool bluetoothRssiPollingEnabled: false // Opt-in Bluetooth RSSI polling (uses bluetoothctl)
property int bluetoothRssiPollIntervalMs: 10000 // Polling interval in milliseconds for RSSI queries
property string wifiDetailsViewMode: "grid" // "grid" or "list"
property string bluetoothDetailsViewMode: "grid" // "grid" or "list"
property bool bluetoothHideUnnamedDevices: false
}
// session menu
@@ -533,6 +538,7 @@ Singleton {
property string position: "center"
property bool showHeader: true
property bool largeButtonsStyle: false
property string largeButtonsLayout: "grid"
property bool showNumberLabels: true
property list<var> powerOptions: [
{
@@ -656,6 +662,7 @@ Singleton {
property bool mango: false
property bool zed: false
property bool helix: false
property bool zenBrowser: false
property bool enableUserTemplates: false
}
+18 -8
View File
@@ -85,7 +85,7 @@ Singleton {
readonly property real uiScaleRatio: Settings.data.general.scaleRatio
// Bar Dimensions
// Bar Height
readonly property real barHeight: {
let h;
switch (Settings.data.bar.density) {
@@ -105,14 +105,17 @@ Singleton {
case "default":
h = (Settings.data.bar.position === "left" || Settings.data.bar.position === "right") ? 33 : 31;
}
return h;
//return toOdd(h);
return toOdd(h);
}
// Capsule Height
// Note: capsule must always be smaller than barHeight to account for border rendering
// Qt Quick Rectangle borders are drawn centered on edges (half inside, half outside)
readonly property real capsuleHeight: {
let h;
switch (Settings.data.bar.density) {
case "mini":
h = Math.round(barHeight * 1.0);
h = Math.round(barHeight * 0.90);
break;
case "compact":
h = Math.round(barHeight * 0.85);
@@ -121,19 +124,26 @@ Singleton {
h = Math.round(barHeight * 0.75);
break;
case "spacious":
h = Math.round(barHeight * 0.75);
h = Math.round(barHeight * 0.65);
break;
default:
case "default":
h = Math.round(barHeight * 0.82);
break;
}
return toOdd(h);
}
readonly property color capsuleColor: Settings.data.bar.showCapsule ? Qt.alpha(Color.mSurfaceVariant, Settings.data.bar.capsuleOpacity) : Color.transparent
readonly property color capsuleBorderColor: Settings.data.bar.showOutline ? Color.mPrimary : Color.transparent
// The base/default font size for all texts in the bar
readonly property real _barBaseFontSize: Math.max(1, (Style.barHeight / Style.capsuleHeight) * Style.fontSizeXXS)
readonly property real barFontSize: (Settings.data.bar.position === "left" || Settings.data.bar.position === "right") ? _barBaseFontSize * 0.9 : _barBaseFontSize
readonly property color capsuleColor: Settings.data.bar.showCapsule ? Qt.alpha(Color.mSurfaceVariant, Settings.data.bar.capsuleOpacity) : "transparent"
readonly property color capsuleBorderColor: Settings.data.bar.showOutline ? Color.mPrimary : "transparent"
readonly property int capsuleBorderWidth: Settings.data.bar.showOutline ? Style.borderS : 0
readonly property color boxBorderColor: Settings.data.ui.boxBorderEnabled ? Color.mOutline : "transparent"
// Pixel-perfect utility for centering content without subpixel positioning
function pixelAlignCenter(containerSize, contentSize) {
return Math.round((containerSize - contentSize) / 2);
+3
View File
@@ -80,6 +80,9 @@ function evaluate(expression) {
.replace(/\bcosd\s*\(/g, '(function(x) { return Math.cos(' + (Math.PI / 180) + ' * x); })(')
.replace(/\btand\s*\(/g, '(function(x) { return Math.tan(' + (Math.PI / 180) + ' * x); })(');
// Handle ^ for exponentiation: convert 2^3 to Math.pow(2,3)
processed = processed.replace(/([\d.]+|\))\^([\d.]+|\([^)]*\))/g, 'Math.pow($1,$2)');
// Sanitize expression (only allow safe characters)
if (!/^[0-9+\-*/().\s\w,]+$/.test(processed)) {
throw new Error("Invalid characters in expression");
+133 -16
View File
@@ -40,11 +40,21 @@ Variants {
// Used to debounce wallpaper changes
property string futureWallpaper: ""
// Track the original wallpaper path being transitioned to (before caching)
property string transitioningToOriginalPath: ""
// Fillmode default is "crop"
property real fillMode: WallpaperService.getFillModeUniform()
property vector4d fillColor: Qt.vector4d(Settings.data.wallpaper.fillColor.r, Settings.data.wallpaper.fillColor.g, Settings.data.wallpaper.fillColor.b, 1.0)
// Solid color mode - track whether current/next are solid colors
property bool isSolid1: false
property bool isSolid2: false
property color _solidColor1: Settings.data.wallpaper.solidColor
property color _solidColor2: Settings.data.wallpaper.solidColor
property vector4d solidColor1: Qt.vector4d(_solidColor1.r, _solidColor1.g, _solidColor1.b, 1.0)
property vector4d solidColor2: Qt.vector4d(_solidColor2.r, _solidColor2.g, _solidColor2.b, 1.0)
Component.onCompleted: setWallpaperInitial()
Component.onDestruction: {
@@ -67,7 +77,6 @@ Variants {
target: WallpaperService
function onWallpaperChanged(screenName, path) {
if (screenName === modelData.name) {
// Request preprocessed wallpaper from cache service
requestPreprocessedWallpaper(path);
}
}
@@ -76,7 +85,6 @@ Variants {
Connections {
target: CompositorService
function onDisplayScalesChanged() {
// Re-request preprocessed wallpaper at new dimensions
if (isStartupTransition) {
return;
}
@@ -87,7 +95,7 @@ Variants {
}
}
color: Color.transparent
color: "transparent"
screen: modelData
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusionMode: ExclusionMode.Ignore
@@ -105,9 +113,7 @@ Variants {
interval: 333
running: false
repeat: false
onTriggered: {
changeWallpaper();
}
onTriggered: changeWallpaper()
}
Image {
@@ -193,6 +199,12 @@ Variants {
property real screenWidth: width
property real screenHeight: height
// Solid color mode
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
property vector4d solidColor1: root.solidColor1
property vector4d solidColor2: root.solidColor2
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_fade.frag.qsb")
}
}
@@ -219,6 +231,12 @@ Variants {
property real screenWidth: width
property real screenHeight: height
// Solid color mode
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
property vector4d solidColor1: root.solidColor1
property vector4d solidColor2: root.solidColor2
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_wipe.frag.qsb")
}
}
@@ -247,6 +265,12 @@ Variants {
property real screenWidth: width
property real screenHeight: height
// Solid color mode
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
property vector4d solidColor1: root.solidColor1
property vector4d solidColor2: root.solidColor2
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_disc.frag.qsb")
}
}
@@ -275,6 +299,12 @@ Variants {
property real screenWidth: width
property real screenHeight: height
// Solid color mode
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
property vector4d solidColor1: root.solidColor1
property vector4d solidColor2: root.solidColor2
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_stripes.frag.qsb")
}
}
@@ -290,6 +320,13 @@ Variants {
duration: transitionType == "stripes" ? Settings.data.wallpaper.transitionDuration * 1.6 : Settings.data.wallpaper.transitionDuration
easing.type: Easing.InOutCubic
onFinished: {
// Clear the tracking of what we're transitioning to
transitioningToOriginalPath = "";
// Transfer solid color state from next to current
isSolid1 = isSolid2;
_solidColor1 = _solidColor2;
// Assign new image to current BEFORE clearing to prevent flicker
const tempSource = nextWallpaper.source;
currentWallpaper.source = tempSource;
@@ -299,6 +336,7 @@ Variants {
// Force complete cleanup to free texture memory
Qt.callLater(() => {
nextWallpaper.source = "";
isSolid2 = false;
Qt.callLater(() => {
currentWallpaper.asynchronous = true;
});
@@ -318,12 +356,28 @@ Variants {
return;
}
// Check if we're in solid color mode
if (Settings.data.wallpaper.useSolidColor) {
var solidPath = WallpaperService.createSolidColorPath(Settings.data.wallpaper.solidColor.toString());
futureWallpaper = solidPath;
performStartupTransition();
return;
}
const wallpaperPath = WallpaperService.getWallpaper(modelData.name);
// Check if the path is a solid color
if (WallpaperService.isSolidColorPath(wallpaperPath)) {
futureWallpaper = wallpaperPath;
performStartupTransition();
return;
}
const compositorScale = CompositorService.getDisplayScale(modelData.name);
const targetWidth = Math.round(modelData.width * compositorScale);
const targetHeight = Math.round(modelData.height * compositorScale);
ImageCacheService.getFullscreen(wallpaperPath, modelData.name, targetWidth, targetHeight, function (cachedPath, success) {
ImageCacheService.getLarge(wallpaperPath, targetWidth, targetHeight, function (cachedPath, success) {
if (success) {
futureWallpaper = cachedPath;
} else {
@@ -336,11 +390,26 @@ Variants {
// ------------------------------------------------------
function requestPreprocessedWallpaper(originalPath) {
// If we're already transitioning to this exact wallpaper, skip the request
if (transitioning && originalPath === transitioningToOriginalPath) {
return;
}
// Store the original path we're working towards
transitioningToOriginalPath = originalPath;
// Handle solid color paths - no preprocessing needed
if (WallpaperService.isSolidColorPath(originalPath)) {
futureWallpaper = originalPath;
debounceTimer.restart();
return;
}
const compositorScale = CompositorService.getDisplayScale(modelData.name);
const targetWidth = Math.round(modelData.width * compositorScale);
const targetHeight = Math.round(modelData.height * compositorScale);
ImageCacheService.getFullscreen(originalPath, modelData.name, targetWidth, targetHeight, function (cachedPath, success) {
ImageCacheService.getLarge(originalPath, targetWidth, targetHeight, function (cachedPath, success) {
if (success) {
futureWallpaper = cachedPath;
} else {
@@ -355,6 +424,20 @@ Variants {
transitionAnimation.stop();
transitionProgress = 0.0;
// Check if this is a solid color
var isSolidSource = WallpaperService.isSolidColorPath(source);
isSolid1 = isSolidSource;
isSolid2 = false;
if (isSolidSource) {
var colorStr = WallpaperService.getSolidColor(source);
_solidColor1 = colorStr;
// Clear image sources for memory efficiency
currentWallpaper.source = "";
nextWallpaper.source = "";
return;
}
// Clear nextWallpaper completely to free texture memory
nextWallpaper.source = "";
nextWallpaper.sourceSize = undefined;
@@ -368,7 +451,24 @@ Variants {
// ------------------------------------------------------
function setWallpaperWithTransition(source) {
if (source === currentWallpaper.source) {
// Check if this is a solid color transition
var isSolidSource = WallpaperService.isSolidColorPath(source);
// For solid colors, check if we're already showing the same color
if (isSolidSource && isSolid1) {
var newColor = WallpaperService.getSolidColor(source);
if (newColor === _solidColor1.toString()) {
return;
}
}
// For images, check if source matches
if (!isSolidSource && source === currentWallpaper.source) {
return;
}
// If we're already transitioning to this same wallpaper, skip
if (transitioning && source === nextWallpaper.source) {
return;
}
@@ -377,30 +477,47 @@ Variants {
transitionAnimation.stop();
transitionProgress = 0;
// Assign nextWallpaper to currentWallpaper BEFORE clearing to prevent flicker
// Transfer next state to current
isSolid1 = isSolid2;
_solidColor1 = _solidColor2;
const newCurrentSource = nextWallpaper.source;
currentWallpaper.source = newCurrentSource;
// Now clear nextWallpaper after current has the new source
Qt.callLater(() => {
nextWallpaper.source = "";
isSolid2 = false;
// Now set the next wallpaper after a brief delay
Qt.callLater(() => {
nextWallpaper.source = source;
currentWallpaper.asynchronous = false;
transitionAnimation.start();
_startTransitionTo(source, isSolidSource);
});
});
return;
}
nextWallpaper.source = source;
if (nextWallpaper.status === Image.Ready) {
_startTransitionTo(source, isSolidSource);
}
// Helper to start transition to a new source
function _startTransitionTo(source, isSolidSource) {
isSolid2 = isSolidSource;
if (isSolidSource) {
var colorStr = WallpaperService.getSolidColor(source);
_solidColor2 = colorStr;
// No image to load, start transition immediately
nextWallpaper.source = "";
currentWallpaper.asynchronous = false;
transitionAnimation.start();
} else {
nextWallpaper.pendingTransition = true;
nextWallpaper.source = source;
if (nextWallpaper.status === Image.Ready) {
currentWallpaper.asynchronous = false;
transitionAnimation.start();
} else {
nextWallpaper.pendingTransition = true;
}
}
}
+38 -2
View File
@@ -18,6 +18,8 @@ Loader {
required property ShellScreen modelData
property string wallpaper: ""
property string cachedWallpaper: ""
property bool isSolidColor: false
property color solidColor: Settings.data.wallpaper.solidColor
Component.onCompleted: {
if (modelData) {
@@ -47,6 +49,14 @@ Loader {
Qt.callLater(setWallpaperInitial);
return;
}
// Check if we're in solid color mode
if (Settings.data.wallpaper.useSolidColor) {
var solidPath = WallpaperService.createSolidColorPath(Settings.data.wallpaper.solidColor.toString());
wallpaper = solidPath;
return;
}
const wallpaperPath = WallpaperService.getWallpaper(modelData.name);
if (wallpaperPath && wallpaperPath !== wallpaper) {
wallpaper = wallpaperPath;
@@ -57,13 +67,24 @@ Loader {
onWallpaperChanged: {
if (!wallpaper)
return;
// Check if this is a solid color path
if (WallpaperService.isSolidColorPath(wallpaper)) {
isSolidColor = true;
var colorStr = WallpaperService.getSolidColor(wallpaper);
solidColor = colorStr;
cachedWallpaper = "";
return;
}
isSolidColor = false;
// Use 1280x720 for overview since it's heavily blurred anyway
ImageCacheService.getFullscreen(wallpaper, modelData.name, 1280, 720, function (path, success) {
ImageCacheService.getLarge(wallpaper, 1280, 720, function (path, success) {
cachedWallpaper = path;
});
}
color: Color.transparent
color: "transparent"
screen: modelData
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusionMode: ExclusionMode.Ignore
@@ -76,9 +97,24 @@ Loader {
left: true
}
// Solid color background
Rectangle {
anchors.fill: parent
visible: isSolidColor
color: solidColor
Rectangle {
anchors.fill: parent
color: Settings.data.colorSchemes.darkMode ? Color.mSurface : Color.mOnSurface
opacity: 0.8
}
}
// Image background
Image {
id: bgImage
anchors.fill: parent
visible: !isSolidColor
fillMode: Image.PreserveAspectCrop
source: cachedWallpaper
smooth: true
-6
View File
@@ -223,7 +223,6 @@ Item {
required property int index
widgetId: modelData.id || ""
barDensity: Settings.data.bar.density
widgetScreen: root.screen
widgetProps: ({
"widgetId": modelData.id,
@@ -249,7 +248,6 @@ Item {
required property int index
widgetId: modelData.id || ""
barDensity: Settings.data.bar.density
widgetScreen: root.screen
widgetProps: ({
"widgetId": modelData.id,
@@ -276,7 +274,6 @@ Item {
required property int index
widgetId: modelData.id || ""
barDensity: Settings.data.bar.density
widgetScreen: root.screen
widgetProps: ({
"widgetId": modelData.id,
@@ -314,7 +311,6 @@ Item {
required property int index
widgetId: modelData.id || ""
barDensity: Settings.data.bar.density
widgetScreen: root.screen
widgetProps: ({
"widgetId": modelData.id,
@@ -342,7 +338,6 @@ Item {
required property int index
widgetId: modelData.id || ""
barDensity: Settings.data.bar.density
widgetScreen: root.screen
widgetProps: ({
"widgetId": modelData.id,
@@ -371,7 +366,6 @@ Item {
required property int index
widgetId: modelData.id || ""
barDensity: Settings.data.bar.density
widgetScreen: root.screen
widgetProps: ({
"widgetId": modelData.id,
+2 -5
View File
@@ -13,15 +13,14 @@ Item {
property string text: ""
property string suffix: ""
property string tooltipText: ""
property string density: ""
property bool autoHide: false
property bool forceOpen: false
property bool forceClose: false
property bool oppositeDirection: false
property bool hovered: false
property bool rotateText: false
property color customBackgroundColor: Color.transparent
property color customTextIconColor: Color.transparent
property color customBackgroundColor: "transparent"
property color customTextIconColor: "transparent"
readonly property string barPosition: Settings.data.bar.position
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
@@ -57,7 +56,6 @@ Item {
forceClose: root.forceClose
oppositeDirection: root.oppositeDirection
hovered: root.hovered
density: root.density
rotateText: root.rotateText
customBackgroundColor: root.customBackgroundColor
customTextIconColor: root.customTextIconColor
@@ -85,7 +83,6 @@ Item {
forceClose: root.forceClose
oppositeDirection: root.oppositeDirection
hovered: root.hovered
density: root.density
customBackgroundColor: root.customBackgroundColor
customTextIconColor: root.customTextIconColor
onShown: root.shown()
+6 -24
View File
@@ -14,14 +14,13 @@ Item {
property string text: ""
property string suffix: ""
property string tooltipText: ""
property string density: ""
property bool autoHide: false
property bool forceOpen: false
property bool forceClose: false
property bool oppositeDirection: false
property bool hovered: false
property color customBackgroundColor: Color.transparent
property color customTextIconColor: Color.transparent
property color customBackgroundColor: "transparent"
property color customTextIconColor: "transparent"
readonly property bool collapseToIcon: forceClose && !forceOpen
@@ -51,23 +50,7 @@ Item {
readonly property color bgColor: hovered ? Color.mHover : (customBackgroundColor.a > 0) ? customBackgroundColor : Style.capsuleColor
readonly property color fgColor: hovered ? Color.mOnHover : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
readonly property real iconSize: {
switch (root.density) {
case "compact":
return Math.max(1, Math.round(pillHeight * 0.65));
default:
return Math.max(1, Math.round(pillHeight * 0.48));
}
}
readonly property real textSize: {
switch (root.density) {
case "compact":
return Math.max(1, Math.round(pillHeight * 0.45));
default:
return Math.max(1, Math.round(pillHeight * 0.33));
}
}
readonly property real iconSize: Style.toOdd(pillHeight * 0.48)
width: {
if (collapseToIcon) {
@@ -120,7 +103,7 @@ Item {
}
opacity: revealed ? Style.opacityFull : Style.opacityNone
color: Color.transparent // Make pill background transparent to avoid double opacity
color: "transparent" // Make pill background transparent to avoid double opacity
topLeftRadius: oppositeDirection ? 0 : Style.radiusM
bottomLeftRadius: oppositeDirection ? 0 : Style.radiusM
@@ -146,9 +129,8 @@ Item {
}
text: root.text + root.suffix
family: Settings.data.ui.fontFixed
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightBold
color: root.fgColor
visible: revealed
}
@@ -174,7 +156,7 @@ Item {
width: hasIcon ? pillHeight : 0
height: pillHeight
radius: Math.min(Style.radiusL, width / 2)
color: Color.transparent // Make icon background transparent to avoid double opacity
color: "transparent" // Make icon background transparent to avoid double opacity
anchors.verticalCenter: parent.verticalCenter
x: oppositeDirection ? 0 : (parent.width - width)
+6 -24
View File
@@ -14,15 +14,14 @@ Item {
property string text: ""
property string suffix: ""
property string tooltipText: ""
property string density: ""
property bool autoHide: false
property bool forceOpen: false
property bool forceClose: false
property bool oppositeDirection: false
property bool hovered: false
property bool rotateText: false
property color customBackgroundColor: Color.transparent
property color customTextIconColor: Color.transparent
property color customBackgroundColor: "transparent"
property color customTextIconColor: "transparent"
readonly property bool collapseToIcon: forceClose && !forceOpen
@@ -58,23 +57,7 @@ Item {
readonly property color bgColor: hovered ? Color.mHover : (customBackgroundColor.a > 0) ? customBackgroundColor : Style.capsuleColor
readonly property color fgColor: hovered ? Color.mOnHover : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
readonly property real iconSize: {
switch (root.density) {
case "compact":
return Math.max(1, Math.round(pillHeight * 0.65));
default:
return Math.max(1, Math.round(pillHeight * 0.48));
}
}
readonly property real textSize: {
switch (root.density) {
case "compact":
return Math.max(1, Math.round(pillHeight * 0.38));
default:
return Math.max(1, Math.round(pillHeight * 0.33));
}
}
readonly property real iconSize: Style.toOdd(pillHeight * 0.48)
// For vertical bars: width is just icon size, height includes pill space
width: buttonSize
@@ -136,7 +119,7 @@ Item {
}
opacity: revealed ? Style.opacityFull : Style.opacityNone
color: Color.transparent // Make pill background transparent to avoid double opacity
color: "transparent" // Make pill background transparent to avoid double opacity
// Radius logic for vertical expansion - rounded on the side that connects to icon
topLeftRadius: openUpward ? Style.radiusM : 0
@@ -154,9 +137,8 @@ Item {
rotation: rotateText ? -90 : 0
text: root.text + root.suffix
family: Settings.data.ui.fontFixed
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: root.fgColor
@@ -195,7 +177,7 @@ Item {
width: buttonSize
height: buttonSize
radius: Math.min(Style.radiusL, width / 2)
color: Color.transparent // Make icon background transparent to avoid double opacity
color: "transparent" // Make icon background transparent to avoid double opacity
// Icon positioning based on direction
x: 0
-10
View File
@@ -11,9 +11,6 @@ Item {
required property var widgetScreen
required property var widgetProps
property string barDensity: "default"
readonly property real barScaling: barDensity === "mini" ? 0.8 : (barDensity === "compact" ? 0.9 : 1.0)
// Extract section info from widgetProps
readonly property string section: widgetProps ? (widgetProps.section || "") : ""
readonly property int sectionIndex: widgetProps ? (widgetProps.sectionWidgetIndex || 0) : 0
@@ -81,13 +78,6 @@ Item {
item.screen = widgetScreen;
}
// Set bar scaling property
if (item.hasOwnProperty("barScaling")) {
item.barScaling = Qt.binding(function () {
return root.barScaling;
});
}
// Inject plugin API for plugin widgets
// The API is fully populated (settings/translations already loaded) by PluginService
if (BarWidgetRegistry.isPluginWidget(widgetId)) {
+3 -4
View File
@@ -48,7 +48,7 @@ PopupWindow {
// Use the content height of the Flickable for implicit height
implicitHeight: Math.min(screen?.height * 0.9, flickable.contentHeight + (Style.marginS * 2))
visible: false
color: Color.transparent
color: "transparent"
anchor.item: anchorItem
anchor.rect.x: {
if (anchorItem && screen) {
@@ -249,7 +249,7 @@ PopupWindow {
}
}
color: Color.transparent
color: "transparent"
property var subMenu: null
NDivider {
@@ -261,7 +261,7 @@ PopupWindow {
Rectangle {
id: innerRect
anchors.fill: parent
color: mouseArea.containsMouse ? Color.mHover : Color.transparent
color: mouseArea.containsMouse ? Color.mHover : "transparent"
radius: Style.radiusS
visible: !(modelData?.isSeparator ?? false)
@@ -424,7 +424,6 @@ PopupWindow {
color: Color.mPrimary
text: root.isPinned ? I18n.tr("settings.bar.tray.unpin-application") : I18n.tr("settings.bar.tray.pin-application")
pointSize: Style.fontSizeS
font.weight: Font.Medium
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
+29 -154
View File
@@ -20,7 +20,6 @@ Item {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId] || {}
property var widgetSettings: {
@@ -47,12 +46,13 @@ Item {
readonly property string windowTitle: CompositorService.getFocusedWindowTitle() || "No active window"
readonly property string fallbackIcon: "user-desktop"
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75 * barScaling)
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85 * barScaling)
readonly property int textSize: Math.round(Style.capsuleHeight * 0.4 * barScaling)
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75)
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85)
implicitHeight: visible ? (isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : Style.capsuleHeight) : 0
implicitWidth: visible ? (isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : dynamicWidth)) : 0
// For horizontal bars, height is always capsuleHeight (no animation needed)
// For vertical bars, collapse to 0 when hidden
implicitHeight: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : Style.capsuleHeight
implicitWidth: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : dynamicWidth)
// "visible": Always Visible, "hidden": Hide When Empty, "transparent": Transparent When Empty
visible: (hideMode !== "hidden" || hasFocusedWindow) || opacity > 0
@@ -81,16 +81,16 @@ Item {
function calculateContentWidth() {
// Calculate the actual content width based on visible elements
var contentWidth = 0;
var margins = Style.marginS * barScaling * 2; // Left and right margins
var margins = Style.marginS * 2; // Left and right margins
// Icon width (if visible)
if (showIcon) {
contentWidth += iconSize;
contentWidth += Style.marginS * barScaling; // Spacing after icon
contentWidth += Style.marginS; // Spacing after icon
}
// Text width (use the measured width)
contentWidth += fullTitleMetrics.contentWidth;
contentWidth += titleContainer.measuredWidth;
// Additional small margin for text
contentWidth += Style.marginXXS * 2;
@@ -158,16 +158,6 @@ Item {
}
}
// Hidden text element to measure full title width
NText {
id: fullTitleMetrics
visible: false
text: windowTitle
pointSize: root.textSize
applyUiScale: false
font.weight: Style.fontWeightMedium
}
NPopupContextMenu {
id: contextMenu
@@ -214,14 +204,15 @@ Item {
Item {
id: mainContainer
anchors.fill: parent
anchors.leftMargin: isVerticalBar ? 0 : Style.marginS * barScaling
anchors.rightMargin: isVerticalBar ? 0 : Style.marginS * barScaling
anchors.leftMargin: isVerticalBar ? 0 : Style.marginS
anchors.rightMargin: isVerticalBar ? 0 : Style.marginS
// Horizontal layout for top/bottom bars
RowLayout {
id: rowLayout
height: iconSize
y: Style.pixelAlignCenter(parent.height, height)
spacing: Style.marginS * barScaling
spacing: Style.marginS
visible: !isVerticalBar
z: 1
@@ -251,146 +242,30 @@ Item {
}
}
// Title container with scrolling
Item {
NScrollText {
id: titleContainer
Layout.preferredWidth: {
text: windowTitle
Layout.alignment: Qt.AlignVCenter
maxWidth: {
// Calculate available width based on other elements
var iconWidth = (showIcon && windowIcon.visible ? (iconSize + Style.marginS) : 0);
var totalMargins = Style.marginXXS * 2;
var availableWidth = mainContainer.width - iconWidth - totalMargins;
return Math.max(20, availableWidth);
}
Layout.maximumWidth: Layout.preferredWidth
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: titleText.height
clip: true
property bool isScrolling: false
property bool isResetting: false
property real textWidth: fullTitleMetrics.contentWidth
property real containerWidth: width
property bool needsScrolling: textWidth > containerWidth
// Timer for "always" mode with delay
Timer {
id: scrollStartTimer
interval: 1000
repeat: false
onTriggered: {
if (scrollingMode === "always" && titleContainer.needsScrolling) {
titleContainer.isScrolling = true;
titleContainer.isResetting = false;
}
}
scrollMode: {
if (scrollingMode === "always")
return NScrollText.ScrollMode.Always;
if (scrollingMode === "hover")
return NScrollText.ScrollMode.Hover;
return NScrollText.ScrollMode.Never;
}
// Update scrolling state based on mode
property var updateScrollingState: function () {
if (scrollingMode === "never") {
isScrolling = false;
isResetting = false;
} else if (scrollingMode === "always") {
if (needsScrolling) {
if (mouseArea.containsMouse) {
isScrolling = false;
isResetting = true;
} else {
scrollStartTimer.restart();
}
} else {
scrollStartTimer.stop();
isScrolling = false;
isResetting = false;
}
} else if (scrollingMode === "hover") {
if (mouseArea.containsMouse && needsScrolling) {
isScrolling = true;
isResetting = false;
} else {
isScrolling = false;
if (needsScrolling) {
isResetting = true;
}
}
}
}
onWidthChanged: updateScrollingState()
Component.onCompleted: updateScrollingState()
// React to hover changes
Connections {
target: mouseArea
function onContainsMouseChanged() {
titleContainer.updateScrollingState();
}
}
// Scrolling content with seamless loop
Item {
id: scrollContainer
height: parent.height
width: childrenRect.width
property real scrollX: 0
x: scrollX
RowLayout {
spacing: 50 // Gap between text copies
NText {
id: titleText
text: windowTitle
pointSize: root.textSize
applyUiScale: false
font.weight: Style.fontWeightMedium
verticalAlignment: Text.AlignVCenter
color: Color.mOnSurface
onTextChanged: {
if (root.scrollingMode === "always") {
titleContainer.isScrolling = false;
titleContainer.isResetting = false;
scrollContainer.scrollX = 0;
scrollStartTimer.restart();
}
}
}
// Second copy for seamless scrolling
NText {
text: windowTitle
font: titleText.font
pointSize: Style.fontSizeS * barScaling
applyUiScale: false
verticalAlignment: Text.AlignVCenter
color: Color.mOnSurface
visible: titleContainer.needsScrolling && titleContainer.isScrolling
}
}
// Reset animation
NumberAnimation on scrollX {
running: titleContainer.isResetting
to: 0
duration: 300
easing.type: Easing.OutQuad
onFinished: {
titleContainer.isResetting = false;
}
}
// Seamless infinite scroll
NumberAnimation on scrollX {
id: infiniteScroll
running: titleContainer.isScrolling && !titleContainer.isResetting
from: 0
to: -(titleContainer.textWidth + 50)
duration: Math.max(4000, windowTitle.length * 100)
loops: Animation.Infinite
easing.type: Easing.Linear
}
NText {
text: windowTitle
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
color: Color.mOnSurface
}
}
}
+2 -3
View File
@@ -198,7 +198,6 @@ Item {
id: pill
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: testMode ? BatteryService.getIcon(testPercent, testCharging, true) : BatteryService.getIcon(percent, charging, isReady)
text: (isReady || testMode) ? Math.round(percent) : "-"
@@ -206,8 +205,8 @@ Item {
autoHide: false
forceOpen: isReady && displayMode === "alwaysShow"
forceClose: displayMode === "alwaysHide" || (initializationComplete && !isReady)
customBackgroundColor: !initializationComplete ? Color.transparent : (charging ? Color.mPrimary : (isLowBattery ? Color.mError : Color.transparent))
customTextIconColor: !initializationComplete ? Color.transparent : (charging ? Color.mOnPrimary : (isLowBattery ? Color.mOnError : Color.transparent))
customBackgroundColor: !initializationComplete ? "transparent" : (charging ? Color.mPrimary : (isLowBattery ? Color.mError : "transparent"))
customTextIconColor: !initializationComplete ? "transparent" : (charging ? Color.mOnPrimary : (isLowBattery ? Color.mOnError : "transparent"))
tooltipText: {
let lines = [];
+1 -2
View File
@@ -69,9 +69,8 @@ Item {
id: pill
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: BluetoothService.enabled ? "bluetooth" : "bluetooth-off"
icon: !BluetoothService.enabled ? "bluetooth-off" : ((BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) ? "bluetooth-connected" : "bluetooth")
text: {
if (BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) {
const firstDevice = BluetoothService.connectedDevices[0];
-1
View File
@@ -114,7 +114,6 @@ Item {
id: pill
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: getIcon()
autoHide: false // Important to be false so we can hover as long as we want
+3 -11
View File
@@ -17,7 +17,6 @@ Rectangle {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
property var widgetSettings: {
@@ -32,8 +31,6 @@ Rectangle {
readonly property string barPosition: Settings.data.bar.position
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
readonly property bool density: Settings.data.bar.density
readonly property var now: Time.now
// Resolve settings: try user settings or defaults from BarWidgetRegistry
@@ -75,14 +72,13 @@ Rectangle {
Binding on pointSize {
value: {
if (repeater.model.length == 1) {
return Style.capsuleHeight * 0.4 * barScaling;
return Style.barFontSize;
} else {
return (index == 0) ? Style.capsuleHeight * 0.35 * barScaling : Style.capsuleHeight * 0.3 * barScaling;
return (index == 0) ? Style.barFontSize * 0.9 : Style.barFontSize * 0.75;
}
}
}
applyUiScale: false
font.weight: Style.fontWeightSemiBold
color: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
wrapMode: Text.WordWrap
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
@@ -105,12 +101,8 @@ Rectangle {
visible: text !== ""
text: modelData
family: useCustomFont && customFont ? customFont : Settings.data.ui.fontDefault
Binding on pointSize {
value: Style.fontSizeS * barScaling
}
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightBold
color: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
wrapMode: Text.WordWrap
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
+2 -3
View File
@@ -85,14 +85,13 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection()
baseSize: Style.capsuleHeight
applyUiScale: false
density: Settings.data.bar.density
customRadius: Style.radiusL
colorBg: Style.capsuleColor
colorFg: iconColor
colorBgHover: useDistroLogo ? Color.mSurfaceVariant : Color.mHover
colorFgHover: iconHoverColor
colorBorder: Color.transparent
colorBorderHover: useDistroLogo ? Color.mHover : Color.transparent
colorBorder: "transparent"
colorBorderHover: useDistroLogo ? Color.mHover : "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
+43 -1
View File
@@ -130,6 +130,48 @@ Item {
return " ".repeat(currentMaxTextLength);
}
readonly property bool enableColorization: widgetSettings.enableColorization || false
readonly property string colorizeSystemIcon: {
if (widgetSettings.colorizeSystemIcon !== undefined)
return widgetSettings.colorizeSystemIcon;
return widgetMetadata.colorizeSystemIcon !== undefined ? widgetMetadata.colorizeSystemIcon : "none";
}
readonly property bool isColorizing: enableColorization && colorizeSystemIcon !== "none"
readonly property color iconColor: {
if (!isColorizing)
return Color.mOnSurface;
switch (colorizeSystemIcon) {
case "primary":
return Color.mPrimary;
case "secondary":
return Color.mSecondary;
case "tertiary":
return Color.mTertiary;
case "error":
return Color.mError;
default:
return Color.mOnSurface;
}
}
readonly property color iconHoverColor: {
if (!isColorizing)
return Color.mOnHover;
switch (colorizeSystemIcon) {
case "primary":
return Qt.darker(Color.mPrimary, 1.2);
case "secondary":
return Qt.darker(Color.mSecondary, 1.2);
case "tertiary":
return Qt.darker(Color.mTertiary, 1.2);
case "error":
return Qt.darker(Color.mError, 1.2);
default:
return Color.mOnHover;
}
}
implicitWidth: pill.width
implicitHeight: pill.height
@@ -142,10 +184,10 @@ Item {
oppositeDirection: BarService.getPillDirection(root)
icon: _pillIcon
text: _pillText
density: Settings.data.bar.density
rotateText: isVerticalBar && currentMaxTextLength > 0
autoHide: false
forceOpen: _pillForceOpen
customTextIconColor: isColorizing ? iconColor : "transparent"
tooltipText: {
var tooltipLines = [];
+2 -3
View File
@@ -11,14 +11,13 @@ NIconButton {
icon: "dark-mode"
tooltipText: Settings.data.colorSchemes.darkMode ? I18n.tr("tooltips.switch-to-light-mode") : I18n.tr("tooltips.switch-to-dark-mode")
tooltipDirection: BarService.getTooltipDirection()
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: Style.capsuleColor
colorFg: Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
onClicked: Settings.data.colorSchemes.darkMode = !Settings.data.colorSchemes.darkMode
border.color: Style.capsuleBorderColor
-1
View File
@@ -39,7 +39,6 @@ Item {
screen: root.screen
text: IdleInhibitorService.timeout == null ? "" : Time.formatVagueHumanReadableDuration(IdleInhibitorService.timeout)
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: IdleInhibitorService.isInhibited ? "keep-awake-on" : "keep-awake-off"
tooltipText: IdleInhibitorService.isInhibited ? I18n.tr("tooltips.disable-keep-awake") : I18n.tr("tooltips.enable-keep-awake")
+5 -5
View File
@@ -33,6 +33,7 @@ Item {
}
readonly property string displayMode: (widgetSettings.displayMode !== undefined) ? widgetSettings.displayMode : widgetMetadata.displayMode
readonly property bool showIcon: (widgetSettings.showIcon !== undefined) ? widgetSettings.showIcon : widgetMetadata.showIcon
// Use the shared service for keyboard layout
property string currentLayout: KeyboardLayoutService.currentLayout
@@ -66,18 +67,17 @@ Item {
BarPill {
id: pill
anchors.verticalCenter: parent.verticalCenter
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: "keyboard"
icon: root.showIcon ? "keyboard" : ""
autoHide: false // Important to be false so we can hover as long as we want
text: currentLayout.toUpperCase()
tooltipText: I18n.tr("tooltips.keyboard-layout", {
"layout": currentLayout.toUpperCase()
})
forceOpen: root.displayMode === "forceOpen"
forceClose: root.displayMode === "alwaysHide"
// When icon is disabled, always show the layout text
forceOpen: !root.showIcon || root.displayMode === "forceOpen"
forceClose: root.showIcon && root.displayMode === "alwaysHide"
onClicked: {}
onRightClicked: {
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
+87
View File
@@ -0,0 +1,87 @@
import QtQuick
import Quickshell
import qs.Commons
import qs.Modules.Panels.Settings
import qs.Services.UI
import qs.Widgets
NIconButton {
id: root
property ShellScreen screen
// Widget properties passed from Bar.qml for per-instance settings
property string widgetId: ""
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
property var widgetSettings: {
if (section && sectionWidgetIndex >= 0) {
var widgets = Settings.data.bar.widgets[section];
if (widgets && sectionWidgetIndex < widgets.length) {
return widgets[sectionWidgetIndex];
}
}
return {};
}
readonly property string iconName: widgetSettings.icon || (widgetMetadata ? widgetMetadata.icon : "search")
readonly property bool usePrimaryColor: (widgetSettings.usePrimaryColor !== undefined) ? widgetSettings.usePrimaryColor : ((widgetMetadata && widgetMetadata.usePrimaryColor !== undefined) ? widgetMetadata.usePrimaryColor : true)
icon: iconName
tooltipText: I18n.tr("context-menu.open-launcher")
tooltipDirection: BarService.getTooltipDirection()
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: Style.capsuleColor
colorBgHover: Color.mHover
colorFg: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
colorFgHover: usePrimaryColor ? Qt.darker(Color.mPrimary, 1.2) : Color.mOnHover
colorBorder: Style.capsuleBorderColor
colorBorderHover: Style.capsuleBorderColor
NPopupContextMenu {
id: contextMenu
model: [
{
"label": I18n.tr("context-menu.launcher-settings"),
"action": "launcher-settings",
"icon": "adjustments"
},
{
"label": I18n.tr("context-menu.widget-settings"),
"action": "widget-settings",
"icon": "settings"
}
]
onTriggered: action => {
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
if (popupMenuWindow) {
popupMenuWindow.close();
}
if (action === "launcher-settings") {
var panel = PanelService.getPanel("settingsPanel", screen);
panel.requestedTab = SettingsPanel.Tab.Launcher;
panel.toggle();
} else if (action === "widget-settings") {
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
}
}
}
onClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
onMiddleClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
onRightClicked: {
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
if (popupMenuWindow) {
popupMenuWindow.showContextMenu(contextMenu);
contextMenu.openAtItem(root, screen);
}
}
}
+65 -155
View File
@@ -17,7 +17,6 @@ Item {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
// Settings
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
@@ -47,10 +46,9 @@ Item {
readonly property real maxWidth: (widgetSettings.maxWidth !== undefined) ? widgetSettings.maxWidth : Math.max(widgetMetadata.maxWidth, screen ? screen.width * 0.06 : 0)
// Dimensions
readonly property int artSize: Style.toOdd(Style.capsuleHeight * 0.75 * barScaling)
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75 * barScaling)
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85 * barScaling)
readonly property int textSize: Math.round(Style.capsuleHeight * 0.4 * barScaling)
readonly property int artSize: Style.toOdd(Style.capsuleHeight * 0.75)
readonly property int iconSize: Style.toOdd(Style.capsuleHeight * 0.75)
readonly property int verticalSize: Style.toOdd(Style.capsuleHeight * 0.85)
// State
readonly property bool hasPlayer: MediaService.currentPlayer !== null
@@ -88,19 +86,22 @@ Item {
readonly property string tooltipText: {
var text = title;
var controls = [];
if (MediaService.canGoNext)
controls.push("Right click for next.");
// Right click now opens options, including player selection
controls.push("Right click for options.");
if (MediaService.canGoPrevious)
controls.push("Middle click for previous.");
return controls.length ? `${text}\n\n${controls.join("\n")}` : text;
}
// Layout
implicitWidth: visible ? (isVertical ? (isHidden ? 0 : verticalSize) : (isHidden ? 0 : contentWidth)) : 0
implicitHeight: visible ? (isVertical ? (isHidden ? 0 : verticalSize) : Style.capsuleHeight) : 0
// For horizontal bars, height is always capsuleHeight (no animation needed to prevent jitter)
// For vertical bars, collapse to 0 when hidden
implicitWidth: isVertical ? (isHidden ? 0 : verticalSize) : (isHidden ? 0 : contentWidth)
implicitHeight: isVertical ? (isHidden ? 0 : verticalSize) : Style.capsuleHeight
visible: !shouldHideIdle && (hideMode !== "hidden" || opacity > 0)
opacity: isHidden ? 0.0 : ((hideMode === "transparent" && !hasPlayer) ? 0.0 : 1.0)
property real mainContentWidth: 0
readonly property real contentWidth: {
if (useFixedWidth)
return maxWidth;
@@ -113,14 +114,20 @@ Item {
iconWidth = artSize;
}
var margins = isVertical ? 0 : (Style.marginS * 2);
// Add spacing and text width
var textWidth = 0;
if (titleMetrics.contentWidth > 0) {
textWidth = Style.marginS * barScaling + titleMetrics.contentWidth + Style.marginXXS * 2;
if (titleContainer.measuredWidth > 0) {
margins += Style.marginS;
textWidth = titleContainer.measuredWidth + Style.marginXXS * 2;
}
var margins = isVertical ? 0 : (Style.marginS * barScaling * 2);
var total = iconWidth + textWidth + margins;
// calculate the width of all elements except the scrolling text
mainContentWidth = total - textWidth;
return hasPlayer ? Math.min(total, maxWidth) : total;
}
@@ -143,16 +150,6 @@ Item {
}
}
// Hidden text for measurements
NText {
id: titleMetrics
visible: false
text: title
applyUiScale: false
pointSize: root.textSize
font.weight: Style.fontWeightMedium
}
// Context menu
NPopupContextMenu {
id: contextMenu
@@ -179,6 +176,22 @@ Item {
"icon": "media-next"
});
}
// Append available players (like in Control Center) so user can switch from the bar
var players = MediaService.getAvailablePlayers ? MediaService.getAvailablePlayers() : [];
if (players && players.length > 1) {
for (var i = 0; i < players.length; i++) {
var isCurrent = (i === MediaService.selectedPlayerIndex);
items.push({
"label": players[i].identity,
"action": "player-" + i,
"icon": isCurrent ? "check" : "disc",
"enabled": true,
"visible": true
});
}
}
items.push({
"label": I18n.tr("context-menu.widget-settings"),
"action": "widget-settings",
@@ -198,7 +211,12 @@ Item {
MediaService.previous();
else if (action === "next")
MediaService.next();
else if (action === "widget-settings") {
else if (action && action.indexOf("player-") === 0) {
var idx = parseInt(action.split("-")[1]);
if (!isNaN(idx)) {
MediaService.switchToPlayer(idx);
}
} else if (action === "widget-settings") {
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
}
}
@@ -231,9 +249,8 @@ Item {
Item {
anchors.fill: parent
anchors.leftMargin: isVertical ? 0 : Style.marginS * barScaling
anchors.rightMargin: isVertical ? 0 : Style.marginS * barScaling
clip: true
anchors.leftMargin: isVertical ? 0 : Style.marginS
anchors.rightMargin: isVertical ? 0 : Style.marginS
// Visualizer
Loader {
@@ -260,7 +277,7 @@ Item {
RowLayout {
anchors.fill: parent
anchors.verticalCenter: parent.verticalCenter
spacing: Style.marginS * barScaling
spacing: Style.marginS
visible: !isVertical
z: 1
@@ -287,17 +304,17 @@ Item {
anchors.fill: parent
visible: showProgressRing
progress: MediaService.trackLength > 0 ? MediaService.currentPosition / MediaService.trackLength : 0
lineWidth: 2 * barScaling
lineWidth: 2
}
Item {
anchors.fill: parent
anchors.margins: showProgressRing ? (3 * barScaling) : 0.5
anchors.margins: showProgressRing ? (3) : 0.5
NImageRounded {
visible: showAlbumArt && hasPlayer
anchors.fill: parent
anchors.margins: showProgressRing ? 0 : -1 * barScaling
anchors.margins: showProgressRing ? 0 : -1
radius: width / 2
imagePath: MediaService.trackArtUrl
fallbackIcon: MediaService.isPlaying ? "media-pause" : "media-play"
@@ -311,25 +328,33 @@ Item {
y: Style.pixelAlignCenter(parent.height, contentHeight)
icon: MediaService.isPlaying ? "media-pause" : "media-play"
color: Color.mOnSurface
pointSize: 8 * barScaling
pointSize: Style.barFontSize
}
}
}
// Scrolling title
Item {
NScrollText {
id: titleContainer
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: Style.capsuleHeight
ScrollingText {
anchors.fill: parent
text: title
textColor: hasPlayer ? Color.mOnSurface : Color.mOnSurfaceVariant
fontSize: root.textSize
scrollMode: scrollingMode
needsScroll: titleMetrics.contentWidth > parent.width
text: title
scrollMode: {
if (scrollingMode === "always")
return NScrollText.ScrollMode.Always;
if (scrollingMode === "hover")
return NScrollText.ScrollMode.Hover;
return NScrollText.ScrollMode.Never;
}
cursorShape: hasPlayer ? Qt.PointingHandCursor : Qt.ArrowCursor
maxWidth: root.maxWidth - root.mainContentWidth
NText {
// anchors.fill: parent
color: hasPlayer ? Color.mOnSurface : Color.mOnSurfaceVariant
pointSize: Style.barFontSize
}
}
}
@@ -348,7 +373,7 @@ Item {
anchors.fill: parent
visible: showProgressRing
progress: MediaService.trackLength > 0 ? MediaService.currentPosition / MediaService.trackLength : 0
lineWidth: Style.toOdd(2 * barScaling)
lineWidth: Style.toOdd(2)
}
NImageRounded {
@@ -482,119 +507,4 @@ Item {
ctx.stroke();
}
}
// Scrolling Text Component
component ScrollingText: Item {
id: scrollText
property string text
property color textColor
property real fontSize
property string scrollMode
property bool needsScroll
clip: true
implicitHeight: titleText.height
property bool isScrolling: false
property bool isResetting: false
Timer {
id: scrollTimer
interval: 1000
onTriggered: {
if (scrollMode === "always" && needsScroll) {
scrollText.isScrolling = true;
scrollText.isResetting = false;
}
}
}
MouseArea {
id: hoverArea
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.NoButton
cursorShape: hasPlayer ? Qt.PointingHandCursor : Qt.ArrowCursor
}
function updateState() {
if (scrollMode === "never") {
isScrolling = false;
isResetting = false;
} else if (scrollMode === "always") {
if (needsScroll) {
if (hoverArea.containsMouse) {
isScrolling = false;
isResetting = true;
} else {
scrollTimer.restart();
}
}
} else if (scrollMode === "hover") {
isScrolling = hoverArea.containsMouse && needsScroll;
isResetting = !hoverArea.containsMouse && needsScroll;
}
}
onWidthChanged: updateState()
Component.onCompleted: updateState()
Connections {
target: hoverArea
function onContainsMouseChanged() {
scrollText.updateState();
}
}
Item {
id: scrollContainer
y: (parent.height - titleText.contentHeight) / 2
height: titleText.contentHeight
property real scrollX: 0
x: scrollX
Row {
spacing: 50
NText {
id: titleText
text: scrollText.text
color: textColor
pointSize: fontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
onTextChanged: {
scrollText.isScrolling = false;
scrollText.isResetting = false;
scrollContainer.scrollX = 0;
if (scrollText.needsScroll)
scrollTimer.restart();
}
}
NText {
text: scrollText.text
color: textColor
pointSize: fontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
visible: scrollText.needsScroll && scrollText.isScrolling
}
}
NumberAnimation on scrollX {
running: scrollText.isResetting
to: 0
duration: 300
easing.type: Easing.OutQuad
onFinished: scrollText.isResetting = false
}
NumberAnimation on scrollX {
running: scrollText.isScrolling && !scrollText.isResetting
from: 0
to: -(titleMetrics.contentWidth + 50)
duration: Math.max(4000, scrollText.text.length * 120)
loops: Animation.Infinite
easing.type: Easing.Linear
}
}
}
}
-1
View File
@@ -132,7 +132,6 @@ Item {
screen: root.screen
oppositeDirection: BarService.getPillDirection(root)
icon: AudioService.getInputIcon()
density: Settings.data.bar.density
autoHide: false // Important to be false so we can hover as long as we want
text: {
const maxVolume = Settings.data.audio.volumeOverdrive ? 1.5 : 1.0;
@@ -69,7 +69,6 @@ Item {
id: pill
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: {
try {
@@ -110,7 +109,11 @@ Item {
autoHide: false
forceOpen: !isBarVertical && root.displayMode === "alwaysShow"
forceClose: isBarVertical || root.displayMode === "alwaysHide" || text === ""
onClicked: PanelService.getPanel("wifiPanel", screen)?.toggle(this)
onClicked: {
var panel = PanelService.getPanel("wifiPanel", screen);
if (panel)
panel.toggle(this);
}
onRightClicked: {
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
if (popupMenuWindow) {
@@ -119,8 +122,29 @@ Item {
}
}
tooltipText: {
if (pill.text !== "") {
return pill.text;
try {
if (NetworkService.ethernetConnected) {
const d = NetworkService.activeEthernetDetails || ({});
let base = "";
if (d.ifname && d.ifname.length > 0)
base = d.ifname;
else if (d.connectionName && d.connectionName.length > 0)
base = d.connectionName;
else if (NetworkService.activeEthernetIf && NetworkService.activeEthernetIf.length > 0)
base = NetworkService.activeEthernetIf;
else
base = I18n.tr("quickSettings.wifi.label.ethernet");
const speed = (d.speed && d.speed.length > 0) ? d.speed : "";
return speed ? (base + " — " + speed) : base;
}
// WiFi tooltip: SSID link speed (if available)
if (pill.text !== "") {
const w = NetworkService.activeWifiDetails || ({});
const rate = (w.rateShort && w.rateShort.length > 0) ? w.rateShort : (w.rate || "");
return rate && rate.length > 0 ? (pill.text + " — " + rate) : pill.text;
}
} catch (e) {
// noop
}
return I18n.tr("tooltips.manage-wifi");
}
+2 -3
View File
@@ -14,14 +14,13 @@ NIconButton {
property ShellScreen screen
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: Settings.data.nightLight.forced ? Color.mPrimary : Style.capsuleColor
colorFg: Settings.data.nightLight.forced ? Color.mOnPrimary : Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
+2 -3
View File
@@ -14,14 +14,13 @@ NIconButton {
property ShellScreen screen
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: PowerProfileService.noctaliaPerformanceMode ? Color.mPrimary : Style.capsuleColor
colorFg: PowerProfileService.noctaliaPerformanceMode ? Color.mOnPrimary : Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
+2 -3
View File
@@ -50,15 +50,14 @@ NIconButton {
baseSize: Style.capsuleHeight
applyUiScale: false
density: Settings.data.bar.density
customRadius: Style.radiusL
icon: NotificationService.doNotDisturb ? "bell-off" : "bell"
tooltipText: NotificationService.doNotDisturb ? I18n.tr("tooltips.open-notification-history-disable-dnd") : I18n.tr("tooltips.open-notification-history-enable-dnd")
tooltipDirection: BarService.getTooltipDirection()
colorBg: Style.capsuleColor
colorFg: Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
visible: count > 0 || !hideWhenZero
+3 -3
View File
@@ -14,7 +14,6 @@ NIconButton {
baseSize: Style.capsuleHeight
applyUiScale: false
density: Settings.data.bar.density
customRadius: Style.radiusL
visible: PowerProfileService.available
icon: PowerProfileService.getIcon()
@@ -24,9 +23,10 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection()
colorBg: (PowerProfileService.profile === PowerProfile.Balanced) ? Style.capsuleColor : Color.mPrimary
colorFg: (PowerProfileService.profile === PowerProfile.Balanced) ? Color.mOnSurface : Color.mOnPrimary
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
onClicked: PowerProfileService.cycleProfile()
onRightClicked: PowerProfileService.cycleProfileReverse()
}
+4 -6
View File
@@ -18,19 +18,17 @@ NIconButton {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
icon: ScreenRecorderService.isPending ? "" : "camera-video"
tooltipText: ScreenRecorderService.isRecording ? I18n.tr("tooltips.click-to-stop-recording") : I18n.tr("tooltips.click-to-start-recording")
tooltipDirection: BarService.getTooltipDirection()
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: ScreenRecorderService.isRecording ? Color.mPrimary : Style.capsuleColor
colorFg: ScreenRecorderService.isRecording ? Color.mOnPrimary : Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
@@ -55,8 +53,8 @@ NIconButton {
id: pendingSpinner
icon: "loader-2"
visible: ScreenRecorderService.isPending
pointSize: Math.max(1, Style.toOdd(root.width * root.barScaling * 0.65))
applyUiScale: root.applyUiScale
pointSize: Style.barFontSize
applyUiScale: false
color: root.enabled && root.hovering ? colorFgHover : colorFg
anchors.centerIn: parent
transformOrigin: Item.Center
+2 -3
View File
@@ -47,7 +47,6 @@ NIconButton {
}
}
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
@@ -56,8 +55,8 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection()
colorBg: Style.capsuleColor
colorFg: root.iconColor
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
+111 -55
View File
@@ -20,7 +20,6 @@ Rectangle {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
property var widgetSettings: {
@@ -35,8 +34,6 @@ Rectangle {
readonly property string barPosition: Settings.data.bar.position
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
readonly property bool density: Settings.data.bar.density
readonly property bool barCompact: Settings.data.bar.density === "compact"
readonly property bool compactMode: widgetSettings.compactMode !== undefined ? widgetSettings.compactMode : widgetMetadata.compactMode
readonly property bool usePrimaryColor: widgetSettings.usePrimaryColor !== undefined ? widgetSettings.usePrimaryColor : widgetMetadata.usePrimaryColor
@@ -48,12 +45,12 @@ Rectangle {
readonly property bool showMemoryAsPercent: (widgetSettings.showMemoryAsPercent !== undefined) ? widgetSettings.showMemoryAsPercent : widgetMetadata.showMemoryAsPercent
readonly property bool showNetworkStats: (widgetSettings.showNetworkStats !== undefined) ? widgetSettings.showNetworkStats : widgetMetadata.showNetworkStats
readonly property bool showDiskUsage: (widgetSettings.showDiskUsage !== undefined) ? widgetSettings.showDiskUsage : widgetMetadata.showDiskUsage
readonly property bool showLoadAverage: (widgetSettings.showLoadAverage !== undefined) ? widgetSettings.showLoadAverage : widgetMetadata.showLoadAverage
readonly property string diskPath: (widgetSettings.diskPath !== undefined) ? widgetSettings.diskPath : widgetMetadata.diskPath
readonly property string fontFamily: useMonospaceFont ? Settings.data.ui.fontFixed : Settings.data.ui.fontDefault
readonly property real iconSize: Style.toOdd(Style.capsuleHeight * root.barScaling * (root.barCompact ? 0.55 : 0.45))
readonly property real iconSize: Style.toOdd(Style.capsuleHeight * 0.48)
readonly property real miniGaugeWidth: Math.max(3, Style.toOdd(root.iconSize * 0.25))
readonly property real textSize: Math.max(7, iconSize * barScaling * 0.6 * (isVertical ? 0.85 : 1.0))
function openExternalMonitor() {
Quickshell.execDetached(["sh", "-c", Settings.data.systemMonitor.externalMonitor]);
@@ -74,6 +71,11 @@ Rectangle {
lines.push(`${I18n.tr("system-monitor.gpu-temp")}: ${Math.round(SystemStatService.gpuTemp)}°C`);
}
// Load Average
if (SystemStatService.loadAvg1 >= 0) {
lines.push(`${I18n.tr("system-monitor.load-average")}: ${SystemStatService.loadAvg1.toFixed(2)} ${SystemStatService.loadAvg5.toFixed(2)} ${SystemStatService.loadAvg15.toFixed(2)}`);
}
// Memory
lines.push(`${I18n.tr("system-monitor.memory")}: ${Math.round(SystemStatService.memPercent)}% (${SystemStatService.formatMemoryGb(SystemStatService.memGb)})`);
@@ -226,7 +228,7 @@ Rectangle {
flow: isVertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
rows: isVertical ? -1 : 1
columns: isVertical ? 1 : -1
rowSpacing: isVertical ? (compactMode ? Style.marginL : Style.marginM) : 0
rowSpacing: isVertical ? Style.marginL : 0
columnSpacing: isVertical ? 0 : (Style.marginM)
// CPU Usage Component
@@ -249,18 +251,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "cpu-usage"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
color: (cpuWarning || cpuCritical) ? SystemStatService.cpuColor : Color.mOnSurface
}
}
@@ -277,16 +279,14 @@ Rectangle {
}
}
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: (cpuWarning || cpuCritical) ? SystemStatService.cpuColor : textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode
@@ -326,18 +326,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "cpu-temperature"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
color: (tempWarning || tempCritical) ? SystemStatService.tempColor : Color.mOnSurface
}
}
@@ -347,16 +347,14 @@ Rectangle {
visible: !compactMode
text: `${Math.round(SystemStatService.cpuTemp)}°`
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: (tempWarning || tempCritical) ? SystemStatService.tempColor : textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode, mini gauge (to the right of icon)
@@ -396,18 +394,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "gpu-temperature"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
color: (gpuWarning || gpuCritical) ? SystemStatService.gpuColor : Color.mOnSurface
}
}
@@ -417,16 +415,14 @@ Rectangle {
visible: !compactMode
text: `${Math.round(SystemStatService.gpuTemp)}°`
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: (gpuWarning || gpuCritical) ? SystemStatService.gpuColor : textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode
@@ -446,6 +442,74 @@ Rectangle {
}
}
// Load Average Component
Item {
id: loadAvgContainer
implicitWidth: loadAvgContent.implicitWidth
implicitHeight: loadAvgContent.implicitHeight
Layout.preferredWidth: isVertical ? root.width : implicitWidth
Layout.preferredHeight: compactMode ? implicitHeight : Style.capsuleHeight
Layout.alignment: isVertical ? Qt.AlignHCenter : Qt.AlignVCenter
visible: showLoadAverage && SystemStatService.nproc > 0 && SystemStatService.loadAvg1 > 0
GridLayout {
id: loadAvgContent
anchors.centerIn: parent
flow: (isVertical && !compactMode) ? GridLayout.TopToBottom : GridLayout.LeftToRight
rows: (isVertical && !compactMode) ? 2 : 1
columns: (isVertical && !compactMode) ? 1 : 2
rowSpacing: Style.marginXXS
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
NIcon {
icon: "weight"
pointSize: iconSize
applyUiScale: false
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
color: Color.mOnSurface
}
}
// Text mode
NText {
visible: !compactMode
text: SystemStatService.loadAvg1.toFixed(1)
family: fontFamily
pointSize: Style.barFontSize
applyUiScale: false
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
}
// Compact mode
Loader {
active: compactMode
visible: compactMode
sourceComponent: miniGaugeComponent
Layout.alignment: Qt.AlignCenter
Layout.row: 0
Layout.column: 1
onLoaded: {
item.ratio = Qt.binding(() => Math.min(1, SystemStatService.loadAvg1 / SystemStatService.nproc));
item.statColor = Qt.binding(() => Color.mPrimary);
}
}
}
}
// Memory Usage Component
Item {
id: memoryContainer
@@ -466,18 +530,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "memory"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
color: (memWarning || memCritical) ? SystemStatService.memColor : Color.mOnSurface
}
}
@@ -487,16 +551,14 @@ Rectangle {
visible: !compactMode
text: showMemoryAsPercent ? `${Math.round(SystemStatService.memPercent)}%` : SystemStatService.formatMemoryGb(SystemStatService.memGb)
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: (memWarning || memCritical) ? SystemStatService.memColor : textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode
@@ -535,18 +597,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "download-speed"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
}
}
@@ -555,16 +617,14 @@ Rectangle {
visible: !compactMode
text: isVertical ? SystemStatService.formatCompactSpeed(SystemStatService.rxSpeed) : SystemStatService.formatSpeed(SystemStatService.rxSpeed)
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode
@@ -602,18 +662,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "upload-speed"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
}
}
@@ -622,16 +682,14 @@ Rectangle {
visible: !compactMode
text: isVertical ? SystemStatService.formatCompactSpeed(SystemStatService.txSpeed) : SystemStatService.formatSpeed(SystemStatService.txSpeed)
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode
@@ -670,18 +728,18 @@ Rectangle {
columnSpacing: compactMode ? 3 : Style.marginXS
Item {
Layout.preferredWidth: iconSize
Layout.preferredHeight: compactMode ? iconSize : Style.capsuleHeight
Layout.alignment: Qt.AlignCenter
Layout.row: (isVertical && !compactMode) ? 1 : 0
Layout.column: 0
Layout.fillWidth: isVertical
implicitWidth: iconSize
implicitHeight: iconSize
NIcon {
icon: "storage"
pointSize: iconSize
applyUiScale: false
anchors.centerIn: parent
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, contentHeight)
color: (diskWarning || diskCritical) ? SystemStatService.getDiskColor(diskPath) : Color.mOnSurface
}
}
@@ -691,16 +749,14 @@ Rectangle {
visible: !compactMode
text: SystemStatService.diskPercents[diskPath] ? `${SystemStatService.diskPercents[diskPath]}%` : "n/a"
family: fontFamily
pointSize: textSize
pointSize: Style.barFontSize
applyUiScale: false
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: (diskWarning || diskCritical) ? SystemStatService.getDiskColor(diskPath) : textColor
Layout.row: isVertical ? 0 : 0
Layout.column: isVertical ? 0 : 1
scale: isVertical ? Math.min(1.0, root.width / implicitWidth) : 1.0
}
// Compact mode
+70 -5
View File
@@ -19,11 +19,9 @@ Rectangle {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
readonly property string barPosition: Settings.data.bar.position
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
readonly property string density: Settings.data.bar.density
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
property var widgetSettings: {
@@ -44,7 +42,7 @@ Rectangle {
readonly property bool smartWidth: (widgetSettings.smartWidth !== undefined) ? widgetSettings.smartWidth : widgetMetadata.smartWidth
readonly property int maxTaskbarWidthPercent: (widgetSettings.maxTaskbarWidth !== undefined) ? widgetSettings.maxTaskbarWidth : widgetMetadata.maxTaskbarWidth
readonly property real iconScale: (widgetSettings.iconScale !== undefined) ? widgetSettings.iconScale : widgetMetadata.iconScale
readonly property int itemSize: Style.toOdd(Style.capsuleHeight * barScaling * Math.max(0.1, iconScale))
readonly property int itemSize: Style.toOdd(Style.capsuleHeight * Math.max(0.1, iconScale))
// Maximum width for the taskbar widget to prevent overlapping with other widgets
readonly property real maxTaskbarWidth: {
@@ -96,6 +94,10 @@ Rectangle {
// Combined model of running windows and pinned apps
property var combinedModel: []
// Wheel scroll handling
property int wheelAccumulatedDelta: 0
property bool wheelCooldown: false
// Helper function to normalize app IDs for case-insensitive matching
function normalizeAppId(appId) {
if (!appId || typeof appId !== 'string')
@@ -420,6 +422,69 @@ Rectangle {
}
onScreenChanged: updateCombinedModel()
// Debounce timer for wheel interactions
Timer {
id: wheelDebounce
interval: 150
repeat: false
onTriggered: {
root.wheelCooldown = false;
root.wheelAccumulatedDelta = 0;
}
}
// Scroll to switch between windows
WheelHandler {
id: wheelHandler
target: root
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onWheel: function (event) {
if (root.wheelCooldown || root.combinedModel.length === 0)
return;
var dy = event.angleDelta.y;
var dx = event.angleDelta.x;
var useDy = Math.abs(dy) >= Math.abs(dx);
var delta = useDy ? dy : dx;
root.wheelAccumulatedDelta += delta;
var step = 120;
if (Math.abs(root.wheelAccumulatedDelta) >= step) {
var direction = root.wheelAccumulatedDelta > 0 ? -1 : 1;
// Find the focused window or first running window
var currentIndex = -1;
for (var i = 0; i < root.combinedModel.length; i++) {
if (root.combinedModel[i].window && root.combinedModel[i].window.isFocused) {
currentIndex = i;
break;
}
}
if (currentIndex < 0) {
// No focused window, find first running window
for (var j = 0; j < root.combinedModel.length; j++) {
if (root.combinedModel[j].window) {
currentIndex = j;
break;
}
}
}
if (currentIndex >= 0) {
var nextIndex = (currentIndex + direction + root.combinedModel.length) % root.combinedModel.length;
var nextItem = root.combinedModel[nextIndex];
if (nextItem && nextItem.window) {
try {
CompositorService.focusWindow(nextItem.window);
} catch (error) {
Logger.e("Taskbar", "Failed to focus window: " + error);
}
}
}
root.wheelCooldown = true;
wheelDebounce.restart();
root.wheelAccumulatedDelta = 0;
event.accepted = true;
}
}
}
// "visible": Always Visible, "hidden": Hide When Empty, "transparent": Transparent When Empty
visible: hideMode !== "hidden" || hasWindow
opacity: ((hideMode !== "hidden" && hideMode !== "transparent") || hasWindow) ? 1.0 : 0.0
@@ -549,7 +614,7 @@ Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
width: Style.toOdd(root.itemSize * 0.25)
height: 4
color: taskbarItem.isFocused ? Color.mPrimary : Color.transparent
color: taskbarItem.isFocused ? Color.mPrimary : "transparent"
radius: Math.min(Style.radiusXXS, width / 2)
}
}
@@ -567,7 +632,7 @@ Rectangle {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignLeft
pointSize: root.itemSize * 0.5
pointSize: Style.barFontSize
color: titleFgColor
opacity: Style.opacityFull
}
+6 -8
View File
@@ -291,14 +291,13 @@ Rectangle {
visible: root.drawerEnabled && dropdownItems.length > 0 && BarService.getPillDirection(root)
tooltipText: I18n.tr("tooltips.open-tray-dropdown")
tooltipDirection: BarService.getTooltipDirection()
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: Color.transparent
colorBg: "transparent"
colorFg: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mOnPrimary
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
icon: {
switch (barPosition) {
case "bottom":
@@ -448,14 +447,13 @@ Rectangle {
visible: root.drawerEnabled && dropdownItems.length > 0 && !BarService.getPillDirection(root)
tooltipText: I18n.tr("tooltips.open-tray-dropdown")
tooltipDirection: BarService.getTooltipDirection()
density: Settings.data.bar.density
baseSize: Style.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: Color.transparent
colorBg: "transparent"
colorFg: Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
icon: {
switch (barPosition) {
case "bottom":
-1
View File
@@ -97,7 +97,6 @@ Item {
id: pill
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: VPNService.hasActiveConnection ? "shield-lock" : "shield"
text: {
-1
View File
@@ -113,7 +113,6 @@ Item {
id: pill
screen: root.screen
density: Settings.data.bar.density
oppositeDirection: BarService.getPillDirection(root)
icon: AudioService.getOutputIcon()
autoHide: false // Important to be false so we can hover as long as we want
+2 -3
View File
@@ -14,15 +14,14 @@ NIconButton {
baseSize: Style.capsuleHeight
applyUiScale: false
density: Settings.data.bar.density
customRadius: Style.radiusL
icon: "wallpaper-selector"
tooltipText: I18n.tr("tooltips.open-wallpaper-selector")
tooltipDirection: BarService.getTooltipDirection()
colorBg: Style.capsuleColor
colorFg: Color.mOnSurface
colorBorder: Color.transparent
colorBorderHover: Color.transparent
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
+8 -8
View File
@@ -22,7 +22,6 @@ Item {
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property real barScaling: 1.0
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
property var widgetSettings: {
@@ -37,7 +36,7 @@ Item {
readonly property string barPosition: Settings.data.bar.position
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
readonly property real baseDimensionRatio: root.barScaling * 0.65 * (widgetSettings.labelMode === "none" ? 0.75 : 1)
readonly property real baseDimensionRatio: 0.65 * (widgetSettings.labelMode === "none" ? 0.75 : 1)
readonly property string labelMode: (widgetSettings.labelMode !== undefined) ? widgetSettings.labelMode : widgetMetadata.labelMode
readonly property bool hideUnoccupied: (widgetSettings.hideUnoccupied !== undefined) ? widgetSettings.hideUnoccupied : widgetMetadata.hideUnoccupied
@@ -56,6 +55,7 @@ Item {
// Only for grouped mode / show apps
readonly property int baseItemSize: Style.toOdd(Style.capsuleHeight * 0.8)
readonly property int iconSize: Style.toOdd(baseItemSize * iconScale)
readonly property real textRatio: 0.50
// Context menu state for grouped mode - store IDs instead of object references to avoid stale references
property string selectedWindowId: ""
@@ -505,7 +505,7 @@ Item {
return model.idx.toString();
}
family: Settings.data.ui.fontFixed
pointSize: model.isActive ? workspacePillContainer.height * 0.45 : workspacePillContainer.height * 0.42
pointSize: workspacePillContainer.height * root.textRatio
applyUiScale: false
font.capitalization: Font.AllUppercase
font.weight: Style.fontWeightBold
@@ -604,7 +604,7 @@ Item {
width: workspacePillContainer.width + 18 * root.masterProgress * scale
height: workspacePillContainer.height + 18 * root.masterProgress * scale
radius: width / 2
color: Color.transparent
color: "transparent"
border.color: root.effectColor
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - root.masterProgress))))
opacity: root.effectsActive && model.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
@@ -653,7 +653,7 @@ Item {
return model.idx.toString();
}
family: Settings.data.ui.fontFixed
pointSize: model.isActive ? workspacePillContainerVertical.width * 0.45 : workspacePillContainerVertical.width * 0.42
pointSize: workspacePillContainerVertical.width * root.textRatio
applyUiScale: false
font.capitalization: Font.AllUppercase
font.weight: Style.fontWeightBold
@@ -752,7 +752,7 @@ Item {
width: workspacePillContainerVertical.width + 18 * root.masterProgress * scale
height: workspacePillContainerVertical.height + 18 * root.masterProgress * scale
radius: width / 2
color: Color.transparent
color: "transparent"
border.color: root.effectColor
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - root.masterProgress))))
opacity: root.effectsActive && model.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
@@ -955,7 +955,7 @@ Item {
width: groupedWorkspaceNumberContainer.width + 12 * root.masterProgress
height: groupedWorkspaceNumberContainer.height + 12 * root.masterProgress
radius: width / 2
color: Color.transparent
color: "transparent"
border.color: root.effectColor
border.width: Math.max(1, Math.round((2 + 4 * (1.0 - root.masterProgress))))
opacity: root.effectsActive && groupedContainer.workspaceModel.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
@@ -982,7 +982,7 @@ Item {
family: Settings.data.ui.fontFixed
font {
pointSize: Style.fontSizeXXS
pointSize: Style.barFontSize * 0.75
weight: Style.fontWeightBold
capitalization: Font.AllUppercase
}
+2 -4
View File
@@ -152,7 +152,7 @@ NBox {
icon: AudioService.muted ? "volume-off" : "volume-high"
baseSize: Style.baseWidgetSize * 0.5
colorFg: AudioService.muted ? Color.mError : Color.mOnSurface
colorBg: Color.transparent
colorBg: "transparent"
colorBgHover: Color.mHover
colorFgHover: Color.mOnHover
onClicked: {
@@ -166,7 +166,6 @@ NBox {
text: AudioService.sink ? AudioService.sink.description : "No output device"
pointSize: Style.fontSizeXS
color: Color.mOnSurfaceVariant
font.weight: Style.fontWeightMedium
elide: Text.ElideRight
Layout.fillWidth: true
Layout.preferredWidth: 0
@@ -225,7 +224,7 @@ NBox {
icon: AudioService.inputMuted ? "microphone-off" : "microphone"
baseSize: Style.baseWidgetSize * 0.5
colorFg: AudioService.inputMuted ? Color.mError : Color.mOnSurface
colorBg: Color.transparent
colorBg: "transparent"
colorBgHover: Color.mHover
colorFgHover: Color.mOnHover
onClicked: AudioService.setInputMuted(!AudioService.inputMuted)
@@ -235,7 +234,6 @@ NBox {
text: AudioService.source ? AudioService.source.description : "No input device"
pointSize: Style.fontSizeXS
color: Color.mOnSurfaceVariant
font.weight: Style.fontWeightMedium
elide: Text.ElideRight
Layout.fillWidth: true
Layout.preferredWidth: 0
+1 -2
View File
@@ -91,7 +91,7 @@ NBox {
}
baseSize: Style.baseWidgetSize * 0.5
colorFg: Color.mOnSurface
colorBg: Color.transparent
colorBg: "transparent"
colorBgHover: Color.mHover
colorFgHover: Color.mOnHover
}
@@ -100,7 +100,6 @@ NBox {
text: brightnessMonitor ? I18n.tr("settings.display.monitors.brightness") : "No display"
pointSize: Style.fontSizeXS
color: Color.mOnSurfaceVariant
font.weight: Style.fontWeightMedium
elide: Text.ElideRight
Layout.fillWidth: true
Layout.preferredWidth: 0
-2
View File
@@ -96,7 +96,6 @@ Rectangle {
return chunks[0];
}
pointSize: Style.fontSizeM
font.weight: Style.fontWeightMedium
color: Color.mOnPrimary
Layout.maximumWidth: 150
elide: Text.ElideRight
@@ -105,7 +104,6 @@ Rectangle {
NText {
text: root.weatherReady ? ` (${LocationService.data.weather.timezone_abbreviation})` : ""
pointSize: Style.fontSizeXS
font.weight: Style.fontWeightMedium
color: Qt.alpha(Color.mOnPrimary, 0.7)
}
}
+1 -2
View File
@@ -260,7 +260,6 @@ NBox {
anchors.centerIn: parent
color: Qt.alpha(Color.mPrimary, 0.7)
pointSize: Style.fontSizeXXS
font.weight: Style.fontWeightMedium
text: modelData
}
}
@@ -343,7 +342,7 @@ NBox {
height: Style.baseWidgetSize * 0.9
anchors.centerIn: parent
radius: Style.radiusM
color: modelData.today ? Color.mSecondary : Color.transparent
color: modelData.today ? Color.mSecondary : "transparent"
NText {
anchors.centerIn: parent
+18 -5
View File
@@ -52,6 +52,12 @@ NBox {
}
function updateCachedWallpaper() {
// Handle solid color mode - no wallpaper to cache
if (Settings.data.wallpaper.useSolidColor || WallpaperService.isSolidColorPath(wallpaper)) {
cachedWallpaper = "";
return;
}
if (!wallpaper) {
cachedWallpaper = "";
return;
@@ -77,7 +83,7 @@ NBox {
layer.effect: MultiEffect {
maskEnabled: true
maskThresholdMin: 0.95
maskSpreadAtMin: 0.0
maskSpreadAtMin: 0.15
maskSource: ShaderEffectSource {
sourceItem: Rectangle {
width: root.width
@@ -88,12 +94,19 @@ NBox {
}
}
// Solid color background (always present as base layer)
Rectangle {
anchors.fill: parent
color: Settings.data.wallpaper.useSolidColor ? Settings.data.wallpaper.solidColor : Color.mSurface
}
// Background image that covers everything
Image {
id: bgImage
readonly property int dim: Math.round(256 * Style.uiScaleRatio)
anchors.fill: parent
source: MediaService.trackArtUrl || root.cachedWallpaper
visible: source.toString() !== ""
source: MediaService.trackArtUrl || (Settings.data.wallpaper.enabled && !Settings.data.wallpaper.useSolidColor ? root.cachedWallpaper : "")
sourceSize: Qt.size(dim, dim)
fillMode: Image.PreserveAspectCrop
layer.enabled: true
@@ -116,8 +129,8 @@ NBox {
// Border
Rectangle {
anchors.fill: parent
color: Color.transparent
border.color: Color.mOutline
color: "transparent"
border.color: Style.boxBorderColor
border.width: Style.borderS
radius: Style.radiusM
}
@@ -184,7 +197,7 @@ NBox {
height: Style.barHeight
visible: MediaService.getAvailablePlayers().length > 1
radius: Style.radiusM
color: Color.transparent
color: "transparent"
property var currentPlayer: MediaService.getAvailablePlayers()[MediaService.selectedPlayerIndex]
+1 -9
View File
@@ -10,15 +10,7 @@ import qs.Widgets
NBox {
id: root
// Get diskPath from bar's SystemMonitor widget if available, otherwise use settings
readonly property string diskPath: {
const sysMonWidget = BarService.lookupWidget("SystemMonitor");
if (sysMonWidget && sysMonWidget.diskPath) {
return sysMonWidget.diskPath;
}
return Settings.data.systemMonitor.diskPath || "/";
}
readonly property string diskPath: Settings.data.controlCenter.diskPath || "/"
readonly property real contentScale: 0.95 * Style.uiScaleRatio
Item {
+2 -2
View File
@@ -434,7 +434,7 @@ NBox {
Layout.fillWidth: true
Layout.preferredWidth: 0
implicitHeight: startButton.implicitHeight
color: Color.transparent
color: "transparent"
NButton {
id: startButton
@@ -456,7 +456,7 @@ NBox {
Layout.fillWidth: true
Layout.preferredWidth: 0
implicitHeight: resetButton.implicitHeight
color: Color.transparent
color: "transparent"
NButton {
id: resetButton
+1 -1
View File
@@ -54,7 +54,7 @@ Variants {
sourceComponent: PanelWindow {
id: window
color: Color.transparent
color: "transparent"
screen: screenLoader.modelData
WlrLayershell.layer: WlrLayer.Bottom
@@ -343,8 +343,8 @@ Item {
id: decorationRect
anchors.fill: parent
anchors.margins: -outlineMargin
color: DesktopWidgetRegistry.editMode ? Qt.rgba(Color.mPrimary.r, Color.mPrimary.g, Color.mPrimary.b, 0.1) : Color.transparent
border.color: (DesktopWidgetRegistry.editMode || internal.isDragging) ? (internal.isDragging ? Color.mOutline : Color.mPrimary) : Color.transparent
color: DesktopWidgetRegistry.editMode ? Qt.rgba(Color.mPrimary.r, Color.mPrimary.g, Color.mPrimary.b, 0.1) : "transparent"
border.color: (DesktopWidgetRegistry.editMode || internal.isDragging) ? (internal.isDragging ? Color.mOutline : Color.mPrimary) : "transparent"
border.width: DesktopWidgetRegistry.editMode ? 3 : 0
radius: Math.round(Style.radiusL * root.widgetScale)
z: -1
@@ -367,7 +367,7 @@ Item {
shadowEnabled: true
shadowBlur: Style.shadowBlur * 1.5
shadowOpacity: Style.shadowOpacity * 0.6
shadowColor: Color.black
shadowColor: "black"
shadowHorizontalOffset: Settings.data.general.shadowOffsetX
shadowVerticalOffset: Settings.data.general.shadowOffsetY
blurMax: Style.shadowBlurMax
@@ -42,7 +42,7 @@ DraggableDesktopWidget {
NClock {
now: root.now
clockStyle: root.clockStyle
backgroundColor: Color.transparent
backgroundColor: "transparent"
clockColor: clockTextColor
progressColor: Color.mPrimary
opacity: root.widgetOpacity
@@ -26,8 +26,8 @@ DraggableDesktopWidget {
readonly property bool hasActiveTrack: hasPlayer && (MediaService.trackTitle || MediaService.trackArtist)
// State
// Hide when idle only if not playing AND no active track (to handle players like mpv that may not report playback state correctly)
readonly property bool shouldHideIdle: (hideMode === "idle") && !isPlaying && !hasActiveTrack
// Hide when idle when playback is not active
readonly property bool shouldHideIdle: (hideMode === "idle") && !isPlaying
readonly property bool shouldHideEmpty: !hasPlayer && hideMode === "hidden"
readonly property bool isHidden: (shouldHideIdle || shouldHideEmpty) && !DesktopWidgetRegistry.editMode
visible: !isHidden
@@ -87,7 +87,7 @@ DraggableDesktopWidget {
layer.effect: MultiEffect {
maskEnabled: true
maskThresholdMin: 0.95
maskSpreadAtMin: 0.0
maskSpreadAtMin: 0.15
maskSource: ShaderEffectSource {
sourceItem: Rectangle {
width: root.width - Math.round(Style.marginXS * widgetScale) * 2
@@ -250,7 +250,13 @@ DraggableDesktopWidget {
Layout.alignment: root.showAlbumArt ? Qt.AlignVCenter : Qt.AlignCenter
NIconButton {
visible: showPrev
opacity: showPrev ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: Style.animationSlow
easing.type: Easing.InOutQuad
}
}
baseSize: Math.round(32 * widgetScale)
icon: "media-prev"
enabled: hasPlayer && MediaService.canGoPrevious
@@ -280,7 +286,13 @@ DraggableDesktopWidget {
}
NIconButton {
visible: showNext
opacity: showNext ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: Style.animationSlow
easing.type: Easing.InOutQuad
}
}
baseSize: Math.round(32 * widgetScale)
icon: "media-next"
enabled: hasPlayer && MediaService.canGoNext
@@ -103,7 +103,6 @@ DraggableDesktopWidget {
NText {
text: `${todayMax}°`
pointSize: Math.round(Style.fontSizeXS * widgetScale)
font.weight: Style.fontWeightMedium
color: Color.mOnSurface
}
@@ -122,7 +121,6 @@ DraggableDesktopWidget {
NText {
text: `${todayMin}°`
pointSize: Math.round(Style.fontSizeXS * widgetScale)
font.weight: Style.fontWeightMedium
color: Color.mOnSurfaceVariant
}
}
+19 -10
View File
@@ -57,6 +57,14 @@ Loader {
}
}
// Refresh icons when DesktopEntries becomes available
Connections {
target: DesktopEntries.applications
function onValuesChanged() {
root.iconRevision++;
}
}
// Shared properties between peek and dock windows
readonly property string displayMode: Settings.data.dock.displayMode
readonly property bool autoHide: displayMode === "auto_hide"
@@ -90,6 +98,9 @@ Loader {
// Combined model of running apps and pinned apps
property var dockApps: []
// Revision counter to force icon re-evaluation
property int iconRevision: 0
// Function to close any open context menu
function closeAllContextMenus() {
if (currentContextMenu && currentContextMenu.visible) {
@@ -292,7 +303,7 @@ Loader {
anchors.left: true
anchors.right: true
focusable: false
color: Color.transparent
color: "transparent"
WlrLayershell.namespace: "noctalia-dock-peek-" + (screen?.name || "unknown")
WlrLayershell.exclusionMode: ExclusionMode.Ignore
@@ -332,7 +343,7 @@ Loader {
screen: modelData
focusable: false
color: Color.transparent
color: "transparent"
WlrLayershell.namespace: "noctalia-dock-" + (screen?.name || "unknown")
WlrLayershell.exclusionMode: exclusive ? ExclusionMode.Auto : ExclusionMode.Ignore
@@ -476,20 +487,18 @@ Loader {
}
}
Image {
IconImage {
id: appIcon
width: iconSize
height: iconSize
anchors.centerIn: parent
source: dock.getAppIcon(modelData)
source: {
root.iconRevision; // Force re-evaluation when revision changes
return dock.getAppIcon(modelData);
}
visible: source.toString() !== ""
sourceSize.width: iconSize * 2
sourceSize.height: iconSize * 2
smooth: true
mipmap: true
antialiasing: true
fillMode: Image.PreserveAspectFit
cache: true
asynchronous: true
// Dim pinned apps that aren't running
opacity: appButton.isRunning ? 1.0 : Settings.data.dock.deadOpacity
+2 -2
View File
@@ -28,7 +28,7 @@ PopupWindow {
implicitWidth: menuContentWidth + (Style.marginM * 2)
implicitHeight: contextMenuColumn.implicitHeight + (Style.marginM * 2)
color: Color.transparent
color: "transparent"
visible: false
// Hidden text element for measuring text width
@@ -360,7 +360,7 @@ PopupWindow {
Rectangle {
Layout.fillWidth: true
height: 32
color: root.hoveredItem === index ? Color.mHover : Color.transparent
color: root.hoveredItem === index ? Color.mHover : "transparent"
radius: Style.radiusXS
Row {
+28 -31
View File
@@ -161,12 +161,24 @@ Loader {
return;
}
// Check for solid color mode first
if (Settings.data.wallpaper.useSolidColor) {
resolvedWallpaperPath = "";
return;
}
const originalPath = WallpaperService.getWallpaper(screen.name) || "";
if (originalPath === "") {
resolvedWallpaperPath = "";
return;
}
// Handle solid color paths
if (WallpaperService.isSolidColorPath(originalPath)) {
resolvedWallpaperPath = "";
return;
}
if (!ImageCacheService || !ImageCacheService.initialized) {
// Fallback to original if services not ready
resolvedWallpaperPath = originalPath;
@@ -182,7 +194,7 @@ Loader {
// Don't set resolvedWallpaperPath until cache is ready
// This prevents loading the original huge image
ImageCacheService.getFullscreen(originalPath, screen.name, targetWidth, targetHeight, function (cachedPath, success) {
ImageCacheService.getLarge(originalPath, targetWidth, targetHeight, function (cachedPath, success) {
if (success) {
resolvedWallpaperPath = cachedPath;
} else {
@@ -192,15 +204,15 @@ Loader {
});
}
// Black backgound, in case image fails to load or takes a while
// Background - solid color or black fallback
Rectangle {
anchors.fill: parent
color: "#000000"
color: Settings.data.wallpaper.useSolidColor ? Settings.data.wallpaper.solidColor : "#000000"
}
Image {
id: lockBgImage
visible: source !== ""
visible: source !== "" && Settings.data.wallpaper.enabled && !Settings.data.wallpaper.useSolidColor
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
source: resolvedWallpaperPath
@@ -237,7 +249,7 @@ Loader {
anchors.fill: parent
visible: Settings.data.general.showScreenCorners
property color cornerColor: Settings.data.general.forceBlackScreenCorners ? Color.black : Color.mSurface
property color cornerColor: Settings.data.general.forceBlackScreenCorners ? "black" : Color.mSurface
property real cornerRadius: Style.screenRadius
property real cornerSize: Style.screenRadius
@@ -413,12 +425,12 @@ Loader {
Layout.preferredHeight: 70
Layout.alignment: Qt.AlignVCenter
radius: width / 2
color: Color.transparent
color: "transparent"
Rectangle {
anchors.fill: parent
radius: parent.radius
color: Color.transparent
color: "transparent"
border.color: Qt.alpha(Color.mPrimary, 0.8)
border.width: 2
@@ -470,7 +482,6 @@ Loader {
NText {
text: I18n.tr("lock-screen.welcome-back") + " " + HostService.displayName + "!"
pointSize: Style.fontSizeXXL
font.weight: Font.Medium
color: Color.mOnSurface
horizontalAlignment: Text.AlignLeft
}
@@ -492,7 +503,6 @@ Loader {
return I18n.locale.toString(Time.now, formats[lang] || "dddd, d MMMM");
}
pointSize: Style.fontSizeXL
font.weight: Font.Medium
color: Color.mOnSurfaceVariant
horizontalAlignment: Text.AlignLeft
}
@@ -548,7 +558,6 @@ Loader {
text: lockContext.errorMessage || "Authentication failed"
color: Color.mOnError
pointSize: Style.fontSizeL
font.weight: Font.Medium
horizontalAlignment: Text.AlignHCenter
}
}
@@ -603,7 +612,6 @@ Loader {
text: Math.round(batteryIndicator.percent) + "%"
color: Color.mOnSurfaceVariant
pointSize: Style.fontSizeM
font.weight: Font.Medium
}
}
@@ -622,7 +630,6 @@ Loader {
text: keyboardLayout.currentLayout
color: Color.mOnSurfaceVariant
pointSize: Style.fontSizeM
font.weight: Font.Medium
elide: Text.ElideRight
}
}
@@ -659,35 +666,30 @@ Loader {
property real padding: 18 // Approximate horizontal padding per button
// Measure all button text widths
Text {
NText {
id: logoutText
text: I18n.tr("session-menu.logout")
font.pointSize: buttonRowTextMeasurer.fontSize
font.weight: Font.Medium
}
Text {
NText {
id: suspendText
text: I18n.tr("session-menu.suspend")
font.pointSize: buttonRowTextMeasurer.fontSize
font.weight: Font.Medium
}
Text {
NText {
id: hibernateText
text: Settings.data.general.showHibernateOnLockScreen ? I18n.tr("session-menu.hibernate") : ""
font.pointSize: buttonRowTextMeasurer.fontSize
font.weight: Font.Medium
}
Text {
NText {
id: rebootText
text: I18n.tr("session-menu.reboot")
font.pointSize: buttonRowTextMeasurer.fontSize
font.weight: Font.Medium
}
Text {
NText {
id: shutdownText
text: I18n.tr("session-menu.shutdown")
font.pointSize: buttonRowTextMeasurer.fontSize
font.weight: Font.Medium
}
// Calculate maximum width needed
@@ -723,7 +725,7 @@ Loader {
Layout.fillWidth: !(Settings.data.location.weatherEnabled && LocationService.data.weather !== null)
Layout.preferredHeight: 50
radius: Style.radiusL
color: Color.transparent
color: "transparent"
clip: true
visible: MediaService.currentPlayer && MediaService.canPlay
@@ -776,7 +778,7 @@ Loader {
Layout.preferredWidth: 34
Layout.preferredHeight: 34
radius: Math.min(Style.radiusL, width / 2)
color: Color.transparent
color: "transparent"
clip: true
NImageRounded {
@@ -798,7 +800,6 @@ Loader {
NText {
text: MediaService.trackTitle || "No media"
pointSize: Style.fontSizeM
font.weight: Style.fontWeightMedium
color: Color.mOnSurface
Layout.fillWidth: true
elide: Text.ElideRight
@@ -878,7 +879,6 @@ Loader {
}
pointSize: Style.fontSizeM
color: Color.mOnSurfaceVariant
font.weight: Font.Normal
}
}
@@ -979,7 +979,6 @@ Loader {
text: Math.round(batteryIndicator.percent) + "%"
color: Color.mOnSurfaceVariant
pointSize: Style.fontSizeM
font.weight: Font.Medium
}
}
@@ -998,7 +997,6 @@ Loader {
text: keyboardLayout.currentLayout
color: Color.mOnSurfaceVariant
pointSize: Style.fontSizeM
font.weight: Font.Medium
elide: Text.ElideRight
}
}
@@ -1115,7 +1113,6 @@ Loader {
text: passwordInput.text
color: Color.mPrimary
pointSize: Style.fontSizeM
font.weight: Font.Medium
visible: passwordInput.text.length > 0 && parent.parent.parent.passwordVisible
anchors.verticalCenter: parent.verticalCenter
elide: Text.ElideRight
@@ -1153,7 +1150,7 @@ Loader {
width: 36
height: 36
radius: Math.min(Style.iRadiusL, width / 2)
color: eyeButtonArea.containsMouse ? Color.mPrimary : Color.transparent
color: eyeButtonArea.containsMouse ? Color.mPrimary : "transparent"
visible: passwordInput.text.length > 0
enabled: !lockContext.unlockInProgress
@@ -1196,7 +1193,7 @@ Loader {
width: 36
height: 36
radius: Math.min(Style.iRadiusL, width / 2)
color: submitButtonArea.containsMouse ? Color.mPrimary : Color.transparent
color: submitButtonArea.containsMouse ? Color.mPrimary : "transparent"
border.color: Color.mPrimary
border.width: Style.borderS
enabled: !lockContext.unlockInProgress
@@ -41,7 +41,7 @@ ShapePath {
// Effective background color: use panel's if defined, else default
readonly property color effectiveBackgroundColor: {
if (!assignedPanel)
return Color.transparent;
return "transparent";
if (assignedPanel.panelBackgroundColor !== undefined) {
return assignedPanel.panelBackgroundColor;
}
+1 -1
View File
@@ -18,7 +18,7 @@ PanelWindow {
id: barWindow
// Note: screen property is inherited from PanelWindow and should be set by parent
color: Color.transparent // Transparent - background is in MainScreen below
color: "transparent" // Transparent - background is in MainScreen below
Component.onCompleted: {
Logger.d("BarContentWindow", "Bar content window created for screen:", barWindow.screen?.name);
+5 -13
View File
@@ -2,6 +2,7 @@ import QtQuick
import Quickshell
import Quickshell.Wayland
import qs.Commons
import qs.Services.Compositor
/**
* BarExclusionZone - Invisible PanelWindow that reserves exclusive space for the bar
@@ -12,13 +13,13 @@ import qs.Commons
PanelWindow {
id: root
property bool exclusive: Settings.data.bar.exclusive !== undefined ? Settings.data.bar.exclusive : false
readonly property bool exclusive: Settings.data.bar.exclusive
readonly property string barPosition: Settings.data.bar.position || "top"
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
readonly property bool barFloating: Settings.data.bar.floating || false
readonly property real barMarginH: barFloating ? Math.ceil(Settings.data.bar.marginHorizontal * Style.marginXL) : 0
readonly property real barMarginV: barFloating ? Math.ceil(Settings.data.bar.marginVertical * Style.marginXL) : 0
readonly property real fractOffset: CompositorService.getDisplayScale(screen?.name) % 1.0
// Invisible - just reserves space
color: "transparent"
@@ -39,15 +40,10 @@ PanelWindow {
}
// Size based on bar orientation
// When floating, only reserve space for the bar + margin on the anchored edge
implicitWidth: {
if (barIsVertical) {
// Vertical bar: reserve bar height + margin on the anchored edge only
if (barFloating) {
// For left bar, reserve left margin; for right bar, reserve right margin
return Style.barHeight + barMarginH;
}
return Style.barHeight;
return Style.barHeight + barMarginH - fractOffset;
}
return 0; // Auto-width when left/right anchors are true
}
@@ -55,11 +51,7 @@ PanelWindow {
implicitHeight: {
if (!barIsVertical) {
// Horizontal bar: reserve bar height + margin on the anchored edge only
if (barFloating) {
// For top bar, reserve top margin; for bottom bar, reserve bottom margin
return Style.barHeight + barMarginV;
}
return Style.barHeight;
return Style.barHeight + barMarginV - fractOffset;
}
return 0; // Auto-height when top/bottom anchors are true
}
+30 -7
View File
@@ -45,10 +45,23 @@ PanelWindow {
WlrLayershell.namespace: "noctalia-background-" + (screen?.name || "unknown")
WlrLayershell.exclusionMode: ExclusionMode.Ignore // Don't reserve space - BarExclusionZone handles that
WlrLayershell.keyboardFocus: {
if (!root.isPanelOpen) {
// No panel open anywhere: no keyboard focus needed
if (!root.isAnyPanelOpen) {
return WlrKeyboardFocus.None;
}
return PanelService.openedPanel.exclusiveKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand;
// Panel open on THIS screen: use panel's preferred focus mode
if (root.isPanelOpen) {
// Hyprland's Exclusive captures ALL input globally (including pointer),
// preventing click-to-close from working on other monitors.
// Workaround: briefly use Exclusive when panel opens (for text input focus),
// then switch to OnDemand (for click-to-close on other screens).
if (CompositorService.isHyprland) {
return PanelService.isInitializingKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand;
}
return PanelService.openedPanel.exclusiveKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand;
}
// Panel open on ANOTHER screen: OnDemand allows receiving pointer events for click-to-close
return WlrKeyboardFocus.OnDemand;
}
anchors {
@@ -62,21 +75,30 @@ PanelWindow {
property real dimmerOpacity: Settings.data.general.dimmerOpacity ?? 0.8
property bool isPanelOpen: (PanelService.openedPanel !== null) && (PanelService.openedPanel.screen === screen)
property bool isPanelClosing: (PanelService.openedPanel !== null) && PanelService.openedPanel.isClosing
property bool isAnyPanelOpen: PanelService.openedPanel !== null
color: {
if (dimmerOpacity > 0 && isPanelOpen && !isPanelClosing) {
return Qt.alpha(Color.mShadow, dimmerOpacity);
}
return Color.transparent;
return "transparent";
}
Behavior on color {
enabled: !PanelService.closedImmediately
ColorAnimation {
duration: isPanelClosing ? Style.animationFaster : Style.animationNormal
easing.type: Easing.OutQuad
}
}
// Reset closedImmediately flag after color change is applied
onColorChanged: {
if (PanelService.closedImmediately) {
PanelService.closedImmediately = false;
}
}
// Check if bar should be visible on this screen
readonly property bool barShouldShow: {
// Check global bar visibility
@@ -121,12 +143,13 @@ PanelWindow {
}
// Background region for click-to-close - reactive sizing
// Uses isAnyPanelOpen so clicking on any screen's background closes the panel
Region {
id: backgroundMaskRegion
x: 0
y: 0
width: root.isPanelOpen && !isPanelClosing ? root.width : 0
height: root.isPanelOpen && !isPanelClosing ? root.height : 0
width: root.isAnyPanelOpen ? root.width : 0
height: root.isAnyPanelOpen ? root.height : 0
intersection: Intersection.Subtract
}
}
@@ -150,10 +173,10 @@ PanelWindow {
}
// Background MouseArea for closing panels when clicking outside
// Active whenever a panel is open - the mask ensures it only receives clicks when panel is open
// Uses isAnyPanelOpen so clicking on any screen's background closes the panel
MouseArea {
anchors.fill: parent
enabled: root.isPanelOpen
enabled: root.isAnyPanelOpen
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
onClicked: mouse => {
if (PanelService.openedPanel) {
+1 -1
View File
@@ -29,7 +29,7 @@ PanelWindow {
anchors.right: true
anchors.bottom: true
visible: false
color: Color.transparent
color: "transparent"
// Use Top layer (same as MainScreen) for proper event handling
WlrLayershell.layer: WlrLayer.Top
+2 -2
View File
@@ -31,7 +31,7 @@ Item {
id: cornersPath
// Corner configuration
readonly property color cornerColor: Settings.data.general.forceBlackScreenCorners ? Color.black : Color.mSurface
readonly property color cornerColor: Settings.data.general.forceBlackScreenCorners ? "black" : Color.mSurface
readonly property real cornerRadius: Style.screenRadius
readonly property real cornerSize: Style.screenRadius
@@ -50,7 +50,7 @@ Item {
// ShapePath configuration
strokeWidth: -1 // No stroke, fill only
fillColor: shouldShow ? cornerColor : Color.transparent
fillColor: shouldShow ? cornerColor : "transparent"
// Smooth color animation
Behavior on fillColor {
+34
View File
@@ -146,6 +146,9 @@ Item {
}
function open(buttonItem, buttonName) {
// Reset immediate close flag to ensure animations work properly
PanelService.closedImmediately = false;
if (!buttonItem && buttonName) {
buttonItem = BarService.lookupWidget(buttonName, screen.name);
}
@@ -204,6 +207,9 @@ Item {
}
function close() {
// Reset immediate close flag to ensure animations work properly
PanelService.closedImmediately = false;
// Start close sequence: fade opacity first
isClosing = true;
sizeAnimationComplete = false;
@@ -230,6 +236,31 @@ Item {
Logger.d("SmartPanel", "Closing panel", objectName);
}
function closeImmediately() {
// Close without any animation, useful for app launches to avoid focus issues
opacityTrigger.stop();
openWatchdogActive = false;
openWatchdogTimer.stop();
closeWatchdogActive = false;
closeWatchdogTimer.stop();
// Don't set opacity directly as it breaks the binding
root.isPanelVisible = false;
root.sizeAnimationComplete = false;
root.isClosing = false;
root.opacityFadeComplete = false;
root.closeFinalized = true;
root.isPanelOpen = false;
panelBackground.dimensionsInitialized = false;
// Signal immediate close so MainScreen can skip dimmer animation
PanelService.closedImmediately = true;
PanelService.closedPanel(root);
closed();
Logger.d("SmartPanel", "Panel closed immediately", objectName);
}
function finalizeClose() {
// Prevent double-finalization
if (root.closeFinalized) {
@@ -656,6 +687,7 @@ Item {
}
Behavior on opacity {
enabled: !PanelService.closedImmediately
NumberAnimation {
id: opacityAnimation
duration: root.isClosing ? Style.animationFaster : Style.animationFast
@@ -1047,6 +1079,7 @@ Item {
}
Behavior on width {
enabled: !PanelService.closedImmediately
NumberAnimation {
id: widthAnimation
// Use 0ms if dimensions not initialized to prevent initial changes from animating
@@ -1076,6 +1109,7 @@ Item {
}
Behavior on height {
enabled: !PanelService.closedImmediately
NumberAnimation {
id: heightAnimation
// Use 0ms if dimensions not initialized to prevent initial changes from animating
+3 -3
View File
@@ -48,7 +48,7 @@ Variants {
WlrLayershell.layer: (Settings.data.notifications?.overlayLayer) ? WlrLayer.Overlay : WlrLayer.Top
WlrLayershell.exclusionMode: ExclusionMode.Ignore
color: Color.transparent
color: "transparent"
// Make shadow area click-through, only notification content is clickable
mask: Region {
@@ -230,7 +230,7 @@ Variants {
anchors.left: parent.left
anchors.right: parent.right
height: 2
color: Color.transparent
color: "transparent"
readonly property real availableWidth: parent.width - (2 * parent.radius)
@@ -422,7 +422,7 @@ Variants {
Layout.alignment: Qt.AlignVCenter
radius: Math.min(Style.radiusL, Layout.preferredWidth / 2)
imagePath: model.originalImage || ""
borderColor: Color.transparent
borderColor: "transparent"
borderWidth: 0
fallbackIcon: "bell"
fallbackIconSize: 24
+1 -1
View File
@@ -523,7 +523,7 @@ Variants {
implicitWidth: verticalMode ? longVWidth : (root.currentOSDType === OSD.Type.CustomText ? customTextHWidth : (isShortMode ? lockKeyHWidth : longHWidth))
implicitHeight: verticalMode ? (root.currentOSDType === OSD.Type.CustomText ? customTextVHeight : (isShortMode ? lockKeyVHeight : longVHeight)) : longHHeight
color: Color.transparent
color: "transparent"
WlrLayershell.namespace: "noctalia-osd-" + (screen?.name || "unknown")
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
+261 -261
View File
@@ -11,265 +11,268 @@ import qs.Widgets
SmartPanel {
id: root
property real localOutputVolume: AudioService.volume || 0
property bool localOutputVolumeChanging: false
property int lastSinkId: -1
property real localInputVolume: AudioService.inputVolume || 0
property bool localInputVolumeChanging: false
property int lastSourceId: -1
property int currentTabIndex: 0
// Find application streams that are actually playing audio (connected to default sink)
// Use linkGroups to find nodes connected to the default audio sink
// Note: We need to use link IDs since source/target properties require binding
readonly property var appStreams: {
if (!Pipewire.ready || !AudioService.sink) {
return [];
}
var defaultSink = AudioService.sink;
var defaultSinkId = defaultSink.id;
var connectedStreamIds = {};
var connectedStreams = [];
// Use PwNodeLinkTracker to get properly bound link groups
if (!sinkLinkTracker.linkGroups) {
return [];
}
// Check if linkGroups is an array or ObjectModel
var linkGroupsCount = 0;
if (sinkLinkTracker.linkGroups.length !== undefined) {
linkGroupsCount = sinkLinkTracker.linkGroups.length;
} else if (sinkLinkTracker.linkGroups.count !== undefined) {
linkGroupsCount = sinkLinkTracker.linkGroups.count;
} else {
return [];
}
if (linkGroupsCount === 0) {
return [];
}
// Collect intermediate node IDs that are connected to the sink
var intermediateNodeIds = {};
// Process link groups from sinkLinkTracker
var nodesToCheck = [];
for (var i = 0; i < linkGroupsCount; i++) {
var linkGroup;
if (sinkLinkTracker.linkGroups.get) {
linkGroup = sinkLinkTracker.linkGroups.get(i);
} else {
linkGroup = sinkLinkTracker.linkGroups[i];
}
if (!linkGroup || !linkGroup.source) {
continue;
}
var sourceNode = linkGroup.source;
// If it's a stream node, add it directly
if (sourceNode.isStream && sourceNode.audio) {
if (!connectedStreamIds[sourceNode.id]) {
connectedStreamIds[sourceNode.id] = true;
connectedStreams.push(sourceNode);
}
} else {
// Not a stream - this is an intermediate node, track it
intermediateNodeIds[sourceNode.id] = true;
nodesToCheck.push(sourceNode);
}
}
// If we found intermediate nodes, we need to find streams connected to them
// Since Pipewire.linkGroups is not directly accessible, we'll use a heuristic:
// When intermediate nodes are present, include all active stream nodes
// (reasonable assumption: if audio is playing, streams are connected)
if (nodesToCheck.length > 0 || connectedStreams.length === 0) {
try {
// Get all nodes from Pipewire
var allNodes = [];
if (Pipewire.nodes) {
if (Pipewire.nodes.count !== undefined) {
var nodeCount = Pipewire.nodes.count;
for (var n = 0; n < nodeCount; n++) {
var node;
if (Pipewire.nodes.get) {
node = Pipewire.nodes.get(n);
} else {
node = Pipewire.nodes[n];
}
if (node)
allNodes.push(node);
}
} else if (Pipewire.nodes.values) {
allNodes = Pipewire.nodes.values;
}
}
// Find all stream nodes
for (var j = 0; j < allNodes.length; j++) {
var node = allNodes[j];
if (!node || !node.isStream || !node.audio) {
continue;
}
var streamId = node.id;
if (connectedStreamIds[streamId]) {
continue; // Already added
}
// When intermediate nodes are present, include all stream nodes
// This is a reasonable heuristic since if audio is playing, they're likely connected
if (Object.keys(intermediateNodeIds).length > 0) {
connectedStreamIds[streamId] = true;
connectedStreams.push(node);
} else if (connectedStreams.length === 0) {
// Fallback: if no streams found yet, include as fallback
connectedStreamIds[streamId] = true;
connectedStreams.push(node);
}
}
} catch (e)
// Error finding stream nodes - continue with what we have
{}
}
return connectedStreams;
}
// Track links to the default sink using PwNodeLinkTracker (properly binds links)
PwNodeLinkTracker {
id: sinkLinkTracker
node: AudioService.sink
}
preferredWidth: Math.round(440 * Style.uiScaleRatio)
preferredHeight: Math.round(420 * Style.uiScaleRatio)
Component.onCompleted: {
var vol = AudioService.volume;
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
var inputVol = AudioService.inputVolume;
localInputVolume = (inputVol !== undefined && !isNaN(inputVol)) ? inputVol : 0;
if (AudioService.sink) {
lastSinkId = AudioService.sink.id;
}
if (AudioService.source) {
lastSourceId = AudioService.source.id;
}
}
// Reset local volume when device changes - use current device's volume
Connections {
target: AudioService
function onSinkChanged() {
if (AudioService.sink) {
const newSinkId = AudioService.sink.id;
if (newSinkId !== lastSinkId) {
lastSinkId = newSinkId;
// Immediately set local volume to current device's volume
var vol = AudioService.volume;
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
} else {
lastSinkId = -1;
localOutputVolume = 0;
}
}
}
Connections {
target: AudioService
function onSourceChanged() {
if (AudioService.source) {
const newSourceId = AudioService.source.id;
if (newSourceId !== lastSourceId) {
lastSourceId = newSourceId;
// Immediately set local volume to current device's volume
var vol = AudioService.inputVolume;
localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
} else {
lastSourceId = -1;
localInputVolume = 0;
}
}
}
// Connections to update local volumes when AudioService changes
Connections {
target: AudioService
function onVolumeChanged() {
if (!localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === lastSinkId) {
var vol = AudioService.volume;
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
Connections {
target: AudioService.sink?.audio ? AudioService.sink?.audio : null
function onVolumeChanged() {
if (!localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === lastSinkId) {
var vol = AudioService.volume;
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
Connections {
target: AudioService
function onInputVolumeChanged() {
if (!localInputVolumeChanging && AudioService.source && AudioService.source.id === lastSourceId) {
var vol = AudioService.inputVolume;
localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
Connections {
target: AudioService.source?.audio ? AudioService.source?.audio : null
function onVolumeChanged() {
if (!localInputVolumeChanging && AudioService.source && AudioService.source.id === lastSourceId) {
var vol = AudioService.inputVolume;
localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
// Timer to debounce volume changes
// Only sync if the device hasn't changed (check by comparing IDs)
Timer {
interval: 100
running: true
repeat: true
onTriggered: {
// Only sync if sink hasn't changed
if (AudioService.sink && AudioService.sink.id === lastSinkId) {
if (Math.abs(localOutputVolume - AudioService.volume) >= 0.01) {
AudioService.setVolume(localOutputVolume);
}
}
// Only sync if source hasn't changed
if (AudioService.source && AudioService.source.id === lastSourceId) {
if (Math.abs(localInputVolume - AudioService.inputVolume) >= 0.01) {
AudioService.setInputVolume(localInputVolume);
}
}
}
}
panelContent: Item {
id: panelContent
// Volume state (lazy-loaded with panelContent)
property real localOutputVolume: AudioService.volume || 0
property bool localOutputVolumeChanging: false
property int lastSinkId: -1
property real localInputVolume: AudioService.inputVolume || 0
property bool localInputVolumeChanging: false
property int lastSourceId: -1
// UI state (lazy-loaded with panelContent)
property int currentTabIndex: 0
Component.onCompleted: {
var vol = AudioService.volume;
localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
var inputVol = AudioService.inputVolume;
localInputVolume = (inputVol !== undefined && !isNaN(inputVol)) ? inputVol : 0;
if (AudioService.sink) {
lastSinkId = AudioService.sink.id;
}
if (AudioService.source) {
lastSourceId = AudioService.source.id;
}
}
// Reset local volume when device changes - use current device's volume
Connections {
target: AudioService
function onSinkChanged() {
if (AudioService.sink) {
const newSinkId = AudioService.sink.id;
if (newSinkId !== panelContent.lastSinkId) {
panelContent.lastSinkId = newSinkId;
// Immediately set local volume to current device's volume
var vol = AudioService.volume;
panelContent.localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
} else {
panelContent.lastSinkId = -1;
panelContent.localOutputVolume = 0;
}
}
}
Connections {
target: AudioService
function onSourceChanged() {
if (AudioService.source) {
const newSourceId = AudioService.source.id;
if (newSourceId !== panelContent.lastSourceId) {
panelContent.lastSourceId = newSourceId;
// Immediately set local volume to current device's volume
var vol = AudioService.inputVolume;
panelContent.localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
} else {
panelContent.lastSourceId = -1;
panelContent.localInputVolume = 0;
}
}
}
// Connections to update local volumes when AudioService changes
Connections {
target: AudioService
function onVolumeChanged() {
if (!panelContent.localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === panelContent.lastSinkId) {
var vol = AudioService.volume;
panelContent.localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
Connections {
target: AudioService.sink?.audio ? AudioService.sink?.audio : null
function onVolumeChanged() {
if (!panelContent.localOutputVolumeChanging && AudioService.sink && AudioService.sink.id === panelContent.lastSinkId) {
var vol = AudioService.volume;
panelContent.localOutputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
Connections {
target: AudioService
function onInputVolumeChanged() {
if (!panelContent.localInputVolumeChanging && AudioService.source && AudioService.source.id === panelContent.lastSourceId) {
var vol = AudioService.inputVolume;
panelContent.localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
Connections {
target: AudioService.source?.audio ? AudioService.source?.audio : null
function onVolumeChanged() {
if (!panelContent.localInputVolumeChanging && AudioService.source && AudioService.source.id === panelContent.lastSourceId) {
var vol = AudioService.inputVolume;
panelContent.localInputVolume = (vol !== undefined && !isNaN(vol)) ? vol : 0;
}
}
}
// Timer to debounce volume changes
// Only sync if the device hasn't changed (check by comparing IDs)
Timer {
interval: 100
running: true
repeat: true
onTriggered: {
// Only sync if sink hasn't changed
if (AudioService.sink && AudioService.sink.id === panelContent.lastSinkId) {
if (Math.abs(panelContent.localOutputVolume - AudioService.volume) >= 0.01) {
AudioService.setVolume(panelContent.localOutputVolume);
}
}
// Only sync if source hasn't changed
if (AudioService.source && AudioService.source.id === panelContent.lastSourceId) {
if (Math.abs(panelContent.localInputVolume - AudioService.inputVolume) >= 0.01) {
AudioService.setInputVolume(panelContent.localInputVolume);
}
}
}
}
// Find application streams that are actually playing audio (connected to default sink)
// Use linkGroups to find nodes connected to the default audio sink
// Note: We need to use link IDs since source/target properties require binding
readonly property var appStreams: {
if (!Pipewire.ready || !AudioService.sink) {
return [];
}
var defaultSink = AudioService.sink;
var defaultSinkId = defaultSink.id;
var connectedStreamIds = {};
var connectedStreams = [];
// Use PwNodeLinkTracker to get properly bound link groups
if (!sinkLinkTracker.linkGroups) {
return [];
}
// Check if linkGroups is an array or ObjectModel
var linkGroupsCount = 0;
if (sinkLinkTracker.linkGroups.length !== undefined) {
linkGroupsCount = sinkLinkTracker.linkGroups.length;
} else if (sinkLinkTracker.linkGroups.count !== undefined) {
linkGroupsCount = sinkLinkTracker.linkGroups.count;
} else {
return [];
}
if (linkGroupsCount === 0) {
return [];
}
// Collect intermediate node IDs that are connected to the sink
var intermediateNodeIds = {};
// Process link groups from sinkLinkTracker
var nodesToCheck = [];
for (var i = 0; i < linkGroupsCount; i++) {
var linkGroup;
if (sinkLinkTracker.linkGroups.get) {
linkGroup = sinkLinkTracker.linkGroups.get(i);
} else {
linkGroup = sinkLinkTracker.linkGroups[i];
}
if (!linkGroup || !linkGroup.source) {
continue;
}
var sourceNode = linkGroup.source;
// If it's a stream node, add it directly
if (sourceNode.isStream && sourceNode.audio) {
if (!connectedStreamIds[sourceNode.id]) {
connectedStreamIds[sourceNode.id] = true;
connectedStreams.push(sourceNode);
}
} else {
// Not a stream - this is an intermediate node, track it
intermediateNodeIds[sourceNode.id] = true;
nodesToCheck.push(sourceNode);
}
}
// If we found intermediate nodes, we need to find streams connected to them
// Since Pipewire.linkGroups is not directly accessible, we'll use a heuristic:
// When intermediate nodes are present, include all active stream nodes
// (reasonable assumption: if audio is playing, streams are connected)
if (nodesToCheck.length > 0 || connectedStreams.length === 0) {
try {
// Get all nodes from Pipewire
var allNodes = [];
if (Pipewire.nodes) {
if (Pipewire.nodes.count !== undefined) {
var nodeCount = Pipewire.nodes.count;
for (var n = 0; n < nodeCount; n++) {
var node;
if (Pipewire.nodes.get) {
node = Pipewire.nodes.get(n);
} else {
node = Pipewire.nodes[n];
}
if (node)
allNodes.push(node);
}
} else if (Pipewire.nodes.values) {
allNodes = Pipewire.nodes.values;
}
}
// Find all stream nodes
for (var j = 0; j < allNodes.length; j++) {
var node = allNodes[j];
if (!node || !node.isStream || !node.audio) {
continue;
}
var streamId = node.id;
if (connectedStreamIds[streamId]) {
continue; // Already added
}
// When intermediate nodes are present, include all stream nodes
// This is a reasonable heuristic since if audio is playing, they're likely connected
if (Object.keys(intermediateNodeIds).length > 0) {
connectedStreamIds[streamId] = true;
connectedStreams.push(node);
} else if (connectedStreams.length === 0) {
// Fallback: if no streams found yet, include as fallback
connectedStreamIds[streamId] = true;
connectedStreams.push(node);
}
}
} catch (e)
// Error finding stream nodes - continue with what we have
{}
}
return connectedStreams;
}
// Track links to the default sink using PwNodeLinkTracker (properly binds links)
PwNodeLinkTracker {
id: sinkLinkTracker
node: AudioService.sink
}
// Use implicitHeight from content + margins to avoid binding loops
property real contentPreferredHeight: mainColumn.implicitHeight + Style.marginL * 2
// property real contentPreferredHeight: Math.min(screen.height * 0.42, mainColumn.implicitHeight) + Style.marginL * 2
ColumnLayout {
id: mainColumn
anchors.fill: parent
@@ -316,8 +319,8 @@ SmartPanel {
NTabBar {
id: tabBar
Layout.fillWidth: true
currentIndex: root.currentTabIndex
onCurrentIndexChanged: root.currentTabIndex = currentIndex
currentIndex: panelContent.currentTabIndex
onCurrentIndexChanged: panelContent.currentTabIndex = currentIndex
NTabButton {
Layout.fillWidth: true
@@ -340,7 +343,7 @@ SmartPanel {
StackLayout {
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: root.currentTabIndex
currentIndex: panelContent.currentTabIndex
// Applications Tab (Volume)
NScrollView {
@@ -486,11 +489,11 @@ SmartPanel {
// Bind all app stream nodes to access their audio properties
PwObjectTracker {
id: appStreamsTracker
objects: root.appStreams
objects: panelContent.appStreams
}
Repeater {
model: root.appStreams
model: panelContent.appStreams
NBox {
id: appBox
@@ -745,9 +748,6 @@ SmartPanel {
appBox.nodeAudio.volume = value;
}
}
onPressedChanged: function (pressed) {
appBox.volumeChanging = pressed;
}
text: Math.round((appBox.appVolume !== undefined ? appBox.appVolume : 0.0) * 100) + "%"
}
}
@@ -770,7 +770,7 @@ SmartPanel {
// Empty state
NText {
visible: root.appStreams.length === 0
visible: panelContent.appStreams.length === 0
text: I18n.tr("settings.audio.panel.applications.empty")
pointSize: Style.fontSizeM
color: Color.mOnSurfaceVariant
+152 -151
View File
@@ -17,183 +17,184 @@ SmartPanel {
preferredWidth: Math.round(440 * Style.uiScaleRatio)
preferredHeight: Math.round(460 * Style.uiScaleRatio)
// Get device selection from Battery widget settings (check right section first, then any Battery widget)
function getBatteryDevicePath() {
var widget = BarService.lookupWidget("Battery");
if (widget !== undefined) {
return widget.deviceNativePath;
}
return "";
}
panelContent: Item {
id: panelContent
property real contentPreferredHeight: mainLayout.implicitHeight + Style.marginL * 2
// Helper function to find battery device by nativePath
function findBatteryDevice(nativePath) {
if (!nativePath || nativePath === "") {
return UPower.displayDevice;
// Get device selection from Battery widget settings (check right section first, then any Battery widget)
function getBatteryDevicePath() {
var widget = BarService.lookupWidget("Battery");
if (widget !== undefined && widget.deviceNativePath !== undefined) {
return widget.deviceNativePath;
}
return "";
}
if (!UPower.devices) {
return UPower.displayDevice;
}
// Helper function to find battery device by nativePath
function findBatteryDevice(nativePath) {
if (!nativePath || nativePath === "") {
return UPower.displayDevice;
}
var deviceArray = UPower.devices.values || [];
for (var i = 0; i < deviceArray.length; i++) {
var device = deviceArray[i];
if (device && device.nativePath === nativePath) {
if (device.type === UPowerDeviceType.LinePower) {
continue;
if (!UPower.devices) {
return UPower.displayDevice;
}
var deviceArray = UPower.devices.values || [];
for (var i = 0; i < deviceArray.length; i++) {
var device = deviceArray[i];
if (device && device.nativePath === nativePath) {
if (device.type === UPowerDeviceType.LinePower) {
continue;
}
if (device.percentage !== undefined) {
return device;
}
}
if (device.percentage !== undefined) {
}
return UPower.displayDevice;
}
// Helper function to find Bluetooth device by MAC address from nativePath
function findBluetoothDevice(nativePath) {
if (!nativePath || !BluetoothService.devices) {
return null;
}
var macMatch = nativePath.match(/([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2})/);
if (!macMatch) {
return null;
}
var macAddress = macMatch[1].toUpperCase();
var deviceArray = BluetoothService.devices.values || [];
for (var i = 0; i < deviceArray.length; i++) {
var device = deviceArray[i];
if (device && device.address && device.address.toUpperCase() === macAddress) {
return device;
}
}
}
return UPower.displayDevice;
}
// Helper function to find Bluetooth device by MAC address from nativePath
function findBluetoothDevice(nativePath) {
if (!nativePath || !BluetoothService.devices) {
return null;
}
var macMatch = nativePath.match(/([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2})/);
if (!macMatch) {
return null;
}
readonly property string deviceNativePath: getBatteryDevicePath()
readonly property var battery: findBatteryDevice(deviceNativePath)
readonly property var bluetoothDevice: deviceNativePath ? findBluetoothDevice(deviceNativePath) : null
readonly property bool hasBluetoothBattery: bluetoothDevice && bluetoothDevice.batteryAvailable && bluetoothDevice.battery !== undefined
readonly property bool isBluetoothConnected: bluetoothDevice && bluetoothDevice.connected !== undefined ? bluetoothDevice.connected : false
var macAddress = macMatch[1].toUpperCase();
var deviceArray = BluetoothService.devices.values || [];
for (var i = 0; i < deviceArray.length; i++) {
var device = deviceArray[i];
if (device && device.address && device.address.toUpperCase() === macAddress) {
return device;
// Check if device is actually present/connected
readonly property bool isDevicePresent: {
if (deviceNativePath && deviceNativePath !== "") {
if (bluetoothDevice) {
return isBluetoothConnected;
}
if (battery && battery.nativePath === deviceNativePath) {
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
return battery.isPresent;
}
return battery.ready && battery.percentage !== undefined && (battery.percentage > 0 || battery.state === UPowerDeviceState.Charging);
}
return false;
}
}
return null;
}
readonly property string deviceNativePath: getBatteryDevicePath()
readonly property var battery: findBatteryDevice(deviceNativePath)
readonly property var bluetoothDevice: deviceNativePath ? findBluetoothDevice(deviceNativePath) : null
readonly property bool hasBluetoothBattery: bluetoothDevice && bluetoothDevice.batteryAvailable && bluetoothDevice.battery !== undefined
readonly property bool isBluetoothConnected: bluetoothDevice && bluetoothDevice.connected !== undefined ? bluetoothDevice.connected : false
// Check if device is actually present/connected
readonly property bool isDevicePresent: {
if (deviceNativePath && deviceNativePath !== "") {
if (bluetoothDevice) {
return isBluetoothConnected;
}
if (battery && battery.nativePath === deviceNativePath) {
if (battery) {
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
return battery.isPresent;
}
return battery.ready && battery.percentage !== undefined && (battery.percentage > 0 || battery.state === UPowerDeviceState.Charging);
return battery.ready && battery.percentage !== undefined;
}
return false;
}
if (battery) {
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
return battery.isPresent;
readonly property bool isReady: battery && battery.ready && isDevicePresent && (battery.percentage !== undefined || hasBluetoothBattery)
readonly property int percent: isReady ? Math.round(hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery.percentage * 100)) : -1
readonly property bool charging: isReady ? battery.state === UPowerDeviceState.Charging : false
readonly property bool healthAvailable: isReady && battery.healthSupported
readonly property int healthPercent: healthAvailable ? Math.round(battery.healthPercentage) : -1
function getDeviceName() {
if (!isReady) {
return "";
}
// Don't show name for laptop batteries
if (battery && battery.isLaptopBattery) {
return "";
}
if (bluetoothDevice && bluetoothDevice.name) {
return bluetoothDevice.name;
}
if (battery && battery.model) {
return battery.model;
}
return battery.ready && battery.percentage !== undefined;
}
return false;
}
readonly property bool isReady: battery && battery.ready && isDevicePresent && (battery.percentage !== undefined || hasBluetoothBattery)
readonly property int percent: isReady ? Math.round(hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery.percentage * 100)) : -1
readonly property bool charging: isReady ? battery.state === UPowerDeviceState.Charging : false
readonly property bool healthAvailable: isReady && battery.healthSupported
readonly property int healthPercent: healthAvailable ? Math.round(battery.healthPercentage) : -1
function getDeviceName() {
if (!isReady) {
return "";
}
// Don't show name for laptop batteries
if (battery && battery.isLaptopBattery) {
return "";
readonly property string deviceName: getDeviceName()
readonly property string panelTitle: deviceName ? `${I18n.tr("battery.panel-title")} - ${deviceName}` : I18n.tr("battery.panel-title")
readonly property string timeText: {
if (!isReady || !isDevicePresent)
return I18n.tr("battery.no-battery-detected");
if (charging && battery.timeToFull > 0) {
return I18n.tr("battery.time-until-full", {
"time": Time.formatVagueHumanReadableDuration(battery.timeToFull)
});
}
if (!charging && battery.timeToEmpty > 0) {
return I18n.tr("battery.time-left", {
"time": Time.formatVagueHumanReadableDuration(battery.timeToEmpty)
});
}
return I18n.tr("battery.idle");
}
if (bluetoothDevice && bluetoothDevice.name) {
return bluetoothDevice.name;
readonly property string iconName: BatteryService.getIcon(percent, charging, isReady)
property var batteryWidgetInstance: BarService.lookupWidget("Battery", screen ? screen.name : null)
readonly property var batteryWidgetSettings: batteryWidgetInstance ? batteryWidgetInstance.widgetSettings : null
readonly property var batteryWidgetMetadata: BarWidgetRegistry.widgetMetadata["Battery"]
readonly property bool powerProfileAvailable: PowerProfileService.available
readonly property var powerProfiles: [PowerProfile.PowerSaver, PowerProfile.Balanced, PowerProfile.Performance]
readonly property bool profilesAvailable: PowerProfileService.available
property int profileIndex: profileToIndex(PowerProfileService.profile)
readonly property bool showPowerProfiles: resolveWidgetSetting("showPowerProfiles", false)
readonly property bool showNoctaliaPerformance: resolveWidgetSetting("showNoctaliaPerformance", false)
function profileToIndex(p) {
return powerProfiles.indexOf(p) ?? 1;
}
if (battery && battery.model) {
return battery.model;
function indexToProfile(idx) {
return powerProfiles[idx] ?? PowerProfile.Balanced;
}
return "";
}
readonly property string deviceName: getDeviceName()
readonly property string panelTitle: deviceName ? `${I18n.tr("battery.panel-title")} - ${deviceName}` : I18n.tr("battery.panel-title")
readonly property string timeText: {
if (!isReady || !isDevicePresent)
return I18n.tr("battery.no-battery-detected");
if (charging && battery.timeToFull > 0) {
return I18n.tr("battery.time-until-full", {
"time": Time.formatVagueHumanReadableDuration(battery.timeToFull)
});
function setProfileByIndex(idx) {
var prof = indexToProfile(idx);
profileIndex = idx;
PowerProfileService.setProfile(prof);
}
if (!charging && battery.timeToEmpty > 0) {
return I18n.tr("battery.time-left", {
"time": Time.formatVagueHumanReadableDuration(battery.timeToEmpty)
});
function resolveWidgetSetting(key, defaultValue) {
if (batteryWidgetSettings && batteryWidgetSettings[key] !== undefined)
return batteryWidgetSettings[key];
if (batteryWidgetMetadata && batteryWidgetMetadata[key] !== undefined)
return batteryWidgetMetadata[key];
return defaultValue;
}
return I18n.tr("battery.idle");
}
readonly property string iconName: BatteryService.getIcon(percent, charging, isReady)
property var batteryWidgetInstance: BarService.lookupWidget("Battery", screen ? screen.name : null)
readonly property var batteryWidgetSettings: batteryWidgetInstance ? batteryWidgetInstance.widgetSettings : null
readonly property var batteryWidgetMetadata: BarWidgetRegistry.widgetMetadata["Battery"]
readonly property bool powerProfileAvailable: PowerProfileService.available
readonly property var powerProfiles: [PowerProfile.PowerSaver, PowerProfile.Balanced, PowerProfile.Performance]
readonly property bool profilesAvailable: PowerProfileService.available
property int profileIndex: profileToIndex(PowerProfileService.profile)
readonly property bool showPowerProfiles: resolveWidgetSetting("showPowerProfiles", false)
readonly property bool showNoctaliaPerformance: resolveWidgetSetting("showNoctaliaPerformance", false)
function profileToIndex(p) {
return powerProfiles.indexOf(p) ?? 1;
}
function indexToProfile(idx) {
return powerProfiles[idx] ?? PowerProfile.Balanced;
}
function setProfileByIndex(idx) {
var prof = indexToProfile(idx);
profileIndex = idx;
PowerProfileService.setProfile(prof);
}
function resolveWidgetSetting(key, defaultValue) {
if (batteryWidgetSettings && batteryWidgetSettings[key] !== undefined)
return batteryWidgetSettings[key];
if (batteryWidgetMetadata && batteryWidgetMetadata[key] !== undefined)
return batteryWidgetMetadata[key];
return defaultValue;
}
Connections {
target: PowerProfileService
function onProfileChanged() {
profileIndex = profileToIndex(PowerProfileService.profile);
Connections {
target: PowerProfileService
function onProfileChanged() {
panelContent.profileIndex = panelContent.profileToIndex(PowerProfileService.profile);
}
}
}
Connections {
target: BarService
function onActiveWidgetsChanged() {
batteryWidgetInstance = BarService.lookupWidget("Battery", screen ? screen.name : null);
Connections {
target: BarService
function onActiveWidgetsChanged() {
panelContent.batteryWidgetInstance = BarService.lookupWidget("Battery", screen ? screen.name : null);
}
}
}
panelContent: Item {
property real contentPreferredHeight: mainLayout.implicitHeight + Style.marginL * 2
ColumnLayout {
id: mainLayout
@@ -214,7 +215,7 @@ SmartPanel {
NIcon {
pointSize: Style.fontSizeXXL
color: root.charging ? Color.mPrimary : Color.mOnSurface
color: charging ? Color.mPrimary : Color.mOnSurface
icon: iconName
}
@@ -223,7 +224,7 @@ SmartPanel {
Layout.fillWidth: true
NText {
text: root.panelTitle
text: panelTitle
pointSize: Style.fontSizeL
font.weight: Style.fontWeightBold
color: Color.mOnSurface
@@ -320,7 +321,7 @@ SmartPanel {
NBox {
Layout.fillWidth: true
height: controlsLayout.implicitHeight + Style.marginL * 2
visible: root.showPowerProfiles || root.showNoctaliaPerformance
visible: showPowerProfiles || showNoctaliaPerformance
ColumnLayout {
id: controlsLayout
@@ -329,7 +330,7 @@ SmartPanel {
spacing: Style.marginM
ColumnLayout {
visible: root.powerProfileAvailable && root.showPowerProfiles
visible: powerProfileAvailable && showPowerProfiles
RowLayout {
Layout.fillWidth: true
@@ -391,13 +392,13 @@ SmartPanel {
NDivider {
Layout.fillWidth: true
visible: root.showPowerProfiles && root.showNoctaliaPerformance
visible: showPowerProfiles && showNoctaliaPerformance
}
RowLayout {
Layout.fillWidth: true
spacing: Style.marginS
visible: root.showNoctaliaPerformance
visible: showNoctaliaPerformance
NText {
text: I18n.tr("toast.noctalia-performance.label")
@@ -20,8 +20,8 @@ NBox {
// Per-list expanded details (by device key)
property string expandedDeviceKey: ""
// Local layout toggle for details: true = grid (2 cols), false = rows (1 col)
// Persisted under Settings.data.ui.bluetoothDetailsViewMode
property bool detailsGrid: (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothDetailsViewMode !== undefined) ? (Settings.data.ui.bluetoothDetailsViewMode === "grid") : true
// Persisted under Settings.data.network.bluetoothDetailsViewMode
property bool detailsGrid: (Settings.data && Settings.data.ui && Settings.data.network.bluetoothDetailsViewMode !== undefined) ? (Settings.data.network.bluetoothDetailsViewMode === "grid") : true
Layout.fillWidth: true
Layout.preferredHeight: column.implicitHeight + Style.marginM * 2
@@ -54,11 +54,11 @@ NBox {
visible: root.headerMode === "filter"
// Option A: filter/filter-off
// Off (show all): filter; On (hide unnamed): filter-off
icon: (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) ? "filter-off" : "filter"
tooltipText: (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) ? I18n.tr("tooltips.hide-unnamed-devices") : I18n.tr("tooltips.show-all-devices")
icon: (Settings.data && Settings.data.ui && Settings.data.network.bluetoothHideUnnamedDevices) ? "filter-off" : "filter"
tooltipText: (Settings.data && Settings.data.ui && Settings.data.network.bluetoothHideUnnamedDevices) ? I18n.tr("tooltips.hide-unnamed-devices") : I18n.tr("tooltips.show-all-devices")
onClicked: {
if (Settings.data && Settings.data.ui) {
Settings.data.ui.bluetoothHideUnnamedDevices = !(Settings.data.ui.bluetoothHideUnnamedDevices);
Settings.data.network.bluetoothHideUnnamedDevices = !(Settings.data.network.bluetoothHideUnnamedDevices);
}
}
}
@@ -70,7 +70,7 @@ NBox {
model: root.model
visible: BluetoothService.adapter && BluetoothService.adapter.enabled
Rectangle {
NBox {
id: device
readonly property bool canConnect: BluetoothService.canConnect(modelData)
@@ -90,11 +90,10 @@ NBox {
Layout.fillWidth: true
Layout.preferredHeight: deviceColumn.implicitHeight + (Style.marginM * 2)
radius: Style.radiusM
color: Color.mSurface
border.width: Style.borderS
border.color: getContentColor(Color.mOutline)
clip: true
color: modelData.connected ? Qt.alpha(getContentColor(), 0.08) : Color.mSurface
// Content column so expanded details are laid out inside the card
ColumnLayout {
id: deviceColumn
@@ -284,7 +283,7 @@ NBox {
onClicked: {
root.detailsGrid = !root.detailsGrid;
if (Settings.data && Settings.data.ui) {
Settings.data.ui.bluetoothDetailsViewMode = root.detailsGrid ? "grid" : "list";
Settings.data.network.bluetoothDetailsViewMode = root.detailsGrid ? "grid" : "list";
}
}
z: 1
+3 -2
View File
@@ -16,7 +16,8 @@ SmartPanel {
preferredHeight: Math.round(500 * Style.uiScaleRatio)
panelContent: Rectangle {
color: Color.transparent
id: panelContent
color: "transparent"
// Calculate content height based on header + devices list (or minimum for empty states)
property real headerHeight: headerRow.implicitHeight + Style.marginM * 2
@@ -193,7 +194,7 @@ SmartPanel {
return [];
var filtered = BluetoothService.adapter.devices.values.filter(dev => dev && !dev.blocked && !dev.paired && !dev.trusted);
// Optionally hide devices without a meaningful name when the filter is enabled
if (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) {
if (Settings.data && Settings.data.ui && Settings.data.network.bluetoothHideUnnamedDevices) {
filtered = filtered.filter(function (dev) {
// Extract display name
var dn = "";
@@ -15,13 +15,14 @@ SmartPanel {
preferredWidth: Math.round(440 * Style.uiScaleRatio)
preferredHeight: Math.round(420 * Style.uiScaleRatio)
function getIcon(brightness) {
return brightness <= 0.5 ? "brightness-low" : "brightness-high";
}
panelContent: Item {
id: panelContent
property real contentPreferredHeight: mainColumn.implicitHeight + Style.marginL * 2
function getIcon(brightness) {
return brightness <= 0.5 ? "brightness-low" : "brightness-high";
}
ColumnLayout {
id: mainColumn
anchors.fill: parent
+36 -35
View File
@@ -16,20 +16,46 @@ SmartPanel {
panelAnchorHorizontalCenter: true
panelAnchorVerticalCenter: true
readonly property string currentVersion: UpdateService.changelogCurrentVersion || UpdateService.currentVersion
readonly property string previousVersion: UpdateService.previousVersion
readonly property bool hasPreviousVersion: previousVersion && previousVersion.length > 0
readonly property var releaseHighlights: UpdateService.releaseHighlights || []
readonly property string subtitleText: hasPreviousVersion ? I18n.tr("changelog.panel.subtitle.updated", {
"previousVersion": previousVersion
}) : I18n.tr("changelog.panel.subtitle.fresh")
panelContent: Rectangle {
id: panelContent
color: Color.mSurfaceVariant
radius: Style.radiusM
border.color: Color.mOutline
border.width: Style.borderS
readonly property string currentVersion: UpdateService.changelogCurrentVersion || UpdateService.currentVersion
readonly property string previousVersion: UpdateService.previousVersion
readonly property bool hasPreviousVersion: previousVersion && previousVersion.length > 0
readonly property var releaseHighlights: UpdateService.releaseHighlights || []
readonly property string subtitleText: hasPreviousVersion ? I18n.tr("changelog.panel.subtitle.updated", {
"previousVersion": previousVersion
}) : I18n.tr("changelog.panel.subtitle.fresh")
function headingLevel(text) {
if (!text)
return 0;
const trimmed = text.trim();
if (trimmed.length === 0)
return 0;
const match = trimmed.match(/^(#+)\s+/);
if (!match)
return 0;
return Math.min(match[1].length, 2);
}
function formatReleaseDate(dateString) {
if (!dateString || dateString.length === 0)
return "";
try {
const date = new Date(dateString);
if (isNaN(date.getTime()))
return dateString;
return Qt.formatDate(date, Qt.DefaultLocaleLongDate);
} catch (error) {
return dateString;
}
}
ColumnLayout {
anchors.fill: parent
anchors.margins: Style.marginL
@@ -148,7 +174,7 @@ SmartPanel {
Repeater {
model: modelData.entries
delegate: NText {
readonly property int headingLevel: root.headingLevel(modelData)
readonly property int headingLevel: panelContent.headingLevel(modelData)
text: {
if (modelData.length === 0)
return "\u00A0";
@@ -158,7 +184,7 @@ SmartPanel {
}
wrapMode: Text.WordWrap
elide: Text.ElideNone
textFormat: Text.PlainText
textFormat: Text.MarkdownText
color: headingLevel > 0 ? Color.mPrimary : Color.mOnSurface
font.weight: headingLevel > 0 ? Style.fontWeightBold : Style.fontWeightMedium
pointSize: headingLevel === 1 ? Style.fontSizeXXL : headingLevel === 2 ? Style.fontSizeXL : Style.fontSizeM
@@ -209,34 +235,9 @@ SmartPanel {
}
}
function headingLevel(text) {
if (!text)
return 0;
const trimmed = text.trim();
if (trimmed.length === 0)
return 0;
const match = trimmed.match(/^(#+)\s+/);
if (!match)
return 0;
return Math.min(match[1].length, 2);
}
onClosed: {
if (UpdateService && UpdateService.changelogCurrentVersion) {
UpdateService.markChangelogSeen(UpdateService.changelogCurrentVersion);
}
}
function formatReleaseDate(dateString) {
if (!dateString || dateString.length === 0)
return "";
try {
const date = new Date(dateString);
if (isNaN(date.getTime()))
return dateString;
return Qt.formatDate(date, Qt.DefaultLocaleLongDate);
} catch (error) {
return dateString;
}
}
}
+2 -4
View File
@@ -13,13 +13,11 @@ import qs.Widgets
SmartPanel {
id: root
// Calculate width based on settings
preferredWidth: Math.round((Settings.data.location.showWeekNumberInCalendar ? 440 : 420) * Style.uiScaleRatio)
panelContent: Item {
id: panelContent
anchors.fill: parent
// SmartPanel uses this to calculate panel height dynamically
readonly property real contentPreferredWidth: Math.round((Settings.data.location.showWeekNumberInCalendar ? 440 : 420) * Style.uiScaleRatio)
readonly property real contentPreferredHeight: content.implicitHeight + (Style.marginL * 2)
ColumnLayout {
@@ -87,7 +87,7 @@ SmartPanel {
}
panelContent: Item {
id: content
id: panelContent
ColumnLayout {
id: layout
@@ -8,7 +8,7 @@ import qs.Widgets
NIconButtonHot {
property ShellScreen screen
icon: BluetoothService.enabled ? "bluetooth" : "bluetooth-off"
icon: !BluetoothService.enabled ? "bluetooth-off" : ((BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) ? "bluetooth-connected" : "bluetooth")
tooltipText: I18n.tr("quickSettings.bluetooth.tooltip.action")
onClicked: {
var p = PanelService.getPanel("bluetoothPanel", screen);

Some files were not shown because too many files have changed in this diff Show More