diff --git a/flake.lock b/flake.lock index e99f60b5..e383db5a 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,27 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1712192574, - "narHash": "sha256-LbbVOliJKTF4Zl2b9salumvdMXuQBr2kuKP5+ZwbYq4=", + "lastModified": 1713349283, + "narHash": "sha256-2bjFu3+1zPWZPPGqF+7rumTvEwmdBHBhjPva/AMSruQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "f480f9d09e4b4cf87ee6151eba068197125714de", + "rev": "2e359fb3162c85095409071d131e08252d91a14f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1713128889, + "narHash": "sha256-aB90ZqzosyRDpBh+rILIcyP5lao8SKz8Sr2PSWvZrzk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2748d22b45a99fb2deafa5f11c7531c212b2cefa", "type": "github" }, "original": { @@ -18,7 +34,26 @@ }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "scenefx": "scenefx" + } + }, + "scenefx": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1713495445, + "narHash": "sha256-dMvGkhjt72NznwI57HLR+Oc6QMctf16W4zI1XYuwnZI=", + "owner": "wlrfx", + "repo": "scenefx", + "rev": "5ada125a56012923c47fcf3d049fab32eb7104ff", + "type": "github" + }, + "original": { + "owner": "wlrfx", + "repo": "scenefx", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index ab09cb94..21314d67 100644 --- a/flake.nix +++ b/flake.nix @@ -1,66 +1,75 @@ { description = "Swayfx development environment"; - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + scenefx.url = "github:wlrfx/scenefx"; + }; outputs = - { self, nixpkgs, ... }: + { + self, + nixpkgs, + scenefx, + ... + }: let - pkgsFor = system: import nixpkgs { inherit system; }; + mkPackage = pkgs: { + swayfx-unwrapped = + (pkgs.swayfx-unwrapped.override { wlroots_0_16 = pkgs.wlroots_0_17; }).overrideAttrs + (old: { + version = "0.4.0-git"; + src = pkgs.lib.cleanSource ./.; + nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.cmake ]; + buildInputs = old.buildInputs ++ [ pkgs.scenefx ]; + }); + }; + targetSystems = [ "aarch64-linux" "x86_64-linux" ]; - mkPackage = pkgs: { - swayfx-unwrapped = - (pkgs.swayfx-unwrapped.override { - # When the sway 1.9 rebase is finished, this will need to be overridden. - # wlroots_0_16 = pkgs.wlroots_0_16; - }).overrideAttrs - (old: { - version = "0.3.2-git"; - src = pkgs.lib.cleanSource ./.; - }); - }; + pkgsFor = + system: + import nixpkgs { + inherit system; + overlays = [ scenefx.overlays.insert ]; + }; + forEachSystem = f: nixpkgs.lib.genAttrs targetSystems (system: f (pkgsFor system)); in { overlays = rec { default = insert; - # Override onto the input nixpkgs - override = _: prev: mkPackage prev; - # Insert using the locked nixpkgs + # Insert using the locked nixpkgs. Can be used with any nixpkgs version. insert = _: prev: mkPackage (pkgsFor prev.system); + # Override onto the input nixpkgs. Users *MUST* have a scenefx overlay + # used before this overlay, otherwise pkgs.scenefx will be unavailable + override = _: prev: mkPackage prev; }; - packages = nixpkgs.lib.genAttrs targetSystems ( - system: (mkPackage (pkgsFor system) // { default = self.packages.${system}.swayfx-unwrapped; }) + packages = forEachSystem ( + pkgs: (mkPackage pkgs // { default = self.packages.${pkgs.system}.swayfx-unwrapped; }) ); - devShells = nixpkgs.lib.genAttrs targetSystems ( - system: - let - pkgs = pkgsFor system; - in - { - default = pkgs.mkShell { - name = "swayfx-shell"; - inputsFrom = [ - self.packages.${system}.swayfx-unwrapped - pkgs.wlroots_0_17 - ]; - nativeBuildInputs = with pkgs; [ - cmake - wayland-scanner - hwdata # for wlroots - ]; - # Copy the nix version of wlroots into the project - shellHook = with pkgs; '' - ( - mkdir -p "$PWD/subprojects" && cd "$PWD/subprojects" - cp -R --no-preserve=mode,ownership ${wlroots_0_17.src} wlroots - )''; - }; - } - ); + devShells = forEachSystem (pkgs: { + default = pkgs.mkShell { + name = "swayfx-shell"; + inputsFrom = [ + self.packages.${pkgs.system}.swayfx-unwrapped + pkgs.wlroots_0_17 + pkgs.scenefx + ]; + packages = with pkgs; [ + gdb # for debugging + ]; + shellHook = '' + ( + # Copy the nix version of wlroots and scenefx into the project + mkdir -p "$PWD/subprojects" && cd "$PWD/subprojects" + cp -R --no-preserve=mode,ownership ${pkgs.wlroots_0_17.src} wlroots + cp -R --no-preserve=mode,ownership ${pkgs.scenefx.src} scenefx + )''; + }; + }); - formatter = nixpkgs.lib.genAttrs targetSystems (system: (pkgsFor system).nixfmt-rfc-style); + formatter = forEachSystem (pkgs: pkgs.nixfmt-rfc-style); }; }