{ 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 { # 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)); example = true; }; }; }