Files
yongestreet/flake.nix
T
2025-01-04 08:41:54 -05:00

200 lines
6.2 KiB
Nix

{
description = "spacial-data-experiments";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
quebec-cities-poly = {
url = "github:didiercrunch/cities";
flake = false;
};
};
outputs = { self, nixpkgs, flake-utils, quebec-cities-poly }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
poly2geojson = pkgs.rustPlatform.buildRustPackage rec {
pname = "poly2geojson";
version = "0.1.3";
src = pkgs.fetchFromGitHub {
owner = "frafra";
repo = pname;
rev = "2fbf2383765fe043d43d53b91ddbfe50c0129bb1";
hash = "sha256-BMRl6fRqQlibuGxg5hBHz7r1cvionNYEZe9YcZuL0oU=";
};
cargoHash = "sha256-pCegHF6SsCIsCQ/b+N34xTMjw2PjPB0pi30Y9sWIcV4=";
};
osmosis = pkgs.stdenv.mkDerivation {
name = "osmosis";
src = pkgs.fetchzip {
url =
"https://github.com/openstreetmap/osmosis/releases/download/0.49.2/osmosis-0.49.2.zip";
hash = "sha256-hmD/pnEEJsl2NkODon4XZcZ3ZQ7+fx/JvWTR4xrRoug=";
};
buildInputs = [ ];
buildPhase = "";
installPhase = ''
cp -r . $out
'';
};
custom-osmium-tool = pkgs.stdenv.mkDerivation rec {
pname = "osmium-tool";
version = "1.16.0";
src = pkgs.fetchFromGitHub {
owner = "osmcode";
repo = "osmium-tool";
rev = "8ed94a5da2a24b233a77732bfaa8c75fc32ea505";
sha256 = "sha256-YxjInUqcVfrBvAdBA/pd2J7NEBp6FvoQ97S+aW9x7jE=";
};
nativeBuildInputs = with pkgs; [ cmake installShellFiles pandoc ];
buildInputs = with pkgs; [
boost
bzip2
expat
libosmium
lz4
protozero
zlib
nlohmann_json
];
doCheck = false;
doInstallCheck = false;
postInstall = ''
installShellCompletion --zsh ../zsh_completion/_osmium
'';
};
duckdb-spatial = pkgs.clangStdenv.mkDerivation rec {
pname = "duckdb-spatial";
version = "master";
src = pkgs.fetchFromGitHub {
owner = "duckdb";
repo = "duckdb-spatial";
rev = "7f861c037567dadaeff9cb5dcde4e5f2e87a4e14";
sha256 = "sha256-8kfNofzbmPJ7+qKKzsr7LVu1mMDwGhy5nQj6/kRhYLg=";
};
librarySystemDepends = [ pkgs.zlib ];
executableSystemDepends = [ pkgs.zlib ];
cmakeFlags =
[ "-DVCPKG_TARGET_TRIPLET=${system}" "-DSPATIAL_USE_NETWORK=0" ];
nativeBuildInputs = with pkgs; [
cmake
installShellFiles
pandoc
pkg-config
zlib
];
buildInputs = with pkgs; [ geographiclib openssl geos curl zlib ];
doCheck = false;
};
geofabrik-base-url =
"https://static.home.all-dressed-programming.com/download.geofabrik.de/north-america/canada/";
osm-quebec."2020" = pkgs.fetchurl {
url = "${geofabrik-base-url}quebec-200101.osm.pbf";
hash =
"sha256-458a33e10a3fc70884541a00e314471e9b7c92f352fe61ec909066478fb7bd09";
};
osm-quebec."2021" = pkgs.fetchurl {
url = "${geofabrik-base-url}quebec-210101.osm.pbf";
hash =
"sha256-90a8bfe610951da56f315140256a4918fc9b98ac03bb441778f8a66271c128a9";
};
osm-quebec."2022" = pkgs.fetchurl {
url = "${geofabrik-base-url}quebec-220101.osm.pbf";
hash =
"sha256-899526faf3220c7e9ec9fe2499e7ba3bccfe94dfefa328c0b7846dce6494e96a";
};
osm-quebec."2023" = pkgs.fetchurl {
url = "${geofabrik-base-url}quebec-230101.osm.pbf";
hash = "sha256-AReFCvBIz42RBcOYgC25ZJaBXADW1lIzSpCI+vdrWX0=";
};
osm-quebec."2024" = pkgs.fetchurl {
url = "${geofabrik-base-url}quebec-240101.osm.pbf";
hash = "sha256-lcbn4mks4NlnwU3QwQOFdLICxFGapDC0PR/h0HlIR1E=";
};
osm-quebec."2025" = pkgs.fetchurl {
url = "${geofabrik-base-url}quebec-250101.osm.pbf";
hash = "sha256-QLIflsZuv8r2+mGVARrGkXyjWZ7qGzdSODpVka8iK8c=";
};
data-dir = osm-data:
pkgs.stdenv.mkDerivation {
name = "data-dir";
src = ./scripts;
buildInputs =
[ poly2geojson pkgs.jdk23 osmosis custom-osmium-tool ];
buildPhase = ''
mkdir -p cities/canada/quebec
cp ${quebec-cities-poly}/canada/quebec/* cities/canada/quebec
chmod u+w cities/canada/quebec
${pkgs.babashka}/bin/bb to-geojson.clj --osm-file ${osm-data} --paths cities/canada/quebec/*.poly
'';
installPhase = ''
cp -r cities $out
'';
};
historical-data-dir = pkgs.stdenv.mkDerivation {
name = "historical-data-dir";
src = ./scripts;
buildInputs = [ ];
buildPhase = "";
installPhase = ''
mkdir -p $out
ln -s ${data-dir osm-quebec."2023"} $out/2023
ln -s ${data-dir osm-quebec."2024"} $out/2024
ln -s ${data-dir osm-quebec."2025"} $out/2025
'';
};
python-virtual-env = pkgs.python312.withPackages (ps: [
ps.matplotlib
ps.jupyter
ps.tqdm
ps.duckdb
ps.pandas
ps.unidecode
ps.geopy
ps.click
ps.jinja2
]);
in {
packages = {
default = historical-data-dir;
poly2geojson = poly2geojson;
osmosis = osmosis;
duckdb-spatial = duckdb-spatial;
};
devShell = pkgs.mkShell {
name = "spacial-data-experiments";
buildInputs = with pkgs; [
duckdb
http-server
sqlfluff
poly2geojson
gdal
custom-osmium-tool
python-virtual-env
dotnet-sdk_8
nuget-to-nix
];
};
});
}