Add screen-recorder plugin; refactor Affinity

Introduce a new screen‑recorder plugin with default settings, key
bindings,
and a bar widget entry. Add a dedicated Affinity module, import it in
the
core defaults, and remove the previous package entry. Enable Affinity on
the Garand‑Desktop and Garand‑Laptop hosts while keeping it disabled on
the
default host. Update flake.lock to newer revisions and reorder the
hyprland exec‑once commands.
This commit is contained in:
2026-04-24 14:30:51 +02:00
parent b31142964c
commit 44488a7959
11 changed files with 118 additions and 39 deletions
Generated
+33 -33
View File
@@ -18,11 +18,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1776678252, "lastModified": 1776949098,
"narHash": "sha256-kRvF2710eJtYs9NWkfNjxOz4bHzXVqN6RDmEyXHDXdw=", "narHash": "sha256-rqp4XGkcirU3dlcvJiFhxmQuwV1E6UzDpElB8/2qqZ0=",
"owner": "mrshmllow", "owner": "mrshmllow",
"repo": "affinity-nix", "repo": "affinity-nix",
"rev": "8371b47a54d1611a689973fa28bd1a145cd813da", "rev": "9989df33b2aa6ad66441a2c83b817652754d8705",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -117,11 +117,11 @@
}, },
"crane": { "crane": {
"locked": { "locked": {
"lastModified": 1775839657, "lastModified": 1776635034,
"narHash": "sha256-SPm9ck7jh3Un9nwPuMGbRU04UroFmOHjLP56T10MOeM=", "narHash": "sha256-OEOJrT3ZfwbChzODfIH4GzlNTtOFuZFWPtW7jIeR8xU=",
"owner": "ipetkov", "owner": "ipetkov",
"repo": "crane", "repo": "crane",
"rev": "7cf72d978629469c4bd4206b95c402514c1f6000", "rev": "dc7496d8ea6e526b1254b55d09b966e94673750f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -158,11 +158,11 @@
"rust-analyzer-src": "rust-analyzer-src" "rust-analyzer-src": "rust-analyzer-src"
}, },
"locked": { "locked": {
"lastModified": 1776153734, "lastModified": 1776845169,
"narHash": "sha256-QvkVX4Go+BnNgQQLc5Ma3WNBZOG5Jpdqsy8Ri0/CbSQ=", "narHash": "sha256-Ya6Ba5oC0+PK1TSU4Rkjpoca73mUp6FoHQV5QGnqbx0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "fenix", "repo": "fenix",
"rev": "a8b0e62fb39299fbeb1aa365f4b57e2c258a178e", "rev": "f0b5be1fa2891221ba8b48784f8fded5ef15301f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -201,11 +201,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1776657773, "lastModified": 1776916994,
"narHash": "sha256-GgExKCDspgASVM6sRH0VcVyixQznxuR4tjiAA7MfKxs=", "narHash": "sha256-FgqUwRZ2bwbE5w1bCUv9MB3gvwqZ4oEyCgZ6z/6jdTY=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "986236cd6fad0979233ae5e73456a365f79ff198", "rev": "a2236006e5c70e2fc06e9acb016b1ac9c0fd5935",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@@ -346,11 +346,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775585728, "lastModified": 1776796298,
"narHash": "sha256-8Psjt+TWvE4thRKktJsXfR6PA/fWWsZ04DVaY6PUhr4=", "narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "580633fa3fe5fc0379905986543fd7495481913d", "rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -403,11 +403,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1776695811, "lastModified": 1776964438,
"narHash": "sha256-UPO3SFTbmxTOiioO7j1d1Unus63+jO/6mNNS+lsgjBQ=", "narHash": "sha256-AF0cby9Xuijr5qaFpYKbm1mExV956Hk233bel6QxpFw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "0a8d50edf28d537ce7538fbbf207fa7939d41abc", "rev": "e09259dd2e147d35ef889784b51e89b0a10ffe15",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -476,11 +476,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1776169885, "lastModified": 1776548001,
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", "narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", "rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -529,11 +529,11 @@
"noctalia-qs": "noctalia-qs" "noctalia-qs": "noctalia-qs"
}, },
"locked": { "locked": {
"lastModified": 1776666525, "lastModified": 1776888984,
"narHash": "sha256-H5M/eoxQ0ilgxEqGRH2Ptq/ViS72Xu16IjWweO/OdLg=", "narHash": "sha256-Up2F/eoMuPUsZnPVYdH5TMHe1TBP2Ue1QuWd0vWZoxY=",
"owner": "noctalia-dev", "owner": "noctalia-dev",
"repo": "noctalia-shell", "repo": "noctalia-shell",
"rev": "ed1fff6260470d6f5cbe1951a8cceccb5265d61b", "rev": "2c1808f9f8937fc0b82c54af513f7620fec56d71",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -630,11 +630,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1776386905, "lastModified": 1776795718,
"narHash": "sha256-m6H7IIn7RjZ9C42/x6v/p/TvOl0TDEpqz4fEa6+wFow=", "narHash": "sha256-YrqHeE9ZEnmxJiXE+IBAxbmNRFPE7mn9KbxZ3Mpu388=",
"owner": "Diegiwg", "owner": "Diegiwg",
"repo": "PrismLauncher-Cracked", "repo": "PrismLauncher-Cracked",
"rev": "9d2de362503d5a7f9ff37c435b3dc4c38223d57e", "rev": "0c20d448a3c89cbff85ef5dc7420bf60dc1e65ff",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -659,11 +659,11 @@
"rust-analyzer-src": { "rust-analyzer-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1776115521, "lastModified": 1776800521,
"narHash": "sha256-N/R1//Xd8vr84LtyTy8CVz7V2n9NJXXlJEODSunLE9c=", "narHash": "sha256-f8YJfwAOsLFpIoqZuX3yF69UvMLrkx7iVzMH1pJU7cM=",
"owner": "rust-lang", "owner": "rust-lang",
"repo": "rust-analyzer", "repo": "rust-analyzer",
"rev": "5205b52ea60dd49c7e33dd2ad1a3e7ef55bb30ec", "rev": "8954b66d43225e62c92e8bbcc8500191b5cceb1e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -710,11 +710,11 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1776170745, "lastModified": 1776893932,
"narHash": "sha256-Tl1aZVP5EIlT+k0+iAKH018GLHJpLz3hhJ0LNQOWxCc=", "narHash": "sha256-AFD5cf9eNqXq1brHS63xeZy2xKZMgG9J86XJ9I2eLn8=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "e3861617645a43c9bbefde1aa6ac54dd0a44bfa9", "rev": "84971726c7ef0bb3669a5443e151cc226e65c518",
"type": "github" "type": "github"
}, },
"original": { "original": {
+5 -1
View File
@@ -30,6 +30,11 @@ _: {
gamescope.enable = false; # Gamescope: microcompositor for games gamescope.enable = false; # Gamescope: microcompositor for games
steam.enable = true; # Steam: platform for buying and playing games steam.enable = true; # Steam: platform for buying and playing games
/*
Media & Graphics
*/
affinity.enable = true; # Affinity: professional graphics suite
packages = { packages = {
/* /*
Container & Packaging Container & Packaging
@@ -76,7 +81,6 @@ _: {
/* /*
Media & Graphics Media & Graphics
*/ */
affinity.enable = true; # Affinity: professional graphics suite
eyeOfGnome.enable = true; # Eye of GNOME: image viewer eyeOfGnome.enable = true; # Eye of GNOME: image viewer
freetube.enable = false; # FreeTube: privacyfriendly YouTube client freetube.enable = false; # FreeTube: privacyfriendly YouTube client
gimp.enable = false; # GIMP: GNU Image Manipulation Program gimp.enable = false; # GIMP: GNU Image Manipulation Program
+5 -1
View File
@@ -30,6 +30,11 @@ _: {
gamescope.enable = false; # Gamescope: microcompositor for games gamescope.enable = false; # Gamescope: microcompositor for games
steam.enable = true; # Steam: platform for buying and playing games steam.enable = true; # Steam: platform for buying and playing games
/*
Media & Graphics
*/
affinity.enable = true; # Affinity: professional graphics suite
packages = { packages = {
/* /*
Container & Packaging Container & Packaging
@@ -76,7 +81,6 @@ _: {
/* /*
Media & Graphics Media & Graphics
*/ */
affinity.enable = true; # Affinity: professional graphics suite
eyeOfGnome.enable = true; # Eye of GNOME: image viewer eyeOfGnome.enable = true; # Eye of GNOME: image viewer
freetube.enable = false; # FreeTube: privacyfriendly YouTube client freetube.enable = false; # FreeTube: privacyfriendly YouTube client
gimp.enable = false; # GIMP: GNU Image Manipulation Program gimp.enable = false; # GIMP: GNU Image Manipulation Program
+5 -1
View File
@@ -30,6 +30,11 @@ _: {
gamescope.enable = false; # Gamescope: microcompositor for games gamescope.enable = false; # Gamescope: microcompositor for games
steam.enable = true; # Steam: platform for buying and playing games steam.enable = true; # Steam: platform for buying and playing games
/*
Media & Graphics
*/
affinity.enable = false; # Affinity: professional graphics suite
packages = { packages = {
/* /*
Container & Packaging Container & Packaging
@@ -76,7 +81,6 @@ _: {
/* /*
Media & Graphics Media & Graphics
*/ */
affinity.enable = false; # Affinity: professional graphics suite
eyeOfGnome.enable = true; # Eye of GNOME: image viewer eyeOfGnome.enable = true; # Eye of GNOME: image viewer
freetube.enable = false; # FreeTube: privacyfriendly YouTube client freetube.enable = false; # FreeTube: privacyfriendly YouTube client
gimp.enable = false; # GIMP: GNU Image Manipulation Program gimp.enable = false; # GIMP: GNU Image Manipulation Program
+14
View File
@@ -0,0 +1,14 @@
{
pkgs,
lib,
config,
inputs,
...
}: {
options.affinity.enable = lib.mkEnableOption "Steam";
config = lib.mkIf config.affinity.enable {
nixpkgs.overlays = [inputs.affinity-nix.overlays.default];
environment.systemPackages = with pkgs; [affinity-v3];
};
}
+1
View File
@@ -1,6 +1,7 @@
{inputs, ...}: { {inputs, ...}: {
imports = [ imports = [
./packages ./packages
./affinity.nix
./boot.nix ./boot.nix
./calendar.nix ./calendar.nix
./docker.nix ./docker.nix
-1
View File
@@ -31,7 +31,6 @@
spaceCadetPinball = space-cadet-pinball; spaceCadetPinball = space-cadet-pinball;
ttySolitaire = tty-solitaire; ttySolitaire = tty-solitaire;
gimp = gimp; gimp = gimp;
affinity = inputs.affinity-nix.packages.${system}.v3;
eyeOfGnome = eog; eyeOfGnome = eog;
kdenlive = kdePackages.kdenlive; kdenlive = kdePackages.kdenlive;
plex = [ plex = [
+2
View File
@@ -21,6 +21,7 @@
"SUPER, N, exec, dex ${desktopEntriesPath}/garandcloud.desktop #\"GarandCloud client\"" "SUPER, N, exec, dex ${desktopEntriesPath}/garandcloud.desktop #\"GarandCloud client\""
"SUPER, O, exec, onlyoffice-desktopeditors #\"Office suite\"" "SUPER, O, exec, onlyoffice-desktopeditors #\"Office suite\""
"SUPER, P, exec, plex-desktop #\"Plex media player\"" "SUPER, P, exec, plex-desktop #\"Plex media player\""
"SUPER, R, exec, noctalia-shell ipc call plugin:screen-recorder saveReplay #\"Save Replay\""
"SUPER, Return, exec, kitty #\"Kitty terminal\"" "SUPER, Return, exec, kitty #\"Kitty terminal\""
"SUPER, S, exec, steam #\"Steam Game launcher\"" "SUPER, S, exec, steam #\"Steam Game launcher\""
"SUPER, T, exec, thunar #\"File manager\"" "SUPER, T, exec, thunar #\"File manager\""
@@ -51,6 +52,7 @@
"SUPER ALT, G, exec, dex ${desktopEntriesPath}/glance.desktop #\"Glance server panel\"" "SUPER ALT, G, exec, dex ${desktopEntriesPath}/glance.desktop #\"Glance server panel\""
"SUPER ALT, M, exec, dex ${desktopEntriesPath}/mastodon.desktop #\"Mastodon social network client\"" "SUPER ALT, M, exec, dex ${desktopEntriesPath}/mastodon.desktop #\"Mastodon social network client\""
"SUPER ALT, P, exec, noctalia-shell ipc call settings toggle #\"Open settings panel\"" "SUPER ALT, P, exec, noctalia-shell ipc call settings toggle #\"Open settings panel\""
"SUPER ALT, R, exec, noctalia-shell ipc call plugin:screen-recorder toggleReplay #\"Toggle Replay\""
"SUPER ALT, S, exec, slack #\"Slack team communication tool\"" "SUPER ALT, S, exec, slack #\"Slack team communication tool\""
"SUPER ALT, T, exec, gedit #\"GNOME text editor\"" "SUPER ALT, T, exec, gedit #\"GNOME text editor\""
"SUPER ALT, W, exec, noctalia-shell ipc call wallpaper toggle #\"Toggle wallpaper\"" "SUPER ALT, W, exec, noctalia-shell ipc call wallpaper toggle #\"Toggle wallpaper\""
+2 -2
View File
@@ -1,10 +1,10 @@
_: { _: {
wayland.windowManager.hyprland.settings.exec-once = [ wayland.windowManager.hyprland.settings.exec-once = [
"wl-paste --type text --watch cliphist store" # Saves text
"wl-paste --type image --watch cliphist store" # Saves images
"dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" "dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"systemctl --user start hyprpolkitagent" "systemctl --user start hyprpolkitagent"
"noctalia-shell" "noctalia-shell"
"wl-paste --type text --watch cliphist store" # Saves text
"wl-paste --type image --watch cliphist store" # Saves images
]; ];
} }
+26
View File
@@ -27,6 +27,10 @@ in {
enabled = true; enabled = true;
sourceUrl = sourceUrl; sourceUrl = sourceUrl;
}; };
screen-recorder = {
enabled = true;
sourceUrl = sourceUrl;
};
}; };
version = 2; version = 2;
}; };
@@ -45,6 +49,28 @@ in {
kde-connect = { kde-connect = {
hideIfNoDeviceConnected = true; hideIfNoDeviceConnected = true;
}; };
screen-recorder = {
hideInactive = true;
iconColor = "none";
directory = "";
filenamePattern = "recording_yyyyMMdd_HHmmss";
frameRate = 60;
audioCodec = "aac";
videoCodec = "hevc";
quality = "ultra";
colorRange = "full";
showCursor = true;
copyToClipboard = false;
audioSource = "default_output";
videoSource = "portal";
resolution = "1920x1080";
replayEnabled = true;
replayDuration = 60;
customReplayDuration = 30;
replayStorage = "disk";
restorePortalSession = true;
customFrameRate = 6;
};
}; };
}; };
} }
@@ -44,6 +44,31 @@
showPowerProfiles = true; showPowerProfiles = true;
warningThreshold = 30; warningThreshold = 30;
} }
{
id = "plugin:screen-recorder";
defaultSettings = {
hideInactive = true;
iconColor = "none";
directory = "";
filenamePattern = "recording_yyyyMMdd_HHmmss";
frameRate = 60;
audioCodec = "aac";
videoCodec = "hevc";
quality = "ultra";
colorRange = "full";
showCursor = true;
copyToClipboard = false;
audioSource = "default_output";
videoSource = "portal";
resolution = "1920x1080";
replayEnabled = true;
replayDuration = 60;
customReplayDuration = 30;
replayStorage = "disk";
restorePortalSession = true;
customFrameRate = 6;
};
}
{ {
id = "Volume"; id = "Volume";
displayMode = "alwaysShow"; displayMode = "alwaysShow";