Unverified Commit d593b747 authored by Cosima Neidahl's avatar Cosima Neidahl Committed by GitHub
Browse files

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

parents 253c2c14 6525fbba
Loading
Loading
Loading
Loading
+18 −24
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -64,50 +64,14 @@ let
        ];
      }
      ''
        magick -size 640x480 canvas:white -pointsize 30 -fill black -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
        magick -size 640x480 canvas:black -pointsize 30 -fill white -annotate +100+100 '${wallpaperText}' $out
      '';

  lomiriWallpaperDconfSettings = pkgs: {
    settings = {
      "org/gnome/desktop/background" = {
        picture-uri = "file://${wallpaperFile pkgs}";
      };
  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}";
    };
  };

@@ -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'")
      '';
+0 −52
Original line number Diff line number Diff line
{
  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
''
+0 −1
Original line number Diff line number Diff line
@@ -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 { };