{
description = "subsync flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
fenix,
...
}:
let
inherit (nixpkgs) lib;
# This example is only using x86_64-linux
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in
{
packages.x86_64-linux.default = fenix.packages.x86_64-linux.stable.toolchain;
# This example provides two different modes of development:
# - Impurely using uv to manage virtual environments
# - Pure development using uv2nix to manage virtual environments
devShells.x86_64-linux = {
# It is of course perfectly OK to keep using an impure virtualenv workflow and only use uv2nix to build packages.
# This devShell simply adds Python and undoes the dependency leakage done by Nixpkgs Python infrastructure.
impure =
pkgs.mkShell.override
{
stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv;
}
{
packages = [
fenix.packages.x86_64-linux.stable.toolchain
pkgs.cargo-nextest # test runner
pkgs.cargo-deny
pkgs.cargo-edit
pkgs.cargo-release
pkgs.mold
pkgs.taplo # toml lsp server
pkgs.awscli2
pkgs.google-cloud-sdk
pkgs.just # script launcher with a make flavor
pkgs.alejandra # nix code formatter
pkgs.markdownlint-cli2
# necessary for reqwest
pkgs.openssl
pkgs.pkg-config
];
env = {
RUSTFLAGS = "-W unreachable-pub -W bare-trait-objects";
}
// lib.optionalAttrs pkgs.stdenv.isLinux {
# Python libraries often load native shared objects using dlopen(3).
# Setting LD_LIBRARY_PATH makes the dynamic library loader aware of libraries without using RPATH for lookup.
LD_LIBRARY_PATH = lib.makeLibraryPath pkgs.pythonManylinuxPackages.manylinux1;
};
shellHook = ''
unset PYTHONPATH
'';
};
};
};
}