mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-04 12:38:31 -04:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a95206bf41 |
+48
-1
@@ -10,6 +10,8 @@ let
|
|||||||
inherit (lib) types;
|
inherit (lib) types;
|
||||||
cfg = config.programs.dank-material-shell.greeter;
|
cfg = config.programs.dank-material-shell.greeter;
|
||||||
cfgDms = config.programs.dank-material-shell;
|
cfgDms = config.programs.dank-material-shell;
|
||||||
|
cfgAutoLogin = config.services.displayManager.autoLogin;
|
||||||
|
sessionData = config.services.displayManager.sessionData;
|
||||||
|
|
||||||
inherit (config.services.greetd.settings.default_session) user;
|
inherit (config.services.greetd.settings.default_session) user;
|
||||||
|
|
||||||
@@ -48,6 +50,38 @@ let
|
|||||||
} ${lib.optionalString cfg.logs.save "> ${cfg.logs.path} 2>&1"}
|
} ${lib.optionalString cfg.logs.save "> ${cfg.logs.path} 2>&1"}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
autoLoginCommand =
|
||||||
|
pkgs.runCommand "dms-greeter-autologin-command"
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.gnugrep
|
||||||
|
pkgs.coreutils
|
||||||
|
];
|
||||||
|
}
|
||||||
|
''
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
session="${sessionData.autologinSession}"
|
||||||
|
desktops="${sessionData.desktops}"
|
||||||
|
|
||||||
|
for sessionFile in \
|
||||||
|
"$desktops/share/wayland-sessions/$session.desktop" \
|
||||||
|
"$desktops/share/xsessions/$session.desktop"
|
||||||
|
do
|
||||||
|
if [ -f "$sessionFile" ]; then
|
||||||
|
command="$(grep -m1 '^Exec=' "$sessionFile" | cut -d= -f2- || true)"
|
||||||
|
|
||||||
|
if [ -n "$command" ]; then
|
||||||
|
printf '%s\n' "$command" > "$out"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "dms-greeter autologin: could not resolve Exec for session '$session'" >&2
|
||||||
|
exit 1
|
||||||
|
'';
|
||||||
|
|
||||||
jq = lib.getExe pkgs.jq;
|
jq = lib.getExe pkgs.jq;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
@@ -155,6 +189,13 @@ in
|
|||||||
dmsgreeter: user set for greetd default_session ${user} does not exist. Please create it before referencing it.
|
dmsgreeter: user set for greetd default_session ${user} does not exist. Please create it before referencing it.
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
assertion = cfgAutoLogin.enable -> sessionData.autologinSession != null;
|
||||||
|
message = ''
|
||||||
|
dms-greeter auto-login requires services.displayManager.defaultSession to be set,
|
||||||
|
or at least one session in services.displayManager.sessionPackages.
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
# DMS currently relies on /etc/pam.d/login for lock screen password auth on NixOS.
|
# DMS currently relies on /etc/pam.d/login for lock screen password auth on NixOS.
|
||||||
# Declare security.pam.services.dankshell only if you want to override that runtime fallback.
|
# Declare security.pam.services.dankshell only if you want to override that runtime fallback.
|
||||||
@@ -165,7 +206,13 @@ in
|
|||||||
# };
|
# };
|
||||||
services.greetd = {
|
services.greetd = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
settings.default_session.command = lib.mkDefault (lib.getExe greeterScript);
|
settings = {
|
||||||
|
default_session.command = lib.mkDefault (lib.getExe greeterScript);
|
||||||
|
initial_session = lib.mkIf (cfgAutoLogin.enable && (cfgAutoLogin.user != null)) {
|
||||||
|
inherit (cfgAutoLogin) user;
|
||||||
|
command = ''${lib.getExe pkgs.bash} -lc "${pkgs.systemd}/bin/systemd-cat $(<${autoLoginCommand})"'';
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
fonts.packages = with pkgs; [
|
fonts.packages = with pkgs; [
|
||||||
fira-code
|
fira-code
|
||||||
|
|||||||
@@ -16,8 +16,14 @@ pkgs.testers.runNixOSTest {
|
|||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
group = "greeter";
|
group = "greeter";
|
||||||
};
|
};
|
||||||
|
users.users.alice.isNormalUser = true;
|
||||||
|
|
||||||
services.greetd.settings.default_session.user = "greeter";
|
services.greetd.settings.default_session.user = "greeter";
|
||||||
|
services.displayManager.autoLogin = {
|
||||||
|
enable = true;
|
||||||
|
user = "alice";
|
||||||
|
};
|
||||||
|
services.displayManager.defaultSession = "niri";
|
||||||
|
|
||||||
programs.niri.enable = true;
|
programs.niri.enable = true;
|
||||||
|
|
||||||
@@ -46,6 +52,11 @@ pkgs.testers.runNixOSTest {
|
|||||||
greetd_config_path = config_match.group(1)
|
greetd_config_path = config_match.group(1)
|
||||||
greetd_config = machine.succeed(f"cat {greetd_config_path}")
|
greetd_config = machine.succeed(f"cat {greetd_config_path}")
|
||||||
t.assertIn("dms-greeter", greetd_config)
|
t.assertIn("dms-greeter", greetd_config)
|
||||||
|
t.assertIn("[initial_session]", greetd_config)
|
||||||
|
|
||||||
|
initial_session = greetd_config.split("[initial_session]", 1)[1]
|
||||||
|
t.assertIn('user = "alice"', initial_session)
|
||||||
|
t.assertIn("systemd-cat", initial_session)
|
||||||
|
|
||||||
script_match = re.search(r'command\s*=\s*"([^"]+/bin/dms-greeter)"', greetd_config)
|
script_match = re.search(r'command\s*=\s*"([^"]+/bin/dms-greeter)"', greetd_config)
|
||||||
if script_match is None:
|
if script_match is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user