{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; crane.url = "github:ipetkov/crane"; crane.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, crane, flake-utils, fenix, ... }@inputs: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; fenixChannel = fenix.packages.${system}.stable; fenixToolchain = (fenixChannel.withComponents [ "rustc" "cargo" "rustfmt" "clippy" "rust-analysis" "rust-src" "llvm-tools-preview" ]); craneLib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain fenixToolchain; shikane = pkgs.callPackage ./nix-modules/shikane.nix { inherit craneLib pkgs; }; in rec { packages = { default = shikane.default; shikane = shikane.shikane; shikane-docs = shikane.shikane-docs; }; devShells.default = pkgs.mkShell { nativeBuildInputs = (with packages.shikane; nativeBuildInputs ++ buildInputs) ++ [ fenixToolchain ]; RUST_SRC_PATH = "${fenixChannel.rust-src}/lib/rustlib/src/rust/library"; }; }) // { overlays.default = (final: prev: { inherit (self.packages.${prev.system}) shikane; }); }; }