{
  lib,
  pkgs,
  config,
  ...
}:
let
  cfg = config.modules.media;
  mkMedia = defPackages: {
    enable = lib.mkOption { default = cfg.enableAll; };
    packages = lib.mkOption { default = defPackages; };
  };
in
{
  options.modules.media = {
    enableAll = lib.mkEnableOption "";
    audio = mkMedia [
      pkgs.feishin
      pkgs.lollypop
    ];
    video = mkMedia [
      pkgs.vlc
    ];
    ebook = mkMedia [
      pkgs.calibre
      pkgs.foliate
    ];
  };

  config = {
    environment.systemPackages = lib.flatten (
      lib.map (opt: opt.packages) (
        lib.filter (opt: opt.enable) [
          cfg.audio
          cfg.video
          cfg.ebook
        ]
      )
    );
  };
}