···
enable = lib.mkEnableOption ''
the Lomiri graphical shell (formerly known as Unity8)
18
-
config = lib.mkIf cfg.enable {
22
-
glib # XDG MIME-related tools identify it as GNOME, add gio for MIME identification to work
26
-
++ (with pkgs.lomiri; [
31
-
lomiri-calculator-app
35
-
lomiri-docviewer-app
36
-
lomiri-download-manager
37
-
lomiri-filemanager-app
40
-
lomiri-schemas # exposes some required dbus interfaces
41
-
lomiri-session # wrappers to properly launch the session
43
-
lomiri-system-settings
46
-
lomiri-url-dispatcher
48
-
mediascanner2 # TODO possibly needs to be kicked off by graphical-session.target
50
-
qtmir # not having its desktop file for Xwayland available causes any X11 application to crash the session
56
-
# To override the default keyboard layout in Lomiri
57
-
etc.${pkgs.lomiri.lomiri.passthru.etcLayoutsFile}.text = lib.strings.replaceStrings [ "," ] [
59
-
] config.services.xserver.xkb.layout;
17
+
basics = lib.mkOption {
20
+
Enable basic things for getting Lomiri working.
22
+
type = lib.types.bool;
23
+
default = config.services.xserver.displayManager.lightdm.greeters.lomiri.enable || cfg.enable;
63
-
bluetooth.enable = lib.mkDefault true;
27
+
config = lib.mkMerge [
28
+
# Basics for getting Lomiri to work
29
+
(lib.mkIf cfg.basics {
31
+
# To override the default keyboard layout in Lomiri
32
+
etc.${pkgs.lomiri.lomiri.passthru.etcLayoutsFile}.text = lib.strings.replaceStrings [ "," ] [
34
+
] config.services.xserver.xkb.layout;
66
-
networking.networkmanager.enable = lib.mkDefault true;
38
+
"/share/locale" # TODO LUITK hardcoded default locale path, fix individual apps to not rely on it
68
-
systemd.packages = with pkgs.lomiri; [
70
-
lomiri-download-manager
42
+
systemPackages = with pkgs.lomiri; [
43
+
lomiri-wallpapers # default + additional wallpaper
44
+
suru-icon-theme # basic indicator icons
73
-
services.dbus.packages = with pkgs.lomiri; [
76
-
lomiri-download-manager
48
+
fonts.packages = with pkgs; [
49
+
ubuntu-classic # Ubuntu is default font
79
-
fonts.packages = with pkgs; [
80
-
# Applications tend to default to Ubuntu font
52
+
# Xwayland is partly hardcoded in Mir so it can't really be fully turned off, and it must be on PATH for X11 apps *and Lomiri's web browser* to work.
53
+
# Until Mir/Lomiri can be properly used without it, force it on so everything behaves as expected.
54
+
programs.xwayland.enable = lib.mkForce true;
84
-
# Copy-pasted basic stuff
85
-
hardware.graphics.enable = lib.mkDefault true;
86
-
fonts.enableDefaultPackages = lib.mkDefault true;
87
-
programs.dconf.enable = lib.mkDefault true;
89
-
# Xwayland is partly hardcoded in Mir so it can't really be fully turned off, and it must be on PATH for X11 apps *and Lomiri's web browser* to work.
90
-
# Until Mir/Lomiri can be properly used without it, force it on so everything behaves as expected.
91
-
programs.xwayland.enable = lib.mkForce true;
93
-
services.accounts-daemon.enable = true;
95
-
services.ayatana-indicators = {
56
+
services.ayatana-indicators = {
101
-
ayatana-indicator-datetime
102
-
ayatana-indicator-display
103
-
ayatana-indicator-messages
104
-
ayatana-indicator-power
105
-
ayatana-indicator-session
107
-
++ lib.optionals config.hardware.bluetooth.enable [ ayatana-indicator-bluetooth ]
108
-
++ lib.optionals (config.hardware.pulseaudio.enable || config.services.pipewire.pulse.enable) [
109
-
ayatana-indicator-sound
61
+
ayatana-indicator-datetime # Clock
62
+
ayatana-indicator-session # Controls for shutting down etc
114
-
[ telephony-service ]
115
-
++ lib.optionals config.networking.networkmanager.enable [ lomiri-indicator-network ]
119
-
services.udisks2.enable = true;
120
-
services.upower.enable = true;
121
-
services.geoclue2.enable = true;
69
+
(lib.mkIf cfg.enable {
70
+
# We need the basic setup as well
71
+
services.desktopManager.lomiri.basics = true;
123
-
services.gnome.evolution-data-server = {
125
-
plugins = with pkgs; [
126
-
# TODO: lomiri.address-book-service
76
+
glib # XDG MIME-related tools identify it as GNOME, add gio for MIME identification to work
80
+
++ (with pkgs.lomiri; [
85
+
lomiri-calculator-app
89
+
lomiri-docviewer-app
90
+
lomiri-download-manager
91
+
lomiri-filemanager-app
94
+
lomiri-schemas # exposes some required dbus interfaces
95
+
lomiri-session # wrappers to properly launch the session
97
+
lomiri-system-settings
100
+
lomiri-url-dispatcher
101
+
mediascanner2 # TODO possibly needs to be kicked off by graphical-session.target
103
+
qtmir # not having its desktop file for Xwayland available causes any X11 application to crash the session
110
+
bluetooth.enable = lib.mkDefault true;
113
+
networking.networkmanager.enable = lib.mkDefault true;
115
+
systemd.packages = with pkgs.lomiri; [
117
+
lomiri-download-manager
120
+
services.dbus.packages = with pkgs.lomiri; [
123
+
lomiri-download-manager
126
+
# Copy-pasted basic stuff
127
+
hardware.graphics.enable = lib.mkDefault true;
128
+
fonts.enableDefaultPackages = lib.mkDefault true;
129
+
programs.dconf.enable = lib.mkDefault true;
130
-
services.telepathy.enable = true;
131
+
services.accounts-daemon.enable = true;
132
-
services.displayManager = {
133
-
defaultSession = lib.mkDefault "lomiri";
134
-
sessionPackages = with pkgs.lomiri; [ lomiri-session ];
133
+
services.ayatana-indicators = {
139
+
ayatana-indicator-display
140
+
ayatana-indicator-messages
141
+
ayatana-indicator-power
143
+
++ lib.optionals config.hardware.bluetooth.enable [ ayatana-indicator-bluetooth ]
144
+
++ lib.optionals (config.hardware.pulseaudio.enable || config.services.pipewire.pulse.enable) [
145
+
ayatana-indicator-sound
150
+
[ telephony-service ]
151
+
++ lib.optionals config.networking.networkmanager.enable [ lomiri-indicator-network ]
137
-
services.xserver = {
138
-
enable = lib.mkDefault true;
139
-
displayManager.lightdm = {
140
-
enable = lib.mkDefault true;
141
-
greeters.lomiri.enable = lib.mkDefault true;
155
+
services.udisks2.enable = true;
156
+
services.upower.enable = true;
157
+
services.geoclue2.enable = true;
159
+
services.gnome.evolution-data-server = {
161
+
plugins = with pkgs; [
162
+
# TODO: lomiri.address-book-service
145
-
environment.pathsToLink = [
146
-
# Configs for inter-app data exchange system
147
-
"/share/lomiri-content-hub/peers"
148
-
# Configs for inter-app URL requests
149
-
"/share/lomiri-url-dispatcher/urls"
150
-
# Splash screens & other images for desktop apps launched via lomiri-app-launch
151
-
"/share/lomiri-app-launch"
152
-
# TODO Try to get maliit stuff working
153
-
"/share/maliit/plugins"
154
-
# At least the network indicator is still under the unity name, due to leftover Unity-isms
157
-
"/share/locale" # TODO LUITK hardcoded default locale path, fix individual apps to not rely on it
159
-
"/share/wallpapers"
166
+
services.telepathy.enable = true;
162
-
systemd.user.services = {
163
-
# Unconditionally run service that collects system-installed URL handlers before LUD
164
-
# TODO also run user-installed one?
165
-
"lomiri-url-dispatcher-update-system-dir" = {
166
-
description = "Lomiri URL dispatcher system directory updater";
167
-
wantedBy = [ "lomiri-url-dispatcher.service" ];
168
-
before = [ "lomiri-url-dispatcher.service" ];
171
-
ExecStart = "${pkgs.lomiri.lomiri-url-dispatcher}/libexec/lomiri-url-dispatcher/lomiri-update-directory /run/current-system/sw/share/lomiri-url-dispatcher/urls/";
168
+
services.displayManager = {
169
+
defaultSession = lib.mkDefault "lomiri";
170
+
sessionPackages = with pkgs.lomiri; [ lomiri-session ];
175
-
"lomiri-polkit-agent" = rec {
176
-
description = "Lomiri Polkit agent";
179
-
"lomiri-full-greeter.service"
180
-
"lomiri-full-shell.service"
181
-
"lomiri-greeter.service"
182
-
"lomiri-shell.service"
184
-
after = [ "graphical-session.target" ];
188
-
Restart = "always";
189
-
ExecStart = "${pkgs.lomiri.lomiri-polkit-agent}/libexec/lomiri-polkit-agent/policykit-agent";
173
+
services.xserver = {
174
+
enable = lib.mkDefault true;
175
+
displayManager.lightdm = {
176
+
enable = lib.mkDefault true;
177
+
greeters.lomiri.enable = lib.mkDefault true;
194
-
systemd.services = {
195
-
"dbus-com.lomiri.UserMetrics" = {
199
-
BusName = "com.lomiri.UserMetrics";
200
-
User = "usermetrics";
201
-
StandardOutput = "syslog";
202
-
SyslogIdentifier = "com.lomiri.UserMetrics";
203
-
ExecStart = "${pkgs.lomiri.libusermetrics}/libexec/libusermetrics/usermetricsservice";
205
-
// lib.optionalAttrs (!config.security.apparmor.enable) {
206
-
# Due to https://gitlab.com/ubports/development/core/libusermetrics/-/issues/8, auth must be disabled when not using AppArmor, lest the next database usage breaks
207
-
Environment = "USERMETRICS_NO_AUTH=1";
181
+
environment.pathsToLink = [
182
+
# Configs for inter-app data exchange system
183
+
"/share/lomiri-content-hub/peers"
184
+
# Configs for inter-app URL requests
185
+
"/share/lomiri-url-dispatcher/urls"
186
+
# Splash screens & other images for desktop apps launched via lomiri-app-launch
187
+
"/share/lomiri-app-launch"
188
+
# TODO Try to get maliit stuff working
189
+
"/share/maliit/plugins"
190
+
# At least the network indicator is still under the unity name, due to leftover Unity-isms
196
+
systemd.user.services = {
197
+
# Unconditionally run service that collects system-installed URL handlers before LUD
198
+
# TODO also run user-installed one?
199
+
"lomiri-url-dispatcher-update-system-dir" = {
200
+
description = "Lomiri URL dispatcher system directory updater";
201
+
wantedBy = [ "lomiri-url-dispatcher.service" ];
202
+
before = [ "lomiri-url-dispatcher.service" ];
205
+
ExecStart = "${pkgs.lomiri.lomiri-url-dispatcher}/libexec/lomiri-url-dispatcher/lomiri-update-directory /run/current-system/sw/share/lomiri-url-dispatcher/urls/";
209
+
"lomiri-polkit-agent" = rec {
210
+
description = "Lomiri Polkit agent";
213
+
"lomiri-full-greeter.service"
214
+
"lomiri-full-shell.service"
215
+
"lomiri-greeter.service"
216
+
"lomiri-shell.service"
218
+
after = [ "graphical-session.target" ];
222
+
Restart = "always";
223
+
ExecStart = "${pkgs.lomiri.lomiri-polkit-agent}/libexec/lomiri-polkit-agent/policykit-agent";
212
-
users.users.usermetrics = {
213
-
group = "usermetrics";
214
-
home = "/var/lib/usermetrics";
216
-
isSystemUser = true;
228
+
systemd.services = {
229
+
"dbus-com.lomiri.UserMetrics" = {
233
+
BusName = "com.lomiri.UserMetrics";
234
+
User = "usermetrics";
235
+
StandardOutput = "syslog";
236
+
SyslogIdentifier = "com.lomiri.UserMetrics";
237
+
ExecStart = "${pkgs.lomiri.libusermetrics}/libexec/libusermetrics/usermetricsservice";
239
+
// lib.optionalAttrs (!config.security.apparmor.enable) {
240
+
# Due to https://gitlab.com/ubports/development/core/libusermetrics/-/issues/8, auth must be disabled when not using AppArmor, lest the next database usage breaks
241
+
Environment = "USERMETRICS_NO_AUTH=1";
219
-
users.groups.usermetrics = { };
246
+
users.users.usermetrics = {
247
+
group = "usermetrics";
248
+
home = "/var/lib/usermetrics";
250
+
isSystemUser = true;
253
+
users.groups.usermetrics = { };
meta.maintainers = lib.teams.lomiri.members;