mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-05 23:27: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
|
.vscode
|
||||||
lib/EpdFont/fontsrc
|
lib/EpdFont/fontsrc
|
||||||
*.generated.h
|
*.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