1
Fork 0
mirror of https://github.com/RGBCube/alejandra synced 2025-07-29 03:27:44 +00:00
alejandra/flake.nix
2025-04-10 16:29:41 -06:00

149 lines
4.8 KiB
Nix

{
description = "The Uncompromising Nix Code Formatter";
inputs = {
fenix.url = "github:nix-community/fenix";
fenix.inputs.nixpkgs.follows = "nixpkgs";
flakeCompat.url = "github:edolstra/flake-compat";
flakeCompat.flake = false;
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small";
};
outputs = inputs: let
commit = inputs.self.shortRev or "dirty";
date = inputs.self.lastModifiedDate or inputs.self.lastModified or "19700101";
version = "4.0.0+${builtins.substring 0 8 date}.${commit}";
nixpkgsForHost = host:
import inputs.nixpkgs {
overlays = [overlay];
system = host;
};
nixpkgs."aarch64-darwin" = nixpkgsForHost "aarch64-darwin";
nixpkgs."aarch64-linux" = nixpkgsForHost "aarch64-linux";
nixpkgs."i686-linux" = nixpkgsForHost "i686-linux";
nixpkgs."x86_64-darwin" = nixpkgsForHost "x86_64-darwin";
nixpkgs."x86_64-linux" = nixpkgsForHost "x86_64-linux";
overlay = final: prev: {
alejandra = final.rustPlatform.buildRustPackage {
pname = "alejandra";
inherit version;
src = ./.;
cargoLock.lockFile = ./Cargo.lock;
passthru.tests = {
version = final.testVersion {package = prev.alejandra;};
};
meta = {
description = "The Uncompromising Nix Code Formatter.";
homepage = "https://github.com/kamadorueda/alejandra";
license = final.lib.licenses.unlicense;
maintainers = [final.lib.maintainers.kamadorueda];
platforms = final.lib.systems.doubles.all;
mainProgram = "alejandra";
};
};
};
buildBinariesForHost = host: pkgs: let
binaries = builtins.listToAttrs (
builtins.map (pkg: {
name = "alejandra-${pkg.stdenv.targetPlatform.config}";
value = pkg;
})
pkgs
);
in
binaries
// {
"alejandra-binaries" = nixpkgs.${host}.linkFarm "alejandra-binaries" (
nixpkgs.${host}.lib.mapAttrsToList
(name: binary: {
inherit name;
path = "${binary}/bin/alejandra";
})
binaries
);
"default" = builtins.elemAt pkgs 0;
};
in rec {
checks."aarch64-darwin" = packages."aarch64-darwin";
checks."aarch64-linux" = packages."aarch64-linux";
checks."i686-linux" = packages."i686-linux";
checks."x86_64-darwin" = packages."x86_64-darwin";
checks."x86_64-linux" = packages."x86_64-linux";
defaultPackage."aarch64-darwin" = packages."aarch64-darwin"."alejandra-aarch64-apple-darwin";
defaultPackage."aarch64-linux" = packages."aarch64-linux"."alejandra-aarch64-unknown-linux-gnu";
defaultPackage."i686-linux" = packages."i686-linux"."alejandra-i686-unknown-linux-gnu";
defaultPackage."x86_64-darwin" = packages."x86_64-darwin"."alejandra-x86_64-apple-darwin";
defaultPackage."x86_64-linux" = packages."x86_64-linux"."alejandra-x86_64-unknown-linux-gnu";
devShell."x86_64-linux" = with nixpkgs."x86_64-linux";
mkShell {
name = "alejandra";
packages = [
cargo-bloat
cargo-license
cargo-tarpaulin
jq
inputs.fenix.packages."x86_64-linux".latest.rustfmt
inputs.fenix.packages."x86_64-linux".stable.toolchain
linuxPackages_latest.perf
nodejs
nodePackages.prettier
nodePackages.prettier-plugin-toml
shfmt
treefmt
yarn
yarn2nix
];
};
inherit overlay;
overlays.default = overlay;
packages."aarch64-darwin" = with nixpkgs."aarch64-darwin";
buildBinariesForHost "aarch64-darwin" [
alejandra
];
packages."aarch64-linux" = with nixpkgs."aarch64-linux";
buildBinariesForHost "aarch64-linux" [
alejandra
pkgsStatic.alejandra
];
packages."i686-linux" = with nixpkgs."i686-linux";
buildBinariesForHost "i686-linux" [
alejandra
];
packages."x86_64-darwin" = with nixpkgs."x86_64-darwin";
buildBinariesForHost "x86_64-darwin" [
alejandra
];
packages."x86_64-linux" = with nixpkgs."x86_64-linux";
(buildBinariesForHost "x86_64-linux" [
alejandra
pkgsStatic.alejandra
pkgsCross.aarch64-multiplatform.pkgsStatic.alejandra
# Temporarily disabled to speed up release
# pkgsCross.armv7l-hf-multiplatform.pkgsStatic.alejandra
# pkgsCross.gnu32.pkgsStatic.alejandra
# pkgsCross.raspberryPi.pkgsStatic.alejandra
])
// {
"alejandra-vscode-vsix" = mkYarnPackage {
name = "alejandra";
src = ./integrations/vscode;
packageJSON = ./integrations/vscode/package.json;
yarnLock = ./integrations/vscode/yarn.lock;
yarnNix = ./integrations/vscode/yarn.lock.nix;
};
};
};
}