blahrs/flake.nix
2024-10-18 09:32:25 -04:00

122 lines
3.3 KiB
Nix

rec {
description = "Blah Chat Server";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
naersk = {
url = "github:nix-community/naersk";
inputs.nixpkgs.follows = "nixpkgs";
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
naersk,
rust-overlay,
}:
let
inherit (nixpkgs) lib;
eachSystem = lib.genAttrs lib.systems.flakeExposed;
rev = self.rev or (lib.warn "Git changes are not committed" (self.dirtyRev or "dirty"));
in
{
packages = eachSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
rustBin = rust-overlay.lib.mkRustBin { } pkgs;
toolchain = rustBin.fromRustupToolchainFile ./rust-toolchain.toml;
naersk' = pkgs.callPackage naersk {
cargo = toolchain;
rustc = toolchain;
};
mkPkg =
{
pkg-config,
openssl,
sqlite,
}:
naersk'.buildPackage {
pname = "blahd";
src = ./.;
version = "0-unstable";
nativeBuildInputs = [
pkg-config
];
buildInputs = [
openssl
sqlite
];
cargoBuildOptions =
opts:
opts
++ [
"--package=blahd"
"--package=blahctl"
];
# Intentionally omit the socket unit. It is trivial but
# highly configuration-specific. Users who want to use it almost
# always need customization.
postInstall = ''
mkdir -p $out/etc/systemd/system
substitute ./contrib/blahd.example.service $out/etc/systemd/system/blahd.service \
--replace-fail '/usr/bin/blahd' "$out/bin/blahd"
'';
meta = {
inherit description;
homepage = "https://github.com/Blah-IM/blahrs";
};
};
in
rec {
default = blahd;
blahd = (pkgs.callPackage mkPkg { }).overrideAttrs {
# Only set this for the main derivation, not for deps.
CFG_RELEASE = "git-${rev}";
CFG_SRC_URL = "https://github.com/Blah-IM/blahrs/archive/${rev}.tar.gz";
};
}
);
devShells = eachSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
default = pkgs.mkShell {
inputsFrom = [ self.packages.${system}.default ];
nativeBuildInputs = [
pkgs.buildPackages.sqlite-interactive
pkgs.cargo-llvm-cov
];
env.RUST_LOG = "blahd=debug,blahctl=debug";
};
without-rust = self.devShells.${system}.default.overrideAttrs (old: {
nativeBuildInputs = lib.filter (drv: drv.pname != "rust-default") old.nativeBuildInputs;
});
}
);
nixosModules = rec {
default = blahd;
blahd = import ./contrib/module.nix {
inherit self;
};
};
};
}