diff --git a/modules/overlay.nix b/modules/overlay.nix index 9e42822..784833f 100644 --- a/modules/overlay.nix +++ b/modules/overlay.nix @@ -39,26 +39,29 @@ in kfinal: kprev: { kwin = kprev.kwin.overrideAttrs (old: { patches = (old.patches or [ ]) ++ [ - ../patches/kwin-0001-vmsilo-add-security-context-color-borders-and-protoc.patch - ../patches/kwin-0002-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch - ../patches/kwin-0003-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch - ../patches/kwin-0004-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch - ../patches/kwin-0005-decorations-cache-vmsilo-color-and-harden-format-par.patch + ../patches/kwin-0001-Add-Nix-flake-for-development-shell-environment.patch + ../patches/kwin-0002-vmsilo-add-security-context-color-borders-and-protoc.patch + ../patches/kwin-0003-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch + ../patches/kwin-0004-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch + ../patches/kwin-0005-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch + ../patches/kwin-0006-decorations-cache-vmsilo-color-and-harden-format-par.patch ]; }); plasma-workspace = kprev.plasma-workspace.overrideAttrs (old: { patches = (old.patches or [ ]) ++ [ - ../patches/plasma-workspace-0001-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch - ../patches/plasma-workspace-0002-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch - ../patches/plasma-workspace-0003-feat-add-VmSiloColorRole-to-kicker-data-model.patch - ../patches/plasma-workspace-0004-feat-add-colored-security-border-to-VM-generated-not.patch + ../patches/plasma-workspace-0001-Add-nix-dev-shell-for-building-plasma-workspace.patch + ../patches/plasma-workspace-0002-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch + ../patches/plasma-workspace-0003-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch + ../patches/plasma-workspace-0004-feat-add-VmSiloColorRole-to-kicker-data-model.patch + ../patches/plasma-workspace-0005-feat-add-colored-security-border-to-VM-generated-not.patch ]; }); plasma-desktop = kprev.plasma-desktop.overrideAttrs (old: { patches = (old.patches or [ ]) ++ [ - ../patches/plasma-desktop-0001-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch - ../patches/plasma-desktop-0002-feat-add-VM-running-indicator-to-Kickoff-category-li.patch - ../patches/plasma-desktop-0003-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch + ../patches/plasma-desktop-0001-Add-Nix-flake-with-dev-shell-for-building-plasma-des.patch + ../patches/plasma-desktop-0002-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch + ../patches/plasma-desktop-0003-feat-add-VM-running-indicator-to-Kickoff-category-li.patch + ../patches/plasma-desktop-0004-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch ]; }); } diff --git a/patches/kwin-0001-Add-Nix-flake-for-development-shell-environment.patch b/patches/kwin-0001-Add-Nix-flake-for-development-shell-environment.patch new file mode 100644 index 0000000..d173533 --- /dev/null +++ b/patches/kwin-0001-Add-Nix-flake-for-development-shell-environment.patch @@ -0,0 +1,182 @@ +From ec5e2a95a523d165cd1c8f5ba17e3546815a3ba2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= +Date: Sun, 15 Feb 2026 13:38:18 +0000 +Subject: [PATCH 1/6] Add Nix flake for development shell environment + +Provides a complete dev shell with all build dependencies (Qt 6, KDE +Frameworks 6, Plasma, Wayland, X11/XCB, graphics, input, and audio +libraries) so contributors can build KWin with `nix develop`. +--- + flake.lock | 27 ++++++++++++ + flake.nix | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 152 insertions(+) + create mode 100644 flake.lock + create mode 100644 flake.nix + +diff --git a/flake.lock b/flake.lock +new file mode 100644 +index 0000000000..53569e7fa8 +--- /dev/null ++++ b/flake.lock +@@ -0,0 +1,27 @@ ++{ ++ "nodes": { ++ "nixpkgs": { ++ "locked": { ++ "lastModified": 1774041495, ++ "narHash": "sha256-Jbzx23j3YPRChU/djx7EhhupGlDq7CRQ8L0IWYCbav4=", ++ "owner": "NixOS", ++ "repo": "nixpkgs", ++ "rev": "5ba249aa104c36c3542e3017d85cf55196732b7b", ++ "type": "github" ++ }, ++ "original": { ++ "owner": "NixOS", ++ "ref": "nixos-unstable-small", ++ "repo": "nixpkgs", ++ "type": "github" ++ } ++ }, ++ "root": { ++ "inputs": { ++ "nixpkgs": "nixpkgs" ++ } ++ } ++ }, ++ "root": "root", ++ "version": 7 ++} +diff --git a/flake.nix b/flake.nix +new file mode 100644 +index 0000000000..287e827f01 +--- /dev/null ++++ b/flake.nix +@@ -0,0 +1,125 @@ ++{ ++ description = "KWin development environment"; ++ ++ inputs = { ++ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small"; ++ }; ++ ++ outputs = ++ { self, nixpkgs }: ++ let ++ system = "x86_64-linux"; ++ pkgs = import nixpkgs { inherit system; }; ++ in ++ { ++ devShells.${system}.default = pkgs.mkShell { ++ nativeBuildInputs = with pkgs; [ ++ cmake ++ ninja ++ pkg-config ++ python3 ++ kdePackages.extra-cmake-modules ++ kdePackages.wrapQtAppsHook ++ ]; ++ ++ buildInputs = with pkgs; [ ++ # Qt 6 ++ kdePackages.qt5compat ++ kdePackages.qtbase ++ kdePackages.qtdeclarative ++ kdePackages.qtquick3d ++ kdePackages.qtsensors ++ kdePackages.qtsvg ++ kdePackages.qttools ++ kdePackages.qtvirtualkeyboard ++ kdePackages.qtwayland ++ ++ # KDE Frameworks 6 ++ kdePackages.kauth ++ kdePackages.kcmutils ++ kdePackages.kcolorscheme ++ kdePackages.kconfig ++ kdePackages.kcoreaddons ++ kdePackages.kcrash ++ kdePackages.kdbusaddons ++ kdePackages.kdeclarative ++ kdePackages.kdoctools ++ kdePackages.kglobalaccel ++ kdePackages.kguiaddons ++ kdePackages.ki18n ++ kdePackages.kidletime ++ kdePackages.kirigami ++ kdePackages.knewstuff ++ kdePackages.knotifications ++ kdePackages.kpackage ++ kdePackages.krunner ++ kdePackages.kservice ++ kdePackages.ksvg ++ kdePackages.kwidgetsaddons ++ kdePackages.kwindowsystem ++ kdePackages.kxmlgui ++ ++ # Plasma ++ kdePackages.aurorae ++ kdePackages.breeze ++ kdePackages.breeze-icons ++ kdePackages.kdecoration ++ kdePackages.kglobalacceld ++ kdePackages.knighttime ++ kdePackages.kpipewire ++ kdePackages.kscreenlocker ++ kdePackages.kwayland ++ kdePackages.libplasma ++ kdePackages.libqaccessibilityclient ++ kdePackages.plasma-activities ++ kdePackages.plasma-wayland-protocols ++ ++ # Wayland ++ wayland ++ wayland-protocols ++ libxkbcommon ++ ++ # Graphics & rendering ++ lcms2 ++ libGL ++ libdrm ++ libepoxy ++ libgbm ++ libxcvt ++ ++ # X11 / XCB ++ libx11 ++ libxi ++ libxcb ++ libxcb-cursor ++ libxcb-keysyms ++ libxcb-wm ++ xwayland ++ ++ # Fonts ++ fontconfig ++ freetype ++ ++ # Input & hardware ++ libdisplay-info ++ libinput ++ udev ++ ++ # Audio ++ libcanberra ++ ++ # Optional ++ hwdata ++ libei ++ libevdev ++ pipewire ++ ]; ++ ++ shellHook = '' ++ echo "KWin development environment loaded" ++ echo "Configure: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug" ++ echo "Build: cmake --build build" ++ ''; ++ }; ++ }; ++} +-- +2.53.0 + diff --git a/patches/kwin-0001-vmsilo-add-security-context-color-borders-and-protoc.patch b/patches/kwin-0002-vmsilo-add-security-context-color-borders-and-protoc.patch similarity index 99% rename from patches/kwin-0001-vmsilo-add-security-context-color-borders-and-protoc.patch rename to patches/kwin-0002-vmsilo-add-security-context-color-borders-and-protoc.patch index e4eb64b..0a8a28a 100644 --- a/patches/kwin-0001-vmsilo-add-security-context-color-borders-and-protoc.patch +++ b/patches/kwin-0002-vmsilo-add-security-context-color-borders-and-protoc.patch @@ -1,7 +1,7 @@ From fbabaf1a58508f1134cdc24bcf7661a7ff17d8d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Sun, 15 Feb 2026 13:38:14 +0000 -Subject: [PATCH 1/5] vmsilo: add security context color borders and protocol +Subject: [PATCH 2/6] vmsilo: add security context color borders and protocol - decorations: support vmsilo security context color override - decorations: force SSD and Tiny borders for vmsilo security context diff --git a/patches/kwin-0002-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch b/patches/kwin-0003-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch similarity index 99% rename from patches/kwin-0002-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch rename to patches/kwin-0003-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch index 0160bdf..7431b82 100644 --- a/patches/kwin-0002-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch +++ b/patches/kwin-0003-vmsilo-add-clipboard-isolation-for-VMs-whitelist-pro.patch @@ -1,7 +1,7 @@ From 9bd6f0a62d1ac5fb93803a0dfb26c61870b9b6b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Wed, 18 Feb 2026 10:39:15 +0000 -Subject: [PATCH 2/5] vmsilo: add clipboard isolation for VMs, whitelist +Subject: [PATCH 3/6] vmsilo: add clipboard isolation for VMs, whitelist protocols Isolate clipboard (selection + primary selection) between vmsilo security diff --git a/patches/kwin-0003-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch b/patches/kwin-0004-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch similarity index 95% rename from patches/kwin-0003-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch rename to patches/kwin-0004-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch index 59833a2..c7e3ef3 100644 --- a/patches/kwin-0003-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch +++ b/patches/kwin-0004-vmsilo-prefix-window-titles-and-namespace-app_ids-fo.patch @@ -1,7 +1,7 @@ From d7b025bec0a5f92c23cc56369011aa21f5257e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Thu, 19 Feb 2026 17:05:00 +0000 -Subject: [PATCH 3/5] vmsilo: prefix window titles and namespace app_ids for VM +Subject: [PATCH 4/6] vmsilo: prefix window titles and namespace app_ids for VM isolation Prefix vmsilo window captions with [vmname] so users can identify diff --git a/patches/kwin-0004-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch b/patches/kwin-0005-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch similarity index 99% rename from patches/kwin-0004-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch rename to patches/kwin-0005-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch index 752f97f..46ab575 100644 --- a/patches/kwin-0004-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch +++ b/patches/kwin-0005-vmsilo-fix-clipboard-lockup-by-eagerly-snapshotting-.patch @@ -1,7 +1,7 @@ From 7be54472f9e05eee0f79234998264b9f38b535a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Fri, 27 Mar 2026 13:08:28 +0000 -Subject: [PATCH 4/5] vmsilo: fix clipboard lockup by eagerly snapshotting +Subject: [PATCH 5/6] vmsilo: fix clipboard lockup by eagerly snapshotting sources on context switch When restoring a client-owned data source to the seat, data control diff --git a/patches/kwin-0005-decorations-cache-vmsilo-color-and-harden-format-par.patch b/patches/kwin-0006-decorations-cache-vmsilo-color-and-harden-format-par.patch similarity index 95% rename from patches/kwin-0005-decorations-cache-vmsilo-color-and-harden-format-par.patch rename to patches/kwin-0006-decorations-cache-vmsilo-color-and-harden-format-par.patch index 7237a81..fcd98a9 100644 --- a/patches/kwin-0005-decorations-cache-vmsilo-color-and-harden-format-par.patch +++ b/patches/kwin-0006-decorations-cache-vmsilo-color-and-harden-format-par.patch @@ -1,7 +1,7 @@ From 16bc5cd8c9b8b282a37a96b5712a4e4ae233e88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Fri, 27 Mar 2026 14:54:02 +0000 -Subject: [PATCH 5/5] decorations: cache vmsilo color and harden format parsing +Subject: [PATCH 6/6] decorations: cache vmsilo color and harden format parsing Cache the parsed vmsilo security context color at decoration construction time instead of re-parsing from the security context diff --git a/patches/plasma-desktop-0001-Add-Nix-flake-with-dev-shell-for-building-plasma-des.patch b/patches/plasma-desktop-0001-Add-Nix-flake-with-dev-shell-for-building-plasma-des.patch new file mode 100644 index 0000000..df6cd65 --- /dev/null +++ b/patches/plasma-desktop-0001-Add-Nix-flake-with-dev-shell-for-building-plasma-des.patch @@ -0,0 +1,74 @@ +From fb684888961f331026acc6e249a863640e3e40bd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= +Date: Sun, 15 Feb 2026 13:45:02 +0000 +Subject: [PATCH 1/4] Add Nix flake with dev shell for building plasma-desktop + +Co-Authored-By: Claude Opus 4.6 +--- + flake.lock | 27 +++++++++++++++++++++++++++ + flake.nix | 19 +++++++++++++++++++ + 2 files changed, 46 insertions(+) + create mode 100644 flake.lock + create mode 100644 flake.nix + +diff --git a/flake.lock b/flake.lock +new file mode 100644 +index 0000000000..15e16c8f97 +--- /dev/null ++++ b/flake.lock +@@ -0,0 +1,27 @@ ++{ ++ "nodes": { ++ "nixpkgs": { ++ "locked": { ++ "lastModified": 1771353015, ++ "narHash": "sha256-gvMwFEdFCM2zFxLVDaAbhV2N9zK0IW/RceBundHUdZs=", ++ "owner": "NixOS", ++ "repo": "nixpkgs", ++ "rev": "931ef4db402cdab9dfe66fe4a2b01d50f6fe435d", ++ "type": "github" ++ }, ++ "original": { ++ "owner": "NixOS", ++ "ref": "nixos-unstable-small", ++ "repo": "nixpkgs", ++ "type": "github" ++ } ++ }, ++ "root": { ++ "inputs": { ++ "nixpkgs": "nixpkgs" ++ } ++ } ++ }, ++ "root": "root", ++ "version": 7 ++} +diff --git a/flake.nix b/flake.nix +new file mode 100644 +index 0000000000..58ba7a3d9a +--- /dev/null ++++ b/flake.nix +@@ -0,0 +1,19 @@ ++{ ++ description = "plasma-desktop development shell"; ++ ++ inputs = { ++ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small"; ++ }; ++ ++ outputs = ++ { nixpkgs, ... }: ++ let ++ system = "x86_64-linux"; ++ pkgs = nixpkgs.legacyPackages.${system}; ++ in ++ { ++ devShells.${system}.default = pkgs.mkShell { ++ inputsFrom = [ pkgs.kdePackages.plasma-desktop ]; ++ }; ++ }; ++} +-- +2.53.0 + diff --git a/patches/plasma-desktop-0001-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch b/patches/plasma-desktop-0002-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch similarity index 96% rename from patches/plasma-desktop-0001-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch rename to patches/plasma-desktop-0002-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch index 366f4cf..3858821 100644 --- a/patches/plasma-desktop-0001-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch +++ b/patches/plasma-desktop-0002-taskmanager-add-vmsilo-border-and-VM-name-in-tooltip.patch @@ -1,7 +1,7 @@ -From 2fdf43420b9528e77cd6853281793235d8a789e1 Mon Sep 17 00:00:00 2001 +From 15eedaf565e3767b9ca41d13e0195b8b13384c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Tue, 17 Feb 2026 23:47:02 +0000 -Subject: [PATCH 1/3] taskmanager: add vmsilo border and VM name in tooltip +Subject: [PATCH 2/4] taskmanager: add vmsilo border and VM name in tooltip Add colored border overlay and VM name display for VM-sandboxed windows in the task manager. Reads VmSiloColor and VmSiloName @@ -94,7 +94,7 @@ index 05cb5e2d6d..da0335a7c0 100644 } } diff --git a/applets/taskmanager/qml/ToolTipInstance.qml b/applets/taskmanager/qml/ToolTipInstance.qml -index 9fd2759143..33327bd2fd 100644 +index 7809c0ee4b..c040c0a821 100644 --- a/applets/taskmanager/qml/ToolTipInstance.qml +++ b/applets/taskmanager/qml/ToolTipInstance.qml @@ -33,6 +33,7 @@ ColumnLayout { @@ -105,7 +105,7 @@ index 9fd2759143..33327bd2fd 100644 property bool hasTrackInATitle: false property int orientation: ListView.Vertical // vertical for compact single-window tooltips -@@ -504,6 +505,10 @@ ColumnLayout { +@@ -516,6 +517,10 @@ ColumnLayout { function generateSubText(): string { const subTextEntries = []; diff --git a/patches/plasma-desktop-0002-feat-add-VM-running-indicator-to-Kickoff-category-li.patch b/patches/plasma-desktop-0003-feat-add-VM-running-indicator-to-Kickoff-category-li.patch similarity index 92% rename from patches/plasma-desktop-0002-feat-add-VM-running-indicator-to-Kickoff-category-li.patch rename to patches/plasma-desktop-0003-feat-add-VM-running-indicator-to-Kickoff-category-li.patch index c083a48..d652ebb 100644 --- a/patches/plasma-desktop-0002-feat-add-VM-running-indicator-to-Kickoff-category-li.patch +++ b/patches/plasma-desktop-0003-feat-add-VM-running-indicator-to-Kickoff-category-li.patch @@ -1,7 +1,7 @@ -From f30690ca6e3a96fcca00c686bb9929d072e26589 Mon Sep 17 00:00:00 2001 +From 4475660009f5931751e7ea5f3c6b62138a0686fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Wed, 18 Feb 2026 22:02:58 +0000 -Subject: [PATCH 2/3] feat: add VM running indicator to Kickoff category list +Subject: [PATCH 3/4] feat: add VM running indicator to Kickoff category list items Co-Authored-By: Claude Opus 4.6 diff --git a/patches/plasma-desktop-0003-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch b/patches/plasma-desktop-0004-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch similarity index 96% rename from patches/plasma-desktop-0003-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch rename to patches/plasma-desktop-0004-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch index 2d21084..7e43150 100644 --- a/patches/plasma-desktop-0003-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch +++ b/patches/plasma-desktop-0004-feat-add-vmsilo-colored-icon-borders-to-kicker-and-k.patch @@ -1,7 +1,7 @@ -From 0bebe8369347bf83caa611886f9f36e4af11c55a Mon Sep 17 00:00:00 2001 +From 9e548eac50c79c34bdc0272d0d9f8ca0646bdb72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Sat, 7 Mar 2026 17:30:47 +0000 -Subject: [PATCH 3/3] feat: add vmsilo colored icon borders to kicker and +Subject: [PATCH 4/4] feat: add vmsilo colored icon borders to kicker and kickoff delegates Draw a thin colored border around icons for VM folders and VM app diff --git a/patches/plasma-workspace-0001-Add-nix-dev-shell-for-building-plasma-workspace.patch b/patches/plasma-workspace-0001-Add-nix-dev-shell-for-building-plasma-workspace.patch new file mode 100644 index 0000000..b8f52cb --- /dev/null +++ b/patches/plasma-workspace-0001-Add-nix-dev-shell-for-building-plasma-workspace.patch @@ -0,0 +1,75 @@ +From 095836f3d9e930917762b02fc35415120942416c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= +Date: Sun, 15 Feb 2026 13:44:42 +0000 +Subject: [PATCH 1/5] Add nix dev shell for building plasma-workspace + +--- + flake.lock | 27 +++++++++++++++++++++++++++ + flake.nix | 21 +++++++++++++++++++++ + 2 files changed, 48 insertions(+) + create mode 100644 flake.lock + create mode 100644 flake.nix + +diff --git a/flake.lock b/flake.lock +new file mode 100644 +index 0000000000..8c55476e50 +--- /dev/null ++++ b/flake.lock +@@ -0,0 +1,27 @@ ++{ ++ "nodes": { ++ "nixpkgs": { ++ "locked": { ++ "lastModified": 1774085698, ++ "narHash": "sha256-gTy8ItjKOM4k2arEdMDl+LZax06NPXqG/yKnl21i/B0=", ++ "owner": "NixOS", ++ "repo": "nixpkgs", ++ "rev": "44cfc63d12ba52679746e701176f19afb9c537b9", ++ "type": "github" ++ }, ++ "original": { ++ "owner": "NixOS", ++ "ref": "nixos-unstable-small", ++ "repo": "nixpkgs", ++ "type": "github" ++ } ++ }, ++ "root": { ++ "inputs": { ++ "nixpkgs": "nixpkgs" ++ } ++ } ++ }, ++ "root": "root", ++ "version": 7 ++} +diff --git a/flake.nix b/flake.nix +new file mode 100644 +index 0000000000..6d8377b9f3 +--- /dev/null ++++ b/flake.nix +@@ -0,0 +1,21 @@ ++{ ++ description = "Development shell for plasma-workspace"; ++ ++ inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small"; ++ ++ outputs = ++ { self, nixpkgs }: ++ let ++ system = "x86_64-linux"; ++ pkgs = nixpkgs.legacyPackages.${system}; ++ in ++ { ++ devShells.${system}.default = pkgs.mkShell { ++ inputsFrom = [ pkgs.kdePackages.plasma-workspace ]; ++ packages = [ ++ pkgs.xdotool ++ ]; ++ CMAKE_PROGRAM_PATH = "${pkgs.kdePackages.kglobalacceld}/libexec"; ++ }; ++ }; ++} +-- +2.53.0 + diff --git a/patches/plasma-workspace-0001-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch b/patches/plasma-workspace-0002-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch similarity index 99% rename from patches/plasma-workspace-0001-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch rename to patches/plasma-workspace-0002-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch index 2e9a914..58aea93 100644 --- a/patches/plasma-workspace-0001-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch +++ b/patches/plasma-workspace-0002-libtaskmanager-add-VmSilo-roles-for-VM-sandboxed-win.patch @@ -1,7 +1,7 @@ From 6c605b8bb359baa90f951233b7e12fa4a2c934fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Tue, 17 Feb 2026 23:49:05 +0000 -Subject: [PATCH 1/4] libtaskmanager: add VmSilo roles for VM-sandboxed window +Subject: [PATCH 2/5] libtaskmanager: add VmSilo roles for VM-sandboxed window metadata Expose VmSiloColor and VmSiloName model roles in libtaskmanager by diff --git a/patches/plasma-workspace-0002-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch b/patches/plasma-workspace-0003-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch similarity index 99% rename from patches/plasma-workspace-0002-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch rename to patches/plasma-workspace-0003-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch index c7f2e61..80aeca4 100644 --- a/patches/plasma-workspace-0002-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch +++ b/patches/plasma-workspace-0003-feat-add-VM-folder-running-indicator-to-kicker-app-m.patch @@ -1,7 +1,7 @@ From d4fa58f3406d1e47fd2de8f72cd594a5348d5aa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Wed, 18 Feb 2026 22:24:27 +0000 -Subject: [PATCH 2/4] feat: add VM folder running indicator to kicker app menu +Subject: [PATCH 3/5] feat: add VM folder running indicator to kicker app menu Add model roles and a systemd D-Bus monitor so the Kickoff app menu can show whether a VM folder's corresponding systemd unit is running. diff --git a/patches/plasma-workspace-0003-feat-add-VmSiloColorRole-to-kicker-data-model.patch b/patches/plasma-workspace-0004-feat-add-VmSiloColorRole-to-kicker-data-model.patch similarity index 99% rename from patches/plasma-workspace-0003-feat-add-VmSiloColorRole-to-kicker-data-model.patch rename to patches/plasma-workspace-0004-feat-add-VmSiloColorRole-to-kicker-data-model.patch index 4f44c9b..9c5f1de 100644 --- a/patches/plasma-workspace-0003-feat-add-VmSiloColorRole-to-kicker-data-model.patch +++ b/patches/plasma-workspace-0004-feat-add-VmSiloColorRole-to-kicker-data-model.patch @@ -1,7 +1,7 @@ From aef4dee7fa73172b008fd70d01a773090b35ec8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Sat, 7 Mar 2026 17:30:54 +0000 -Subject: [PATCH 3/4] feat: add VmSiloColorRole to kicker data model +Subject: [PATCH 4/5] feat: add VmSiloColorRole to kicker data model Expose X-VmSilo-Color from .directory and .desktop files as a new vmSiloColor role so QML can style VM folders and apps with their diff --git a/patches/plasma-workspace-0004-feat-add-colored-security-border-to-VM-generated-not.patch b/patches/plasma-workspace-0005-feat-add-colored-security-border-to-VM-generated-not.patch similarity index 99% rename from patches/plasma-workspace-0004-feat-add-colored-security-border-to-VM-generated-not.patch rename to patches/plasma-workspace-0005-feat-add-colored-security-border-to-VM-generated-not.patch index fedd026..910430b 100644 --- a/patches/plasma-workspace-0004-feat-add-colored-security-border-to-VM-generated-not.patch +++ b/patches/plasma-workspace-0005-feat-add-colored-security-border-to-VM-generated-not.patch @@ -1,7 +1,7 @@ From 91cfb80d2e5b24383fbbc2841a395cad3124738c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinn=20Geirsson?= Date: Sat, 21 Mar 2026 14:37:47 +0000 -Subject: [PATCH 4/4] feat: add colored security border to VM-generated +Subject: [PATCH 5/5] feat: add colored security border to VM-generated notifications Parse the x-vmsilo-color D-Bus notification hint and render a colored diff --git a/update-kde-patches.sh b/update-kde-patches.sh new file mode 100755 index 0000000..d0d305b --- /dev/null +++ b/update-kde-patches.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# Regenerate KDE patches from local checkouts in ../kde// +# and update modules/overlay.nix to reference them. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PATCHES_DIR="$SCRIPT_DIR/patches" +KDE_DIR="$SCRIPT_DIR/../kde" +OVERLAY_NIX="$SCRIPT_DIR/modules/overlay.nix" + +projects=(kwin plasma-desktop plasma-workspace) + +# Associative array: project -> space-separated list of patch filenames +declare -A patch_files + +for project in "${projects[@]}"; do + project_dir="$KDE_DIR/$project" + + if [[ ! -d "$project_dir/.git" ]]; then + echo "error: $project_dir is not a git repository" >&2 + exit 1 + fi + + # Everything after the latest upstream tag is ours. + base_tag=$(git -C "$project_dir" describe --tags --abbrev=0 HEAD 2>/dev/null) + if [[ -z "$base_tag" ]]; then + echo "error: no tags found in $project" >&2 + exit 1 + fi + + patch_count=$(git -C "$project_dir" rev-list --count "$base_tag..HEAD") + if [[ "$patch_count" -eq 0 ]]; then + echo "$project: no patches (HEAD is at $base_tag)" + patch_files[$project]="" + rm -f "$PATCHES_DIR/$project"-[0-9]*.patch + continue + fi + + tmpdir=$(mktemp -d) + + git -C "$project_dir" format-patch "$base_tag..HEAD" -o "$tmpdir" --quiet + + # Remove old patches for this project + rm -f "$PATCHES_DIR/$project"-[0-9]*.patch + + # Copy with project prefix + files=() + for patch in "$tmpdir"/*.patch; do + name="$project-$(basename "$patch")" + cp "$patch" "$PATCHES_DIR/$name" + files+=("$name") + done + + rm -rf "$tmpdir" + + patch_files[$project]="${files[*]}" + echo "$project: ${#files[@]} patches" +done + +# --- Update modules/overlay.nix --- + +for project in "${projects[@]}"; do + IFS=' ' read -ra names <<< "${patch_files[$project]:-}" + + # Build indented patch lines for Nix + new_lines="" + for name in "${names[@]}"; do + [[ -z "$name" ]] && continue + new_lines+=" ../patches/$name"$'\n' + done + + # Replace the patch list between "patches = (old.patches or [ ]) ++ [" + # and the closing "];" for this project's overrideAttrs block. + awk -v project="$project" -v new_patches="$new_lines" ' + BEGIN { replacing = 0; found = 0 } + { + if (!found && index($0, project " = kprev." project ".overrideAttrs") > 0) { + found = 1 + } + if (found && !replacing && /patches = \(old\.patches/) { + print + replacing = 1 + next + } + if (replacing) { + if (/\];/) { + printf "%s", new_patches + print + replacing = 0 + found = 0 + next + } + next + } + print + } + ' "$OVERLAY_NIX" > "${OVERLAY_NIX}.tmp" && mv "${OVERLAY_NIX}.tmp" "$OVERLAY_NIX" +done + +echo "updated $OVERLAY_NIX"