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

let
  cfg = config.greg.gui;

  excludes = systems: opts: (if (builtins.all (x: pkgs.system != x) systems) then opts else [ ]);

  vars = {
    XDG_CURRENT_DESKTOP = "GNOME";
  };
in
{
  options.greg.gui = lib.mkEnableOption "Enable GUI programs";

  config = (
    lib.mkIf cfg {
      # These packages are Linux only
      home.packages =
        with pkgs;
        (excludes
          [
            "x86_64-darwin"
            "aarch64-darwin"
          ]
          [
            cdrtools
            element-desktop
            freetube
            qpwgraph
            vlc
            x265
          ]
        )
        ++

          # x86_64-linux only
          (excludes
            [
              "x86_64-darwin"
              "aarch64-darwin"
              "aarch64-linux"
            ]
            [
              bitwarden
              discord
              endeavour
              jellyfin-media-player
              #logseq
              nextcloud-client
              slack
            ]
          )
        ++

          # Items that are not supported on ARM/Linux
          (excludes [ "aarch64-linux" ] [
            onlyoffice-bin
            synology-drive-client
            (pkgs.zoom-us.overrideAttrs {
              version = "6.2.11.5069";
              src = pkgs.fetchurl {
                url = "https://zoom.us/client/6.2.11.5069/zoom_x86_64.pkg.tar.xz";
                hash = "sha256-k8T/lmfgAFxW1nwEyh61lagrlHP5geT2tA7e5j61+qw=";
              };
            })
          ]);

      programs.firefox = {
        enable = (!pkgs.stdenv.hostPlatform.isDarwin);
        package = pkgs.firefox-bin;
        policies = {
          DisableAppUpdate = true;
        };
        profiles = {
          default = {
            bookmarks = {
              force = true;
              settings = import ./gui/bookmarks.nix;
            };
            id = 0;
            isDefault = true;
            search = {
              default = "DuckDuckGo";
              force = true;
              engines = {
                Google.metaData.alias = "@g";
                "Nix Packages" = {
                  urls = [
                    {
                      template = "https://search.nixos.org/packages";
                      params = [
                        {
                          name = "type";
                          value = "packages";
                        }
                        {
                          name = "query";
                          value = "{searchTerms}";
                        }
                      ];
                    }
                  ];
                  icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
                  definedAliases = [ "@np" ];
                };
                "Nix Options" = {
                  urls = [
                    {
                      template = "https://search.nixos.org/options";
                      params = [
                        {
                          name = "type";
                          value = "packages";
                        }
                        {
                          name = "query";
                          value = "{searchTerms}";
                        }
                      ];
                    }
                  ];
                  icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
                  definedAliases = [ "@no" ];
                };
                "Noogle" = {
                  urls = [
                    {
                      template = "https://noogle.dev/q";
                      params = [
                        {
                          name = "term";
                          value = "{searchTerms}";
                        }
                      ];
                    }
                  ];
                  icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
                  definedAliases = [ "@nl" ];
                };
              };
            };
            settings = {
              "app.update.auto" = false;
              "browser.ctrlTab.sortByRecentlyUsed" = true;
              "browser.startup.page" = 3;
              "browser.startup.homepage" = "https://thehellings.com";
              "doh-rollout.doorhanger-decision" = "UIDisabled";
              "doh-rollout.doneFirstRun" = true;
              "signon.rememberSignons" = false;
            };
            extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
              bitwarden
              gsconnect
              foxyproxy-standard
              multi-account-containers
              octotree
              okta-browser-plugin
              refined-github
              sponsorblock
              tree-style-tab
              ublock-origin
            ];
          };
        };
      };

      # This is supposed to be in support of Firefox, but I dunno...
      programs.bash.sessionVariables = vars;
      programs.xonsh.sessionVariables = vars;
    }
  );
}
