at master 1.5 kB view raw
1{ pkgs, lib, ... }: 2{ 3 name = "sx"; 4 meta.maintainers = with lib.maintainers; [ 5 figsoda 6 thiagokokada 7 ]; 8 9 nodes.machine = 10 { ... }: 11 { 12 imports = [ ./common/user-account.nix ]; 13 14 environment.systemPackages = with pkgs; [ icewm ]; 15 16 services.getty.autologinUser = "alice"; 17 18 services.xserver = { 19 enable = true; 20 displayManager.sx.enable = true; 21 }; 22 23 # Create sxrc file on login and start sx 24 programs.bash.loginShellInit = 25 # bash 26 '' 27 mkdir -p "$HOME/.config/sx" 28 echo 'exec icewm' > "$HOME/.config/sx/sxrc" 29 chmod +x "$HOME/.config/sx/sxrc" 30 31 sx 32 ''; 33 }; 34 35 testScript = 36 { nodes, ... }: 37 let 38 user = nodes.machine.users.users.alice; 39 in 40 # python 41 '' 42 start_all() 43 44 machine.wait_for_unit("multi-user.target") 45 46 xauthority = "${user.home}/.local/share/sx/xauthority" 47 machine.wait_for_file(xauthority) 48 machine.succeed(f"xauth merge {xauthority}") 49 50 def icewm_is_visible(_last_try: bool) -> bool: 51 # sx will set DISPLAY as the TTY number we started, in this case 52 # TTY1: 53 # https://github.com/Earnestly/sx/blob/master/sx#L41. 54 # We can't use `machine.wait_for_window` here since we are running 55 # X as alice and not root. 56 return "IceWM" in machine.succeed("DISPLAY=:1 xwininfo -root -tree") 57 58 # Adding a retry logic to increase reliability 59 retry(icewm_is_visible) 60 ''; 61}