From 80b2ac1cc501af779347ec47bf560e1dbab5ceac Mon Sep 17 00:00:00 2001 From: Jacob Birkett Date: Tue, 2 May 2023 10:54:29 -0700 Subject: Nix: fix recursion in package overlays (#2210) * nix: flake: fix improperly using prev.callPackage * flake: cleanup with let blocks * flake: make overlays use recursive packages flake: separate overlays into multiple, combine into default * nix: overlays: extract to own file * flake: devShells: remove stdenv override * overlays: hl-pkgs: xdph: remove needless overlay Since the packages are now built with the overlays combined from inputs and self, overriding specific dependencies (anywhere) is no longer necessary. * nix: overlays: extras: include xdph and share-picker * nix: overlays: hl-pkgs: remove stdenv override --- nix/lib.nix | 8 +++++ nix/overlays.nix | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 nix/lib.nix create mode 100644 nix/overlays.nix (limited to 'nix') diff --git a/nix/lib.nix b/nix/lib.nix new file mode 100644 index 00000000..1a413352 --- /dev/null +++ b/nix/lib.nix @@ -0,0 +1,8 @@ +final: prev: let + lib = final; + + mkJoinedOverlays = overlays: final: prev: + lib.foldl' (attrs: overlay: attrs // (overlay final prev)) {} overlays; +in prev // { + inherit mkJoinedOverlays; +} diff --git a/nix/overlays.nix b/nix/overlays.nix new file mode 100644 index 00000000..48eb4b5f --- /dev/null +++ b/nix/overlays.nix @@ -0,0 +1,108 @@ +{ + self, + lib, + inputs, +}: let + props = builtins.fromJSON (builtins.readFile ../props.json); + + mkDate = longDate: (lib.concatStringsSep "-" [ + (builtins.substring 0 4 longDate) + (builtins.substring 4 2 longDate) + (builtins.substring 6 2 longDate) + ]); +in { + # Packages for variations of Hyprland, and its dependencies. + hyprland-packages = final: prev: { + hyprland = final.callPackage ./default.nix { + version = + props.version + + "+date=" + + (mkDate (self.lastModifiedDate or "19700101")) + + "_" + + (self.shortRev or "dirty"); + wlroots = final.wlroots-hyprland; + commit = self.rev or ""; + inherit (final) udis86 hyprland-protocols; + }; + + hyprland-debug = final.hyprland.override {debug = true;}; + hyprland-hidpi = final.hyprland.override {hidpiXWayland = true;}; + hyprland-nvidia = final.hyprland.override {nvidiaPatches = true;}; + hyprland-no-hidpi = + builtins.trace + "hyprland-no-hidpi was removed. Please use the default package." + final.hyprland; + + udis86 = final.callPackage ./udis86.nix {}; + }; + + # Packages for extra software recommended for usage with Hyprland, + # including forked or patched packages for compatibility. + hyprland-extras = lib.mkJoinedOverlays [ + # Include any inputs' specific overlays whose attributes should + # be re-exported by the Hyprland flake. + # + inputs.xdph.overlays.default + # Provides: + # - xdg-desktop-portal-hyprland + # - hyprland-share-picker + # + # Attributes for `hyprland-extras` defined by this flake can + # go in the oberlay below. + (final: prev: { + waybar-hyprland = prev.waybar.overrideAttrs (old: { + postPatch = '' + # use hyprctl to switch workspaces + sed -i 's/zext_workspace_handle_v1_activate(workspace_handle_);/const std::string command = "hyprctl dispatch workspace " + name_;\n\tsystem(command.c_str());/g' src/modules/wlr/workspace_manager.cpp + ''; + mesonFlags = old.mesonFlags ++ ["-Dexperimental=true"]; + }); + }) + ]; + + # Patched version of wlroots for Hyprland. + # It is under a new package name so as to not conflict with + # the standard version in nixpkgs. + wlroots-hyprland = final: prev: { + wlroots-hyprland = final.callPackage ./wlroots.nix { + version = + mkDate (inputs.wlroots.lastModifiedDate or "19700101") + + "_" + + (inputs.wlroots.shortRev or "dirty"); + src = inputs.wlroots; + libdisplay-info = prev.libdisplay-info.overrideAttrs (old: { + version = "0.1.1+date=2023-03-02"; + src = final.fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "emersion"; + repo = old.pname; + rev = "147d6611a64a6ab04611b923e30efacaca6fc678"; + sha256 = "sha256-/q79o13Zvu7x02SBGu0W5yQznQ+p7ltZ9L6cMW5t/o4="; + }; + }); + libliftoff = prev.libliftoff.overrideAttrs (old: { + version = "0.5.0-dev"; + src = final.fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "emersion"; + repo = old.pname; + rev = "d98ae243280074b0ba44bff92215ae8d785658c0"; + sha256 = "sha256-DjwlS8rXE7srs7A8+tHqXyUsFGtucYSeq6X0T/pVOc8="; + }; + + NIX_CFLAGS_COMPILE = toString ["-Wno-error=sign-conversion"]; + }); + }; + }; + + # Temporary override for latest wayland version. May be useless in the future. + wayland-latest = final: prev: { + wayland = prev.wayland.overrideAttrs (old: rec { + version = "1.22.0"; + src = final.fetchurl { + url = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/${version}/downloads/${old.pname}-${version}.tar.xz"; + hash = "sha256-FUCvHqaYpHHC2OnSiDMsfg/TYMjx0Sk267fny8JCWEI="; + }; + }); + }; +} -- cgit v1.2.3