nix vm tests: add test for ssh-terminfo shell integration feature

pull/8339/head
Jeffrey C. Ollie 2025-08-22 17:55:54 -05:00
parent 516c416fa4
commit 8386159764
No known key found for this signature in database
GPG Key ID: 6F86035A6D97044E
1 changed files with 82 additions and 0 deletions

View File

@ -89,6 +89,13 @@
homeDirectory = config.users.users.ghostty.home;
stateVersion = nixos-version;
};
programs.ssh = {
enable = true;
extraOptionOverrides = {
StrictHostKeyChecking = "accept-new";
UserKnownHostsFile = "/dev/null";
};
};
};
};
};
@ -198,4 +205,79 @@ in {
machine.systemctl("stop app-com.mitchellh.ghostty-debug.service", user="${user.name}")
'';
};
ssh-integration-test = pkgs.testers.runNixOSTest {
name = "ssh-integration-test";
extraBaseModules = {
imports = [
home-manager.nixosModules.home-manager
];
};
nodes = {
server = {...}: {
users.groups.ghostty = {};
users.users.ghostty = {
isNormalUser = true;
group = "ghostty";
extraGroups = ["wheel"];
hashedPassword = "";
packages = [];
};
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "yes";
PermitEmptyPasswords = "yes";
};
};
security.pam.services.sshd.allowNullPassword = true;
};
client = {
config,
pkgs,
...
}:
mkNodeGnome {
inherit config pkgs;
settings = {
home-manager.users.ghostty = {
xdg.configFile = {
"ghostty/config".text = let
in ''
shell-integration-features = ssh-terminfo
'';
};
};
};
sshPort = 2222;
};
};
testScript = {nodes, ...}: let
user = nodes.client.users.users.ghostty;
bus_path = "/run/user/${toString user.uid}/bus";
bus = "DBUS_SESSION_BUS_ADDRESS=unix:path=${bus_path}";
gdbus = "${bus} gdbus";
ghostty = "${bus} ghostty";
su = command: "su - ${user.name} -c '${command}'";
gseval = "call --session -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval";
wm_class = su "${gdbus} ${gseval} global.display.focus_window.wm_class";
in ''
with subtest("Start server and wait for ssh to be ready."):
server.start()
server.wait_for_open_port(22)
with subtest("Start client and wait for ghostty window."):
client.start()
client.wait_for_x()
client.wait_for_file("${bus_path}")
client.systemctl("enable app-com.mitchellh.ghostty-debug.service", user="${user.name}")
client.succeed("${su "${ghostty} +new-window"}")
client.wait_until_succeeds("${wm_class} | grep -q 'com.mitchellh.ghostty-debug'")
with subtest("SSH from client to server and verify that the Ghostty terminfo is copied.")
client.sleep(2)
client.send_chars("ssh ghostty@server\n")
server.wait_for_file("${user.home}/.terminfo/x/xterm-ghostty", timeout=30)
'';
};
}