diff --git a/hosts/modules/gui/sxmo/default.nix b/hosts/modules/gui/sxmo/default.nix index a9e3e118..64707cef 100644 --- a/hosts/modules/gui/sxmo/default.nix +++ b/hosts/modules/gui/sxmo/default.nix @@ -57,6 +57,12 @@ let knownTerminals = { vte = "vte-2.91"; }; + + systemd-cat = "${pkgs.systemd}/bin/systemd-cat"; + runWithLogger = identifier: cmd: pkgs.writeShellScript identifier '' + echo "launching ${identifier}..." | ${systemd-cat} --identifier=${identifier} + ${cmd} 2>&1 | ${systemd-cat} --identifier=${identifier} + ''; in { options = with lib; { @@ -65,14 +71,26 @@ in type = types.bool; }; sane.gui.sxmo.greeter = mkOption { - type = types.enum [ "lightdm-mobile" "greetd-phog" "sway" ]; + type = types.enum [ + "greetd-phog" + "greetd-sway-phog" + "greetd-sxmo" + "lightdm-mobile" + "sway-gtkgreet" + ]; default = "lightdm-mobile"; # default = "greetd-phog"; # phog/greetd seems to significantly worsen graphics & perf. like it breaks GL acceleration? TODO: try phog via lightdm description = '' which greeter to use. - "lightdm-mobile" => keypad style greeter. can only enter digits 0-9 as password. - "greetd-phog" => phosh-based greeter. keypad (0-9) with option to open an on-screen keyboard. - "sway" => layered sway greeter. behaves as if you booted to swaylock. + "greetd-phog" => phosh-based greeter. keypad (0-9) with option to open an on-screen keyboard. + "greetd-sway-phog" => phog, but uses sway as the compositor instead of phoc. + currently broken: phog-wayland-ERROR : Wayland compositor lacks needed globals (zphoc_layer_shell_effects_v1) + "greetd-sxmo" => launch sxmo directly from greetd, no auth. + this means no keychain unlocked or encrypted home mounted. + "lightdm-mobile" => keypad style greeter. can only enter digits 0-9 as password. + "sway-gtkgreet" => layered sway greeter. behaves as if you booted to swaylock. + this isn't practically usable on mobile because of keyboard input. + also, it takes literally 6 minutes to appear ''; }; sane.gui.sxmo.package = mkOption { @@ -316,7 +334,7 @@ in }; }) - (lib.mkIf (cfg.greeter == "sway") { + (lib.mkIf (cfg.greeter == "sway-gtkgreet") { services.greetd = { enable = true; # borrowed from gui/sway @@ -345,6 +363,31 @@ in }; }) + (lib.mkIf (cfg.greeter == "greetd-sway-phog") { + services.greetd = { + enable = true; + # borrowed from gui/sway + settings.default_session.command = + let + # start sway and have it construct the greeter + sway-as-greeter = pkgs.writeShellScriptBin "sway-as-greeter" '' + ${pkgs.sway}/bin/sway --debug --config ${sway-config-into-phog} > /var/log/sway/sway-as-greeter.log 2>&1 + ''; + # (config file for the above) + sway-config-into-phog = pkgs.writeText "greetd-sway-config" '' + exec "${pkgs.phog}/libexec/phog" + ''; + in "${sway-as-greeter}/bin/sway-as-greeter"; + }; + # phog locates sxmo_winit.sh via /share/wayland-sessions + environment.pathsToLink = [ "/share/wayland-sessions" ]; + + sane.fs."/var/log/sway" = { + dir.acl.mode = "0777"; + wantedBeforeBy = [ "greetd.service" "display-manager.service" ]; + }; + }) + (lib.mkIf (cfg.greeter == "greetd-phog") { services.greetd = { enable = true; @@ -353,18 +396,27 @@ in # settings.default_session.command = "${pkgs.phog}/bin/phog"; # wrapper to launch phog and redirect logs to system journal. - settings.default_session.command = - let - systemd-cat = "${pkgs.systemd}/bin/systemd-cat"; - launch-phog = pkgs.writeShellScriptBin "launch-phog" '' - echo "launching phog..." | ${systemd-cat} - G_MESSAGES_DEBUG=all ${pkgs.phog}/bin/phog 2>&1 | ${systemd-cat} --identifier=phog - ''; - in "${launch-phog}/bin/launch-phog" ; + settings.default_session.command = let + launch-phog = runWithLogger "phog" "${pkgs.phog}/bin/phog"; + in "${launch-phog}" ; }; environment.pathsToLink = [ "/share/wayland-sessions" ]; }) + (lib.mkIf (cfg.greeter == "greetd-sxmo") { + services.greetd = { + enable = true; + settings = { + default_session = { + command = let + launch-sxmo = runWithLogger "sxmo" "${cfg.package}/bin/sxmo_winit.sh"; + in "${launch-sxmo}"; + user = "colin"; + }; + }; + }; + }) + # old, greeterless options: # services.xserver.windowManager.session = [{ # name = "sxmo"; @@ -375,16 +427,6 @@ in # ''; # }]; # services.xserver.enable = true; - - # services.greetd = { - # enable = true; - # settings = { - # default_session = { - # command = "${cfg.package}/bin/sxmo_winit.sh"; - # user = "colin"; - # }; - # }; - # }; ])) ]; }