aboutsummaryrefslogtreecommitdiffhomepage
path: root/nix
diff options
context:
space:
mode:
authorJacob Birkett <[email protected]>2023-05-02 10:54:29 -0700
committerGitHub <[email protected]>2023-05-02 20:54:29 +0300
commit80b2ac1cc501af779347ec47bf560e1dbab5ceac (patch)
tree7f7c27ea23bb2d46cdf374d7e06a26841d01e30f /nix
parent79791c9ed4a9f78d8a444006e2cdd4a63d1a5862 (diff)
downloadHyprland-80b2ac1cc501af779347ec47bf560e1dbab5ceac.tar.gz
Hyprland-80b2ac1cc501af779347ec47bf560e1dbab5ceac.zip
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
Diffstat (limited to 'nix')
-rw-r--r--nix/lib.nix8
-rw-r--r--nix/overlays.nix108
2 files changed, 116 insertions, 0 deletions
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=";
+ };
+ });
+ };
+}