feat(nix): remove devenv, build backend with nix
This commit is contained in:
@@ -5,6 +5,8 @@ edition = "2024"
|
|||||||
publish = false
|
publish = false
|
||||||
authors = ["Lucien Cartier-Tilet <lucien@phundrak.com>"]
|
authors = ["Lucien Cartier-Tilet <lucien@phundrak.com>"]
|
||||||
license = "AGPL-3.0-only"
|
license = "AGPL-3.0-only"
|
||||||
|
description = "Backend for STA, communicating with the physical relay"
|
||||||
|
homepage = "https://labs.phundrak.com/phundrak/sta"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
|
|||||||
219
flake.lock
generated
219
flake.lock
generated
@@ -23,76 +23,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cachix": {
|
|
||||||
"inputs": {
|
|
||||||
"devenv": [
|
|
||||||
"devenv"
|
|
||||||
],
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"git-hooks": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1760971495,
|
|
||||||
"narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "cachix",
|
|
||||||
"rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"ref": "latest",
|
|
||||||
"repo": "cachix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"devenv": {
|
|
||||||
"inputs": {
|
|
||||||
"cachix": "cachix",
|
|
||||||
"flake-compat": "flake-compat",
|
|
||||||
"flake-parts": "flake-parts",
|
|
||||||
"git-hooks": "git-hooks",
|
|
||||||
"nix": "nix",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1766843567,
|
|
||||||
"narHash": "sha256-062oL6KZCH7ePf4BBG61OdFJUh5ovw6zTpd/lVwy/xk=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "devenv",
|
|
||||||
"rev": "d0f2c8545f09e5aba9d321079a284b550371879d",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "devenv",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"devenv-root": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"narHash": "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=",
|
|
||||||
"type": "file",
|
|
||||||
"url": "file:///dev/null"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "file:///dev/null"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fenix": {
|
"fenix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -115,43 +45,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1761588595,
|
|
||||||
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1760948891,
|
|
||||||
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
@@ -186,115 +79,25 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"git-hooks": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"gitignore": "gitignore",
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1760663237,
|
|
||||||
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "git-hooks.nix",
|
|
||||||
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "git-hooks.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gitignore": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1709087332,
|
|
||||||
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "gitignore.nix",
|
|
||||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "gitignore.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"flake-parts": [
|
|
||||||
"devenv",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"git-hooks-nix": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nixpkgs-23-11": [
|
|
||||||
"devenv"
|
|
||||||
],
|
|
||||||
"nixpkgs-regression": [
|
|
||||||
"devenv"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1761648602,
|
|
||||||
"narHash": "sha256-H97KSB/luq/aGobKRuHahOvT1r7C03BgB6D5HBZsbN8=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "nix",
|
|
||||||
"rev": "3e5644da6830ef65f0a2f7ec22830c46285bfff6",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"ref": "devenv-2.30.6",
|
|
||||||
"repo": "nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764580874,
|
"lastModified": 1777954456,
|
||||||
"narHash": "sha256-GMlWyeVh6fVuPeJI+ZmbJVV8DDS5wfdfDY88FHt5g/8=",
|
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||||
"owner": "cachix",
|
"owner": "nixos",
|
||||||
"repo": "devenv-nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dcf61356c3ab25f1362b4a4428a6d871e84f1d1d",
|
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "cachix",
|
"owner": "nixos",
|
||||||
"ref": "rolling",
|
"ref": "nixos-unstable",
|
||||||
"repo": "devenv-nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"alejandra": "alejandra",
|
"alejandra": "alejandra",
|
||||||
"devenv": "devenv",
|
|
||||||
"devenv-root": "devenv-root",
|
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
@@ -324,11 +127,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1766803264,
|
"lastModified": 1777950921,
|
||||||
"narHash": "sha256-eGK6He8BR6L7N73kyyjz/vGxZX1Usnr8Gwfs3D18KgE=",
|
"narHash": "sha256-NpOgt8ISaHTDNJZjNUfwFfbieKfRXzab4WKM31gZCGA=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "6b5c52313aaf3f3e1a0a6757bb89846edfb5195c",
|
"rev": "366ea19e0e55b768f74b7a0b2a20f847e7ae828d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
52
flake.nix
52
flake.nix
@@ -1,57 +1,69 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:cachix/devenv-nixpkgs/rolling";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
alejandra = {
|
alejandra = {
|
||||||
url = "github:kamadorueda/alejandra/4.0.0";
|
url = "github:kamadorueda/alejandra/4.0.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
devenv = {
|
|
||||||
url = "github:cachix/devenv";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
rust-overlay = {
|
rust-overlay = {
|
||||||
url = "github:oxalica/rust-overlay";
|
url = "github:oxalica/rust-overlay";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
devenv-root = {
|
|
||||||
url = "file+file:///dev/null";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
extra-trusted-public-keys = [
|
extra-trusted-public-keys = [
|
||||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
|
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
|
||||||
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
];
|
];
|
||||||
extra-substituters = [
|
extra-substituters = [
|
||||||
"https://devenv.cachix.org"
|
"https://phundrak.cachix.org?priority=10"
|
||||||
|
"https://nix-community.cachix.org?priority=20"
|
||||||
|
"https://cache.nixos.org?priority=30"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
self,
|
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
flake-utils,
|
flake-utils,
|
||||||
rust-overlay,
|
rust-overlay,
|
||||||
alejandra,
|
alejandra,
|
||||||
...
|
...
|
||||||
} @ inputs:
|
}:
|
||||||
flake-utils.lib.eachDefaultSystem (
|
flake-utils.lib.eachDefaultSystem (
|
||||||
system: let
|
system: let
|
||||||
overlays = [(import rust-overlay)];
|
overlays = [(import rust-overlay)];
|
||||||
pkgs = import nixpkgs {inherit system overlays;};
|
pkgs = import nixpkgs {inherit system overlays;};
|
||||||
rustVersion = pkgs.rust-bin.stable.latest.default;
|
rustVersion = pkgs.rust-bin.stable.latest.default;
|
||||||
rustPlatform = pkgs.makeRustPlatform {
|
targets = {
|
||||||
cargo = rustVersion;
|
linux-x86_64 = {
|
||||||
rustc = rustVersion;
|
crossPkgs = pkgs;
|
||||||
|
triple = "x86_64-unknown-linux-gnu";
|
||||||
|
};
|
||||||
|
linux-aarch64 = {
|
||||||
|
crossPkgs = pkgs.pkgsCross.aarch64-multiplatform;
|
||||||
|
triple = "aarch64-unknown-linux-gnu";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mkRustBuild = import ./nix/backend.nix;
|
||||||
|
packages = {
|
||||||
|
linux-x86_64 = mkRustBuild targets.linux-x86_64;
|
||||||
|
linux-aarch64 = mkRustBuild targets.linux-aarch64;
|
||||||
|
};
|
||||||
|
defaultBySystem = {
|
||||||
|
"x86_64-linux" = packages.linux-x86_64;
|
||||||
|
"aarch64-linux" = packages.linux-aarch64;
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
formatter = alejandra.defaultPackage.${system};
|
formatter = alejandra.defaultPackage.${system};
|
||||||
packages = import ./nix/package.nix {inherit pkgs rustPlatform;};
|
packages.backend =
|
||||||
devShell = import ./nix/shell.nix {
|
packages
|
||||||
inherit inputs pkgs self rustVersion system;
|
// {
|
||||||
};
|
default = defaultBySystem.${system} or packages.linux-x86_64;
|
||||||
|
};
|
||||||
|
devShell = import ./nix/shell.nix {inherit pkgs rustVersion;};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
24
nix/backend.nix
Normal file
24
nix/backend.nix
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
target: let
|
||||||
|
cargoToml = fromTOML (builtins.readFile ../backend/Cargo.toml);
|
||||||
|
inherit (cargoToml.package) name version;
|
||||||
|
pkgs = target.crossPkgs;
|
||||||
|
buildArgs = {
|
||||||
|
pname = name;
|
||||||
|
inherit version;
|
||||||
|
src = pkgs.lib.cleanSource ../.;
|
||||||
|
cargoLock.lockFile = ../Cargo.lock;
|
||||||
|
useNextest = true;
|
||||||
|
meta = {
|
||||||
|
inherit (cargoToml.package) description homepage;
|
||||||
|
};
|
||||||
|
postBuild = "${pkgs.upx}/bin/upx target/*/release/*${name}";
|
||||||
|
};
|
||||||
|
rustVersion = pkgs.rust-bin.stable.latest.default.override {
|
||||||
|
targets = [target.triple];
|
||||||
|
};
|
||||||
|
rustPlatform = target.crossPkgs.makeRustPlatform {
|
||||||
|
cargo = rustVersion;
|
||||||
|
rustc = rustVersion;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
rustPlatform.buildRustPackage buildArgs
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
rustPlatform,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cargoToml = builtins.fromTOML (builtins.readFile ../Cargo.toml);
|
|
||||||
name = cargoToml.package.name;
|
|
||||||
version = cargoToml.package.version;
|
|
||||||
rustBuild = rustPlatform.buildRustPackage {
|
|
||||||
pname = name;
|
|
||||||
inherit version;
|
|
||||||
src = ../.;
|
|
||||||
cargoLock.lockFile = ../Cargo.lock;
|
|
||||||
};
|
|
||||||
settingsDir = pkgs.runCommand "settings" {} ''
|
|
||||||
mkdir -p $out/settings
|
|
||||||
cp ${../settings}/*.yaml $out/settings/
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
jj-mcp = rustBuild;
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
rust-overlay,
|
|
||||||
inputs,
|
|
||||||
system,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
overlays = [(import rust-overlay)];
|
|
||||||
in rec {
|
|
||||||
pkgs = import inputs.nixpkgs {inherit system overlays;};
|
|
||||||
version = pkgs.rust-bin.stable.latest.default;
|
|
||||||
}
|
|
||||||
@@ -1,58 +1,32 @@
|
|||||||
{
|
{
|
||||||
inputs,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
self,
|
|
||||||
rustVersion,
|
rustVersion,
|
||||||
system,
|
|
||||||
...
|
|
||||||
}:
|
}:
|
||||||
inputs.devenv.lib.mkShell {
|
pkgs.mkShell {
|
||||||
inherit inputs pkgs;
|
packages = with pkgs; [
|
||||||
modules = [
|
(rustVersion.override {
|
||||||
{
|
extensions = [
|
||||||
packages = with pkgs; [
|
"clippy"
|
||||||
# Backend
|
"rust-src"
|
||||||
(rustVersion.override {
|
"rust-analyzer"
|
||||||
extensions = [
|
"rustfmt"
|
||||||
"clippy"
|
|
||||||
"rust-src"
|
|
||||||
"rust-analyzer"
|
|
||||||
"rustfmt"
|
|
||||||
];
|
|
||||||
})
|
|
||||||
bacon
|
|
||||||
cargo-deny
|
|
||||||
cargo-edit
|
|
||||||
cargo-shuttle
|
|
||||||
cargo-tarpaulin
|
|
||||||
just
|
|
||||||
marksman # Markdown LSP server
|
|
||||||
sqlx-cli
|
|
||||||
tombi # TOML LSP server
|
|
||||||
|
|
||||||
# Frontend
|
|
||||||
nodejs_24
|
|
||||||
rustywind # tailwind
|
|
||||||
nodePackages.prettier
|
|
||||||
nodePackages.eslint
|
|
||||||
nodePackages.pnpm
|
|
||||||
];
|
];
|
||||||
|
})
|
||||||
|
bacon
|
||||||
|
cargo-deny
|
||||||
|
cargo-edit
|
||||||
|
cargo-shuttle
|
||||||
|
cargo-tarpaulin
|
||||||
|
just
|
||||||
|
marksman # Markdown LSP server
|
||||||
|
sqlx-cli
|
||||||
|
tombi # TOML LSP server
|
||||||
|
|
||||||
processes.backend-run.exec = "bacon run";
|
# Frontend
|
||||||
|
nodejs_24
|
||||||
enterShell = ''
|
rustywind # tailwind
|
||||||
echo "🦀 Rust MCP development environment loaded!"
|
prettier
|
||||||
echo "📦 Rust version: $(rustc --version)"
|
eslint
|
||||||
echo "📦 Cargo version: $(cargo --version)"
|
pnpm
|
||||||
echo ""
|
|
||||||
echo "Available tools:"
|
|
||||||
echo " - rust-analyzer (LSP)"
|
|
||||||
echo " - clippy (linter)"
|
|
||||||
echo " - rustfmt (formatter)"
|
|
||||||
echo " - bacon (continuous testing/linting)"
|
|
||||||
echo " - cargo-deny (dependency checker)"
|
|
||||||
echo " - cargo-tarpaulin (code coverage)"
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user