diff --git a/flake.nix b/flake.nix index f9c3876..9a900b0 100644 --- a/flake.nix +++ b/flake.nix @@ -6,46 +6,83 @@ url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; - naersk.url = "github:nix-community/naersk"; }; - outputs = { self, nixpkgs, rust-overlay, naersk, flake-utils }: + outputs = { self, nixpkgs, rust-overlay, flake-utils }: let systems = [ "x86_64-linux" "aarch64-linux" ]; in flake-utils.lib.eachSystem systems (system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; - lib = pkgs.lib; - naersk' = pkgs.callPackage naersk { - cargo = pkgs.rust-bin.stable.latest.default; - rustc = pkgs.rust-bin.stable.latest.default; - }; + cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); + cargoPackageVersion = cargoToml.package.version; - buildXwaylandSatellite = { withSystemd ? false }: naersk'.buildPackage { - src = ./.; + commitHash = self.shortRev or self.dirtyShortRev or "unknown"; - nativeBuildInputs = with pkgs; [ - rustPlatform.bindgenHook - rust-bin.stable.latest.default - pkg-config + version = "${cargoPackageVersion}-${commitHash}"; - xcb-util-cursor - xorg.libxcb + buildXwaylandSatellite = + { lib + , rustPlatform + , pkg-config + , makeBinaryWrapper + , libxcb + , xcb-util-cursor + , xwayland + , withSystemd ? true + }: - makeWrapper - ] ++ lib.optional withSystemd pkgs.systemd; + rustPlatform.buildRustPackage rec { + pname = "xwayland-satellite"; + inherit version; - buildInputs = [ pkgs.xwayland ]; + src = self; - cargoBuildOptions = opts: opts ++ lib.optional withSystemd "--features systemd"; + cargoLock = { + lockFile = "${src}/Cargo.lock"; + allowBuiltinFetchGit = true; + }; - postInstall = '' - wrapProgram $out/bin/xwayland-satellite \ - --prefix PATH : ${pkgs.xwayland}/bin - ''; - }; + nativeBuildInputs = [ + rustPlatform.bindgenHook + pkg-config + makeBinaryWrapper + ]; + buildInputs = [ + libxcb + xcb-util-cursor + ]; + + buildNoDefaultFeatures = true; + buildFeatures = lib.optionals withSystemd [ "systemd" ]; + + postPatch = '' + substituteInPlace resources/xwayland-satellite.service \ + --replace-fail '/usr/local/bin' "$out/bin" + ''; + + postInstall = lib.optionalString withSystemd '' + install -Dm0644 resources/xwayland-satellite.service -t $out/lib/systemd/user + ''; + + postFixup = '' + wrapProgram $out/bin/xwayland-satellite \ + --prefix PATH : "${lib.makeBinPath [ xwayland ]}" + ''; + + doCheck = false; + + meta = with lib; { + description = "Xwayland outside your Wayland"; + homepage = "https://github.com/Supreeeme/xwayland-satellite"; + license = licenses.mpl20; + platforms = platforms.linux; + }; + }; + + xwayland-satellite = pkgs.callPackage buildXwaylandSatellite { }; in { devShell = (pkgs.mkShell.override { stdenv = pkgs.clangStdenv; }) { @@ -60,11 +97,8 @@ ]; }; - packages = rec { - xwayland-satellite-nosd = buildXwaylandSatellite { withSystemd = false; }; - - xwayland-satellite = buildXwaylandSatellite { withSystemd = true; }; - + packages = { + xwayland-satellite = xwayland-satellite; default = xwayland-satellite; }; });