mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2026-08-15 18:43:59 +00:00
SettingsWindow: add i18n support
This commit is contained in:
@@ -0,0 +1,658 @@
|
||||
{
|
||||
"settings": {
|
||||
"general": {
|
||||
"title": "Allgemein",
|
||||
|
||||
"profile": {
|
||||
"section": {
|
||||
"label": "Profil",
|
||||
"description": "Bearbeite deine Benutzerdaten und deinen Avatar."
|
||||
},
|
||||
"picture": {
|
||||
"label": "{user}s Profilbild",
|
||||
"description": "Dein Profilbild, das überall in der Oberfläche angezeigt wird."
|
||||
},
|
||||
"select-avatar": "Avatar-Bild auswählen"
|
||||
},
|
||||
|
||||
"ui": {
|
||||
"section": {
|
||||
"label": "Benutzeroberfläche",
|
||||
"description": "Passe Aussehen, Gefühl und Verhalten der Oberfläche an."
|
||||
},
|
||||
"dim-desktop": {
|
||||
"label": "Desktop abdunkeln",
|
||||
"description": "Desktop abdunkeln, wenn Panels oder Menüs geöffnet sind."
|
||||
},
|
||||
"border-radius": {
|
||||
"label": "Eckenrundung",
|
||||
"description": "Bestimmt die Rundung von Fenstern, Buttons und anderen Elementen."
|
||||
},
|
||||
"animation-speed": {
|
||||
"label": "Animationsgeschwindigkeit",
|
||||
"description": "Globale Animationsgeschwindigkeit anpassen."
|
||||
}
|
||||
},
|
||||
"screen-corners": {
|
||||
"section": {
|
||||
"label": "Bildschirmecken",
|
||||
"description": "Rundung und visuelle Effekte der Bildschirmecken anpassen."
|
||||
},
|
||||
"show-corners": {
|
||||
"label": "Bildschirmecken anzeigen",
|
||||
"description": "Gerundete Ecken am Bildschirmrand anzeigen."
|
||||
},
|
||||
"solid-black": {
|
||||
"label": "Durchgehend schwarze Ecken",
|
||||
"description": "Verwende durchgehend schwarz statt der Hintergrundfarbe der Statusleiste."
|
||||
}
|
||||
},
|
||||
"fonts": {
|
||||
"section": {
|
||||
"label": "Schriftarten",
|
||||
"description": "Wähle die Schriftarten für die gesamte Oberfläche."
|
||||
},
|
||||
"default": {
|
||||
"label": "Standard-Schriftart",
|
||||
"description": "Hauptschriftart für die gesamte Oberfläche.",
|
||||
"placeholder": "Standard-Schriftart auswählen...",
|
||||
"search-placeholder": "Schriftarten durchsuchen..."
|
||||
},
|
||||
"monospace": {
|
||||
"label": "Monospace-Schriftart",
|
||||
"description": "Monospace-Schriftart für Zahlen und Statistiken.",
|
||||
"placeholder": "Monospace-Schriftart auswählen...",
|
||||
"search-placeholder": "Monospace-Schriftarten durchsuchen..."
|
||||
},
|
||||
"accent": {
|
||||
"label": "Akzent-Schriftart",
|
||||
"description": "Große Schriftart für prominente Anzeigen.",
|
||||
"placeholder": "Display-Schriftart auswählen...",
|
||||
"search-placeholder": "Display-Schriftarten durchsuchen..."
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio": {
|
||||
"title": "Audio",
|
||||
"volumes": {
|
||||
"section": {
|
||||
"label": "Lautstärke",
|
||||
"description": "Lautstärke-Einstellungen und Audiopegel anpassen."
|
||||
},
|
||||
"output-volume": {
|
||||
"label": "Ausgabe-Lautstärke",
|
||||
"description": "Systemweite Lautstärke."
|
||||
},
|
||||
"mute-output": {
|
||||
"label": "Audio-Ausgabe stumm",
|
||||
"description": "Haupt-Audio-Ausgabe des Systems stummschalten."
|
||||
},
|
||||
"input-volume": {
|
||||
"label": "Eingabe-Lautstärke",
|
||||
"description": "Mikrofon-Eingangslautstärke."
|
||||
},
|
||||
"mute-input": {
|
||||
"label": "Audio-Eingabe stumm",
|
||||
"description": "Standard-Audio-Eingang (Mikrofon) stummschalten."
|
||||
},
|
||||
"step-size": {
|
||||
"label": "Lautstärke-Schrittgröße",
|
||||
"description": "Schrittgröße für Lautstärkeänderungen (Mausrad, Tastenkürzel)."
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
"section": {
|
||||
"label": "Audio-Geräte",
|
||||
"description": "Verfügbare Audio-Ein- und Ausgabegeräte konfigurieren."
|
||||
},
|
||||
"output-device": {
|
||||
"label": "Ausgabegerät",
|
||||
"description": "Gewünschtes Audio-Ausgabegerät auswählen."
|
||||
},
|
||||
"input-device": {
|
||||
"label": "Eingabegerät",
|
||||
"description": "Gewünschtes Audio-Eingabegerät auswählen."
|
||||
}
|
||||
},
|
||||
"media": {
|
||||
"section": {
|
||||
"label": "Media Player",
|
||||
"description": "Bevorzugte und ignorierte Media-Anwendungen festlegen."
|
||||
},
|
||||
"primary-player": {
|
||||
"label": "Haupt-Player",
|
||||
"description": "Stichwort eingeben, um deinen Haupt-Player zu identifizieren.",
|
||||
"placeholder": "z.B. spotify, vlc, mpv"
|
||||
},
|
||||
"excluded-player": {
|
||||
"label": "Ausgeschlossene Player",
|
||||
"description": "Stichwörter für Player hinzufügen, die das System ignorieren soll. Jedes Stichwort in eine neue Zeile.",
|
||||
"placeholder": "Teilstring eingeben und + drücken"
|
||||
},
|
||||
"visualizer-type": {
|
||||
"label": "Visualisierung",
|
||||
"description": "Visualisierung für Media-Wiedergabe auswählen"
|
||||
},
|
||||
"frame-rate": {
|
||||
"label": "Bildrate",
|
||||
"description": "Höhere Raten sind flüssiger, brauchen aber mehr Ressourcen."
|
||||
}
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"title": "Display",
|
||||
"monitors": {
|
||||
"section": {
|
||||
"label": "Monitor-Einstellungen",
|
||||
"description": "Skalierung und Helligkeit für jeden Bildschirm anpassen."
|
||||
},
|
||||
"scale": "Skalierung",
|
||||
"brightness": "Helligkeit",
|
||||
"reset-scaling": "Skalierung zurücksetzen",
|
||||
"brightness-step": {
|
||||
"label": "Helligkeits-Schrittgröße",
|
||||
"description": "Schrittgröße für Helligkeitsänderungen (Mausrad und Tastenkürzel)."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
"section": {
|
||||
"label": "Nachtlicht",
|
||||
"description": "Blaues Licht reduzieren für besseren Schlaf und weniger Augenbelastung."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Nachtlicht aktivieren",
|
||||
"description": "Warmen Farbfilter anwenden, um blaues Licht zu reduzieren."
|
||||
},
|
||||
"temperature": {
|
||||
"label": "Farbtemperatur",
|
||||
"description": "Farbwärme für Nacht- und Tageszeit einstellen.",
|
||||
"night": "Nacht",
|
||||
"day": "Tag"
|
||||
},
|
||||
"auto-schedule": {
|
||||
"label": "Automatische Zeiten",
|
||||
"description": "Basiert auf Sonnenuntergang und -aufgang in <i>{location}</i> - empfohlen."
|
||||
},
|
||||
"manual-schedule": {
|
||||
"label": "Manuelle Zeiten",
|
||||
"description": "Eigene Zeiten für Sonnenauf- und -untergang festlegen.",
|
||||
"sunrise": "Sonnenaufgang",
|
||||
"sunset": "Sonnenuntergang",
|
||||
"select-start": "Startzeit auswählen",
|
||||
"select-stop": "Endzeit auswählen"
|
||||
},
|
||||
"force-activation": {
|
||||
"label": "Sofort aktivieren",
|
||||
"description": "Ignoriert den Zeitplan und wendet den Nachtfilter sofort an."
|
||||
}
|
||||
}
|
||||
},
|
||||
"bar": {
|
||||
"title": "Statusleiste",
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Aussehen",
|
||||
"description": "Aussehen und Position der Statusleiste anpassen."
|
||||
},
|
||||
"position": {
|
||||
"label": "Statusleistenposition",
|
||||
"description": "Wähle, wo die Statusleiste auf dem Bildschirm platziert wird."
|
||||
},
|
||||
"density": {
|
||||
"label": "Statusleistendichte",
|
||||
"description": "Innenabstand der Statusleiste für kompaktes oder geräumiges Aussehen anpassen."
|
||||
},
|
||||
"background-opacity": {
|
||||
"label": "Hintergrund-Transparenz",
|
||||
"description": "Transparenz des Statusleistenhintergrunds anpassen."
|
||||
},
|
||||
"show-capsule": {
|
||||
"label": "Kapsel anzeigen",
|
||||
"description": "Widget-Hintergründe anzeigen."
|
||||
},
|
||||
"floating": {
|
||||
"label": "Schwebende Statusleiste",
|
||||
"description": "Statusleiste als schwebende 'Pille' anzeigen. Hinweis: Dadurch werden die Bildschirmecken an die Ränder verschoben."
|
||||
},
|
||||
"margins": {
|
||||
"label": "Ränder",
|
||||
"description": "Ränder um die schwebende Statusleiste anpassen.",
|
||||
"vertical": "Vertikal",
|
||||
"horizontal": "Horizontal"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"section": {
|
||||
"label": "Widget-Positionierung",
|
||||
"description": "Widgets per Drag & Drop innerhalb jeder Sektion neu ordnen oder mit den Hinzufügen/Entfernen-Buttons verwalten."
|
||||
}
|
||||
},
|
||||
"monitors": {
|
||||
"section": {
|
||||
"label": "Monitor-Anzeige",
|
||||
"description": "Statusleiste auf bestimmten Monitoren anzeigen. Standard ist alle, wenn keine ausgewählt."
|
||||
}
|
||||
}
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Aussehen",
|
||||
"description": "Verhalten und Aussehen des Docks anpassen."
|
||||
},
|
||||
"auto-hide": {
|
||||
"label": "Automatisch ausblenden",
|
||||
"description": "Automatisch ausblenden, wenn nicht verwendet."
|
||||
},
|
||||
"exclusive-zone": {
|
||||
"label": "Exklusivbereich",
|
||||
"description": "Fensterüberlappung verhindern."
|
||||
},
|
||||
"background-opacity": {
|
||||
"label": "Hintergrund-Transparenz",
|
||||
"description": "Transparenz des Dock-Hintergrunds anpassen."
|
||||
},
|
||||
"floating-distance": {
|
||||
"label": "Schwebeabstand",
|
||||
"description": "Schwebeabstand vom Bildschirmrand anpassen."
|
||||
}
|
||||
},
|
||||
"monitors": {
|
||||
"section": {
|
||||
"label": "Monitor-Anzeige",
|
||||
"description": "Monitor auswählen, auf dem das Dock angezeigt wird."
|
||||
}
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"title": "Starter",
|
||||
"settings": {
|
||||
"section": {
|
||||
"label": "Aussehen",
|
||||
"description": "Verhalten und Aussehen des Starters anpassen."
|
||||
},
|
||||
"position": {
|
||||
"label": "Position",
|
||||
"description": "Wähle, wo das Starter-Panel erscheint."
|
||||
},
|
||||
"background-opacity": {
|
||||
"label": "Hintergrund-Transparenz",
|
||||
"description": "Transparenz des Starter-Hintergrunds anpassen."
|
||||
},
|
||||
"clipboard-history": {
|
||||
"label": "Zwischenablage-Verlauf aktivieren",
|
||||
"description": "Auf zuvor kopierte Inhalte über den Starter zugreifen."
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"label": "Nach Nutzung sortieren",
|
||||
"description": "Wenn aktiviert, erscheinen häufig gestartete Apps zuerst in der Liste."
|
||||
},
|
||||
"use-app2unit": {
|
||||
"label": "App2Unit zum Starten verwenden",
|
||||
"description": "Verwendet eine alternative Startmethode für bessere Prozessverwaltung und weniger Probleme."
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Benachrichtigungen",
|
||||
"settings": {
|
||||
"section": {
|
||||
"label": "Aussehen",
|
||||
"description": "Aussehen und Verhalten von Benachrichtigungen konfigurieren."
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"label": "Nicht stören",
|
||||
"description": "Alle Benachrichtigungs-Popups deaktivieren, wenn aktiviert."
|
||||
},
|
||||
"enable-osd": {
|
||||
"label": "Bildschirmanzeige aktivieren",
|
||||
"description": "Lautstärke- und Helligkeitsänderungen in Echtzeit anzeigen."
|
||||
},
|
||||
"location": {
|
||||
"label": "Position",
|
||||
"description": "Wo Benachrichtigungen auf dem Bildschirm erscheinen."
|
||||
},
|
||||
"low-urgency": {
|
||||
"label": "Niedrige Priorität",
|
||||
"description": "Wie lange Benachrichtigungen niedriger Priorität sichtbar bleiben."
|
||||
},
|
||||
"normal-urgency": {
|
||||
"label": "Normale Priorität",
|
||||
"description": "Wie lange Benachrichtigungen normaler Priorität sichtbar bleiben."
|
||||
},
|
||||
"critical-urgency": {
|
||||
"label": "Kritische Priorität",
|
||||
"description": "Wie lange kritische Benachrichtigungen sichtbar bleiben."
|
||||
},
|
||||
"monitors-display": {
|
||||
"label": "Monitor-Anzeige",
|
||||
"description": "Benachrichtigungen auf bestimmten Monitoren anzeigen. Standard ist alle, wenn keine ausgewählt."
|
||||
}
|
||||
}
|
||||
},
|
||||
"wallpaper": {
|
||||
"title": "Hintergrundbild",
|
||||
"settings": {
|
||||
"section": {
|
||||
"label": "Hintergrundbild-Einstellungen",
|
||||
"description": "Verwaltung und Anzeige von Hintergrundbildern steuern."
|
||||
},
|
||||
"enable-management": {
|
||||
"label": "Hintergrundbild-Verwaltung aktivieren",
|
||||
"description": "Hintergrundbilder mit Noctalia verwalten. Deaktivieren, wenn du eine andere Anwendung bevorzugst."
|
||||
},
|
||||
"folder": {
|
||||
"label": "Hintergrundbild-Ordner",
|
||||
"description": "Pfad zu deinem Haupt-Hintergrundbild-Ordner.",
|
||||
"tooltip": "Nach Hintergrundbild-Ordner suchen"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"label": "Monitor-spezifische Verzeichnisse",
|
||||
"description": "Anderen Hintergrundbild-Ordner für jeden Monitor festlegen.",
|
||||
"tooltip": "Nach Monitor-Hintergrundbild-Ordner suchen"
|
||||
},
|
||||
"select-folder": "Hintergrundbild-Ordner auswählen",
|
||||
"select-monitor-folder": "Monitor-Hintergrundbild-Ordner auswählen"
|
||||
},
|
||||
"look-feel": {
|
||||
"section": {
|
||||
"label": "Aussehen"
|
||||
},
|
||||
"fill-mode": {
|
||||
"label": "Füllmodus",
|
||||
"description": "Wähle, wie das Bild an die Auflösung deines Monitors angepasst werden soll."
|
||||
},
|
||||
"fill-color": {
|
||||
"label": "Füllfarbe",
|
||||
"description": "Wähle eine Füllfarbe, die hinter dem Hintergrundbild erscheinen kann."
|
||||
},
|
||||
"transition-type": {
|
||||
"label": "Übergangstyp",
|
||||
"description": "Animationstyp beim Wechsel zwischen Hintergrundbildern."
|
||||
},
|
||||
"transition-duration": {
|
||||
"label": "Übergangsdauer",
|
||||
"description": "Dauer der Übergangsanimationen in Sekunden."
|
||||
},
|
||||
"edge-smoothness": {
|
||||
"label": "Übergangskante weichzeichnen",
|
||||
"description": "Wendet einen weichen, ausgefransten Effekt auf die Kante der Übergänge an."
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
"section": {
|
||||
"label": "Automatisierung"
|
||||
},
|
||||
"random-wallpaper": {
|
||||
"label": "Zufälliges Hintergrundbild",
|
||||
"description": "Plane zufällige Hintergrundbild-Wechsel in regelmäßigen Abständen."
|
||||
},
|
||||
"interval": {
|
||||
"label": "Hintergrundbild-Intervall",
|
||||
"description": "Wie oft Hintergrundbilder automatisch gewechselt werden."
|
||||
},
|
||||
"custom-interval": {
|
||||
"label": "Eigenes Intervall",
|
||||
"description": "Zeit als HH:MM eingeben (z.B. 01:30)."
|
||||
}
|
||||
}
|
||||
},
|
||||
"color-scheme": {
|
||||
"title": "Farbschema",
|
||||
"color-source": {
|
||||
"section": {
|
||||
"label": "Farbquelle",
|
||||
"description": "Haupteinstellungen für Noctalias Farben."
|
||||
},
|
||||
"dark-mode": {
|
||||
"label": "Dunkler Modus",
|
||||
"description": "Wechselt zu einem dunkleren Design für angenehmeres Sehen bei Nacht."
|
||||
},
|
||||
"enable-matugen": {
|
||||
"label": "Matugen aktivieren",
|
||||
"description": "Automatisch Farben basierend auf deinem aktiven Hintergrundbild generieren."
|
||||
}
|
||||
},
|
||||
"predefined": {
|
||||
"section": {
|
||||
"label": "Vordefinierte Farbschemata",
|
||||
"description": "Um diese Farbschemata zu verwenden, musst du Matugen deaktivieren. Mit aktiviertem Matugen werden Farben automatisch aus deinem Hintergrundbild generiert."
|
||||
}
|
||||
},
|
||||
"matugen": {
|
||||
"section": {
|
||||
"label": "Matugen-Vorlagen",
|
||||
"description": "Farben auf externe Anwendungen anwenden."
|
||||
},
|
||||
"ui": {
|
||||
"label": "UI",
|
||||
"description": "Desktop-Umgebung und UI-Toolkit-Theming.",
|
||||
"gtk4": {
|
||||
"label": "GTK 4 (libadwaita)",
|
||||
"description": "Schreibt ~/.config/gtk-4.0/gtk.css"
|
||||
},
|
||||
"gtk3": {
|
||||
"label": "GTK 3",
|
||||
"description": "Schreibt ~/.config/gtk-3.0/gtk.css"
|
||||
},
|
||||
"qt6": {
|
||||
"label": "Qt6ct",
|
||||
"description": "Schreibt ~/.config/qt6ct/colors/noctalia.conf"
|
||||
},
|
||||
"qt5": {
|
||||
"label": "Qt5ct",
|
||||
"description": "Schreibt ~/.config/qt5ct/colors/noctalia.conf"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
"label": "Terminal",
|
||||
"description": "Terminal-Emulator-Theming.",
|
||||
"kitty": {
|
||||
"label": "Kitty",
|
||||
"description": "Schreibt ~/.config/kitty/themes/noctalia.conf und lädt neu",
|
||||
"description-missing": "Erfordert installiertes kitty Terminal"
|
||||
},
|
||||
"ghostty": {
|
||||
"label": "Ghostty",
|
||||
"description": "Schreibt ~/.config/ghostty/themes/noctalia und lädt neu",
|
||||
"description-missing": "Erfordert installiertes ghostty Terminal"
|
||||
},
|
||||
"foot": {
|
||||
"label": "Foot",
|
||||
"description": "Schreibt ~/.config/foot/themes/noctalia und lädt neu",
|
||||
"description-missing": "Erfordert installiertes foot Terminal"
|
||||
}
|
||||
},
|
||||
"programs": {
|
||||
"label": "Programme",
|
||||
"description": "Anwendungsspezifisches Theming.",
|
||||
"fuzzel": {
|
||||
"label": "Fuzzel",
|
||||
"description": "Schreibt ~/.config/fuzzel/themes/noctalia und lädt neu",
|
||||
"description-missing": "Erfordert installierten fuzzel Launcher"
|
||||
},
|
||||
"vesktop": {
|
||||
"label": "Vesktop",
|
||||
"description": "Schreibt ~/.config/vesktop/themes/noctalia.theme.css",
|
||||
"description-missing": "Erfordert installierten vesktop Discord-Client"
|
||||
},
|
||||
"pywalfox": {
|
||||
"label": "Pywalfox (Firefox)",
|
||||
"description": "Schreibt ~/.cache/wal/colors.json und führt pywalfox update aus",
|
||||
"description-missing": "Erfordert installiertes pywalfox Paket"
|
||||
}
|
||||
},
|
||||
"misc": {
|
||||
"label": "Sonstiges",
|
||||
"description": "Weitere Konfigurationsoptionen.",
|
||||
"user-templates": {
|
||||
"label": "Benutzer-Vorlagen",
|
||||
"description": "Benutzerdefinierte Matugen-Konfiguration aus ~/.config/matugen/config.toml aktivieren"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"title": "Standort",
|
||||
"location": {
|
||||
"section": {
|
||||
"label": "Dein Standort",
|
||||
"description": "Genaues Wetter und Nachtlicht-Zeitplan durch Festlegen deines Standorts erhalten."
|
||||
},
|
||||
"search": {
|
||||
"label": "Nach Standort suchen",
|
||||
"description": "z.B. Berlin, DE",
|
||||
"placeholder": "Ortsnamen eingeben"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
"section": {
|
||||
"label": "Wetter",
|
||||
"description": "Wähle deine bevorzugte Temperatureinheit."
|
||||
},
|
||||
"fahrenheit": {
|
||||
"label": "Temperatur in Fahrenheit (°F) anzeigen",
|
||||
"description": "Temperatur in Fahrenheit statt Celsius anzeigen."
|
||||
}
|
||||
},
|
||||
"date-time": {
|
||||
"section": {
|
||||
"label": "Datum & Zeit",
|
||||
"description": "Anpassen, wie Datum und Zeit angezeigt werden."
|
||||
},
|
||||
"12hour-format": {
|
||||
"label": "12-Stunden-Format auf dem Sperrbildschirm verwenden",
|
||||
"description": "An für AM/PM-Format (z.B. 8:00 PM), aus für 24-Stunden-Format (z.B. 20:00)."
|
||||
},
|
||||
"week-numbers": {
|
||||
"label": "Wochennummern anzeigen",
|
||||
"description": "Zeigt die Woche des Jahres (z.B. Woche 38) im Kalender an."
|
||||
}
|
||||
}
|
||||
},
|
||||
"network": {
|
||||
"title": "Netzwerk",
|
||||
"section": {
|
||||
"description": "Wi-Fi- und Bluetooth-Verbindungen verwalten."
|
||||
},
|
||||
"wifi": {
|
||||
"label": "Wi-Fi aktivieren"
|
||||
},
|
||||
"bluetooth": {
|
||||
"label": "Bluetooth aktivieren"
|
||||
}
|
||||
},
|
||||
"screen-recorder": {
|
||||
"title": "Bildschirmaufnahme",
|
||||
"general": {
|
||||
"section": {
|
||||
"label": "Allgemeine Einstellungen",
|
||||
"description": "Ausgabe und Inhalt der Bildschirmaufnahme verwalten."
|
||||
},
|
||||
"output-folder": {
|
||||
"label": "Ausgabe-Ordner",
|
||||
"description": "Ordner, in dem Bildschirmaufnahmen gespeichert werden.",
|
||||
"tooltip": "Nach Ausgabe-Ordner suchen"
|
||||
},
|
||||
"show-cursor": {
|
||||
"label": "Cursor anzeigen",
|
||||
"description": "Mauszeiger im Video aufnehmen."
|
||||
},
|
||||
"select-output-folder": "Ausgabe-Ordner auswählen"
|
||||
},
|
||||
"video": {
|
||||
"section": {
|
||||
"label": "Video-Einstellungen",
|
||||
"description": "Video-Aufnahmeoptionen konfigurieren."
|
||||
},
|
||||
"video-source": {
|
||||
"label": "Video-Quelle",
|
||||
"description": "Portal wird empfohlen, bei Artefakten versuche Screen."
|
||||
},
|
||||
"frame-rate": {
|
||||
"label": "Bildrate",
|
||||
"description": "Ziel-Bildrate für Bildschirmaufnahmen."
|
||||
},
|
||||
"video-quality": {
|
||||
"label": "Video-Qualität",
|
||||
"description": "Höhere Qualität führt zu größeren Dateien."
|
||||
},
|
||||
"video-codec": {
|
||||
"label": "Video-Codec",
|
||||
"description": "h264 ist der gängigste Codec."
|
||||
},
|
||||
"color-range": {
|
||||
"label": "Farbbereich",
|
||||
"description": "Begrenzt wird für bessere Kompatibilität empfohlen."
|
||||
}
|
||||
},
|
||||
"audio": {
|
||||
"section": {
|
||||
"label": "Audio-Einstellungen",
|
||||
"description": "Audio-Aufnahmeoptionen konfigurieren."
|
||||
},
|
||||
"audio-source": {
|
||||
"label": "Audio-Quelle",
|
||||
"description": "Audio-Quelle für die Aufnahme."
|
||||
},
|
||||
"audio-codec": {
|
||||
"label": "Audio-Codec",
|
||||
"description": "Opus wird für beste Performance und kleinste Audio-Dateigröße empfohlen."
|
||||
}
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"title": "Über",
|
||||
"noctalia": {
|
||||
"section": {
|
||||
"label": "Noctalia Shell",
|
||||
"description": "Eine schlanke und minimalistische Desktop-Shell, durchdacht für Wayland entwickelt, gebaut mit Quickshell."
|
||||
},
|
||||
"latest-version": "Neueste Version:",
|
||||
"installed-version": "Installierte Version:",
|
||||
"download-latest": "Neueste Version herunterladen"
|
||||
},
|
||||
"contributors": {
|
||||
"section": {
|
||||
"label": "Mitwirkende",
|
||||
"description": "Shoutout an unseren {count} <b>großartigen</b> Mitwirkenden!",
|
||||
"description_plural": "Shoutout an unsere {count} <b>großartigen</b> Mitwirkenden!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hooks": {
|
||||
"title": "Hooks",
|
||||
"system-hooks": {
|
||||
"section": {
|
||||
"label": "System-Hooks",
|
||||
"description": "Befehle konfigurieren, die bei Systemereignissen ausgeführt werden."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Hooks aktivieren",
|
||||
"description": "Alle Hook-Befehle aktivieren oder deaktivieren."
|
||||
}
|
||||
},
|
||||
"wallpaper-changed": {
|
||||
"label": "Hintergrundbild geändert",
|
||||
"description": "Befehl, der ausgeführt wird, wenn das Hintergrundbild wechselt.",
|
||||
"placeholder": "z.B. notify-send \"Hintergrundbild\" \"Geändert\""
|
||||
},
|
||||
"theme-changed": {
|
||||
"label": "Design geändert",
|
||||
"description": "Befehl, der ausgeführt wird, wenn zwischen dunklem und hellem Modus gewechselt wird.",
|
||||
"placeholder": "z.B. notify-send \"Design\" \"Gewechselt\""
|
||||
},
|
||||
"info": {
|
||||
"command-info": {
|
||||
"label": "Hook-Befehl-Informationen",
|
||||
"description": "• Befehle werden über Shell ausgeführt (sh -c)\n• Befehle laufen im Hintergrund (detached)\n• Test-Buttons führen mit aktuellen Werten aus"
|
||||
},
|
||||
"parameters": {
|
||||
"label": "Verfügbare Parameter",
|
||||
"description": "• Hintergrundbild-Hook: $1 = Hintergrundbild-Pfad, $2 = Bildschirmname\n• Design-Wechsel-Hook: $1 = true/false (Dunkler-Modus-Status)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+626
-1
@@ -11,7 +11,8 @@
|
||||
"picture": {
|
||||
"label": "{user}'s Profile picture",
|
||||
"description": "Your profile picture that appears throughout the interface."
|
||||
}
|
||||
},
|
||||
"select-avatar": "Select avatar image"
|
||||
},
|
||||
|
||||
"ui": {
|
||||
@@ -26,6 +27,630 @@
|
||||
"border-radius": {
|
||||
"label": "Border radius",
|
||||
"description": "Controls the corner roundness of windows, buttons, and other elements."
|
||||
},
|
||||
"animation-speed": {
|
||||
"label": "Animation speed",
|
||||
"description": "Adjust global animation speed."
|
||||
}
|
||||
},
|
||||
"screen-corners": {
|
||||
"section": {
|
||||
"label": "Screen corners",
|
||||
"description": "Customize screen corner rounding and visual effects."
|
||||
},
|
||||
"show-corners": {
|
||||
"label": "Show screen corners",
|
||||
"description": "Display rounded corners on the edge of the screen."
|
||||
},
|
||||
"solid-black": {
|
||||
"label": "Solid black corners",
|
||||
"description": "Use solid black instead of the bar background color."
|
||||
}
|
||||
},
|
||||
"fonts": {
|
||||
"section": {
|
||||
"label": "Fonts",
|
||||
"description": "Choose the fonts used throughout the interface."
|
||||
},
|
||||
"default": {
|
||||
"label": "Default font",
|
||||
"description": "Main font used throughout the interface.",
|
||||
"placeholder": "Select default font...",
|
||||
"search-placeholder": "Search fonts..."
|
||||
},
|
||||
"monospace": {
|
||||
"label": "Monospaced font",
|
||||
"description": "Monospaced font used for numbers and stats display.",
|
||||
"placeholder": "Select monospace font...",
|
||||
"search-placeholder": "Search monospace fonts..."
|
||||
},
|
||||
"accent": {
|
||||
"label": "Accent font",
|
||||
"description": "Large font used for prominent displays.",
|
||||
"placeholder": "Select display font...",
|
||||
"search-placeholder": "Search display fonts..."
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio": {
|
||||
"title": "Audio",
|
||||
"volumes": {
|
||||
"section": {
|
||||
"label": "Volumes",
|
||||
"description": "Adjust volume controls and audio levels."
|
||||
},
|
||||
"output-volume": {
|
||||
"label": "Output volume",
|
||||
"description": "System-wide volume level."
|
||||
},
|
||||
"mute-output": {
|
||||
"label": "Mute audio output",
|
||||
"description": "Mute the system's main audio output."
|
||||
},
|
||||
"input-volume": {
|
||||
"label": "Input volume",
|
||||
"description": "Microphone input volume level."
|
||||
},
|
||||
"mute-input": {
|
||||
"label": "Mute audio input",
|
||||
"description": "Mute the default audio input (microphone)."
|
||||
},
|
||||
"step-size": {
|
||||
"label": "Volume step size",
|
||||
"description": "Adjust the step size for volume changes (scroll wheel, keyboard shortcuts)."
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
"section": {
|
||||
"label": "Audio devices",
|
||||
"description": "Configure available audio input and output devices."
|
||||
},
|
||||
"output-device": {
|
||||
"label": "Output device",
|
||||
"description": "Select the desired audio output device."
|
||||
},
|
||||
"input-device": {
|
||||
"label": "Input device",
|
||||
"description": "Select the desired audio input device."
|
||||
}
|
||||
},
|
||||
"media": {
|
||||
"section": {
|
||||
"label": "Media players",
|
||||
"description": "Set your preferred and ignored media applications."
|
||||
},
|
||||
"primary-player": {
|
||||
"label": "Primary player",
|
||||
"description": "Enter a keyword to identify your main player.",
|
||||
"placeholder": "e.g. spotify, vlc, mpv"
|
||||
},
|
||||
"excluded-player": {
|
||||
"label": "Excluded player",
|
||||
"description": "Add keywords for players you want the system to ignore. Each keyword should be on a new line.",
|
||||
"placeholder": "type substring and press +"
|
||||
},
|
||||
"visualizer-type": {
|
||||
"label": "Visualization type",
|
||||
"description": "Choose a visualization type for media playback"
|
||||
},
|
||||
"frame-rate": {
|
||||
"label": "Frame rate",
|
||||
"description": "Higher rates are smoother but use more resources."
|
||||
}
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"title": "Display",
|
||||
"monitors": {
|
||||
"section": {
|
||||
"label": "Per-monitor settings",
|
||||
"description": "Adjust scaling and brightness for each display."
|
||||
},
|
||||
"scale": "Scale",
|
||||
"brightness": "Brightness",
|
||||
"reset-scaling": "Reset scaling",
|
||||
"brightness-step": {
|
||||
"label": "Brightness step size",
|
||||
"description": "Adjust the step size for brightness changes (scroll wheel and keyboard shortcuts)."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
"section": {
|
||||
"label": "Night light",
|
||||
"description": "Reduce blue light emission to help you sleep better and reduce eye strain."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Enable night light",
|
||||
"description": "Apply a warm color filter to reduce blue light emission."
|
||||
},
|
||||
"temperature": {
|
||||
"label": "Color temperature",
|
||||
"description": "Set the color warmth for nighttime and daytime.",
|
||||
"night": "Night",
|
||||
"day": "Day"
|
||||
},
|
||||
"auto-schedule": {
|
||||
"label": "Automatic scheduling",
|
||||
"description": "Based on the sunset and sunrise time in <i>{location}</i> - recommended."
|
||||
},
|
||||
"manual-schedule": {
|
||||
"label": "Manual scheduling",
|
||||
"description": "Set custom times for sunrise and sunset.",
|
||||
"sunrise": "Sunrise time",
|
||||
"sunset": "Sunset time",
|
||||
"select-start": "Select start time",
|
||||
"select-stop": "Select stop time"
|
||||
},
|
||||
"force-activation": {
|
||||
"label": "Force activation",
|
||||
"description": "Ignores the schedule and applies the night filter immediately."
|
||||
}
|
||||
}
|
||||
},
|
||||
"bar": {
|
||||
"title": "Bar",
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
"description": "Customize the bar's appearance and position."
|
||||
},
|
||||
"position": {
|
||||
"label": "Bar position",
|
||||
"description": "Choose where to place the bar on the screen."
|
||||
},
|
||||
"density": {
|
||||
"label": "Bar density",
|
||||
"description": "Adjust the bar's padding for a compact or spacious look."
|
||||
},
|
||||
"background-opacity": {
|
||||
"label": "Background opacity",
|
||||
"description": "Adjust the background opacity of the bar."
|
||||
},
|
||||
"show-capsule": {
|
||||
"label": "Show capsule",
|
||||
"description": "Show widget backgrounds."
|
||||
},
|
||||
"floating": {
|
||||
"label": "Floating bar",
|
||||
"description": "Displays the bar as a floating 'pill'. Note: This will move the screen corners to the edges."
|
||||
},
|
||||
"margins": {
|
||||
"label": "Margins",
|
||||
"description": "Adjust the margins around the floating bar.",
|
||||
"vertical": "Vertical",
|
||||
"horizontal": "Horizontal"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"section": {
|
||||
"label": "Widgets positioning",
|
||||
"description": "Drag and drop widgets to reorder them within each section, or use the add/remove buttons to manage widgets."
|
||||
}
|
||||
},
|
||||
"monitors": {
|
||||
"section": {
|
||||
"label": "Monitor display",
|
||||
"description": "Show bar on specific monitors. Defaults to all if none are chosen."
|
||||
}
|
||||
}
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
"description": "Customize the dock's behavior and appearance."
|
||||
},
|
||||
"auto-hide": {
|
||||
"label": "Auto-hide",
|
||||
"description": "Automatically hide when not in use."
|
||||
},
|
||||
"exclusive-zone": {
|
||||
"label": "Exclusive zone",
|
||||
"description": "Prevent window overlap."
|
||||
},
|
||||
"background-opacity": {
|
||||
"label": "Background opacity",
|
||||
"description": "Adjust the dock's background opacity."
|
||||
},
|
||||
"floating-distance": {
|
||||
"label": "Dock floating distance",
|
||||
"description": "Adjust the floating distance from the screen edge."
|
||||
}
|
||||
},
|
||||
"monitors": {
|
||||
"section": {
|
||||
"label": "Monitor display",
|
||||
"description": "Choose which monitor to display the dock on."
|
||||
}
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"title": "Launcher",
|
||||
"settings": {
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
"description": "Customize the launcher's behavior and appearance."
|
||||
},
|
||||
"position": {
|
||||
"label": "Position",
|
||||
"description": "Choose where the launcher panel appears."
|
||||
},
|
||||
"background-opacity": {
|
||||
"label": "Background opacity",
|
||||
"description": "Adjust the background opacity of the launcher."
|
||||
},
|
||||
"clipboard-history": {
|
||||
"label": "Enable clipboard history",
|
||||
"description": "Access previously copied items from the launcher."
|
||||
},
|
||||
"sort-by-usage": {
|
||||
"label": "Sort by most used",
|
||||
"description": "When enabled, frequently launched apps appear first in the list."
|
||||
},
|
||||
"use-app2unit": {
|
||||
"label": "Use App2Unit to launch applications",
|
||||
"description": "Uses an alternative launch method to better manage app processes and prevent issues."
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
"settings": {
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
"description": "Configure notifications appearance and behavior."
|
||||
},
|
||||
"do-not-disturb": {
|
||||
"label": "Do not disturb",
|
||||
"description": "Disable all notification popups when enabled."
|
||||
},
|
||||
"enable-osd": {
|
||||
"label": "Enable on screen display",
|
||||
"description": "Show volume and brightness changes in real-time."
|
||||
},
|
||||
"location": {
|
||||
"label": "Location",
|
||||
"description": "Where notifications appear on screen."
|
||||
},
|
||||
"low-urgency": {
|
||||
"label": "Low urgency",
|
||||
"description": "How long low priority notifications stay visible."
|
||||
},
|
||||
"normal-urgency": {
|
||||
"label": "Normal urgency",
|
||||
"description": "How long normal priority notifications stay visible."
|
||||
},
|
||||
"critical-urgency": {
|
||||
"label": "Critical urgency",
|
||||
"description": "How long critical priority notifications stay visible."
|
||||
},
|
||||
"monitors-display": {
|
||||
"label": "Monitors display",
|
||||
"description": "Show notification on specific monitors. Defaults to all if none are chosen."
|
||||
}
|
||||
}
|
||||
},
|
||||
"wallpaper": {
|
||||
"title": "Wallpaper",
|
||||
"settings": {
|
||||
"section": {
|
||||
"label": "Wallpaper settings",
|
||||
"description": "Control how wallpapers are managed and displayed."
|
||||
},
|
||||
"enable-management": {
|
||||
"label": "Enable wallpaper management",
|
||||
"description": "Manage wallpapers with Noctalia. Uncheck if you prefer using another application."
|
||||
},
|
||||
"folder": {
|
||||
"label": "Wallpaper folder",
|
||||
"description": "Path to your main wallpaper folder.",
|
||||
"tooltip": "Browse for wallpaper folder"
|
||||
},
|
||||
"monitor-specific": {
|
||||
"label": "Monitor-specific directories",
|
||||
"description": "Set a different wallpaper folder for each monitor.",
|
||||
"tooltip": "Browse for wallpaper folder"
|
||||
},
|
||||
"select-folder": "Select wallpaper folder",
|
||||
"select-monitor-folder": "Select monitor wallpaper folder"
|
||||
},
|
||||
"look-feel": {
|
||||
"section": {
|
||||
"label": "Look & feel"
|
||||
},
|
||||
"fill-mode": {
|
||||
"label": "Fill mode",
|
||||
"description": "Select how the image should scale to match your monitor's resolution."
|
||||
},
|
||||
"fill-color": {
|
||||
"label": "Fill color",
|
||||
"description": "Choose a fill color that may appear behind the wallpaper."
|
||||
},
|
||||
"transition-type": {
|
||||
"label": "Transition type",
|
||||
"description": "Animation type when switching between wallpapers."
|
||||
},
|
||||
"transition-duration": {
|
||||
"label": "Transition duration",
|
||||
"description": "Duration of transition animations in seconds."
|
||||
},
|
||||
"edge-smoothness": {
|
||||
"label": "Soften transition edge",
|
||||
"description": "Applies a soft, feathered effect to the edge of transitions."
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
"section": {
|
||||
"label": "Automation"
|
||||
},
|
||||
"random-wallpaper": {
|
||||
"label": "Random wallpaper",
|
||||
"description": "Schedule random wallpaper changes at regular intervals."
|
||||
},
|
||||
"interval": {
|
||||
"label": "Wallpaper interval",
|
||||
"description": "How often to change wallpapers automatically."
|
||||
},
|
||||
"custom-interval": {
|
||||
"label": "Custom interval",
|
||||
"description": "Enter time as HH:MM (e.g., 01:30)."
|
||||
}
|
||||
}
|
||||
},
|
||||
"color-scheme": {
|
||||
"title": "Color scheme",
|
||||
"color-source": {
|
||||
"section": {
|
||||
"label": "Color source",
|
||||
"description": "Main settings for Noctalia's colors."
|
||||
},
|
||||
"dark-mode": {
|
||||
"label": "Dark mode",
|
||||
"description": "Switches to a darker theme for easier viewing at night."
|
||||
},
|
||||
"enable-matugen": {
|
||||
"label": "Enable Matugen",
|
||||
"description": "Automatically generate colors based on your active wallpaper."
|
||||
}
|
||||
},
|
||||
"predefined": {
|
||||
"section": {
|
||||
"label": "Predefined color schemes",
|
||||
"description": "To use these color schemes, you must turn off Matugen. With Matugen enabled, colors are automatically generated from your wallpaper."
|
||||
}
|
||||
},
|
||||
"matugen": {
|
||||
"section": {
|
||||
"label": "Matugen templates",
|
||||
"description": "Apply colors to external applications."
|
||||
},
|
||||
"ui": {
|
||||
"label": "UI",
|
||||
"description": "Desktop environment and UI toolkit theming.",
|
||||
"gtk4": {
|
||||
"label": "GTK 4 (libadwaita)",
|
||||
"description": "Write ~/.config/gtk-4.0/gtk.css"
|
||||
},
|
||||
"gtk3": {
|
||||
"label": "GTK 3",
|
||||
"description": "Write ~/.config/gtk-3.0/gtk.css"
|
||||
},
|
||||
"qt6": {
|
||||
"label": "Qt6ct",
|
||||
"description": "Write ~/.config/qt6ct/colors/noctalia.conf"
|
||||
},
|
||||
"qt5": {
|
||||
"label": "Qt5ct",
|
||||
"description": "Write ~/.config/qt5ct/colors/noctalia.conf"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
"label": "Terminal",
|
||||
"description": "Terminal emulator theming.",
|
||||
"kitty": {
|
||||
"label": "Kitty",
|
||||
"description": "Write ~/.config/kitty/themes/noctalia.conf and reload",
|
||||
"description-missing": "Requires kitty terminal to be installed"
|
||||
},
|
||||
"ghostty": {
|
||||
"label": "Ghostty",
|
||||
"description": "Write ~/.config/ghostty/themes/noctalia and reload",
|
||||
"description-missing": "Requires ghostty terminal to be installed"
|
||||
},
|
||||
"foot": {
|
||||
"label": "Foot",
|
||||
"description": "Write ~/.config/foot/themes/noctalia and reload",
|
||||
"description-missing": "Requires foot terminal to be installed"
|
||||
}
|
||||
},
|
||||
"programs": {
|
||||
"label": "Programs",
|
||||
"description": "Application-specific theming.",
|
||||
"fuzzel": {
|
||||
"label": "Fuzzel",
|
||||
"description": "Write ~/.config/fuzzel/themes/noctalia and reload",
|
||||
"description-missing": "Requires fuzzel launcher to be installed"
|
||||
},
|
||||
"vesktop": {
|
||||
"label": "Vesktop",
|
||||
"description": "Write ~/.config/vesktop/themes/noctalia.theme.css",
|
||||
"description-missing": "Requires vesktop Discord client to be installed"
|
||||
},
|
||||
"pywalfox": {
|
||||
"label": "Pywalfox (Firefox)",
|
||||
"description": "Write ~/.cache/wal/colors.json and run pywalfox update",
|
||||
"description-missing": "Requires pywalfox package to be installed"
|
||||
}
|
||||
},
|
||||
"misc": {
|
||||
"label": "Misc",
|
||||
"description": "Additional configuration options.",
|
||||
"user-templates": {
|
||||
"label": "User templates",
|
||||
"description": "Enable user-defined Matugen config from ~/.config/matugen/config.toml"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"title": "Location",
|
||||
"location": {
|
||||
"section": {
|
||||
"label": "Your location",
|
||||
"description": "Get accurate weather and night light scheduling by setting your location."
|
||||
},
|
||||
"search": {
|
||||
"label": "Search for a location",
|
||||
"description": "e.g., Toronto, ON",
|
||||
"placeholder": "Enter the location name"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
"section": {
|
||||
"label": "Weather",
|
||||
"description": "Choose your preferred temperature unit."
|
||||
},
|
||||
"fahrenheit": {
|
||||
"label": "Display temperature in Fahrenheit (°F)",
|
||||
"description": "Display temperature in Fahrenheit instead of Celsius."
|
||||
}
|
||||
},
|
||||
"date-time": {
|
||||
"section": {
|
||||
"label": "Date & time",
|
||||
"description": "Customize how date and time appear."
|
||||
},
|
||||
"12hour-format": {
|
||||
"label": "Use 12-hour time format on the lock screen",
|
||||
"description": "On for AM/PM format (e.g., 8:00 PM), off for 24-hour format (e.g., 20:00)."
|
||||
},
|
||||
"week-numbers": {
|
||||
"label": "Show week numbers",
|
||||
"description": "Displays the week of the year (e.g., Week 38) in the calendar."
|
||||
}
|
||||
}
|
||||
},
|
||||
"network": {
|
||||
"title": "Network",
|
||||
"section": {
|
||||
"description": "Manage Wi-Fi and Bluetooth connections."
|
||||
},
|
||||
"wifi": {
|
||||
"label": "Enable Wi-Fi"
|
||||
},
|
||||
"bluetooth": {
|
||||
"label": "Enable Bluetooth"
|
||||
}
|
||||
},
|
||||
"screen-recorder": {
|
||||
"title": "Screen recorder",
|
||||
"general": {
|
||||
"section": {
|
||||
"label": "General settings",
|
||||
"description": "Manage screen recording output and content."
|
||||
},
|
||||
"output-folder": {
|
||||
"label": "Output folder",
|
||||
"description": "Folder where screen recordings will be saved.",
|
||||
"tooltip": "Browse for output folder"
|
||||
},
|
||||
"show-cursor": {
|
||||
"label": "Show cursor",
|
||||
"description": "Record mouse cursor in the video."
|
||||
},
|
||||
"select-output-folder": "Select output folder"
|
||||
},
|
||||
"video": {
|
||||
"section": {
|
||||
"label": "Video settings",
|
||||
"description": "Configure video recording options."
|
||||
},
|
||||
"video-source": {
|
||||
"label": "Video source",
|
||||
"description": "Portal is recommended, if you get artifacts try Screen."
|
||||
},
|
||||
"frame-rate": {
|
||||
"label": "Frame rate",
|
||||
"description": "Target frame rate for screen recordings."
|
||||
},
|
||||
"video-quality": {
|
||||
"label": "Video quality",
|
||||
"description": "Higher quality results in larger file sizes."
|
||||
},
|
||||
"video-codec": {
|
||||
"label": "Video codec",
|
||||
"description": "h264 is the most common codec."
|
||||
},
|
||||
"color-range": {
|
||||
"label": "Color range",
|
||||
"description": "Limited is recommended for better compatibility."
|
||||
}
|
||||
},
|
||||
"audio": {
|
||||
"section": {
|
||||
"label": "Audio settings",
|
||||
"description": "Configure audio recording options."
|
||||
},
|
||||
"audio-source": {
|
||||
"label": "Audio source",
|
||||
"description": "Audio source to capture during recording."
|
||||
},
|
||||
"audio-codec": {
|
||||
"label": "Audio codec",
|
||||
"description": "Opus is recommended for best performance and smallest audio size."
|
||||
}
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"title": "About",
|
||||
"noctalia": {
|
||||
"section": {
|
||||
"label": "Noctalia shell",
|
||||
"description": "A sleek and minimal desktop shell thoughtfully crafted for Wayland, built with Quickshell."
|
||||
},
|
||||
"latest-version": "Latest version:",
|
||||
"installed-version": "Installed version:",
|
||||
"download-latest": "Download latest release"
|
||||
},
|
||||
"contributors": {
|
||||
"section": {
|
||||
"label": "Contributors",
|
||||
"description": "Shout-out to our {count} <b>awesome</b> contributor!",
|
||||
"description_plural": "Shout-out to our {count} <b>awesome</b> contributors!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hooks": {
|
||||
"title": "Hooks",
|
||||
"system-hooks": {
|
||||
"section": {
|
||||
"label": "System hooks",
|
||||
"description": "Configure commands to be executed when system events occur."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Enable hooks",
|
||||
"description": "Enable or disable all hook commands."
|
||||
}
|
||||
},
|
||||
"wallpaper-changed": {
|
||||
"label": "Wallpaper changed",
|
||||
"description": "Command to be executed when wallpaper changes.",
|
||||
"placeholder": "e.g., notify-send \"Wallpaper\" \"Changed\""
|
||||
},
|
||||
"theme-changed": {
|
||||
"label": "Theme changed",
|
||||
"description": "Command to be executed when theme toggles between dark and light mode.",
|
||||
"placeholder": "e.g., notify-send \"Theme\" \"Toggled\""
|
||||
},
|
||||
"info": {
|
||||
"command-info": {
|
||||
"label": "Hook Command Information",
|
||||
"description": "• Commands are executed via shell (sh -c)\n• Commands run in background (detached)\n• Test buttons execute with current values"
|
||||
},
|
||||
"parameters": {
|
||||
"label": "Available Parameters",
|
||||
"description": "• Wallpaper Hook: $1 = wallpaper path, $2 = screen name\n• Theme Toggle Hook: $1 = true/false (dark mode state)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Noctalia Shell i18n Checker
|
||||
# Scans for hardcoded strings that need internationalization
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}Noctalia Shell i18n Checker${NC}"
|
||||
echo -e "${BLUE}===========================${NC}"
|
||||
|
||||
files_with_issues=0
|
||||
|
||||
# Check a single file
|
||||
check_file() {
|
||||
local file="$1"
|
||||
local issues=$(grep -n -E '(label|text|title|description|tooltip|placeholder):\s*"[^"]{3,}"' "$file" | grep -v 'I18n.tr')
|
||||
|
||||
if [[ -n "$issues" ]]; then
|
||||
echo -e "${YELLOW}$file${NC}"
|
||||
echo "$issues" | sed 's/^/ /'
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
echo "Scanning QML files..."
|
||||
echo ""
|
||||
|
||||
# Find and check QML files
|
||||
qml_files=$(find . -name "*.qml" -type f \
|
||||
! -path "./Assets/*" \
|
||||
! -path "./Bin/*" \
|
||||
! -path "./Shaders/*" \
|
||||
! -path "./Helpers/*" \
|
||||
! -path "./.git/*")
|
||||
|
||||
total_files=$(echo "$qml_files" | wc -l)
|
||||
|
||||
for file in $qml_files; do
|
||||
if ! check_file "$file"; then
|
||||
((files_with_issues++))
|
||||
fi
|
||||
done
|
||||
|
||||
# Summary
|
||||
echo -e "${BLUE}Summary${NC}"
|
||||
echo -e "${BLUE}=======${NC}"
|
||||
echo -e "Files scanned: $total_files"
|
||||
echo -e "Files needing i18n: $files_with_issues"
|
||||
|
||||
if [[ $files_with_issues -eq 0 ]]; then
|
||||
echo -e "${GREEN}All files use I18n.tr() properly!${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}$files_with_issues files have potential hardcoded strings${NC}"
|
||||
fi
|
||||
+109
-11
@@ -13,7 +13,7 @@ Singleton {
|
||||
|
||||
property bool isLoaded: false
|
||||
property string langCode: ""
|
||||
readonly property var availableLanguages: ["en", "fr"]
|
||||
property var availableLanguages: []
|
||||
property var translations: ({})
|
||||
property var fallbackTranslations: ({})
|
||||
|
||||
@@ -21,6 +21,29 @@ Singleton {
|
||||
signal languageChanged(string newLanguage)
|
||||
signal translationsLoaded
|
||||
|
||||
// Process to list directory contents
|
||||
property Process directoryScanner: Process {
|
||||
id: directoryProcess
|
||||
command: ["ls", `${Quickshell.shellDir}/Assets/Translations/`]
|
||||
running: false
|
||||
|
||||
stdout: StdioCollector {
|
||||
id: stdoutCollector
|
||||
}
|
||||
|
||||
onExited: function (exitCode, exitStatus) {
|
||||
if (exitCode === 0) {
|
||||
var output = stdoutCollector.text || ""
|
||||
parseDirectoryListing(output)
|
||||
} else {
|
||||
Logger.error("I18n", `Failed to scan translation directory`)
|
||||
// Fallback to default languages
|
||||
availableLanguages = ["en"]
|
||||
detectLanguage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FileView to load translation files
|
||||
property FileView translationFile: FileView {
|
||||
id: fileView
|
||||
@@ -44,7 +67,7 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// FileView to load translation files
|
||||
// FileView to load fallback translation files
|
||||
property FileView fallbackTranslationFile: FileView {
|
||||
id: fallbackFileView
|
||||
watchChanges: true
|
||||
@@ -66,15 +89,84 @@ Singleton {
|
||||
// -------------------------------------------
|
||||
function init() {
|
||||
Logger.log("I18n", "Service started")
|
||||
detectLanguage()
|
||||
scanAvailableLanguages()
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
function scanAvailableLanguages() {
|
||||
Logger.log("I18n", "Scanning for available translation files...")
|
||||
directoryScanner.running = true
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
function parseDirectoryListing(output) {
|
||||
var languages = []
|
||||
|
||||
try {
|
||||
if (!output || output.trim() === "") {
|
||||
Logger.warn("I18n", "Empty directory listing output")
|
||||
availableLanguages = ["en"]
|
||||
detectLanguage()
|
||||
return
|
||||
}
|
||||
|
||||
const entries = output.trim().split('\n')
|
||||
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
const entry = entries[i].trim()
|
||||
if (entry && entry.endsWith('.json')) {
|
||||
// Extract language code from filename (e.g., "en.json" -> "en")
|
||||
const langCode = entry.substring(0, entry.lastIndexOf('.json'))
|
||||
if (langCode.length >= 2 && langCode.length <= 5) {
|
||||
// Basic validation for language codes
|
||||
languages.push(langCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort languages alphabetically, but ensure "en" comes first if available
|
||||
languages.sort()
|
||||
const enIndex = languages.indexOf("en")
|
||||
if (enIndex > 0) {
|
||||
languages.splice(enIndex, 1)
|
||||
languages.unshift("en")
|
||||
}
|
||||
|
||||
if (languages.length === 0) {
|
||||
Logger.warn("I18n", "No translation files found, using fallback")
|
||||
languages = ["en"] // Fallback
|
||||
}
|
||||
|
||||
availableLanguages = languages
|
||||
Logger.log("I18n", `Found ${languages.length} available languages: ${languages.join(', ')}`)
|
||||
|
||||
// Detect language after scanning
|
||||
detectLanguage()
|
||||
} catch (e) {
|
||||
Logger.error("I18n", `Failed to parse directory listing: ${e}`)
|
||||
// Fallback to default languages
|
||||
availableLanguages = ["en"]
|
||||
detectLanguage()
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
function detectLanguage() {
|
||||
Logger.log("I18n", `detectLanguage() called. Available languages: [${availableLanguages.join(', ')}]`)
|
||||
|
||||
if (availableLanguages.length === 0) {
|
||||
Logger.warn("I18n", "No available languages found")
|
||||
return
|
||||
}
|
||||
|
||||
if (debug && debugForceLanguage !== "") {
|
||||
setLanguage(debugForceLanguage)
|
||||
return
|
||||
Logger.log("I18n", `Debug mode: forcing language to "${debugForceLanguage}"`)
|
||||
if (availableLanguages.includes(debugForceLanguage)) {
|
||||
setLanguage(debugForceLanguage)
|
||||
return
|
||||
} else {
|
||||
Logger.warn("I18n", `Debug language "${debugForceLanguage}" not available in [${availableLanguages.join(', ')}]`)
|
||||
}
|
||||
}
|
||||
|
||||
// Detect user's favorite locale - languages
|
||||
@@ -86,8 +178,9 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to english
|
||||
setLanguage("en")
|
||||
// Fallback to first available language (preferably "en" if available)
|
||||
const fallbackLang = availableLanguages.includes("en") ? "en" : availableLanguages[0]
|
||||
setLanguage(fallbackLang)
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
@@ -97,6 +190,8 @@ Singleton {
|
||||
Logger.log("I18n", `Language set to "${langCode}"`)
|
||||
languageChanged(langCode)
|
||||
loadTranslations()
|
||||
} else if (!availableLanguages.includes(newLangCode)) {
|
||||
Logger.warn("I18n", `Language "${newLangCode}" is not available`)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,8 +205,8 @@ Singleton {
|
||||
isLoaded = false
|
||||
Logger.log("I18n", `Loading translations from: ${filePath}`)
|
||||
|
||||
// Only load fallback translations if we are not using enlgish
|
||||
if (langCode !== "en") {
|
||||
// Only load fallback translations if we are not using english and english is available
|
||||
if (langCode !== "en" && availableLanguages.includes("en")) {
|
||||
fallbackFileView.path = `file://${Quickshell.shellDir}/Assets/Translations/en.json`
|
||||
}
|
||||
}
|
||||
@@ -194,7 +289,7 @@ Singleton {
|
||||
}
|
||||
|
||||
// Fallback to english if not found
|
||||
if (notFound) {
|
||||
if (notFound && availableLanguages.includes("en") && langCode !== "en") {
|
||||
value = fallbackTranslations
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
if (value && typeof value === "object" && keys[i] in value) {
|
||||
@@ -207,6 +302,9 @@ Singleton {
|
||||
|
||||
// Make untranslated string easy to spot
|
||||
value = `<i>${value}</i>`
|
||||
} else if (notFound) {
|
||||
// No fallback available
|
||||
return `## ${key} ##`
|
||||
}
|
||||
|
||||
if (typeof value !== "string") {
|
||||
@@ -247,6 +345,6 @@ Singleton {
|
||||
finalInterpolations[prop] = interpolations[prop]
|
||||
}
|
||||
|
||||
return t(pluralKey, defaultValue, finalInterpolations)
|
||||
return tr(pluralKey, finalInterpolations)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,67 +116,67 @@ NPanel {
|
||||
"source": generalTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Bar,
|
||||
"label": "Bar",
|
||||
"label": "settings.bar.title",
|
||||
"icon": "settings-bar",
|
||||
"source": barTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Dock,
|
||||
"label": "Dock",
|
||||
"label": "settings.dock.title",
|
||||
"icon": "settings-dock",
|
||||
"source": dockTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Launcher,
|
||||
"label": "Launcher",
|
||||
"label": "settings.launcher.title",
|
||||
"icon": "settings-launcher",
|
||||
"source": launcherTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Audio,
|
||||
"label": "Audio",
|
||||
"label": "settings.audio.title",
|
||||
"icon": "settings-audio",
|
||||
"source": audioTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Display,
|
||||
"label": "Display",
|
||||
"label": "settings.display.title",
|
||||
"icon": "settings-display",
|
||||
"source": displayTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Notifications,
|
||||
"label": "Notifications",
|
||||
"label": "settings.notifications.title",
|
||||
"icon": "settings-notifications",
|
||||
"source": notificationsTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Network,
|
||||
"label": "Network",
|
||||
"label": "settings.network.title",
|
||||
"icon": "settings-network",
|
||||
"source": networkTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Location,
|
||||
"label": "Location",
|
||||
"label": "settings.location.title",
|
||||
"icon": "settings-location",
|
||||
"source": locationTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.ColorScheme,
|
||||
"label": "Color scheme",
|
||||
"label": "settings.color-scheme.title",
|
||||
"icon": "settings-color-scheme",
|
||||
"source": colorSchemeTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Wallpaper,
|
||||
"label": "Wallpaper",
|
||||
"label": "settings.wallpaper.title",
|
||||
"icon": "settings-wallpaper",
|
||||
"source": wallpaperTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.ScreenRecorder,
|
||||
"label": "Screen recorder",
|
||||
"label": "settings.screen-recorder.title",
|
||||
"icon": "settings-screen-recorder",
|
||||
"source": screenRecorderTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.Hooks,
|
||||
"label": "Hooks",
|
||||
"label": "settings.hooks.title",
|
||||
"icon": "settings-hooks",
|
||||
"source": hooksTab
|
||||
}, {
|
||||
"id": SettingsPanel.Tab.About,
|
||||
"label": "About",
|
||||
"label": "settings.about.title",
|
||||
"icon": "settings-about",
|
||||
"source": aboutTab
|
||||
}]
|
||||
|
||||
@@ -17,8 +17,8 @@ ColumnLayout {
|
||||
property var contributors: GitHubService.contributors
|
||||
|
||||
NHeader {
|
||||
label: "Noctalia shell"
|
||||
description: "A sleek and minimal desktop shell thoughtfully crafted for Wayland, built with Quickshell."
|
||||
label: I18n.tr("settings.about.noctalia.section.label")
|
||||
description: I18n.tr("settings.about.noctalia.section.description")
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
@@ -31,7 +31,7 @@ ColumnLayout {
|
||||
columnSpacing: Style.marginS * scaling
|
||||
|
||||
NText {
|
||||
text: "Latest version:"
|
||||
text: I18n.tr("settings.about.noctalia.latest-version")
|
||||
color: Color.mOnSurface
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NText {
|
||||
text: "Installed version:"
|
||||
text: I18n.tr("settings.about.noctalia.installed-version")
|
||||
color: Color.mOnSurface
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ ColumnLayout {
|
||||
|
||||
NText {
|
||||
id: updateText
|
||||
text: "Download latest release"
|
||||
text: I18n.tr("settings.about.noctalia.download-latest")
|
||||
font.pointSize: Style.fontSizeL * scaling
|
||||
color: updateArea.containsMouse ? Color.mSurface : Color.mPrimary
|
||||
}
|
||||
@@ -123,8 +123,12 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NHeader {
|
||||
label: "Contributors"
|
||||
description: `Shout-out to our ${root.contributors.length} <b>awesome</b> contributors!`
|
||||
label: I18n.tr("settings.about.contributors.section.label")
|
||||
description: root.contributors.length === 1 ? I18n.tr("settings.about.contributors.section.description", {
|
||||
"count": root.contributors.length
|
||||
}) : I18n.tr("settings.about.contributors.section.description_plural", {
|
||||
"count": root.contributors.length
|
||||
})
|
||||
}
|
||||
|
||||
GridView {
|
||||
|
||||
@@ -11,8 +11,8 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Volumes"
|
||||
description: "Adjust volume controls and audio levels."
|
||||
label: I18n.tr("settings.audio.volumes.section.label")
|
||||
description: I18n.tr("settings.audio.volumes.section.description")
|
||||
}
|
||||
|
||||
property real localVolume: AudioService.volume
|
||||
@@ -30,8 +30,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Output volume"
|
||||
description: "System-wide volume level."
|
||||
label: I18n.tr("settings.audio.volumes.output-volume.label")
|
||||
description: I18n.tr("settings.audio.volumes.output-volume.description")
|
||||
}
|
||||
|
||||
// Pipewire seems a bit finicky, if we spam too many volume changes it breaks easily
|
||||
@@ -67,8 +67,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NToggle {
|
||||
label: "Mute audio output"
|
||||
description: "Mute the system's main audio output."
|
||||
label: I18n.tr("settings.audio.volumes.mute-output.label")
|
||||
description: I18n.tr("settings.audio.volumes.mute-output.description")
|
||||
checked: AudioService.muted
|
||||
onToggled: checked => {
|
||||
if (AudioService.sink && AudioService.sink.audio) {
|
||||
@@ -84,8 +84,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Input volume"
|
||||
description: "Microphone input volume level."
|
||||
label: I18n.tr("settings.audio.volumes.input-volume.label")
|
||||
description: I18n.tr("settings.audio.volumes.input-volume.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -105,8 +105,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NToggle {
|
||||
label: "Mute audio input"
|
||||
description: "Mute the default audio input (microphone)."
|
||||
label: I18n.tr("settings.audio.volumes.mute-input.label")
|
||||
description: I18n.tr("settings.audio.volumes.mute-input.description")
|
||||
checked: AudioService.inputMuted
|
||||
onToggled: checked => AudioService.setInputMuted(checked)
|
||||
}
|
||||
@@ -119,8 +119,8 @@ ColumnLayout {
|
||||
|
||||
NSpinBox {
|
||||
Layout.fillWidth: true
|
||||
label: "Volume step size"
|
||||
description: "Adjust the step size for volume changes (scroll wheel, keyboard shortcuts)."
|
||||
label: I18n.tr("settings.audio.volumes.step-size.label")
|
||||
description: I18n.tr("settings.audio.volumes.step-size.description")
|
||||
minimum: 1
|
||||
maximum: 25
|
||||
value: Settings.data.audio.volumeStep
|
||||
@@ -141,8 +141,8 @@ ColumnLayout {
|
||||
spacing: Style.marginS * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Audio devices"
|
||||
description: "Choose your audio input and output devices."
|
||||
label: I18n.tr("settings.audio.devices.section.label")
|
||||
description: I18n.tr("settings.audio.devices.section.description")
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
@@ -157,8 +157,8 @@ ColumnLayout {
|
||||
Layout.bottomMargin: Style.marginL * scaling
|
||||
|
||||
NLabel {
|
||||
label: "Output device"
|
||||
description: "Select the desired audio output device."
|
||||
label: I18n.tr("settings.audio.devices.output-device.label")
|
||||
description: I18n.tr("settings.audio.devices.output-device.description")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
@@ -184,8 +184,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Input device"
|
||||
description: "Select the desired audio input device."
|
||||
label: I18n.tr("settings.audio.devices.input-device.label")
|
||||
description: I18n.tr("settings.audio.devices.input-device.description")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
@@ -213,15 +213,15 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Media players"
|
||||
description: "Set your preferred and ignored media applications."
|
||||
label: I18n.tr("settings.audio.media.section.label")
|
||||
description: I18n.tr("settings.audio.media.section.description")
|
||||
}
|
||||
|
||||
// Preferred player
|
||||
NTextInput {
|
||||
label: "Primary player"
|
||||
description: "Enter a keyword to identify your main player."
|
||||
placeholderText: "e.g. spotify, vlc, mpv"
|
||||
label: I18n.tr("settings.audio.media.primary-player.label")
|
||||
description: I18n.tr("settings.audio.media.primary-player.description")
|
||||
placeholderText: I18n.tr("settings.audio.media.primary-player.placeholder")
|
||||
text: Settings.data.audio.preferredPlayer
|
||||
onTextChanged: {
|
||||
Settings.data.audio.preferredPlayer = text
|
||||
@@ -240,9 +240,9 @@ ColumnLayout {
|
||||
|
||||
NTextInput {
|
||||
id: blacklistInput
|
||||
label: "Excluded player"
|
||||
description: "Add keywords for players you want the system to ignore. Each keyword should be on a new line."
|
||||
placeholderText: "type substring and press +"
|
||||
label: I18n.tr("settings.audio.media.excluded-player.label")
|
||||
description: I18n.tr("settings.audio.media.excluded-player.description")
|
||||
placeholderText: I18n.tr("settings.audio.media.excluded-player.placeholder")
|
||||
}
|
||||
|
||||
// Button aligned to the center of the actual input field
|
||||
@@ -321,30 +321,11 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Divider
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
// AudioService Visualizer Category
|
||||
ColumnLayout {
|
||||
spacing: Style.marginS * scaling
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Audio visualizer"
|
||||
description: "Customize visual effects that respond to audio playback."
|
||||
}
|
||||
|
||||
// AudioService Visualizer section
|
||||
NComboBox {
|
||||
id: audioVisualizerCombo
|
||||
label: "Visualization type"
|
||||
description: "Choose a visualization type for media playback"
|
||||
label: I18n.tr("settings.audio.media.visualizer-type.label")
|
||||
description: I18n.tr("settings.audio.media.visualizer-type.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "none"
|
||||
@@ -368,8 +349,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
label: "Frame rate"
|
||||
description: "Higher rates are smoother but use more resources."
|
||||
label: I18n.tr("settings.audio.media.frame-rate.label")
|
||||
description: I18n.tr("settings.audio.media.frame-rate.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "30"
|
||||
@@ -404,7 +385,7 @@ ColumnLayout {
|
||||
onSelected: key => Settings.data.audio.cavaFrameRate = key
|
||||
}
|
||||
}
|
||||
// Divider
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
|
||||
@@ -41,14 +41,14 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NHeader {
|
||||
label: "settings.appearance"
|
||||
description: "Customize the bar's appearance and position."
|
||||
label: I18n.tr("settings.bar.appearance.section.label")
|
||||
description: I18n.tr("settings.bar.appearance.section.description")
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
Layout.fillWidth: true
|
||||
label: "Bar position"
|
||||
description: "Choose where to place the bar on the screen."
|
||||
label: I18n.tr("settings.bar.appearance.position.label")
|
||||
description: I18n.tr("settings.bar.appearance.position.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "top"
|
||||
@@ -73,8 +73,8 @@ ColumnLayout {
|
||||
|
||||
NComboBox {
|
||||
Layout.fillWidth: true
|
||||
label: "Bar density"
|
||||
description: "Adjust the bar's padding for a compact or spacious look."
|
||||
label: I18n.tr("settings.bar.appearance.density.label")
|
||||
description: I18n.tr("settings.bar.appearance.density.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "compact"
|
||||
@@ -98,8 +98,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Background opacity"
|
||||
description: "Adjust the background opacity of the bar."
|
||||
label: I18n.tr("settings.bar.appearance.background-opacity.label")
|
||||
description: I18n.tr("settings.bar.appearance.background-opacity.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -115,16 +115,16 @@ ColumnLayout {
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: "Show capsule"
|
||||
description: "Show widget backgrounds."
|
||||
label: I18n.tr("settings.bar.appearance.show-capsule.label")
|
||||
description: I18n.tr("settings.bar.appearance.show-capsule.description")
|
||||
checked: Settings.data.bar.showCapsule
|
||||
onToggled: checked => Settings.data.bar.showCapsule = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: "Floating bar"
|
||||
description: "Displays the bar as a floating 'pill'. Note: This will move the screen corners to the edges."
|
||||
label: I18n.tr("settings.bar.appearance.floating.label")
|
||||
description: I18n.tr("settings.bar.appearance.floating.description")
|
||||
checked: Settings.data.bar.floating
|
||||
onToggled: checked => Settings.data.bar.floating = checked
|
||||
}
|
||||
@@ -136,8 +136,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Margins"
|
||||
description: "Adjust the margins around the floating bar."
|
||||
label: I18n.tr("settings.bar.appearance.margins.label")
|
||||
description: I18n.tr("settings.bar.appearance.margins.description")
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
@@ -148,7 +148,7 @@ ColumnLayout {
|
||||
spacing: Style.marginXXS * scaling
|
||||
|
||||
NText {
|
||||
text: "Vertical"
|
||||
text: I18n.tr("settings.bar.appearance.margins.vertical")
|
||||
font.pointSize: Style.fontSizeXS * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
}
|
||||
@@ -168,7 +168,7 @@ ColumnLayout {
|
||||
spacing: Style.marginXXS * scaling
|
||||
|
||||
NText {
|
||||
text: "Horizontal"
|
||||
text: I18n.tr("settings.bar.appearance.margins.horizontal")
|
||||
font.pointSize: Style.fontSizeXS * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
}
|
||||
@@ -198,8 +198,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Widgets positioning"
|
||||
description: "Drag and drop widgets to reorder them within each section, or use the add/remove buttons to manage widgets."
|
||||
label: I18n.tr("settings.bar.widgets.section.label")
|
||||
description: I18n.tr("settings.bar.widgets.section.description")
|
||||
}
|
||||
|
||||
// Bar Sections
|
||||
@@ -268,8 +268,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Monitor display"
|
||||
description: "Show bar on specific monitors. Defaults to all if none are chosen."
|
||||
label: I18n.tr("settings.bar.monitors.section.label")
|
||||
description: I18n.tr("settings.bar.monitors.section.description")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
|
||||
@@ -106,14 +106,14 @@ ColumnLayout {
|
||||
|
||||
// Main Toggles - Dark Mode / Matugen
|
||||
NHeader {
|
||||
label: "Color source"
|
||||
description: "Main settings for Noctalia's colors."
|
||||
label: I18n.tr("settings.color-scheme.color-source.section.label")
|
||||
description: I18n.tr("settings.color-scheme.color-source.section.description")
|
||||
}
|
||||
|
||||
// Dark Mode Toggle (affects both Matugen and predefined schemes that provide variants)
|
||||
NToggle {
|
||||
label: "Dark mode"
|
||||
description: "Switches to a darker theme for easier viewing at night."
|
||||
label: I18n.tr("settings.color-scheme.color-source.dark-mode.label")
|
||||
description: I18n.tr("settings.color-scheme.color-source.dark-mode.description")
|
||||
checked: Settings.data.colorSchemes.darkMode
|
||||
enabled: true
|
||||
onToggled: checked => Settings.data.colorSchemes.darkMode = checked
|
||||
@@ -121,8 +121,8 @@ ColumnLayout {
|
||||
|
||||
// Use Matugen
|
||||
NToggle {
|
||||
label: "Enable Matugen"
|
||||
description: "Automatically generate colors based on your active wallpaper."
|
||||
label: I18n.tr("settings.color-scheme.color-source.enable-matugen.label")
|
||||
description: I18n.tr("settings.color-scheme.color-source.enable-matugen.description")
|
||||
checked: Settings.data.colorSchemes.useWallpaperColors
|
||||
onToggled: checked => {
|
||||
if (checked) {
|
||||
@@ -152,8 +152,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Predefined color schemes"
|
||||
description: "To use these color schemes, you must turn off Matugen. With Matugen enabled, colors are automatically generated from your wallpaper."
|
||||
label: I18n.tr("settings.color-scheme.predefined.section.label")
|
||||
description: I18n.tr("settings.color-scheme.predefined.section.description")
|
||||
}
|
||||
|
||||
// Color Schemes Grid
|
||||
@@ -324,16 +324,21 @@ ColumnLayout {
|
||||
visible: Settings.data.colorSchemes.useWallpaperColors
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: I18n.tr("settings.color-scheme.matugen.section.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.section.description")
|
||||
}
|
||||
|
||||
// UI Components
|
||||
NCollapsible {
|
||||
Layout.fillWidth: true
|
||||
label: "UI"
|
||||
description: "Desktop environment and UI toolkit theming."
|
||||
label: I18n.tr("settings.color-scheme.matugen.ui.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.ui.description")
|
||||
defaultExpanded: false
|
||||
|
||||
NCheckbox {
|
||||
label: "GTK 4 (libadwaita)"
|
||||
description: "Write ~/.config/gtk-4.0/gtk.css"
|
||||
label: I18n.tr("settings.color-scheme.matugen.ui.gtk4.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.ui.gtk4.description")
|
||||
checked: Settings.data.matugen.gtk4
|
||||
onToggled: checked => {
|
||||
Settings.data.matugen.gtk4 = checked
|
||||
@@ -343,8 +348,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "GTK 3"
|
||||
description: "Write ~/.config/gtk-3.0/gtk.css"
|
||||
label: I18n.tr("settings.color-scheme.matugen.ui.gtk3.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.ui.gtk3.description")
|
||||
checked: Settings.data.matugen.gtk3
|
||||
onToggled: checked => {
|
||||
Settings.data.matugen.gtk3 = checked
|
||||
@@ -354,8 +359,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "Qt6ct"
|
||||
description: "Write ~/.config/qt6ct/colors/noctalia.conf"
|
||||
label: I18n.tr("settings.color-scheme.matugen.ui.qt6.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.ui.qt6.description")
|
||||
checked: Settings.data.matugen.qt6
|
||||
onToggled: checked => {
|
||||
Settings.data.matugen.qt6 = checked
|
||||
@@ -365,8 +370,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "Qt5ct"
|
||||
description: "Write ~/.config/qt5ct/colors/noctalia.conf"
|
||||
label: I18n.tr("settings.color-scheme.matugen.ui.qt5.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.ui.qt5.description")
|
||||
checked: Settings.data.matugen.qt5
|
||||
onToggled: checked => {
|
||||
Settings.data.matugen.qt5 = checked
|
||||
@@ -379,13 +384,13 @@ ColumnLayout {
|
||||
// Terminal Emulators
|
||||
NCollapsible {
|
||||
Layout.fillWidth: true
|
||||
label: "Terminal"
|
||||
description: "Terminal emulator theming."
|
||||
label: I18n.tr("settings.color-scheme.matugen.terminal.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.terminal.description")
|
||||
defaultExpanded: false
|
||||
|
||||
NCheckbox {
|
||||
label: "Kitty"
|
||||
description: ProgramCheckerService.kittyAvailable ? "Write ~/.config/kitty/themes/noctalia.conf and reload" : "Requires kitty terminal to be installed"
|
||||
label: I18n.tr("settings.color-scheme.matugen.terminal.kitty.label")
|
||||
description: ProgramCheckerService.kittyAvailable ? I18n.tr("settings.color-scheme.matugen.terminal.kitty.description") : I18n.tr("settings.color-scheme.matugen.terminal.kitty.description-missing")
|
||||
checked: Settings.data.matugen.kitty
|
||||
enabled: ProgramCheckerService.kittyAvailable
|
||||
opacity: ProgramCheckerService.kittyAvailable ? 1.0 : 0.6
|
||||
@@ -399,8 +404,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "Ghostty"
|
||||
description: ProgramCheckerService.ghosttyAvailable ? "Write ~/.config/ghostty/themes/noctalia and reload" : "Requires ghostty terminal to be installed"
|
||||
label: I18n.tr("settings.color-scheme.matugen.terminal.ghostty.label")
|
||||
description: ProgramCheckerService.ghosttyAvailable ? I18n.tr("settings.color-scheme.matugen.terminal.ghostty.description") : I18n.tr("settings.color-scheme.matugen.terminal.ghostty.description-missing")
|
||||
checked: Settings.data.matugen.ghostty
|
||||
enabled: ProgramCheckerService.ghosttyAvailable
|
||||
opacity: ProgramCheckerService.ghosttyAvailable ? 1.0 : 0.6
|
||||
@@ -414,8 +419,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "Foot"
|
||||
description: ProgramCheckerService.footAvailable ? "Write ~/.config/foot/themes/noctalia and reload" : "Requires foot terminal to be installed"
|
||||
label: I18n.tr("settings.color-scheme.matugen.terminal.foot.label")
|
||||
description: ProgramCheckerService.footAvailable ? I18n.tr("settings.color-scheme.matugen.terminal.foot.description") : I18n.tr("settings.color-scheme.matugen.terminal.foot.description-missing")
|
||||
checked: Settings.data.matugen.foot
|
||||
enabled: ProgramCheckerService.footAvailable
|
||||
opacity: ProgramCheckerService.footAvailable ? 1.0 : 0.6
|
||||
@@ -432,13 +437,13 @@ ColumnLayout {
|
||||
// Applications
|
||||
NCollapsible {
|
||||
Layout.fillWidth: true
|
||||
label: "Programs"
|
||||
description: "Application-specific theming."
|
||||
label: I18n.tr("settings.color-scheme.matugen.programs.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.programs.description")
|
||||
defaultExpanded: false
|
||||
|
||||
NCheckbox {
|
||||
label: "Fuzzel"
|
||||
description: ProgramCheckerService.fuzzelAvailable ? "Write ~/.config/fuzzel/themes/noctalia and reload" : "Requires fuzzel launcher to be installed"
|
||||
label: I18n.tr("settings.color-scheme.matugen.programs.fuzzel.label")
|
||||
description: ProgramCheckerService.fuzzelAvailable ? I18n.tr("settings.color-scheme.matugen.programs.fuzzel.description") : I18n.tr("settings.color-scheme.matugen.programs.fuzzel.description-missing")
|
||||
checked: Settings.data.matugen.fuzzel
|
||||
enabled: ProgramCheckerService.fuzzelAvailable
|
||||
opacity: ProgramCheckerService.fuzzelAvailable ? 1.0 : 0.6
|
||||
@@ -452,8 +457,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "Vesktop"
|
||||
description: ProgramCheckerService.vesktopAvailable ? "Write ~/.config/vesktop/themes/noctalia.theme.css" : "Requires vesktop Discord client to be installed"
|
||||
label: I18n.tr("settings.color-scheme.matugen.programs.vesktop.label")
|
||||
description: ProgramCheckerService.vesktopAvailable ? I18n.tr("settings.color-scheme.matugen.programs.vesktop.description") : I18n.tr("settings.color-scheme.matugen.programs.vesktop.description-missing")
|
||||
checked: Settings.data.matugen.vesktop
|
||||
enabled: ProgramCheckerService.vesktopAvailable
|
||||
opacity: ProgramCheckerService.vesktopAvailable ? 1.0 : 0.6
|
||||
@@ -467,8 +472,8 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NCheckbox {
|
||||
label: "Pywalfox (Firefox)"
|
||||
description: ProgramCheckerService.pywalfoxAvailable ? "Write ~/.cache/wal/colors.json and run pywalfox update" : "Requires pywalfox package to be installed"
|
||||
label: I18n.tr("settings.color-scheme.matugen.programs.pywalfox.label")
|
||||
description: ProgramCheckerService.pywalfoxAvailable ? I18n.tr("settings.color-scheme.matugen.programs.pywalfox.description") : I18n.tr("settings.color-scheme.matugen.programs.pywalfox.description-missing")
|
||||
checked: Settings.data.matugen.pywalfox
|
||||
enabled: ProgramCheckerService.pywalfoxAvailable
|
||||
opacity: ProgramCheckerService.pywalfoxAvailable ? 1.0 : 0.6
|
||||
@@ -485,13 +490,13 @@ ColumnLayout {
|
||||
// Miscellaneous
|
||||
NCollapsible {
|
||||
Layout.fillWidth: true
|
||||
label: "Misc"
|
||||
description: "Additional configuration options."
|
||||
label: I18n.tr("settings.color-scheme.matugen.misc.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.misc.description")
|
||||
defaultExpanded: false
|
||||
|
||||
NCheckbox {
|
||||
label: "User templates"
|
||||
description: "Enable user-defined Matugen config from ~/.config/matugen/config.toml"
|
||||
label: I18n.tr("settings.color-scheme.matugen.misc.user-templates.label")
|
||||
description: I18n.tr("settings.color-scheme.matugen.misc.user-templates.description")
|
||||
checked: Settings.data.matugen.enableUserTemplates
|
||||
onToggled: checked => {
|
||||
Settings.data.matugen.enableUserTemplates = checked
|
||||
|
||||
@@ -52,8 +52,8 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Per-monitor settings"
|
||||
description: "Adjust scaling and brightness for each display."
|
||||
label: I18n.tr("settings.display.monitors.section.label")
|
||||
description: I18n.tr("settings.display.monitors.section.description")
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
@@ -103,7 +103,7 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NText {
|
||||
text: "Scale"
|
||||
text: I18n.tr("settings.display.monitors.scale")
|
||||
Layout.preferredWidth: 80 * scaling
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ ColumnLayout {
|
||||
NIconButton {
|
||||
icon: "refresh"
|
||||
baseSize: Style.baseWidgetSize * 0.9
|
||||
tooltipText: "Reset scaling"
|
||||
tooltipText: I18n.tr("settings.display.monitors.reset-scaling")
|
||||
onClicked: ScalingService.setScreenScale(modelData, 1.0)
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
@@ -146,7 +146,7 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NText {
|
||||
text: "Brightness"
|
||||
text: I18n.tr("settings.display.monitors.brightness")
|
||||
Layout.preferredWidth: 80 * scaling
|
||||
}
|
||||
|
||||
@@ -180,24 +180,6 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
// Brightness Section
|
||||
ColumnLayout {
|
||||
spacing: Style.marginS * scaling
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Brightness"
|
||||
description: "Adjust brightness related settings."
|
||||
}
|
||||
|
||||
// Brightness Step Section
|
||||
ColumnLayout {
|
||||
spacing: Style.marginS * scaling
|
||||
@@ -205,8 +187,8 @@ ColumnLayout {
|
||||
|
||||
NSpinBox {
|
||||
Layout.fillWidth: true
|
||||
label: "Brightness step size"
|
||||
description: "Adjust the step size for brightness changes (scroll wheel and keyboard shortcuts)."
|
||||
label: I18n.tr("settings.display.monitors.brightness-step.label")
|
||||
description: I18n.tr("settings.display.monitors.brightness-step.description")
|
||||
minimum: 1
|
||||
maximum: 50
|
||||
value: Settings.data.brightness.brightnessStep
|
||||
@@ -229,14 +211,14 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Night light"
|
||||
description: "Reduce blue light emission to help you sleep better and reduce eye strain."
|
||||
label: I18n.tr("settings.display.night-light.section.label")
|
||||
description: I18n.tr("settings.display.night-light.section.description")
|
||||
}
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Enable night light"
|
||||
description: "Apply a warm color filter to reduce blue light emission."
|
||||
label: I18n.tr("settings.display.night-light.enable.label")
|
||||
description: I18n.tr("settings.display.night-light.enable.description")
|
||||
checked: Settings.data.nightLight.enabled
|
||||
onToggled: checked => {
|
||||
if (checked) {
|
||||
@@ -257,8 +239,8 @@ ColumnLayout {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
NLabel {
|
||||
label: "Color temperature"
|
||||
description: "Set the color warmth for nighttime and daytime."
|
||||
label: I18n.tr("settings.display.night-light.temperature.label")
|
||||
description: I18n.tr("settings.display.night-light.temperature.description")
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
@@ -269,7 +251,7 @@ ColumnLayout {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
NText {
|
||||
text: "Night"
|
||||
text: I18n.tr("settings.display.night-light.temperature.night")
|
||||
font.pointSize: Style.fontSizeM * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
@@ -291,7 +273,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NText {
|
||||
text: "Day"
|
||||
text: I18n.tr("settings.display.night-light.temperature.day")
|
||||
font.pointSize: Style.fontSizeM * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
@@ -314,8 +296,10 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Automatic scheduling"
|
||||
description: `Based on the sunset and sunrise time in <i>${LocationService.stableName}</i> - recommended.`
|
||||
label: I18n.tr("settings.display.night-light.auto-schedule.label")
|
||||
description: I18n.tr("settings.display.night-light.auto-schedule.description", {
|
||||
"location": LocationService.stableName
|
||||
})
|
||||
checked: Settings.data.nightLight.autoSchedule
|
||||
onToggled: checked => Settings.data.nightLight.autoSchedule = checked
|
||||
visible: Settings.data.nightLight.enabled
|
||||
@@ -327,8 +311,8 @@ ColumnLayout {
|
||||
visible: Settings.data.nightLight.enabled && !Settings.data.nightLight.autoSchedule && !Settings.data.nightLight.forced
|
||||
|
||||
NLabel {
|
||||
label: "Manual scheduling"
|
||||
description: "Set custom times for sunrise and sunset."
|
||||
label: I18n.tr("settings.display.night-light.manual-schedule.label")
|
||||
description: I18n.tr("settings.display.night-light.manual-schedule.description")
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
@@ -336,7 +320,7 @@ ColumnLayout {
|
||||
spacing: Style.marginS * scaling
|
||||
|
||||
NText {
|
||||
text: "Sunrise time"
|
||||
text: I18n.tr("settings.display.night-light.manual-schedule.sunrise")
|
||||
font.pointSize: Style.fontSizeM * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
}
|
||||
@@ -344,7 +328,7 @@ ColumnLayout {
|
||||
NComboBox {
|
||||
model: timeOptions
|
||||
currentKey: Settings.data.nightLight.manualSunrise
|
||||
placeholder: "Select start time"
|
||||
placeholder: I18n.tr("settings.display.night-light.manual-schedule.select-start")
|
||||
onSelected: key => Settings.data.nightLight.manualSunrise = key
|
||||
minimumWidth: 120 * scaling
|
||||
}
|
||||
@@ -354,7 +338,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NText {
|
||||
text: "Sunset time"
|
||||
text: I18n.tr("settings.display.night-light.manual-schedule.sunset")
|
||||
font.pointSize: Style.fontSizeM * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
}
|
||||
@@ -362,7 +346,7 @@ ColumnLayout {
|
||||
NComboBox {
|
||||
model: timeOptions
|
||||
currentKey: Settings.data.nightLight.manualSunset
|
||||
placeholder: "Select stop time"
|
||||
placeholder: I18n.tr("settings.display.night-light.manual-schedule.select-stop")
|
||||
onSelected: key => Settings.data.nightLight.manualSunset = key
|
||||
minimumWidth: 120 * scaling
|
||||
}
|
||||
@@ -371,8 +355,8 @@ ColumnLayout {
|
||||
|
||||
// Force activation toggle
|
||||
NToggle {
|
||||
label: "Force activation"
|
||||
description: "Ignores the schedule and applies the night filter immediately."
|
||||
label: I18n.tr("settings.display.night-light.force-activation.label")
|
||||
description: I18n.tr("settings.display.night-light.force-activation.description")
|
||||
checked: Settings.data.nightLight.forced
|
||||
onToggled: checked => {
|
||||
Settings.data.nightLight.forced = checked
|
||||
|
||||
@@ -24,20 +24,20 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NHeader {
|
||||
label: "Appearance"
|
||||
description: "Customize the dock's behavior and appearance."
|
||||
label: I18n.tr("settings.dock.appearance.section.label")
|
||||
description: I18n.tr("settings.dock.appearance.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Auto-hide"
|
||||
description: "Automatically hide when not in use."
|
||||
label: I18n.tr("settings.dock.appearance.auto-hide.label")
|
||||
description: I18n.tr("settings.dock.appearance.auto-hide.description")
|
||||
checked: Settings.data.dock.autoHide
|
||||
onToggled: checked => Settings.data.dock.autoHide = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Exclusive zone"
|
||||
description: "Prevent window overlap."
|
||||
label: I18n.tr("settings.dock.appearance.exclusive-zone.label")
|
||||
description: I18n.tr("settings.dock.appearance.exclusive-zone.description")
|
||||
checked: Settings.data.dock.exclusive
|
||||
onToggled: checked => Settings.data.dock.exclusive = checked
|
||||
}
|
||||
@@ -46,8 +46,8 @@ ColumnLayout {
|
||||
spacing: Style.marginXXS * scaling
|
||||
Layout.fillWidth: true
|
||||
NLabel {
|
||||
label: "Background opacity"
|
||||
description: "Adjust the dock's background opacity."
|
||||
label: I18n.tr("settings.dock.appearance.background-opacity.label")
|
||||
description: I18n.tr("settings.dock.appearance.background-opacity.description")
|
||||
}
|
||||
NValueSlider {
|
||||
Layout.fillWidth: true
|
||||
@@ -65,8 +65,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Dock floating distance"
|
||||
description: "Adjust the floating distance from the screen edge."
|
||||
label: I18n.tr("settings.dock.appearance.floating-distance.label")
|
||||
description: I18n.tr("settings.dock.appearance.floating-distance.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -92,8 +92,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Monitor display"
|
||||
description: "Choose which monitor to display the dock on."
|
||||
label: I18n.tr("settings.dock.monitors.section.label")
|
||||
description: I18n.tr("settings.dock.monitors.section.description")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
|
||||
@@ -49,7 +49,7 @@ ColumnLayout {
|
||||
NFilePicker {
|
||||
id: filePicker
|
||||
pickerType: "file"
|
||||
title: I18n.tr("settings.general.profile.select-avatar") //Select avatar image"
|
||||
title: I18n.tr("settings.general.profile.select-avatar")
|
||||
initialPath: Settings.data.general.avatarImage.substr(0, Settings.data.general.avatarImage.lastIndexOf("/")) || Quickshell.env("HOME")
|
||||
nameFilters: ["Image files (*.jpg *.jpeg *.png *.gif *.pnm *.bmp *.face)", "All files (*)"]
|
||||
onAccepted: paths => Settings.data.general.avatarImage = paths[0]
|
||||
@@ -104,8 +104,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Animation speed"
|
||||
description: "Adjust global animation speed."
|
||||
label: I18n.tr("settings.general.ui.animation-speed.label")
|
||||
description: I18n.tr("settings.general.ui.animation-speed.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -132,20 +132,20 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Screen corners"
|
||||
description: "Customize screen corner rounding and visual effects."
|
||||
label: I18n.tr("settings.general.screen-corners.section.label")
|
||||
description: I18n.tr("settings.general.screen-corners.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Show screen corners"
|
||||
description: "Display rounded corners on the edge of the screen."
|
||||
label: I18n.tr("settings.general.screen-corners.show-corners.label")
|
||||
description: I18n.tr("settings.general.screen-corners.show-corners.description")
|
||||
checked: Settings.data.general.showScreenCorners
|
||||
onToggled: checked => Settings.data.general.showScreenCorners = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Solid black corners"
|
||||
description: "Use solid black instead of the bar background color."
|
||||
label: I18n.tr("settings.general.screen-corners.solid-black.label")
|
||||
description: I18n.tr("settings.general.screen-corners.solid-black.description")
|
||||
checked: Settings.data.general.forceBlackScreenCorners
|
||||
onToggled: checked => Settings.data.general.forceBlackScreenCorners = checked
|
||||
}
|
||||
@@ -182,8 +182,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Fonts"
|
||||
description: "Choose the fonts used throughout the interface."
|
||||
label: I18n.tr("settings.general.fonts.section.label")
|
||||
description: I18n.tr("settings.general.fonts.section.description")
|
||||
}
|
||||
|
||||
// Font configuration section
|
||||
@@ -192,12 +192,12 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NSearchableComboBox {
|
||||
label: "Default font"
|
||||
description: "Main font used throughout the interface."
|
||||
label: I18n.tr("settings.general.fonts.default.label")
|
||||
description: I18n.tr("settings.general.fonts.default.description")
|
||||
model: FontService.availableFonts
|
||||
currentKey: Settings.data.ui.fontDefault
|
||||
placeholder: "Select default font..."
|
||||
searchPlaceholder: "Search fonts..."
|
||||
placeholder: I18n.tr("settings.general.fonts.default.placeholder")
|
||||
searchPlaceholder: I18n.tr("settings.general.fonts.default.search-placeholder")
|
||||
popupHeight: 420 * scaling
|
||||
minimumWidth: 300 * scaling
|
||||
onSelected: function (key) {
|
||||
@@ -206,12 +206,12 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NSearchableComboBox {
|
||||
label: "Monospaced font"
|
||||
description: "Monospaced font used for numbers and stats display."
|
||||
label: I18n.tr("settings.general.fonts.monospace.label")
|
||||
description: I18n.tr("settings.general.fonts.monospace.description")
|
||||
model: FontService.monospaceFonts
|
||||
currentKey: Settings.data.ui.fontFixed
|
||||
placeholder: "Select monospace font..."
|
||||
searchPlaceholder: "Search monospace fonts..."
|
||||
placeholder: I18n.tr("settings.general.fonts.monospace.placeholder")
|
||||
searchPlaceholder: I18n.tr("settings.general.fonts.monospace.search-placeholder")
|
||||
popupHeight: 320 * scaling
|
||||
minimumWidth: 300 * scaling
|
||||
onSelected: function (key) {
|
||||
@@ -220,12 +220,12 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NSearchableComboBox {
|
||||
label: "Accent font"
|
||||
description: "Large font used for prominent displays."
|
||||
label: I18n.tr("settings.general.fonts.accent.label")
|
||||
description: I18n.tr("settings.general.fonts.accent.description")
|
||||
model: FontService.displayFonts
|
||||
currentKey: Settings.data.ui.fontBillboard
|
||||
placeholder: "Select display font..."
|
||||
searchPlaceholder: "Search display fonts..."
|
||||
placeholder: I18n.tr("settings.general.fonts.accent.placeholder")
|
||||
searchPlaceholder: I18n.tr("settings.general.fonts.accent.search-placeholder")
|
||||
popupHeight: 320 * scaling
|
||||
minimumWidth: 300 * scaling
|
||||
onSelected: function (key) {
|
||||
|
||||
@@ -11,14 +11,14 @@ ColumnLayout {
|
||||
width: root.width
|
||||
|
||||
NHeader {
|
||||
label: "System hooks"
|
||||
description: "Configure commands to be executed when system events occur."
|
||||
label: I18n.tr("settings.hooks.system-hooks.section.label")
|
||||
description: I18n.tr("settings.hooks.system-hooks.section.description")
|
||||
}
|
||||
|
||||
// Enable/Disable Toggle
|
||||
NToggle {
|
||||
label: "Enable hooks"
|
||||
description: "Enable or disable all hook commands."
|
||||
label: I18n.tr("settings.hooks.system-hooks.enable.label")
|
||||
description: I18n.tr("settings.hooks.system-hooks.enable.description")
|
||||
checked: Settings.data.hooks.enabled
|
||||
onToggled: checked => Settings.data.hooks.enabled = checked
|
||||
}
|
||||
@@ -35,9 +35,9 @@ ColumnLayout {
|
||||
// Wallpaper Hook Section
|
||||
NInputAction {
|
||||
id: wallpaperHookInput
|
||||
label: "Wallpaper changed"
|
||||
description: "Command to be executed when wallpaper changes."
|
||||
placeholderText: "e.g., notify-send \"Wallpaper\" \"Changed\""
|
||||
label: I18n.tr("settings.hooks.wallpaper-changed.label")
|
||||
description: I18n.tr("settings.hooks.wallpaper-changed.description")
|
||||
placeholderText: I18n.tr("settings.hooks.wallpaper-changed.placeholder")
|
||||
text: Settings.data.hooks.wallpaperChange
|
||||
onEditingFinished: {
|
||||
Settings.data.hooks.wallpaperChange = wallpaperHookInput.text
|
||||
@@ -57,9 +57,9 @@ ColumnLayout {
|
||||
// Dark Mode Hook Section
|
||||
NInputAction {
|
||||
id: darkModeHookInput
|
||||
label: "Theme changed"
|
||||
description: "Command to be executed when theme toggles between dark and light mode."
|
||||
placeholderText: "e.g., notify-send \"Theme\" \"Toggled\""
|
||||
label: I18n.tr("settings.hooks.theme-changed.label")
|
||||
description: I18n.tr("settings.hooks.theme-changed.description")
|
||||
placeholderText: I18n.tr("settings.hooks.theme-changed.placeholder")
|
||||
text: Settings.data.hooks.darkModeChange
|
||||
onEditingFinished: {
|
||||
Settings.data.hooks.darkModeChange = darkModeHookInput.text
|
||||
@@ -82,13 +82,13 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Hook Command Information"
|
||||
description: "• Commands are executed via shell (sh -c)\n• Commands run in background (detached)\n• Test buttons execute with current values"
|
||||
label: I18n.tr("settings.hooks.info.command-info.label")
|
||||
description: I18n.tr("settings.hooks.info.command-info.description")
|
||||
}
|
||||
|
||||
NLabel {
|
||||
label: "Available Parameters"
|
||||
description: "• Wallpaper Hook: $1 = wallpaper path, $2 = screen name\n• Theme Toggle Hook: $1 = true/false (dark mode state)"
|
||||
label: I18n.tr("settings.hooks.info.parameters.label")
|
||||
description: I18n.tr("settings.hooks.info.parameters.description")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,14 +10,14 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Appearance"
|
||||
description: "Customize the launcher's behavior and appearance."
|
||||
label: I18n.tr("settings.launcher.settings.section.label")
|
||||
description: I18n.tr("settings.launcher.settings.section.description")
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
id: launcherPosition
|
||||
label: "Position"
|
||||
description: "Choose where the launcher panel appears."
|
||||
label: I18n.tr("settings.launcher.settings.position.label")
|
||||
description: I18n.tr("settings.launcher.settings.position.description")
|
||||
Layout.fillWidth: true
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
@@ -60,14 +60,14 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NText {
|
||||
text: "Background opacity"
|
||||
text: I18n.tr("settings.launcher.settings.background-opacity.label")
|
||||
font.pointSize: Style.fontSizeL * scaling
|
||||
font.weight: Style.fontWeightBold
|
||||
color: Color.mOnSurface
|
||||
}
|
||||
|
||||
NText {
|
||||
text: "Adjust the background opacity of the launcher."
|
||||
text: I18n.tr("settings.launcher.settings.background-opacity.description")
|
||||
font.pointSize: Style.fontSizeXS * scaling
|
||||
color: Color.mOnSurfaceVariant
|
||||
wrapMode: Text.WordWrap
|
||||
@@ -87,22 +87,22 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Enable clipboard history"
|
||||
description: "Access previously copied items from the launcher."
|
||||
label: I18n.tr("settings.launcher.settings.clipboard-history.label")
|
||||
description: I18n.tr("settings.launcher.settings.clipboard-history.description")
|
||||
checked: Settings.data.appLauncher.enableClipboardHistory
|
||||
onToggled: checked => Settings.data.appLauncher.enableClipboardHistory = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Sort by most used"
|
||||
description: "When enabled, frequently launched apps appear first in the list."
|
||||
label: I18n.tr("settings.launcher.settings.sort-by-usage.label")
|
||||
description: I18n.tr("settings.launcher.settings.sort-by-usage.description")
|
||||
checked: Settings.data.appLauncher.sortByMostUsed
|
||||
onToggled: checked => Settings.data.appLauncher.sortByMostUsed = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Use App2Unit to launch applications"
|
||||
description: "Uses an alternative launch method to better manage app processes and prevent issues."
|
||||
label: I18n.tr("settings.launcher.settings.use-app2unit.label")
|
||||
description: I18n.tr("settings.launcher.settings.use-app2unit.description")
|
||||
checked: Settings.data.appLauncher.useApp2Unit
|
||||
onToggled: checked => Settings.data.appLauncher.useApp2Unit = checked
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Your location"
|
||||
description: "Get accurate weather and night light scheduling by setting your location."
|
||||
label: I18n.tr("settings.location.location.section.label")
|
||||
description: I18n.tr("settings.location.location.section.description")
|
||||
}
|
||||
|
||||
// Location section
|
||||
@@ -20,10 +20,10 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NTextInput {
|
||||
label: "Search for a location"
|
||||
description: "e.g., Toronto, ON"
|
||||
label: I18n.tr("settings.location.location.search.label")
|
||||
description: I18n.tr("settings.location.location.search.description")
|
||||
text: Settings.data.location.name || Settings.defaultLocation
|
||||
placeholderText: "Enter the location name"
|
||||
placeholderText: I18n.tr("settings.location.location.search.placeholder")
|
||||
onEditingFinished: {
|
||||
// Verify the location has really changed to avoid extra resets
|
||||
var newLocation = text.trim()
|
||||
@@ -64,13 +64,13 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Weather"
|
||||
description: "Choose your preferred temperature unit."
|
||||
label: I18n.tr("settings.location.weather.section.label")
|
||||
description: I18n.tr("settings.location.weather.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Display temperature in Fahrenheit (°F)"
|
||||
description: "Display temperature in Fahrenheit instead of Celsius."
|
||||
label: I18n.tr("settings.location.weather.fahrenheit.label")
|
||||
description: I18n.tr("settings.location.weather.fahrenheit.description")
|
||||
checked: Settings.data.location.useFahrenheit
|
||||
onToggled: checked => Settings.data.location.useFahrenheit = checked
|
||||
}
|
||||
@@ -82,26 +82,26 @@ ColumnLayout {
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
// Weather section
|
||||
// Date & time section
|
||||
ColumnLayout {
|
||||
spacing: Style.marginM * scaling
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Date & time"
|
||||
description: "Customize how date and time appear."
|
||||
label: I18n.tr("settings.location.date-time.section.label")
|
||||
description: I18n.tr("settings.location.date-time.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Use 12-hour time format on the lock screen"
|
||||
description: "On for AM/PM format (e.g., 8:00 PM), off for 24-hour format (e.g., 20:00)."
|
||||
label: I18n.tr("settings.location.date-time.12hour-format.label")
|
||||
description: I18n.tr("settings.location.date-time.12hour-format.description")
|
||||
checked: Settings.data.location.use12hourFormat
|
||||
onToggled: checked => Settings.data.location.use12hourFormat = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Show week numbers"
|
||||
description: "Displays the week of the year (e.g., Week 38) in the calendar."
|
||||
label: I18n.tr("settings.location.date-time.week-numbers.label")
|
||||
description: I18n.tr("settings.location.date-time.week-numbers.description")
|
||||
checked: Settings.data.location.showWeekNumberInCalendar
|
||||
onToggled: checked => Settings.data.location.showWeekNumberInCalendar = checked
|
||||
}
|
||||
|
||||
@@ -12,17 +12,17 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "Manage Wi-Fi and Bluetooth connections."
|
||||
description: I18n.tr("settings.network.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Enable Wi-Fi"
|
||||
label: I18n.tr("settings.network.wifi.label")
|
||||
checked: Settings.data.network.wifiEnabled
|
||||
onToggled: checked => NetworkService.setWifiEnabled(checked)
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Enable Bluetooth"
|
||||
label: I18n.tr("settings.network.bluetooth.label")
|
||||
checked: Settings.data.network.bluetoothEnabled
|
||||
onToggled: checked => BluetoothService.setBluetoothEnabled(checked)
|
||||
}
|
||||
|
||||
@@ -28,27 +28,27 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Appearance"
|
||||
description: "Configure notifications appearance and behavior."
|
||||
label: I18n.tr("settings.notifications.settings.section.label")
|
||||
description: I18n.tr("settings.notifications.settings.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Do not disturb"
|
||||
description: "Disable all notification popups when enabled."
|
||||
label: I18n.tr("settings.notifications.settings.do-not-disturb.label")
|
||||
description: I18n.tr("settings.notifications.settings.do-not-disturb.description")
|
||||
checked: Settings.data.notifications.doNotDisturb
|
||||
onToggled: checked => Settings.data.notifications.doNotDisturb = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Enable on screen display"
|
||||
description: "Show volume and brightness changes in real-time."
|
||||
label: I18n.tr("settings.notifications.settings.enable-osd.label")
|
||||
description: I18n.tr("settings.notifications.settings.enable-osd.description")
|
||||
checked: Settings.data.notifications.enableOSD
|
||||
onToggled: checked => Settings.data.notifications.enableOSD = checked
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
label: "Location"
|
||||
description: "Where notifications appear on screen."
|
||||
label: I18n.tr("settings.notifications.settings.location.label")
|
||||
description: I18n.tr("settings.notifications.settings.location.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "top"
|
||||
@@ -78,32 +78,14 @@ ColumnLayout {
|
||||
currentKey: Settings.data.notifications.location || "top_right"
|
||||
onSelected: key => Settings.data.notifications.location = key
|
||||
}
|
||||
}
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
// Notification Duration Settings
|
||||
ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Notification duration"
|
||||
description: "Configure how long notifications stay visible based on their urgency level."
|
||||
}
|
||||
|
||||
// Low Urgency Duration
|
||||
ColumnLayout {
|
||||
spacing: Style.marginXXS * scaling
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Low urgency"
|
||||
description: "How long low priority notifications stay visible."
|
||||
label: I18n.tr("settings.notifications.settings.low-urgency.label")
|
||||
description: I18n.tr("settings.notifications.settings.low-urgency.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -123,8 +105,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Normal urgency"
|
||||
description: "How long normal priority notifications stay visible."
|
||||
label: I18n.tr("settings.notifications.settings.normal-urgency.label")
|
||||
description: I18n.tr("settings.notifications.settings.normal-urgency.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -144,8 +126,8 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NLabel {
|
||||
label: "Critical urgency"
|
||||
description: "How long critical priority notifications stay visible."
|
||||
label: I18n.tr("settings.notifications.settings.critical-urgency.label")
|
||||
description: I18n.tr("settings.notifications.settings.critical-urgency.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -158,22 +140,10 @@ ColumnLayout {
|
||||
text: Settings.data.notifications.criticalUrgencyDuration + "s"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
// Monitor Configuration
|
||||
ColumnLayout {
|
||||
spacing: Style.marginM * scaling
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Monitors display"
|
||||
description: "Show notification on specific monitors. Defaults to all if none are chosen."
|
||||
// Monitor Configuration
|
||||
NLabel {
|
||||
label: I18n.tr("settings.notifications.settings.monitors-display.label")
|
||||
description: I18n.tr("settings.notifications.settings.monitors-display.description")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
|
||||
@@ -12,8 +12,8 @@ ColumnLayout {
|
||||
spacing: Style.marginL * scaling
|
||||
|
||||
NHeader {
|
||||
label: "General settings"
|
||||
description: "Manage screen recording output and content."
|
||||
label: I18n.tr("settings.screen-recorder.general.section.label")
|
||||
description: I18n.tr("settings.screen-recorder.general.section.description")
|
||||
}
|
||||
|
||||
// Output Folder
|
||||
@@ -22,27 +22,22 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NTextInputButton {
|
||||
label: "Output folder"
|
||||
description: "Folder where screen recordings will be saved."
|
||||
label: I18n.tr("settings.screen-recorder.general.output-folder.label")
|
||||
description: I18n.tr("settings.screen-recorder.general.output-folder.description")
|
||||
placeholderText: Quickshell.env("HOME") + "/Videos"
|
||||
text: Settings.data.screenRecorder.directory
|
||||
buttonIcon: "folder-open"
|
||||
buttonTooltip: "Browse for output folder"
|
||||
buttonTooltip: I18n.tr("settings.screen-recorder.general.output-folder.tooltip")
|
||||
onInputEditingFinished: Settings.data.screenRecorder.directory = text
|
||||
onButtonClicked: folderPicker.open()
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
spacing: Style.marginS * scaling
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginM * scaling
|
||||
// Show Cursor
|
||||
NToggle {
|
||||
label: "Show cursor"
|
||||
description: "Record mouse cursor in the video."
|
||||
checked: Settings.data.screenRecorder.showCursor
|
||||
onToggled: checked => Settings.data.screenRecorder.showCursor = checked
|
||||
}
|
||||
// Show Cursor
|
||||
NToggle {
|
||||
label: I18n.tr("settings.screen-recorder.general.show-cursor.label")
|
||||
description: I18n.tr("settings.screen-recorder.general.show-cursor.description")
|
||||
checked: Settings.data.screenRecorder.showCursor
|
||||
onToggled: checked => Settings.data.screenRecorder.showCursor = checked
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,13 +53,14 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Video settings"
|
||||
label: I18n.tr("settings.screen-recorder.video.section.label")
|
||||
description: I18n.tr("settings.screen-recorder.video.section.description")
|
||||
}
|
||||
|
||||
// Source
|
||||
NComboBox {
|
||||
label: "Video source"
|
||||
description: "Portal is recommended, if you get artifacts try Screen."
|
||||
label: I18n.tr("settings.screen-recorder.video.video-source.label")
|
||||
description: I18n.tr("settings.screen-recorder.video.video-source.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "portal"
|
||||
@@ -81,8 +77,8 @@ ColumnLayout {
|
||||
|
||||
// Frame Rate
|
||||
NComboBox {
|
||||
label: "Frame rate"
|
||||
description: "Target frame rate for screen recordings."
|
||||
label: I18n.tr("settings.screen-recorder.video.frame-rate.label")
|
||||
description: I18n.tr("settings.screen-recorder.video.frame-rate.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "30"
|
||||
@@ -119,8 +115,8 @@ ColumnLayout {
|
||||
|
||||
// Video Quality
|
||||
NComboBox {
|
||||
label: "Video quality"
|
||||
description: "Higher quality results in larger file sizes."
|
||||
label: I18n.tr("settings.screen-recorder.video.video-quality.label")
|
||||
description: I18n.tr("settings.screen-recorder.video.video-quality.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "medium"
|
||||
@@ -145,8 +141,8 @@ ColumnLayout {
|
||||
|
||||
// Video Codec
|
||||
NComboBox {
|
||||
label: "Video codec"
|
||||
description: "h264 is the most common codec."
|
||||
label: I18n.tr("settings.screen-recorder.video.video-codec.label")
|
||||
description: I18n.tr("settings.screen-recorder.video.video-codec.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "h264"
|
||||
@@ -175,8 +171,8 @@ ColumnLayout {
|
||||
|
||||
// Color Range
|
||||
NComboBox {
|
||||
label: "Color range"
|
||||
description: "Limited is recommended for better compatibility."
|
||||
label: I18n.tr("settings.screen-recorder.video.color-range.label")
|
||||
description: I18n.tr("settings.screen-recorder.video.color-range.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "limited"
|
||||
@@ -194,8 +190,8 @@ ColumnLayout {
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginL * 2 * scaling
|
||||
Layout.bottomMargin: Style.marginL * scaling
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
// Audio Settings
|
||||
@@ -204,13 +200,14 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Audio settings"
|
||||
label: I18n.tr("settings.screen-recorder.audio.section.label")
|
||||
description: I18n.tr("settings.screen-recorder.audio.section.description")
|
||||
}
|
||||
|
||||
// Audio Source
|
||||
NComboBox {
|
||||
label: "Audio source"
|
||||
description: "Audio source to capture during recording."
|
||||
label: I18n.tr("settings.screen-recorder.audio.audio-source.label")
|
||||
description: I18n.tr("settings.screen-recorder.audio.audio-source.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "default_output"
|
||||
@@ -231,8 +228,8 @@ ColumnLayout {
|
||||
|
||||
// Audio Codec
|
||||
NComboBox {
|
||||
label: "Audio codec"
|
||||
description: "Opus is recommended for best performance and smallest audio size."
|
||||
label: I18n.tr("settings.screen-recorder.audio.audio-codec.label")
|
||||
description: I18n.tr("settings.screen-recorder.audio.audio-codec.description")
|
||||
model: ListModel {
|
||||
ListElement {
|
||||
key: "opus"
|
||||
@@ -248,16 +245,10 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
|
||||
NDivider {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL * scaling
|
||||
Layout.bottomMargin: Style.marginXL * scaling
|
||||
}
|
||||
|
||||
NFilePicker {
|
||||
id: folderPicker
|
||||
pickerType: "folder"
|
||||
title: "Select output folder"
|
||||
title: I18n.tr("settings.screen-recorder.general.select-output-folder")
|
||||
initialPath: Settings.data.screenRecorder.directory || Quickshell.env("HOME") + "/Videos"
|
||||
onAccepted: paths => Settings.data.screenRecorder.directory = paths[0]
|
||||
}
|
||||
|
||||
@@ -14,13 +14,13 @@ ColumnLayout {
|
||||
property string specificFolderMonitorName: ""
|
||||
|
||||
NHeader {
|
||||
label: "Wallpaper settings"
|
||||
description: "Control how wallpapers are managed and displayed."
|
||||
label: I18n.tr("settings.wallpaper.settings.section.label")
|
||||
description: I18n.tr("settings.wallpaper.settings.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
label: "Enable wallpaper management"
|
||||
description: "Manage wallpapers with Noctalia. Uncheck if you prefer using another application."
|
||||
label: I18n.tr("settings.wallpaper.settings.enable-management.label")
|
||||
description: I18n.tr("settings.wallpaper.settings.enable-management.description")
|
||||
checked: Settings.data.wallpaper.enabled
|
||||
onToggled: checked => Settings.data.wallpaper.enabled = checked
|
||||
Layout.bottomMargin: Style.marginL * scaling
|
||||
@@ -33,11 +33,11 @@ ColumnLayout {
|
||||
|
||||
NTextInputButton {
|
||||
id: wallpaperPathInput
|
||||
label: "Wallpaper folder"
|
||||
description: "Path to your main wallpaper folder."
|
||||
label: I18n.tr("settings.wallpaper.settings.folder.label")
|
||||
description: I18n.tr("settings.wallpaper.settings.folder.description")
|
||||
text: Settings.data.wallpaper.directory
|
||||
buttonIcon: "folder-open"
|
||||
buttonTooltip: "Browse for wallpaper folder"
|
||||
buttonTooltip: I18n.tr("settings.wallpaper.settings.folder.tooltip")
|
||||
Layout.fillWidth: true
|
||||
onInputEditingFinished: Settings.data.wallpaper.directory = text
|
||||
onButtonClicked: mainFolderPicker.open()
|
||||
@@ -45,8 +45,8 @@ ColumnLayout {
|
||||
|
||||
// Monitor-specific directories
|
||||
NToggle {
|
||||
label: "Monitor-specific directories"
|
||||
description: "Set a different wallpaper folder for each monitor."
|
||||
label: I18n.tr("settings.wallpaper.settings.monitor-specific.label")
|
||||
description: I18n.tr("settings.wallpaper.settings.monitor-specific.description")
|
||||
checked: Settings.data.wallpaper.enableMultiMonitorDirectories
|
||||
onToggled: checked => Settings.data.wallpaper.enableMultiMonitorDirectories = checked
|
||||
}
|
||||
@@ -83,7 +83,7 @@ ColumnLayout {
|
||||
NTextInputButton {
|
||||
text: WallpaperService.getMonitorDirectory(modelData.name)
|
||||
buttonIcon: "folder-open"
|
||||
buttonTooltip: "Browse for wallpaper folder"
|
||||
buttonTooltip: I18n.tr("settings.wallpaper.settings.monitor-specific.tooltip")
|
||||
Layout.fillWidth: true
|
||||
onInputEditingFinished: WallpaperService.setMonitorDirectory(modelData.name, text)
|
||||
onButtonClicked: {
|
||||
@@ -110,13 +110,13 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Look & feel"
|
||||
label: I18n.tr("settings.wallpaper.look-feel.section.label")
|
||||
}
|
||||
|
||||
// Fill Mode
|
||||
NComboBox {
|
||||
label: "Fill mode"
|
||||
description: "Select how the image should scale to match your monitor's resolution."
|
||||
label: I18n.tr("settings.wallpaper.look-feel.fill-mode.label")
|
||||
description: I18n.tr("settings.wallpaper.look-feel.fill-mode.description")
|
||||
model: WallpaperService.fillModeModel
|
||||
currentKey: Settings.data.wallpaper.fillMode
|
||||
onSelected: key => Settings.data.wallpaper.fillMode = key
|
||||
@@ -124,8 +124,8 @@ ColumnLayout {
|
||||
|
||||
RowLayout {
|
||||
NLabel {
|
||||
label: "Fill color"
|
||||
description: "Choose a fill color that may appear behind the wallpaper."
|
||||
label: I18n.tr("settings.wallpaper.look-feel.fill-color.label")
|
||||
description: I18n.tr("settings.wallpaper.look-feel.fill-color.description")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
}
|
||||
|
||||
@@ -137,8 +137,8 @@ ColumnLayout {
|
||||
|
||||
// Transition Type
|
||||
NComboBox {
|
||||
label: "Transition type"
|
||||
description: "Animation type when switching between wallpapers."
|
||||
label: I18n.tr("settings.wallpaper.look-feel.transition-type.label")
|
||||
description: I18n.tr("settings.wallpaper.look-feel.transition-type.description")
|
||||
model: WallpaperService.transitionsModel
|
||||
currentKey: Settings.data.wallpaper.transitionType
|
||||
onSelected: key => Settings.data.wallpaper.transitionType = key
|
||||
@@ -147,8 +147,8 @@ ColumnLayout {
|
||||
// Transition Duration
|
||||
ColumnLayout {
|
||||
NLabel {
|
||||
label: "Transition duration"
|
||||
description: "Duration of transition animations in seconds."
|
||||
label: I18n.tr("settings.wallpaper.look-feel.transition-duration.label")
|
||||
description: I18n.tr("settings.wallpaper.look-feel.transition-duration.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -165,8 +165,8 @@ ColumnLayout {
|
||||
// Edge Smoothness
|
||||
ColumnLayout {
|
||||
NLabel {
|
||||
label: "Soften transition edge"
|
||||
description: "Applies a soft, feathered effect to the edge of transitions."
|
||||
label: I18n.tr("settings.wallpaper.look-feel.edge-smoothness.label")
|
||||
description: I18n.tr("settings.wallpaper.look-feel.edge-smoothness.description")
|
||||
}
|
||||
|
||||
NValueSlider {
|
||||
@@ -193,13 +193,13 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
NHeader {
|
||||
label: "Automation"
|
||||
label: I18n.tr("settings.wallpaper.automation.section.label")
|
||||
}
|
||||
|
||||
// Random Wallpaper
|
||||
NToggle {
|
||||
label: "Random wallpaper"
|
||||
description: "Schedule random wallpaper changes at regular intervals."
|
||||
label: I18n.tr("settings.wallpaper.automation.random-wallpaper.label")
|
||||
description: I18n.tr("settings.wallpaper.automation.random-wallpaper.description")
|
||||
checked: Settings.data.wallpaper.randomEnabled
|
||||
onToggled: checked => Settings.data.wallpaper.randomEnabled = checked
|
||||
}
|
||||
@@ -209,8 +209,8 @@ ColumnLayout {
|
||||
visible: Settings.data.wallpaper.randomEnabled
|
||||
RowLayout {
|
||||
NLabel {
|
||||
label: "Wallpaper interval"
|
||||
description: "How often to change wallpapers automatically."
|
||||
label: I18n.tr("settings.wallpaper.automation.interval.label")
|
||||
description: I18n.tr("settings.wallpaper.automation.interval.description")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
@@ -275,8 +275,8 @@ ColumnLayout {
|
||||
Layout.topMargin: Style.marginS * scaling
|
||||
|
||||
NTextInput {
|
||||
label: "Custom interval"
|
||||
description: "Enter time as HH:MM (e.g., 01:30)."
|
||||
label: I18n.tr("settings.wallpaper.automation.custom-interval.label")
|
||||
description: I18n.tr("settings.wallpaper.automation.custom-interval.description")
|
||||
text: {
|
||||
const s = Settings.data.wallpaper.randomIntervalSec
|
||||
const h = Math.floor(s / 3600)
|
||||
@@ -341,14 +341,14 @@ ColumnLayout {
|
||||
NFilePicker {
|
||||
id: mainFolderPicker
|
||||
pickerType: "folder"
|
||||
title: "Select wallpaper folder"
|
||||
title: I18n.tr("settings.wallpaper.settings.select-folder")
|
||||
onAccepted: paths => Settings.data.wallpaper.directory = paths[0]
|
||||
}
|
||||
|
||||
NFilePicker {
|
||||
id: monitorFolderPicker
|
||||
pickerType: "folder"
|
||||
title: "Select monitor wallpaper folder"
|
||||
title: I18n.tr("settings.wallpaper.settings.select-monitor-folder")
|
||||
onAccepted: paths => WallpaperService.setMonitorDirectory(specificFolderMonitorName, paths[0])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user