1# GNOME Initial Setup.
2
3{ config, pkgs, lib, ... }:
4
5with lib;
6
7let
8
9 # GNOME initial setup's run is conditioned on whether
10 # the gnome-initial-setup-done file exists in XDG_CONFIG_HOME
11 # Because of this, every existing user will have initial setup
12 # running because they never ran it before.
13 #
14 # To prevent this we create the file if the users stateVersion
15 # is older than 20.03 (the release we added this module).
16
17 script = pkgs.writeScript "create-gis-stamp-files" ''
18 #!${pkgs.runtimeShell}
19 setup_done=$HOME/.config/gnome-initial-setup-done
20
21 echo "Creating g-i-s stamp file $setup_done ..."
22 cat - > $setup_done <<- EOF
23 yes
24 EOF
25 '';
26
27 createGisStampFilesAutostart = pkgs.writeTextFile rec {
28 name = "create-g-i-s-stamp-files";
29 destination = "/etc/xdg/autostart/${name}.desktop";
30 text = ''
31 [Desktop Entry]
32 Type=Application
33 Name=Create GNOME Initial Setup stamp files
34 Exec=${script}
35 StartupNotify=false
36 NoDisplay=true
37 OnlyShowIn=GNOME;
38 AutostartCondition=unless-exists gnome-initial-setup-done
39 X-GNOME-Autostart-Phase=EarlyInitialization
40 '';
41 };
42
43in
44
45{
46
47 meta = {
48 maintainers = teams.gnome.members;
49 };
50
51 # Added 2021-05-07
52 imports = [
53 (mkRenamedOptionModule
54 [ "services" "gnome3" "gnome-initial-setup" "enable" ]
55 [ "services" "gnome" "gnome-initial-setup" "enable" ]
56 )
57 ];
58
59 ###### interface
60
61 options = {
62
63 services.gnome.gnome-initial-setup = {
64
65 enable = mkEnableOption (lib.mdDoc "GNOME Initial Setup, a Simple, easy, and safe way to prepare a new system");
66
67 };
68
69 };
70
71
72 ###### implementation
73
74 config = mkIf config.services.gnome.gnome-initial-setup.enable {
75
76 environment.systemPackages = [
77 pkgs.gnome.gnome-initial-setup
78 ]
79 ++ optional (versionOlder config.system.stateVersion "20.03") createGisStampFilesAutostart
80 ;
81
82 systemd.packages = [
83 pkgs.gnome.gnome-initial-setup
84 ];
85
86 systemd.user.targets."gnome-session".wants = [
87 "gnome-initial-setup-copy-worker.service"
88 "gnome-initial-setup-first-login.service"
89 "gnome-welcome-tour.service"
90 ];
91
92 systemd.user.targets."gnome-session@gnome-initial-setup".wants = [
93 "gnome-initial-setup.service"
94 ];
95
96 };
97
98}