{
  pkgs,
  lib,
  config,
  inputs,
  system,
  ...
}: let
  mkPackage = name: pkgsOrList: {
    options.packages.${name}.enable = lib.mkEnableOption name;
    config.environment.systemPackages =
      lib.mkIf config.packages.${name}.enable
      (lib.toList pkgsOrList);
  };

  packages = with pkgs; {
    bitwarden = bitwarden-desktop;
    eddieAirVPN = eddie;
    gnomeCalculator = gnome-calculator;
    gedit = gedit;
    iotas = iotas;
    logseq = logseq;
    mattermost = mattermost-desktop;
    slack = slack;
    tutanota = tutanota-desktop;
    exercism = exercism;
    opencode = opencode;
    jan = jan;
    lazygit = lazygit;
    prismlauncher = inputs.prismlauncher-cracked.packages.${system}.default;
    spaceCadetPinball = space-cadet-pinball;
    ttySolitaire = tty-solitaire;
    gimp = gimp;
    affinity = inputs.affinity-nix.packages.${system}.v3;
    eyeOfGnome = eog;
    kdenlive = kdePackages.kdenlive;
    plex = [
      (plex-desktop.override {extraEnv = {QT_QPA_PLATFORM = "xcb";};})
      # plex-desktop
      plexamp
    ];
    freetube = freetube;
    lazydocker = lazydocker;
    distrobox = [distrobox pkgs.boxbuddy];
    winboat = [winboat freerdp];
    signal = signal-desktop;
    pixieditor = pixieditor;
    bottles = bottles;
    heroic = heroic;
    adb = android-tools;
    teams = teams-for-linux;
    ferdium = ferdium;
    logisim-evolution = logisim-evolution;
  };
in {
  imports = builtins.attrValues (builtins.mapAttrs mkPackage packages);
}
