mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-05 07:07:38 +03:00
Add reproducible Nix dev environment
This commit is contained in:
parent
bed1fbf849
commit
003837a634
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@
|
||||
.vscode
|
||||
lib/EpdFont/fontsrc
|
||||
*.generated.h
|
||||
result
|
||||
|
||||
61
flake.lock
Normal file
61
flake.lock
Normal file
@ -0,0 +1,61 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765835352,
|
||||
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "a34fae9c08a15ad73f295041fec82323541400a9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1767379071,
|
||||
"narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "fb7944c166a3b630f177938e478f0378e64ce108",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1765674936,
|
||||
"narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
120
flake.nix
Normal file
120
flake.nix
Normal file
@ -0,0 +1,120 @@
|
||||
{
|
||||
description = "CrossPoint Reader - Firmware for Xteink X4 e-paper display";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
};
|
||||
|
||||
outputs = inputs@{ flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
|
||||
perSystem = { config, self', pkgs, lib, system, ... }:
|
||||
let
|
||||
# Version from platformio.ini
|
||||
version = "0.12.0";
|
||||
|
||||
# Create a platformio wrapper with all required dependencies
|
||||
platformio = pkgs.platformio-core.overrideAttrs (old: {
|
||||
propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
|
||||
pkgs.python3Packages.packaging
|
||||
];
|
||||
});
|
||||
|
||||
# Python with required packages for build scripts
|
||||
pythonEnv = pkgs.python3.withPackages (ps: [ ps.pip ]);
|
||||
|
||||
# FHS environment to run PlatformIO with dynamically linked toolchains
|
||||
fhsEnv = pkgs.buildFHSEnv {
|
||||
name = "pio-env";
|
||||
targetPkgs = pkgs: [
|
||||
platformio
|
||||
pythonEnv
|
||||
pkgs.git
|
||||
pkgs.zlib
|
||||
pkgs.stdenv.cc.cc.lib
|
||||
];
|
||||
runScript = "bash";
|
||||
};
|
||||
|
||||
# Build script that runs inside FHS environment
|
||||
buildScript = pkgs.writeShellScriptBin "build-firmware" ''
|
||||
set -e
|
||||
echo "Building CrossPoint Reader firmware..."
|
||||
echo ""
|
||||
|
||||
# Ensure we're in the project directory
|
||||
if [ ! -f platformio.ini ]; then
|
||||
echo "Error: platformio.ini not found. Run this from the project root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run the build inside FHS environment
|
||||
${fhsEnv}/bin/pio-env -c "pio run -e gh_release"
|
||||
|
||||
echo ""
|
||||
echo "Build complete! Firmware at: .pio/build/gh_release/firmware.bin"
|
||||
'';
|
||||
|
||||
# Wrapper for pio that runs inside FHS environment
|
||||
pioWrapper = pkgs.writeShellScriptBin "pio" ''
|
||||
exec ${fhsEnv}/bin/pio-env -c "pio $*"
|
||||
'';
|
||||
in
|
||||
{
|
||||
packages = {
|
||||
default = buildScript;
|
||||
build-script = buildScript;
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [
|
||||
# Build tools (wrapped for FHS compatibility)
|
||||
fhsEnv
|
||||
pioWrapper
|
||||
buildScript
|
||||
pythonEnv
|
||||
|
||||
# C/C++ language server
|
||||
pkgs.clang-tools
|
||||
|
||||
# Python language server
|
||||
pkgs.python3Packages.python-lsp-server
|
||||
|
||||
# Nix language server
|
||||
pkgs.nixd
|
||||
|
||||
# Git for submodules
|
||||
pkgs.git
|
||||
|
||||
# Useful utilities
|
||||
pkgs.esptool
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "CrossPoint Reader development environment"
|
||||
echo ""
|
||||
echo "Build commands:"
|
||||
echo " pio run - Build firmware (default env, via FHS wrapper)"
|
||||
echo " pio run -e gh_release - Build release firmware"
|
||||
echo " pio run --target upload - Flash to device"
|
||||
echo " build-firmware - Build release firmware directly"
|
||||
echo ""
|
||||
echo "Enter FHS shell for direct PlatformIO access:"
|
||||
echo " pio-env - Enter FHS shell with PlatformIO"
|
||||
echo ""
|
||||
echo "Language servers available:"
|
||||
echo " clangd - C/C++ LSP"
|
||||
echo " pylsp - Python LSP"
|
||||
echo " nixd - Nix LSP"
|
||||
'';
|
||||
};
|
||||
|
||||
apps.build = {
|
||||
type = "app";
|
||||
program = "${buildScript}/bin/build-firmware";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user