Files
nix-config-ryan4yin/hardening/nixpaks/mpv.nix
T
ryan4yin | 二花 c277c81cd6 feat(nixpak): sandbox six desktop apps (#497)
* feat(nixpak): sandbox six desktop apps

* chore(nixpak): trim OBS plugin set

* fix(nixpak): enable OBS on aarch64

* fix(nixpak): let imv read the full home directory

* fix(home): drop redundant freerdp package

* fix(nixpak): grant OBS access to V4L2 camera devices

* fix(nixpak): expose V4L2 sysfs to OBS

* fix(nixpak): expose NVIDIA encode library to OBS

* docs(nixpak): record OBS interactive validation

* docs(nixpak): record OBS RTMP validation

* fix(nixpak): run MuseScore via XWayland and PulseAudio

* docs(nixpak): explain app sandboxing rationale

* fix(nixpak): route MuseScore ALSA through PipeWire
2026-11-01 01:24:47 -05:00

65 lines
1.3 KiB
Nix

{
lib,
mpv,
mpvScripts,
mkNixPak,
buildEnv,
makeDesktopItem,
...
}:
let
appId = "io.mpv.Mpv";
package = mpv.override { scripts = [ mpvScripts.mpris ]; };
wrapped = mkNixPak {
config = {
imports = [ ./modules/mpv-policy.nix ];
app = {
inherit package;
binPath = "bin/mpv";
};
flatpak = { inherit appId; };
};
};
exe = lib.getExe wrapped.config.script;
in
buildEnv {
inherit (wrapped.config.script) name passthru;
meta = wrapped.config.script.meta // {
mainProgram = "mpv";
};
paths = [
wrapped.config.script
(makeDesktopItem {
name = "mpv";
desktopName = "mpv Media Player";
genericName = "Media Player";
comment = "Play audio and video files";
exec = "${exe} --player-operation-mode=pseudo-gui -- %U";
icon = "mpv";
terminal = false;
startupNotify = true;
startupWMClass = "mpv";
categories = [
"AudioVideo"
"Audio"
"Video"
"Player"
];
mimeTypes = [
"application/ogg"
"application/x-matroska"
"audio/flac"
"audio/mpeg"
"audio/ogg"
"audio/wav"
"video/mp4"
"video/quicktime"
"video/webm"
"video/x-matroska"
"video/x-msvideo"
];
extraConfig.X-Flatpak = appId;
})
];
}