From 731b61918c0b54d761657951e288318f2220ee0c Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Thu, 19 Jul 2018 14:00:41 -0700 Subject: [PATCH] [NixOS] Move package customizations to overlay --- nixos/configuration.nix | 94 +++++++---------------------------------- nixos/gitter.nix | 25 ++++++----- nixos/overlays.nix | 78 ++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 88 deletions(-) create mode 100644 nixos/overlays.nix diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5db97889..cf651608 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,6 +1,6 @@ -{ config, pkgs, ... }: +{ config, pkgs, options, ... }: let - gitter = with pkgs; callPackage ./gitter.nix { }; + my-overlays = import ./overlays.nix; my-python-packages = python-packages: with python-packages; [ appdirs requests @@ -11,81 +11,16 @@ let pip ]; python-with-my-packages = pkgs.python3.withPackages my-python-packages; - udiskie-appindicator = pkgs.udiskie.overrideAttrs (oldAttrs: rec { - version = "1.7.5"; - src = pkgs.fetchFromGitHub { - owner = "coldfix"; - repo = "udiskie"; - rev = version; - sha256 = "1mcdn8ha5d5nsmrzk6xnnsqrmk94rdrzym9sqm38zk5r8gpyl1k4"; - }; - propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [pkgs.libappindicator-gtk3]; - }); - clipit-master = pkgs.clipit.overrideAttrs (oldAttrs: rec { - version = "50d983514386029a1f133187902084b753458f32"; - preConfigure = "./autogen.sh"; - configureFlags = ["--with-gtk3" "--enable-appindicator"]; - src = pkgs.fetchFromGitHub { - owner = "IvanMalison"; - repo = "ClipIt"; - sha256 = "1d52zjnxmcp2kr4wvq2yn9fhr61v9scp91fxfvasvz5m7k1zagdn"; - rev = version; - }; - buildInputs = with pkgs; [ - autoconf automake intltool gtk3 xdotool hicolor-icon-theme - libappindicator-gtk3 - ]; - }); - pasystray-appindicator = with pkgs; pasystray.overrideAttrs (oldAttrs: rec { - buildInputs = oldAttrs.buildInputs ++ [libappindicator-gtk3]; - }); - customizable-notify-osd = with pkgs; notify-osd.overrideAttrs (oldAttrs: rec { - version = "0.9.35+16.04.20160415"; - baseURI = "https://launchpad.net/~leolik/+archive/leolik"; - src = fetchurl { - url = "${baseURI}/+files/notify-osd_${version}-0ubuntu1-leolik~ppa0.tar.gz"; - sha256 = "026dr46jh3xc4103wnslzy7pxbxkkpflh52c59j8vzwaa7bvvzkv"; - name = "notify-osd-customizable.tar.gz"; - }; - preConfigure = "./autogen.sh --libexecdir=$(out)/bin"; - buildInputs = with pkgs; [ - glib libwnck3 libnotify dbus-glib gnome3.gsettings-desktop-schemas - makeWrapper libtool gnome3.gnome-common - ]; - }); - keybase-gui-fixed = with pkgs; keybase-gui.overrideAttrs (oldAttrs: rec { - installPhase = '' - mkdir -p $out/bin - mv usr/share $out/share - mv opt/keybase $out/share/ - cat > $out/bin/keybase-gui <&2 - exit 1 - } - if [ ! -S "\$XDG_RUNTIME_DIR/keybase/keybased.sock" ]; then - echo "Keybase service doesn't seem to be running." >&2 - echo "You might need to run: keybase service" >&2 - checkFailed - fi - if [ -z "\$(keybase status | grep kbfsfuse)" ]; then - echo "Could not find kbfsfuse client in keybase status." >&2 - echo "You might need to run: kbfsfuse" >&2 - checkFailed - fi - exec $out/share/keybase/Keybase "\$@" - EOF - chmod +x $out/bin/keybase-gui - substituteInPlace $out/share/applications/keybase.desktop \ - --replace run_keybase $out/bin/keybase-gui - ''; - }); in { + nixpkgs.overlays = [ my-overlays ]; + # XXX: This ensures that all nix tools pick up the overlays that are set here + nix.nixPath = + # Prepend default nixPath values. + options.nix.nixPath.default ++ + # Append our nixpkgs-overlays. + [ "nixpkgs-overlays=/etc/nixos/overlays-compat/" ]; + nixpkgs.config.allowUnfree = true; security.sudo.wheelNeedsPassword = false; networking.networkmanager.enable = true; @@ -137,13 +72,14 @@ in kleopatra gitter google-chrome - + dfeet hexchat quassel keybase-gui-fixed kodi lxappearance rxvt_unicode + pulseeffects spotify termite vlc @@ -160,7 +96,7 @@ in # Desktop # haskellPackages.status-notifier-item autorandr - clipit-master + clipit compton feh gnome3.gpaste @@ -209,8 +145,9 @@ in # Tools bazaar binutils - dfeet + dex dpkg + file gcc gdb gitAndTools.git-sync @@ -236,6 +173,7 @@ in silver-searcher stow tmux + unzip valgrind wget wmctrl diff --git a/nixos/gitter.nix b/nixos/gitter.nix index ba8547f1..fa147f82 100644 --- a/nixos/gitter.nix +++ b/nixos/gitter.nix @@ -6,11 +6,15 @@ , nwjs, pango, systemd }: let gitterDirectorySuffix = "opt/gitter"; - doELFPatch = target: '' + doELFExePatch = target: '' patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \ --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \ $out/${gitterDirectorySuffix}/${target} ''; + doELFLibPatch = target: '' + patchelf --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \ + $out/${gitterDirectorySuffix}/${target} + ''; libPath = stdenv.lib.makeLibraryPath [ alsaLib atk cairo cups dbus expat fontconfig freetype gdk_pixbuf glib gnome3.gconf gtk3 libX11 libXScrnSaver libXcomposite libXcursor libXdamage @@ -35,15 +39,16 @@ in stdenv.mkDerivation rec { mkdir -p $out/{bin,opt/gitter,share/pixmaps} mv ./opt/Gitter/linux64/* $out/opt/gitter - ${doELFPatch "Gitter"} - ${doELFPatch "nacl_helper"} - ${doELFPatch "minidump_stackwalk"} - ${doELFPatch "nwjc"} - ${doELFPatch "chromedriver"} - ${doELFPatch "payload"} + ${doELFExePatch "Gitter"} + ${doELFExePatch "nacl_helper"} + ${doELFExePatch "minidump_stackwalk"} + ${doELFExePatch "nwjc"} + ${doELFExePatch "chromedriver"} + ${doELFExePatch "payload"} - patchelf --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \ - $out/${gitterDirectorySuffix}/lib/libnw.so + ${doELFLibPatch "lib/libnw.so"} + ${doELFLibPatch "lib/libnode.so"} + ${doELFLibPatch "lib/libffmpeg.so"} wrapProgram $out/${gitterDirectorySuffix}/Gitter --prefix LD_LIBRARY_PATH : ${libPath} @@ -54,7 +59,7 @@ in stdenv.mkDerivation rec { desktopItem = makeDesktopItem { name = pname; - exec = "Gitter"; + exec = "/usr/bin/env Gitter"; icon = pname; desktopName = "Gitter"; genericName = meta.description; diff --git a/nixos/overlays.nix b/nixos/overlays.nix new file mode 100644 index 00000000..b69ffdd7 --- /dev/null +++ b/nixos/overlays.nix @@ -0,0 +1,78 @@ +self: super: + +{ + gitter = super.callPackage ./gitter.nix { }; + clipit = super.clipit.overrideAttrs (oldAttrs: rec { + version = "50d983514386029a1f133187902084b753458f32"; + preConfigure = "./autogen.sh"; + configureFlags = ["--with-gtk3" "--enable-appindicator"]; + src = super.fetchFromGitHub { + owner = "IvanMalison"; + repo = "ClipIt"; + sha256 = "1d52zjnxmcp2kr4wvq2yn9fhr61v9scp91fxfvasvz5m7k1zagdn"; + rev = version; + }; + buildInputs = with self; [ + autoconf automake intltool gtk3 xdotool hicolor-icon-theme + libappindicator-gtk3 + ]; + }); + udiskie-appindicator = super.udiskie.overrideAttrs (oldAttrs: rec { + version = "1.7.5"; + src = super.fetchFromGitHub { + owner = "coldfix"; + repo = "udiskie"; + rev = version; + sha256 = "1mcdn8ha5d5nsmrzk6xnnsqrmk94rdrzym9sqm38zk5r8gpyl1k4"; + }; + propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [self.libappindicator-gtk3]; + }); + pasystray-appindicator = super.pasystray.overrideAttrs (oldAttrs: rec { + buildInputs = oldAttrs.buildInputs ++ [self.libappindicator-gtk3]; + }); + customizable-notify-osd = super.notify-osd.overrideAttrs (oldAttrs: rec { + version = "0.9.35+16.04.20160415"; + baseURI = "https://launchpad.net/~leolik/+archive/leolik"; + src = super.fetchurl { + url = "${baseURI}/+files/notify-osd_${version}-0ubuntu1-leolik~ppa0.tar.gz"; + sha256 = "026dr46jh3xc4103wnslzy7pxbxkkpflh52c59j8vzwaa7bvvzkv"; + name = "notify-osd-customizable.tar.gz"; + }; + preConfigure = "./autogen.sh --libexecdir=$(out)/bin"; + buildInputs = with self; [ + glib libwnck3 libnotify dbus-glib gnome3.gsettings-desktop-schemas + makeWrapper libtool gnome3.gnome-common + ]; + }); + keybase-gui-fixed = super.keybase-gui.overrideAttrs (oldAttrs: rec { + installPhase = '' + mkdir -p $out/bin + mv usr/share $out/share + mv opt/keybase $out/share/ + cat > $out/bin/keybase-gui <&2 + exit 1 + } + if [ ! -S "\$XDG_RUNTIME_DIR/keybase/keybased.sock" ]; then + echo "Keybase service doesn't seem to be running." >&2 + echo "You might need to run: keybase service" >&2 + checkFailed + fi + if [ -z "\$(keybase status | grep kbfsfuse)" ]; then + echo "Could not find kbfsfuse client in keybase status." >&2 + echo "You might need to run: kbfsfuse" >&2 + checkFailed + fi + exec $out/share/keybase/Keybase "\$@" + EOF + chmod +x $out/bin/keybase-gui + substituteInPlace $out/share/applications/keybase.desktop \ + --replace run_keybase $out/bin/keybase-gui + ''; + }); +}