add a nix flake
This commit is contained in:
parent
e85ac6a5e5
commit
a30cf9a16f
2 changed files with 166 additions and 0 deletions
102
flake.nix
Normal file
102
flake.nix
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
{
|
||||
description = "manages multiple identities (e.g. personal, work, university, ...) in git repos for you";
|
||||
|
||||
inputs = {
|
||||
crane.url = "github:ipetkov/crane";
|
||||
|
||||
flake-parts = {
|
||||
url = "github:hercules-ci/flake-parts";
|
||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||
};
|
||||
|
||||
outputs = inputs @ { self, crane, ... }:
|
||||
inputs.flake-parts.lib.mkFlake { inherit inputs; } ({ lib, ... }: {
|
||||
systems = [ "x86_64-linux" "aarch64-linux" ];
|
||||
|
||||
perSystem = { pkgs, self', system, ... }: let
|
||||
buildInputs = with pkgs; [
|
||||
gpgme
|
||||
pkg-config
|
||||
];
|
||||
|
||||
nativeBuildInputs = with pkgs; [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
crateSrc = lib.cleanSourceWith {
|
||||
src = self.outPath;
|
||||
filter = name: type: builtins.all (f: f name type) [
|
||||
lib.sources.cleanSourceFilter
|
||||
(name: type: !(builtins.elem (builtins.baseNameOf name) [ "flake.nix" "flake.lock" ]))
|
||||
];
|
||||
};
|
||||
|
||||
craneArgs = {
|
||||
src = crateSrc;
|
||||
strictDeps = true;
|
||||
|
||||
inherit buildInputs nativeBuildInputs;
|
||||
};
|
||||
|
||||
craneLib = crane.mkLib pkgs;
|
||||
|
||||
# Build the dependencies with different parameters
|
||||
cargoArtifacts = craneLib.buildDepsOnly craneArgs;
|
||||
|
||||
cargoTOML = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
||||
in {
|
||||
packages.xtask = (craneLib.buildPackage ( craneArgs // {
|
||||
inherit cargoArtifacts;
|
||||
|
||||
cargoExtraArgs = "--package xtask";
|
||||
|
||||
meta = {
|
||||
licences = with lib.licences; [mit asl20];
|
||||
platforms = [ system ];
|
||||
mainProgram = "xtask";
|
||||
};
|
||||
}));
|
||||
|
||||
packages.default = (craneLib.buildPackage ( craneArgs // {
|
||||
inherit cargoArtifacts;
|
||||
|
||||
nativeBuildInputs = craneArgs.nativeBuildInputs ++ [ self'.packages.xtask ];
|
||||
|
||||
postInstall = let
|
||||
manDir = "$out/share/man/man1";
|
||||
in ''
|
||||
mkdir -p "${manDir}"
|
||||
xtask manpage "${manDir}"
|
||||
find "${manDir}" -type f -exec gzip {} \;
|
||||
'';
|
||||
|
||||
meta = {
|
||||
licences = with lib.licences; [mit asl20];
|
||||
platforms = [ system ];
|
||||
mainProgram = cargoTOML.package.name;
|
||||
}
|
||||
// lib.optionalAttrs (lib.attrsets.hasAttrByPath ["package" "description"] cargoTOML) {
|
||||
inherit (cargoTOML.package) description;
|
||||
};
|
||||
}));
|
||||
|
||||
apps.default = {
|
||||
type = "app";
|
||||
program = let pkg = self'.packages.default; in "${pkg}/bin/${pkg.pname}";
|
||||
};
|
||||
|
||||
devShells.default = craneLib.devShell {
|
||||
checks = self'.checks;
|
||||
|
||||
inherit buildInputs nativeBuildInputs;
|
||||
|
||||
packages = with pkgs; [
|
||||
# Cargo and rustc are provided by default.
|
||||
];
|
||||
};
|
||||
};
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue