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 0000000..cfc3b20 Binary files /dev/null and b/home/aiden/.config/noctalia/plugins/screen-recorder/preview.png differ diff --git a/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml b/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml index a9997ca..37dc85c 100644 --- a/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml +++ b/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml @@ -60,7 +60,7 @@ Rectangle { Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter text: root.pluginApi?.mainInstance?.updateCount.toString() color: root.hovered ? Color.mOnHover : Color.mOnSurface - pointSize: Style.fontSizeS + pointSize: Style.barFontSize } } diff --git a/home/aiden/.config/noctalia/plugins/update-count/manifest.json b/home/aiden/.config/noctalia/plugins/update-count/manifest.json index db18021..b142c1b 100644 --- a/home/aiden/.config/noctalia/plugins/update-count/manifest.json +++ b/home/aiden/.config/noctalia/plugins/update-count/manifest.json @@ -1,12 +1,13 @@ { "id": "update-count", "name": "Update Count", - "version": "1.0.6", + "version": "1.0.9", "minNoctaliaVersion": "3.6.0", "author": "BukoMoon", "license": "GPLv3", "repository": "https://github.com/noctalia-dev/noctalia-plugins", "description": "Checks for system updates and shows the update count. Click to run update command in a terminal.", + "tags": ["Bar", "System"], "entryPoints": { "main": "Main.qml", "barWidget": "BarWidget.qml", diff --git a/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json b/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json index a943738..c4209ee 100644 --- a/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json +++ b/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json @@ -2,13 +2,13 @@ { "name": "yay", "cmdCheck": "command -v yay >/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",