{
  config,
  lib,
  pkgs,
  ...
}: let
  cfg = config.alqueva.programs.swaybg;
  inherit (lib) types;
in {
  options.alqueva.programs.swaybg = {
    enable = lib.mkEnableOption "swaybg";
    package = lib.mkPackageOption pkgs "swaybg" {};
    wallpaper = lib.mkOption {
      default = "";
      description = "The wallpaper you want to use with swaybg.";
      type = types.oneOf [types.str types.package types.path];
    };
    mode = lib.mkOption {
      default = "fill";
      description = "How you want the wallpaper to be displayed.";
      type = types.str;
    };
    extraServiceConfig = {
      default = {};
      description = "Extra settings you want to apply to the systemd service.";
      type = types.attrsOf types.anything;
    };
  };

  config = lib.mkIf cfg.enable {
    systemd.user.services.swaybg = {
      inherit (cfg.package.meta) description;

      wantedBy = ["graphical-session.target"];
      after = ["graphical-session-pre.target"];
      partOf = ["graphical-session.target"];

      serviceConfig = {
        ExecStart = "${lib.getExe' cfg.package "swaybg"} -i ${cfg.wallpaper} -m ${cfg.mode}";
        Restart = "always";
        RestartSec = "5";
      };
    };
  };
}
