aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--flake.nix110
-rw-r--r--nix/lib.nix8
-rw-r--r--nix/overlays.nix108
3 files changed, 142 insertions, 84 deletions
diff --git a/flake.nix b/flake.nix
index 4b7b3480..3d1f1950 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,6 +3,7 @@
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+
wlroots = {
url = "gitlab:wlroots/wlroots?host=gitlab.freedesktop.org";
flake = false;
@@ -25,7 +26,7 @@
nixpkgs,
...
}: let
- inherit (nixpkgs) lib;
+ lib = nixpkgs.lib.extend (import ./nix/lib.nix);
genSystems = lib.genAttrs [
# Add more systems if they are supported
"aarch64-linux"
@@ -36,103 +37,44 @@
import nixpkgs {
inherit system;
overlays = [
- (_: prev: {
- wayland = prev.wayland.overrideAttrs (old: rec {
- version = "1.22.0";
- src = prev.fetchurl {
- url = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/${version}/downloads/${old.pname}-${version}.tar.xz";
- hash = "sha256-FUCvHqaYpHHC2OnSiDMsfg/TYMjx0Sk267fny8JCWEI=";
- };
- });
- })
+ self.overlays.hyprland-packages
+ self.overlays.wlroots-hyprland
+ self.overlays.wayland-latest
+ inputs.hyprland-protocols.overlays.default
];
});
-
- 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 {
- overlays.default = _: prev: rec {
- wlroots-hyprland = prev.callPackage ./nix/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 = prev.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 = prev.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"
- ];
- });
- };
- hyprland = prev.callPackage ./nix/default.nix {
- stdenv = prev.gcc12Stdenv;
- version = props.version + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty");
- wlroots = wlroots-hyprland;
- commit = self.rev or "";
- inherit (inputs.hyprland-protocols.packages.${prev.stdenv.hostPlatform.system}) hyprland-protocols;
- inherit udis86;
- };
- hyprland-debug = hyprland.override {debug = true;};
- hyprland-hidpi = hyprland.override {hidpiXWayland = true;};
- hyprland-nvidia = hyprland.override {nvidiaPatches = true;};
- hyprland-no-hidpi = builtins.trace "hyprland-no-hidpi was removed. Please use the default package." hyprland;
-
- udis86 = prev.callPackage ./nix/udis86.nix {};
-
- waybar-hyprland = prev.waybar.overrideAttrs (oldAttrs: {
- 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 = oldAttrs.mesonFlags ++ ["-Dexperimental=true"];
- });
-
- xdg-desktop-portal-hyprland = inputs.xdph.packages.${prev.stdenv.hostPlatform.system}.default.override {
- hyprland-share-picker = inputs.xdph.packages.${prev.stdenv.hostPlatform.system}.hyprland-share-picker.override {inherit hyprland;};
+ overlays =
+ (import ./nix/overlays.nix {inherit self lib inputs;})
+ // {
+ default =
+ lib.mkJoinedOverlays
+ (with self.overlays; [
+ hyprland-packages
+ hyprland-extras
+ wlroots-hyprland
+ ]);
};
- };
checks = genSystems (system:
- (lib.filterAttrs (n: _: (lib.hasPrefix "hyprland" n) && !(lib.hasSuffix "debug" n)) self.packages.${system})
- // {inherit (self.packages.${system}) xdg-desktop-portal-hyprland;});
+ (lib.filterAttrs
+ (n: _: (lib.hasPrefix "hyprland" n) && !(lib.hasSuffix "debug" n))
+ self.packages.${system})
+ // {
+ inherit (self.packages.${system}) xdg-desktop-portal-hyprland;
+ });
packages = genSystems (system:
- (self.overlays.default null pkgsFor.${system})
+ (self.overlays.default pkgsFor.${system} pkgsFor.${system})
// {
default = self.packages.${system}.hyprland;
});
devShells = genSystems (system: {
- default = pkgsFor.${system}.mkShell.override {stdenv = pkgsFor.${system}.gcc12Stdenv;} {
+ default = pkgsFor.${system}.mkShell {
name = "hyprland-shell";
- nativeBuildInputs = with pkgsFor.${system}; [
- cmake
- ];
- buildInputs = [
- self.packages.${system}.wlroots-hyprland
- ];
+ nativeBuildInputs = with pkgsFor.${system}; [cmake];
+ buildInputs = [self.packages.${system}.wlroots-hyprland];
inputsFrom = [
self.packages.${system}.wlroots-hyprland
self.packages.${system}.hyprland
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=";
+ };
+ });
+ };
+}