{
  config,
  inputs,
  lib,
  pkgs,
  ...
}:
with lib; let
  cfg = config.custom.settings.packages;
in {
  options.custom.settings.packages = {
    enable = mkOption {default = false;};
    extra = mkOption {default = [];};
  };

  config = mkIf cfg.enable (
    with pkgs; {
      environment.systemPackages =
        cfg.extra
        ++ optionals config.custom.default [
          ### CLI applications
          config.boot.kernelPackages.cpupower # Install for current kernel

          alejandra # Nix formatter
          fd # File finder
          fzf # Fuzzy search
          jq # JSON parser
          killport # Kill processes on port
          libqalculate # Calculator
          lm_sensors # System sensors
          nix-output-monitor # Nix build parser
          nix-tree # Nix store explorer
          nmap # Network scanner
          nvd # Nix diff viewer
          progress # Coreutils progress viewer
          rclone # File sync
          stress # CPU stress tester
          testdisk # Data recovery tool
          trashy # CLI trash
          waypipe # Wayland proxy
          wl-clipboard # Wayland clipboard
          xclip # X11 clipboard

          ### Dependencies
          man-pages
          man-pages-posix
        ]
        ++ optionals config.custom.minimal [
          ### GUI applications
          kdiskmark # Must be system package for polkit

          ### CLI applications
          mesa-demos # <glx|vk>gears
          vulkan-tools # vkcube

          # https://github.com/sonic2kk/steamtinkerlaunch
          # TODO: Remove when v14 released on nixpkgs
          # https://github.com/sonic2kk/steamtinkerlaunch/issues/992
          # Build from latest commit
          (steamtinkerlaunch.overrideAttrs {src = inputs.steamtinkerlaunch;})

          # Dependencies
          p7zip # steamtinkerlaunch (Special K)
        ]
        ++ optionals config.custom.full [
          ### GUI applications
          amberol # Audio player
          apostrophe # Markdown editor
          baobab # Disk usage analyzer
          blackbox-terminal # Terminal
          cartridges # Game library

          # BUG: Build failure
          # https://github.com/NixOS/nixpkgs/issues/357406
          #// cinny-desktop # Matrix client

          clapper # Video player
          d-spy # D-Bus introspection
          dconf-editor # GSettings editor
          decibels # Audio player
          decoder # QR code scanner
          discord # Discord client
          drawio # Diagram maker
          easyeffects # Audio filters
          element-desktop # Matrix client
          file-roller # Archive utility
          flare-signal # Signal client
          fluffychat # Matrix client
          footage # Video editor
          #// fractal # Matrix client
          fragments # Torrent downloader
          gcolor3 # Color picker
          gitg # Git client
          github-desktop # Git client
          gnome-boxes # Virtual machine manager
          gnome-calculator # Calculator
          gnome-calendar # Calendar
          gnome-connections # Remote desktop client
          gnome-disk-utility # Disk formatter
          gnome-firmware # Firmware updater
          gnome-font-viewer # Font viewer
          gnome-graphs # Data plotter
          gnome-maps # OpenStreetMap client
          gnome-obfuscate # Image redacter
          gnome-podcasts # Podcast feed
          gnome-resources # System monitor
          gnome-software # Flatpak manager
          gnome-system-monitor # System monitor
          gnome-text-editor # Text editor
          gnome-tweaks # GNOME extras
          gnome-usage # System monitor
          gradience # GTK theme editor
          gtkcord4 # Discord client
          gtkterm # Serial terminal
          helvum # Pipewire patchbay
          heroic # Game library
          icon-library # Icon viewer
          identity # Compare media
          impression # Image writer
          kooha # Screen recorder
          logseq # Knowledge base
          loupe # Image viewer
          lutris # Game library
          newsflash # RSS feed
          nheko # Matrix client
          obsidian # Knowledge base
          papers # Document viewer
          path-of-building # Path of Exile planner
          pika-backup # Borg backup manager
          planify # Tasks
          pods # Podman manager
          protonplus # Wine updater
          protonvpn-gui # Proton VPN client
          ptyxis # Terminal
          pwvucontrol # Pipewire volume controller
          remmina # Remote desktop client
          signal-desktop # Signal client
          smile # Emoji picker
          snapshot # Camera
          snoop # File content finder
          spotify # Spotify client
          syncthingtray # Syncthing client
          tagger # Audio file tagger
          telegram-desktop # Telegram client
          variety # Wallpaper changer
          ventoy # Image writer
          virt-viewer # Virtual machine viewer
          wildcard # Regex tester
          wowup-cf # World of Warcraft addon manager
          #// xivlauncher # Final Fantasy XIV launcher
          youtube-music # YouTube Music client
          zrythm # Digital audio workstation

          #!! Must be downloaded manually due to licensing
          # (ciscoPacketTracer8.overrideAttrs {
          #   src = ${config.custom.sync}/linux/config/cisco/CiscoPacketTracer822_amd64_signed.deb;
          # })

          ### CLI applications
          inputs.agenix.packages.${system}.default

          betterdiscordctl # BetterDiscord installer
          bitwarden-cli # Bitwarden client
          brightnessctl # Backlight changer
          devbox # Development environment
          er-patcher # Elden Ring fixes
          firefoxpwa # Firefox web apps
          glxinfo # Graphics tester
          hwloc # CPU topology viewer
          freerdp3 # RDP client
          grimblast # Screenshots
          imagemagick # Image editor
          libinput # Libinput commands
          libnotify # Notification tester
          linux-wifi-hotspot # Wi-Fi hotspot
          nixos-anywhere # NixOS installer
          nvtopPackages.full # GPU monitor
          playerctl # Media controller
          satty # Screenshot editor
          tio # Serial terminal
          usbutils # USB bus utilities
          vrrtest # VRR tester
          winetricks # Wine modifier
          xdg-utils # XDG utilities
          ydotool # TODO: Remove when using service

          ### Dependencies
          wineWowPackages.unstableFull # WoW64, not World of Warcraft

          # TODO: Use home.gtk.theme.package when fixed upstream
          # https://github.com/nix-community/home-manager/issues/5133
          adw-gtk3

          ### Python packages
          # https://wiki.nixos.org/wiki/Python#Package_unavailable_in_Nixpkgs
          # https://wiki.nixos.org/wiki/Packaging/Python
          (python311.withPackages (
            ps:
              with ps; [
                # lifx-cli
                # https://github.com/Rawa/lifx-cli
                (buildPythonPackage {
                  pname = "lifx-cli";
                  version = "master";
                  src = inputs.lifx-cli;
                  doCheck = false;
                  propagatedBuildInputs = with python311Packages; [requests];
                })
              ]
          ))
        ];
    }
  );
}