From 60512a1a9845b653cc50132bbabfd190da099f8e Mon Sep 17 00:00:00 2001
From: NullBite <me@nullbite.com>
Date: Wed, 20 Mar 2024 21:15:02 -0400
Subject: [PATCH] greetd: implement command for tuigreet

---
 system/programs/greetd.nix | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/system/programs/greetd.nix b/system/programs/greetd.nix
index 5c29b4e..bebe241 100644
--- a/system/programs/greetd.nix
+++ b/system/programs/greetd.nix
@@ -5,6 +5,9 @@ let
   inherit (builtins) isNull;
   inherit (lib) optional optionals;
   optionalsSet = val: optionals (!(isNull val));
+  sessions = config.services.xserver.displayManager.sessionData.desktops;
+  xsessions = "${sessions}/share/xsessions";
+  wayland-sessions = "${sessions}/share/wayland-sessions";
 in
 {
   config = lib.mkIf cfg.enable {
@@ -17,9 +20,15 @@ in
           (lib.mkIf cfg.presets.tuigreet.enable {
             command = let
               st = cfg.settings;
-              args = [ "${pkgs.greetd.tuigreet}/bin/tuigreet" "--asterisks" "--remember" "--remember-session" ]
+              # i don't know if/how the default command is quoted so this will avoid any ambiguity
+              wrappedCommand = pkgs.writeShellScript "tuigreet-default-command" ''
+                exec ${lib.escapeShellArgs st.command}
+              '';
+              args = [ "${pkgs.greetd.tuigreet}/bin/tuigreet" "--asterisks" "--remember" "--remember-session"
+              "--sessions" "${xsessions}:${wayland-sessions}" ]
                 ++ optionalsSet st.greeting [ "--greeting" st.greeting ]
-                ++ optional st.time "--time" ;
+                ++ optional st.time "--time" 
+                ++ optionalsSet st.command [ "--cmd" wrappedCommand ];
             in lib.escapeShellArgs args; 
           })