Files
ryan4yin | 二花 3e6d89b3c4 feat(nixpak): sandbox Foliate and Krita (#494)
Assisted-by: DeepSeek Harness (deepseek-flash)
2026-11-01 10:34:47 +08:00

72 lines
1.7 KiB
Nix

{
lib,
krita,
mkNixPak,
buildEnv,
makeDesktopItem,
runCommandLocal,
...
}:
let
appId = "org.kde.krita";
wrapped = mkNixPak {
config = {
imports = [ ./modules/file-viewer-policy.nix ];
app = {
package = krita;
binPath = "bin/krita";
};
flatpak = { inherit appId; };
# Qt defaults to xcb when DISPLAY is present in the parent environment;
# niri has no X server, so select Wayland explicitly.
bubblewrap.env.QT_QPA_PLATFORM = "wayland";
# Krita saves edits in place, so the common user directories are writable.
fileViewer.writableUserDirs = true;
# Printing and sleep inhibition are explicit Krita capabilities.
portalGroups = {
print = true;
inhibit = true;
};
};
};
exe = lib.getExe wrapped.config.script;
assets = runCommandLocal "krita-desktop-assets" { } ''
mkdir -p $out/share
ln -s ${krita}/share/icons $out/share/icons
'';
in
buildEnv {
inherit (wrapped.config.script) name passthru;
meta = wrapped.config.script.meta // {
mainProgram = "krita";
};
paths = [
wrapped.config.script
assets
(makeDesktopItem {
name = "org.kde.krita";
desktopName = "Krita";
genericName = "Digital Painting";
comment = "Digital painting and illustration";
exec = "${exe} %F";
icon = "krita";
terminal = false;
startupNotify = true;
startupWMClass = "krita";
categories = [
"Qt"
"KDE"
"Graphics"
"2DGraphics"
"RasterGraphics"
];
mimeTypes = [
"application/x-krita"
"image/openraster"
"application/x-krita-paintoppreset"
];
extraConfig.X-Flatpak = appId;
})
];
}