{
description = "podcasting-rs - types and utilities for the PC 2.0 namespace";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
inputs.rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
inputs.namespace = {
url = "github:Podcastindex-org/podcast-namespace";
flake = false;
};
outputs =
{
self,
nixpkgs,
flake-utils,
rust-overlay,
namespace,
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
stdenv =
if pkgs.stdenv.isLinux then
pkgs.stdenvAdapters.useMoldLinker pkgs.stdenv
else
pkgs.stdenv
;
overlays = [ (import rust-overlay) ];
rustPkgs = import nixpkgs { inherit system overlays; };
src = self;
name = "podcasting";
RUST_TOOLCHAIN = src + "/rust-toolchain.toml";
rustToolchainTOML = rustPkgs.rust-bin.fromRustupToolchainFile RUST_TOOLCHAIN;
rustToolchainDevTOML = rustToolchainTOML.override {
extensions = [
"rustfmt"
"clippy"
"rust-analysis"
"rust-docs"
];
targets = [ ];
};
buildInputs = [
pkgs.installShellFiles
pkgs.sqlite
pkgs.openssl
];
nativeBuildInputs = [ pkgs.pkg-config ];
devInputs = [
rustToolchainDevTOML
pkgs.just
pkgs.cargo-bloat
pkgs.cargo-deny
pkgs.cargo-diet
pkgs.cargo-dist
pkgs.cargo-flamegraph
pkgs.cargo-modules
pkgs.cargo-nextest
pkgs.cargo-outdated
pkgs.cargo-public-api
pkgs.cargo-unused-features
pkgs.cargo-watch
# snapshot testing
pkgs.cargo-insta
pkgs.openssl # for `cargo xtask`
pkgs.reuse
pkgs.lychee
(pkgs.symlinkJoin {
name = "cargo-udeps-wrapped";
paths = [ pkgs.cargo-udeps ];
nativeBuildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/cargo-udeps \
--prefix PATH : ${
pkgs.lib.makeBinPath [
(rustPkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default))
]
}
'';
})
(pkgs.symlinkJoin {
name = "cargo-careful-wrapped";
paths = [ pkgs.cargo-careful ];
nativeBuildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/cargo-careful \
--prefix PATH : ${
pkgs.lib.makeBinPath [
(rustPkgs.rust-bin.selectLatestNightlyWith (
toolchain: toolchain.default.override { extensions = [ "rust-src" ]; }
))
]
}
'';
})
#alternative linker
pkgs.llvmPackages.bintools
pkgs.mold
pkgs.clang
];
shellInputs = [
pkgs.shellcheck
pkgs.actionlint
];
fmtInputs = [
pkgs.alejandra
pkgs.treefmt
pkgs.typos
];
editorConfigInputs = [ pkgs.editorconfig-checker ];
actionlintInputs = [ pkgs.actionlint ];
in
{
devShells = {
default = (pkgs.mkShell.override { inherit stdenv; }) {
buildInputs =
shellInputs ++ fmtInputs ++ devInputs ++ buildInputs ++ nativeBuildInputs;
inherit name;
RUST_BACKTRACE = true;
NAMESPACE_SCHEMA = namespace + "/docs/schema/podcast.xsd";
};
editorConfigShell = pkgs.mkShell { buildInputs = editorConfigInputs; };
actionlintShell = pkgs.mkShell { buildInputs = actionlintInputs; };
fmtShell = pkgs.mkShell { buildInputs = fmtInputs; };
};
formatter = pkgs.alejandra;
}
);
}