From 13c920fd32b15e2d8cf09b7020f7595c2ce37402 Mon Sep 17 00:00:00 2001 From: Aiden Gerbrandt Date: Fri, 23 Jan 2026 20:20:57 -0600 Subject: [PATCH] update --- etc/cron.d/zfs-auto-snapshot.new-1.2.4_3 | 2 + etc/cron.daily/zfs-auto-snapshot.new-1.2.4_3 | 6 + etc/cron.hourly/sddm-background | 6 + etc/cron.hourly/zfs-auto-snapshot.new-1.2.4_3 | 6 + .../zfs-auto-snapshot.new-1.2.4_3 | 6 + etc/cron.weekly/zfs-auto-snapshot.new-1.2.4_3 | 6 + home/aiden/.config/niri/noctalia.kdl | 11 +- home/aiden/.config/niri/startup.kdl | 9 +- home/aiden/.config/niri/style.kdl | 4 +- home/aiden/.config/noctalia/pam/password.conf | 4 +- home/aiden/.config/noctalia/plugins.json | 10 +- .../plugins/screen-recorder/BarWidget.qml | 83 ++++ .../screen-recorder/ControlCenterWidget.qml | 22 + .../noctalia/plugins/screen-recorder/Main.qml | 417 ++++++++++++++++++ .../plugins/screen-recorder/README.md | 124 ++++++ .../plugins/screen-recorder/Settings.qml | 395 +++++++++++++++++ .../plugins/screen-recorder/i18n/de.json | 69 +++ .../plugins/screen-recorder/i18n/en.json | 70 +++ .../plugins/screen-recorder/i18n/es.json | 69 +++ .../plugins/screen-recorder/i18n/fr.json | 69 +++ .../plugins/screen-recorder/i18n/hu.json | 69 +++ .../plugins/screen-recorder/i18n/it.json | 69 +++ .../plugins/screen-recorder/i18n/ja.json | 69 +++ .../plugins/screen-recorder/i18n/ku.json | 69 +++ .../plugins/screen-recorder/i18n/nl.json | 69 +++ .../plugins/screen-recorder/i18n/pl.json | 69 +++ .../plugins/screen-recorder/i18n/pt.json | 69 +++ .../plugins/screen-recorder/i18n/ru.json | 69 +++ .../plugins/screen-recorder/i18n/tr.json | 69 +++ .../plugins/screen-recorder/i18n/uk-UA.json | 69 +++ .../plugins/screen-recorder/i18n/zh-CN.json | 70 +++ .../plugins/screen-recorder/manifest.json | 39 ++ .../plugins/screen-recorder/preview.png | Bin 0 -> 130533 bytes .../plugins/update-count/BarWidget.qml | 2 +- .../plugins/update-count/manifest.json | 3 +- .../plugins/update-count/updaterConfigs.json | 4 +- home/aiden/.config/noctalia/settings.json | 223 ++++++---- 37 files changed, 2312 insertions(+), 107 deletions(-) create mode 100644 etc/cron.d/zfs-auto-snapshot.new-1.2.4_3 create mode 100755 etc/cron.daily/zfs-auto-snapshot.new-1.2.4_3 create mode 100755 etc/cron.hourly/sddm-background create mode 100755 etc/cron.hourly/zfs-auto-snapshot.new-1.2.4_3 create mode 100755 etc/cron.monthly/zfs-auto-snapshot.new-1.2.4_3 create mode 100755 etc/cron.weekly/zfs-auto-snapshot.new-1.2.4_3 create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/BarWidget.qml create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/ControlCenterWidget.qml create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/Main.qml create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/README.md create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/Settings.qml create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/de.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/en.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/es.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/fr.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/hu.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/it.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ja.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ku.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/nl.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pl.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pt.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ru.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/tr.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/uk-UA.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/i18n/zh-CN.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/manifest.json create mode 100644 home/aiden/.config/noctalia/plugins/screen-recorder/preview.png diff --git a/etc/cron.d/zfs-auto-snapshot.new-1.2.4_3 b/etc/cron.d/zfs-auto-snapshot.new-1.2.4_3 new file mode 100644 index 0000000..f4b1006 --- /dev/null +++ b/etc/cron.d/zfs-auto-snapshot.new-1.2.4_3 @@ -0,0 +1,2 @@ + +*/15 * * * * root command -v zfs-auto-snapshot > /dev/null || exit 0 ; zfs-auto-snapshot --quiet --syslog --label=frequent --keep=4 // diff --git a/etc/cron.daily/zfs-auto-snapshot.new-1.2.4_3 b/etc/cron.daily/zfs-auto-snapshot.new-1.2.4_3 new file mode 100755 index 0000000..2694961 --- /dev/null +++ b/etc/cron.daily/zfs-auto-snapshot.new-1.2.4_3 @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --label=daily --keep=31 // diff --git a/etc/cron.hourly/sddm-background b/etc/cron.hourly/sddm-background new file mode 100755 index 0000000..2eaaee7 --- /dev/null +++ b/etc/cron.hourly/sddm-background @@ -0,0 +1,6 @@ +#!/bin/sh + +#only call if script is there +command -v /home/aiden/sddm-random-background.sh >/dev/null || exit 0 + +exec /home/aiden/sddm-random-background.sh diff --git a/etc/cron.hourly/zfs-auto-snapshot.new-1.2.4_3 b/etc/cron.hourly/zfs-auto-snapshot.new-1.2.4_3 new file mode 100755 index 0000000..217139a --- /dev/null +++ b/etc/cron.hourly/zfs-auto-snapshot.new-1.2.4_3 @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --label=hourly --keep=24 // diff --git a/etc/cron.monthly/zfs-auto-snapshot.new-1.2.4_3 b/etc/cron.monthly/zfs-auto-snapshot.new-1.2.4_3 new file mode 100755 index 0000000..6f8025f --- /dev/null +++ b/etc/cron.monthly/zfs-auto-snapshot.new-1.2.4_3 @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --label=monthly --keep=12 // diff --git a/etc/cron.weekly/zfs-auto-snapshot.new-1.2.4_3 b/etc/cron.weekly/zfs-auto-snapshot.new-1.2.4_3 new file mode 100755 index 0000000..01f9536 --- /dev/null +++ b/etc/cron.weekly/zfs-auto-snapshot.new-1.2.4_3 @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --label=weekly --keep=8 // diff --git a/home/aiden/.config/niri/noctalia.kdl b/home/aiden/.config/niri/noctalia.kdl index 5968944..d1c77ed 100644 --- a/home/aiden/.config/niri/noctalia.kdl +++ b/home/aiden/.config/niri/noctalia.kdl @@ -13,12 +13,12 @@ layout { } shadow { - color "#00000070" + color "#11111b70" } tab-indicator { active-color "#cba6f7" - inactive-color "#460594" + inactive-color "#6b02e9" urgent-color "#f38ba8" } @@ -26,3 +26,10 @@ layout { color "#cba6f780" } } + +recent-windows { + highlight { + active-color "#cba6f7" + urgent-color "#f38ba8" + } +} diff --git a/home/aiden/.config/niri/startup.kdl b/home/aiden/.config/niri/startup.kdl index b973b9b..d9f7025 100644 --- a/home/aiden/.config/niri/startup.kdl +++ b/home/aiden/.config/niri/startup.kdl @@ -13,18 +13,23 @@ spawn-at-startup "/usr/bin/swayidle" "-w" workspace "chat" { open-on-output "DP-3" } +window-rule { + match app-id="nheko" + open-on-workspace "chat" +} +spawn-at-startup "/usr/bin/flatpak" "run" "im.nheko.Nheko" window-rule { match app-id="Element" open-on-workspace "chat" } -spawn-at-startup "/usr/bin/element-desktop" +//spawn-at-startup "/usr/bin/element-desktop" //"--enable-features=UseOzonePlatform" "--ozone-platform=wayland" window-rule { match app-id="discord" open-on-workspace "chat" } //spawn-at-startup "/usr/bin/flatpak" "run" "--socket=wayland" "com.discordapp.Discord" "--enable-features=UseOzonePlatform" "--ozone-platform=wayland" -spawn-at-startup "/usr/local/bin/discord-delay.sh" +//spawn-at-startup "/usr/local/bin/discord-delay.sh" //window-rule { // match app-id="srain" // open-on-workspace "chat" diff --git a/home/aiden/.config/niri/style.kdl b/home/aiden/.config/niri/style.kdl index 3cb8b69..35f2f9d 100644 --- a/home/aiden/.config/niri/style.kdl +++ b/home/aiden/.config/niri/style.kdl @@ -93,11 +93,11 @@ animations { // enable transparency window-rule { match is-active=false - opacity 0.8 //inactive transparency + opacity 1.0 //inactive transparency } window-rule { match is-active=true - opacity 0.95 //active transparency + opacity 1.0 //active transparency } window-rule { draw-border-with-background false diff --git a/home/aiden/.config/noctalia/pam/password.conf b/home/aiden/.config/noctalia/pam/password.conf index 68fc325..a659b71 100644 --- a/home/aiden/.config/noctalia/pam/password.conf +++ b/home/aiden/.config/noctalia/pam/password.conf @@ -1,3 +1,3 @@ -#auth sufficient pam_fprintd.so max-tries=1 -# only uncomment this if you have a fingerprint reader +auth sufficient pam_fprintd.so timeout=-1 +auth sufficient /run/current-system/sw/lib/security/pam_fprintd.so timeout=-1 # for NixOS auth required pam_unix.so diff --git a/home/aiden/.config/noctalia/plugins.json b/home/aiden/.config/noctalia/plugins.json index 1c44f01..0766f9c 100644 --- a/home/aiden/.config/noctalia/plugins.json +++ b/home/aiden/.config/noctalia/plugins.json @@ -8,10 +8,16 @@ ], "states": { "privacy-indicator": { - "enabled": true + "enabled": true, + "sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins" + }, + "screen-recorder": { + "enabled": true, + "sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins" }, "update-count": { - "enabled": true + "enabled": true, + "sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins" } }, "version": 1 diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/BarWidget.qml b/home/aiden/.config/noctalia/plugins/screen-recorder/BarWidget.qml new file mode 100644 index 0000000..1eb7bb8 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/BarWidget.qml @@ -0,0 +1,83 @@ +import QtQuick +import QtQuick.Layouts +import Quickshell +import qs.Commons +import qs.Services.UI +import qs.Services.System +import qs.Widgets + +NIconButton { + id: root + + property var pluginApi: null + property ShellScreen screen + property string widgetId: "" + property string section: "" + + readonly property var mainInstance: pluginApi?.mainInstance + + enabled: mainInstance?.isAvailable ?? false + icon: "camera-video" + tooltipText: mainInstance?.buildTooltip() + tooltipDirection: BarService.getTooltipDirection() + baseSize: Style.capsuleHeight + applyUiScale: false + customRadius: Style.radiusL + colorBg: mainInstance?.isRecording ? Color.mPrimary : Style.capsuleColor + colorFg: mainInstance?.isRecording ? Color.mOnPrimary : Color.mOnSurface + colorBorder: "transparent" + colorBorderHover: "transparent" + border.color: Style.capsuleBorderColor + border.width: Style.capsuleBorderWidth + + onClicked: { + if (!enabled) { + ToastService.showError(pluginApi.tr("messages.not-installed"), pluginApi.tr("messages.not-installed-desc")) + return + } + + if (mainInstance) { + mainInstance.toggleRecording() + if (!mainInstance.isRecording && !mainInstance.isPending) { + // Recording was stopped, close control center if open + var controlCenter = PanelService.getPanel("controlCenterPanel", screen) + if (controlCenter) { + controlCenter.close() + } + } + } + } + + onRightClicked: { + var popupMenuWindow = PanelService.getPopupMenuWindow(screen); + if (popupMenuWindow) { + popupMenuWindow.showContextMenu(contextMenu); + contextMenu.openAtItem(root, screen); + } + } + + + NPopupContextMenu { + id: contextMenu + + model: [ + { + "label": I18n.tr("actions.widget-settings"), + "action": "widget-settings", + "icon": "settings" + }, + ] + + onTriggered: action => { + var popupMenuWindow = PanelService.getPopupMenuWindow(screen); + if (popupMenuWindow) { + popupMenuWindow.close(); + } + + if (action === "widget-settings") { + BarService.openPluginSettings(screen, pluginApi.manifest); + } + } + } + +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/ControlCenterWidget.qml b/home/aiden/.config/noctalia/plugins/screen-recorder/ControlCenterWidget.qml new file mode 100644 index 0000000..7aa7520 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/ControlCenterWidget.qml @@ -0,0 +1,22 @@ + +import QtQuick +import Quickshell +import qs.Widgets +import qs.Commons + +NIconButton { + property ShellScreen screen + property var pluginApi: null + readonly property var mainInstance: pluginApi?.mainInstance + + enabled: mainInstance?.isAvailable ?? false + icon: "camera-video" + tooltipText: mainInstance?.buildTooltip() + colorFg: mainInstance?.isRecording ? Color.mOnPrimary : Color.mPrimary + colorBg: mainInstance?.isRecording ? Color.mPrimary : Style.capsuleColor + onClicked: { + if (pluginApi && pluginApi.mainInstance) { + pluginApi.mainInstance.toggleRecording(); + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/Main.qml b/home/aiden/.config/noctalia/plugins/screen-recorder/Main.qml new file mode 100644 index 0000000..6283dd0 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/Main.qml @@ -0,0 +1,417 @@ +import QtQuick +import Quickshell +import Quickshell.Io +import qs.Commons +import qs.Services.UI +import qs.Services.System + +Item { + id: root + + property var pluginApi: null + + property bool isRecording: false + property bool isPending: false + property bool hasActiveRecording: false + property string outputPath: "" + property bool isAvailable: false + + // Single reusable Process object + Process { + id: checker + running: true + command: ["sh", "-c", "command -v gpu-screen-recorder >/dev/null 2>&1 || (command -v flatpak >/dev/null 2>&1 && flatpak list --app | grep -q 'com.dec05eba.gpu_screen_recorder')"] + + onExited: function (exitCode) { + isAvailable = (exitCode === 0); + running = false; + } + + stdout: StdioCollector {} + stderr: StdioCollector {} + } + + IpcHandler { + target: "plugin:screen-recorder" + + function toggle() { + if (root.isAvailable) { + root.toggleRecording() + } + } + + function start() { + if (root.isAvailable && !root.isRecording && !root.isPending) { + root.startRecording() + } + } + + function stop() { + if (root.isRecording || root.isPending) { + root.stopRecording() + } + } + } + + // Settings shortcuts + readonly property string directory: pluginApi?.pluginSettings?.directory || "" + readonly property string filenamePattern: pluginApi?.pluginSettings?.filenamePattern || "recording_yyyyMMdd_HHmmss" + readonly property string frameRate: pluginApi?.pluginSettings?.frameRate || "60" + readonly property string audioCodec: pluginApi?.pluginSettings?.audioCodec || "opus" + readonly property string videoCodec: pluginApi?.pluginSettings?.videoCodec || "h264" + readonly property string quality: pluginApi?.pluginSettings?.quality || "very_high" + readonly property string colorRange: pluginApi?.pluginSettings?.colorRange || "limited" + readonly property bool showCursor: pluginApi?.pluginSettings?.showCursor ?? true + readonly property bool copyToClipboard: pluginApi?.pluginSettings?.copyToClipboard ?? false + readonly property string audioSource: pluginApi?.pluginSettings?.audioSource || "default_output" + readonly property string videoSource: pluginApi?.pluginSettings?.videoSource || "portal" + readonly property string resolution: pluginApi?.pluginSettings?.resolution || "original" + + function buildTooltip() { + if (!isAvailable) { + return pluginApi.tr("messages.not-installed") + } + + if (isPending) { + pluginApi.tr("messages.started") + } + + if (isRecording) { + return pluginApi.tr("messages.stop-recording") + } + + return pluginApi.tr("messages.start-recording") + } + + + // Start or Stop recording + function toggleRecording() { + (isRecording || isPending) ? stopRecording() : startRecording() + } + + // Open recording file + function openFile(path) { + if (!path) { + return + } + Quickshell.execDetached(["xdg-open", path]) + } + + // Copy file to clipboard as file reference + function copyFileToClipboard(filePath) { + if (!filePath) { + return + } + // Convert path to file:// URI format for copying as file reference + const fileUri = "file://" + filePath.replace(/ /g, "%20").replace(/'/g, "%27").replace(/"/g, "%22") + const escapedUri = fileUri.replace(/'/g, "'\\''") + const command = "printf '%s' '" + escapedUri + "' | wl-copy --type text/uri-list" + copyToClipboardProcess.exec({ + "command": ["sh", "-c", command] + }) + } + + // Start screen recording + function startRecording() { + if (!isAvailable) { + return + } + if (isRecording || isPending) { + return + } + isPending = true + hasActiveRecording = false + + // Close any opened panel + if ((PanelService.openedPanel !== null) && !PanelService.openedPanel.isClosing) { + PanelService.openedPanel.close() + } + + // First, ensure xdg-desktop-portal and a compositor portal are running + portalCheckProcess.exec({ + "command": ["sh", "-c", + "pidof xdg-desktop-portal >/dev/null 2>&1 && (pidof xdg-desktop-portal-wlr >/dev/null 2>&1 || pidof xdg-desktop-portal-hyprland >/dev/null 2>&1 || pidof xdg-desktop-portal-gnome >/dev/null 2>&1 || pidof xdg-desktop-portal-kde >/dev/null 2>&1)"] + }) + } + + function expandFilenamePattern(pattern) { + var now = new Date() + + // Known Qt date/time format tokens sorted by length (longest first to match greedily) + var tokens = ['unix', 'MMMM', 'dddd', 'yyyy', 'MMM', 'ddd', 'zzz', 'HH', 'hh', 'mm', 'ss', + 'yy', 'MM', 'dd', 'AP', 'ap', 'M', 'd', 'H', 'h', 'm', 's', 'z', 'A', 'a', 't']; + + // Escape literal text by wrapping non-token sequences in single quotes + var escaped = ""; + var i = 0; + var literalBuffer = ""; + + while (i < pattern.length) { + var matched = false; + + // Try to match each token at current position (longest first) + for (var j = 0; j < tokens.length; j++) { + var token = tokens[j]; + if (pattern.substr(i, token.length) === token) { + // Check if this is a single-letter token that might be part of a word + // Only match single letters if they're preceded/followed by non-letter or another token + if (token.length === 1) { + var prevChar = i > 0 ? pattern[i - 1] : ""; + var nextChar = i + 1 < pattern.length ? pattern[i + 1] : ""; + // If surrounded by letters, it's probably part of a word, not a token + if ((prevChar.match(/[a-zA-Z]/) || nextChar.match(/[a-zA-Z]/))) { + continue; // Skip this token match, treat as literal + } + } + + // Flush any accumulated literal text + if (literalBuffer) { + escaped += "'" + literalBuffer + "'"; + literalBuffer = ""; + } + + if (token === 'unix') { + // Replace 'unix' token with the actual timestamp literal + // Do not wrap in quotes to avoid creating '' sequences which are interpreted as escaped quotes + escaped += Math.floor(now.getTime() / 1000); + } else { + // Add other tokens as-is + escaped += token; + } + + i += token.length; + matched = true; + break; + } + } + + if (!matched) { + // Character is not part of a token, add to literal buffer + literalBuffer += pattern[i]; + i++; + } + } + + // Flush any remaining literal text + if (literalBuffer) { + escaped += "'" + literalBuffer + "'"; + } + + // Use Qt's I18n.locale.toString for proper date/time formatting + var expanded = I18n.locale.toString(now, escaped) + return expanded + ".mp4" + } + + function launchRecorder() { + var pattern = filenamePattern || "recording_yyyyMMdd_HHmmss" + var filename = expandFilenamePattern(pattern) + var videoDir = Settings.preprocessPath(directory) + if (!videoDir) { + videoDir = Quickshell.env("HOME") + "/Videos" + } + if (videoDir && !videoDir.endsWith("/")) { + videoDir += "/" + } + outputPath = videoDir + filename + + const audioFlags = (() => { + if (audioSource === "none") { + return "" + } + if (audioSource === "both") { + return `-ac ${audioCodec} -a "default_output|default_input"` + } + return `-ac ${audioCodec} -a ${audioSource}` + })() + + var resolutionFlag = (resolution !== "original") ? `-s ${resolution}` : "" + var flags = `-w ${videoSource} -f ${frameRate} -k ${videoCodec} ${audioFlags} -q ${quality} -cursor ${showCursor ? "yes" : "no"} -cr ${colorRange} ${resolutionFlag} -o "${outputPath}"` + var command = ` + _gpuscreenrecorder_flatpak_installed() { + flatpak list --app | grep -q "com.dec05eba.gpu_screen_recorder" + } + if command -v gpu-screen-recorder >/dev/null 2>&1; then + gpu-screen-recorder ${flags} + elif command -v flatpak >/dev/null 2>&1 && _gpuscreenrecorder_flatpak_installed; then + flatpak run --command=gpu-screen-recorder --file-forwarding com.dec05eba.gpu_screen_recorder ${flags} + else + echo "GPU_SCREEN_RECORDER_NOT_INSTALLED" + fi` + + // Use Process to monitor it and read stderr + recorderProcess.exec({ + "command": ["sh", "-c", command] + }) + + // Start monitoring - if process ends quickly, it was likely cancelled + pendingTimer.running = true + } + + // Stop recording + function stopRecording() { + if (!isRecording && !isPending) { + return + } + + ToastService.showNotice(pluginApi.tr("messages.stopping"), outputPath, "video") + + Quickshell.execDetached(["sh", "-c", "pkill -SIGINT -f 'gpu-screen-recorder' || pkill -SIGINT -f 'com.dec05eba.gpu_screen_recorder'"]) + + isRecording = false + isPending = false + pendingTimer.running = false + monitorTimer.running = false + hasActiveRecording = false + + // Just in case, force kill after 3 seconds + killTimer.running = true + } + + // Helper function to truncate text for toast display + function truncateForToast(text, maxLength = 128) { + if (text.length <= maxLength) return text + return text.substring(0, maxLength) + "…" + } + + // Helper function to check if output indicates user cancellation + function isCancelledByUser(stdoutText, stderrText) { + const stdout = String(stdoutText || "").toLowerCase() + const stderr = String(stderrText || "").toLowerCase() + const combined = stdout + " " + stderr + return combined.includes("canceled by") || combined.includes("cancelled by") || + combined.includes("canceled by user") || combined.includes("cancelled by user") || + combined.includes("canceled by the user") || combined.includes("cancelled by the user") + } + + // Process to run and monitor gpu-screen-recorder + Process { + id: recorderProcess + stdout: StdioCollector {} + stderr: StdioCollector {} + onExited: function (exitCode, exitStatus) { + const stdout = String(recorderProcess.stdout.text || "").trim() + const stderr = String(recorderProcess.stderr.text || "").trim() + const wasCancelled = isCancelledByUser(stdout, stderr) + + if (isPending) { + // Process ended while we were pending - likely cancelled or error + isPending = false + pendingTimer.running = false + + // Check if gpu-screen-recorder is not installed + if (stdout === "GPU_SCREEN_RECORDER_NOT_INSTALLED") { + ToastService.showError(pluginApi.tr("messages.not-installed"), pluginApi.tr("messages.not-installed-desc")) + return + } + + // If it failed to start, show a clear error toast with stderr + // But don't show error if user intentionally cancelled via portal + if (exitCode !== 0) { + if (stderr.length > 0 && !wasCancelled) { + ToastService.showError(pluginApi.tr("messages.failed-start"), truncateForToast(stderr)) + Logger.e("ScreenRecorder", stderr) + } + } + } else if (isRecording || hasActiveRecording) { + // Process ended normally while recording + isRecording = false + monitorTimer.running = false + if (exitCode === 0) { + // ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video") + ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video", 3000, pluginApi.tr("messages.open-file"), () => openFile(outputPath)) + + if (copyToClipboard) { + copyFileToClipboard(outputPath) + } + } else { + // Don't show error if user intentionally cancelled + if (!wasCancelled) { + if (stderr.length > 0) { + ToastService.showError(pluginApi.tr("messages.failed-start"), truncateForToast(stderr)) + Logger.e("ScreenRecorder", stderr) + } else { + ToastService.showError(pluginApi.tr("messages.failed-start"), pluginApi.tr("messages.failed-general")) + } + } + } + hasActiveRecording = false + } else if (!isPending && exitCode === 0 && outputPath) { + // Fallback: if process exited successfully with an outputPath, handle it + // ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video") + ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video", 3000, pluginApi.tr("messages.open-file"), () => openFile(outputPath)) + + if (copyToClipboard) { + copyFileToClipboard(outputPath) + } + } + } + } + + // Pre-flight check for xdg-desktop-portal + Process { + id: portalCheckProcess + onExited: function (exitCode, exitStatus) { + if (exitCode === 0) { + // Portals available, proceed to launch + launchRecorder() + } else { + isPending = false + hasActiveRecording = false + ToastService.showError(pluginApi.tr("messages.no-portals"), pluginApi.tr("messages.no-portals-desc")) + } + } + } + + // Process to copy file to clipboard + Process { + id: copyToClipboardProcess + onExited: function (exitCode, exitStatus) { + if (exitCode !== 0) { + Logger.e("ScreenRecorder", "Failed to copy file to clipboard, exit code:", exitCode) + } + } + } + + Timer { + id: pendingTimer + interval: 2000 // Wait 2 seconds to see if process stays alive + running: false + repeat: false + onTriggered: { + if (isPending && recorderProcess.running) { + // Process is still running after 2 seconds - assume recording started successfully + isPending = false + isRecording = true + hasActiveRecording = true + monitorTimer.running = true + } else if (isPending) { + // Process not running anymore - was cancelled or failed + isPending = false + } + } + } + + // Monitor timer to periodically check if we're still recording + Timer { + id: monitorTimer + interval: 2000 + running: false + repeat: true + onTriggered: { + if (!recorderProcess.running && isRecording) { + isRecording = false + running = false + } + } + } + + Timer { + id: killTimer + interval: 3000 + running: false + repeat: false + onTriggered: { + Quickshell.execDetached(["sh", "-c", "pkill -9 -f 'gpu-screen-recorder' 2>/dev/null || pkill -9 -f 'com.dec05eba.gpu_screen_recorder' 2>/dev/null || true"]) + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/README.md b/home/aiden/.config/noctalia/plugins/screen-recorder/README.md new file mode 100644 index 0000000..5ef30a3 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/README.md @@ -0,0 +1,124 @@ +# Screen Recorder Plugin + +Hardware-accelerated screen recording for Noctalia using [gpu-screen-recorder](https://git.dec05eba.com/gpu-screen-recorder/about/). + +## Features + +- Hardware-accelerated screen recording +- Customizable video codecs (H264, HEVC, AV1, VP8, VP9, HDR variants) +- Audio recording with multiple sources (system output, microphone, both, or none) +- Adjustable frame rates (30-240 FPS) +- Configurable output resolution (Full HD, 4K, QHD, HD, or original) +- Configurable output directory +- Optional clipboard copy after recording +- Optional cursor recording +- Multiple quality presets + +## Requirements + +- **gpu-screen-recorder** - The screen recording backend + - Install via package manager: `gpu-screen-recorder` +- **xdg-desktop-portal** and a compositor portal backend (wlr/hyprland/gnome etc) + +## Installation + +1. Copy this plugin to your Noctalia plugins directory: + ```bash + cp -r screen-recorder ~/.config/noctalia/plugins/ + ``` + +2. Add the widget to your bar through Noctalia settings + +## Usage + +### Bar Widget + +- **Left Click**: Start/stop recording +- **Right Click**: Open plugin settings + +### Settings + +Configure the plugin through the settings panel: + +- **Output Folder**: Where recordings will be saved (defaults to `~/Videos`) +- **Filename Pattern**: Pattern for generated filenames. Supports standard Qt date format tokens (e.g., `yyyy`, `MM`, `dd` etc.) and `unix` for Unix timestamp. +- **Video Source**: Choose between Portal (recommended) or Screen +- **Frame Rate**: Target FPS (30, 60, 100, 120, 144, 165, 240) +- **Video Quality**: Medium, High, Very High, or Ultra +- **Video Codec**: H264, HEVC, AV1, VP8, VP9 (+ HDR variants for screen source) +- **Color Range**: Limited (recommended) or Full +- **Resolution**: Output resolution limit (1920x1080, 2560x1440, 3840x2160, 1280x720, or Original) +- **Audio Source**: None, System Output, Microphone, or Both +- **Audio Codec**: Opus (recommended) or AAC +- **Show Cursor**: Include mouse cursor in recording +- **Copy to Clipboard**: Automatically copy file after recording + +### IPC Commands + +Control the screen recorder via IPC for keybindings or scripts: + +```bash +# Toggle recording on/off +qs -c noctalia-shell ipc call plugin:screen-recorder toggle + +# Explicitly start recording +qs -c noctalia-shell ipc call plugin:screen-recorder start + +# Explicitly stop recording +qs -c noctalia-shell ipc call plugin:screen-recorder stop +``` + +## Video Codecs + +- **H264**: Most compatible, good quality, works everywhere +- **HEVC (H.265)**: Better compression than H264, smaller files +- **AV1**: Best compression, smallest files, newer codec +- **VP8/VP9**: Open-source alternatives +- **HDR variants**: Available when using "Screen" source for high dynamic range content + +## Audio Sources + +- **None**: No audio recording +- **System Output**: Capture system sounds (what you hear) +- **Microphone Input**: Capture from microphone +- **Both**: Record both system and microphone audio + +## Troubleshooting + +### "Screen recorder not installed" error +Install gpu-screen-recorder: +```bash +# Arch Linux +sudo pacman -S gpu-screen-recorder + +# Or via Flatpak +flatpak install com.dec05eba.gpu_screen_recorder +``` + +### "Desktop portals not running" error +Ensure xdg-desktop-portal and a compositor portal are running: +```bash +# Check if portals are running +pidof xdg-desktop-portal +pidof xdg-desktop-portal-wlr # or -hyprland, -gnome, -kde + +# Install if needed (example for Arch) +sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr +``` + +### Recording fails with artifacts +Try changing the video source from "Portal" to "Screen" in settings. + +### Recording stops immediately +- Check if the output directory exists and is writable +- Ensure gpu-screen-recorder has necessary permissions +- Check Noctalia logs for detailed error messages + +## License + +MIT License + +## Credits + +- Uses [gpu-screen-recorder](https://git.dec05eba.com/gpu-screen-recorder/about/) by dec05eba +- Part of the [Noctalia](https://github.com/noctalia-dev/noctalia-shell) plugin ecosystem diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/Settings.qml b/home/aiden/.config/noctalia/plugins/screen-recorder/Settings.qml new file mode 100644 index 0000000..4d6e12e --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/Settings.qml @@ -0,0 +1,395 @@ +import QtQuick +import QtQuick.Layouts +import Quickshell +import qs.Commons +import qs.Widgets +import qs.Services.UI + +ColumnLayout { + id: root + spacing: Style.marginL + + property var pluginApi: null + + property string editDirectory: + pluginApi?.pluginSettings?.directory || + pluginApi?.manifest?.metadata?.defaultSettings?.directory || + "" + + property string editFilenamePattern: + pluginApi?.pluginSettings?.filenamePattern || + pluginApi?.manifest?.metadata?.defaultSettings?.filenamePattern || + "recording_yyyyMMdd_HHmmss" + + property string editFrameRate: + pluginApi?.pluginSettings?.frameRate || + pluginApi?.manifest?.metadata?.defaultSettings?.frameRate || + "60" + + property string editAudioCodec: + pluginApi?.pluginSettings?.audioCodec || + pluginApi?.manifest?.metadata?.defaultSettings?.audioCodec || + "opus" + + property string editVideoCodec: + pluginApi?.pluginSettings?.videoCodec || + pluginApi?.manifest?.metadata?.defaultSettings?.videoCodec || + "h264" + + property string editQuality: + pluginApi?.pluginSettings?.quality || + pluginApi?.manifest?.metadata?.defaultSettings?.quality || + "very_high" + + property string editColorRange: + pluginApi?.pluginSettings?.colorRange || + pluginApi?.manifest?.metadata?.defaultSettings?.colorRange || + "limited" + + property bool editShowCursor: + pluginApi?.pluginSettings?.showCursor ?? + pluginApi?.manifest?.metadata?.defaultSettings?.showCursor ?? + true + + property bool editCopyToClipboard: + pluginApi?.pluginSettings?.copyToClipboard ?? + pluginApi?.manifest?.metadata?.defaultSettings?.copyToClipboard ?? + false + + property string editAudioSource: + pluginApi?.pluginSettings?.audioSource || + pluginApi?.manifest?.metadata?.defaultSettings?.audioSource || + "default_output" + + property string editVideoSource: + pluginApi?.pluginSettings?.videoSource || + pluginApi?.manifest?.metadata?.defaultSettings?.videoSource || + "portal" + + property string editResolution: + pluginApi?.pluginSettings?.resolution || + pluginApi?.manifest?.metadata?.defaultSettings?.resolution || + "original" + + function saveSettings() { + if (!pluginApi) { + Logger.e("ScreenRecorder", "Cannot save: pluginApi is null") + return + } + + pluginApi.pluginSettings.directory = root.editDirectory + pluginApi.pluginSettings.filenamePattern = root.editFilenamePattern + pluginApi.pluginSettings.frameRate = root.editFrameRate + pluginApi.pluginSettings.audioCodec = root.editAudioCodec + pluginApi.pluginSettings.videoCodec = root.editVideoCodec + pluginApi.pluginSettings.quality = root.editQuality + pluginApi.pluginSettings.colorRange = root.editColorRange + pluginApi.pluginSettings.showCursor = root.editShowCursor + pluginApi.pluginSettings.copyToClipboard = root.editCopyToClipboard + pluginApi.pluginSettings.audioSource = root.editAudioSource + pluginApi.pluginSettings.videoSource = root.editVideoSource + pluginApi.pluginSettings.resolution = root.editResolution + + pluginApi.saveSettings() + + Logger.i("ScreenRecorder", "Settings saved successfully") + } + NTextInputButton { + label: pluginApi.tr("settings.general.output-folder") + description: pluginApi.tr("settings.general.output-folder-description") + placeholderText: Quickshell.env("HOME") + "/Videos" + text: root.editDirectory + buttonIcon: "folder-open" + buttonTooltip: pluginApi.tr("settings.general.output-folder") + onInputEditingFinished: root.editDirectory = text + onButtonClicked: folderPicker.openFilePicker() + } + + // Filename Pattern + NTextInput { + label: pluginApi?.tr("settings.filename-pattern.label") || "Filename pattern" + description: pluginApi?.tr("settings.filename-pattern.description") || "Pattern for generated filenames. Supported: yyyy, yy, MM, M, dd, d, HH, H, mm, m, ss, s (e.g., mycool-recording_yyyyMMdd_HHmmss)" + placeholderText: "recording_yyyyMMdd_HHmmss" + text: root.editFilenamePattern + onTextChanged: root.editFilenamePattern = text + Layout.fillWidth: true + } + + NDivider { + Layout.fillWidth: true + } + + // Show Cursor + NToggle { + label: pluginApi.tr("settings.general.show-cursor") + description: pluginApi.tr("settings.general.show-cursor-description") + checked: root.editShowCursor + onToggled: root.editShowCursor = checked + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.showCursor ?? true + } + + // Copy to Clipboard + NToggle { + label: pluginApi.tr("settings.general.copy-to-clipboard") + description: pluginApi.tr("settings.general.copy-to-clipboard-description") + checked: root.editCopyToClipboard + onToggled: root.editCopyToClipboard = checked + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.copyToClipboard ?? false + } + + NDivider { + Layout.fillWidth: true + } + + // Video Settings + ColumnLayout { + spacing: Style.marginL + Layout.fillWidth: true + + // Source + NComboBox { + label: pluginApi.tr("settings.video.source") + description: pluginApi.tr("settings.video.source-desc") + model: [ + { + "key": "portal", + "name": pluginApi.tr("settings.video.sources-portal") + }, + { + "key": "screen", + "name": pluginApi.tr("settings.video.sources-screen") + } + ] + currentKey: root.editVideoSource + onSelected: key => root.editVideoSource = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.videoSource || "portal" + } + + // Frame Rate + NComboBox { + label: pluginApi.tr("settings.video.frame-rate") + description: pluginApi.tr("settings.video.frame-rate-desc") + model: [ + { + "key": "30", + "name": "30 FPS" + }, + { + "key": "60", + "name": "60 FPS" + }, + { + "key": "100", + "name": "100 FPS" + }, + { + "key": "120", + "name": "120 FPS" + }, + { + "key": "144", + "name": "144 FPS" + }, + { + "key": "165", + "name": "165 FPS" + }, + { + "key": "240", + "name": "240 FPS" + } + ] + currentKey: root.editFrameRate + onSelected: key => root.editFrameRate = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.frameRate || "60" + } + + // Video Quality + NComboBox { + label: pluginApi.tr("settings.video.quality") + description: pluginApi.tr("settings.video.quality-desc") + model: [ + { + "key": "medium", + "name": pluginApi.tr("settings.video.quality-medium") + }, + { + "key": "high", + "name": pluginApi.tr("settings.video.quality-high") + }, + { + "key": "very_high", + "name": pluginApi.tr("settings.video.quality-very-high") + }, + { + "key": "ultra", + "name": pluginApi.tr("settings.video.quality-ultra") + } + ] + currentKey: root.editQuality + onSelected: key => root.editQuality = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.quality || "very_high" + } + + // Video Codec + NComboBox { + label: pluginApi.tr("settings.video.codec") + description: pluginApi.tr("settings.video.codec-desc") + model: { + let options = [ + {"key": "h264", "name": "H264"}, + {"key": "hevc", "name": "HEVC"}, + {"key": "av1", "name": "AV1"}, + {"key": "vp8", "name": "VP8"}, + {"key": "vp9", "name": "VP9"} + ] + // Only add HDR options if source is 'screen' + if (root.editVideoSource === "screen") { + options.push({"key": "hevc_hdr", "name": "HEVC HDR"}) + options.push({"key": "av1_hdr", "name": "AV1 HDR"}) + } + return options + } + currentKey: root.editVideoCodec + onSelected: key => { + root.editVideoCodec = key + // If an HDR codec is selected, change the colorRange to full + if (key.includes("_hdr")) { + root.editColorRange = "full" + } + } + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.videoCodec || "h264" + + Connections { + target: root + function onEditVideoSourceChanged() { + if (root.editVideoSource !== "screen" && (root.editVideoCodec === "av1_hdr" || root.editVideoCodec === "hevc_hdr")) { + root.editVideoCodec = "h264" + } + } + } + } + + // Color Range + NComboBox { + label: pluginApi.tr("settings.video.color-range") + description: pluginApi.tr("settings.video.color-range-desc") + model: [ + { + "key": "limited", + "name": pluginApi.tr("settings.video.color-range-limited") + }, + { + "key": "full", + "name": pluginApi.tr("settings.video.color-range-full") + } + ] + currentKey: root.editColorRange + onSelected: key => root.editColorRange = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.colorRange || "limited" + } + + // Resolution + NComboBox { + label: pluginApi.tr("settings.video.resolution") + description: pluginApi.tr("settings.video.resolution-desc") + model: [ + { + "key": "original", + "name": pluginApi.tr("settings.video.resolution-original") + }, + { + "key": "1920x1080", + "name": "1920x1080 (Full HD)" + }, + { + "key": "2560x1440", + "name": "2560x1440 (QHD)" + }, + { + "key": "3840x2160", + "name": "3840x2160 (4K)" + }, + { + "key": "1280x720", + "name": "1280x720 (HD)" + } + ] + currentKey: root.editResolution + onSelected: key => root.editResolution = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.resolution || "original" + } + } + + NDivider { + Layout.fillWidth: true + } + + // Audio Settings + ColumnLayout { + spacing: Style.marginL + Layout.fillWidth: true + + // Audio Source + NComboBox { + label: pluginApi.tr("settings.audio.source") + description: pluginApi.tr("settings.audio.source-desc") + model: [ + { + "key": "none", + "name": pluginApi.tr("settings.audio.audio-sources-none") + }, + { + "key": "default_output", + "name": pluginApi.tr("settings.audio.audio-sources-system-output") + }, + { + "key": "default_input", + "name": pluginApi.tr("settings.audio.audio-sources-microphone-input") + }, + { + "key": "both", + "name": pluginApi.tr("settings.audio.audio-sources-both") + } + ] + currentKey: root.editAudioSource + onSelected: key => root.editAudioSource = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.audioSource || "default_output" + } + + // Audio Codec + NComboBox { + label: pluginApi.tr("settings.audio.codec") + description: pluginApi.tr("settings.audio.codec-desc") + model: [ + { + "key": "opus", + "name": "Opus" + }, + { + "key": "aac", + "name": "AAC" + } + ] + currentKey: root.editAudioCodec + onSelected: key => root.editAudioCodec = key + defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.audioCodec || "opus" + } + } + + Item { + Layout.fillHeight: true + } + + NFilePicker { + id: folderPicker + selectionMode: "folders" + title: pluginApi.tr("settings.general.output-folder") + initialPath: root.editDirectory || Quickshell.env("HOME") + "/Videos" + onAccepted: paths => { + if (paths.length > 0) { + root.editDirectory = paths[0] + } + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/de.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/de.json new file mode 100644 index 0000000..44225d4 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/de.json @@ -0,0 +1,69 @@ +{ + "description": "Hardwarebeschleunigte Bildschirmaufnahme mit anpassbaren Video- und Audioeinstellungen", + "messages": { + "failed-general": "Der Recorder wurde mit einem Fehler beendet.", + "failed-gpu": "gpu-screen-recorder wurde unerwartet beendet.", + "failed-start": "Aufnahme konnte nicht gestartet werden.", + "no-portals": "Desktop-Portale laufen nicht.", + "no-portals-desc": "Starte xdg-desktop-portal und ein Compositor-Portal (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder ist nicht installiert.", + "not-installed-desc": "Bitte installieren Sie gpu-screen-recorder, um die Bildschirmaufzeichnungsfunktionen zu nutzen.", + "saved": "Aufnahme gespeichert.", + "start-recording": "Bildschirmaufnahme (Aufnahme starten)", + "started": "Aufnahme gestartet.", + "stop-recording": "Bildschirmaufnahme (Aufnahme stoppen)", + "stopping": "Aufnahme stoppen…" + }, + "name": "Bildschirmrekorder", + "settings": { + "audio": { + "audio-sources-both": "Systemausgabe + Mikrofoneingang", + "audio-sources-microphone-input": "Mikrofoneingang", + "audio-sources-none": "Kein Audio", + "audio-sources-system-output": "Systemausgabe", + "codec": "Audio-Codec", + "codec-desc": "Opus wird für beste Leistung und kleinste Audiogröße empfohlen", + "source": "Audioquelle", + "source-desc": "Audioquelle, die während der Aufnahme aufgenommen werden soll", + "title": "Audioeinstellungen" + }, + "filename-pattern": { + "description": "Dateimuster mit Datums-/Zeitcodes (z. B. aufnahme_yyyyMMdd_HHmmss)", + "label": "Dateimuster" + }, + "general": { + "copy-to-clipboard": "In die Zwischenablage kopieren", + "copy-to-clipboard-description": "Kopiere die Datei nach Abschluss der Aufnahme in die Zwischenablage.", + "output-folder": "Ausgabeordner", + "output-folder-description": "Ordner, in dem Bildschirmaufnahmen gespeichert werden", + "show-cursor": "Cursor anzeigen", + "show-cursor-description": "Mauszeiger im Video aufnehmen", + "title": "Allgemein" + }, + "title": "Bildschirmrekorder-Einstellungen", + "video": { + "codec": "Video-Codec", + "codec-desc": "h264 ist der gängigste Codec", + "color-range": "Farbbereich", + "color-range-desc": "Begrenzt wird für bessere Kompatibilität empfohlen", + "color-range-full": "Vollständig", + "color-range-limited": "Begrenzt", + "frame-rate": "Bildrate", + "frame-rate-desc": "Ziel-Bildrate für Bildschirmaufnahmen", + "quality": "Videoqualität", + "quality-desc": "Höhere Qualität führt zu größeren Dateien", + "quality-high": "Hoch", + "quality-medium": "Mittel", + "quality-ultra": "Ultra", + "quality-very-high": "Sehr hoch", + "resolution": "Auflösung", + "resolution-desc": "Ausgabeauflösung begrenzen. Standard verwendet Originalbildschirmauflösung", + "resolution-original": "Standard", + "source": "Videoquelle", + "source-desc": "Portal wird empfohlen, bei Artefakten versuchen Sie Bildschirm", + "sources-portal": "Portal", + "sources-screen": "Bildschirm", + "title": "Videoeinstellungen" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/en.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/en.json new file mode 100644 index 0000000..a396991 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/en.json @@ -0,0 +1,70 @@ +{ + "description": "Hardware-accelerated screen recording with customizable video and audio settings", + "messages": { + "failed-general": "Recorder exited with an error.", + "failed-gpu": "gpu-screen-recorder exited unexpectedly.", + "failed-start": "Failed to start recording.", + "no-portals": "Desktop portals not running.", + "no-portals-desc": "Start xdg-desktop-portal and a compositor portal (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder not installed.", + "not-installed-desc": "Please install gpu-screen-recorder to use screen recording features.", + "saved": "Recording saved.", + "start-recording": "Screen recorder (start recording)", + "started": "Recording started.", + "stop-recording": "Screen recorder (stop recording)", + "stopping": "Stopping recording…", + "open-file": "Open file" + }, + "name": "Screen Recorder", + "settings": { + "audio": { + "audio-sources-both": "System output + microphone input", + "audio-sources-microphone-input": "Microphone input", + "audio-sources-none": "No audio", + "audio-sources-system-output": "System output", + "codec": "Audio codec", + "codec-desc": "Opus is recommended for best performance and smallest audio size", + "source": "Audio source", + "source-desc": "Audio source to capture during recording", + "title": "Audio Settings" + }, + "filename-pattern": { + "description": "Filename pattern using date/time codes (e.g., recording_yyyyMMdd_HHmmss)", + "label": "Filename pattern" + }, + "general": { + "copy-to-clipboard": "Copy to clipboard", + "copy-to-clipboard-description": "Copy the file to clipboard after recording finishes.", + "output-folder": "Output folder", + "output-folder-description": "Folder where screen recordings will be saved", + "show-cursor": "Show cursor", + "show-cursor-description": "Record mouse cursor in the video", + "title": "General" + }, + "title": "Screen Recorder Settings", + "video": { + "codec": "Video codec", + "codec-desc": "h264 is the most common codec", + "color-range": "Color range", + "color-range-desc": "Limited is recommended for better compatibility", + "color-range-full": "Full", + "color-range-limited": "Limited", + "frame-rate": "Frame rate", + "frame-rate-desc": "Target frame rate for screen recordings", + "quality": "Video quality", + "quality-desc": "Higher quality results in larger file sizes", + "quality-high": "High", + "quality-medium": "Medium", + "quality-ultra": "Ultra", + "quality-very-high": "Very high", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Video source", + "source-desc": "Portal is recommended, if you get artifacts try Screen", + "sources-portal": "Portal", + "sources-screen": "Screen", + "title": "Video Settings" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/es.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/es.json new file mode 100644 index 0000000..99510a6 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/es.json @@ -0,0 +1,69 @@ +{ + "description": "Grabación de pantalla acelerada por hardware con configuración personalizable de video y audio", + "messages": { + "failed-general": "El grabador salió con un error.", + "failed-gpu": "gpu-screen-recorder se cerró inesperadamente.", + "failed-start": "No se pudo iniciar la grabación.", + "no-portals": "Portales de escritorio no están en ejecución.", + "no-portals-desc": "Inicia xdg-desktop-portal y un portal de compositor (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder no está instalado.", + "not-installed-desc": "Por favor, instale gpu-screen-recorder para usar las funciones de grabación de pantalla.", + "saved": "Grabación guardada.", + "start-recording": "Grabador de pantalla (empezar a grabar)", + "started": "Grabación iniciada.", + "stop-recording": "Grabador de pantalla (detener grabación)", + "stopping": "Deteniendo la grabación…" + }, + "name": "Grabadora de Pantalla", + "settings": { + "audio": { + "audio-sources-both": "Salida del sistema + entrada de micrófono", + "audio-sources-microphone-input": "Entrada de micrófono", + "audio-sources-none": "Sin audio", + "audio-sources-system-output": "Salida del sistema", + "codec": "Códec de audio", + "codec-desc": "Opus se recomienda para mejor rendimiento y tamaño de audio más pequeño", + "source": "Fuente de audio", + "source-desc": "Fuente de audio para capturar durante la grabación", + "title": "Configuración de Audio" + }, + "filename-pattern": { + "description": "Patrón de nombre de archivo usando códigos de fecha/hora (p. ej., recording_yyyyMMdd_HHmmss)", + "label": "Patrón de nombre de archivo" + }, + "general": { + "copy-to-clipboard": "Copiar al portapapeles", + "copy-to-clipboard-description": "Copia el archivo al portapapeles después de que termine la grabación.", + "output-folder": "Carpeta de salida", + "output-folder-description": "Carpeta donde se guardarán las grabaciones de pantalla", + "show-cursor": "Mostrar cursor", + "show-cursor-description": "Grabar el cursor del ratón en el video", + "title": "General" + }, + "title": "Configuración de Grabadora de Pantalla", + "video": { + "codec": "Códec de video", + "codec-desc": "h264 es el códec más común", + "color-range": "Rango de color", + "color-range-desc": "Limitado se recomienda para mejor compatibilidad", + "color-range-full": "Completo", + "color-range-limited": "Limitado", + "frame-rate": "Tasa de fotogramas", + "frame-rate-desc": "Tasa de fotogramas objetivo para grabaciones de pantalla", + "quality": "Calidad de video", + "quality-desc": "Mayor calidad resulta en archivos más grandes", + "quality-high": "Alto", + "quality-medium": "Mediano", + "quality-ultra": "Ultra", + "quality-very-high": "Muy alto", + "resolution": "Resolución", + "resolution-desc": "Limitar resolución de salida. Predeterminado usa resolución de pantalla original", + "resolution-original": "Default", + "source": "Fuente de video", + "source-desc": "Se recomienda Portal, si obtiene artefactos intente Pantalla", + "sources-portal": "Portal", + "sources-screen": "Pantalla", + "title": "Configuración de Video" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/fr.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/fr.json new file mode 100644 index 0000000..9b268ac --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/fr.json @@ -0,0 +1,69 @@ +{ + "description": "Enregistrement d'écran accéléré par matériel avec paramètres vidéo et audio personnalisables", + "messages": { + "failed-general": "L'enregistreur a quitté avec une erreur.", + "failed-gpu": "L'enregistreur d'écran GPU s'est arrêté de manière inattendue.", + "failed-start": "Échec du démarrage de l'enregistrement.", + "no-portals": "Les portails de bureau ne fonctionnent pas.", + "no-portals-desc": "Démarrer xdg-desktop-portal et un portail de compositeur (wlr/hyprland/gnome/kde).", + "not-installed": "enregistreur d'écran gpu non installé.", + "not-installed-desc": "Veuillez installer gpu-screen-recorder pour utiliser les fonctionnalités d'enregistrement d'écran.", + "saved": "Enregistrement sauvegardé.", + "start-recording": "Enregistreur d'écran (démarrer l'enregistrement)", + "started": "Enregistrement démarré.", + "stop-recording": "Enregistreur d'écran (arrêter l'enregistrement)", + "stopping": "Arrêt de l'enregistrement..." + }, + "name": "Enregistreur d'Écran", + "settings": { + "audio": { + "audio-sources-both": "Sortie système + entrée microphone", + "audio-sources-microphone-input": "Entrée microphone", + "audio-sources-none": "Pas d'audio", + "audio-sources-system-output": "Sortie système", + "codec": "Codec audio", + "codec-desc": "Opus est recommandé pour les meilleures performances et la plus petite taille audio", + "source": "Source audio", + "source-desc": "Source audio à capturer pendant l'enregistrement", + "title": "Paramètres Audio" + }, + "filename-pattern": { + "description": "Modèle de nom de fichier utilisant les codes date/heure (par exemple, recording_yyyyMMdd_HHmmss)", + "label": "Modèle de nom de fichier" + }, + "general": { + "copy-to-clipboard": "Copier dans le presse-papiers", + "copy-to-clipboard-description": "Copier le fichier dans le presse-papiers une fois l'enregistrement terminé.", + "output-folder": "Dossier de sortie", + "output-folder-description": "Dossier où les enregistrements d'écran seront enregistrés", + "show-cursor": "Afficher le curseur", + "show-cursor-description": "Enregistrer le curseur de la souris dans la vidéo", + "title": "Général" + }, + "title": "Paramètres de l'Enregistreur d'Écran", + "video": { + "codec": "Codec vidéo", + "codec-desc": "h264 est le codec le plus courant", + "color-range": "Gamme de couleurs", + "color-range-desc": "Limité est recommandé pour une meilleure compatibilité", + "color-range-full": "Complet / Plein", + "color-range-limited": "Limité(e)", + "frame-rate": "Fréquence d'images", + "frame-rate-desc": "Fréquence d'images cible pour les enregistrements d'écran", + "quality": "Qualité vidéo", + "quality-desc": "Une qualité supérieure résulte en des fichiers plus volumineux", + "quality-high": "Haut/Haute", + "quality-medium": "Moyen", + "quality-ultra": "Ultra", + "quality-very-high": "Très élevé", + "resolution": "Résolution", + "resolution-desc": "Limiter la résolution de sortie. Par défaut utilise la résolution d'écran originale", + "resolution-original": "Default", + "source": "Source vidéo", + "source-desc": "Portal est recommandé, si vous obtenez des artefacts essayez Écran", + "sources-portal": "Portail", + "sources-screen": "Écran", + "title": "Paramètres Vidéo" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/hu.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/hu.json new file mode 100644 index 0000000..48b1459 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/hu.json @@ -0,0 +1,69 @@ +{ + "description": "Hardveresen gyorsított képernyőfelvétel testreszabható videó- és hangbeállításokkal", + "messages": { + "failed-general": "A rögzítő hibával kilépett.", + "failed-gpu": "A gpu-screen-recorder váratlanul leállt.", + "failed-start": "A felvétel indítása sikertelen.", + "no-portals": "Az asztali portálok nem futnak.", + "no-portals-desc": "xdg-desktop-portal és egy kompozitor portál (wlr/hyprland/gnome/kde) indítása.", + "not-installed": "A gpu-screen-recorder nincs telepítve.", + "not-installed-desc": "Kérlek, telepítsd a gpu-screen-recorder alkalmazást a képernyőfelvétel funkciók használatához.", + "saved": "A felvétel mentve.", + "start-recording": "Képernyőrögzítő (felvétel indítása)", + "started": "A felvétel elindult.", + "stop-recording": "Képernyőfelvevő (felvétel leállítása)", + "stopping": "A felvétel leállítása…" + }, + "name": "Képernyőfelvevő", + "settings": { + "audio": { + "audio-sources-both": "Rendszerkimenet + mikrofonbemenet", + "audio-sources-microphone-input": "Mikrofon bemenet", + "audio-sources-none": "Nincs hang", + "audio-sources-system-output": "Rendszerkimenet", + "codec": "Audió kodek", + "codec-desc": "Az Opus ajánlott a legjobb teljesítmény és a legkisebb hangméret érdekében", + "source": "Hangforrás", + "source-desc": "Hangrögzítés során rögzítendő hangforrás", + "title": "Hangbeállítások" + }, + "filename-pattern": { + "description": "Fájlnév minta dátum/idő kódokkal (pl. recording_yyyyMMdd_HHmmss)", + "label": "Fájlnév minta" + }, + "general": { + "copy-to-clipboard": "Másolás a vágólapra", + "copy-to-clipboard-description": "A felvétel befejezése után másolja a fájlt a vágólapra.", + "output-folder": "Kimeneti mappa", + "output-folder-description": "Mappa, ahová a képernyőfelvételek mentésre kerülnek", + "show-cursor": "Kurzor megjelenítése", + "show-cursor-description": "Egérkurzor rögzítése a videóban", + "title": "Általános" + }, + "title": "Képernyőrögzítő beállítások", + "video": { + "codec": "Videó kodek", + "codec-desc": "a h264 a legelterjedtebb kodek", + "color-range": "Színtartomány", + "color-range-desc": "A korlátozott ajánlott a jobb kompatibilitás érdekében", + "color-range-full": "Teljes", + "color-range-limited": "Korlátozott", + "frame-rate": "Képkockasebesség", + "frame-rate-desc": "Képernyőfelvételek célzott képkockasebessége", + "quality": "Videóminőség", + "quality-desc": "A jobb minőség nagyobb fájlméretet eredményez", + "quality-high": "Magas", + "quality-medium": "Közepes", + "quality-ultra": "Ultra", + "quality-very-high": "Nagyon magas", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Videóforrás", + "source-desc": "A Portal ajánlott, ha hibákat tapasztalsz, próbáld a Screen-t", + "sources-portal": "Portál", + "sources-screen": "Képernyő", + "title": "Videóbeállítások" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/it.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/it.json new file mode 100644 index 0000000..b5501ad --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/it.json @@ -0,0 +1,69 @@ +{ + "description": "Registrazione dello schermo con accelerazione hardware e impostazioni video e audio personalizzabili", + "messages": { + "failed-general": "Registratore uscito con un errore.", + "failed-gpu": "ضبط الشاشة باستخدام معالج الرسوميات توقف بشكل غير متوقع.", + "failed-start": "Nuk arrita të filloj regjistrimin.", + "no-portals": "Non è in esecuzione alcun portale desktop.", + "no-portals-desc": "Avvia xdg-desktop-portal e un portale compositore (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder non è installato.", + "not-installed-desc": "Bitte installiere gpu-screen-recorder, um die Bildschirmaufzeichnungsfunktionen zu nutzen.", + "saved": "Registrazione salvata.", + "start-recording": "P錄影 (開始錄影)", + "started": "Aufnahme gestartet.", + "stop-recording": "Skjáupptökutæki (hætta upptöku)", + "stopping": "Nagpapatigil ng pagrekord..." + }, + "name": "Registratore Schermo", + "settings": { + "audio": { + "audio-sources-both": "Risultato del sistema + ingresso microfono", + "audio-sources-microphone-input": "Eingang für Mikrofon", + "audio-sources-none": "Léir aon fhuaim", + "audio-sources-system-output": "Risultato del sistema", + "codec": "Codec audio", + "codec-desc": "Opus è consigliato per le migliori prestazioni e dimensioni audio più piccole", + "source": "Sorgente audio", + "source-desc": "Sorgente audio da catturare durante la registrazione", + "title": "Impostazioni Audio" + }, + "filename-pattern": { + "description": "Padrone di u nome di u schedariu chì usa i codici di data/ora (per esempiu, recording_yyyyMMdd_HHmmss)", + "label": "Modello nome file" + }, + "general": { + "copy-to-clipboard": "Copia negli appunti", + "copy-to-clipboard-description": "Kopyahin ang file sa clipboard pagkatapos matapos ang pag-record.", + "output-folder": "Cartella di output", + "output-folder-description": "Cartella dove verranno salvate le registrazioni dello schermo", + "show-cursor": "Mostra cursore", + "show-cursor-description": "Registra il cursore del mouse nel video", + "title": "Generale" + }, + "title": "Impostazioni Registratore Schermo", + "video": { + "codec": "Codec video", + "codec-desc": "h264 è il codec più comune", + "color-range": "Gamma colori", + "color-range-desc": "Limitato è consigliato per una migliore compatibilità", + "color-range-full": "Puno", + "color-range-limited": "Limitato", + "frame-rate": "Frequenza fotogrammi", + "frame-rate-desc": "Frequenza fotogrammi target per le registrazioni dello schermo", + "quality": "Qualità video", + "quality-desc": "Qualità superiore risulta in file più grandi", + "quality-high": "Alta", + "quality-medium": "Mezzano", + "quality-ultra": "Ultra", + "quality-very-high": "Molto alto", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Sorgente video", + "source-desc": "Portal è consigliato, se si ottengono artefatti prova Schermo", + "sources-portal": "Portale", + "sources-screen": "Skjerm", + "title": "Impostazioni Video" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ja.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ja.json new file mode 100644 index 0000000..169568f --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ja.json @@ -0,0 +1,69 @@ +{ + "description": "カスタマイズ可能なビデオおよびオーディオ設定を備えたハードウェアアクセラレーション画面録画", + "messages": { + "failed-general": "レコーダーがエラーで終了しました。", + "failed-gpu": "gpu-screen-recorder が予期せず終了しました。", + "failed-start": "録画を開始できませんでした。", + "no-portals": "デスクトップポータルが実行されていません。", + "no-portals-desc": "xdg-desktop-portalとコンポジターポータル (wlr/hyprland/gnome/kde) を起動します。", + "not-installed": "gpu-screen-recorder がインストールされていません。", + "not-installed-desc": "画面録画機能を使用するには、gpu-screen-recorderをインストールしてください。", + "saved": "録音を保存しました。", + "start-recording": "画面録画(録画開始)", + "started": "録音を開始しました。", + "stop-recording": "画面録画(録画停止)", + "stopping": "録画を停止しています…" + }, + "name": "画面レコーダー", + "settings": { + "audio": { + "audio-sources-both": "システム出力 + マイク入力", + "audio-sources-microphone-input": "マイク入力", + "audio-sources-none": "音声なし", + "audio-sources-system-output": "システム出力", + "codec": "オーディオコーデック", + "codec-desc": "最高のパフォーマンスと最小のオーディオサイズにはOpusが推奨されます", + "source": "オーディオソース", + "source-desc": "録画中にキャプチャするオーディオソース", + "title": "オーディオ設定" + }, + "filename-pattern": { + "description": "日付/時刻コードを使用したファイル名パターン(例:recording_yyyyMMdd_HHmmss)", + "label": "ファイル名のパターン" + }, + "general": { + "copy-to-clipboard": "クリップボードにコピー", + "copy-to-clipboard-description": "録画終了後、ファイルをクリップボードにコピーします。", + "output-folder": "出力フォルダー", + "output-folder-description": "画面録画が保存されるフォルダー", + "show-cursor": "カーソルを表示", + "show-cursor-description": "ビデオにマウスカーソルを記録する", + "title": "全般" + }, + "title": "画面レコーダー設定", + "video": { + "codec": "ビデオコーデック", + "codec-desc": "h264は最も一般的なコーデックです", + "color-range": "色範囲", + "color-range-desc": "互換性向上のため制限付きが推奨されます", + "color-range-full": "フル", + "color-range-limited": "限定", + "frame-rate": "フレームレート", + "frame-rate-desc": "画面録画の目標フレームレート", + "quality": "ビデオ品質", + "quality-desc": "品質が高いほどファイルサイズが大きくなります", + "quality-high": "高い", + "quality-medium": "ミディアム", + "quality-ultra": "ウルトラ", + "quality-very-high": "非常に高い", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "ビデオソース", + "source-desc": "Portalが推奨されます。アーティファクトが発生する場合は画面を試してください", + "sources-portal": "ポータル", + "sources-screen": "スクリーン", + "title": "ビデオ設定" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ku.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ku.json new file mode 100644 index 0000000..8ce8f5a --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ku.json @@ -0,0 +1,69 @@ +{ + "description": "Qeydkirina dîmenderê ya bi lezkerdana hardware bi mîhengên vîdyo û deng ên xwerû", + "messages": { + "failed-general": "Qeydker bi xeletî derket.", + "failed-gpu": "Qeydkerê dîmenderê GPU bi awayekî nediyar derket.", + "failed-start": "Dest pê kirina qeydê bi ser neket.", + "no-portals": "Portalên sermaseyê naxebitin.", + "no-portals-desc": "Xdg-desktop-portal û portalekî komposîtorê (wlr/hyprland/gnome/kde) bide destpêkirin.", + "not-installed": "gpu-screen-recorder nehati hati saz kirin.", + "not-installed-desc": "Ji bo bikaranîna taybetmendiyên tomarkirina dîmenderê, ji kerema xwe gpu-screen-recorder saz bikin.", + "saved": "Tomar qeyd kirin.", + "start-recording": "Qeydkerê ekranê (dest bi qeydkirinê bike)", + "started": "Qeydkirin dest pê kir.", + "stop-recording": "Tomarkera dîmenderê (tomarkirinê bide sekinandin)", + "stopping": "Qeydkirin radiweste…" + }, + "name": "Qeydkerê Ekranê", + "settings": { + "audio": { + "audio-sources-both": "Derçûna pergalê + têketina mîkrofonê", + "audio-sources-microphone-input": "Ketina mîkrofonê", + "audio-sources-none": "Ti dengê tune", + "audio-sources-system-output": "Derçûna pergalê", + "codec": "Kodêkê deng", + "codec-desc": "Opus ji bo performansa herî baş û mezinahiya dengî ya herî biçûk tê pêşniyar kirin", + "source": "Çavkanîya deng", + "source-desc": "Çavkanîya dengî ya ku di dema qeydkirinê de were girtin", + "title": "Mîhengên Deng" + }, + "filename-pattern": { + "description": "Şiklê navê pelê ku kodên dîrok/dem bikar tîne (mînak, recording_yyyyMMdd_HHmmss)", + "label": "Nimûneya navê pelê" + }, + "general": { + "copy-to-clipboard": "Kopyayî ser clipboardê bike", + "copy-to-clipboard-description": "Piştî qedandina tomarkirinê pelê kopî klîpbordê bike.", + "output-folder": "Cilda peldanka ya derketinê", + "output-folder-description": "Cihê ku tomarên ekranê dê lê bên tomarkirin", + "show-cursor": "Nîşan bide mişk", + "show-cursor-description": "Qeydê nîşankerê mişkê di vîdeoyê de", + "title": "Giştî" + }, + "title": "Mîhengên Qeydkerê Dîmenderê", + "video": { + "codec": "Kodêka vîdyoyî", + "codec-desc": "h264 kodêka herî berbelav e", + "color-range": "Rêza rengan", + "color-range-desc": "Bi sînorkirî ji bo lihevkirina baştir tê pêşniyarkirin", + "color-range-full": "Tije", + "color-range-limited": "Sînorkirî", + "frame-rate": "Rêjeya çarçoveyê", + "frame-rate-desc": "Rêjeya çarçoveya hedefê ji bo qeydên ekranê", + "quality": "Kalîteya vîdyoyê", + "quality-desc": "Encamên bi kalîte bilindtir dibin sedema mezinahiyên pelan ên mezintir", + "quality-high": "Bilind", + "quality-medium": "Navîn", + "quality-ultra": "Ultra", + "quality-very-high": "Zaf bilind", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Çavkanîya vîdyoyê", + "source-desc": "Portal tê pêşniyarkirin, eger tu artefaktan bibînî Screen biceribîne", + "sources-portal": "Portal", + "sources-screen": "Dîmende", + "title": "Mîhengên Vîdeoyê" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/nl.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/nl.json new file mode 100644 index 0000000..e54c537 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/nl.json @@ -0,0 +1,69 @@ +{ + "description": "Hardware-versnelde schermopname met aanpasbare video- en audio-instellingen", + "messages": { + "failed-general": "Recorder is afgesloten met een fout.", + "failed-gpu": "gpu-screen-recorder is onverwachts afgesloten.", + "failed-start": "Opname starten mislukt.", + "no-portals": "Desktop portals werken niet.", + "no-portals-desc": "Start xdg-desktop-portal en een compositor portaal (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder niet geïnstalleerd.", + "not-installed-desc": "Installeer gpu-screen-recorder om schermopnamefuncties te gebruiken.", + "saved": "Opname opgeslagen.", + "start-recording": "Schermrecorder (opname starten)", + "started": "Opname gestart.", + "stop-recording": "Schermrecorder (opname stoppen)", + "stopping": "Opname stoppen…" + }, + "name": "Schermrecorder", + "settings": { + "audio": { + "audio-sources-both": "Systeemuitvoer + microfooningang", + "audio-sources-microphone-input": "Microfooningang", + "audio-sources-none": "Geen audio", + "audio-sources-system-output": "Systeemuitvoer", + "codec": "Audio-codec", + "codec-desc": "Opus wordt aanbevolen voor beste prestaties en kleinste audiogrootte", + "source": "Audiobron", + "source-desc": "Audiobron om tijdens opname vast te leggen", + "title": "Audio-instellingen" + }, + "filename-pattern": { + "description": "Bestandsnaam patroon met datum/tijd codes (bijv. recording_yyyyMMdd_HHmmss)", + "label": "Bestandsnaam patroon" + }, + "general": { + "copy-to-clipboard": "Kopiëren naar klembord", + "copy-to-clipboard-description": "Kopieer het bestand naar het klembord nadat de opname is voltooid.", + "output-folder": "Uitvoermap", + "output-folder-description": "Map waar schermopnames worden opgeslagen", + "show-cursor": "Cursor tonen", + "show-cursor-description": "Muiscursor in de video opnemen", + "title": "Algemeen" + }, + "title": "Schermrecorder Instellingen", + "video": { + "codec": "Video-codec", + "codec-desc": "h264 is de meest voorkomende codec", + "color-range": "Kleurbereik", + "color-range-desc": "Beperkt wordt aanbevolen voor betere compatibiliteit", + "color-range-full": "Volledig", + "color-range-limited": "Beperkt", + "frame-rate": "Framesnelheid", + "frame-rate-desc": "Doelframesnelheid voor schermopnames", + "quality": "Videokwaliteit", + "quality-desc": "Hogere kwaliteit resulteert in grotere bestanden", + "quality-high": "Hoog", + "quality-medium": "Medium", + "quality-ultra": "Ultra", + "quality-very-high": "Zeer hoog", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Videobron", + "source-desc": "Portal wordt aanbevolen, probeer Scherm als u artefacten krijgt", + "sources-portal": "Portaal", + "sources-screen": "Scherm", + "title": "Video-instellingen" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pl.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pl.json new file mode 100644 index 0000000..5790cb1 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pl.json @@ -0,0 +1,69 @@ +{ + "description": "Nagrywanie ekranu z akceleracją sprzętową z możliwością dostosowania ustawień wideo i audio", + "messages": { + "failed-general": "Rejestrator zakończył pracę z błędem.", + "failed-gpu": "Rejestrator ekranu GPU zakończył pracę nieoczekiwanie.", + "failed-start": "Nie udało się rozpocząć nagrywania.", + "no-portals": "Portale pulpitu nie działają.", + "no-portals-desc": "Uruchom xdg-desktop-portal i portal kompozytora (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder nie jest zainstalowany.", + "not-installed-desc": "Zainstaluj gpu-screen-recorder, aby korzystać z funkcji nagrywania ekranu.", + "saved": "Nagranie zapisane.", + "start-recording": "Rejestrator ekranu (rozpocznij nagrywanie)", + "started": "Rozpoczęto nagrywanie.", + "stop-recording": "Rejestrator ekranu (zatrzymaj nagrywanie)", + "stopping": "Zatrzymywanie nagrywania…" + }, + "name": "Rejestrator ekranu", + "settings": { + "audio": { + "audio-sources-both": "Wyjście systemowe + wejście mikrofonu", + "audio-sources-microphone-input": "Wejście mikrofonu", + "audio-sources-none": "Brak dźwięku", + "audio-sources-system-output": "Wyjście systemowe", + "codec": "Kodek audio", + "codec-desc": "Opus jest zalecany dla najlepszej wydajności i najmniejszego rozmiaru dźwięku", + "source": "Źródło dźwięku", + "source-desc": "Źródło dźwięku do przechwytywania podczas nagrywania", + "title": "Ustawienia audio" + }, + "filename-pattern": { + "description": "Wzorzec nazwy pliku używający kodów daty/czasu (np. nagranie_rrrrMMdd_HHmmss)", + "label": "Wzorzec nazwy pliku" + }, + "general": { + "copy-to-clipboard": "Kopiuj do schowka", + "copy-to-clipboard-description": "Kopiuj plik do schowka po zakończeniu nagrywania.", + "output-folder": "Folder wyjściowy", + "output-folder-description": "Folder, w którym będą zapisywane nagrania ekranu", + "show-cursor": "Pokaż kursor", + "show-cursor-description": "Nagrywaj kursor myszy na filmie", + "title": "Ogólne" + }, + "title": "Ustawienia rejestratora ekranu", + "video": { + "codec": "Kodek wideo", + "codec-desc": "h264 to najpopularniejszy kodek", + "color-range": "Zakres kolorów", + "color-range-desc": "Zalecane jest \"Ograniczone\" dla lepszej kompatybilności", + "color-range-full": "Pełny", + "color-range-limited": "Ograniczone", + "frame-rate": "Liczba klatek na sekundę", + "frame-rate-desc": "Docelowa liczba klatek na sekundę dla nagrań ekranu", + "quality": "Jakość wideo", + "quality-desc": "Wyższa jakość skutkuje większymi rozmiarami plików", + "quality-high": "Wysoki", + "quality-medium": "Średni", + "quality-ultra": "Bardzo", + "quality-very-high": "Bardzo wysoki", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Źródło wideo", + "source-desc": "Zalecany jest Portal, jeśli występują artefakty, spróbuj opcji Ekran", + "sources-portal": "Portal", + "sources-screen": "Ekran", + "title": "Ustawienia wideo" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pt.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pt.json new file mode 100644 index 0000000..f4a73ca --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/pt.json @@ -0,0 +1,69 @@ +{ + "description": "Gravação de tela acelerada por hardware com configurações personalizáveis de vídeo e áudio", + "messages": { + "failed-general": "O gravador foi encerrado com um erro.", + "failed-gpu": "gpu-screen-recorder foi encerrado inesperadamente.", + "failed-start": "Falha ao iniciar a gravação.", + "no-portals": "Portais de desktop não estão em execução.", + "no-portals-desc": "Inicie o xdg-desktop-portal e um portal compositor (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder não instalado.", + "not-installed-desc": "Por favor, instale o gpu-screen-recorder para usar os recursos de gravação de tela.", + "saved": "Gravação salva.", + "start-recording": "Gravador de tela (iniciar gravação)", + "started": "Gravação iniciada.", + "stop-recording": "Gravador de tela (parar gravação)", + "stopping": "Parando a gravação..." + }, + "name": "Gravador de Tela", + "settings": { + "audio": { + "audio-sources-both": "Saída do sistema + entrada do microfone", + "audio-sources-microphone-input": "Entrada de microfone", + "audio-sources-none": "Sem áudio", + "audio-sources-system-output": "Saída do sistema", + "codec": "Codec de áudio", + "codec-desc": "Opus é recomendado para melhor desempenho e menor tamanho de áudio", + "source": "Fonte de áudio", + "source-desc": "Fonte de áudio para capturar durante a gravação", + "title": "Configurações de Áudio" + }, + "filename-pattern": { + "description": "Padrão de nome de arquivo usando códigos de data/hora (por exemplo, recording_yyyyMMdd_HHmmss)", + "label": "Padrão de nome de arquivo" + }, + "general": { + "copy-to-clipboard": "Copiar para área de transferência", + "copy-to-clipboard-description": "Copiar o arquivo para a área de transferência após a gravação terminar.", + "output-folder": "Pasta de saída", + "output-folder-description": "Pasta onde as gravações de tela serão salvas", + "show-cursor": "Mostrar cursor", + "show-cursor-description": "Gravar o cursor do mouse no vídeo", + "title": "Geral" + }, + "title": "Configurações do Gravador de Tela", + "video": { + "codec": "Codec de vídeo", + "codec-desc": "h264 é o codec mais comum", + "color-range": "Faixa de cores", + "color-range-desc": "Limitado é recomendado para melhor compatibilidade", + "color-range-full": "Completo", + "color-range-limited": "Limitado", + "frame-rate": "Taxa de quadros", + "frame-rate-desc": "Taxa de quadros alvo para gravações de tela", + "quality": "Qualidade de vídeo", + "quality-desc": "Maior qualidade resulta em arquivos maiores", + "quality-high": "Alto(a)", + "quality-medium": "Médio", + "quality-ultra": "Ultra", + "quality-very-high": "Muito alto/altíssima/elevadíssimo(a)", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Fonte de vídeo", + "source-desc": "Portal é recomendado, se obtiver artefatos tente Tela", + "sources-portal": "Portal", + "sources-screen": "Tela", + "title": "Configurações de Vídeo" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ru.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ru.json new file mode 100644 index 0000000..1808ae1 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/ru.json @@ -0,0 +1,69 @@ +{ + "description": "Аппаратно-ускоренная запись экрана с настраиваемыми параметрами видео и аудио", + "messages": { + "failed-general": "Рекордер завершил работу с ошибкой.", + "failed-gpu": "gpu-screen-recorder неожиданно завершил работу.", + "failed-start": "Не удалось начать запись.", + "no-portals": "Порталы рабочего стола не работают.", + "no-portals-desc": "Запустить xdg-desktop-portal и портал композитора (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder не установлен.", + "not-installed-desc": "Пожалуйста, установите gpu-screen-recorder, чтобы использовать функции записи экрана.", + "saved": "Запись сохранена.", + "start-recording": "Запись экрана (начать запись)", + "started": "Запись началась.", + "stop-recording": "Запись экрана (остановить запись)", + "stopping": "Остановка записи…" + }, + "name": "Запись Экрана", + "settings": { + "audio": { + "audio-sources-both": "Вывод системы + ввод с микрофона", + "audio-sources-microphone-input": "Микрофонный вход", + "audio-sources-none": "Нет звука", + "audio-sources-system-output": "Вывод системы", + "codec": "Аудиокодек", + "codec-desc": "Opus рекомендуется для лучшей производительности и наименьшего размера аудио", + "source": "Источник аудио", + "source-desc": "Источник аудио для захвата во время записи", + "title": "Настройки Аудио" + }, + "filename-pattern": { + "description": "Шаблон имени файла с использованием кодов даты/времени (например, recording_yyyyMMdd_HHmmss)", + "label": "Шаблон имени файла" + }, + "general": { + "copy-to-clipboard": "Копировать в буфер обмена", + "copy-to-clipboard-description": "Скопировать файл в буфер обмена после завершения записи.", + "output-folder": "Папка вывода", + "output-folder-description": "Папка, в которую будут сохраняться записи экрана", + "show-cursor": "Показать курсор", + "show-cursor-description": "Записывать курсор мыши в видео", + "title": "Общие" + }, + "title": "Настройки Записи Экрана", + "video": { + "codec": "Видеокодек", + "codec-desc": "h264 является наиболее распространенным кодеком", + "color-range": "Цветовой диапазон", + "color-range-desc": "Ограниченный рекомендуется для лучшей совместимости", + "color-range-full": "Полный", + "color-range-limited": "Ограниченный", + "frame-rate": "Частота кадров", + "frame-rate-desc": "Целевая частота кадров для записи экрана", + "quality": "Качество видео", + "quality-desc": "Более высокое качество приводит к большим размерам файлов", + "quality-high": "Высокий", + "quality-medium": "Средний", + "quality-ultra": "Ультра", + "quality-very-high": "Очень высокий", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Источник видео", + "source-desc": "Рекомендуется Portal, если появляются артефакты попробуйте Экран", + "sources-portal": "Портал", + "sources-screen": "Экран", + "title": "Настройки Видео" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/tr.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/tr.json new file mode 100644 index 0000000..4839623 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/tr.json @@ -0,0 +1,69 @@ +{ + "description": "Özelleştirilebilir video ve ses ayarlarıyla donanım hızlandırmalı ekran kaydı", + "messages": { + "failed-general": "Kaydedici bir hatayla çıktı.", + "failed-gpu": "gpu-screen-recorder beklenmedik şekilde çıktı.", + "failed-start": "Kayda başlama başarısız oldu.", + "no-portals": "Masaüstü portalları çalışmıyor.", + "no-portals-desc": "xdg-desktop-portal'ı ve bir compositor portalı başlat (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder kurulu değil.", + "not-installed-desc": "Ekran kaydı özelliklerini kullanmak için lütfen gpu-screen-recorder'ı kurun.", + "saved": "Kayıt kaydedildi.", + "start-recording": "Ekran kaydedici (kayda başla)", + "started": "Kayıt başladı.", + "stop-recording": "Ekran kaydedici (kaydı durdur)", + "stopping": "Kaydı durdurma…" + }, + "name": "Ekran Kaydedici", + "settings": { + "audio": { + "audio-sources-both": "Sistem çıktısı + mikrofon girişi", + "audio-sources-microphone-input": "Mikrofon girişi", + "audio-sources-none": "Ses yok", + "audio-sources-system-output": "Sistem çıktısı", + "codec": "Ses codec", + "codec-desc": "En iyi performans ve en küçük ses boyutu için Opus önerilir", + "source": "Ses kaynağı", + "source-desc": "Kayıt sırasında yakalanacak ses kaynağı", + "title": "Ses Ayarları" + }, + "filename-pattern": { + "description": "Tarih/saat kodları kullanan dosya adı deseni (ör. kayit_yyyyMMdd_HHmmss)", + "label": "Dosya adı deseni" + }, + "general": { + "copy-to-clipboard": "Panoya kopyala", + "copy-to-clipboard-description": "Kayıt bittikten sonra dosyayı panoya kopyala.", + "output-folder": "Çıktı klasörü", + "output-folder-description": "Ekran kayıtlarının kaydedileceği klasör", + "show-cursor": "İmleci göster", + "show-cursor-description": "Videoda fare imlecini kaydet", + "title": "Genel" + }, + "title": "Ekran Kaydedici Ayarları", + "video": { + "codec": "Video codec", + "codec-desc": "h264 en yaygın codec'tir", + "color-range": "Renk aralığı", + "color-range-desc": "Daha iyi uyumluluk için Sınırlı önerilir", + "color-range-full": "Tam", + "color-range-limited": "Sınırlı", + "frame-rate": "Kare hızı", + "frame-rate-desc": "Ekran kayıtları için hedef kare hızı", + "quality": "Video kalitesi", + "quality-desc": "Daha yüksek kalite daha büyük dosya boyutlarına yol açar", + "quality-high": "Yüksek", + "quality-medium": "Orta", + "quality-ultra": "Ultra", + "quality-very-high": "Çok yüksek", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Video kaynağı", + "source-desc": "Portal önerilir, artefaktlar alırsanız Ekran'ı deneyin", + "sources-portal": "Portal", + "sources-screen": "Ekran", + "title": "Video Ayarları" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/uk-UA.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/uk-UA.json new file mode 100644 index 0000000..5e95f2f --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/uk-UA.json @@ -0,0 +1,69 @@ +{ + "description": "Апаратно-прискорений запис екрану з налаштовуваними параметрами відео та аудіо", + "messages": { + "failed-general": "Рекордер завершив роботу з помилкою.", + "failed-gpu": "gpu-screen-recorder несподівано завершив роботу.", + "failed-start": "Не вдалося почати запис.", + "no-portals": "Настільні портали не працюють.", + "no-portals-desc": "Запустити xdg-desktop-portal та портал композитора (wlr/hyprland/gnome/kde).", + "not-installed": "gpu-screen-recorder не встановлено.", + "not-installed-desc": "Будь ласка, встановіть gpu-screen-recorder, щоб використовувати функції запису екрана.", + "saved": "Запис збережено.", + "start-recording": "Запис екрана (почати запис)", + "started": "Запис розпочато.", + "stop-recording": "Запис екрана (зупинити запис)", + "stopping": "Зупинка запису…" + }, + "name": "Записувач Екрану", + "settings": { + "audio": { + "audio-sources-both": "Вивід системи + вхід мікрофона", + "audio-sources-microphone-input": "Мікрофонний вхід", + "audio-sources-none": "Немає аудіо", + "audio-sources-system-output": "Вивід системи", + "codec": "Аудіокодек", + "codec-desc": "Opus рекомендується для найкращої продуктивності та найменшого розміру аудіо", + "source": "Джерело аудіо", + "source-desc": "Джерело аудіо для захоплення під час запису", + "title": "Налаштування Аудіо" + }, + "filename-pattern": { + "description": "Шаблон імені файлу з використанням кодів дати/часу (наприклад, recording_yyyyMMdd_HHmmss)", + "label": "Шаблон імені файлу" + }, + "general": { + "copy-to-clipboard": "Копіювати до буфера обміну", + "copy-to-clipboard-description": "Копіювати файл у буфер обміну після завершення запису.", + "output-folder": "Папка виводу", + "output-folder-description": "Папка, де зберігатимуться записи екрану", + "show-cursor": "Показати курсор", + "show-cursor-description": "Записувати курсор миші у відео", + "title": "Загальні" + }, + "title": "Налаштування Записувача Екрану", + "video": { + "codec": "Відеокодек", + "codec-desc": "h264 є найпоширенішим кодеком", + "color-range": "Кольоровий діапазон", + "color-range-desc": "Обмежений рекомендується для кращої сумісності", + "color-range-full": "Повний", + "color-range-limited": "Обмежений", + "frame-rate": "Частота кадрів", + "frame-rate-desc": "Цільова частота кадрів для запису екрану", + "quality": "Якість відео", + "quality-desc": "Вища якість призводить до більших розмірів файлів", + "quality-high": "Високий", + "quality-medium": "Середній", + "quality-ultra": "Ультра", + "quality-very-high": "Дуже високий", + "resolution": "Resolution", + "resolution-desc": "Limit output resolution. Default uses original screen resolution", + "resolution-original": "Default", + "source": "Джерело відео", + "source-desc": "Рекомендується Portal, якщо з'являються артефакти спробуйте Екран", + "sources-portal": "Портал", + "sources-screen": "Екран", + "title": "Налаштування Відео" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/zh-CN.json b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/zh-CN.json new file mode 100644 index 0000000..ab36c1d --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/i18n/zh-CN.json @@ -0,0 +1,70 @@ +{ + "description": "具有可自定义视频和音频设置的硬件加速屏幕录制", + "messages": { + "failed-general": "录制器出错退出。", + "failed-gpu": "gpu-screen-recorder 意外退出。", + "failed-start": "无法开始录制。", + "no-portals": "桌面门户未运行。", + "no-portals-desc": "启动 xdg-desktop-portal 和一个合成器门户 (wlr/hyprland/gnome/kde)。", + "not-installed": "gpu-screen-recorder 未安装。", + "not-installed-desc": "请安装 gpu-screen-recorder 以使用屏幕录制功能。", + "saved": "已保存录像。", + "start-recording": "屏幕录像(开始录制)", + "started": "已开始录制。", + "stop-recording": "屏幕录像(停止录制)", + "stopping": "停止录制…", + "open-file": "打开文件" + }, + "name": "屏幕录制器", + "settings": { + "audio": { + "audio-sources-both": "系统输出 + 麦克风输入", + "audio-sources-microphone-input": "麦克风输入", + "audio-sources-none": "无音频", + "audio-sources-system-output": "系统输出", + "codec": "音频编解码器", + "codec-desc": "建议使用 Opus 以获得最佳性能和最小音频大小", + "source": "音频源", + "source-desc": "录制期间要捕获的音频源", + "title": "音频设置" + }, + "filename-pattern": { + "description": "使用日期/时间代码的文件名模式 (例如,recording_yyyyMMdd_HHmmss)", + "label": "文件名模式" + }, + "general": { + "copy-to-clipboard": "复制到剪贴板", + "copy-to-clipboard-description": "录制结束后将文件复制到剪贴板。", + "output-folder": "输出文件夹", + "output-folder-description": "屏幕录制将保存到的文件夹", + "show-cursor": "显示光标", + "show-cursor-description": "在视频中录制鼠标光标", + "title": "常规" + }, + "title": "屏幕录制器设置", + "video": { + "codec": "视频编解码器", + "codec-desc": "h264 是最常见的编解码器", + "color-range": "色彩范围", + "color-range-desc": "建议使用“有限”以获得更好的兼容性", + "color-range-full": "全范围", + "color-range-limited": "有限", + "frame-rate": "帧率", + "frame-rate-desc": "屏幕录制的目标帧率", + "quality": "视频质量", + "quality-desc": "更高的质量会导致更大的文件大小", + "quality-high": "高", + "quality-medium": "中等", + "quality-ultra": "极高", + "quality-very-high": "非常高", + "resolution": "分辨率", + "resolution-desc": "限制输出分辨率。默认使用原始屏幕分辨率", + "resolution-original": "默认", + "source": "视频源", + "source-desc": "推荐使用桌面门户 (Portal),如果出现画面异常请尝试屏幕", + "sources-portal": "桌面门户", + "sources-screen": "屏幕", + "title": "视频设置" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/manifest.json b/home/aiden/.config/noctalia/plugins/screen-recorder/manifest.json new file mode 100644 index 0000000..1e3e2e3 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/screen-recorder/manifest.json @@ -0,0 +1,39 @@ +{ + "id": "screen-recorder", + "name": "Screen Recorder", + "version": "1.0.8", + "minNoctaliaVersion": "3.6.0", + "author": "Noctalia Team", + "license": "MIT", + "repository": "https://github.com/noctalia-dev/noctalia-plugins", + "description": "Hardware-accelerated screen recording using gpu-screen-recorder with customizable video and audio settings", + "tags": [ + "Bar", + "Utility" + ], + "entryPoints": { + "main": "Main.qml", + "barWidget": "BarWidget.qml", + "controlCenterWidget": "ControlCenterWidget.qml", + "settings": "Settings.qml" + }, + "dependencies": { + "plugins": [] + }, + "metadata": { + "defaultSettings": { + "directory": "", + "filenamePattern": "recording_yyyyMMdd_HHmmss", + "frameRate": "60", + "audioCodec": "opus", + "videoCodec": "h264", + "quality": "very_high", + "colorRange": "limited", + "showCursor": true, + "copyToClipboard": false, + "audioSource": "default_output", + "videoSource": "portal", + "resolution": "original" + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/screen-recorder/preview.png b/home/aiden/.config/noctalia/plugins/screen-recorder/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc3b204ce4d43ebd4473e7299c9992211a43ef9 GIT binary patch literal 130533 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%0D<*}%ZK&~IiV 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/dev/null 2>&1", - "cmdGetNumUpdates": "yay -Sy >/dev/null 2>&1; yay -Quq 2>/dev/null | wc -l", + "cmdGetNumUpdates": "yay -Qu 2>/dev/null | wc -l", "cmdDoSystemUpdate": "yay -Syu" }, { "name": "paru", "cmdCheck": "command -v paru >/dev/null 2>&1", - "cmdGetNumUpdates": "paru -Sy >/dev/null 2>&1; paru -Quq 2>/dev/null | wc -l", + "cmdGetNumUpdates": "paru -Qu 2>/dev/null | wc -l", "cmdDoSystemUpdate": "paru -Syu" }, { diff --git a/home/aiden/.config/noctalia/settings.json b/home/aiden/.config/noctalia/settings.json index 6199ecd..10c1858 100644 --- a/home/aiden/.config/noctalia/settings.json +++ b/home/aiden/.config/noctalia/settings.json @@ -1,14 +1,20 @@ { "appLauncher": { + "autoPasteClipboard": false, + "clipboardWrapText": true, "customLaunchPrefix": "", "customLaunchPrefixEnabled": false, "enableClipPreview": true, "enableClipboardHistory": true, + "enableSettingsSearch": true, "iconMode": "tabler", - "pinnedExecs": [ + "ignoreMouseInput": false, + "pinnedApps": [ ], "position": "center", + "screenshotAnnotationTool": "", "showCategories": true, + "showIconBackground": true, "sortByMostUsed": true, "terminalCommand": "alacritty -e", "useApp2Unit": false, @@ -16,11 +22,11 @@ }, "audio": { "cavaFrameRate": 30, - "externalMixer": "pwvucontrol || pavucontrol", "mprisBlacklist": [ ], "preferredPlayer": "", "visualizerType": "linear", + "volumeFeedback": false, "volumeOverdrive": true, "volumeStep": 5 }, @@ -30,22 +36,30 @@ "density": "comfortable", "exclusive": true, "floating": false, - "marginHorizontal": 0.25, - "marginVertical": 0.25, + "hideOnOverview": false, + "marginHorizontal": 5, + "marginVertical": 5, "monitors": [ ], "outerCorners": false, "position": "top", + "screenOverrides": [ + ], "showCapsule": true, "showOutline": false, "useSeparateOpacity": false, "widgets": { "center": [ { + "compactMode": false, + "compactShowAlbumArt": true, + "compactShowVisualizer": false, "hideMode": "hidden", "hideWhenIdle": false, "id": "MediaMini", "maxWidth": 250, + "panelShowAlbumArt": true, + "panelShowVisualizer": true, "scrollingMode": "hover", "showAlbumArt": true, "showArtistFirst": true, @@ -57,9 +71,12 @@ ], "left": [ { + "colorizeSystemIcon": "none", + "enableColorization": false, "hideMode": "alwaysExpanded", "icon": "rocket", "id": "CustomButton", + "ipcIdentifier": "", "leftClickExec": "qs -c noctalia-shell ipc call launcher toggle", "leftClickUpdateText": false, "maxTextLength": { @@ -91,6 +108,7 @@ "followFocusedScreen": false, "groupedBorderOpacity": 1, "hideUnoccupied": true, + "iconScale": 0.8, "id": "Workspace", "labelMode": "name", "showApplications": false, @@ -123,9 +141,11 @@ "showCpuUsage": true, "showDiskUsage": false, "showGpuTemp": false, + "showLoadAverage": false, "showMemoryAsPercent": false, "showMemoryUsage": true, "showNetworkStats": true, + "showSwapUsage": false, "useMonospaceFont": true, "usePrimaryColor": true }, @@ -145,9 +165,38 @@ ], "right": [ { + "defaultSettings": { + "audioCodec": "opus", + "audioSource": "default_output", + "colorRange": "limited", + "copyToClipboard": false, + "directory": "", + "filenamePattern": "recording_yyyyMMdd_HHmmss", + "frameRate": "60", + "quality": "very_high", + "showCursor": true, + "videoCodec": "h264", + "videoSource": "portal" + }, + "id": "plugin:screen-recorder" + }, + { + "blacklist": [ + ], + "colorizeIcons": false, + "drawerEnabled": true, + "hidePassive": false, + "id": "Tray", + "pinned": [ + ] + }, + { + "colorizeSystemIcon": "none", + "enableColorization": false, "hideMode": "alwaysExpanded", "icon": "eye", "id": "CustomButton", + "ipcIdentifier": "", "leftClickExec": "/home/aiden/toggle-transparency.sh", "leftClickUpdateText": true, "maxTextLength": { @@ -173,35 +222,9 @@ "wheelUpdateText": false }, { - "id": "ScreenRecorder" - }, - { - "blacklist": [ - ], - "colorizeIcons": false, - "drawerEnabled": true, - "hidePassive": false, - "id": "Tray", - "pinned": [ - ] - }, - { - "hideWhenZero": true, - "id": "NotificationHistory", - "showUnreadBadge": true - }, - { - "deviceNativePath": "", "displayMode": "alwaysShow", - "hideIfNotDetected": true, - "id": "Battery", - "showNoctaliaPerformance": false, - "showPowerProfiles": true, - "warningThreshold": 30 - }, - { - "displayMode": "onhover", - "id": "Volume" + "id": "Volume", + "middleClickCommand": "pwvucontrol || pavucontrol" }, { "displayMode": "onhover", @@ -214,6 +237,26 @@ }, "id": "plugin:privacy-indicator" }, + { + "deviceNativePath": "", + "displayMode": "alwaysShow", + "hideIfIdle": false, + "hideIfNotDetected": true, + "id": "Battery", + "showNoctaliaPerformance": false, + "showPowerProfiles": true, + "warningThreshold": 30 + }, + { + "displayMode": "alwaysShow", + "id": "VPN" + }, + { + "hideWhenZero": true, + "hideWhenZeroUnread": false, + "id": "NotificationHistory", + "showUnreadBadge": true + }, { "colorizeDistroLogo": false, "colorizeSystemIcon": "none", @@ -241,10 +284,6 @@ "enabled": true, "id": "calendar-month-card" }, - { - "enabled": true, - "id": "timer-card" - }, { "enabled": true, "id": "weather-card" @@ -253,10 +292,10 @@ }, "colorSchemes": { "darkMode": true, - "generateTemplatesForPredefined": true, + "generationMethod": "tonal-spot", "manualSunrise": "06:30", "manualSunset": "18:30", - "matugenSchemeType": "scheme-fruit-salad", + "monitorForColors": "", "predefinedScheme": "Catppuccin", "schedulingMode": "off", "useWallpaperColors": false @@ -288,6 +327,7 @@ "id": "brightness-card" } ], + "diskPath": "/", "position": "close_to_bar_button", "shortcuts": { "left": [ @@ -296,18 +336,9 @@ }, { "id": "Bluetooth" - }, - { - "id": "ScreenRecorder" - }, - { - "id": "WallpaperSelector" } ], "right": [ - { - "id": "Notifications" - }, { "id": "PowerProfile" }, @@ -341,16 +372,17 @@ "backgroundOpacity": 1, "colorizeIcons": true, "deadOpacity": 0.6, - "displayMode": "auto_hide", + "displayMode": "always_visible", "enabled": false, "floatingRatio": 1, "inactiveIndicators": false, "monitors": [ ], - "onlySameOutput": true, + "onlySameOutput": false, "pinnedApps": [ ], "pinnedStatic": false, + "position": "bottom", "size": 1 }, "general": { @@ -361,20 +393,24 @@ "boxRadiusRatio": 1, "compactLockScreen": false, "dimmerOpacity": 0, + "enableLockScreenCountdown": true, "enableShadows": true, "forceBlackScreenCorners": false, "iRadiusRatio": 1, "language": "", "lockOnSuspend": true, + "lockScreenCountdownDuration": 10000, "radiusRatio": 1, "scaleRatio": 1, "screenRadiusRatio": 1, "shadowDirection": "bottom_right", "shadowOffsetX": 2, "shadowOffsetY": 3, - "showHibernateOnLockScreen": false, + "showChangelogOnStartup": true, + "showHibernateOnLockScreen": true, "showScreenCorners": false, - "showSessionButtonsOnLockScreen": true + "showSessionButtonsOnLockScreen": true, + "telemetryEnabled": true }, "hooks": { "darkModeChange": "", @@ -383,11 +419,15 @@ "performanceModeEnabled": "", "screenLock": "", "screenUnlock": "", + "session": "", + "startup": "", "wallpaperChange": "" }, "location": { "analogClockInCalendar": false, "firstDayOfWeek": -1, + "hideWeatherCityName": false, + "hideWeatherTimezone": false, "name": "Winnipeg, MB", "showCalendarEvents": true, "showCalendarWeather": true, @@ -398,6 +438,11 @@ "weatherShowEffects": true }, "network": { + "bluetoothDetailsViewMode": "grid", + "bluetoothHideUnnamedDevices": false, + "bluetoothRssiPollIntervalMs": 10000, + "bluetoothRssiPollingEnabled": false, + "wifiDetailsViewMode": "grid", "wifiEnabled": true }, "nightLight": { @@ -413,6 +458,7 @@ "backgroundOpacity": 1, "criticalUrgencyDuration": 15, "enableKeyboardLayoutToast": true, + "enableMediaToast": false, "enabled": true, "location": "top_right", "lowUrgencyDuration": 3, @@ -451,21 +497,10 @@ ], "overlayLayer": true }, - "screenRecorder": { - "audioCodec": "opus", - "audioSource": "default_output", - "colorRange": "limited", - "copyToClipboard": false, - "directory": "/home/aiden/Videos", - "frameRate": 60, - "quality": "very_high", - "showCursor": true, - "videoCodec": "h264", - "videoSource": "portal" - }, "sessionMenu": { "countdownDuration": 10000, "enableCountdown": true, + "largeButtonsLayout": "grid", "largeButtonsStyle": false, "position": "center", "powerOptions": [ @@ -485,7 +520,7 @@ "action": "hibernate", "command": "", "countdownEnabled": true, - "enabled": false + "enabled": true }, { "action": "reboot", @@ -509,24 +544,27 @@ "showHeader": true, "showNumberLabels": true }, - "settingsVersion": 35, + "settingsVersion": 44, "systemMonitor": { "cpuCriticalThreshold": 90, "cpuPollingInterval": 3000, "cpuWarningThreshold": 80, "criticalColor": "", "diskCriticalThreshold": 90, - "diskPath": "/", "diskPollingInterval": 3000, "diskWarningThreshold": 80, "enableDgpuMonitoring": false, + "externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor", "gpuCriticalThreshold": 90, "gpuPollingInterval": 3000, "gpuWarningThreshold": 80, + "loadAvgPollingInterval": 3000, "memCriticalThreshold": 90, "memPollingInterval": 3000, "memWarningThreshold": 80, "networkPollingInterval": 3000, + "swapCriticalThreshold": 90, + "swapWarningThreshold": 80, "tempCriticalThreshold": 90, "tempPollingInterval": 3000, "tempWarningThreshold": 80, @@ -534,39 +572,35 @@ "warningColor": "" }, "templates": { - "alacritty": false, - "cava": false, - "code": false, - "discord": false, - "emacs": false, - "enableUserTemplates": false, - "foot": false, - "fuzzel": false, - "ghostty": false, - "gtk": true, - "helix": false, - "hyprland": false, - "kcolorscheme": true, - "kitty": false, - "mango": false, - "niri": true, - "pywalfox": false, - "qt": true, - "spicetify": false, - "telegram": false, - "vicinae": false, - "walker": false, - "wezterm": false, - "yazi": false, - "zed": false + "activeTemplates": [ + { + "enabled": true, + "id": "gtk" + }, + { + "enabled": true, + "id": "qt" + }, + { + "enabled": true, + "id": "kcolorscheme" + }, + { + "enabled": true, + "id": "niri" + } + ], + "enableUserTheming": false }, "ui": { "bluetoothDetailsViewMode": "grid", "bluetoothHideUnnamedDevices": false, + "boxBorderEnabled": false, "fontDefault": "Sans Serif", "fontDefaultScale": 1, "fontFixed": "monospace", "fontFixedScale": 1, + "networkPanelView": "wifi", "panelBackgroundOpacity": 0.5, "panelsAttachedToBar": true, "settingsPanelMode": "centered", @@ -574,6 +608,7 @@ "wifiDetailsViewMode": "grid" }, "wallpaper": { + "automationEnabled": true, "directory": "/home/aiden/Pictures/Wallpapers", "enableMultiMonitorDirectories": true, "enabled": true, @@ -589,14 +624,16 @@ ], "overviewEnabled": false, "panelPosition": "follow_bar", - "randomEnabled": true, "randomIntervalSec": 600, - "recursiveSearch": false, "setWallpaperOnAllMonitors": false, + "showHiddenFiles": false, + "solidColor": "#1a1a2e", "transitionDuration": 1500, "transitionEdgeSmoothness": 0.05, "transitionType": "random", + "useSolidColor": false, "useWallhaven": false, + "viewMode": "single", "wallhavenApiKey": "", "wallhavenCategories": "111", "wallhavenOrder": "desc",