Files
abstui/flake.nix
2025-09-16 03:09:08 -04:00

100 lines
2.7 KiB
Nix

{
description = "A Nix-flake-based Python development environment";
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1";
outputs = inputs:
let
supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
forEachSupportedSystem = f: inputs.nixpkgs.lib.genAttrs supportedSystems (system: f {
pkgs = import inputs.nixpkgs { inherit system; };
});
/*
* Change this value ({major}.{min}) to
* update the Python virtual-environment
* version. When you do this, make sure
* to delete the `.venv` directory to
* have the hook rebuild it for the new
* version, since it won't overwrite an
* existing one. After this, reload the
* development shell to rebuild it.
* You'll see a warning asking you to
* do this when version mismatches are
* present. For safety, removal should
* be a manual step, even if trivial.
*/
version = "3.13";
in
{
devShells = forEachSupportedSystem ({ pkgs }:
let
concatMajorMinor = v:
pkgs.lib.pipe v [
pkgs.lib.versions.splitVersion
(pkgs.lib.sublist 0 2)
pkgs.lib.concatStrings
];
python = pkgs."python${concatMajorMinor version}";
in
{
default = pkgs.mkShell {
env = {
PYTHONBREAKPOINT = "pudb.set_trace";
PYTHONPATH = "$PWD/src:$PYTHONPATH";
};
venvDir = ".venv";
postShellHook = ''
venvVersionWarn() {
local venvVersion
venvVersion="$("$venvDir/bin/python" -c 'import platform; print(platform.python_version())')"
[[ "$venvVersion" == "${python.version}" ]] && return
cat <<EOF
Warning: Python version mismatch: [$venvVersion (venv)] != [${python.version}]
Delete '$venvDir' and reload to rebuild for version ${python.version}
EOF
}
venvVersionWarn
if [ -f .env ]; then
set -a
source .env
set +a
echo "Loaded .env file"
fi
'';
packages = with python.pkgs; [
pudb
ptpython
ipython
pytest
pytest-cov
flake8
ptpython
ipython
isort
pynvim
ruff
black
/* Add whatever else you'd like here. */
pkgs.basedpyright
# pkgs.black
/* or */
# python.pkgs.black
# pkgs.ruff
/* or */
# python.pkgs.ruff
];
};
});
};
}