1# SPDX-License-Identifier: MIT
2# SPDX-FileCopyrightText: Lily Foster <lily@lily.flowers>
3# Portions of this code are adapted from nixos-cosmic
4# https://github.com/lilyinstarlight/nixos-cosmic
5
6{
7 config,
8 lib,
9 pkgs,
10 ...
11}:
12
13let
14 cfg = config.services.displayManager.cosmic-greeter;
15 cfgAutoLogin = config.services.displayManager.autoLogin;
16in
17
18{
19 meta.maintainers = lib.teams.cosmic.members;
20
21 options.services.displayManager.cosmic-greeter = {
22 enable = lib.mkEnableOption "COSMIC greeter";
23 package = lib.mkPackageOption pkgs "cosmic-greeter" { };
24 };
25
26 config = lib.mkIf cfg.enable {
27 services.greetd = {
28 enable = true;
29 settings = {
30 default_session = {
31 user = "cosmic-greeter";
32 command = ''${lib.getExe' pkgs.coreutils "env"} XCURSOR_THEME="''${XCURSOR_THEME:-Pop}" systemd-cat -t cosmic-greeter ${lib.getExe pkgs.cosmic-comp} ${lib.getExe cfg.package}'';
33 };
34 initial_session = lib.mkIf (cfgAutoLogin.enable && (cfgAutoLogin.user != null)) {
35 user = cfgAutoLogin.user;
36 command = ''${lib.getExe' pkgs.coreutils "env"} XCURSOR_THEME="''${XCURSOR_THEME:-Pop}" systemd-cat -t cosmic-session ${lib.getExe pkgs.cosmic-session}'';
37 };
38 };
39 };
40
41 # Daemon for querying background state and such
42 systemd.services.cosmic-greeter-daemon = {
43 wantedBy = [ "multi-user.target" ];
44 before = [ "greetd.service" ];
45 serviceConfig = {
46 Type = "dbus";
47 BusName = "com.system76.CosmicGreeter";
48 ExecStart = lib.getExe' cfg.package "cosmic-greeter-daemon";
49 Restart = "on-failure";
50 };
51 };
52
53 # The greeter user is hardcoded in `cosmic-greeter`
54 users.groups.cosmic-greeter = { };
55 users.users.cosmic-greeter = {
56 description = "COSMIC login greeter user";
57 isSystemUser = true;
58 home = "/var/lib/cosmic-greeter";
59 createHome = true;
60 group = "cosmic-greeter";
61 };
62 # Required for authentication
63 security.pam.services.cosmic-greeter = { };
64
65 hardware.graphics.enable = true;
66 services.accounts-daemon.enable = true;
67 services.dbus.packages = [ cfg.package ];
68 services.libinput.enable = true;
69 };
70}