{ config, pkgs, lib, ... }:

with lib;

let

  cfg = config.programs.custom.video;

  # show keyboard input on desktop for screencasts
  screenKey = pkgs.symlinkJoin {
    name = "screen-keys";
    paths = let
      screenKeyScript = { position ? "bottom", size ? "small", ... }:
        pkgs.writeShellScriptBin "screenkeys-${position}-${size}" # sh
        ''
          ${pkgs.screenkey}/bin/screenkey \
                            --no-detach \
                            --bg-color '#fdf6e3' \
                            --font-color '#073642' \
                            -p ${position} \
                            -s ${size} \
                            "$@"
        '';
    in lib.flatten (lib.flip map [ "large" "small" "medium" ] (size:
      lib.flip map [ "top" "center" "bottom" ]
      (position: screenKeyScript { inherit size position; })));
  };

in {

  options.programs.custom.video.enable = mkEnableOption "enable video tools";

  config = mkIf cfg.enable {
    environment.systemPackages = with pkgs; [
      youtube-dl
      mplayer
      mpv

      # to record your screen
      # ---------------------
      simplescreenrecorder
      screenKey

      # to transcode video material
      # ---------------------------
      handbrake
      ffmpeg-full

      # video editing
      # -------------
      openshot-qt

    ];
  };
}