From 832a681c96bf753a44a9964d966aa4e199a17779 Mon Sep 17 00:00:00 2001 From: ccicnce113424 Date: Sat, 11 Apr 2026 09:59:00 +0800 Subject: [PATCH 1/4] nixosTests.kmscon: wait for default target before waiting for the text --- nixos/tests/kmscon.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/tests/kmscon.nix b/nixos/tests/kmscon.nix index 1c67a16af2ba..f0fb27d9b0d5 100644 --- a/nixos/tests/kmscon.nix +++ b/nixos/tests/kmscon.nix @@ -31,7 +31,7 @@ enableOCR = true; testScript = '' - machine.start() + machine.wait_for_unit("default.target") with subtest("ensure we can open a tty"): machine.wait_for_text("alice@machine") From a1294b52d1fa57e7575ea1530212e5125124b0b0 Mon Sep 17 00:00:00 2001 From: ccicnce113424 Date: Wed, 22 Apr 2026 14:35:43 +0800 Subject: [PATCH 2/4] libtsm: 4.4.3 -> 4.5.0 --- pkgs/by-name/li/libtsm/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/li/libtsm/package.nix b/pkgs/by-name/li/libtsm/package.nix index f83c1082fba5..5cca1ae05a7b 100644 --- a/pkgs/by-name/li/libtsm/package.nix +++ b/pkgs/by-name/li/libtsm/package.nix @@ -12,13 +12,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "libtsm"; - version = "4.4.3"; + version = "4.5.0"; src = fetchFromGitHub { owner = "kmscon"; repo = "libtsm"; tag = "v${finalAttrs.version}"; - hash = "sha256-AKwS088lP3dByKh3dQRW76+L6ouD8EmVms2qWIC5IiE="; + hash = "sha256-5Lv/Hb0FGWARk3Wv3IuAbtCDII7qOMmcZSmKTkgTEsc="; }; strictDeps = true; From 41855a7a9933bcb963c308879fb4a37879140e23 Mon Sep 17 00:00:00 2001 From: ccicnce113424 Date: Sat, 11 Apr 2026 09:59:20 +0800 Subject: [PATCH 3/4] kmscon: 9.3.3 -> 9.3.4 --- pkgs/by-name/km/kmscon/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/km/kmscon/package.nix b/pkgs/by-name/km/kmscon/package.nix index 329c49f59af3..5298f0b2391d 100644 --- a/pkgs/by-name/km/kmscon/package.nix +++ b/pkgs/by-name/km/kmscon/package.nix @@ -29,13 +29,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "kmscon"; - version = "9.3.3"; + version = "9.3.4"; src = fetchFromGitHub { owner = "kmscon"; repo = "kmscon"; tag = "v${finalAttrs.version}"; - hash = "sha256-U9jDlZb5aBzQ7IErtLsajxcN1W5/8/eNwhGIuz7aUCw="; + hash = "sha256-S6a/m2gfYOsacq4uq3d05WZPH1C8RQowmZM7f6On4ic="; }; strictDeps = true; From 54f2c962004de96ffaea2bb08e350a311a413b5f Mon Sep 17 00:00:00 2001 From: ccicnce113424 Date: Thu, 16 Apr 2026 18:54:25 +0800 Subject: [PATCH 4/4] nixos/kmscon: remove dependency on agetty --- nixos/modules/services/ttys/kmscon.nix | 98 ++++++++++---------------- 1 file changed, 36 insertions(+), 62 deletions(-) diff --git a/nixos/modules/services/ttys/kmscon.nix b/nixos/modules/services/ttys/kmscon.nix index 63bf9432c501..cc69137a6345 100644 --- a/nixos/modules/services/ttys/kmscon.nix +++ b/nixos/modules/services/ttys/kmscon.nix @@ -25,50 +25,28 @@ let text = cfg.extraConfig; }; - baseLoginOptions = "-p -- \\u"; + baseLoginOptions = "-p"; - agettyCmd = + loginCmd = enableAutologin: - "${lib.getExe' pkgs.util-linux "agetty"} ${ - lib.escapeShellArgs ( - [ - "--login-program" - (toString gettyCfg.loginProgram) - "--login-options" - # these options are passed as a single parameter - "${lib.optionalString enableAutologin "-f "}${baseLoginOptions}" - ] - ++ lib.optionals enableAutologin [ - "--autologin" - gettyCfg.autologinUser - ] - ++ gettyCfg.extraArgs - ++ [ - "--8bits" - "--noclear" - "--" - "-" - ] - ) - } $TERM"; + "${gettyCfg.loginProgram} ${baseLoginOptions}${lib.optionalString enableAutologin " -f -- ${gettyCfg.autologinUser}"}"; - loginScript = pkgs.writers.writeDash "kmscon-login" '' - kms_tty= - active_tty_file=/sys/class/tty/tty0/active - if [ -f "$active_tty_file" ]; then - read -r kms_tty < "$active_tty_file" - fi + loginScript = pkgs.writers.writeDash "kmscon-login" ( + lib.optionalString (gettyCfg.autologinUser != null && gettyCfg.autologinOnce) '' + kms_tty= + active_tty_file=/sys/class/tty/tty0/active + if [ -f "$active_tty_file" ]; then + read -r kms_tty < "$active_tty_file" + fi - ${lib.optionalString (gettyCfg.autologinUser != null && gettyCfg.autologinOnce) '' autologged="/run/kmscon.autologged" if [ "$kms_tty" = tty1 ] && [ ! -f "$autologged" ]; then touch "$autologged" - exec ${agettyCmd true} + exec ${loginCmd true} fi - ''} - - exec ${agettyCmd (gettyCfg.autologinUser != null && !gettyCfg.autologinOnce)} - ''; + '' + + "exec ${loginCmd (gettyCfg.autologinUser != null && !gettyCfg.autologinOnce)}" + ); in { imports = [ @@ -182,32 +160,28 @@ in systemd.suppressedSystemUnits = [ "getty@.service" ]; - services.kmscon.extraConfig = - let - xkb = optionals cfg.useXkbConfig ( - lib.mapAttrsToList (n: v: "xkb-${n}=${v}") ( - lib.filterAttrs ( - n: v: - builtins.elem n [ - "layout" - "model" - "options" - "variant" - ] - && v != "" - ) config.services.xserver.xkb - ) - ); - render = optionals cfg.hwRender [ - "drm" - "hwaccel" - ]; - fonts = - optional (cfg.fonts != null) - "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}"; - term = optional (cfg.term != null) "term=${cfg.term}"; - in - lib.concatLines (xkb ++ render ++ fonts ++ term); + services.kmscon.extraConfig = lib.concatLines ( + optionals cfg.useXkbConfig ( + lib.mapAttrsToList (n: v: "xkb-${n}=${v}") ( + lib.filterAttrs ( + n: v: + builtins.elem n [ + "layout" + "model" + "options" + "variant" + ] + && v != "" + ) config.services.xserver.xkb + ) + ) + ++ optionals cfg.hwRender [ + "drm" + "hwaccel" + ] + ++ optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}" + ++ optional (cfg.term != null) "term=${cfg.term}" + ); hardware.graphics.enable = mkIf cfg.hwRender true;