This commit is contained in:
2026-01-29 17:55:26 -06:00
parent 13c920fd32
commit 9d18d477d5
24 changed files with 501 additions and 166 deletions

View File

@@ -1,30 +1,13 @@
//Acer 1080p //Acer 1080p
output "DP-3" { output "Acer Technologies G246HYL LZ5AA0012413" {
mode "1920x1080"
transform "normal"
position x=0 y=0
scale 1.0
}
output "DP-4" {
mode "1920x1080" mode "1920x1080"
transform "normal" transform "normal"
position x=0 y=0 position x=0 y=0
scale 1.0 scale 1.0
} }
//LG 2K //LG 2K
output "DP-5" { output "LG Electronics LG ULTRAGEAR 101NTLELA752" {
mode "2560x1440"
transform "normal"
position x=1920 y=0
scale 1.0
}
output "DP-6" {
mode "2560x1440"
transform "normal"
position x=1920 y=0
scale 1.0
}
output "DP-7" {
mode "2560x1440" mode "2560x1440"
transform "normal" transform "normal"
position x=1920 y=0 position x=1920 y=0
@@ -32,18 +15,13 @@ output "DP-7" {
} }
//HP 1080p //HP 1080p
//output "DP-4" { output "Hewlett Packard HP 27vx 3CM53800Q2" {
// mode "1920x1080"
// transform "normal"
// position x=4480 y=0
// scale 1.0
//}
output "HDMI-A-1" {
mode "1920x1080" mode "1920x1080"
transform "normal" transform "normal"
position x=4480 y=0 position x=4480 y=0
scale 1.0 scale 1.0
} }
//Built-in display //Built-in display
output "eDP-1" { output "eDP-1" {
mode "1920x1080" mode "1920x1080"

View File

@@ -2,7 +2,7 @@
"sources": [ "sources": [
{ {
"enabled": true, "enabled": true,
"name": "Official Noctalia Plugins", "name": "Noctalia Plugins",
"url": "https://github.com/noctalia-dev/noctalia-plugins" "url": "https://github.com/noctalia-dev/noctalia-plugins"
} }
], ],

View File

@@ -9,7 +9,7 @@ import qs.Modules.Bar.Extras
import qs.Services.UI import qs.Services.UI
import qs.Widgets import qs.Widgets
Rectangle { Item {
id: root id: root
property var pluginApi: null property var pluginApi: null
@@ -18,8 +18,13 @@ Rectangle {
property string widgetId: "" property string widgetId: ""
property string section: "" property string section: ""
readonly property string barPosition: Settings.data.bar.position // Bar positioning properties
readonly property string screenName: screen ? screen.name : ""
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
readonly property bool isVertical: barPosition === "left" || barPosition === "right" readonly property bool isVertical: barPosition === "left" || barPosition === "right"
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
property bool micActive: false property bool micActive: false
property bool camActive: false property bool camActive: false
@@ -44,12 +49,14 @@ Rectangle {
readonly property bool isVisible: !hideInactive || micActive || camActive || scrActive readonly property bool isVisible: !hideInactive || micActive || camActive || scrActive
property real margins: removeMargins ? 0 : Style.marginM * 2 property real margins: removeMargins ? 0 : Style.marginM * 2
implicitWidth: isVertical ? Style.capsuleHeight : Math.round(layout.implicitWidth + margins)
implicitHeight: isVertical ? Math.round(layout.implicitHeight + margins) : Style.capsuleHeight readonly property real contentWidth: isVertical ? Style.capsuleHeight : Math.round(layout.implicitWidth + margins)
readonly property real contentHeight: isVertical ? Math.round(layout.implicitHeight + margins) : Style.capsuleHeight
implicitWidth: contentWidth
implicitHeight: contentHeight
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
radius: Style.radiusM
color: Style.capsuleColor
visible: root.isVisible visible: root.isVisible
opacity: root.isVisible ? 1.0 : 0.0 opacity: root.isVisible ? 1.0 : 0.0
@@ -221,19 +228,16 @@ Rectangle {
return parts.length > 0 ? parts.join("\n") : ""; return parts.length > 0 ? parts.join("\n") : "";
} }
MouseArea { Rectangle {
anchors.fill: parent id: visualCapsule
acceptedButtons: Qt.RightButton x: Style.pixelAlignCenter(parent.width, width)
hoverEnabled: true y: Style.pixelAlignCenter(parent.height, height)
width: root.contentWidth
onEntered: { height: root.contentHeight
var tooltipText = buildTooltip(); radius: Style.radiusM
if (tooltipText) { color: Style.capsuleColor
TooltipService.show(root, tooltipText, BarService.getTooltipDirection()); border.color: Style.capsuleBorderColor
} border.width: Style.capsuleBorderWidth
}
onExited: TooltipService.hide()
}
Item { Item {
id: layout id: layout
@@ -271,3 +275,18 @@ Rectangle {
} }
} }
} }
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
hoverEnabled: true
onEntered: {
var tooltipText = buildTooltip();
if (tooltipText) {
TooltipService.show(root, tooltipText, BarService.getTooltipDirection());
}
}
onExited: TooltipService.hide()
}
}

View File

@@ -0,0 +1,21 @@
{
"settings": {
"hideInactive": {
"desc": "Mikrofon, kamera és képernyő ikonok elrejtése, ha éppen nincsenek használatban.",
"label": "Inaktív állapotok elrejtése"
},
"iconSpacing": {
"desc": "Állítsa be az ikonok közötti távolságot.",
"label": "Ikon távolság"
},
"removeMargins": {
"desc": "Távolítsd el a widget összes külső margóját.",
"label": "Margók eltávolítása"
}
},
"tooltip": {
"cam-on": "Kamera: {apps}",
"mic-on": "Mikrofon: {apps}",
"screen-on": "Képernyőmegosztás: {apps}"
}
}

View File

@@ -0,0 +1,21 @@
{
"settings": {
"hideInactive": {
"desc": "Îkonên mîkrofon, kamera û ekranê dema ku neçalak bin veşêre.",
"label": "Rewşa neçalak veşêre"
},
"iconSpacing": {
"desc": "Cihê di navbera îkonan de diyar bike.",
"label": "Dûrahiya îkonan"
},
"removeMargins": {
"desc": "Hemû marjînalên derveyî yên widgetê rake.",
"label": "Derdestên derxînin"
}
},
"tooltip": {
"cam-on": "Kamera: {apps}",
"mic-on": "Mîkrofon: {apps}",
"screen-on": "Parvekirina ekranê: {apps}"
}
}

View File

@@ -0,0 +1,21 @@
{
"settings": {
"hideInactive": {
"desc": "Ukryj ikony mikrofonu, kamery i ekranu, gdy są nieaktywne.",
"label": "Ukryj nieaktywne stany"
},
"iconSpacing": {
"desc": "Ustaw odstęp między ikonami.",
"label": "Odstępy ikon"
},
"removeMargins": {
"desc": "Usuń wszystkie zewnętrzne marginesy widżetu.",
"label": "Usuń marginesy"
}
},
"tooltip": {
"cam-on": "Kamera: {apps}",
"mic-on": "Mikrofon: {apps}",
"screen-on": "Udostępnianie ekranu: {apps}"
}
}

View File

@@ -0,0 +1,21 @@
{
"settings": {
"hideInactive": {
"desc": "當麥克風, 攝影機及螢幕分享沒有啟動時就直接隱藏",
"label": "隱藏未啟動的狀態"
},
"iconSpacing": {
"desc": "設定圖示之間的留空",
"label": "圖示間距"
},
"removeMargins": {
"desc": "移除小工具外面的所有邊距",
"label": "移除邊距"
}
},
"tooltip": {
"cam-on": "攝影機: {apps}",
"mic-on": "麥克風: {apps}",
"screen-on": "螢幕分享: {apps}"
}
}

View File

@@ -1,12 +1,14 @@
{ {
"id": "privacy-indicator", "id": "privacy-indicator",
"name": "Privacy Indicator", "name": "Privacy Indicator",
"version": "1.0.10", "version": "1.0.13",
"minNoctaliaVersion": "3.6.0", "minNoctaliaVersion": "3.6.0",
"author": "Noctalia Team <team@noctalia.dev>", "author": "Noctalia Team",
"official": true,
"license": "MIT", "license": "MIT",
"repository": "https://github.com/noctalia-dev/noctalia-plugins", "repository": "https://github.com/noctalia-dev/noctalia-plugins",
"description": "A privacy indicator widget that shows when microphone, camera or screen sharing is active.", "description": "A privacy indicator widget that shows when microphone, camera or screen sharing is active.",
"tags": ["Bar", "Privacy", "Indicator"],
"entryPoints": { "entryPoints": {
"barWidget": "BarWidget.qml", "barWidget": "BarWidget.qml",
"settings": "Settings.qml" "settings": "Settings.qml"

View File

@@ -15,6 +15,29 @@ NIconButton {
property string section: "" property string section: ""
readonly property var mainInstance: pluginApi?.mainInstance readonly property var mainInstance: pluginApi?.mainInstance
readonly property bool hideInactive:
pluginApi?.pluginSettings?.hideInactive ??
pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ??
false
readonly property bool shouldShow: !hideInactive || (mainInstance?.isRecording ?? false) || (mainInstance?.isPending ?? false)
visible: true
opacity: shouldShow ? 1.0 : 0.0
implicitWidth: shouldShow ? baseSize : 0
implicitHeight: shouldShow ? baseSize : 0
Behavior on opacity {
NumberAnimation { duration: Style.animationNormal }
}
Behavior on implicitWidth {
NumberAnimation { duration: Style.animationNormal }
}
Behavior on implicitHeight {
NumberAnimation { duration: Style.animationNormal }
}
enabled: mainInstance?.isAvailable ?? false enabled: mainInstance?.isAvailable ?? false
icon: "camera-video" icon: "camera-video"
@@ -49,11 +72,7 @@ NIconButton {
} }
onRightClicked: { onRightClicked: {
var popupMenuWindow = PanelService.getPopupMenuWindow(screen); PanelService.showContextMenu(contextMenu, root, screen);
if (popupMenuWindow) {
popupMenuWindow.showContextMenu(contextMenu);
contextMenu.openAtItem(root, screen);
}
} }
@@ -69,10 +88,8 @@ NIconButton {
] ]
onTriggered: action => { onTriggered: action => {
var popupMenuWindow = PanelService.getPopupMenuWindow(screen); contextMenu.close();
if (popupMenuWindow) { PanelService.closeContextMenu(screen);
popupMenuWindow.close();
}
if (action === "widget-settings") { if (action === "widget-settings") {
BarService.openPluginSettings(screen, pluginApi.manifest); BarService.openPluginSettings(screen, pluginApi.manifest);

View File

@@ -54,6 +54,7 @@ Item {
} }
// Settings shortcuts // Settings shortcuts
readonly property bool hideInactive: pluginApi?.pluginSettings?.hideInactive ?? false
readonly property string directory: pluginApi?.pluginSettings?.directory || "" readonly property string directory: pluginApi?.pluginSettings?.directory || ""
readonly property string filenamePattern: pluginApi?.pluginSettings?.filenamePattern || "recording_yyyyMMdd_HHmmss" readonly property string filenamePattern: pluginApi?.pluginSettings?.filenamePattern || "recording_yyyyMMdd_HHmmss"
readonly property string frameRate: pluginApi?.pluginSettings?.frameRate || "60" readonly property string frameRate: pluginApi?.pluginSettings?.frameRate || "60"

View File

@@ -11,6 +11,11 @@ ColumnLayout {
property var pluginApi: null property var pluginApi: null
property bool editHideInactive:
pluginApi?.pluginSettings?.hideInactive ??
pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ??
false
property string editDirectory: property string editDirectory:
pluginApi?.pluginSettings?.directory || pluginApi?.pluginSettings?.directory ||
pluginApi?.manifest?.metadata?.defaultSettings?.directory || pluginApi?.manifest?.metadata?.defaultSettings?.directory ||
@@ -77,6 +82,7 @@ ColumnLayout {
return return
} }
pluginApi.pluginSettings.hideInactive = root.editHideInactive
pluginApi.pluginSettings.directory = root.editDirectory pluginApi.pluginSettings.directory = root.editDirectory
pluginApi.pluginSettings.filenamePattern = root.editFilenamePattern pluginApi.pluginSettings.filenamePattern = root.editFilenamePattern
pluginApi.pluginSettings.frameRate = root.editFrameRate pluginApi.pluginSettings.frameRate = root.editFrameRate
@@ -137,6 +143,15 @@ ColumnLayout {
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.copyToClipboard ?? false defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.copyToClipboard ?? false
} }
// Hide When Inactive Toggle
NToggle {
label: pluginApi.tr("settings.general.hide-when-inactive")
description: pluginApi.tr("settings.general.hide-when-inactive-description")
checked: root.editHideInactive
onToggled: root.editHideInactive = checked
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ?? false
}
NDivider { NDivider {
Layout.fillWidth: true Layout.fillWidth: true
} }

View File

@@ -34,6 +34,8 @@
"general": { "general": {
"copy-to-clipboard": "In die Zwischenablage kopieren", "copy-to-clipboard": "In die Zwischenablage kopieren",
"copy-to-clipboard-description": "Kopiere die Datei nach Abschluss der Aufnahme in die Zwischenablage.", "copy-to-clipboard-description": "Kopiere die Datei nach Abschluss der Aufnahme in die Zwischenablage.",
"hide-when-inactive": "Bei Inaktivität ausblenden",
"hide-when-inactive-description": "Widget in Statusleiste ausblenden, wenn keine Aufnahme stattfindet",
"output-folder": "Ausgabeordner", "output-folder": "Ausgabeordner",
"output-folder-description": "Ordner, in dem Bildschirmaufnahmen gespeichert werden", "output-folder-description": "Ordner, in dem Bildschirmaufnahmen gespeichert werden",
"show-cursor": "Cursor anzeigen", "show-cursor": "Cursor anzeigen",

View File

@@ -35,6 +35,8 @@
"general": { "general": {
"copy-to-clipboard": "Copy to clipboard", "copy-to-clipboard": "Copy to clipboard",
"copy-to-clipboard-description": "Copy the file to clipboard after recording finishes.", "copy-to-clipboard-description": "Copy the file to clipboard after recording finishes.",
"hide-when-inactive": "Hide when inactive",
"hide-when-inactive-description": "Hide the bar indicator when not recording",
"output-folder": "Output folder", "output-folder": "Output folder",
"output-folder-description": "Folder where screen recordings will be saved", "output-folder-description": "Folder where screen recordings will be saved",
"show-cursor": "Show cursor", "show-cursor": "Show cursor",

View File

@@ -1,9 +1,10 @@
{ {
"id": "screen-recorder", "id": "screen-recorder",
"name": "Screen Recorder", "name": "Screen Recorder",
"version": "1.0.8", "version": "1.1.2",
"minNoctaliaVersion": "3.6.0", "minNoctaliaVersion": "3.6.0",
"author": "Noctalia Team", "author": "Noctalia Team",
"official": true,
"license": "MIT", "license": "MIT",
"repository": "https://github.com/noctalia-dev/noctalia-plugins", "repository": "https://github.com/noctalia-dev/noctalia-plugins",
"description": "Hardware-accelerated screen recording using gpu-screen-recorder with customizable video and audio settings", "description": "Hardware-accelerated screen recording using gpu-screen-recorder with customizable video and audio settings",
@@ -22,6 +23,7 @@
}, },
"metadata": { "metadata": {
"defaultSettings": { "defaultSettings": {
"hideInactive": false,
"directory": "", "directory": "",
"filenamePattern": "recording_yyyyMMdd_HHmmss", "filenamePattern": "recording_yyyyMMdd_HHmmss",
"frameRate": "60", "frameRate": "60",

View File

@@ -6,7 +6,7 @@ import qs.Commons
import qs.Widgets import qs.Widgets
import qs.Services.UI import qs.Services.UI
Rectangle { Item {
id: root id: root
property var pluginApi: null property var pluginApi: null
@@ -18,14 +18,6 @@ Rectangle {
readonly property string barPosition: Settings.data.bar.position readonly property string barPosition: Settings.data.bar.position
readonly property bool isVertical: barPosition === "left" || barPosition === "right" readonly property bool isVertical: barPosition === "left" || barPosition === "right"
implicitWidth: isVertical ? Style.capsuleHeight : layout.implicitWidth + Style.marginS * 2
implicitHeight: isVertical ? layout.implicitHeight + Style.marginS * 2 : Style.capsuleHeight
color: root.hovered ? Color.mHover : Style.capsuleColor
radius: Style.radiusM
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
property string currentIconName: pluginApi?.pluginSettings?.currentIconName || pluginApi?.manifest?.metadata?.defaultSettings?.currentIconName property string currentIconName: pluginApi?.pluginSettings?.currentIconName || pluginApi?.manifest?.metadata?.defaultSettings?.currentIconName
property bool hideOnZero: pluginApi?.pluginSettings.hideOnZero || pluginApi?.manifest?.metadata.defaultSettings?.hideOnZero property bool hideOnZero: pluginApi?.pluginSettings.hideOnZero || pluginApi?.manifest?.metadata.defaultSettings?.hideOnZero
readonly property bool isVisible: (root.pluginApi?.mainInstance?.updateCount > 0) || !root.hideOnZero readonly property bool isVisible: (root.pluginApi?.mainInstance?.updateCount > 0) || !root.hideOnZero
@@ -33,10 +25,26 @@ Rectangle {
// also set opacity to zero when invisible as we use opacity to hide the barWidgetLoader // also set opacity to zero when invisible as we use opacity to hide the barWidgetLoader
opacity: root.isVisible ? 1.0 : 0.0 opacity: root.isVisible ? 1.0 : 0.0
readonly property real contentWidth: isVertical ? Style.capsuleHeight : layout.implicitWidth + Style.marginS * 2
readonly property real contentHeight: isVertical ? layout.implicitHeight + Style.marginS * 2 : Style.capsuleHeight
implicitWidth: contentWidth
implicitHeight: contentHeight
// //
// ------ Widget ------ // ------ Widget ------
// //
Rectangle {
id: visualCapsule
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, height)
width: root.contentWidth
height: root.contentHeight
color: root.hovered ? Color.mHover : Style.capsuleColor
radius: Style.radiusM
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Item { Item {
id: layout id: layout
anchors.centerIn: parent anchors.centerIn: parent
@@ -63,6 +71,8 @@ Rectangle {
pointSize: Style.barFontSize pointSize: Style.barFontSize
} }
} }
}
}
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
@@ -74,7 +84,6 @@ Rectangle {
root.pluginApi?.mainInstance?.startDoSystemUpdate(); root.pluginApi?.mainInstance?.startDoSystemUpdate();
} }
onEntered: { onEntered: {
root.hovered = true; root.hovered = true;
buildTooltip(); buildTooltip();
@@ -85,7 +94,6 @@ Rectangle {
TooltipService.hide(); TooltipService.hide();
} }
} }
}
function buildTooltip() { function buildTooltip() {
const updateCount = root.pluginApi?.mainInstance?.updateCount const updateCount = root.pluginApi?.mainInstance?.updateCount

View File

@@ -36,6 +36,7 @@ Configure the plugin in Noctalia settings:
- **Noctalia Shell**: 3.6.0 or later. - **Noctalia Shell**: 3.6.0 or later.
- **Update backend**: one of the supported package managers defined in `updaterConfigs.json` (recommended, but not required). - **Update backend**: one of the supported package managers defined in `updaterConfigs.json` (recommended, but not required).
- **Paru/Yay**: Default `updaterConfigs.json` requires `checkupdates`
## Technical Details ## Technical Details

View File

@@ -70,16 +70,26 @@ ColumnLayout {
} }
} }
ColumnLayout {
spacing: Style.marginM
RowLayout { RowLayout {
Layout.fillWidth: true Layout.fillWidth: true
spacing: Style.marginL spacing: Style.marginM
NLabel { NLabel {
label: pluginApi?.tr("settings.updateInterval.label") label: pluginApi?.tr("settings.updateInterval.label")
description: pluginApi?.tr("settings.updateInterval.desc") description: pluginApi?.tr("settings.updateInterval.desc")
} }
NText {
text: root.updateIntervalMinutes.toString().padStart(3, " ") + " minutes"
color: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mOnPrimary
}
}
NSlider { NSlider {
Layout.fillWidth: true
from: 5 from: 5
to: 300 to: 300
value: root.updateIntervalMinutes value: root.updateIntervalMinutes
@@ -88,11 +98,6 @@ ColumnLayout {
root.updateIntervalMinutes = value; root.updateIntervalMinutes = value;
} }
} }
NText {
text: root.updateIntervalMinutes.toString().padStart(3, " ") + " minutes"
color: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mOnPrimary
}
} }
NDivider { NDivider {
@@ -145,28 +150,23 @@ ColumnLayout {
} }
ColumnLayout { ColumnLayout {
RowLayout {
NText { NText {
Layout.fillWidth: true
text: pluginApi?.tr("settings.currentNumUpdatesCmd.label") text: pluginApi?.tr("settings.currentNumUpdatesCmd.label")
color: Settings.data.colorSchemes.darkMode ? Color.mSecondary : Color.mOnSecondary color: Settings.data.colorSchemes.darkMode ? Color.mSecondary : Color.mOnSecondary
} }
NText { NLabel {
text: root.customCmdGetNumUpdates || pluginApi?.mainInstance?.updater.cmdGetNumUpdates || "NA" description: `> ${root.customCmdGetNumUpdates || pluginApi?.mainInstance?.updater.cmdGetNumUpdates || "NA"}`
color: Settings.data.colorSchemes.darkMode ? Color.mTertiary : Color.mOnTertiary
} }
} }
RowLayout { ColumnLayout {
NText { NText {
Layout.fillWidth: true
text: pluginApi?.tr("settings.currentUpdateCmd.label") text: pluginApi?.tr("settings.currentUpdateCmd.label")
color: Settings.data.colorSchemes.darkMode ? Color.mSecondary : Color.mOnSecondary color: Settings.data.colorSchemes.darkMode ? Color.mSecondary : Color.mOnSecondary
} }
NText {
text: root.customCmdDoSystemUpdate || pluginApi?.mainInstance?.updater.cmdDoSystemUpdate || "NA" NLabel {
color: Settings.data.colorSchemes.darkMode ? Color.mTertiary : Color.mOnTertiary description: `> ${root.customCmdDoSystemUpdate || pluginApi?.mainInstance?.updater.cmdDoSystemUpdate || "NA"}`
}
} }
} }

View File

@@ -0,0 +1,47 @@
{
"settings": {
"changeIcon": {
"label": "Ikon kiválasztása"
},
"currentCommands": {
"label": "Jelenleg beállított parancsok"
},
"currentIconName": {
"desc": "Jelenleg beállított ikon neve.",
"label": "Ikonazonosító"
},
"currentNumUpdatesCmd": {
"label": "Frissítések száma"
},
"currentUpdateCmd": {
"label": "Rendszerfrissítés"
},
"customCmdDoSystemUpdate": {
"desc": "A rendszerfrissítés végrehajtásához használt shell parancs.",
"label": "Egyedi rendszerfrissítési parancs",
"placeholder": "e.g., yay -Syu"
},
"customCmdGetNumUpdates": {
"desc": "Shell parancs, amelynek egyetlen egész számot kell kiírnia, ami a rendelkezésre álló frissítések számát jelöli.",
"label": "Egyéni frissítésszám parancs",
"placeholder": "e.g., yay -Quq 2>/dev/null | wc -l"
},
"hideWidget": {
"desc": "Akkor rejtse el a widgetet, ha a rendelkezésre álló frissítések száma 0.",
"label": "Elrejtés nulla frissítés esetén"
},
"terminal": {
"desc": "A rendszerfrissítés végrehajtásához használt terminálparancs. Opcionális: {} a frissítési parancshoz.",
"label": "Terminálemulátor",
"placeholder": "pl.: foot -e, hyprctl dispatch exec '[float] kitty -e {}'-plural"
},
"updateInterval": {
"desc": "Lekérdezési időtartam a frissítések ellenőrzéséhez",
"label": "Frissítések ellenőrzésének gyakorisága"
}
},
"tooltip": {
"noUpdatesAvailable": "Nincsenek észlelt frissítések",
"updatesAvailable": "Kattintson a beállított rendszerfrissítési parancs futtatásához"
}
}

View File

@@ -0,0 +1,47 @@
{
"settings": {
"changeIcon": {
"label": "Îkon Hilbijêre"
},
"currentCommands": {
"label": "Niha emrên hatine sazkirin"
},
"currentIconName": {
"desc": "Navê îkona ku niha hatiye vesazkirin.",
"label": "Nasnameya Îkonê"
},
"currentNumUpdatesCmd": {
"label": "Hejmara nûvekirinê"
},
"currentUpdateCmd": {
"label": "Nûkirina sîstemê"
},
"customCmdDoSystemUpdate": {
"desc": "Fermana şêlê ya ku ji bo pêkanîna nûvekirina pergalê tê bikaranîn.",
"label": "Fermana Nûvekirina Sîstemê ya Xweser",
"placeholder": "mînak, yay -Syu"
},
"customCmdGetNumUpdates": {
"desc": "Fermana shellê ya ku divê yek hejmarek temam derxe ku hejmara nûvekirinên berdest nîşan dide.",
"label": "Fermana Jimartinê ya Hejmara Nûvekirinê ya Xweser",
"placeholder": "mînak, yay -Quq 2>/dev/null | wc -l"
},
"hideWidget": {
"desc": "Demaşê widgetê gava jimara nûkirinên berdest 0 be.",
"label": "Veşartin li ser Nûkirinên Sifir"
},
"terminal": {
"desc": "Fermana termînalê ya ku ji bo pêkanîna fermana nûvekirina pergalê tê bikaranîn. Vebijêrkî: {} ji bo fermana nûvekirinê.",
"label": "Emulatorê Termînalê",
"placeholder": "mînak, foot -e, hyprctl dispatch exec '[float] kitty -e {}'"
},
"updateInterval": {
"desc": "Demê dûrî ji bo kontrolên nûvekirinê",
"label": "Demê Kontrolkirina Nûvekirinê"
}
},
"tooltip": {
"noUpdatesAvailable": "Tu nûvekirin hatin dîtin",
"updatesAvailable": "Bitikîne da fermana nûkirina pergalê ya hatî vesazkirin bimeşîne"
}
}

View File

@@ -0,0 +1,47 @@
{
"settings": {
"changeIcon": {
"label": "Wybierz ikonę"
},
"currentCommands": {
"label": "Obecnie skonfigurowane polecenia"
},
"currentIconName": {
"desc": "Aktualnie skonfigurowana nazwa ikony.",
"label": "Identyfikator ikony"
},
"currentNumUpdatesCmd": {
"label": "Liczba aktualizacji"
},
"currentUpdateCmd": {
"label": "Aktualizacja systemu"
},
"customCmdDoSystemUpdate": {
"desc": "Polecenie powłoki używane do przeprowadzania aktualizacji systemu.",
"label": "Niestandardowe polecenie aktualizacji systemu",
"placeholder": "np. yay -Syu"
},
"customCmdGetNumUpdates": {
"desc": "Polecenie powłoki, które musi zwrócić pojedynczą liczbę całkowitą reprezentującą liczbę dostępnych aktualizacji.",
"label": "Własna komenda aktualizująca liczbę",
"placeholder": "np. yay -Quq 2>/dev/null | wc -l"
},
"hideWidget": {
"desc": "Ukryj widżet, gdy liczba dostępnych aktualizacji wynosi 0.",
"label": "Ukryj przy braku aktualizacji"
},
"terminal": {
"desc": "Polecenie terminala używane do wykonywania polecenia aktualizacji systemu. Opcjonalne: {} dla polecenia aktualizacji.",
"label": "Emulator terminala",
"placeholder": "np. foot -e, hyprctl dispatch exec '[float] kitty -e {}'"
},
"updateInterval": {
"desc": "Interwał odpytywania dla sprawdzania aktualizacji",
"label": "Interwał sprawdzania aktualizacji"
}
},
"tooltip": {
"noUpdatesAvailable": "Nie wykryto aktualizacji",
"updatesAvailable": "Kliknij, aby uruchomić skonfigurowane polecenie aktualizacji systemu"
}
}

View File

@@ -0,0 +1,47 @@
{
"settings": {
"changeIcon": {
"label": "選取圖示"
},
"currentCommands": {
"label": "現在所設定的指令"
},
"currentIconName": {
"desc": "現在所設定的圖示名稱",
"label": "圖示識別"
},
"currentNumUpdatesCmd": {
"label": "更新數量"
},
"currentUpdateCmd": {
"label": "系統更新"
},
"customCmdDoSystemUpdate": {
"desc": "用來執行系統更新的 shell 指令",
"label": "自訂系統更新指令",
"placeholder": "例如: yay -Syu"
},
"customCmdGetNumUpdates": {
"desc": "所使用的 shell 指令必須要輸出用來表示數量的整數值 (int)",
"label": "自訂更新數量指令",
"placeholder": "例如: yay -Quq 2>/dev/null | wc -l"
},
"hideWidget": {
"desc": "當可以更新的套件數量是0時隱藏小工具",
"label": "零更新時隱藏"
},
"terminal": {
"desc": "用來執行系統更新指令用的終端機指令; 可選用: 以 {} 作為更新指令",
"label": "終端機",
"placeholder": "例如 foot -e, hyprctl dispatch exec '[float] kitty -e {}'"
},
"updateInterval": {
"desc": "確認更新的時間間格",
"label": "更新檢查間格"
}
},
"tooltip": {
"noUpdatesAvailable": "沒有偵測到更新",
"updatesAvailable": "點擊以執行設定好的系統更新指令"
}
}

View File

@@ -1,7 +1,7 @@
{ {
"id": "update-count", "id": "update-count",
"name": "Update Count", "name": "Update Count",
"version": "1.0.9", "version": "1.0.11",
"minNoctaliaVersion": "3.6.0", "minNoctaliaVersion": "3.6.0",
"author": "BukoMoon", "author": "BukoMoon",
"license": "GPLv3", "license": "GPLv3",

View File

@@ -1,14 +1,14 @@
[ [
{ {
"name": "yay", "name": "yay",
"cmdCheck": "command -v yay >/dev/null 2>&1", "cmdCheck": "command -v checkupdates >/dev/null 2>&1 && command -v yay >/dev/null 2>&1",
"cmdGetNumUpdates": "yay -Qu 2>/dev/null | wc -l", "cmdGetNumUpdates": "(checkupdates 2>/dev/null; yay -Qua 2>/dev/null) | wc -l",
"cmdDoSystemUpdate": "yay -Syu" "cmdDoSystemUpdate": "yay -Syu"
}, },
{ {
"name": "paru", "name": "paru",
"cmdCheck": "command -v paru >/dev/null 2>&1", "cmdCheck": "command -v checkupdates >/dev/null 2>&1 && command -v paru >/dev/null 2>&1",
"cmdGetNumUpdates": "paru -Qu 2>/dev/null | wc -l", "cmdGetNumUpdates": "(checkupdates 2>/dev/null; paru -Qua 2>/dev/null) | wc -l",
"cmdDoSystemUpdate": "paru -Syu" "cmdDoSystemUpdate": "paru -Syu"
}, },
{ {

View File

@@ -1,6 +1,8 @@
{ {
"appLauncher": { "appLauncher": {
"autoPasteClipboard": false, "autoPasteClipboard": false,
"clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
"clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
"clipboardWrapText": true, "clipboardWrapText": true,
"customLaunchPrefix": "", "customLaunchPrefix": "",
"customLaunchPrefixEnabled": false, "customLaunchPrefixEnabled": false,
@@ -32,12 +34,15 @@
}, },
"bar": { "bar": {
"backgroundOpacity": 0.93, "backgroundOpacity": 0.93,
"barType": "simple",
"capsuleOpacity": 1, "capsuleOpacity": 1,
"density": "comfortable", "density": "comfortable",
"exclusive": true, "exclusive": true,
"floating": false, "floating": false,
"frameRadius": 12,
"frameThickness": 8,
"hideOnOverview": false, "hideOnOverview": false,
"marginHorizontal": 5, "marginHorizontal": 10,
"marginVertical": 5, "marginVertical": 5,
"monitors": [ "monitors": [
], ],
@@ -104,14 +109,19 @@
{ {
"characterCount": 10, "characterCount": 10,
"colorizeIcons": false, "colorizeIcons": false,
"emptyColor": "secondary",
"enableScrollWheel": true, "enableScrollWheel": true,
"focusedColor": "primary",
"followFocusedScreen": false, "followFocusedScreen": false,
"groupedBorderOpacity": 1, "groupedBorderOpacity": 1,
"hideUnoccupied": true, "hideUnoccupied": true,
"iconScale": 0.8, "iconScale": 0.8,
"id": "Workspace", "id": "Workspace",
"labelMode": "name", "labelMode": "name",
"occupiedColor": "secondary",
"reverseScroll": false,
"showApplications": false, "showApplications": false,
"showBadge": true,
"showLabelsOnlyWhenOccupied": true, "showLabelsOnlyWhenOccupied": true,
"unfocusedIconsOpacity": 1 "unfocusedIconsOpacity": 1
}, },
@@ -387,8 +397,10 @@
}, },
"general": { "general": {
"allowPanelsOnScreenWithoutBar": true, "allowPanelsOnScreenWithoutBar": true,
"allowPasswordWithFprintd": false,
"animationDisabled": false, "animationDisabled": false,
"animationSpeed": 1, "animationSpeed": 1,
"autoStartAuth": false,
"avatarImage": "/home/aiden/.face", "avatarImage": "/home/aiden/.face",
"boxRadiusRatio": 1, "boxRadiusRatio": 1,
"compactLockScreen": false, "compactLockScreen": false,
@@ -544,7 +556,7 @@
"showHeader": true, "showHeader": true,
"showNumberLabels": true "showNumberLabels": true
}, },
"settingsVersion": 44, "settingsVersion": 46,
"systemMonitor": { "systemMonitor": {
"cpuCriticalThreshold": 90, "cpuCriticalThreshold": 90,
"cpuPollingInterval": 3000, "cpuPollingInterval": 3000,
@@ -588,6 +600,10 @@
{ {
"enabled": true, "enabled": true,
"id": "niri" "id": "niri"
},
{
"enabled": true,
"id": "btop"
} }
], ],
"enableUserTheming": false "enableUserTheming": false