diff --git a/flake.lock b/flake.lock index 6a457cc..cbbaff2 100644 --- a/flake.lock +++ b/flake.lock @@ -1,41 +1,40 @@ { "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "naersk": { + "crane": { "inputs": { "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1721727458, - "narHash": "sha256-r/xppY958gmZ4oTfLiHN0ZGuQ+RSTijDblVgVLFi1mw=", - "owner": "nmattia", - "repo": "naersk", - "rev": "3fb418eaf352498f6b6c30592e3beb63df42ef11", + "lastModified": 1724006180, + "narHash": "sha256-PVxPj0Ga2fMYMtcT9ARCthF+4U71YkOT7ZjgD/vf1Aw=", + "owner": "ipetkov", + "repo": "crane", + "rev": "7ce92819802bc583b7e82ebc08013a530f22209f", "type": "github" }, "original": { - "owner": "nmattia", - "ref": "master", - "repo": "naersk", + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1722555600, + "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8471fe90ad337a8074e957b69ca4d0089218391d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, @@ -55,10 +54,22 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1722555339, + "narHash": "sha256-uFf2QeW7eAHlYXuDktm9c25OxOyCoUOQmh5SZ9amE5Q=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz" + } + }, "root": { "inputs": { - "flake-utils": "flake-utils", - "naersk": "naersk", + "crane": "crane", + "flake-parts": "flake-parts", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" } @@ -82,21 +93,6 @@ "repo": "rust-overlay", "type": "github" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 0776a44..f52fa2d 100644 --- a/flake.nix +++ b/flake.nix @@ -1,60 +1,105 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - flake-utils.url = "github:numtide/flake-utils"; - naersk = { - url = "github:nmattia/naersk/master"; + flake-parts.url = "github:hercules-ci/flake-parts"; + crane = { + url = "github:ipetkov/crane"; inputs.nixpkgs.follows = "nixpkgs"; }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; - inputs.flake-utils.follows = "flake-utils"; }; }; - outputs = { - self, - nixpkgs, - flake-utils, - naersk, - rust-overlay, - }: - flake-utils.lib.eachDefaultSystem (system: let - overlays = [(import rust-overlay)]; - pkgs = import nixpkgs {inherit system overlays;}; - naersk-lib = pkgs.callPackage naersk {}; + outputs = + { self, ... }@inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ "x86_64-linux" ]; - rustToolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; + imports = [ inputs.flake-parts.flakeModules.easyOverlay ]; - buildInputs = [ - rustToolchain - pkgs.libpulseaudio.dev - ]; - nativeBuildInputs = [ - pkgs.pkgconf - ]; - in rec { - packages.pamedia = naersk-lib.buildPackage { - inherit buildInputs nativeBuildInputs; + perSystem = + { + pkgs, + system, + config, + ... + }: + let + overlays = [ (import inputs.rust-overlay) ]; - root = ./.; - pname = "pamedia"; - }; - packages.default = packages.pamedia; + rustToolchain = pkgs.rust-bin.stable.latest.default.override { + extensions = [ + "rustfmt" + "clippy" + ]; + }; - defaultApp = flake-utils.lib.mkApp { - drv = self.defaultPackage."${system}"; - }; + crane-lib = (inputs.crane.mkLib pkgs).overrideToolchain rustToolchain; - overlays = final: prev: { - pamedia = packages.pamedia; - }; + pname = "pamedia"; + version = "0.3.0"; - devShell = with pkgs; - mkShell { - buildInputs = [cargo rustc rustfmt pre-commit rustPackages.clippy cargo-edit cargo-feature cargo-outdated rust-analyzer] ++ buildInputs; - nativeBuildInputs = [libnotify] ++ nativeBuildInputs; + src = crane-lib.cleanCargoSource ./.; + + buildInputs = [ + rustToolchain + pkgs.libpulseaudio.dev + ]; + nativeBuildInputs = [ pkgs.pkg-config ]; + + cargoArtifacts = crane-lib.buildDepsOnly { + inherit + src + buildInputs + nativeBuildInputs + pname + version + ; + }; + + pamedia = crane-lib.buildPackage { + inherit + cargoArtifacts + src + buildInputs + nativeBuildInputs + pname + version + ; + }; + + in + { + _module.args.pkgs = import inputs.nixpkgs { inherit system overlays; }; + + packages = { + inherit pamedia; + }; + packages.default = config.packages.pamedia; + + overlayAttrs = { + inherit (config.packages) pamedia; + }; + + devShells.default = + with pkgs; + mkShell { + packages = [ + cargo + rustc + rustfmt + pre-commit + rustPackages.clippy + cargo-edit + cargo-feature + rust-analyzer + libnotify + ]; + inputsFrom = [ config.packages.pamedia ]; + }; }; - }); + }; + }