From 44488a7959db4eaf67ae7e022d87899d28e7f2fe Mon Sep 17 00:00:00 2001 From: GarandPLG Date: Fri, 24 Apr 2026 14:30:51 +0200 Subject: [PATCH] Add screen-recorder plugin; refactor Affinity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- flake.lock | 66 +++++++++---------- hosts/Garand-Desktop/system-modules.nix | 6 +- hosts/Garand-Laptop/system-modules.nix | 6 +- hosts/default/system-modules.nix | 6 +- modules/core/affinity.nix | 14 ++++ modules/core/default.nix | 1 + modules/core/packages/packages.nix | 1 - modules/home/hyprland/binds.nix | 2 + modules/home/hyprland/exec-once.nix | 4 +- modules/home/noctalia/plugins.nix | 26 ++++++++ .../noctalia/settings/bar/widgets/right.nix | 25 +++++++ 11 files changed, 118 insertions(+), 39 deletions(-) create mode 100644 modules/core/affinity.nix diff --git a/flake.lock b/flake.lock index 97110be..f82dbfb 100644 --- a/flake.lock +++ b/flake.lock @@ -18,11 +18,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1776678252, - "narHash": "sha256-kRvF2710eJtYs9NWkfNjxOz4bHzXVqN6RDmEyXHDXdw=", + "lastModified": 1776949098, + "narHash": "sha256-rqp4XGkcirU3dlcvJiFhxmQuwV1E6UzDpElB8/2qqZ0=", "owner": "mrshmllow", "repo": "affinity-nix", - "rev": "8371b47a54d1611a689973fa28bd1a145cd813da", + "rev": "9989df33b2aa6ad66441a2c83b817652754d8705", "type": "github" }, "original": { @@ -117,11 +117,11 @@ }, "crane": { "locked": { - "lastModified": 1775839657, - "narHash": "sha256-SPm9ck7jh3Un9nwPuMGbRU04UroFmOHjLP56T10MOeM=", + "lastModified": 1776635034, + "narHash": "sha256-OEOJrT3ZfwbChzODfIH4GzlNTtOFuZFWPtW7jIeR8xU=", "owner": "ipetkov", "repo": "crane", - "rev": "7cf72d978629469c4bd4206b95c402514c1f6000", + "rev": "dc7496d8ea6e526b1254b55d09b966e94673750f", "type": "github" }, "original": { @@ -158,11 +158,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1776153734, - "narHash": "sha256-QvkVX4Go+BnNgQQLc5Ma3WNBZOG5Jpdqsy8Ri0/CbSQ=", + "lastModified": 1776845169, + "narHash": "sha256-Ya6Ba5oC0+PK1TSU4Rkjpoca73mUp6FoHQV5QGnqbx0=", "owner": "nix-community", "repo": "fenix", - "rev": "a8b0e62fb39299fbeb1aa365f4b57e2c258a178e", + "rev": "f0b5be1fa2891221ba8b48784f8fded5ef15301f", "type": "github" }, "original": { @@ -201,11 +201,11 @@ }, "locked": { "dir": "pkgs/firefox-addons", - "lastModified": 1776657773, - "narHash": "sha256-GgExKCDspgASVM6sRH0VcVyixQznxuR4tjiAA7MfKxs=", + "lastModified": 1776916994, + "narHash": "sha256-FgqUwRZ2bwbE5w1bCUv9MB3gvwqZ4oEyCgZ6z/6jdTY=", "owner": "rycee", "repo": "nur-expressions", - "rev": "986236cd6fad0979233ae5e73456a365f79ff198", + "rev": "a2236006e5c70e2fc06e9acb016b1ac9c0fd5935", "type": "gitlab" }, "original": { @@ -346,11 +346,11 @@ ] }, "locked": { - "lastModified": 1775585728, - "narHash": "sha256-8Psjt+TWvE4thRKktJsXfR6PA/fWWsZ04DVaY6PUhr4=", + "lastModified": 1776796298, + "narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "580633fa3fe5fc0379905986543fd7495481913d", + "rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad", "type": "github" }, "original": { @@ -403,11 +403,11 @@ ] }, "locked": { - "lastModified": 1776695811, - "narHash": "sha256-UPO3SFTbmxTOiioO7j1d1Unus63+jO/6mNNS+lsgjBQ=", + "lastModified": 1776964438, + "narHash": "sha256-AF0cby9Xuijr5qaFpYKbm1mExV956Hk233bel6QxpFw=", "owner": "nix-community", "repo": "home-manager", - "rev": "0a8d50edf28d537ce7538fbbf207fa7939d41abc", + "rev": "e09259dd2e147d35ef889784b51e89b0a10ffe15", "type": "github" }, "original": { @@ -476,11 +476,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1776169885, - "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", + "lastModified": 1776548001, + "narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", + "rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc", "type": "github" }, "original": { @@ -529,11 +529,11 @@ "noctalia-qs": "noctalia-qs" }, "locked": { - "lastModified": 1776666525, - "narHash": "sha256-H5M/eoxQ0ilgxEqGRH2Ptq/ViS72Xu16IjWweO/OdLg=", + "lastModified": 1776888984, + "narHash": "sha256-Up2F/eoMuPUsZnPVYdH5TMHe1TBP2Ue1QuWd0vWZoxY=", "owner": "noctalia-dev", "repo": "noctalia-shell", - "rev": "ed1fff6260470d6f5cbe1951a8cceccb5265d61b", + "rev": "2c1808f9f8937fc0b82c54af513f7620fec56d71", "type": "github" }, "original": { @@ -630,11 +630,11 @@ ] }, "locked": { - "lastModified": 1776386905, - "narHash": "sha256-m6H7IIn7RjZ9C42/x6v/p/TvOl0TDEpqz4fEa6+wFow=", + "lastModified": 1776795718, + "narHash": "sha256-YrqHeE9ZEnmxJiXE+IBAxbmNRFPE7mn9KbxZ3Mpu388=", "owner": "Diegiwg", "repo": "PrismLauncher-Cracked", - "rev": "9d2de362503d5a7f9ff37c435b3dc4c38223d57e", + "rev": "0c20d448a3c89cbff85ef5dc7420bf60dc1e65ff", "type": "github" }, "original": { @@ -659,11 +659,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1776115521, - "narHash": "sha256-N/R1//Xd8vr84LtyTy8CVz7V2n9NJXXlJEODSunLE9c=", + "lastModified": 1776800521, + "narHash": "sha256-f8YJfwAOsLFpIoqZuX3yF69UvMLrkx7iVzMH1pJU7cM=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "5205b52ea60dd49c7e33dd2ad1a3e7ef55bb30ec", + "rev": "8954b66d43225e62c92e8bbcc8500191b5cceb1e", "type": "github" }, "original": { @@ -710,11 +710,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1776170745, - "narHash": "sha256-Tl1aZVP5EIlT+k0+iAKH018GLHJpLz3hhJ0LNQOWxCc=", + "lastModified": 1776893932, + "narHash": "sha256-AFD5cf9eNqXq1brHS63xeZy2xKZMgG9J86XJ9I2eLn8=", "owner": "danth", "repo": "stylix", - "rev": "e3861617645a43c9bbefde1aa6ac54dd0a44bfa9", + "rev": "84971726c7ef0bb3669a5443e151cc226e65c518", "type": "github" }, "original": { diff --git a/hosts/Garand-Desktop/system-modules.nix b/hosts/Garand-Desktop/system-modules.nix index 8690f06..b79dbde 100644 --- a/hosts/Garand-Desktop/system-modules.nix +++ b/hosts/Garand-Desktop/system-modules.nix @@ -30,6 +30,11 @@ _: { gamescope.enable = false; # Gamescope: micro‑compositor for games steam.enable = true; # Steam: platform for buying and playing games + /* + Media & Graphics + */ + affinity.enable = true; # Affinity: professional graphics suite + packages = { /* Container & Packaging @@ -76,7 +81,6 @@ _: { /* Media & Graphics */ - affinity.enable = true; # Affinity: professional graphics suite eyeOfGnome.enable = true; # Eye of GNOME: image viewer freetube.enable = false; # FreeTube: privacy‑friendly YouTube client gimp.enable = false; # GIMP: GNU Image Manipulation Program diff --git a/hosts/Garand-Laptop/system-modules.nix b/hosts/Garand-Laptop/system-modules.nix index 8690f06..b79dbde 100644 --- a/hosts/Garand-Laptop/system-modules.nix +++ b/hosts/Garand-Laptop/system-modules.nix @@ -30,6 +30,11 @@ _: { gamescope.enable = false; # Gamescope: micro‑compositor for games steam.enable = true; # Steam: platform for buying and playing games + /* + Media & Graphics + */ + affinity.enable = true; # Affinity: professional graphics suite + packages = { /* Container & Packaging @@ -76,7 +81,6 @@ _: { /* Media & Graphics */ - affinity.enable = true; # Affinity: professional graphics suite eyeOfGnome.enable = true; # Eye of GNOME: image viewer freetube.enable = false; # FreeTube: privacy‑friendly YouTube client gimp.enable = false; # GIMP: GNU Image Manipulation Program diff --git a/hosts/default/system-modules.nix b/hosts/default/system-modules.nix index 58f0f79..3d53757 100644 --- a/hosts/default/system-modules.nix +++ b/hosts/default/system-modules.nix @@ -30,6 +30,11 @@ _: { gamescope.enable = false; # Gamescope: micro‑compositor for games steam.enable = true; # Steam: platform for buying and playing games + /* + Media & Graphics + */ + affinity.enable = false; # Affinity: professional graphics suite + packages = { /* Container & Packaging @@ -76,7 +81,6 @@ _: { /* Media & Graphics */ - affinity.enable = false; # Affinity: professional graphics suite eyeOfGnome.enable = true; # Eye of GNOME: image viewer freetube.enable = false; # FreeTube: privacy‑friendly YouTube client gimp.enable = false; # GIMP: GNU Image Manipulation Program diff --git a/modules/core/affinity.nix b/modules/core/affinity.nix new file mode 100644 index 0000000..f5990a3 --- /dev/null +++ b/modules/core/affinity.nix @@ -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]; + }; +} diff --git a/modules/core/default.nix b/modules/core/default.nix index ce782b5..4f04bfc 100644 --- a/modules/core/default.nix +++ b/modules/core/default.nix @@ -1,6 +1,7 @@ {inputs, ...}: { imports = [ ./packages + ./affinity.nix ./boot.nix ./calendar.nix ./docker.nix diff --git a/modules/core/packages/packages.nix b/modules/core/packages/packages.nix index 60494e2..484b176 100644 --- a/modules/core/packages/packages.nix +++ b/modules/core/packages/packages.nix @@ -31,7 +31,6 @@ spaceCadetPinball = space-cadet-pinball; ttySolitaire = tty-solitaire; gimp = gimp; - affinity = inputs.affinity-nix.packages.${system}.v3; eyeOfGnome = eog; kdenlive = kdePackages.kdenlive; plex = [ diff --git a/modules/home/hyprland/binds.nix b/modules/home/hyprland/binds.nix index 3b0bc02..123a8b8 100644 --- a/modules/home/hyprland/binds.nix +++ b/modules/home/hyprland/binds.nix @@ -21,6 +21,7 @@ "SUPER, N, exec, dex ${desktopEntriesPath}/garandcloud.desktop #\"GarandCloud client\"" "SUPER, O, exec, onlyoffice-desktopeditors #\"Office suite\"" "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, S, exec, steam #\"Steam Game launcher\"" "SUPER, T, exec, thunar #\"File manager\"" @@ -51,6 +52,7 @@ "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, 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, T, exec, gedit #\"GNOME text editor\"" "SUPER ALT, W, exec, noctalia-shell ipc call wallpaper toggle #\"Toggle wallpaper\"" diff --git a/modules/home/hyprland/exec-once.nix b/modules/home/hyprland/exec-once.nix index 1990280..8fdbc88 100644 --- a/modules/home/hyprland/exec-once.nix +++ b/modules/home/hyprland/exec-once.nix @@ -1,10 +1,10 @@ _: { 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" "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" "systemctl --user start hyprpolkitagent" "noctalia-shell" + "wl-paste --type text --watch cliphist store" # Saves text + "wl-paste --type image --watch cliphist store" # Saves images ]; } diff --git a/modules/home/noctalia/plugins.nix b/modules/home/noctalia/plugins.nix index 41dc4bf..7636392 100644 --- a/modules/home/noctalia/plugins.nix +++ b/modules/home/noctalia/plugins.nix @@ -27,6 +27,10 @@ in { enabled = true; sourceUrl = sourceUrl; }; + screen-recorder = { + enabled = true; + sourceUrl = sourceUrl; + }; }; version = 2; }; @@ -45,6 +49,28 @@ in { kde-connect = { 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; + }; }; }; } diff --git a/modules/home/noctalia/settings/bar/widgets/right.nix b/modules/home/noctalia/settings/bar/widgets/right.nix index 562ed6b..4d5d06d 100644 --- a/modules/home/noctalia/settings/bar/widgets/right.nix +++ b/modules/home/noctalia/settings/bar/widgets/right.nix @@ -44,6 +44,31 @@ showPowerProfiles = true; 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"; displayMode = "alwaysShow";