From 68f695d49a69ab4e32946f88409c3d069c04fbdb Mon Sep 17 00:00:00 2001 From: isabelroses Date: Tue, 4 Jun 2024 00:24:31 +0100 Subject: [PATCH] build(nix): add flake --- flake.lock | 57 +++++++++++++++++++++++++++++++++++++++- flake.nix | 77 +++++++++++++++++++++++++++++++++++++++++++++--------- shell.nix | 22 ++++++++-------- 3 files changed, 132 insertions(+), 24 deletions(-) diff --git a/flake.lock b/flake.lock index 07b4b9a..dda24e9 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,23 @@ { "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1717196966, @@ -18,7 +36,44 @@ }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717442957, + "narHash": "sha256-w0fqHofxM2hf3pGDXCPSdH0A09v6FgHm6I38nCWA96k=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "025e1742de4fa75b3fb63818bd9726d17da6a102", + "type": "github" + }, + "original": { + "owner": "oxalica", + "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" } } }, diff --git a/flake.nix b/flake.nix index 08dd4d3..7704f25 100644 --- a/flake.nix +++ b/flake.nix @@ -1,8 +1,21 @@ { - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; + }; + }; outputs = - { nixpkgs, ... }: + { + self, + nixpkgs, + rust-overlay, + ... + }: let systems = [ "aarch64-darwin" @@ -10,20 +23,60 @@ "x86_64-darwin" "x86_64-linux" ]; - forAllSystems = - function: nixpkgs.lib.genAttrs systems (system: function nixpkgs.legacyPackages.${system}); + inherit (nixpkgs) lib; + forEachSystem = + f: + (lib.listToAttrs ( + map (system: { + name = system; + value = f { + inherit system; + pkgs = import nixpkgs { + inherit system; + overlays = [ rust-overlay.overlays.default ]; + }; + }; + }) systems + )); in { - devShells = forAllSystems (pkgs: { - default = pkgs.callPackage ./shell.nix { }; - }); + devShells = forEachSystem ( + { pkgs, system }: + { + default = pkgs.mkShell { + inputsFrom = [ self.packages.${system}.default ]; + + packages = [ + (pkgs.rust-bin.stable.latest.default.override { + extensions = [ + "rustfmt" + "rust-analyzer" + "clippy" + ]; + }) + ]; + }; + } + ); - packages = forAllSystems (pkgs: rec { - default = whiskers; - whiskers = pkgs.callPackage ./default.nix { }; - }); + packages = forEachSystem ( + { pkgs, system }: + { + default = self.packages.${system}.whiskers; + whiskers = pkgs.callPackage ./default.nix { + rustPlatform = + let + toolchain = pkgs.rust-bin.stable.latest.default; + in + pkgs.makeRustPlatform { + cargo = toolchain; + rustc = toolchain; + }; + }; + } + ); - overlays.default = _: prev: { catppuccin-whiskers = prev.callPackage ./default.nix { }; }; + overlays.default = final: _: { catppuccin-whiskers = final.callPackage ./default.nix { }; }; }; nixConfig = { diff --git a/shell.nix b/shell.nix index ebf3301..a3adac8 100644 --- a/shell.nix +++ b/shell.nix @@ -1,16 +1,16 @@ -{ - clippy, - rustfmt, - callPackage, - rust-analyzer, -}: +{ callPackage, toolchain }: let mainPkg = callPackage ./default.nix { }; + toolchainWithComponents = ( + toolchain.stable.latest.default.override { + extensions = [ + "rustfmt" + "rust-analyzer" + "clippy" + ]; + } + ); in mainPkg.overrideAttrs (oa: { - nativeBuildInputs = [ - clippy - rustfmt - rust-analyzer - ] ++ (oa.nativeBuildInputs or [ ]); + nativeBuildInputs = [ toolchainWithComponents ] ++ (oa.nativeBuildInputs or [ ]); })