From 7f13a3f5b8e8241c97612f74f8603025d1259c4d Mon Sep 17 00:00:00 2001 From: gnidorah Date: Tue, 4 Jul 2017 13:42:53 +0300 Subject: [PATCH 1/4] maxx: init at 1.0.0 --- .../services/x11/desktop-managers/default.nix | 2 +- .../services/x11/desktop-managers/maxx.nix | 46 +++++++++++++ pkgs/desktops/maxx/default.nix | 65 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 nixos/modules/services/x11/desktop-managers/maxx.nix create mode 100644 pkgs/desktops/maxx/default.nix diff --git a/nixos/modules/services/x11/desktop-managers/default.nix b/nixos/modules/services/x11/desktop-managers/default.nix index c207aab5de0..4b57d9641f5 100644 --- a/nixos/modules/services/x11/desktop-managers/default.nix +++ b/nixos/modules/services/x11/desktop-managers/default.nix @@ -19,7 +19,7 @@ in # E.g., if Plasma 5 is enabled, it supersedes xterm. imports = [ ./none.nix ./xterm.nix ./xfce.nix ./plasma5.nix ./lumina.nix - ./lxqt.nix ./enlightenment.nix ./gnome3.nix ./kodi.nix + ./lxqt.nix ./enlightenment.nix ./gnome3.nix ./kodi.nix ./maxx.nix ]; options = { diff --git a/nixos/modules/services/x11/desktop-managers/maxx.nix b/nixos/modules/services/x11/desktop-managers/maxx.nix new file mode 100644 index 00000000000..258348ee749 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/maxx.nix @@ -0,0 +1,46 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + xcfg = config.services.xserver; + cfg = xcfg.desktopManager.maxx; + deps = [ pkgs.gcc ] ++ cfg.extraPackages; +in { + options.services.xserver.desktopManager.maxx = { + enable = mkEnableOption "MaXX desktop environment"; + + extraPackages = mkOption { + type = with types; listOf package; + default = with pkgs; [ + xorg.xclock + ]; + description = '' + Extra packages visible to session. + ''; + }; + }; + + config = mkIf (xcfg.enable && cfg.enable) { + environment.systemPackages = [ pkgs.maxx ]; + + # there is hardcoded path in binaries + system.activationScripts.setup-maxx = '' + mkdir -p /opt + ln -sfn ${pkgs.maxx}/opt/MaXX /opt + ''; + + services.xserver.desktopManager.session = [ + { name = "MaXX"; + start = '' + export PATH="${makeBinPath deps}:$PATH" + export GTK_PATH="${pkgs.gtk-engine-murrine}/lib/gtk-2.0:${pkgs.gtk_engines}/lib/gtk-2.0:$GTK_PATH" + export GDK_PIXBUF_MODULE_FILE=$(echo ${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache) + + exec ${pkgs.maxx}/opt/MaXX/etc/skel/Xsession.dt + ''; + }]; + }; + + meta.maintainers = [ maintainers.gnidorah ]; +} diff --git a/pkgs/desktops/maxx/default.nix b/pkgs/desktops/maxx/default.nix new file mode 100644 index 00000000000..95cbd617dc2 --- /dev/null +++ b/pkgs/desktops/maxx/default.nix @@ -0,0 +1,65 @@ +{ stdenv, fetchurl +, libX11, libXext, libXi, libXau, libXrender, libXft, libXmu, libSM, libXcomposite, libXfixes, libXpm +, libXinerama, libXdamage, libICE, libXtst +, fontconfig, pango, cairo, glib, libxml2, atk, gtk2, gdk_pixbuf, mesa_noglu, ncurses5 +, bash }: + +let + version = "Indy-1.0.0"; + + deps = [ + libX11 libXext libXi libXau libXrender libXft libXmu libSM libXcomposite libXfixes libXpm + libXinerama libXdamage libICE libXtst + stdenv.cc.cc fontconfig pango cairo glib libxml2 atk gtk2 gdk_pixbuf mesa_noglu ncurses5 + ]; +in stdenv.mkDerivation { + name = "MaXX-${version}"; + + srcs = [ + (fetchurl { + url = "http://maxxinteractive.com/downloads/${version}/FEDORA/MaXX-${version}-NO-ARCH.tar.gz"; + sha256 = "004ia6xl8y2hmbq7j98ppgiwffjc62224x9q6w5z17sjibs8xcvx"; + }) + (fetchurl { + url = "http://maxxinteractive.com/downloads/${version}/FEDORA/MaXX-${version}-x86_64.tar.gz"; + sha256 = "134z7hinh01w43m6xiqgh939w5w79860g4kzsd911rfcl3z353av"; + }) + ]; + + buildPhase = '' + while IFS= read -r -d $'\0' i; do + if isELF "$i"; then + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$i" || true + patchelf --set-rpath "${stdenv.lib.makeLibraryPath deps}" "$i" + fi + done < <(find "." -type f -print0) + + substituteInPlace bin/adminterm \ + --replace /bin/bash ${bash}/bin/bash + + substituteInPlace share/misc/HOME/initMaXX-Desktop-Home.sh \ + --replace "cp " "cp --no-preserve=mode " + ''; + + installPhase = '' + maxx=$out/opt/MaXX + mkdir -p "$maxx" $out/share + + mv -- ./* "$maxx" + ln -s $maxx/share/icons $out/share + ln -s $maxx/share/themes $out/share + ''; + + meta = with stdenv.lib; { + description = "A replica of IRIX Interactive Desktop"; + homepage = http://www.maxxinteractive.com; + license = licenses.free; + maintainers = [ maintainers.gnidorah ]; + platforms = ["x86_64-linux"]; + hydraPlatforms = []; + longDescription = '' + A clone of IRIX Interactive Desktop made in agreement with SGI. + Provides simple and fast retro desktop environment. + ''; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0e27e56d83e..a492c1ba146 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -17574,6 +17574,8 @@ with pkgs; callPackage = newScope pkgs.mate; }); + maxx = callPackage ../desktops/maxx { }; + pantheon = recurseIntoAttrs rec { callPackage = newScope pkgs.pantheon; pantheon-terminal = callPackage ../desktops/pantheon/apps/pantheon-terminal { }; From 52deb4b46058b10a50af2b6dc04ff01c62f78c35 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Mon, 24 Jul 2017 13:19:45 +0300 Subject: [PATCH 2/4] maxx: 1.0.0 -> 1.1.0 --- .../services/x11/desktop-managers/maxx.nix | 2 +- pkgs/desktops/maxx/default.nix | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/nixos/modules/services/x11/desktop-managers/maxx.nix b/nixos/modules/services/x11/desktop-managers/maxx.nix index 258348ee749..bceb23c276e 100644 --- a/nixos/modules/services/x11/desktop-managers/maxx.nix +++ b/nixos/modules/services/x11/desktop-managers/maxx.nix @@ -13,7 +13,7 @@ in { extraPackages = mkOption { type = with types; listOf package; default = with pkgs; [ - xorg.xclock + xorg.xclock xsettingsd ]; description = '' Extra packages visible to session. diff --git a/pkgs/desktops/maxx/default.nix b/pkgs/desktops/maxx/default.nix index 95cbd617dc2..8cceb5a05d3 100644 --- a/pkgs/desktops/maxx/default.nix +++ b/pkgs/desktops/maxx/default.nix @@ -1,16 +1,16 @@ { stdenv, fetchurl , libX11, libXext, libXi, libXau, libXrender, libXft, libXmu, libSM, libXcomposite, libXfixes, libXpm -, libXinerama, libXdamage, libICE, libXtst -, fontconfig, pango, cairo, glib, libxml2, atk, gtk2, gdk_pixbuf, mesa_noglu, ncurses5 +, libXinerama, libXdamage, libICE, libXtst, libXaw +, fontconfig, pango, cairo, glib, libxml2, atk, gtk2, gdk_pixbuf, mesa_noglu, ncurses , bash }: let - version = "Indy-1.0.0"; + version = "Indy-1.1.0"; deps = [ libX11 libXext libXi libXau libXrender libXft libXmu libSM libXcomposite libXfixes libXpm - libXinerama libXdamage libICE libXtst - stdenv.cc.cc fontconfig pango cairo glib libxml2 atk gtk2 gdk_pixbuf mesa_noglu ncurses5 + libXinerama libXdamage libICE libXtst libXaw + stdenv.cc.cc fontconfig pango cairo glib libxml2 atk gtk2 gdk_pixbuf mesa_noglu ncurses ]; in stdenv.mkDerivation { name = "MaXX-${version}"; @@ -18,11 +18,11 @@ in stdenv.mkDerivation { srcs = [ (fetchurl { url = "http://maxxinteractive.com/downloads/${version}/FEDORA/MaXX-${version}-NO-ARCH.tar.gz"; - sha256 = "004ia6xl8y2hmbq7j98ppgiwffjc62224x9q6w5z17sjibs8xcvx"; + sha256 = "1d23j08wwrrn5cp7csv70pcz9jppcn0xb1894wkp0caaliy7g31y"; }) (fetchurl { url = "http://maxxinteractive.com/downloads/${version}/FEDORA/MaXX-${version}-x86_64.tar.gz"; - sha256 = "134z7hinh01w43m6xiqgh939w5w79860g4kzsd911rfcl3z353av"; + sha256 = "156p2lra184wyvibrihisd7cr1ivqaygsf0zfm26a12gx23b7708"; }) ]; @@ -47,7 +47,6 @@ in stdenv.mkDerivation { mv -- ./* "$maxx" ln -s $maxx/share/icons $out/share - ln -s $maxx/share/themes $out/share ''; meta = with stdenv.lib; { From b73ae0a695f3fec59d4d0c4613496e40e3c795c4 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Mon, 14 Aug 2017 11:13:49 +0300 Subject: [PATCH 3/4] maxx: move deps from module to package --- .../services/x11/desktop-managers/maxx.nix | 15 --------------- pkgs/desktops/maxx/default.nix | 12 ++++++++++-- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/nixos/modules/services/x11/desktop-managers/maxx.nix b/nixos/modules/services/x11/desktop-managers/maxx.nix index bceb23c276e..6a698658bdd 100644 --- a/nixos/modules/services/x11/desktop-managers/maxx.nix +++ b/nixos/modules/services/x11/desktop-managers/maxx.nix @@ -5,20 +5,9 @@ with lib; let xcfg = config.services.xserver; cfg = xcfg.desktopManager.maxx; - deps = [ pkgs.gcc ] ++ cfg.extraPackages; in { options.services.xserver.desktopManager.maxx = { enable = mkEnableOption "MaXX desktop environment"; - - extraPackages = mkOption { - type = with types; listOf package; - default = with pkgs; [ - xorg.xclock xsettingsd - ]; - description = '' - Extra packages visible to session. - ''; - }; }; config = mkIf (xcfg.enable && cfg.enable) { @@ -33,10 +22,6 @@ in { services.xserver.desktopManager.session = [ { name = "MaXX"; start = '' - export PATH="${makeBinPath deps}:$PATH" - export GTK_PATH="${pkgs.gtk-engine-murrine}/lib/gtk-2.0:${pkgs.gtk_engines}/lib/gtk-2.0:$GTK_PATH" - export GDK_PIXBUF_MODULE_FILE=$(echo ${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache) - exec ${pkgs.maxx}/opt/MaXX/etc/skel/Xsession.dt ''; }]; diff --git a/pkgs/desktops/maxx/default.nix b/pkgs/desktops/maxx/default.nix index 8cceb5a05d3..5bcc6e84152 100644 --- a/pkgs/desktops/maxx/default.nix +++ b/pkgs/desktops/maxx/default.nix @@ -1,8 +1,8 @@ -{ stdenv, fetchurl +{ stdenv, fetchurl, makeWrapper , libX11, libXext, libXi, libXau, libXrender, libXft, libXmu, libSM, libXcomposite, libXfixes, libXpm , libXinerama, libXdamage, libICE, libXtst, libXaw , fontconfig, pango, cairo, glib, libxml2, atk, gtk2, gdk_pixbuf, mesa_noglu, ncurses -, bash }: +, gcc, xclock, xsettingsd, bash, gtk-engine-murrine, gtk_engines, librsvg }: let version = "Indy-1.1.0"; @@ -26,6 +26,8 @@ in stdenv.mkDerivation { }) ]; + buildInputs = [ makeWrapper ]; + buildPhase = '' while IFS= read -r -d $'\0' i; do if isELF "$i"; then @@ -47,8 +49,14 @@ in stdenv.mkDerivation { mv -- ./* "$maxx" ln -s $maxx/share/icons $out/share + + wrapProgram $maxx/etc/skel/Xsession.dt \ + --prefix GTK_PATH : "${gtk-engine-murrine}/lib/gtk-2.0:${gtk_engines}/lib/gtk-2.0" \ + --prefix GDK_PIXBUF_MODULE_FILE : "$(echo ${librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)" ''; + propagatedUserEnvPkgs = [ gcc xclock xsettingsd ]; + meta = with stdenv.lib; { description = "A replica of IRIX Interactive Desktop"; homepage = http://www.maxxinteractive.com; From 15ae2cbeea340093d82ce6e935de9f8160e9d855 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Thu, 24 Aug 2017 19:34:08 +0300 Subject: [PATCH 4/4] maxx: use libredirect --- .../services/x11/desktop-managers/maxx.nix | 6 -- pkgs/desktops/maxx/default.nix | 58 +++++++++++++------ 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/nixos/modules/services/x11/desktop-managers/maxx.nix b/nixos/modules/services/x11/desktop-managers/maxx.nix index 6a698658bdd..d7bd2fc5eb0 100644 --- a/nixos/modules/services/x11/desktop-managers/maxx.nix +++ b/nixos/modules/services/x11/desktop-managers/maxx.nix @@ -13,12 +13,6 @@ in { config = mkIf (xcfg.enable && cfg.enable) { environment.systemPackages = [ pkgs.maxx ]; - # there is hardcoded path in binaries - system.activationScripts.setup-maxx = '' - mkdir -p /opt - ln -sfn ${pkgs.maxx}/opt/MaXX /opt - ''; - services.xserver.desktopManager.session = [ { name = "MaXX"; start = '' diff --git a/pkgs/desktops/maxx/default.nix b/pkgs/desktops/maxx/default.nix index 5bcc6e84152..3e8ca1f388e 100644 --- a/pkgs/desktops/maxx/default.nix +++ b/pkgs/desktops/maxx/default.nix @@ -1,16 +1,21 @@ -{ stdenv, fetchurl, makeWrapper +{ stdenv, fetchurl, makeWrapper, libredirect, gcc-unwrapped, bash, gtk-engine-murrine, gtk_engines, librsvg + , libX11, libXext, libXi, libXau, libXrender, libXft, libXmu, libSM, libXcomposite, libXfixes, libXpm -, libXinerama, libXdamage, libICE, libXtst, libXaw -, fontconfig, pango, cairo, glib, libxml2, atk, gtk2, gdk_pixbuf, mesa_noglu, ncurses -, gcc, xclock, xsettingsd, bash, gtk-engine-murrine, gtk_engines, librsvg }: +, libXinerama, libXdamage, libICE, libXtst, libXaw, fontconfig, pango, cairo, glib, libxml2, atk, gtk2 +, gdk_pixbuf, mesa_noglu, ncurses + +, xclock, xsettingsd }: let version = "Indy-1.1.0"; deps = [ - libX11 libXext libXi libXau libXrender libXft libXmu libSM libXcomposite libXfixes libXpm - libXinerama libXdamage libICE libXtst libXaw - stdenv.cc.cc fontconfig pango cairo glib libxml2 atk gtk2 gdk_pixbuf mesa_noglu ncurses + stdenv.cc.cc libX11 libXext libXi libXau libXrender libXft libXmu libSM libXcomposite libXfixes libXpm + libXinerama libXdamage libICE libXtst libXaw fontconfig pango cairo glib libxml2 atk gtk2 + gdk_pixbuf mesa_noglu ncurses + ]; + runtime_deps = [ + xclock xsettingsd ]; in stdenv.mkDerivation { name = "MaXX-${version}"; @@ -26,15 +31,12 @@ in stdenv.mkDerivation { }) ]; - buildInputs = [ makeWrapper ]; + nativeBuildInputs = [ makeWrapper ]; buildPhase = '' while IFS= read -r -d $'\0' i; do - if isELF "$i"; then - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$i" || true - patchelf --set-rpath "${stdenv.lib.makeLibraryPath deps}" "$i" - fi - done < <(find "." -type f -print0) + substituteInPlace "$i" --replace /opt/MaXX $out/opt/MaXX + done < <(find "." -type f -exec grep -Iq /opt/MaXX {} \; -and -print0) substituteInPlace bin/adminterm \ --replace /bin/bash ${bash}/bin/bash @@ -52,15 +54,37 @@ in stdenv.mkDerivation { wrapProgram $maxx/etc/skel/Xsession.dt \ --prefix GTK_PATH : "${gtk-engine-murrine}/lib/gtk-2.0:${gtk_engines}/lib/gtk-2.0" \ - --prefix GDK_PIXBUF_MODULE_FILE : "$(echo ${librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)" - ''; + --prefix GDK_PIXBUF_MODULE_FILE : "$(echo ${librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)" \ + --prefix PATH : ${stdenv.lib.makeBinPath runtime_deps} - propagatedUserEnvPkgs = [ gcc xclock xsettingsd ]; + while IFS= read -r -d $'\0' i; do + if isELF "$i"; then + bin=`patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$i"; echo $?` + patchelf --set-rpath "${stdenv.lib.makeLibraryPath deps}" "$i" + if [ "$bin" -eq 0 ]; then + wrapProgram "$i" \ + --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \ + --set NIX_REDIRECTS /opt/MaXX=$maxx + fi + fi + done < <(find "$maxx" -type f -print0) + + cp ${gcc-unwrapped}/bin/cpp ${gcc-unwrapped}/libexec/gcc/*/*/cc1 $maxx/bin + for i in $maxx/bin/cpp $maxx/bin/cc1 + do + wrapProgram "$i" \ + --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \ + --set NIX_REDIRECTS /opt/MaXX=$maxx + done + ''; meta = with stdenv.lib; { description = "A replica of IRIX Interactive Desktop"; homepage = http://www.maxxinteractive.com; - license = licenses.free; + license = { + url = http://www.maxxinteractive.com/site/?page_id=97; + free = true; + }; maintainers = [ maintainers.gnidorah ]; platforms = ["x86_64-linux"]; hydraPlatforms = [];