{
  config,
  lib,
  ...
}:
with lib; let
  cfg = config.custom.settings.environment;
in {
  options.custom.settings.environment = {
    enable = mkOption {default = false;};
    builder = mkOption {default = config.custom.full;};
    timezone = mkOption {default = "America/Chicago";};
    wayland = mkOption {default = config.custom.minimal;};
  };

  config = mkIf cfg.enable {
    time.timeZone = cfg.timezone;

    # https://wiki.nixos.org/wiki/Cross_Compiling
    boot.binfmt.emulatedSystems = mkIf cfg.builder ["aarch64-linux"]; # Emulate architecture
    #// nixpkgs.buildPlatform = "x86_64-linux"; # Binary caches often not available

    environment = {
      localBinInPath = true;

      # HACK: Nix does not currently handle locale properly, so force default
      # https://github.com/NixOS/nixpkgs/issues/183960 et al.
      #// i18n.defaultLocale = "C.UTF-8";

      sessionVariables = {
        GDK_SCALE = toString config.custom.scale; # Steam HiDPI

        # https://wiki.nixos.org/wiki/Wayland#Electron_and_Chromium
        NIXOS_OZONE_WL = mkIf cfg.wayland "1";
      };

      shellAliases = {
        # https://github.com/aksiksi/compose2nix?tab=readme-ov-file#usage
        # https://github.com/aksiksi/compose2nix?tab=readme-ov-file#agenix
        compose2nix = concatStringsSep " " [
          "compose2nix"
          "--inputs compose.yaml"
          "--output compose.nix"
          "--root_path /containers"
          "--auto_format"
          "--check_systemd_mounts"
          "--env_files_only"
          "--ignore_missing_env_files"
          "--include_env_files"
          #?? --env_files /run/agenix/containers/*/.env
        ];
      };
    };
  };
}