{
  lib,
  boot,
  ...
}:
with lib; let
  nixpkgsOverlayType = lib.mkOptionType {
    name = "nixpkgs-overlay";
    description = "nixpkgs overlay";
    check = lib.isFunction;
    merge = lib.mergeOneOption;
  };
in {
  options.universe = {
    programs = {
      amnezia-vpn.enable = mkEnableOption "Enable AmneziaVPN app";
      android-tools.enable = mkEnableOption "Enable android tools (adb, fastboot, ...)";
    };

    system = {
      tmpUseTmpfs = mkEnableOption "Use tmpfs for /tmp";
      emulatedSystems = mkOption {
        description = "Systems to emulate";
        type = with types; listOf enum builtins.attrNames boot.binfmt.magics;
        default = [];
      };
      arch = mkOption {
        description = "System architecture";
        type = with types; uniq str;
      };
      hostname = mkOption {
        description = "System hostname";
        type = with types; uniq str;
      };
      username = mkOption {
        description = "Username";
        type = with types; uniq str;
      };
    };

    nixpkgs = {
      allowUnfree = mkEnableOption "Enable non-free software";
      overlays = mkOption {
        description = "List of nixpkgs overlays";
        type = with types; listOf nixpkgsOverlayType;
        default = [];
      };
    };

    locale = {
      timeZone = mkOption {
        description = "System time zone";
        type = with types; uniq str;
        default = "Asia/Yekaterinburg";
      };
      lang = mkOption {
        description = "System locale";
        type = with types; uniq str;
        default = "en_US.UTF-8";
      };
    };

    services = {
      command-not-found.enable = mkEnableOption "Enable command-not-found";
      libvirtd.enable = mkEnableOption "Enable libvirtd";
      podman.enable = mkEnableOption "Enable libvirtd";
      openssh = {
        enable = mkEnableOption "Enable openssh server";
        ports = mkOption {
          description = "Listen ports";
          type = with types; uniq (listOf port);
          default = [22];
        };
        authorizedKeys = mkOption {
          description = "Authorized public ssh keys";
          type = with types; uniq (listOf str);
          default = [];
        };
      };
      amneziawg = {
        enable = mkEnableOption "Enable amneziawg vpn service";
        secret-config = mkOption {
          description = "Configuration SOPS secret";
          type = with types; nullOr path;
          default = null;
        };
        IfName = mkOption {
          description = "Interface name";
          type = with types; uniq str;
        };
      };
    };

    de = {
      hyprland = {
        enable = mkEnableOption "Enable Hyprland";
      };
      waybar = {
        enable = mkEnableOption "Enable waybar";
        settings = {
          radiuses = {
            outer = mkOption {
              type = types.int;
              default = 100;
            };
            inner = mkOption {
              type = types.int;
              default = 40;
            };
            bar = mkOption {
              type = types.int;
              default = 25;
            };
          };
          gapps = {
            outer = mkOption {
              type = types.int;
              default = 6;
            };
            inner = mkOption {
              type = types.int;
              default = 8;
            };
            chips = mkOption {
              type = types.int;
              default = 4;
            };
          };
          sizes = {
            icons = mkOption {
              type = types.int;
              default = 20;
            };
            text = mkOption {
              type = types.int;
              default = 15;
            };
          };
        };
      };
    };
  };
}