{ lib, pkgs, config, osConfig ? {}, options, ... }:
let
  cfg = config.nixfiles.common.nodm;
in
{
  config = let
    hyprland="${config.wayland.windowManager.hyprland.finalPackage}/bin/Hyprland";
    tty="${pkgs.coreutils}/bin/tty";
    initCommands =
      ''
        if [[ "$(${tty})" == "/dev/tty1" && -z "''${WAYLAND_DISPLAY:+x}" ]] ; then
          ${hyprland}
        fi
      '';
  in lib.mkIf (cfg.enable && config.wayland.windowManager.hyprland.enable) {
    # auto start Hyprland on tty1
    programs.zsh.initExtra = initCommands;
    programs.bash.initExtra = initCommands;
  };

  options.nixfiles.common.nodm = {
    enable = lib.mkOption {
      type = lib.types.bool;
      description = "Whether to automatically start a desktop session on TTY1, behaving like a rudimentary display manager.";
      default = osConfig ? systemd
        && config.nixfiles.meta.graphical
        && (!(
          (osConfig.systemd.services.display-manager.enable or false)
          && (osConfig.systemd.services.greetd.enable or false)
        ));
      example = true;
    };
  };
}