update
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
[[ $- != *i* ]] && return
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
alias ls='ls --color=auto'
|
alias ls='ls --color=auto'
|
||||||
|
alias ip='ip -c=always'
|
||||||
PS1='[\u@\h \W]\$ '
|
PS1='[\u@\h \W]\$ '
|
||||||
|
|
||||||
alias update='~/update.sh'
|
alias update='~/update.sh'
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ environment {
|
|||||||
QT_QPA_PLATFORMTHEME "gtk3"
|
QT_QPA_PLATFORMTHEME "gtk3"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include "workspaces.kdl"
|
||||||
include "startup.kdl"
|
include "startup.kdl"
|
||||||
include "input.kdl"
|
include "input.kdl"
|
||||||
include "outputs.kdl"
|
include "outputs.kdl"
|
||||||
|
|||||||
@@ -11,29 +11,12 @@ spawn-at-startup "/usr/bin/nextcloud"
|
|||||||
spawn-at-startup "/usr/bin/swayidle" "-w"
|
spawn-at-startup "/usr/bin/swayidle" "-w"
|
||||||
spawn-at-startup "~/.local/bin/niri-sidebar" "listen"
|
spawn-at-startup "~/.local/bin/niri-sidebar" "listen"
|
||||||
spawn-at-startup "/usr/bin/niri-float-sticky"
|
spawn-at-startup "/usr/bin/niri-float-sticky"
|
||||||
|
spawn-at-startup "/usr/bin/flatpak" "--user" "run" "com.github.wwmm.easyeffects" "-w"
|
||||||
|
|
||||||
workspace "chat" {
|
spawn-at-startup "/usr/bin/flatpak" "--user" "run" "im.nheko.Nheko"
|
||||||
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"
|
//"--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/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"
|
|
||||||
//}
|
|
||||||
//spawn-at-startup "/usr/bin/srain"
|
//spawn-at-startup "/usr/bin/srain"
|
||||||
|
|||||||
33
home/aiden/.config/niri/workspaces.kdl
Normal file
33
home/aiden/.config/niri/workspaces.kdl
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// WORKSAPCE: chat
|
||||||
|
workspace "chat" {
|
||||||
|
open-on-output "Acer Technologies G246HYL LZ5AA0012413"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="nheko"
|
||||||
|
open-on-workspace "chat"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="Element"
|
||||||
|
open-on-workspace "chat"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="discord"
|
||||||
|
open-on-workspace "chat"
|
||||||
|
}
|
||||||
|
//window-rule {
|
||||||
|
// match app-id="srain"
|
||||||
|
// open-on-workspace "chat"
|
||||||
|
//}
|
||||||
|
|
||||||
|
// WORKSAPCE: VM
|
||||||
|
workspace "VM" {
|
||||||
|
open-on-output "LG Electronics LG ULTRAGEAR 101NTLELA752"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="virt-manager"
|
||||||
|
open-on-workspace "VM"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="VirtualBox Manager"
|
||||||
|
open-on-workspace "VM"
|
||||||
|
}
|
||||||
@@ -1,34 +1,90 @@
|
|||||||
{
|
{
|
||||||
"dark": {
|
"dark": {
|
||||||
"mPrimary": "#b58fff",
|
"mPrimary": "#b58fff",
|
||||||
"mOnPrimary": "#000000",
|
"mOnPrimary": "#000000",
|
||||||
"mSecondary": "#c79aff",
|
"mSecondary": "#c79aff",
|
||||||
"mOnSecondary": "#000000",
|
"mOnSecondary": "#000000",
|
||||||
"mTertiary": "#d8b4ff",
|
"mTertiary": "#d8b4ff",
|
||||||
"mOnTertiary": "#000000",
|
"mOnTertiary": "#000000",
|
||||||
"mError": "#ff6f9b",
|
"mError": "#ff6f9b",
|
||||||
"mOnError": "#000000",
|
"mOnError": "#000000",
|
||||||
"mSurface": "#000000",
|
"mSurface": "#000000",
|
||||||
"mOnSurface": "#e8d8ff",
|
"mOnSurface": "#e8d8ff",
|
||||||
"mSurfaceVariant": "#110d1a",
|
"mSurfaceVariant": "#110d1a",
|
||||||
"mOnSurfaceVariant": "#b58fff",
|
"mOnSurfaceVariant": "#b58fff",
|
||||||
"mOutline": "#4c3a70",
|
"mOutline": "#4c3a70",
|
||||||
"mShadow": "#000000"
|
"mShadow": "#000000",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#e8d8ff",
|
||||||
|
"background": "#000000",
|
||||||
|
"selectionFg": "#e8d8ff",
|
||||||
|
"selectionBg": "#4c3a70",
|
||||||
|
"cursorText": "#000000",
|
||||||
|
"cursor": "#e8d8ff",
|
||||||
|
"normal": {
|
||||||
|
"black": "#000000",
|
||||||
|
"red": "#ff6f9b",
|
||||||
|
"green": "#a8e6cf",
|
||||||
|
"yellow": "#d8b4ff",
|
||||||
|
"blue": "#b58fff",
|
||||||
|
"magenta": "#c79aff",
|
||||||
|
"cyan": "#e0c1ff",
|
||||||
|
"white": "#e8d8ff"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#4c3a70",
|
||||||
|
"red": "#ff8cb3",
|
||||||
|
"green": "#b8f0d8",
|
||||||
|
"yellow": "#e6d1ff",
|
||||||
|
"blue": "#c9a8ff",
|
||||||
|
"magenta": "#d4b8ff",
|
||||||
|
"cyan": "#f0e0ff",
|
||||||
|
"white": "#f5f0ff"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"light": {
|
"light": {
|
||||||
"mPrimary": "#8a56d4",
|
"mPrimary": "#8a56d4",
|
||||||
"mOnPrimary": "#ffffff",
|
"mOnPrimary": "#ffffff",
|
||||||
"mSecondary": "#a074ff",
|
"mSecondary": "#a074ff",
|
||||||
"mOnSecondary": "#ffffff",
|
"mOnSecondary": "#ffffff",
|
||||||
"mTertiary": "#c79aff",
|
"mTertiary": "#c79aff",
|
||||||
"mOnTertiary": "#ffffff",
|
"mOnTertiary": "#ffffff",
|
||||||
"mError": "#ff6f9b",
|
"mError": "#ff6f9b",
|
||||||
"mOnError": "#ffffff",
|
"mOnError": "#ffffff",
|
||||||
"mSurface": "#fbf8ff",
|
"mSurface": "#fbf8ff",
|
||||||
"mOnSurface": "#1a1428",
|
"mOnSurface": "#1a1428",
|
||||||
"mSurfaceVariant": "#e8e0f8",
|
"mSurfaceVariant": "#e8e0f8",
|
||||||
"mOnSurfaceVariant": "#8a56d4",
|
"mOnSurfaceVariant": "#8a56d4",
|
||||||
"mOutline": "#9b85c2",
|
"mOutline": "#9b85c2",
|
||||||
"mShadow": "#e2d8f5"
|
"mShadow": "#e2d8f5",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#1a1428",
|
||||||
|
"background": "#fbf8ff",
|
||||||
|
"selectionFg": "#1a1428",
|
||||||
|
"selectionBg": "#e8e0f8",
|
||||||
|
"cursorText": "#fbf8ff",
|
||||||
|
"cursor": "#1a1428",
|
||||||
|
"normal": {
|
||||||
|
"black": "#6b5b95",
|
||||||
|
"red": "#ff6f9b",
|
||||||
|
"green": "#6fb58f",
|
||||||
|
"yellow": "#c79aff",
|
||||||
|
"blue": "#8a56d4",
|
||||||
|
"magenta": "#a074ff",
|
||||||
|
"cyan": "#b89fff",
|
||||||
|
"white": "#1a1428"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#9b85c2",
|
||||||
|
"red": "#ff8cb3",
|
||||||
|
"green": "#85d7a8",
|
||||||
|
"yellow": "#e0c1ff",
|
||||||
|
"blue": "#b58fff",
|
||||||
|
"magenta": "#c79aff",
|
||||||
|
"cyan": "#d8b4ff",
|
||||||
|
"white": "#120f1f"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,35 @@
|
|||||||
"mOutline": "#44415a",
|
"mOutline": "#44415a",
|
||||||
"mShadow": "#232136",
|
"mShadow": "#232136",
|
||||||
"mHover": "#56526e",
|
"mHover": "#56526e",
|
||||||
"mOnHover": "#e0def4"
|
"mOnHover": "#e0def4",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#e0def4",
|
||||||
|
"background": "#232136",
|
||||||
|
"normal": {
|
||||||
|
"black": "#393552",
|
||||||
|
"red": "#eb6f92",
|
||||||
|
"green": "#3e8fb0",
|
||||||
|
"yellow": "#f6c177",
|
||||||
|
"blue": "#9ccfd8",
|
||||||
|
"magenta": "#c4a7e7",
|
||||||
|
"cyan": "#ea9a97",
|
||||||
|
"white": "#e0def4"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#6e6a86",
|
||||||
|
"red": "#eb6f92",
|
||||||
|
"green": "#3e8fb0",
|
||||||
|
"yellow": "#f6c177",
|
||||||
|
"blue": "#9ccfd8",
|
||||||
|
"magenta": "#c4a7e7",
|
||||||
|
"cyan": "#ea9a97",
|
||||||
|
"white": "#e0def4"
|
||||||
|
},
|
||||||
|
"cursor": "#e0def4",
|
||||||
|
"cursorText": "#232136",
|
||||||
|
"selectionFg": "#e0def4",
|
||||||
|
"selectionBg": "#6e6a86"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"light": {
|
"light": {
|
||||||
"mPrimary": "#d7827e",
|
"mPrimary": "#d7827e",
|
||||||
@@ -33,6 +61,34 @@
|
|||||||
"mOutline": "#dfdad9",
|
"mOutline": "#dfdad9",
|
||||||
"mShadow": "#faf4ed",
|
"mShadow": "#faf4ed",
|
||||||
"mHover": "#cecacd",
|
"mHover": "#cecacd",
|
||||||
"mOnHover": "#575279"
|
"mOnHover": "#575279",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#575279",
|
||||||
|
"background": "#faf4ed",
|
||||||
|
"normal": {
|
||||||
|
"black": "#f2e9e1",
|
||||||
|
"red": "#b4637a",
|
||||||
|
"green": "#286983",
|
||||||
|
"yellow": "#ea9d34",
|
||||||
|
"blue": "#56949f",
|
||||||
|
"magenta": "#907aa9",
|
||||||
|
"cyan": "#d7827e",
|
||||||
|
"white": "#575279"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#9893a5",
|
||||||
|
"red": "#b4637a",
|
||||||
|
"green": "#286983",
|
||||||
|
"yellow": "#ea9d34",
|
||||||
|
"blue": "#56949f",
|
||||||
|
"magenta": "#907aa9",
|
||||||
|
"cyan": "#d7827e",
|
||||||
|
"white": "#575279"
|
||||||
|
},
|
||||||
|
"cursor": "#575279",
|
||||||
|
"cursorText": "#faf4ed",
|
||||||
|
"selectionFg": "#575279",
|
||||||
|
"selectionBg": "#9893a5"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,38 +1,94 @@
|
|||||||
{
|
{
|
||||||
"dark": {
|
"dark": {
|
||||||
"mPrimary": "#7a88cf",
|
"mPrimary": "#7a88cf",
|
||||||
"mOnPrimary": "#1f2335",
|
"mOnPrimary": "#1f2335",
|
||||||
"mSecondary": "#d7729f",
|
"mSecondary": "#d7729f",
|
||||||
"mOnSecondary": "#1f2335",
|
"mOnSecondary": "#1f2335",
|
||||||
"mTertiary": "#9cd58a",
|
"mTertiary": "#9cd58a",
|
||||||
"mOnTertiary": "#1f2335",
|
"mOnTertiary": "#1f2335",
|
||||||
"mError": "#f7768e",
|
"mError": "#f7768e",
|
||||||
"mOnError": "#1f2335",
|
"mOnError": "#1f2335",
|
||||||
"mSurface": "#1f2335",
|
"mSurface": "#1f2335",
|
||||||
"mOnSurface": "#a9b1d6",
|
"mOnSurface": "#a9b1d6",
|
||||||
"mSurfaceVariant": "#2c314a",
|
"mSurfaceVariant": "#2c314a",
|
||||||
"mOnSurfaceVariant": "#8289a6",
|
"mOnSurfaceVariant": "#c0caf5",
|
||||||
"mOutline": "#4b517a",
|
"mOutline": "#4b517a",
|
||||||
"mShadow": "#181b2a",
|
"mShadow": "#181b2a",
|
||||||
"mHover": "#9cd58a",
|
"mHover": "#9cd58a",
|
||||||
"mOnHover": "#1f2335"
|
"mOnHover": "#1f2335",
|
||||||
},
|
"terminal": {
|
||||||
"light": {
|
"foreground": "#a9b1d6",
|
||||||
"mPrimary": "#4e70c2",
|
"background": "#1f2335",
|
||||||
"mOnPrimary": "#f0f2f7",
|
"selectionFg": "#a9b1d6",
|
||||||
"mSecondary": "#85539c",
|
"selectionBg": "#4b517a",
|
||||||
"mOnSecondary": "#f0f2f7",
|
"cursorText": "#1f2335",
|
||||||
"mTertiary": "#4c663b",
|
"cursor": "#a9b1d6",
|
||||||
"mOnTertiary": "#f0f2f7",
|
"normal": {
|
||||||
"mError": "#e55561",
|
"black": "#1f2335",
|
||||||
"mOnError": "#f0f2f7",
|
"red": "#f7768e",
|
||||||
"mSurface": "#f0f2f7",
|
"green": "#9cd58a",
|
||||||
"mOnSurface": "#4e70c2",
|
"yellow": "#e6c384",
|
||||||
"mSurfaceVariant": "#dbdfea",
|
"blue": "#7a88cf",
|
||||||
"mOnSurfaceVariant": "#6a708a",
|
"magenta": "#d7729f",
|
||||||
"mOutline": "#c8ccd8",
|
"cyan": "#7bb0c0",
|
||||||
"mShadow": "#a4a8b7",
|
"white": "#8289a6"
|
||||||
"mHover": "#4c663b",
|
},
|
||||||
"mOnHover": "#f0f2f7"
|
"bright": {
|
||||||
|
"black": "#545c7e",
|
||||||
|
"red": "#f7768e",
|
||||||
|
"green": "#9cd58a",
|
||||||
|
"yellow": "#e6c384",
|
||||||
|
"blue": "#7a88cf",
|
||||||
|
"magenta": "#d7729f",
|
||||||
|
"cyan": "#7bb0c0",
|
||||||
|
"white": "#a9b1d6"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"light": {
|
||||||
|
"mPrimary": "#4e70c2",
|
||||||
|
"mOnPrimary": "#f0f2f7",
|
||||||
|
"mSecondary": "#85539c",
|
||||||
|
"mOnSecondary": "#f0f2f7",
|
||||||
|
"mTertiary": "#4c663b",
|
||||||
|
"mOnTertiary": "#f0f2f7",
|
||||||
|
"mError": "#e55561",
|
||||||
|
"mOnError": "#f0f2f7",
|
||||||
|
"mSurface": "#f0f2f7",
|
||||||
|
"mOnSurface": "#4e70c2",
|
||||||
|
"mSurfaceVariant": "#dbdfea",
|
||||||
|
"mOnSurfaceVariant": "#444b6a",
|
||||||
|
"mOutline": "#c8ccd8",
|
||||||
|
"mShadow": "#a4a8b7",
|
||||||
|
"mHover": "#4c663b",
|
||||||
|
"mOnHover": "#f0f2f7",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#4e70c2",
|
||||||
|
"background": "#f0f2f7",
|
||||||
|
"selectionFg": "#4e70c2",
|
||||||
|
"selectionBg": "#c8ccd8",
|
||||||
|
"cursorText": "#f0f2f7",
|
||||||
|
"cursor": "#4e70c2",
|
||||||
|
"normal": {
|
||||||
|
"black": "#f0f2f7",
|
||||||
|
"red": "#e55561",
|
||||||
|
"green": "#4c663b",
|
||||||
|
"yellow": "#9e8c6b",
|
||||||
|
"blue": "#4e70c2",
|
||||||
|
"magenta": "#85539c",
|
||||||
|
"cyan": "#569b9f",
|
||||||
|
"white": "#6a708a"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#939ab7",
|
||||||
|
"red": "#d26e7a",
|
||||||
|
"green": "#5e7250",
|
||||||
|
"yellow": "#9e8c6b",
|
||||||
|
"blue": "#5e7bba",
|
||||||
|
"magenta": "#85539c",
|
||||||
|
"cyan": "#569b9f",
|
||||||
|
"white": "#6a708a"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -36,12 +36,12 @@ Item {
|
|||||||
property var cfg: pluginApi?.pluginSettings || ({})
|
property var cfg: pluginApi?.pluginSettings || ({})
|
||||||
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
||||||
|
|
||||||
property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive
|
property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive ?? false
|
||||||
property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins
|
property bool enableToast: cfg.enableToast ?? defaults.enableToast ?? true
|
||||||
property int iconSpacing: cfg.iconSpacing || Style.marginXS
|
property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins ?? false
|
||||||
|
property int iconSpacing: cfg.iconSpacing ?? defaults.iconSpacing ?? 4
|
||||||
property string activeColorKey: cfg.activeColor ?? defaults.activeColor
|
property string activeColorKey: cfg.activeColor ?? defaults.activeColor ?? "primary"
|
||||||
property string inactiveColorKey: cfg.inactiveColor ?? defaults.inactiveColor
|
property string inactiveColorKey: cfg.inactiveColor ?? defaults.inactiveColor ?? "none"
|
||||||
|
|
||||||
readonly property color activeColor: Color.resolveColorKey(activeColorKey)
|
readonly property color activeColor: Color.resolveColorKey(activeColorKey)
|
||||||
readonly property color inactiveColor: inactiveColorKey === "none" ? Qt.alpha(Color.mOnSurfaceVariant, 0.3) : Color.resolveColorKey(inactiveColorKey)
|
readonly property color inactiveColor: inactiveColorKey === "none" ? Qt.alpha(Color.mOnSurfaceVariant, 0.3) : Color.resolveColorKey(inactiveColorKey)
|
||||||
|
|||||||
@@ -25,6 +25,12 @@ Item {
|
|||||||
property var _prevCamApps: []
|
property var _prevCamApps: []
|
||||||
property var _prevScrApps: []
|
property var _prevScrApps: []
|
||||||
|
|
||||||
|
// Get active color from settings or default
|
||||||
|
property var cfg: pluginApi?.pluginSettings || ({})
|
||||||
|
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
||||||
|
property bool enableToast: cfg.enableToast ?? defaults.enableToast ?? true
|
||||||
|
property string activeColorKey: cfg.activeColor ?? defaults.activeColor ?? "primary"
|
||||||
|
|
||||||
PwObjectTracker {
|
PwObjectTracker {
|
||||||
objects: Pipewire.ready ? Pipewire.nodes.values : []
|
objects: Pipewire.ready ? Pipewire.nodes.values : []
|
||||||
}
|
}
|
||||||
@@ -236,10 +242,6 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get active color from settings or default
|
|
||||||
property var cfg: pluginApi?.pluginSettings || ({})
|
|
||||||
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
|
||||||
property string activeColorKey: cfg.activeColor ?? defaults.activeColor ?? "primary"
|
|
||||||
|
|
||||||
onMicAppsChanged: {
|
onMicAppsChanged: {
|
||||||
checkAppChanges(micApps, _prevMicApps, "Microphone", "microphone", activeColorKey);
|
checkAppChanges(micApps, _prevMicApps, "Microphone", "microphone", activeColorKey);
|
||||||
@@ -248,7 +250,7 @@ Item {
|
|||||||
// Helper to detect activation edge
|
// Helper to detect activation edge
|
||||||
property bool oldMicActive: false
|
property bool oldMicActive: false
|
||||||
onMicActiveChanged: {
|
onMicActiveChanged: {
|
||||||
if (micActive && (!oldMicActive)) {
|
if (enableToast && micActive && !oldMicActive) {
|
||||||
ToastService.showNotice(pluginApi?.tr("toast.mic-on") || "Microphone is active", "", "microphone");
|
ToastService.showNotice(pluginApi?.tr("toast.mic-on") || "Microphone is active", "", "microphone");
|
||||||
}
|
}
|
||||||
oldMicActive = micActive
|
oldMicActive = micActive
|
||||||
@@ -256,7 +258,7 @@ Item {
|
|||||||
|
|
||||||
property bool oldCamActive: false
|
property bool oldCamActive: false
|
||||||
onCamActiveChanged: {
|
onCamActiveChanged: {
|
||||||
if (camActive && !oldCamActive) {
|
if (enableToast && camActive && !oldCamActive) {
|
||||||
ToastService.showNotice(pluginApi?.tr("toast.cam-on") || "Camera is active", "", "camera");
|
ToastService.showNotice(pluginApi?.tr("toast.cam-on") || "Camera is active", "", "camera");
|
||||||
}
|
}
|
||||||
oldCamActive = camActive
|
oldCamActive = camActive
|
||||||
@@ -268,7 +270,7 @@ Item {
|
|||||||
|
|
||||||
property bool oldScrActive: false
|
property bool oldScrActive: false
|
||||||
onScrActiveChanged: {
|
onScrActiveChanged: {
|
||||||
if (scrActive && !oldScrActive) {
|
if (enableToast && scrActive && !oldScrActive) {
|
||||||
ToastService.showNotice(pluginApi?.tr("toast.screen-on") || "Screen sharing is active", "", "screen-share");
|
ToastService.showNotice(pluginApi?.tr("toast.screen-on") || "Screen sharing is active", "", "screen-share");
|
||||||
}
|
}
|
||||||
oldScrActive = scrActive
|
oldScrActive = scrActive
|
||||||
|
|||||||
@@ -11,11 +11,12 @@ ColumnLayout {
|
|||||||
property var cfg: pluginApi?.pluginSettings || ({})
|
property var cfg: pluginApi?.pluginSettings || ({})
|
||||||
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
||||||
|
|
||||||
property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive
|
property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive ?? false
|
||||||
property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins
|
property bool enableToast: cfg.enableToast ?? defaults.enableToast ?? true
|
||||||
property int iconSpacing: cfg.iconSpacing || Style.marginXS
|
property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins ?? false
|
||||||
property string activeColor: cfg.activeColor ?? defaults.activeColor
|
property int iconSpacing: cfg.iconSpacing ?? defaults.iconSpacing ?? 4
|
||||||
property string inactiveColor: cfg.inactiveColor ?? defaults.inactiveColor
|
property string activeColor: cfg.activeColor ?? defaults.activeColor ?? "primary"
|
||||||
|
property string inactiveColor: cfg.inactiveColor ?? defaults.inactiveColor ?? "none"
|
||||||
|
|
||||||
spacing: Style.marginL
|
spacing: Style.marginL
|
||||||
|
|
||||||
@@ -32,35 +33,45 @@ ColumnLayout {
|
|||||||
description: pluginApi?.tr("settings.hideInactive.desc")
|
description: pluginApi?.tr("settings.hideInactive.desc")
|
||||||
|
|
||||||
checked: root.hideInactive
|
checked: root.hideInactive
|
||||||
onToggled: function (checked) {
|
onToggled: checked => {
|
||||||
root.hideInactive = checked;
|
root.hideInactive = checked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NToggle {
|
||||||
|
label: pluginApi?.tr("settings.enableToast.label")
|
||||||
|
description: pluginApi?.tr("settings.enableToast.desc")
|
||||||
|
|
||||||
|
checked: root.enableToast
|
||||||
|
onToggled: checked => {
|
||||||
|
root.enableToast = checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NToggle {
|
NToggle {
|
||||||
label: pluginApi?.tr("settings.removeMargins.label")
|
label: pluginApi?.tr("settings.removeMargins.label")
|
||||||
description: pluginApi?.tr("settings.removeMargins.desc")
|
description: pluginApi?.tr("settings.removeMargins.desc")
|
||||||
|
|
||||||
checked: root.removeMargins
|
checked: root.removeMargins
|
||||||
onToggled: function (checked) {
|
onToggled: checked => {
|
||||||
root.removeMargins = checked;
|
root.removeMargins = checked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NComboBox {
|
NColorChoice {
|
||||||
label: pluginApi?.tr("settings.activeColor.label")
|
label: pluginApi?.tr("settings.activeColor.label")
|
||||||
description: pluginApi?.tr("settings.activeColor.desc")
|
description: pluginApi?.tr("settings.activeColor.desc")
|
||||||
model: Color.colorKeyModel
|
|
||||||
currentKey: root.activeColor
|
currentKey: root.activeColor
|
||||||
onSelected: key => root.activeColor = key
|
onSelected: key => root.activeColor = key
|
||||||
}
|
}
|
||||||
|
|
||||||
NComboBox {
|
NColorChoice {
|
||||||
label: pluginApi?.tr("settings.inactiveColor.label")
|
label: pluginApi?.tr("settings.inactiveColor.label")
|
||||||
description: pluginApi?.tr("settings.inactiveColor.desc")
|
description: pluginApi?.tr("settings.inactiveColor.desc")
|
||||||
model: Color.colorKeyModel
|
|
||||||
currentKey: root.inactiveColor
|
currentKey: root.inactiveColor
|
||||||
onSelected: key => root.inactiveColor = key
|
onSelected: key => root.inactiveColor = key
|
||||||
|
noneColor: Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||||
|
noneOnColor: Qt.alpha(Color.mOnSurface, 0.7)
|
||||||
}
|
}
|
||||||
|
|
||||||
NComboBox {
|
NComboBox {
|
||||||
@@ -96,6 +107,7 @@ ColumnLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pluginApi.pluginSettings.hideInactive = root.hideInactive;
|
pluginApi.pluginSettings.hideInactive = root.hideInactive;
|
||||||
|
pluginApi.pluginSettings.enableToast = root.enableToast;
|
||||||
pluginApi.pluginSettings.iconSpacing = root.iconSpacing;
|
pluginApi.pluginSettings.iconSpacing = root.iconSpacing;
|
||||||
pluginApi.pluginSettings.removeMargins = root.removeMargins;
|
pluginApi.pluginSettings.removeMargins = root.removeMargins;
|
||||||
pluginApi.pluginSettings.activeColor = root.activeColor;
|
pluginApi.pluginSettings.activeColor = root.activeColor;
|
||||||
|
|||||||
@@ -11,6 +11,10 @@
|
|||||||
"desc": "Hide microphone, camera, and screen icons when there are inactive.",
|
"desc": "Hide microphone, camera, and screen icons when there are inactive.",
|
||||||
"label": "Hide inactive states"
|
"label": "Hide inactive states"
|
||||||
},
|
},
|
||||||
|
"enableToast": {
|
||||||
|
"desc": "Show toast messages when one of the states changes.",
|
||||||
|
"label": "Enable toast notifications"
|
||||||
|
},
|
||||||
"inactiveColor": {
|
"inactiveColor": {
|
||||||
"desc": "Color of the icons when inactive.",
|
"desc": "Color of the icons when inactive.",
|
||||||
"label": "Inactive icon color"
|
"label": "Inactive icon color"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "privacy-indicator",
|
"id": "privacy-indicator",
|
||||||
"name": "Privacy Indicator",
|
"name": "Privacy Indicator",
|
||||||
"version": "1.2.4",
|
"version": "1.2.5",
|
||||||
"minNoctaliaVersion": "3.6.0",
|
"minNoctaliaVersion": "3.6.0",
|
||||||
"author": "Noctalia Team",
|
"author": "Noctalia Team",
|
||||||
"official": true,
|
"official": true,
|
||||||
@@ -25,7 +25,9 @@
|
|||||||
"metadata": {
|
"metadata": {
|
||||||
"defaultSettings": {
|
"defaultSettings": {
|
||||||
"hideInactive": false,
|
"hideInactive": false,
|
||||||
|
"enableToast": true,
|
||||||
"removeMargins": false,
|
"removeMargins": false,
|
||||||
|
"iconSpacing": 4,
|
||||||
"activeColor": "primary",
|
"activeColor": "primary",
|
||||||
"inactiveColor": "none"
|
"inactiveColor": "none"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import Quickshell.Io
|
|||||||
import qs.Commons
|
import qs.Commons
|
||||||
import qs.Services.UI
|
import qs.Services.UI
|
||||||
import qs.Services.System
|
import qs.Services.System
|
||||||
|
import qs.Services.Compositor
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
@@ -15,6 +16,8 @@ Item {
|
|||||||
property bool hasActiveRecording: false
|
property bool hasActiveRecording: false
|
||||||
property string outputPath: ""
|
property string outputPath: ""
|
||||||
property bool isAvailable: false
|
property bool isAvailable: false
|
||||||
|
property string detectedMonitor: ""
|
||||||
|
property bool usePrimeRun: false
|
||||||
|
|
||||||
// Single reusable Process object
|
// Single reusable Process object
|
||||||
Process {
|
Process {
|
||||||
@@ -36,19 +39,19 @@ Item {
|
|||||||
|
|
||||||
function toggle() {
|
function toggle() {
|
||||||
if (root.isAvailable) {
|
if (root.isAvailable) {
|
||||||
root.toggleRecording()
|
root.toggleRecording();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
if (root.isAvailable && !root.isRecording && !root.isPending) {
|
if (root.isAvailable && !root.isRecording && !root.isPending) {
|
||||||
root.startRecording()
|
root.startRecording();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function stop() {
|
function stop() {
|
||||||
if (root.isRecording || root.isPending) {
|
if (root.isRecording || root.isPending) {
|
||||||
root.stopRecording()
|
root.stopRecording();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,6 +61,7 @@ Item {
|
|||||||
readonly property string directory: pluginApi?.pluginSettings?.directory || ""
|
readonly property string directory: pluginApi?.pluginSettings?.directory || ""
|
||||||
readonly property string filenamePattern: pluginApi?.pluginSettings?.filenamePattern || "recording_yyyyMMdd_HHmmss"
|
readonly property string filenamePattern: pluginApi?.pluginSettings?.filenamePattern || "recording_yyyyMMdd_HHmmss"
|
||||||
readonly property string frameRate: pluginApi?.pluginSettings?.frameRate || "60"
|
readonly property string frameRate: pluginApi?.pluginSettings?.frameRate || "60"
|
||||||
|
readonly property string customFrameRate: pluginApi?.pluginSettings?.customFrameRate || "60"
|
||||||
readonly property string audioCodec: pluginApi?.pluginSettings?.audioCodec || "opus"
|
readonly property string audioCodec: pluginApi?.pluginSettings?.audioCodec || "opus"
|
||||||
readonly property string videoCodec: pluginApi?.pluginSettings?.videoCodec || "h264"
|
readonly property string videoCodec: pluginApi?.pluginSettings?.videoCodec || "h264"
|
||||||
readonly property string quality: pluginApi?.pluginSettings?.quality || "very_high"
|
readonly property string quality: pluginApi?.pluginSettings?.quality || "very_high"
|
||||||
@@ -70,77 +74,74 @@ Item {
|
|||||||
|
|
||||||
function buildTooltip() {
|
function buildTooltip() {
|
||||||
if (!isAvailable) {
|
if (!isAvailable) {
|
||||||
return pluginApi.tr("messages.not-installed")
|
return pluginApi.tr("messages.not-installed");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPending) {
|
if (isPending) {
|
||||||
pluginApi.tr("messages.started")
|
pluginApi.tr("messages.started");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isRecording) {
|
if (isRecording) {
|
||||||
return pluginApi.tr("messages.stop-recording")
|
return pluginApi.tr("messages.stop-recording");
|
||||||
}
|
}
|
||||||
|
|
||||||
return pluginApi.tr("messages.start-recording")
|
return pluginApi.tr("messages.start-recording");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Start or Stop recording
|
// Start or Stop recording
|
||||||
function toggleRecording() {
|
function toggleRecording() {
|
||||||
(isRecording || isPending) ? stopRecording() : startRecording()
|
(isRecording || isPending) ? stopRecording() : startRecording();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open recording file
|
// Open recording file
|
||||||
function openFile(path) {
|
function openFile(path) {
|
||||||
if (!path) {
|
if (!path) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
Quickshell.execDetached(["xdg-open", path])
|
Quickshell.execDetached(["xdg-open", path]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy file to clipboard as file reference
|
// Copy file to clipboard as file reference
|
||||||
function copyFileToClipboard(filePath) {
|
function copyFileToClipboard(filePath) {
|
||||||
if (!filePath) {
|
if (!filePath) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
// Convert path to file:// URI format for copying as file reference
|
// 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 fileUri = "file://" + filePath.replace(/ /g, "%20").replace(/'/g, "%27").replace(/"/g, "%22");
|
||||||
const escapedUri = fileUri.replace(/'/g, "'\\''")
|
const escapedUri = fileUri.replace(/'/g, "'\\''");
|
||||||
const command = "printf '%s' '" + escapedUri + "' | wl-copy --type text/uri-list"
|
const command = "printf '%s' '" + escapedUri + "' | wl-copy --type text/uri-list";
|
||||||
copyToClipboardProcess.exec({
|
copyToClipboardProcess.exec({
|
||||||
"command": ["sh", "-c", command]
|
"command": ["sh", "-c", command]
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start screen recording
|
// Start screen recording
|
||||||
function startRecording() {
|
function startRecording() {
|
||||||
if (!isAvailable) {
|
if (!isAvailable) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
if (isRecording || isPending) {
|
if (isRecording || isPending) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
isPending = true
|
isPending = true;
|
||||||
hasActiveRecording = false
|
hasActiveRecording = false;
|
||||||
|
|
||||||
// Close any opened panel
|
// Close any opened panel
|
||||||
if ((PanelService.openedPanel !== null) && !PanelService.openedPanel.isClosing) {
|
if ((PanelService.openedPanel !== null) && !PanelService.openedPanel.isClosing) {
|
||||||
PanelService.openedPanel.close()
|
PanelService.openedPanel.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// First, ensure xdg-desktop-portal and a compositor portal are running
|
// First, ensure xdg-desktop-portal and a compositor portal are running
|
||||||
portalCheckProcess.exec({
|
portalCheckProcess.exec({
|
||||||
"command": ["sh", "-c",
|
"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)"]
|
||||||
"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) {
|
function expandFilenamePattern(pattern) {
|
||||||
var now = new Date()
|
var now = new Date();
|
||||||
|
|
||||||
// Known Qt date/time format tokens sorted by length (longest first to match greedily)
|
// 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',
|
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'];
|
||||||
'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
|
// Escape literal text by wrapping non-token sequences in single quotes
|
||||||
var escaped = "";
|
var escaped = "";
|
||||||
@@ -199,89 +200,103 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Use Qt's I18n.locale.toString for proper date/time formatting
|
// Use Qt's I18n.locale.toString for proper date/time formatting
|
||||||
var expanded = I18n.locale.toString(now, escaped)
|
var expanded = I18n.locale.toString(now, escaped);
|
||||||
return expanded + ".mp4"
|
return expanded + ".mp4";
|
||||||
}
|
}
|
||||||
|
|
||||||
function launchRecorder() {
|
function launchRecorder() {
|
||||||
var pattern = filenamePattern || "recording_yyyyMMdd_HHmmss"
|
// If focused-monitor is selected, detect monitor first
|
||||||
var filename = expandFilenamePattern(pattern)
|
if (videoSource === "focused-monitor" && CompositorService.isHyprland) {
|
||||||
var videoDir = Settings.preprocessPath(directory)
|
var script = 'set -euo pipefail\n' + 'pos=$(hyprctl cursorpos)\n' + 'cx=${pos%,*}; cy=${pos#*,}\n' + 'mon=$(hyprctl monitors -j | jq -r --argjson cx "$cx" --argjson cy "$cy" ' + "'.[] | select(($cx>=.x) and ($cx<(.x+.width)) and ($cy>=.y) and ($cy<(.y+.height))) | .name' " + '| head -n1)\n' + '[ -n "${mon:-}" ] || { echo "MONITOR_NOT_FOUND"; exit 1; }\n' + 'use_prime=0\n' + 'for v in /sys/class/drm/card*/device/vendor; do\n' + ' [ -f "$v" ] || continue\n' + ' if grep -qi "0x10de" "$v"; then\n' + ' card="$(basename "$(dirname "$(dirname "$v")")")"\n' + ' [ -e "/sys/class/drm/${card}-${mon}" ] && use_prime=1 && break\n' + ' fi\n' + 'done\n' + 'echo "${mon}:${use_prime}"';
|
||||||
|
monitorDetectProcess.exec({
|
||||||
|
"command": ["sh", "-c", script]
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
launchRecorderWithSource(videoSource, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function launchRecorderWithSource(source, primeRun) {
|
||||||
|
var pattern = filenamePattern || "recording_yyyyMMdd_HHmmss";
|
||||||
|
var filename = expandFilenamePattern(pattern);
|
||||||
|
var videoDir = Settings.preprocessPath(directory);
|
||||||
if (!videoDir) {
|
if (!videoDir) {
|
||||||
videoDir = Quickshell.env("HOME") + "/Videos"
|
videoDir = Quickshell.env("HOME") + "/Videos";
|
||||||
}
|
}
|
||||||
if (videoDir && !videoDir.endsWith("/")) {
|
if (videoDir && !videoDir.endsWith("/")) {
|
||||||
videoDir += "/"
|
videoDir += "/";
|
||||||
}
|
}
|
||||||
outputPath = videoDir + filename
|
outputPath = videoDir + filename;
|
||||||
|
|
||||||
const audioFlags = (() => {
|
const audioFlags = (() => {
|
||||||
if (audioSource === "none") {
|
if (audioSource === "none") {
|
||||||
return ""
|
return "";
|
||||||
}
|
}
|
||||||
if (audioSource === "both") {
|
if (audioSource === "both") {
|
||||||
return `-ac ${audioCodec} -a "default_output|default_input"`
|
return `-ac ${audioCodec} -a "default_output|default_input"`;
|
||||||
}
|
}
|
||||||
return `-ac ${audioCodec} -a ${audioSource}`
|
return `-ac ${audioCodec} -a ${audioSource}`;
|
||||||
})()
|
})();
|
||||||
|
|
||||||
var resolutionFlag = (resolution !== "original") ? `-s ${resolution}` : ""
|
var actualFrameRate = (frameRate === "custom") ? customFrameRate : frameRate;
|
||||||
var flags = `-w ${videoSource} -f ${frameRate} -k ${videoCodec} ${audioFlags} -q ${quality} -cursor ${showCursor ? "yes" : "no"} -cr ${colorRange} ${resolutionFlag} -o "${outputPath}"`
|
var resolutionFlag = (resolution !== "original") ? `-s ${resolution}` : "";
|
||||||
|
var flags = `-w ${source} -f ${actualFrameRate} -k ${videoCodec} ${audioFlags} -q ${quality} -cursor ${showCursor ? "yes" : "no"} -cr ${colorRange} ${resolutionFlag} -o "${outputPath}"`;
|
||||||
|
var primePrefix = primeRun ? "prime-run " : "";
|
||||||
var command = `
|
var command = `
|
||||||
_gpuscreenrecorder_flatpak_installed() {
|
_gpuscreenrecorder_flatpak_installed() {
|
||||||
flatpak list --app | grep -q "com.dec05eba.gpu_screen_recorder"
|
flatpak list --app | grep -q "com.dec05eba.gpu_screen_recorder"
|
||||||
}
|
}
|
||||||
if command -v gpu-screen-recorder >/dev/null 2>&1; then
|
if command -v gpu-screen-recorder >/dev/null 2>&1; then
|
||||||
gpu-screen-recorder ${flags}
|
${primePrefix}gpu-screen-recorder ${flags}
|
||||||
elif command -v flatpak >/dev/null 2>&1 && _gpuscreenrecorder_flatpak_installed; then
|
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}
|
${primePrefix}flatpak run --command=gpu-screen-recorder --file-forwarding com.dec05eba.gpu_screen_recorder ${flags}
|
||||||
else
|
else
|
||||||
echo "GPU_SCREEN_RECORDER_NOT_INSTALLED"
|
echo "GPU_SCREEN_RECORDER_NOT_INSTALLED"
|
||||||
fi`
|
fi`;
|
||||||
|
|
||||||
// Use Process to monitor it and read stderr
|
// Use Process to monitor it and read stderr
|
||||||
recorderProcess.exec({
|
recorderProcess.exec({
|
||||||
"command": ["sh", "-c", command]
|
"command": ["sh", "-c", command]
|
||||||
})
|
});
|
||||||
|
|
||||||
// Start monitoring - if process ends quickly, it was likely cancelled
|
// Start monitoring - if process ends quickly, it was likely cancelled
|
||||||
pendingTimer.running = true
|
pendingTimer.running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop recording
|
// Stop recording
|
||||||
function stopRecording() {
|
function stopRecording() {
|
||||||
if (!isRecording && !isPending) {
|
if (!isRecording && !isPending) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToastService.showNotice(pluginApi.tr("messages.stopping"), outputPath, "video")
|
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'"])
|
Quickshell.execDetached(["sh", "-c", "pkill -SIGINT -f 'gpu-screen-recorder' || pkill -SIGINT -f 'com.dec05eba.gpu_screen_recorder'"]);
|
||||||
|
|
||||||
isRecording = false
|
isRecording = false;
|
||||||
isPending = false
|
isPending = false;
|
||||||
pendingTimer.running = false
|
pendingTimer.running = false;
|
||||||
monitorTimer.running = false
|
monitorTimer.running = false;
|
||||||
hasActiveRecording = false
|
hasActiveRecording = false;
|
||||||
|
|
||||||
// Just in case, force kill after 3 seconds
|
// Just in case, force kill after 3 seconds
|
||||||
killTimer.running = true
|
killTimer.running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function to truncate text for toast display
|
// Helper function to truncate text for toast display
|
||||||
function truncateForToast(text, maxLength = 128) {
|
function truncateForToast(text, maxLength = 128) {
|
||||||
if (text.length <= maxLength) return text
|
if (text.length <= maxLength)
|
||||||
return text.substring(0, maxLength) + "…"
|
return text;
|
||||||
|
return text.substring(0, maxLength) + "…";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function to check if output indicates user cancellation
|
// Helper function to check if output indicates user cancellation
|
||||||
function isCancelledByUser(stdoutText, stderrText) {
|
function isCancelledByUser(stdoutText, stderrText) {
|
||||||
const stdout = String(stdoutText || "").toLowerCase()
|
const stdout = String(stdoutText || "").toLowerCase();
|
||||||
const stderr = String(stderrText || "").toLowerCase()
|
const stderr = String(stderrText || "").toLowerCase();
|
||||||
const combined = stdout + " " + stderr
|
const combined = stdout + " " + stderr;
|
||||||
return combined.includes("canceled by") || combined.includes("cancelled by") ||
|
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");
|
||||||
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 to run and monitor gpu-screen-recorder
|
||||||
@@ -290,59 +305,59 @@ Item {
|
|||||||
stdout: StdioCollector {}
|
stdout: StdioCollector {}
|
||||||
stderr: StdioCollector {}
|
stderr: StdioCollector {}
|
||||||
onExited: function (exitCode, exitStatus) {
|
onExited: function (exitCode, exitStatus) {
|
||||||
const stdout = String(recorderProcess.stdout.text || "").trim()
|
const stdout = String(recorderProcess.stdout.text || "").trim();
|
||||||
const stderr = String(recorderProcess.stderr.text || "").trim()
|
const stderr = String(recorderProcess.stderr.text || "").trim();
|
||||||
const wasCancelled = isCancelledByUser(stdout, stderr)
|
const wasCancelled = isCancelledByUser(stdout, stderr);
|
||||||
|
|
||||||
if (isPending) {
|
if (isPending) {
|
||||||
// Process ended while we were pending - likely cancelled or error
|
// Process ended while we were pending - likely cancelled or error
|
||||||
isPending = false
|
isPending = false;
|
||||||
pendingTimer.running = false
|
pendingTimer.running = false;
|
||||||
|
|
||||||
// Check if gpu-screen-recorder is not installed
|
// Check if gpu-screen-recorder is not installed
|
||||||
if (stdout === "GPU_SCREEN_RECORDER_NOT_INSTALLED") {
|
if (stdout === "GPU_SCREEN_RECORDER_NOT_INSTALLED") {
|
||||||
ToastService.showError(pluginApi.tr("messages.not-installed"), pluginApi.tr("messages.not-installed-desc"))
|
ToastService.showError(pluginApi.tr("messages.not-installed"), pluginApi.tr("messages.not-installed-desc"));
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If it failed to start, show a clear error toast with stderr
|
// If it failed to start, show a clear error toast with stderr
|
||||||
// But don't show error if user intentionally cancelled via portal
|
// But don't show error if user intentionally cancelled via portal
|
||||||
if (exitCode !== 0) {
|
if (exitCode !== 0) {
|
||||||
if (stderr.length > 0 && !wasCancelled) {
|
if (stderr.length > 0 && !wasCancelled) {
|
||||||
ToastService.showError(pluginApi.tr("messages.failed-start"), truncateForToast(stderr))
|
ToastService.showError(pluginApi.tr("messages.failed-start"), truncateForToast(stderr));
|
||||||
Logger.e("ScreenRecorder", stderr)
|
Logger.e("ScreenRecorder", stderr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (isRecording || hasActiveRecording) {
|
} else if (isRecording || hasActiveRecording) {
|
||||||
// Process ended normally while recording
|
// Process ended normally while recording
|
||||||
isRecording = false
|
isRecording = false;
|
||||||
monitorTimer.running = false
|
monitorTimer.running = false;
|
||||||
if (exitCode === 0) {
|
if (exitCode === 0) {
|
||||||
// ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video")
|
// ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video")
|
||||||
ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video", 3000, pluginApi.tr("messages.open-file"), () => openFile(outputPath))
|
ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video", 3000, pluginApi.tr("messages.open-file"), () => openFile(outputPath));
|
||||||
|
|
||||||
if (copyToClipboard) {
|
if (copyToClipboard) {
|
||||||
copyFileToClipboard(outputPath)
|
copyFileToClipboard(outputPath);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Don't show error if user intentionally cancelled
|
// Don't show error if user intentionally cancelled
|
||||||
if (!wasCancelled) {
|
if (!wasCancelled) {
|
||||||
if (stderr.length > 0) {
|
if (stderr.length > 0) {
|
||||||
ToastService.showError(pluginApi.tr("messages.failed-start"), truncateForToast(stderr))
|
ToastService.showError(pluginApi.tr("messages.failed-start"), truncateForToast(stderr));
|
||||||
Logger.e("ScreenRecorder", stderr)
|
Logger.e("ScreenRecorder", stderr);
|
||||||
} else {
|
} else {
|
||||||
ToastService.showError(pluginApi.tr("messages.failed-start"), pluginApi.tr("messages.failed-general"))
|
ToastService.showError(pluginApi.tr("messages.failed-start"), pluginApi.tr("messages.failed-general"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hasActiveRecording = false
|
hasActiveRecording = false;
|
||||||
} else if (!isPending && exitCode === 0 && outputPath) {
|
} else if (!isPending && exitCode === 0 && outputPath) {
|
||||||
// Fallback: if process exited successfully with an outputPath, handle it
|
// 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")
|
||||||
ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video", 3000, pluginApi.tr("messages.open-file"), () => openFile(outputPath))
|
ToastService.showNotice(pluginApi.tr("messages.saved"), outputPath, "video", 3000, pluginApi.tr("messages.open-file"), () => openFile(outputPath));
|
||||||
|
|
||||||
if (copyToClipboard) {
|
if (copyToClipboard) {
|
||||||
copyFileToClipboard(outputPath)
|
copyFileToClipboard(outputPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -354,21 +369,49 @@ Item {
|
|||||||
onExited: function (exitCode, exitStatus) {
|
onExited: function (exitCode, exitStatus) {
|
||||||
if (exitCode === 0) {
|
if (exitCode === 0) {
|
||||||
// Portals available, proceed to launch
|
// Portals available, proceed to launch
|
||||||
launchRecorder()
|
launchRecorder();
|
||||||
} else {
|
} else {
|
||||||
isPending = false
|
isPending = false;
|
||||||
hasActiveRecording = false
|
hasActiveRecording = false;
|
||||||
ToastService.showError(pluginApi.tr("messages.no-portals"), pluginApi.tr("messages.no-portals-desc"))
|
ToastService.showError(pluginApi.tr("messages.no-portals"), pluginApi.tr("messages.no-portals-desc"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Detect focused monitor on Hyprland
|
||||||
|
Process {
|
||||||
|
id: monitorDetectProcess
|
||||||
|
stdout: StdioCollector {}
|
||||||
|
stderr: StdioCollector {}
|
||||||
|
onExited: function (exitCode, exitStatus) {
|
||||||
|
const output = String(monitorDetectProcess.stdout.text || "").trim();
|
||||||
|
|
||||||
|
if (exitCode !== 0 || output === "MONITOR_NOT_FOUND" || !output) {
|
||||||
|
isPending = false;
|
||||||
|
hasActiveRecording = false;
|
||||||
|
ToastService.showError(pluginApi.tr("messages.failed-start"), pluginApi.tr("messages.monitor-not-found"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse "MONITOR_NAME:USE_PRIME" format
|
||||||
|
const parts = output.split(":");
|
||||||
|
const monitorName = parts[0];
|
||||||
|
const primeRun = parts.length > 1 && parts[1] === "1";
|
||||||
|
|
||||||
|
detectedMonitor = monitorName;
|
||||||
|
usePrimeRun = primeRun;
|
||||||
|
|
||||||
|
Logger.i("ScreenRecorder", "Detected monitor: " + monitorName + (primeRun ? " (prime-run)" : ""));
|
||||||
|
launchRecorderWithSource(monitorName, primeRun);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Process to copy file to clipboard
|
// Process to copy file to clipboard
|
||||||
Process {
|
Process {
|
||||||
id: copyToClipboardProcess
|
id: copyToClipboardProcess
|
||||||
onExited: function (exitCode, exitStatus) {
|
onExited: function (exitCode, exitStatus) {
|
||||||
if (exitCode !== 0) {
|
if (exitCode !== 0) {
|
||||||
Logger.e("ScreenRecorder", "Failed to copy file to clipboard, exit code:", exitCode)
|
Logger.e("ScreenRecorder", "Failed to copy file to clipboard, exit code:", exitCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -381,13 +424,13 @@ Item {
|
|||||||
onTriggered: {
|
onTriggered: {
|
||||||
if (isPending && recorderProcess.running) {
|
if (isPending && recorderProcess.running) {
|
||||||
// Process is still running after 2 seconds - assume recording started successfully
|
// Process is still running after 2 seconds - assume recording started successfully
|
||||||
isPending = false
|
isPending = false;
|
||||||
isRecording = true
|
isRecording = true;
|
||||||
hasActiveRecording = true
|
hasActiveRecording = true;
|
||||||
monitorTimer.running = true
|
monitorTimer.running = true;
|
||||||
} else if (isPending) {
|
} else if (isPending) {
|
||||||
// Process not running anymore - was cancelled or failed
|
// Process not running anymore - was cancelled or failed
|
||||||
isPending = false
|
isPending = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -400,8 +443,8 @@ Item {
|
|||||||
repeat: true
|
repeat: true
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
if (!recorderProcess.running && isRecording) {
|
if (!recorderProcess.running && isRecording) {
|
||||||
isRecording = false
|
isRecording = false;
|
||||||
running = false
|
running = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,7 +455,7 @@ Item {
|
|||||||
running: false
|
running: false
|
||||||
repeat: false
|
repeat: false
|
||||||
onTriggered: {
|
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"])
|
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"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import Quickshell
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
import qs.Commons
|
import qs.Commons
|
||||||
import qs.Widgets
|
import qs.Widgets
|
||||||
import qs.Services.UI
|
import qs.Services.UI
|
||||||
|
import qs.Services.Compositor
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: root
|
id: root
|
||||||
@@ -11,80 +13,56 @@ ColumnLayout {
|
|||||||
|
|
||||||
property var pluginApi: null
|
property var pluginApi: null
|
||||||
|
|
||||||
property bool editHideInactive:
|
property bool editHideInactive: pluginApi?.pluginSettings?.hideInactive ?? pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ?? false
|
||||||
pluginApi?.pluginSettings?.hideInactive ??
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ??
|
|
||||||
false
|
|
||||||
|
|
||||||
property string editIconColor:
|
property string editIconColor: pluginApi?.pluginSettings?.iconColor ?? pluginApi?.manifest?.metadata?.defaultSettings?.iconColor ?? "none"
|
||||||
pluginApi?.pluginSettings?.iconColor ??
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.iconColor ??
|
|
||||||
"none"
|
|
||||||
|
|
||||||
property string editDirectory:
|
property string editDirectory: pluginApi?.pluginSettings?.directory || pluginApi?.manifest?.metadata?.defaultSettings?.directory || ""
|
||||||
pluginApi?.pluginSettings?.directory ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.directory ||
|
|
||||||
""
|
|
||||||
|
|
||||||
property string editFilenamePattern:
|
property string editFilenamePattern: pluginApi?.pluginSettings?.filenamePattern || pluginApi?.manifest?.metadata?.defaultSettings?.filenamePattern || "recording_yyyyMMdd_HHmmss"
|
||||||
pluginApi?.pluginSettings?.filenamePattern ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.filenamePattern ||
|
|
||||||
"recording_yyyyMMdd_HHmmss"
|
|
||||||
|
|
||||||
property string editFrameRate:
|
// Migrate legacy frame rates to "custom"
|
||||||
|
readonly property var _validFrameRates: ["30", "60", "120", "custom"]
|
||||||
|
readonly property string _rawFrameRate:
|
||||||
pluginApi?.pluginSettings?.frameRate ||
|
pluginApi?.pluginSettings?.frameRate ||
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.frameRate ||
|
pluginApi?.manifest?.metadata?.defaultSettings?.frameRate ||
|
||||||
"60"
|
"60"
|
||||||
|
|
||||||
|
property string editFrameRate:
|
||||||
|
_validFrameRates.includes(_rawFrameRate) ? _rawFrameRate : "custom"
|
||||||
|
|
||||||
|
property string editCustomFrameRate:
|
||||||
|
_validFrameRates.includes(_rawFrameRate)
|
||||||
|
? (pluginApi?.pluginSettings?.customFrameRate ||
|
||||||
|
pluginApi?.manifest?.metadata?.defaultSettings?.customFrameRate ||
|
||||||
|
"60")
|
||||||
|
: _rawFrameRate
|
||||||
|
|
||||||
property string editAudioCodec:
|
property string editAudioCodec:
|
||||||
pluginApi?.pluginSettings?.audioCodec ||
|
pluginApi?.pluginSettings?.audioCodec ||
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.audioCodec ||
|
pluginApi?.manifest?.metadata?.defaultSettings?.audioCodec ||
|
||||||
"opus"
|
"opus"
|
||||||
|
|
||||||
property string editVideoCodec:
|
property string editVideoCodec: pluginApi?.pluginSettings?.videoCodec || pluginApi?.manifest?.metadata?.defaultSettings?.videoCodec || "h264"
|
||||||
pluginApi?.pluginSettings?.videoCodec ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.videoCodec ||
|
|
||||||
"h264"
|
|
||||||
|
|
||||||
property string editQuality:
|
property string editQuality: pluginApi?.pluginSettings?.quality || pluginApi?.manifest?.metadata?.defaultSettings?.quality || "very_high"
|
||||||
pluginApi?.pluginSettings?.quality ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.quality ||
|
|
||||||
"very_high"
|
|
||||||
|
|
||||||
property string editColorRange:
|
property string editColorRange: pluginApi?.pluginSettings?.colorRange || pluginApi?.manifest?.metadata?.defaultSettings?.colorRange || "limited"
|
||||||
pluginApi?.pluginSettings?.colorRange ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.colorRange ||
|
|
||||||
"limited"
|
|
||||||
|
|
||||||
property bool editShowCursor:
|
property bool editShowCursor: pluginApi?.pluginSettings?.showCursor ?? pluginApi?.manifest?.metadata?.defaultSettings?.showCursor ?? true
|
||||||
pluginApi?.pluginSettings?.showCursor ??
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.showCursor ??
|
|
||||||
true
|
|
||||||
|
|
||||||
property bool editCopyToClipboard:
|
property bool editCopyToClipboard: pluginApi?.pluginSettings?.copyToClipboard ?? pluginApi?.manifest?.metadata?.defaultSettings?.copyToClipboard ?? false
|
||||||
pluginApi?.pluginSettings?.copyToClipboard ??
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.copyToClipboard ??
|
|
||||||
false
|
|
||||||
|
|
||||||
property string editAudioSource:
|
property string editAudioSource: pluginApi?.pluginSettings?.audioSource || pluginApi?.manifest?.metadata?.defaultSettings?.audioSource || "default_output"
|
||||||
pluginApi?.pluginSettings?.audioSource ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.audioSource ||
|
|
||||||
"default_output"
|
|
||||||
|
|
||||||
property string editVideoSource:
|
property string editVideoSource: pluginApi?.pluginSettings?.videoSource || pluginApi?.manifest?.metadata?.defaultSettings?.videoSource || "portal"
|
||||||
pluginApi?.pluginSettings?.videoSource ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.videoSource ||
|
|
||||||
"portal"
|
|
||||||
|
|
||||||
property string editResolution:
|
property string editResolution: pluginApi?.pluginSettings?.resolution || pluginApi?.manifest?.metadata?.defaultSettings?.resolution || "original"
|
||||||
pluginApi?.pluginSettings?.resolution ||
|
|
||||||
pluginApi?.manifest?.metadata?.defaultSettings?.resolution ||
|
|
||||||
"original"
|
|
||||||
|
|
||||||
function saveSettings() {
|
function saveSettings() {
|
||||||
if (!pluginApi) {
|
if (!pluginApi) {
|
||||||
Logger.e("ScreenRecorder", "Cannot save: pluginApi is null")
|
Logger.e("ScreenRecorder", "Cannot save: pluginApi is null");
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pluginApi.pluginSettings.hideInactive = root.editHideInactive
|
pluginApi.pluginSettings.hideInactive = root.editHideInactive
|
||||||
@@ -92,6 +70,7 @@ ColumnLayout {
|
|||||||
pluginApi.pluginSettings.directory = root.editDirectory
|
pluginApi.pluginSettings.directory = root.editDirectory
|
||||||
pluginApi.pluginSettings.filenamePattern = root.editFilenamePattern
|
pluginApi.pluginSettings.filenamePattern = root.editFilenamePattern
|
||||||
pluginApi.pluginSettings.frameRate = root.editFrameRate
|
pluginApi.pluginSettings.frameRate = root.editFrameRate
|
||||||
|
pluginApi.pluginSettings.customFrameRate = root.editCustomFrameRate
|
||||||
pluginApi.pluginSettings.audioCodec = root.editAudioCodec
|
pluginApi.pluginSettings.audioCodec = root.editAudioCodec
|
||||||
pluginApi.pluginSettings.videoCodec = root.editVideoCodec
|
pluginApi.pluginSettings.videoCodec = root.editVideoCodec
|
||||||
pluginApi.pluginSettings.quality = root.editQuality
|
pluginApi.pluginSettings.quality = root.editQuality
|
||||||
@@ -102,9 +81,9 @@ ColumnLayout {
|
|||||||
pluginApi.pluginSettings.videoSource = root.editVideoSource
|
pluginApi.pluginSettings.videoSource = root.editVideoSource
|
||||||
pluginApi.pluginSettings.resolution = root.editResolution
|
pluginApi.pluginSettings.resolution = root.editResolution
|
||||||
|
|
||||||
pluginApi.saveSettings()
|
pluginApi.saveSettings();
|
||||||
|
|
||||||
Logger.i("ScreenRecorder", "Settings saved successfully")
|
Logger.i("ScreenRecorder", "Settings saved successfully");
|
||||||
}
|
}
|
||||||
// Icon Color
|
// Icon Color
|
||||||
NComboBox {
|
NComboBox {
|
||||||
@@ -181,16 +160,25 @@ ColumnLayout {
|
|||||||
NComboBox {
|
NComboBox {
|
||||||
label: pluginApi.tr("settings.video.source")
|
label: pluginApi.tr("settings.video.source")
|
||||||
description: pluginApi.tr("settings.video.source-desc")
|
description: pluginApi.tr("settings.video.source-desc")
|
||||||
model: [
|
model: {
|
||||||
{
|
let options = [
|
||||||
"key": "portal",
|
{
|
||||||
"name": pluginApi.tr("settings.video.sources-portal")
|
"key": "portal",
|
||||||
},
|
"name": pluginApi.tr("settings.video.sources-portal")
|
||||||
{
|
},
|
||||||
"key": "screen",
|
{
|
||||||
"name": pluginApi.tr("settings.video.sources-screen")
|
"key": "screen",
|
||||||
|
"name": pluginApi.tr("settings.video.sources-screen")
|
||||||
|
}
|
||||||
|
];
|
||||||
|
if (CompositorService.isHyprland) {
|
||||||
|
options.push({
|
||||||
|
"key": "focused-monitor",
|
||||||
|
"name": pluginApi.tr("settings.video.sources-focused-monitor")
|
||||||
|
});
|
||||||
}
|
}
|
||||||
]
|
return options;
|
||||||
|
}
|
||||||
currentKey: root.editVideoSource
|
currentKey: root.editVideoSource
|
||||||
onSelected: key => root.editVideoSource = key
|
onSelected: key => root.editVideoSource = key
|
||||||
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.videoSource || "portal"
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.videoSource || "portal"
|
||||||
@@ -201,22 +189,6 @@ ColumnLayout {
|
|||||||
label: pluginApi.tr("settings.video.frame-rate")
|
label: pluginApi.tr("settings.video.frame-rate")
|
||||||
description: pluginApi.tr("settings.video.frame-rate-desc")
|
description: pluginApi.tr("settings.video.frame-rate-desc")
|
||||||
model: [
|
model: [
|
||||||
{
|
|
||||||
"key": "5",
|
|
||||||
"name": "5 FPS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "10",
|
|
||||||
"name": "10 FPS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "15",
|
|
||||||
"name": "15 FPS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "20",
|
|
||||||
"name": "20 FPS"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "30",
|
"key": "30",
|
||||||
"name": "30 FPS"
|
"name": "30 FPS"
|
||||||
@@ -225,25 +197,13 @@ ColumnLayout {
|
|||||||
"key": "60",
|
"key": "60",
|
||||||
"name": "60 FPS"
|
"name": "60 FPS"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "100",
|
|
||||||
"name": "100 FPS"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "120",
|
"key": "120",
|
||||||
"name": "120 FPS"
|
"name": "120 FPS"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "144",
|
"key": "custom",
|
||||||
"name": "144 FPS"
|
"name": pluginApi.tr("settings.video.frame-rate-custom")
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "165",
|
|
||||||
"name": "165 FPS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "240",
|
|
||||||
"name": "240 FPS"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
currentKey: root.editFrameRate
|
currentKey: root.editFrameRate
|
||||||
@@ -251,6 +211,26 @@ ColumnLayout {
|
|||||||
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.frameRate || "60"
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.frameRate || "60"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Custom Frame Rate
|
||||||
|
NTextInput {
|
||||||
|
visible: root.editFrameRate === "custom"
|
||||||
|
label: pluginApi.tr("settings.video.custom-frame-rate")
|
||||||
|
description: pluginApi.tr("settings.video.custom-frame-rate-desc")
|
||||||
|
placeholderText: "60"
|
||||||
|
text: root.editCustomFrameRate
|
||||||
|
onTextChanged: {
|
||||||
|
// Only allow numeric values
|
||||||
|
var numeric = text.replace(/[^0-9]/g, '')
|
||||||
|
if (numeric !== text) {
|
||||||
|
text = numeric
|
||||||
|
}
|
||||||
|
if (numeric) {
|
||||||
|
root.editCustomFrameRate = numeric
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
// Video Quality
|
// Video Quality
|
||||||
NComboBox {
|
NComboBox {
|
||||||
label: pluginApi.tr("settings.video.quality")
|
label: pluginApi.tr("settings.video.quality")
|
||||||
@@ -284,25 +264,46 @@ ColumnLayout {
|
|||||||
description: pluginApi.tr("settings.video.codec-desc")
|
description: pluginApi.tr("settings.video.codec-desc")
|
||||||
model: {
|
model: {
|
||||||
let options = [
|
let options = [
|
||||||
{"key": "h264", "name": "H264"},
|
{
|
||||||
{"key": "hevc", "name": "HEVC"},
|
"key": "h264",
|
||||||
{"key": "av1", "name": "AV1"},
|
"name": "H264"
|
||||||
{"key": "vp8", "name": "VP8"},
|
},
|
||||||
{"key": "vp9", "name": "VP9"}
|
{
|
||||||
]
|
"key": "hevc",
|
||||||
// Only add HDR options if source is 'screen'
|
"name": "HEVC"
|
||||||
if (root.editVideoSource === "screen") {
|
},
|
||||||
options.push({"key": "hevc_hdr", "name": "HEVC HDR"})
|
{
|
||||||
options.push({"key": "av1_hdr", "name": "AV1 HDR"})
|
"key": "av1",
|
||||||
|
"name": "AV1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "vp8",
|
||||||
|
"name": "VP8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "vp9",
|
||||||
|
"name": "VP9"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
// Only add HDR options if source is 'screen' or 'focused-monitor'
|
||||||
|
if (root.editVideoSource === "screen" || root.editVideoSource === "focused-monitor") {
|
||||||
|
options.push({
|
||||||
|
"key": "hevc_hdr",
|
||||||
|
"name": "HEVC HDR"
|
||||||
|
});
|
||||||
|
options.push({
|
||||||
|
"key": "av1_hdr",
|
||||||
|
"name": "AV1 HDR"
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return options
|
return options;
|
||||||
}
|
}
|
||||||
currentKey: root.editVideoCodec
|
currentKey: root.editVideoCodec
|
||||||
onSelected: key => {
|
onSelected: key => {
|
||||||
root.editVideoCodec = key
|
root.editVideoCodec = key;
|
||||||
// If an HDR codec is selected, change the colorRange to full
|
// If an HDR codec is selected, change the colorRange to full
|
||||||
if (key.includes("_hdr")) {
|
if (key.includes("_hdr")) {
|
||||||
root.editColorRange = "full"
|
root.editColorRange = "full";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.videoCodec || "h264"
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.videoCodec || "h264"
|
||||||
@@ -310,8 +311,8 @@ ColumnLayout {
|
|||||||
Connections {
|
Connections {
|
||||||
target: root
|
target: root
|
||||||
function onEditVideoSourceChanged() {
|
function onEditVideoSourceChanged() {
|
||||||
if (root.editVideoSource !== "screen" && (root.editVideoCodec === "av1_hdr" || root.editVideoCodec === "hevc_hdr")) {
|
if (root.editVideoSource !== "screen" && root.editVideoSource !== "focused-monitor" && (root.editVideoCodec === "av1_hdr" || root.editVideoCodec === "hevc_hdr")) {
|
||||||
root.editVideoCodec = "h264"
|
root.editVideoCodec = "h264";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -435,7 +436,7 @@ ColumnLayout {
|
|||||||
initialPath: root.editDirectory || Quickshell.env("HOME") + "/Videos"
|
initialPath: root.editDirectory || Quickshell.env("HOME") + "/Videos"
|
||||||
onAccepted: paths => {
|
onAccepted: paths => {
|
||||||
if (paths.length > 0) {
|
if (paths.length > 0) {
|
||||||
root.editDirectory = paths[0]
|
root.editDirectory = paths[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"started": "Aufnahme gestartet.",
|
"started": "Aufnahme gestartet.",
|
||||||
"stop-recording": "Bildschirmaufnahme (Aufnahme stoppen)",
|
"stop-recording": "Bildschirmaufnahme (Aufnahme stoppen)",
|
||||||
"stopping": "Aufnahme stoppen…",
|
"stopping": "Aufnahme stoppen…",
|
||||||
"open-file": "Datei öffnen"
|
"open-file": "Datei öffnen",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Bildschirmrekorder",
|
"name": "Bildschirmrekorder",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -52,7 +53,10 @@
|
|||||||
"color-range-full": "Vollständig",
|
"color-range-full": "Vollständig",
|
||||||
"color-range-limited": "Begrenzt",
|
"color-range-limited": "Begrenzt",
|
||||||
"frame-rate": "Bildrate",
|
"frame-rate": "Bildrate",
|
||||||
|
"frame-rate-custom": "Benutzerdefiniert",
|
||||||
"frame-rate-desc": "Ziel-Bildrate für Bildschirmaufnahmen",
|
"frame-rate-desc": "Ziel-Bildrate für Bildschirmaufnahmen",
|
||||||
|
"custom-frame-rate": "Benutzerdefinierte Bildrate",
|
||||||
|
"custom-frame-rate-desc": "Geben Sie einen benutzerdefinierten Bildratenwert ein (FPS)",
|
||||||
"quality": "Videoqualität",
|
"quality": "Videoqualität",
|
||||||
"quality-desc": "Höhere Qualität führt zu größeren Dateien",
|
"quality-desc": "Höhere Qualität führt zu größeren Dateien",
|
||||||
"quality-high": "Hoch",
|
"quality-high": "Hoch",
|
||||||
@@ -66,7 +70,8 @@
|
|||||||
"source-desc": "Portal wird empfohlen, bei Artefakten versuchen Sie Bildschirm",
|
"source-desc": "Portal wird empfohlen, bei Artefakten versuchen Sie Bildschirm",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Bildschirm",
|
"sources-screen": "Bildschirm",
|
||||||
"title": "Videoeinstellungen"
|
"title": "Videoeinstellungen",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"started": "Recording started.",
|
"started": "Recording started.",
|
||||||
"stop-recording": "Screen Recorder (stop recording)",
|
"stop-recording": "Screen Recorder (stop recording)",
|
||||||
"stopping": "Stopping recording…",
|
"stopping": "Stopping recording…",
|
||||||
"open-file": "Open file"
|
"open-file": "Open file",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Screen Recorder",
|
"name": "Screen Recorder",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -52,7 +53,10 @@
|
|||||||
"color-range-full": "Full",
|
"color-range-full": "Full",
|
||||||
"color-range-limited": "Limited",
|
"color-range-limited": "Limited",
|
||||||
"frame-rate": "Frame rate",
|
"frame-rate": "Frame rate",
|
||||||
|
"frame-rate-custom": "Custom",
|
||||||
"frame-rate-desc": "Target frame rate for screen recordings",
|
"frame-rate-desc": "Target frame rate for screen recordings",
|
||||||
|
"custom-frame-rate": "Custom frame rate",
|
||||||
|
"custom-frame-rate-desc": "Enter a custom frame rate value (FPS)",
|
||||||
"quality": "Video quality",
|
"quality": "Video quality",
|
||||||
"quality-desc": "Higher quality results in larger file sizes",
|
"quality-desc": "Higher quality results in larger file sizes",
|
||||||
"quality-high": "High",
|
"quality-high": "High",
|
||||||
@@ -66,6 +70,7 @@
|
|||||||
"source-desc": "Portal is recommended, if you get artifacts try Screen",
|
"source-desc": "Portal is recommended, if you get artifacts try Screen",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Screen",
|
"sources-screen": "Screen",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)",
|
||||||
"title": "Video Settings"
|
"title": "Video Settings"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Grabador de pantalla (empezar a grabar)",
|
"start-recording": "Grabador de pantalla (empezar a grabar)",
|
||||||
"started": "Grabación iniciada.",
|
"started": "Grabación iniciada.",
|
||||||
"stop-recording": "Grabador de pantalla (detener grabación)",
|
"stop-recording": "Grabador de pantalla (detener grabación)",
|
||||||
"stopping": "Deteniendo la grabación…"
|
"stopping": "Deteniendo la grabación…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Grabadora de Pantalla",
|
"name": "Grabadora de Pantalla",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Completo",
|
"color-range-full": "Completo",
|
||||||
"color-range-limited": "Limitado",
|
"color-range-limited": "Limitado",
|
||||||
"frame-rate": "Tasa de fotogramas",
|
"frame-rate": "Tasa de fotogramas",
|
||||||
|
"frame-rate-custom": "Personalizado",
|
||||||
"frame-rate-desc": "Tasa de fotogramas objetivo para grabaciones de pantalla",
|
"frame-rate-desc": "Tasa de fotogramas objetivo para grabaciones de pantalla",
|
||||||
|
"custom-frame-rate": "Tasa de fotogramas personalizada",
|
||||||
|
"custom-frame-rate-desc": "Ingrese un valor de tasa de fotogramas personalizado (FPS)",
|
||||||
"quality": "Calidad de video",
|
"quality": "Calidad de video",
|
||||||
"quality-desc": "Mayor calidad resulta en archivos más grandes",
|
"quality-desc": "Mayor calidad resulta en archivos más grandes",
|
||||||
"quality-high": "Alto",
|
"quality-high": "Alto",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Se recomienda Portal, si obtiene artefactos intente Pantalla",
|
"source-desc": "Se recomienda Portal, si obtiene artefactos intente Pantalla",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Pantalla",
|
"sources-screen": "Pantalla",
|
||||||
"title": "Configuración de Video"
|
"title": "Configuración de Video",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Enregistreur d'écran (démarrer l'enregistrement)",
|
"start-recording": "Enregistreur d'écran (démarrer l'enregistrement)",
|
||||||
"started": "Enregistrement démarré.",
|
"started": "Enregistrement démarré.",
|
||||||
"stop-recording": "Enregistreur d'écran (arrêter l'enregistrement)",
|
"stop-recording": "Enregistreur d'écran (arrêter l'enregistrement)",
|
||||||
"stopping": "Arrêt de l'enregistrement..."
|
"stopping": "Arrêt de l'enregistrement...",
|
||||||
|
"monitor-not-found": "Impossible de détecter l'écran sous le curseur."
|
||||||
},
|
},
|
||||||
"name": "Enregistreur d'Écran",
|
"name": "Enregistreur d'Écran",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Complet / Plein",
|
"color-range-full": "Complet / Plein",
|
||||||
"color-range-limited": "Limité(e)",
|
"color-range-limited": "Limité(e)",
|
||||||
"frame-rate": "Fréquence d'images",
|
"frame-rate": "Fréquence d'images",
|
||||||
|
"frame-rate-custom": "Personnalisé",
|
||||||
"frame-rate-desc": "Fréquence d'images cible pour les enregistrements d'écran",
|
"frame-rate-desc": "Fréquence d'images cible pour les enregistrements d'écran",
|
||||||
|
"custom-frame-rate": "Fréquence d'images personnalisée",
|
||||||
|
"custom-frame-rate-desc": "Entrez une valeur de fréquence d'images personnalisée (FPS)",
|
||||||
"quality": "Qualité vidéo",
|
"quality": "Qualité vidéo",
|
||||||
"quality-desc": "Une qualité supérieure résulte en des fichiers plus volumineux",
|
"quality-desc": "Une qualité supérieure résulte en des fichiers plus volumineux",
|
||||||
"quality-high": "Haut/Haute",
|
"quality-high": "Haut/Haute",
|
||||||
@@ -63,6 +67,7 @@
|
|||||||
"source-desc": "Portal est recommandé, si vous obtenez des artefacts essayez Écran",
|
"source-desc": "Portal est recommandé, si vous obtenez des artefacts essayez Écran",
|
||||||
"sources-portal": "Portail",
|
"sources-portal": "Portail",
|
||||||
"sources-screen": "Écran",
|
"sources-screen": "Écran",
|
||||||
|
"sources-focused-monitor": "Écran sous le curseur (Hyprland)",
|
||||||
"title": "Paramètres Vidéo"
|
"title": "Paramètres Vidéo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Képernyőrögzítő (felvétel indítása)",
|
"start-recording": "Képernyőrögzítő (felvétel indítása)",
|
||||||
"started": "A felvétel elindult.",
|
"started": "A felvétel elindult.",
|
||||||
"stop-recording": "Képernyőfelvevő (felvétel leállítása)",
|
"stop-recording": "Képernyőfelvevő (felvétel leállítása)",
|
||||||
"stopping": "A felvétel leállítása…"
|
"stopping": "A felvétel leállítása…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Képernyőfelvevő",
|
"name": "Képernyőfelvevő",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Teljes",
|
"color-range-full": "Teljes",
|
||||||
"color-range-limited": "Korlátozott",
|
"color-range-limited": "Korlátozott",
|
||||||
"frame-rate": "Képkockasebesség",
|
"frame-rate": "Képkockasebesség",
|
||||||
|
"frame-rate-custom": "Egyéni",
|
||||||
"frame-rate-desc": "Képernyőfelvételek célzott képkockasebessége",
|
"frame-rate-desc": "Képernyőfelvételek célzott képkockasebessége",
|
||||||
|
"custom-frame-rate": "Egyéni képkockasebesség",
|
||||||
|
"custom-frame-rate-desc": "Adjon meg egyéni képkockasebesség értéket (FPS)",
|
||||||
"quality": "Videóminőség",
|
"quality": "Videóminőség",
|
||||||
"quality-desc": "A jobb minőség nagyobb fájlméretet eredményez",
|
"quality-desc": "A jobb minőség nagyobb fájlméretet eredményez",
|
||||||
"quality-high": "Magas",
|
"quality-high": "Magas",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "A Portal ajánlott, ha hibákat tapasztalsz, próbáld a Screen-t",
|
"source-desc": "A Portal ajánlott, ha hibákat tapasztalsz, próbáld a Screen-t",
|
||||||
"sources-portal": "Portál",
|
"sources-portal": "Portál",
|
||||||
"sources-screen": "Képernyő",
|
"sources-screen": "Képernyő",
|
||||||
"title": "Videóbeállítások"
|
"title": "Videóbeállítások",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "P錄影 (開始錄影)",
|
"start-recording": "P錄影 (開始錄影)",
|
||||||
"started": "Aufnahme gestartet.",
|
"started": "Aufnahme gestartet.",
|
||||||
"stop-recording": "Skjáupptökutæki (hætta upptöku)",
|
"stop-recording": "Skjáupptökutæki (hætta upptöku)",
|
||||||
"stopping": "Nagpapatigil ng pagrekord..."
|
"stopping": "Nagpapatigil ng pagrekord...",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Registratore Schermo",
|
"name": "Registratore Schermo",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Puno",
|
"color-range-full": "Puno",
|
||||||
"color-range-limited": "Limitato",
|
"color-range-limited": "Limitato",
|
||||||
"frame-rate": "Frequenza fotogrammi",
|
"frame-rate": "Frequenza fotogrammi",
|
||||||
|
"frame-rate-custom": "Personalizzato",
|
||||||
"frame-rate-desc": "Frequenza fotogrammi target per le registrazioni dello schermo",
|
"frame-rate-desc": "Frequenza fotogrammi target per le registrazioni dello schermo",
|
||||||
|
"custom-frame-rate": "Frequenza fotogrammi personalizzata",
|
||||||
|
"custom-frame-rate-desc": "Inserisci un valore personalizzato di frequenza fotogrammi (FPS)",
|
||||||
"quality": "Qualità video",
|
"quality": "Qualità video",
|
||||||
"quality-desc": "Qualità superiore risulta in file più grandi",
|
"quality-desc": "Qualità superiore risulta in file più grandi",
|
||||||
"quality-high": "Alta",
|
"quality-high": "Alta",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Portal è consigliato, se si ottengono artefatti prova Schermo",
|
"source-desc": "Portal è consigliato, se si ottengono artefatti prova Schermo",
|
||||||
"sources-portal": "Portale",
|
"sources-portal": "Portale",
|
||||||
"sources-screen": "Skjerm",
|
"sources-screen": "Skjerm",
|
||||||
"title": "Impostazioni Video"
|
"title": "Impostazioni Video",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"started": "録画を開始しました。",
|
"started": "録画を開始しました。",
|
||||||
"stop-recording": "画面録画(停止)",
|
"stop-recording": "画面録画(停止)",
|
||||||
"stopping": "録画を停止しています…",
|
"stopping": "録画を停止しています…",
|
||||||
"open-file": "ファイルを開く"
|
"open-file": "ファイルを開く",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "画面レコーダー",
|
"name": "画面レコーダー",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -52,7 +53,10 @@
|
|||||||
"color-range-full": "フル",
|
"color-range-full": "フル",
|
||||||
"color-range-limited": "限定",
|
"color-range-limited": "限定",
|
||||||
"frame-rate": "フレームレート",
|
"frame-rate": "フレームレート",
|
||||||
|
"frame-rate-custom": "カスタム",
|
||||||
"frame-rate-desc": "画面録画の目標フレームレート",
|
"frame-rate-desc": "画面録画の目標フレームレート",
|
||||||
|
"custom-frame-rate": "カスタムフレームレート",
|
||||||
|
"custom-frame-rate-desc": "カスタムフレームレート値を入力してください(FPS)",
|
||||||
"quality": "ビデオ品質",
|
"quality": "ビデオ品質",
|
||||||
"quality-desc": "品質が高いほど、ファイルサイズが大きくなります",
|
"quality-desc": "品質が高いほど、ファイルサイズが大きくなります",
|
||||||
"quality-high": "高",
|
"quality-high": "高",
|
||||||
@@ -66,7 +70,8 @@
|
|||||||
"source-desc": "ポータルが推奨されます。アーティファクトが発生する場合は「スクリーン」を試してください",
|
"source-desc": "ポータルが推奨されます。アーティファクトが発生する場合は「スクリーン」を試してください",
|
||||||
"sources-portal": "ポータル",
|
"sources-portal": "ポータル",
|
||||||
"sources-screen": "スクリーン",
|
"sources-screen": "スクリーン",
|
||||||
"title": "ビデオ設定"
|
"title": "ビデオ設定",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Qeydkerê ekranê (dest bi qeydkirinê bike)",
|
"start-recording": "Qeydkerê ekranê (dest bi qeydkirinê bike)",
|
||||||
"started": "Qeydkirin dest pê kir.",
|
"started": "Qeydkirin dest pê kir.",
|
||||||
"stop-recording": "Tomarkera dîmenderê (tomarkirinê bide sekinandin)",
|
"stop-recording": "Tomarkera dîmenderê (tomarkirinê bide sekinandin)",
|
||||||
"stopping": "Qeydkirin radiweste…"
|
"stopping": "Qeydkirin radiweste…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Qeydkerê Ekranê",
|
"name": "Qeydkerê Ekranê",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Tije",
|
"color-range-full": "Tije",
|
||||||
"color-range-limited": "Sînorkirî",
|
"color-range-limited": "Sînorkirî",
|
||||||
"frame-rate": "Rêjeya çarçoveyê",
|
"frame-rate": "Rêjeya çarçoveyê",
|
||||||
|
"frame-rate-custom": "Kesane",
|
||||||
"frame-rate-desc": "Rêjeya çarçoveya hedefê ji bo qeydên ekranê",
|
"frame-rate-desc": "Rêjeya çarçoveya hedefê ji bo qeydên ekranê",
|
||||||
|
"custom-frame-rate": "Rêjeya çarçoveya kesane",
|
||||||
|
"custom-frame-rate-desc": "Nirxek rêjeya çarçoveya kesane binivîse (FPS)",
|
||||||
"quality": "Kalîteya vîdyoyê",
|
"quality": "Kalîteya vîdyoyê",
|
||||||
"quality-desc": "Encamên bi kalîte bilindtir dibin sedema mezinahiyên pelan ên mezintir",
|
"quality-desc": "Encamên bi kalîte bilindtir dibin sedema mezinahiyên pelan ên mezintir",
|
||||||
"quality-high": "Bilind",
|
"quality-high": "Bilind",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Portal tê pêşniyarkirin, eger tu artefaktan bibînî Screen biceribîne",
|
"source-desc": "Portal tê pêşniyarkirin, eger tu artefaktan bibînî Screen biceribîne",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Dîmende",
|
"sources-screen": "Dîmende",
|
||||||
"title": "Mîhengên Vîdeoyê"
|
"title": "Mîhengên Vîdeoyê",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Schermrecorder (opname starten)",
|
"start-recording": "Schermrecorder (opname starten)",
|
||||||
"started": "Opname gestart.",
|
"started": "Opname gestart.",
|
||||||
"stop-recording": "Schermrecorder (opname stoppen)",
|
"stop-recording": "Schermrecorder (opname stoppen)",
|
||||||
"stopping": "Opname stoppen…"
|
"stopping": "Opname stoppen…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Schermrecorder",
|
"name": "Schermrecorder",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Volledig",
|
"color-range-full": "Volledig",
|
||||||
"color-range-limited": "Beperkt",
|
"color-range-limited": "Beperkt",
|
||||||
"frame-rate": "Framesnelheid",
|
"frame-rate": "Framesnelheid",
|
||||||
|
"frame-rate-custom": "Aangepast",
|
||||||
"frame-rate-desc": "Doelframesnelheid voor schermopnames",
|
"frame-rate-desc": "Doelframesnelheid voor schermopnames",
|
||||||
|
"custom-frame-rate": "Aangepaste framesnelheid",
|
||||||
|
"custom-frame-rate-desc": "Voer een aangepaste framesnelheid in (FPS)",
|
||||||
"quality": "Videokwaliteit",
|
"quality": "Videokwaliteit",
|
||||||
"quality-desc": "Hogere kwaliteit resulteert in grotere bestanden",
|
"quality-desc": "Hogere kwaliteit resulteert in grotere bestanden",
|
||||||
"quality-high": "Hoog",
|
"quality-high": "Hoog",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Portal wordt aanbevolen, probeer Scherm als u artefacten krijgt",
|
"source-desc": "Portal wordt aanbevolen, probeer Scherm als u artefacten krijgt",
|
||||||
"sources-portal": "Portaal",
|
"sources-portal": "Portaal",
|
||||||
"sources-screen": "Scherm",
|
"sources-screen": "Scherm",
|
||||||
"title": "Video-instellingen"
|
"title": "Video-instellingen",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Rejestrator ekranu (rozpocznij nagrywanie)",
|
"start-recording": "Rejestrator ekranu (rozpocznij nagrywanie)",
|
||||||
"started": "Rozpoczęto nagrywanie.",
|
"started": "Rozpoczęto nagrywanie.",
|
||||||
"stop-recording": "Rejestrator ekranu (zatrzymaj nagrywanie)",
|
"stop-recording": "Rejestrator ekranu (zatrzymaj nagrywanie)",
|
||||||
"stopping": "Zatrzymywanie nagrywania…"
|
"stopping": "Zatrzymywanie nagrywania…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Rejestrator ekranu",
|
"name": "Rejestrator ekranu",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Pełny",
|
"color-range-full": "Pełny",
|
||||||
"color-range-limited": "Ograniczone",
|
"color-range-limited": "Ograniczone",
|
||||||
"frame-rate": "Liczba klatek na sekundę",
|
"frame-rate": "Liczba klatek na sekundę",
|
||||||
|
"frame-rate-custom": "Niestandardowa",
|
||||||
"frame-rate-desc": "Docelowa liczba klatek na sekundę dla nagrań ekranu",
|
"frame-rate-desc": "Docelowa liczba klatek na sekundę dla nagrań ekranu",
|
||||||
|
"custom-frame-rate": "Niestandardowa liczba klatek",
|
||||||
|
"custom-frame-rate-desc": "Wprowadź niestandardową liczbę klatek na sekundę (FPS)",
|
||||||
"quality": "Jakość wideo",
|
"quality": "Jakość wideo",
|
||||||
"quality-desc": "Wyższa jakość skutkuje większymi rozmiarami plików",
|
"quality-desc": "Wyższa jakość skutkuje większymi rozmiarami plików",
|
||||||
"quality-high": "Wysoki",
|
"quality-high": "Wysoki",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Zalecany jest Portal, jeśli występują artefakty, spróbuj opcji Ekran",
|
"source-desc": "Zalecany jest Portal, jeśli występują artefakty, spróbuj opcji Ekran",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Ekran",
|
"sources-screen": "Ekran",
|
||||||
"title": "Ustawienia wideo"
|
"title": "Ustawienia wideo",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Gravador de tela (iniciar gravação)",
|
"start-recording": "Gravador de tela (iniciar gravação)",
|
||||||
"started": "Gravação iniciada.",
|
"started": "Gravação iniciada.",
|
||||||
"stop-recording": "Gravador de tela (parar gravação)",
|
"stop-recording": "Gravador de tela (parar gravação)",
|
||||||
"stopping": "Parando a gravação..."
|
"stopping": "Parando a gravação...",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Gravador de Tela",
|
"name": "Gravador de Tela",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Completo",
|
"color-range-full": "Completo",
|
||||||
"color-range-limited": "Limitado",
|
"color-range-limited": "Limitado",
|
||||||
"frame-rate": "Taxa de quadros",
|
"frame-rate": "Taxa de quadros",
|
||||||
|
"frame-rate-custom": "Personalizado",
|
||||||
"frame-rate-desc": "Taxa de quadros alvo para gravações de tela",
|
"frame-rate-desc": "Taxa de quadros alvo para gravações de tela",
|
||||||
|
"custom-frame-rate": "Taxa de quadros personalizada",
|
||||||
|
"custom-frame-rate-desc": "Insira um valor personalizado de taxa de quadros (FPS)",
|
||||||
"quality": "Qualidade de vídeo",
|
"quality": "Qualidade de vídeo",
|
||||||
"quality-desc": "Maior qualidade resulta em arquivos maiores",
|
"quality-desc": "Maior qualidade resulta em arquivos maiores",
|
||||||
"quality-high": "Alto(a)",
|
"quality-high": "Alto(a)",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Portal é recomendado, se obtiver artefatos tente Tela",
|
"source-desc": "Portal é recomendado, se obtiver artefatos tente Tela",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Tela",
|
"sources-screen": "Tela",
|
||||||
"title": "Configurações de Vídeo"
|
"title": "Configurações de Vídeo",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Запись экрана (начать запись)",
|
"start-recording": "Запись экрана (начать запись)",
|
||||||
"started": "Запись началась.",
|
"started": "Запись началась.",
|
||||||
"stop-recording": "Запись экрана (остановить запись)",
|
"stop-recording": "Запись экрана (остановить запись)",
|
||||||
"stopping": "Остановка записи…"
|
"stopping": "Остановка записи…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Запись Экрана",
|
"name": "Запись Экрана",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Полный",
|
"color-range-full": "Полный",
|
||||||
"color-range-limited": "Ограниченный",
|
"color-range-limited": "Ограниченный",
|
||||||
"frame-rate": "Частота кадров",
|
"frame-rate": "Частота кадров",
|
||||||
|
"frame-rate-custom": "Пользовательская",
|
||||||
"frame-rate-desc": "Целевая частота кадров для записи экрана",
|
"frame-rate-desc": "Целевая частота кадров для записи экрана",
|
||||||
|
"custom-frame-rate": "Пользовательская частота кадров",
|
||||||
|
"custom-frame-rate-desc": "Введите пользовательское значение частоты кадров (FPS)",
|
||||||
"quality": "Качество видео",
|
"quality": "Качество видео",
|
||||||
"quality-desc": "Более высокое качество приводит к большим размерам файлов",
|
"quality-desc": "Более высокое качество приводит к большим размерам файлов",
|
||||||
"quality-high": "Высокий",
|
"quality-high": "Высокий",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Рекомендуется Portal, если появляются артефакты попробуйте Экран",
|
"source-desc": "Рекомендуется Portal, если появляются артефакты попробуйте Экран",
|
||||||
"sources-portal": "Портал",
|
"sources-portal": "Портал",
|
||||||
"sources-screen": "Экран",
|
"sources-screen": "Экран",
|
||||||
"title": "Настройки Видео"
|
"title": "Настройки Видео",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Ekran kaydedici (kayda başla)",
|
"start-recording": "Ekran kaydedici (kayda başla)",
|
||||||
"started": "Kayıt başladı.",
|
"started": "Kayıt başladı.",
|
||||||
"stop-recording": "Ekran kaydedici (kaydı durdur)",
|
"stop-recording": "Ekran kaydedici (kaydı durdur)",
|
||||||
"stopping": "Kaydı durdurma…"
|
"stopping": "Kaydı durdurma…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Ekran Kaydedici",
|
"name": "Ekran Kaydedici",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Tam",
|
"color-range-full": "Tam",
|
||||||
"color-range-limited": "Sınırlı",
|
"color-range-limited": "Sınırlı",
|
||||||
"frame-rate": "Kare hızı",
|
"frame-rate": "Kare hızı",
|
||||||
|
"frame-rate-custom": "Özel",
|
||||||
"frame-rate-desc": "Ekran kayıtları için hedef kare hızı",
|
"frame-rate-desc": "Ekran kayıtları için hedef kare hızı",
|
||||||
|
"custom-frame-rate": "Özel kare hızı",
|
||||||
|
"custom-frame-rate-desc": "Özel bir kare hızı değeri girin (FPS)",
|
||||||
"quality": "Video kalitesi",
|
"quality": "Video kalitesi",
|
||||||
"quality-desc": "Daha yüksek kalite daha büyük dosya boyutlarına yol açar",
|
"quality-desc": "Daha yüksek kalite daha büyük dosya boyutlarına yol açar",
|
||||||
"quality-high": "Yüksek",
|
"quality-high": "Yüksek",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Portal önerilir, artefaktlar alırsanız Ekran'ı deneyin",
|
"source-desc": "Portal önerilir, artefaktlar alırsanız Ekran'ı deneyin",
|
||||||
"sources-portal": "Portal",
|
"sources-portal": "Portal",
|
||||||
"sources-screen": "Ekran",
|
"sources-screen": "Ekran",
|
||||||
"title": "Video Ayarları"
|
"title": "Video Ayarları",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"start-recording": "Запис екрана (почати запис)",
|
"start-recording": "Запис екрана (почати запис)",
|
||||||
"started": "Запис розпочато.",
|
"started": "Запис розпочато.",
|
||||||
"stop-recording": "Запис екрана (зупинити запис)",
|
"stop-recording": "Запис екрана (зупинити запис)",
|
||||||
"stopping": "Зупинка запису…"
|
"stopping": "Зупинка запису…",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "Записувач Екрану",
|
"name": "Записувач Екрану",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
"color-range-full": "Повний",
|
"color-range-full": "Повний",
|
||||||
"color-range-limited": "Обмежений",
|
"color-range-limited": "Обмежений",
|
||||||
"frame-rate": "Частота кадрів",
|
"frame-rate": "Частота кадрів",
|
||||||
|
"frame-rate-custom": "Користувацька",
|
||||||
"frame-rate-desc": "Цільова частота кадрів для запису екрану",
|
"frame-rate-desc": "Цільова частота кадрів для запису екрану",
|
||||||
|
"custom-frame-rate": "Користувацька частота кадрів",
|
||||||
|
"custom-frame-rate-desc": "Введіть користувацьке значення частоти кадрів (FPS)",
|
||||||
"quality": "Якість відео",
|
"quality": "Якість відео",
|
||||||
"quality-desc": "Вища якість призводить до більших розмірів файлів",
|
"quality-desc": "Вища якість призводить до більших розмірів файлів",
|
||||||
"quality-high": "Високий",
|
"quality-high": "Високий",
|
||||||
@@ -63,7 +67,8 @@
|
|||||||
"source-desc": "Рекомендується Portal, якщо з'являються артефакти спробуйте Екран",
|
"source-desc": "Рекомендується Portal, якщо з'являються артефакти спробуйте Екран",
|
||||||
"sources-portal": "Портал",
|
"sources-portal": "Портал",
|
||||||
"sources-screen": "Екран",
|
"sources-screen": "Екран",
|
||||||
"title": "Налаштування Відео"
|
"title": "Налаштування Відео",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"started": "已开始录制。",
|
"started": "已开始录制。",
|
||||||
"stop-recording": "屏幕录像(停止录制)",
|
"stop-recording": "屏幕录像(停止录制)",
|
||||||
"stopping": "停止录制…",
|
"stopping": "停止录制…",
|
||||||
"open-file": "打开文件"
|
"open-file": "打开文件",
|
||||||
|
"monitor-not-found": "Could not detect the monitor under cursor."
|
||||||
},
|
},
|
||||||
"name": "屏幕录制器",
|
"name": "屏幕录制器",
|
||||||
"settings": {
|
"settings": {
|
||||||
@@ -52,7 +53,10 @@
|
|||||||
"color-range-full": "全范围",
|
"color-range-full": "全范围",
|
||||||
"color-range-limited": "有限",
|
"color-range-limited": "有限",
|
||||||
"frame-rate": "帧率",
|
"frame-rate": "帧率",
|
||||||
|
"frame-rate-custom": "自定义",
|
||||||
"frame-rate-desc": "屏幕录制的目标帧率",
|
"frame-rate-desc": "屏幕录制的目标帧率",
|
||||||
|
"custom-frame-rate": "自定义帧率",
|
||||||
|
"custom-frame-rate-desc": "输入自定义帧率值(FPS)",
|
||||||
"quality": "视频质量",
|
"quality": "视频质量",
|
||||||
"quality-desc": "更高的质量会导致更大的文件大小",
|
"quality-desc": "更高的质量会导致更大的文件大小",
|
||||||
"quality-high": "高",
|
"quality-high": "高",
|
||||||
@@ -66,7 +70,8 @@
|
|||||||
"source-desc": "推荐使用桌面门户 (Portal),如果出现画面异常请尝试屏幕",
|
"source-desc": "推荐使用桌面门户 (Portal),如果出现画面异常请尝试屏幕",
|
||||||
"sources-portal": "桌面门户",
|
"sources-portal": "桌面门户",
|
||||||
"sources-screen": "屏幕",
|
"sources-screen": "屏幕",
|
||||||
"title": "视频设置"
|
"title": "视频设置",
|
||||||
|
"sources-focused-monitor": "Focused monitor (Hyprland)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "screen-recorder",
|
"id": "screen-recorder",
|
||||||
"name": "Screen Recorder",
|
"name": "Screen Recorder",
|
||||||
"version": "1.1.7",
|
"version": "1.2.0",
|
||||||
"minNoctaliaVersion": "3.6.0",
|
"minNoctaliaVersion": "3.6.0",
|
||||||
"author": "Noctalia Team",
|
"author": "Noctalia Team",
|
||||||
"official": true,
|
"official": true,
|
||||||
|
|||||||
@@ -27,12 +27,13 @@
|
|||||||
"viewMode": "list"
|
"viewMode": "list"
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"cavaFrameRate": 30,
|
|
||||||
"mprisBlacklist": [
|
"mprisBlacklist": [
|
||||||
],
|
],
|
||||||
"preferredPlayer": "",
|
"preferredPlayer": "",
|
||||||
|
"spectrumFrameRate": 30,
|
||||||
"visualizerType": "linear",
|
"visualizerType": "linear",
|
||||||
"volumeFeedback": false,
|
"volumeFeedback": false,
|
||||||
|
"volumeFeedbackSoundFile": "",
|
||||||
"volumeOverdrive": true,
|
"volumeOverdrive": true,
|
||||||
"volumeStep": 5
|
"volumeStep": 5
|
||||||
},
|
},
|
||||||
@@ -42,37 +43,40 @@
|
|||||||
"backgroundOpacity": 0.93,
|
"backgroundOpacity": 0.93,
|
||||||
"barType": "simple",
|
"barType": "simple",
|
||||||
"capsuleColorKey": "none",
|
"capsuleColorKey": "none",
|
||||||
"capsuleOpacity": 0.36,
|
"capsuleOpacity": 0.51,
|
||||||
|
"contentPadding": 2,
|
||||||
"density": "comfortable",
|
"density": "comfortable",
|
||||||
"displayMode": "always_visible",
|
"displayMode": "always_visible",
|
||||||
|
"enableExclusionZoneInset": true,
|
||||||
"floating": false,
|
"floating": false,
|
||||||
|
"fontScale": 1,
|
||||||
"frameRadius": 12,
|
"frameRadius": 12,
|
||||||
"frameThickness": 8,
|
"frameThickness": 8,
|
||||||
"hideOnOverview": false,
|
"hideOnOverview": false,
|
||||||
"marginHorizontal": 10,
|
"marginHorizontal": 10,
|
||||||
"marginVertical": 5,
|
"marginVertical": 5,
|
||||||
|
"middleClickAction": "none",
|
||||||
|
"middleClickCommand": "",
|
||||||
|
"middleClickFollowMouse": false,
|
||||||
"monitors": [
|
"monitors": [
|
||||||
],
|
],
|
||||||
|
"mouseWheelAction": "none",
|
||||||
|
"mouseWheelWrap": true,
|
||||||
"outerCorners": true,
|
"outerCorners": true,
|
||||||
"position": "top",
|
"position": "top",
|
||||||
|
"reverseScroll": false,
|
||||||
|
"rightClickAction": "controlCenter",
|
||||||
|
"rightClickCommand": "",
|
||||||
|
"rightClickFollowMouse": true,
|
||||||
"screenOverrides": [
|
"screenOverrides": [
|
||||||
],
|
],
|
||||||
"showCapsule": true,
|
"showCapsule": true,
|
||||||
|
"showOnWorkspaceSwitch": true,
|
||||||
"showOutline": false,
|
"showOutline": false,
|
||||||
"useSeparateOpacity": false,
|
"useSeparateOpacity": false,
|
||||||
|
"widgetSpacing": 4,
|
||||||
"widgets": {
|
"widgets": {
|
||||||
"center": [
|
"center": [
|
||||||
{
|
|
||||||
"clockColor": "none",
|
|
||||||
"customFont": "Adwaita Sans",
|
|
||||||
"formatHorizontal": "HH:mm:ss t",
|
|
||||||
"formatVertical": "HH mm - dd MM",
|
|
||||||
"id": "Clock",
|
|
||||||
"tooltipFormat": "HH:mm ddd, MMM dd",
|
|
||||||
"useCustomFont": false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"left": [
|
|
||||||
{
|
{
|
||||||
"colorizeSystemIcon": "none",
|
"colorizeSystemIcon": "none",
|
||||||
"enableColorization": false,
|
"enableColorization": false,
|
||||||
@@ -114,6 +118,7 @@
|
|||||||
"enableScrollWheel": true,
|
"enableScrollWheel": true,
|
||||||
"focusedColor": "primary",
|
"focusedColor": "primary",
|
||||||
"followFocusedScreen": false,
|
"followFocusedScreen": false,
|
||||||
|
"fontWeight": "bold",
|
||||||
"groupedBorderOpacity": 1,
|
"groupedBorderOpacity": 1,
|
||||||
"hideUnoccupied": true,
|
"hideUnoccupied": true,
|
||||||
"iconScale": 0.8,
|
"iconScale": 0.8,
|
||||||
@@ -122,14 +127,41 @@
|
|||||||
"occupiedColor": "secondary",
|
"occupiedColor": "secondary",
|
||||||
"pillSize": 0.6,
|
"pillSize": 0.6,
|
||||||
"showApplications": false,
|
"showApplications": false,
|
||||||
|
"showApplicationsHover": false,
|
||||||
"showBadge": true,
|
"showBadge": true,
|
||||||
"showLabelsOnlyWhenOccupied": true,
|
"showLabelsOnlyWhenOccupied": true,
|
||||||
"unfocusedIconsOpacity": 1
|
"unfocusedIconsOpacity": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"colorizeIcons": false,
|
||||||
|
"hideMode": "visible",
|
||||||
|
"iconScale": 0.9,
|
||||||
|
"id": "Taskbar",
|
||||||
|
"maxTaskbarWidth": 45,
|
||||||
|
"onlyActiveWorkspaces": false,
|
||||||
|
"onlySameOutput": true,
|
||||||
|
"showPinnedApps": true,
|
||||||
|
"showTitle": true,
|
||||||
|
"smartWidth": true,
|
||||||
|
"titleWidth": 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blacklist": [
|
||||||
|
],
|
||||||
|
"chevronColor": "none",
|
||||||
|
"colorizeIcons": false,
|
||||||
|
"drawerEnabled": true,
|
||||||
|
"hidePassive": false,
|
||||||
|
"id": "Tray",
|
||||||
|
"pinned": [
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"left": [
|
||||||
{
|
{
|
||||||
"clockColor": "none",
|
"clockColor": "none",
|
||||||
"customFont": "",
|
"customFont": "Adwaita Sans",
|
||||||
"formatHorizontal": "ddd, MMM dd",
|
"formatHorizontal": "HH:mm:ss t",
|
||||||
"formatVertical": "HH mm - dd MM",
|
"formatVertical": "HH mm - dd MM",
|
||||||
"id": "Clock",
|
"id": "Clock",
|
||||||
"tooltipFormat": "HH:mm ddd, MMM dd",
|
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||||
@@ -140,6 +172,7 @@
|
|||||||
"diskPath": "/",
|
"diskPath": "/",
|
||||||
"iconColor": "none",
|
"iconColor": "none",
|
||||||
"id": "SystemMonitor",
|
"id": "SystemMonitor",
|
||||||
|
"showCpuCores": false,
|
||||||
"showCpuFreq": false,
|
"showCpuFreq": false,
|
||||||
"showCpuTemp": true,
|
"showCpuTemp": true,
|
||||||
"showCpuUsage": true,
|
"showCpuUsage": true,
|
||||||
@@ -181,17 +214,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"right": [
|
"right": [
|
||||||
{
|
|
||||||
"blacklist": [
|
|
||||||
],
|
|
||||||
"chevronColor": "none",
|
|
||||||
"colorizeIcons": false,
|
|
||||||
"drawerEnabled": true,
|
|
||||||
"hidePassive": false,
|
|
||||||
"id": "Tray",
|
|
||||||
"pinned": [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"colorizeSystemIcon": "none",
|
"colorizeSystemIcon": "none",
|
||||||
"enableColorization": false,
|
"enableColorization": false,
|
||||||
@@ -226,13 +248,6 @@
|
|||||||
"wheelUpUpdateText": false,
|
"wheelUpUpdateText": false,
|
||||||
"wheelUpdateText": false
|
"wheelUpdateText": false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"displayMode": "alwaysShow",
|
|
||||||
"iconColor": "none",
|
|
||||||
"id": "Volume",
|
|
||||||
"middleClickCommand": "pwvucontrol || pavucontrol",
|
|
||||||
"textColor": "none"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"applyToAllMonitors": false,
|
"applyToAllMonitors": false,
|
||||||
"displayMode": "onhover",
|
"displayMode": "onhover",
|
||||||
@@ -247,6 +262,19 @@
|
|||||||
},
|
},
|
||||||
"id": "plugin:privacy-indicator"
|
"id": "plugin:privacy-indicator"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"displayMode": "alwaysShow",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "VPN",
|
||||||
|
"textColor": "none"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"displayMode": "alwaysShow",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "Volume",
|
||||||
|
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||||
|
"textColor": "none"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"deviceNativePath": "",
|
"deviceNativePath": "",
|
||||||
"displayMode": "icon-always",
|
"displayMode": "icon-always",
|
||||||
@@ -257,18 +285,13 @@
|
|||||||
"showPowerProfiles": true
|
"showPowerProfiles": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"displayMode": "alwaysShow",
|
"clockColor": "none",
|
||||||
"iconColor": "none",
|
"customFont": "",
|
||||||
"id": "VPN",
|
"formatHorizontal": "ddd, MMM dd",
|
||||||
"textColor": "none"
|
"formatVertical": "HH mm - dd MM",
|
||||||
},
|
"id": "Clock",
|
||||||
{
|
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||||
"hideWhenZero": true,
|
"useCustomFont": false
|
||||||
"hideWhenZeroUnread": false,
|
|
||||||
"iconColor": "none",
|
|
||||||
"id": "NotificationHistory",
|
|
||||||
"showUnreadBadge": true,
|
|
||||||
"unreadBadgeColor": "primary"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"colorizeDistroLogo": false,
|
"colorizeDistroLogo": false,
|
||||||
@@ -283,6 +306,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"brightness": {
|
"brightness": {
|
||||||
|
"backlightDeviceMappings": [
|
||||||
|
],
|
||||||
"brightnessStep": 5,
|
"brightnessStep": 5,
|
||||||
"enableDdcSupport": false,
|
"enableDdcSupport": false,
|
||||||
"enforceMinimum": true
|
"enforceMinimum": true
|
||||||
@@ -363,6 +388,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "NightLight"
|
"id": "NightLight"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Notifications"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -370,6 +398,7 @@
|
|||||||
"desktopWidgets": {
|
"desktopWidgets": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"gridSnap": true,
|
"gridSnap": true,
|
||||||
|
"gridSnapScale": false,
|
||||||
"monitorWidgets": [
|
"monitorWidgets": [
|
||||||
{
|
{
|
||||||
"name": "DP-3",
|
"name": "DP-3",
|
||||||
@@ -523,32 +552,44 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"overviewEnabled": true
|
||||||
},
|
},
|
||||||
"dock": {
|
"dock": {
|
||||||
"animationSpeed": 1,
|
"animationSpeed": 1,
|
||||||
"backgroundOpacity": 1,
|
"backgroundOpacity": 1,
|
||||||
"colorizeIcons": true,
|
"colorizeIcons": true,
|
||||||
"deadOpacity": 0.6,
|
"deadOpacity": 0.6,
|
||||||
"displayMode": "always_visible",
|
"displayMode": "exclusive",
|
||||||
"dockType": "static",
|
"dockType": "floating",
|
||||||
"enabled": true,
|
"enabled": false,
|
||||||
"floatingRatio": 1,
|
"floatingRatio": 1,
|
||||||
|
"groupApps": false,
|
||||||
|
"groupClickAction": "cycle",
|
||||||
|
"groupContextMenuMode": "extended",
|
||||||
|
"groupIndicatorStyle": "dots",
|
||||||
"inactiveIndicators": true,
|
"inactiveIndicators": true,
|
||||||
|
"indicatorColor": "primary",
|
||||||
|
"indicatorOpacity": 0.6,
|
||||||
|
"indicatorThickness": 3,
|
||||||
|
"launcherIconColor": "none",
|
||||||
|
"launcherPosition": "end",
|
||||||
"monitors": [
|
"monitors": [
|
||||||
],
|
],
|
||||||
"onlySameOutput": false,
|
"onlySameOutput": false,
|
||||||
"pinnedApps": [
|
"pinnedApps": [
|
||||||
"firefox",
|
"Alacritty",
|
||||||
"com.discordapp.Discord",
|
|
||||||
"com.moonlight_stream.Moonlight",
|
"com.moonlight_stream.Moonlight",
|
||||||
"Element"
|
"com.discordapp.Discord",
|
||||||
|
"org.keepassxc.KeePassXC",
|
||||||
|
"firefox"
|
||||||
],
|
],
|
||||||
"pinnedStatic": true,
|
"pinnedStatic": true,
|
||||||
"position": "top",
|
"position": "top",
|
||||||
"showFrameIndicator": true,
|
"showDockIndicator": false,
|
||||||
|
"showLauncherIcon": false,
|
||||||
"sitOnFrame": false,
|
"sitOnFrame": false,
|
||||||
"size": 1.2
|
"size": 0.72
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"allowPanelsOnScreenWithoutBar": true,
|
"allowPanelsOnScreenWithoutBar": true,
|
||||||
@@ -558,11 +599,13 @@
|
|||||||
"autoStartAuth": false,
|
"autoStartAuth": false,
|
||||||
"avatarImage": "/home/aiden/.face",
|
"avatarImage": "/home/aiden/.face",
|
||||||
"boxRadiusRatio": 1,
|
"boxRadiusRatio": 1,
|
||||||
"clockFormat": "hh\\nmm",
|
"clockFormat": "hh:mm\\nt",
|
||||||
"clockStyle": "custom",
|
"clockStyle": "custom",
|
||||||
"compactLockScreen": false,
|
"compactLockScreen": false,
|
||||||
"dimmerOpacity": 0,
|
"dimmerOpacity": 0,
|
||||||
|
"enableBlurBehind": true,
|
||||||
"enableLockScreenCountdown": true,
|
"enableLockScreenCountdown": true,
|
||||||
|
"enableLockScreenMediaControls": true,
|
||||||
"enableShadows": true,
|
"enableShadows": true,
|
||||||
"forceBlackScreenCorners": false,
|
"forceBlackScreenCorners": false,
|
||||||
"iRadiusRatio": 1,
|
"iRadiusRatio": 1,
|
||||||
@@ -571,7 +614,8 @@
|
|||||||
"Down"
|
"Down"
|
||||||
],
|
],
|
||||||
"keyEnter": [
|
"keyEnter": [
|
||||||
"Return"
|
"Return",
|
||||||
|
"Enter"
|
||||||
],
|
],
|
||||||
"keyEscape": [
|
"keyEscape": [
|
||||||
"Esc"
|
"Esc"
|
||||||
@@ -597,6 +641,7 @@
|
|||||||
"lockScreenMonitors": [
|
"lockScreenMonitors": [
|
||||||
],
|
],
|
||||||
"lockScreenTint": 0,
|
"lockScreenTint": 0,
|
||||||
|
"passwordChars": true,
|
||||||
"radiusRatio": 1,
|
"radiusRatio": 1,
|
||||||
"reverseScroll": false,
|
"reverseScroll": false,
|
||||||
"scaleRatio": 1,
|
"scaleRatio": 1,
|
||||||
@@ -621,6 +666,20 @@
|
|||||||
"startup": "",
|
"startup": "",
|
||||||
"wallpaperChange": ""
|
"wallpaperChange": ""
|
||||||
},
|
},
|
||||||
|
"idle": {
|
||||||
|
"customCommands": "[]",
|
||||||
|
"enabled": false,
|
||||||
|
"fadeDuration": 5,
|
||||||
|
"lockCommand": "",
|
||||||
|
"lockTimeout": 660,
|
||||||
|
"resumeLockCommand": "",
|
||||||
|
"resumeScreenOffCommand": "",
|
||||||
|
"resumeSuspendCommand": "",
|
||||||
|
"screenOffCommand": "",
|
||||||
|
"screenOffTimeout": 600,
|
||||||
|
"suspendCommand": "",
|
||||||
|
"suspendTimeout": 1800
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"analogClockInCalendar": false,
|
"analogClockInCalendar": false,
|
||||||
"firstDayOfWeek": -1,
|
"firstDayOfWeek": -1,
|
||||||
@@ -637,11 +696,13 @@
|
|||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"airplaneModeEnabled": false,
|
"airplaneModeEnabled": false,
|
||||||
|
"bluetoothAutoConnect": true,
|
||||||
"bluetoothDetailsViewMode": "grid",
|
"bluetoothDetailsViewMode": "grid",
|
||||||
"bluetoothHideUnnamedDevices": false,
|
"bluetoothHideUnnamedDevices": false,
|
||||||
"bluetoothRssiPollIntervalMs": 10000,
|
"bluetoothRssiPollIntervalMs": 10000,
|
||||||
"bluetoothRssiPollingEnabled": false,
|
"bluetoothRssiPollingEnabled": false,
|
||||||
"disableDiscoverability": false,
|
"disableDiscoverability": false,
|
||||||
|
"networkPanelView": "wifi",
|
||||||
"wifiDetailsViewMode": "list",
|
"wifiDetailsViewMode": "list",
|
||||||
"wifiEnabled": true
|
"wifiEnabled": true
|
||||||
},
|
},
|
||||||
@@ -654,6 +715,10 @@
|
|||||||
"manualSunset": "21:00",
|
"manualSunset": "21:00",
|
||||||
"nightTemp": "4140"
|
"nightTemp": "4140"
|
||||||
},
|
},
|
||||||
|
"noctaliaPerformance": {
|
||||||
|
"disableDesktopWidgets": true,
|
||||||
|
"disableWallpaper": true
|
||||||
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"backgroundOpacity": 1,
|
"backgroundOpacity": 1,
|
||||||
"clearDismissed": true,
|
"clearDismissed": true,
|
||||||
@@ -765,7 +830,7 @@
|
|||||||
"showHeader": true,
|
"showHeader": true,
|
||||||
"showKeybinds": true
|
"showKeybinds": true
|
||||||
},
|
},
|
||||||
"settingsVersion": 53,
|
"settingsVersion": 57,
|
||||||
"systemMonitor": {
|
"systemMonitor": {
|
||||||
"batteryCriticalThreshold": 5,
|
"batteryCriticalThreshold": 5,
|
||||||
"batteryWarningThreshold": 20,
|
"batteryWarningThreshold": 20,
|
||||||
@@ -815,19 +880,18 @@
|
|||||||
"enableUserTheming": false
|
"enableUserTheming": false
|
||||||
},
|
},
|
||||||
"ui": {
|
"ui": {
|
||||||
"bluetoothDetailsViewMode": "grid",
|
|
||||||
"bluetoothHideUnnamedDevices": false,
|
|
||||||
"boxBorderEnabled": false,
|
"boxBorderEnabled": false,
|
||||||
"fontDefault": "Sans Serif",
|
"fontDefault": "Sans Serif",
|
||||||
"fontDefaultScale": 1,
|
"fontDefaultScale": 1,
|
||||||
"fontFixed": "monospace",
|
"fontFixed": "monospace",
|
||||||
"fontFixedScale": 1,
|
"fontFixedScale": 1,
|
||||||
"networkPanelView": "wifi",
|
"panelBackgroundOpacity": 0.73,
|
||||||
"panelBackgroundOpacity": 0.5,
|
|
||||||
"panelsAttachedToBar": true,
|
"panelsAttachedToBar": true,
|
||||||
|
"scrollbarAlwaysVisible": true,
|
||||||
"settingsPanelMode": "centered",
|
"settingsPanelMode": "centered",
|
||||||
|
"settingsPanelSideBarCardStyle": false,
|
||||||
"tooltipsEnabled": true,
|
"tooltipsEnabled": true,
|
||||||
"wifiDetailsViewMode": "grid"
|
"translucentWidgets": true
|
||||||
},
|
},
|
||||||
"wallpaper": {
|
"wallpaper": {
|
||||||
"automationEnabled": true,
|
"automationEnabled": true,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
flatpak --user update
|
flatpak --user update
|
||||||
sudo xbps-install -Su
|
|
||||||
git -C ~/void-packages/ pull
|
git -C ~/void-packages/ pull
|
||||||
|
cat local-package-list.txt | xargs -n1 ~/void-packages/xbps-src update-check
|
||||||
~/void-packages/xbps-src update-local
|
~/void-packages/xbps-src update-local
|
||||||
|
sudo xbps-install -Su
|
||||||
read -p "Press enter to continue"
|
read -p "Press enter to continue"
|
||||||
|
|||||||
Reference in New Issue
Block a user