From aa9576bceb56d4fe2fb24e6fb47001817baeab34 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Thu, 8 Oct 2015 14:53:37 +0200 Subject: [PATCH] installer: add graphical GNOME iso --- .../installation-cd-graphical-gnome.nix | 78 +++++++++++++++++++ ...tallation-cd-graphical-kde-new-kernel.nix} | 2 +- ....nix => installation-cd-graphical-kde.nix} | 0 .../services/x11/desktop-managers/gnome3.nix | 57 +++++++++----- nixos/release.nix | 2 +- .../gnome-3/3.18/core/gnome-shell/default.nix | 3 +- .../gnome-3/3.18/core/nautilus/default.nix | 3 +- pkgs/desktops/gnome-3/3.18/default.nix | 3 + pkgs/desktops/gnome-3/3.18/installer.nix | 15 ++++ 9 files changed, 140 insertions(+), 23 deletions(-) create mode 100644 nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix rename nixos/modules/installer/cd-dvd/{installation-cd-graphical-new-kernel.nix => installation-cd-graphical-kde-new-kernel.nix} (60%) rename nixos/modules/installer/cd-dvd/{installation-cd-graphical.nix => installation-cd-graphical-kde.nix} (100%) create mode 100644 pkgs/desktops/gnome-3/3.18/installer.nix diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix new file mode 100644 index 00000000000..5725938465f --- /dev/null +++ b/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix @@ -0,0 +1,78 @@ +# This module defines a NixOS installation CD that contains X11 and +# GNOME 3. + +{ config, lib, pkgs, ... }: + +with lib; + +{ + imports = [ ./installation-cd-base.nix ]; + + services.xserver = { + enable = true; + # GDM doesn't start in virtual machines with ISO + displayManager.slim = { + enable = true; + defaultUser = "root"; + autoLogin = true; + }; + desktopManager.gnome3 = { + enable = true; + extraGSettingsOverrides = '' + [org.gnome.desktop.background] + show-desktop-icons=true + + [org.gnome.nautilus.desktop] + trash-icon-visible=false + volumes-visible=false + home-icon-visible=false + network-icon-visible=false + ''; + + extraGSettingsOverridePackages = [ pkgs.gnome3.nautilus ]; + }; + }; + + environment.systemPackages = + [ # Include gparted for partitioning disks. + pkgs.gparted + + # Include some editors. + pkgs.vim + pkgs.bvi # binary editor + pkgs.joe + + pkgs.glxinfo + ]; + + # Don't start the X server by default. + services.xserver.autorun = mkForce false; + + # Auto-login as root. + services.xserver.displayManager.gdm.autoLogin = { + enable = true; + user = "root"; + }; + + system.activationScripts.installerDesktop = let + # Must be executable + desktopFile = pkgs.writeScript "nixos-manual.desktop" '' + [Desktop Entry] + Version=1.0 + Type=Link + Name=NixOS Manual + URL=${config.system.build.manual.manual}/share/doc/nixos/index.html + Icon=system-help + ''; + + # use cp and chmod +x, we must be sure the apps are in the nix store though + in '' + mkdir -p /root/Desktop + ln -sfT ${desktopFile} /root/Desktop/nixos-manual.desktop + cp ${pkgs.gnome3.gnome_terminal}/share/applications/gnome-terminal.desktop /root/Desktop/gnome-terminal.desktop + chmod a+rx /root/Desktop/gnome-terminal.desktop + cp ${pkgs.gparted}/share/applications/gparted.desktop /root/Desktop/gparted.desktop + chmod a+rx /root/Desktop/gparted.desktop + ''; + +} diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical-new-kernel.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde-new-kernel.nix similarity index 60% rename from nixos/modules/installer/cd-dvd/installation-cd-graphical-new-kernel.nix rename to nixos/modules/installer/cd-dvd/installation-cd-graphical-kde-new-kernel.nix index 506b9292b01..a4bcd7079a4 100644 --- a/nixos/modules/installer/cd-dvd/installation-cd-graphical-new-kernel.nix +++ b/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde-new-kernel.nix @@ -1,7 +1,7 @@ { config, pkgs, ... }: { - imports = [ ./installation-cd-graphical.nix ]; + imports = [ ./installation-cd-graphical-kde.nix ]; boot.kernelPackages = pkgs.linuxPackages_latest; } diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix similarity index 100% rename from nixos/modules/installer/cd-dvd/installation-cd-graphical.nix rename to nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix index 4dd631d8751..be7700424bc 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome3.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome3.nix @@ -27,19 +27,24 @@ let nixos-gsettings-desktop-schemas = pkgs.stdenv.mkDerivation { name = "nixos-gsettings-desktop-schemas"; - buildInputs = [ pkgs.nixos-artwork ]; buildCommand = '' - mkdir -p $out/share/nixos-gsettings-schemas/nixos-gsettings-desktop-schemas - cp -rf ${gnome3.gsettings_desktop_schemas}/share/gsettings-schemas/gsettings-desktop-schemas*/glib-2.0 $out/share/nixos-gsettings-schemas/nixos-gsettings-desktop-schemas/ - chmod -R a+w $out/share/nixos-gsettings-schemas/nixos-gsettings-desktop-schemas - cat - > $out/share/nixos-gsettings-schemas/nixos-gsettings-desktop-schemas/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF + mkdir -p $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas + cp -rf ${gnome3.gsettings_desktop_schemas}/share/gsettings-schemas/gsettings-desktop-schemas*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas + + ${concatMapStrings (pkg: "cp -rf ${pkg}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas\n") cfg.extraGSettingsOverridePackages} + + chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides + cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF [org.gnome.desktop.background] picture-uri='${pkgs.nixos-artwork}/share/artwork/gnome/Gnome_Dark.png' [org.gnome.desktop.screensaver] picture-uri='${pkgs.nixos-artwork}/share/artwork/gnome/Gnome_Dark.png' + + ${cfg.extraGSettingsOverrides} EOF - ${pkgs.glib}/bin/glib-compile-schemas $out/share/nixos-gsettings-schemas/nixos-gsettings-desktop-schemas/glib-2.0/schemas/ + + ${pkgs.glib}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/ ''; }; @@ -47,19 +52,33 @@ in { options = { - services.xserver.desktopManager.gnome3.enable = mkOption { - default = false; - example = true; - description = "Enable Gnome 3 desktop manager."; - }; + services.xserver.desktopManager.gnome3 = { + enable = mkOption { + default = false; + example = true; + description = "Enable Gnome 3 desktop manager."; + }; - services.xserver.desktopManager.gnome3.sessionPath = mkOption { - default = []; - example = literalExample "[ pkgs.gnome3.gpaste ]"; - description = "Additional list of packages to be added to the session search path. - Useful for gnome shell extensions or gsettings-conditionated autostart."; - apply = list: list ++ [ gnome3.gnome_shell gnome3.gnome-shell-extensions ]; - }; + sessionPath = mkOption { + default = []; + example = literalExample "[ pkgs.gnome3.gpaste ]"; + description = "Additional list of packages to be added to the session search path. + Useful for gnome shell extensions or gsettings-conditionated autostart."; + apply = list: list ++ [ gnome3.gnome_shell gnome3.gnome-shell-extensions ]; + }; + + extraGSettingsOverrides = mkOption { + default = ""; + type = types.lines; + description = "Additional gsettings overrides."; + }; + + extraGSettingsOverridePackages = mkOption { + default = []; + type = types.listOf types.path; + description = "List of packages for which gsettings are overridden."; + }; + }; environment.gnome3.packageSet = mkOption { type = types.nullOr types.package; @@ -130,7 +149,7 @@ in { export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${mimeAppsList}/share # Override gsettings-desktop-schema - export XDG_DATA_DIRS=${nixos-gsettings-desktop-schemas}/share/nixos-gsettings-schemas/nixos-gsettings-desktop-schemas''${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS + export XDG_DATA_DIRS=${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides''${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS # Let nautilus find extensions export NAUTILUS_EXTENSION_DIR=${config.system.path}/lib/nautilus/extensions-3.0/ diff --git a/nixos/release.nix b/nixos/release.nix index d9f3e46b27c..76ca15ef97f 100644 --- a/nixos/release.nix +++ b/nixos/release.nix @@ -113,7 +113,7 @@ in rec { }); iso_graphical = forAllSystems (system: makeIso { - module = ./modules/installer/cd-dvd/installation-cd-graphical.nix; + module = ./modules/installer/cd-dvd/installation-cd-graphical-kde.nix; type = "graphical"; inherit system; }); diff --git a/pkgs/desktops/gnome-3/3.18/core/gnome-shell/default.nix b/pkgs/desktops/gnome-3/3.18/core/gnome-shell/default.nix index 899efc5443b..11d78cd6132 100644 --- a/pkgs/desktops/gnome-3/3.18/core/gnome-shell/default.nix +++ b/pkgs/desktops/gnome-3/3.18/core/gnome-shell/default.nix @@ -37,7 +37,8 @@ stdenv.mkDerivation rec { --prefix PATH : "${unzip}/bin" \ --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \ --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \ - --suffix XDG_DATA_DIRS : "${gnome_themes_standard}/share:$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" + --prefix XDG_DATA_DIRS : "${gnome_themes_standard}/share:$out/share:$XDG_ICON_DIRS" \ + --suffix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" wrapProgram "$out/libexec/gnome-shell-calendar-server" \ --prefix XDG_DATA_DIRS : "${evolution_data_server}/share:$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" diff --git a/pkgs/desktops/gnome-3/3.18/core/nautilus/default.nix b/pkgs/desktops/gnome-3/3.18/core/nautilus/default.nix index f28e86d7bad..ff9f847d3cd 100644 --- a/pkgs/desktops/gnome-3/3.18/core/nautilus/default.nix +++ b/pkgs/desktops/gnome-3/3.18/core/nautilus/default.nix @@ -13,7 +13,8 @@ stdenv.mkDerivation rec { wrapProgram "$out/bin/nautilus" \ --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \ --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \ - --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$out/share:$GSETTINGS_SCHEMAS_PATH" + --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$out/share" \ + --suffix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" ''; patches = [ ./extension_dir.patch ]; diff --git a/pkgs/desktops/gnome-3/3.18/default.nix b/pkgs/desktops/gnome-3/3.18/default.nix index f949eb1b208..8234d21f39e 100644 --- a/pkgs/desktops/gnome-3/3.18/default.nix +++ b/pkgs/desktops/gnome-3/3.18/default.nix @@ -65,6 +65,9 @@ let # Simplify the nixos module and gnome packages defaultIconTheme = adwaita-icon-theme; +# ISO installer + installerIso = callPackage ./installer.nix {}; + #### Core (http://ftp.acc.umu.se/pub/GNOME/core/) adwaita-icon-theme = callPackage ./core/adwaita-icon-theme { }; diff --git a/pkgs/desktops/gnome-3/3.18/installer.nix b/pkgs/desktops/gnome-3/3.18/installer.nix new file mode 100644 index 00000000000..e4d64ac9e88 --- /dev/null +++ b/pkgs/desktops/gnome-3/3.18/installer.nix @@ -0,0 +1,15 @@ +{ isoBaseName ? "nixos-graphical-gnome", system ? builtins.currentSystem +, extraModules ? [] }: + +let + + module = ../../../../nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix; + + config = (import ../../../../nixos/lib/eval-config.nix { + inherit system; + modules = [ module { isoImage.isoBaseName = isoBaseName; } ] ++ extraModules; + }).config; + +in + config.system.build.isoImage +