{
  lib,
  config,
  pkgs,
  options,
  ...
}:
{
  options.conf = {

    system = lib.mkOption {
      default = "x86_64-linux";
      # no fisherprice unix support
      type =
        with lib.types;
        (enum [
          "x86_64-linux"
          "aarch64-linux"
          "aarch64-linux-android"
        ]);
      example = "aarch64-linux";
      description = ''
        System architecture.
      '';
    };

    cpu = lib.mkOption {
      # TODO: how to enable arm?
      default = "amd";
      type =
        with lib.types;
        (enum [
          "amd"
          "intel"
        ]);
      example = "intel";
      description = ''
        cpu microcode.
      '';
    };

    additionalBootKernalParams = lib.mkOption {
      default = [
        "video=${config.conf.defaultMonitor}:${config.conf.defaultMonitorMode}"
      ];
      example = [ ];
      type = with lib.types; listOf str;
      description = ''
        additional kernelParams passed to bootloader
      '';
    };

    defaultMonitor = lib.mkOption {
      default = "";
      example = "eDP-1";
      type = lib.types.str;
      description = ''
        main monitor
      '';
    };

    defaultMonitorMode = lib.mkOption {
      default = "";
      example = "3440x1440@180";
      type = lib.types.str;
      description = ''
        main monitor mode: width x height @ refreshrate
      '';
    };

    defaultMonitorScale = lib.mkOption {
      default = "1";
      example = "1.5";
      type = lib.types.str;
      description = ''
        main monitor scaling
      '';
    };

    ironbar = {
      modules = lib.mkOption {
        default = [ ];
        example = [
          {
            type = "upower";
            class = "memory-usage";
          }
        ];
        type = with lib.types; listOf attrs;
        description = ''
          Adds modules to ironbar.
        '';
      };
    };

    boot_params = lib.mkOption {
      default = [ ];
      example = [ "resume=something" ];
      type = with lib.types; listOf str;
      description = ''
        Boot params
      '';
    };

    streamdeck = {
      enable = lib.mkOption {
        default = false;
        example = true;
        type = lib.types.bool;
        description = ''
          Install streamdeck configuration program.
        '';
      };
    };

    kernelOverride = lib.mkOption {
      default = null;
      type = with lib.types; nullOr package;
      description = ''
        kernel to be used
        Has no examples as doc complains...
        #example = pkgs.linuxPackages_xanmod_latest;
      '';
    };

    username = lib.mkOption {
      default = "dashie";
      example = "pingpang";
      type = lib.types.str;
      description = ''
        The username.
      '';
    };

    timezone = lib.mkOption {
      default = "Europe/Zurich";
      example = "Europe/Berlin";
      type = lib.types.str;
      description = ''
        The timezone.
      '';
    };

    locale = lib.mkOption {
      default = "en_US.UTF-8";
      example = "de_DE.UTF-8";
      type = lib.types.str;
      description = ''
        The locale.
      '';
    };

    nixos-config-path = lib.mkOption {
      default = "/home/${config.conf.username}/gits/nixos/.";
      example = "yourpath/.";
      type = lib.types.str;
      description = ''
        The path for your build command, you can then simply type rebuild to switch to a new configuration.
      '';
    };

    nvim-colorscheme = lib.mkOption {
      default = {
        tokyonight = {
          enable = true;
        };
      };
      example = {
        catppuccin = {
          enable = true;
        };
      };
      type = lib.types.attrs;
      description = ''
        nixvim colorscheme.
      '';
    };

    nix_path = lib.mkOption {
      default = "/home/${config.conf.username}/gits/nixos";
      example = "yourpath";
      type = lib.types.str;
      description = ''
        The default path for your configuration.
      '';
    };

    kb_layout = lib.mkOption {
      default = "dashie";
      example = "us";
      type = lib.types.str;
      description = ''
        The layout used in services. 
      '';
    };

    systemStateVersion = lib.mkOption {
      example = "24.05";
      default = "23.05";
      type = lib.types.str;
      description = ''
        System state version 
      '';
    };
    homeStateVersion = lib.mkOption {
      default = "24.05";
      example = "23.05";
      type = lib.types.str;
      description = ''
        Home state version 
      '';
    };

  };

  config =
    (lib.optionalAttrs (options ? system.stateVersion) {
      boot = {
        kernelPackages = lib.mkIf (config.conf.kernelOverride != null) config.conf.kernel;
        kernelParams = config.conf.additionalBootKernalParams;
      };
      system.stateVersion = config.conf.systemStateVersion;
    })
    // (lib.optionalAttrs (options ? home.stateVersion) {
      home.stateVersion = config.conf.homeStateVersion;
    });
}
