diff --git a/pkgs/applications/window-managers/i3/default.nix b/pkgs/applications/window-managers/i3/default.nix index df7ba69c5c5f..a4eb850f9390 100644 --- a/pkgs/applications/window-managers/i3/default.nix +++ b/pkgs/applications/window-managers/i3/default.nix @@ -1,72 +1,85 @@ { fetchurl, stdenv, which, pkgconfig, makeWrapper, libxcb, xcbutilkeysyms , xcbutil, xcbutilwm, xcbutilxrm, libstartup_notification, libX11, pcre, libev , yajl, xcb-util-cursor, coreutils, perl, pango, perlPackages, libxkbcommon -, xorgserver, xvfb_run }: +, xorgserver, xvfb_run, symlinkJoin, configFile ? null }: -stdenv.mkDerivation rec { - name = "i3-${version}"; +let version = "4.13"; - src = fetchurl { - url = "http://i3wm.org/downloads/${name}.tar.bz2"; - sha256 = "12ngz32swh9n85xy0cz1lq16aqi9ys5hq19v589q9a97wn1k3hcl"; - }; + i3 = stdenv.mkDerivation rec { + name = "i3-${version}"; - nativeBuildInputs = [ which pkgconfig makeWrapper ]; + src = fetchurl { + url = "http://i3wm.org/downloads/${name}.tar.bz2"; + sha256 = "12ngz32swh9n85xy0cz1lq16aqi9ys5hq19v589q9a97wn1k3hcl"; + }; - buildInputs = [ - libxcb xcbutilkeysyms xcbutil xcbutilwm xcbutilxrm libxkbcommon - libstartup_notification libX11 pcre libev yajl xcb-util-cursor perl pango - perlPackages.AnyEventI3 perlPackages.X11XCB perlPackages.IPCRun - perlPackages.ExtUtilsPkgConfig perlPackages.TestMore perlPackages.InlineC - xorgserver xvfb_run - ]; + nativeBuildInputs = [ which pkgconfig makeWrapper ]; - configureFlags = [ "--disable-builddir" ]; + buildInputs = [ + libxcb xcbutilkeysyms xcbutil xcbutilwm xcbutilxrm libxkbcommon + libstartup_notification libX11 pcre libev yajl xcb-util-cursor perl pango + perlPackages.AnyEventI3 perlPackages.X11XCB perlPackages.IPCRun + perlPackages.ExtUtilsPkgConfig perlPackages.TestMore perlPackages.InlineC + xorgserver xvfb_run + ]; - enableParallelBuilding = true; + configureFlags = [ "--disable-builddir" ]; - postPatch = '' - patchShebangs . - ''; + enableParallelBuilding = true; - # Tests have been failing (at least for some people in some cases) - # and have been disabled until someone wants to fix them. Some - # initial digging uncovers that the tests call out to `git`, which - # they shouldn't, and then even once that's fixed have some - # perl-related errors later on. For more, see - # https://github.com/NixOS/nixpkgs/issues/7957 - doCheck = false; # stdenv.system == "x86_64-linux"; - - checkPhase = stdenv.lib.optionalString (stdenv.system == "x86_64-linux") - '' - (cd testcases && xvfb-run ./complete-run.pl -p 1 --keep-xserver-output) - ! grep -q '^not ok' testcases/latest/complete-run.log - ''; - - postInstall = '' - wrapProgram "$out/bin/i3-save-tree" --prefix PERL5LIB ":" "$PERL5LIB" - for program in $out/bin/i3-sensible-*; do - sed -i 's/which/command -v/' $program - done - ''; - - separateDebugInfo = true; - - meta = with stdenv.lib; { - description = "A tiling window manager"; - homepage = "http://i3wm.org"; - maintainers = with maintainers; [ garbas modulistic fpletz ]; - license = licenses.bsd3; - platforms = platforms.all; - - longDescription = '' - A tiling window manager primarily targeted at advanced users and - developers. Based on a tree as data structure, supports tiling, - stacking, and tabbing layouts, handled dynamically, as well as - floating windows. Configured via plain text file. Multi-monitor. - UTF-8 clean. + postPatch = '' + patchShebangs . ''; - }; + # Tests have been failing (at least for some people in some cases) + # and have been disabled until someone wants to fix them. Some + # initial digging uncovers that the tests call out to `git`, which + # they shouldn't, and then even once that's fixed have some + # perl-related errors later on. For more, see + # https://github.com/NixOS/nixpkgs/issues/7957 + doCheck = false; # stdenv.system == "x86_64-linux"; + + checkPhase = stdenv.lib.optionalString (stdenv.system == "x86_64-linux") + '' + (cd testcases && xvfb-run ./complete-run.pl -p 1 --keep-xserver-output) + ! grep -q '^not ok' testcases/latest/complete-run.log + ''; + + postInstall = '' + wrapProgram "$out/bin/i3-save-tree" --prefix PERL5LIB ":" "$PERL5LIB" + for program in $out/bin/i3-sensible-*; do + sed -i 's/which/command -v/' $program + done + ''; + + separateDebugInfo = true; + + meta = with stdenv.lib; { + description = "A tiling window manager"; + homepage = "http://i3wm.org"; + maintainers = with maintainers; [ garbas modulistic fpletz ]; + license = licenses.bsd3; + platforms = platforms.all; + + longDescription = '' + A tiling window manager primarily targeted at advanced users and + developers. Based on a tree as data structure, supports tiling, + stacking, and tabbing layouts, handled dynamically, as well as + floating windows. Configured via plain text file. Multi-monitor. + UTF-8 clean. + ''; + }; + + }; +in if configFile == null then i3 else symlinkJoin { + name = "i3-with-config-${version}"; + paths = [ i3 ]; + + buildInputs = [ makeWrapper ]; + + postBuild = '' + wrapProgram $out/bin/i3 \ + --add-flags "-c ${configFile}" + ''; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8daca6d931c0..ae1d3b6dc19f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14483,6 +14483,8 @@ with pkgs; i3 = callPackage ../applications/window-managers/i3 { xcb-util-cursor = if stdenv.isDarwin then xcb-util-cursor-HEAD else xcb-util-cursor; + + configFile = config.i3.configFile or null; }; i3-gaps = callPackage ../applications/window-managers/i3/gaps.nix { };