nixos/lomiri: Replace NIX_GSETTINGS_OVERRIDES_DIR with Dconf database (#430212)

This commit is contained in:
Cosima Neidahl
2025-08-08 12:25:03 +02:00
committed by GitHub
4 changed files with 40 additions and 127 deletions
@@ -7,9 +7,6 @@
let
cfg = config.services.desktopManager.lomiri;
nixos-gsettings-overrides = pkgs.lomiri.lomiri-gsettings-overrides.override {
inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages;
};
in
{
options.services.desktopManager.lomiri = {
@@ -25,18 +22,6 @@ in
type = lib.types.bool;
default = config.services.xserver.displayManager.lightdm.greeters.lomiri.enable || cfg.enable;
};
extraGSettingsOverrides = lib.mkOption {
description = "Additional GSettings overrides.";
type = lib.types.lines;
default = "";
};
extraGSettingsOverridePackages = lib.mkOption {
description = "List of packages for which GSettings are overridden.";
type = lib.types.listOf lib.types.path;
default = [ ];
};
};
config = lib.mkMerge [
@@ -58,16 +43,26 @@ in
"/share/wallpapers"
];
# Override GSettings defaults
sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
systemPackages = [
nixos-gsettings-overrides # GSettings default overrides
]
++ (with pkgs.lomiri; [
systemPackages = with pkgs.lomiri; [
lomiri-wallpapers # default + additional wallpaper
suru-icon-theme # basic indicator icons
]);
];
};
# Override GSettings defaults
programs.dconf = {
enable = true;
profiles.user.databases = [
{
settings = {
"com/lomiri/shell/launcher" = {
logo-picture-uri = "file://${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake-white.svg";
home-button-background-color = "#5277C3";
};
};
lockAll = true;
}
];
};
fonts.packages = with pkgs; [
@@ -156,7 +151,6 @@ in
# Copy-pasted basic stuff
hardware.graphics.enable = lib.mkDefault true;
fonts.enableDefaultPackages = lib.mkDefault true;
programs.dconf.enable = lib.mkDefault true;
services.accounts-daemon.enable = true;
+22 -50
View File
@@ -64,52 +64,16 @@ let
];
}
''
magick -size 640x480 canvas:white -pointsize 30 -fill black -annotate +100+100 '${wallpaperText}' $out
magick -size 640x480 canvas:black -pointsize 30 -fill white -annotate +100+100 '${wallpaperText}' $out
'';
# gsettings tool with access to wallpaper schema
lomiri-gsettings =
pkgs:
pkgs.stdenv.mkDerivation {
name = "lomiri-gsettings";
dontUnpack = true;
nativeBuildInputs = with pkgs; [
glib
wrapGAppsHook3
];
buildInputs = with pkgs; [
# Not using the Lomiri-namespaced setting yet
# lomiri.lomiri-schemas
gsettings-desktop-schemas
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin
ln -s ${pkgs.lib.getExe' pkgs.glib "gsettings"} $out/bin/lomiri-gsettings
runHook postInstall
'';
};
setLomiriWallpaperService =
pkgs:
let
lomiriServices = [
"lomiri.service"
"lomiri-full-greeter.service"
"lomiri-full-shell.service"
"lomiri-greeter.service"
"lomiri-shell.service"
];
in
rec {
description = "Set Lomiri wallpaper to something OCR-able";
wantedBy = lomiriServices;
before = lomiriServices;
serviceConfig = {
Type = "oneshot";
# Not using the Lomiri-namespaed settings yet
# ExecStart = "${lomiri-gsettings pkgs}/bin/lomiri-gsettings set com.lomiri.Shell background-picture-uri file://${wallpaperFile pkgs}";
ExecStart = "${lomiri-gsettings pkgs}/bin/lomiri-gsettings set org.gnome.desktop.background picture-uri file://${wallpaperFile pkgs}";
lomiriWallpaperDconfSettings = pkgs: {
settings = {
"org/gnome/desktop/background" = {
picture-uri = "file://${wallpaperFile pkgs}";
};
};
};
sharedTestFunctions = ''
def wait_for_text(text):
@@ -413,12 +377,14 @@ in
];
};
programs.dconf.profiles.user.databases = [
(lomiriWallpaperDconfSettings pkgs)
];
# Help with OCR
systemd.tmpfiles.settings = {
"10-lomiri-test-setup" = terminalOcrTmpfilesSetup { inherit pkgs lib config; };
};
systemd.user.services.set-lomiri-wallpaper = setLomiriWallpaperService pkgs;
};
enableOCR = true;
@@ -562,12 +528,14 @@ in
];
};
programs.dconf.profiles.user.databases = [
(lomiriWallpaperDconfSettings pkgs)
];
# Help with OCR
systemd.tmpfiles.settings = {
"10-lomiri-test-setup" = terminalOcrTmpfilesSetup { inherit pkgs lib config; };
};
systemd.user.services.set-lomiri-wallpaper = setLomiriWallpaperService pkgs;
};
enableOCR = true;
@@ -710,7 +678,9 @@ in
environment.etc."${wallpaperName}".source = wallpaperFile pkgs;
systemd.user.services.set-lomiri-wallpaper = setLomiriWallpaperService pkgs;
programs.dconf.profiles.user.databases = [
(lomiriWallpaperDconfSettings pkgs)
];
# Help with OCR
systemd.tmpfiles.settings = {
@@ -733,7 +703,8 @@ in
machine.wait_until_succeeds("pgrep -u lightdm -f 'lomiri --mode=greeter'")
# Start page shows current time
wait_for_text(r"(AM|PM)")
# And the greeter *actually* renders our wallpaper!
wait_for_text(r"(AM|PM|Lorem|ipsum)")
machine.screenshot("lomiri_greeter_launched")
# Advance to login part
@@ -747,6 +718,7 @@ in
# Output rendering from Lomiri has started when it starts printing performance diagnostics
machine.wait_for_console_text("Last frame took")
# And the desktop doesn't render the wallpaper anymore. Grumble grumble...
# Look for datetime's clock, one of the last elements to load
wait_for_text(r"(AM|PM)")
machine.screenshot("lomiri_launched")
@@ -849,7 +821,7 @@ in
ocr = [ "Log Out" ];
extraCheck = ''
# We should be able to log out and return to the greeter
mouse_click(600, 280) # "Log Out"
mouse_click(600, 250) # "Log Out"
mouse_click(340, 220) # confirm logout
machine.wait_until_fails("pgrep -u ${user} -f 'lomiri --mode=full-shell'")
'';
@@ -1,52 +0,0 @@
{
lib,
runCommand,
glib,
lomiri-schemas,
lomiri-wallpapers,
nixos-icons,
writeText,
extraGSettingsOverrides ? "",
extraGSettingsOverridePackages ? [ ],
nixos-artwork,
}:
let
# Overriding the background picture should be possible, but breaks within the VM tests.
# It results in either a grey background (prolly indicating an error somewhere)
# or hangs the session (also happens when using LSS, which sets it via AccountsService).
#
# So we can only override the launcher button details.
# Button colour: https://github.com/NixOS/nixos-artwork/blob/51a27e4a011e95cb559e37d32c44cf89b50f5154/logo/README.md#colours
gsettingsOverrides = writeText "lomiri-gschema-overrides" ''
[com.lomiri.Shell.Launcher]
logo-picture-uri='file://${nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake-white.svg'
home-button-background-color='#5277C3'
${extraGSettingsOverrides}
'';
gsettingsOverridePackages = [
lomiri-schemas
]
++ extraGSettingsOverridePackages;
in
runCommand "lomiri-gsettings-overrides" { preferLocalBuild = true; } ''
dataDir="$out/share/gsettings-schemas/nixos-gsettings-overrides"
schemaDir="$dataDir/glib-2.0/schemas"
mkdir -p "$schemaDir"
${lib.strings.concatMapStringsSep "\n" (
pkg:
"cp -rf \"${glib.getSchemaPath pkg}\"/*.xml \"${glib.getSchemaPath pkg}\"/*.gschema.override \"$schemaDir\""
) gsettingsOverridePackages}
chmod -R a+w "$dataDir"
cp --no-preserve=mode "${gsettingsOverrides}" "$schemaDir/zz-nixos-defaults.gschema.override"
${lib.getExe' glib.dev "glib-compile-schemas"} --strict "$schemaDir" | tee gcs.log
if grep 'No schema files found' gcs.log >/dev/null; then
exit 1
fi
''
-1
View File
@@ -31,7 +31,6 @@ let
teleports = callPackage ./applications/teleports { };
#### Data
lomiri-gsettings-overrides = callPackage ./data/lomiri-gsettings-overrides { };
lomiri-schemas = callPackage ./data/lomiri-schemas { };
lomiri-session = callPackage ./data/lomiri-session { };
lomiri-sounds = callPackage ./data/lomiri-sounds { };