nix-da/options/media.nix

96 lines
1.9 KiB
Nix

{
lib,
pkgs,
config,
...
}:
let
inherit (lib)
mkEnableOption
mkOption
mkIf
flatten
map
filter
any
;
inherit (lib.types)
listOf
package
bool
str
;
cfg = config.modules.media;
mkMedia = packages: defaultHandler: {
enable = mkOption {
type = bool;
default = cfg.enableAll;
};
packages = mkOption {
type = listOf package;
default = packages;
};
default = mkOption {
type = str;
default = defaultHandler;
};
};
in
{
options.modules.media = {
enableAll = mkEnableOption "";
setMime = mkOption {
type = bool;
default = true;
};
audio = mkMedia [
pkgs.feishin
pkgs.amberol
] "io.bassi.Amberol.desktop";
video = mkMedia [
pkgs.vlc
] "vlc.desktop";
image = mkMedia [
pkgs.loupe
] "org.gnome.Loupe.desktop";
ebook = mkMedia [
pkgs.calibre
pkgs.foliate
] "com.github.johnfactotum.Foliate.desktop";
};
config =
let
anyEnabled = any (e: e) [
cfg.audio.enable
cfg.video.enable
cfg.ebook.enable
];
in
mkIf anyEnabled {
environment.systemPackages = flatten (
map (opt: opt.packages) (
filter (opt: opt.enable) [
cfg.audio
cfg.video
cfg.ebook
]
)
);
xdg.mime = mkIf cfg.setMime {
enable = true;
defaultApplications = {
"video/*" = cfg.ebook.default;
"image/*" = cfg.image.default;
"audio/*" = cfg.audio.default;
"audio/mpeg" = cfg.audio.default;
# Ebooks sadly don't have a singular major type.
"application/epub+zip" = cfg.ebook.default;
"application/pdf" = cfg.ebook.default;
"application/vnd.comicbook+zip" = cfg.ebook.default;
};
};
};
}