diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index ea8c4bf..e049ed5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ /target +/result +/result-lib +.direnv diff --git a/flake.lock b/flake.lock index 77e010b..e5e8a28 100644 --- a/flake.lock +++ b/flake.lock @@ -1,33 +1,51 @@ { "nodes": { - "flake-utils": { + "flake-parts": { "inputs": { - "systems": "systems" + "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1681202837, - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "lastModified": 1706830856, + "narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1696604326, - "narHash": "sha256-YXUNI0kLEcI5g8lqGMb0nh67fY9f2YoJsILafh6zlMo=", - "owner": "NixOS", + "lastModified": 1706732774, + "narHash": "sha256-hqJlyJk4MRpcItGYMF+3uHe8HvxNETWvlGtLuVpqLU0=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "87828a0e03d1418e848d3dd3f3014a632e4a4f64", + "rev": "b8b232ae7b8b144397fdb12d20f592e5e7c1a64d", "type": "github" }, "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1706550542, + "narHash": "sha256-UcsnCG6wx++23yeER4Hg18CXWbgNpqNXcHIo5/1Y+hc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "97b17f32362e475016f942bbdfda4a4a72a8a652", + "type": "github" + }, + "original": { + "dir": "lib", "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", @@ -36,43 +54,26 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1681358109, - "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", - "owner": "NixOS", + "lastModified": 1705856552, + "narHash": "sha256-JXfnuEf5Yd6bhMs/uvM67/joxYKoysyE3M2k6T3eWbg=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9", + "rev": "612f97239e2cc474c13c9dafa0df378058c5ad8d", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", + "owner": "nixos", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { + "flake-parts": "flake-parts", "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - } - }, - "rust-overlay": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1696817516, - "narHash": "sha256-Xt9OY4Wnk9/vuUfA0OHFtmSlaen5GyiS9msgwOz3okI=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "c0df7f2a856b5ff27a3ce314f6d7aacf5fda546f", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" + "systems": "systems", + "treefmt-nix": "treefmt-nix" } }, "systems": { @@ -89,6 +90,24 @@ "repo": "default", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1706462057, + "narHash": "sha256-7dG1D4iqqt0bEbBqUWk6lZiSqqwwAO0Hd1L5opVyhNM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6153c2a3ff4c38d231e3ae99af29b87f1df5901", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index f38e0cf..73f7aae 100644 --- a/flake.nix +++ b/flake.nix @@ -1,31 +1,69 @@ { inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - rust-overlay.url = "github:oxalica/rust-overlay"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; + systems.url = "github:nix-systems/default"; + + # Dev tools + treefmt-nix.url = "github:numtide/treefmt-nix"; }; - outputs = { - self, - nixpkgs, - rust-overlay, - }: let - system = "x86_64-linux"; - rustVersion = "1.73.0"; - rust = pkgs.rust-bin.stable.${rustVersion}.default.override { - extensions = [ - "rust-src" # for rust-analyzer + outputs = inputs: + inputs.flake-parts.lib.mkFlake {inherit inputs;} { + systems = import inputs.systems; + imports = [ + inputs.treefmt-nix.flakeModule ]; + perSystem = { + config, + self', + pkgs, + lib, + system, + ... + }: let + cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); + nonRustDeps = with pkgs; [ + libiconv + libudev-zero + pkg-config + ]; + rust-toolchain = pkgs.symlinkJoin { + name = "rust-toolchain"; + paths = with pkgs; [rustc cargo cargo-watch rust-analyzer rustPlatform.rustcSrc]; + }; + udev-rule = builtins.readFile ./heliox.udev; + in { + # Rust package + packages.default = pkgs.rustPlatform.buildRustPackage { + inherit (cargoToml.package) name version; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + postInstall = '' + mkdir -p $out/etc/udev/rules.d/ + echo ${udev-rule} > $out/etc/udev/rules.d/70-heliox.rules + ''; + }; + + # Rust dev environment + devShells.default = pkgs.mkShell { + inputsFrom = [ + config.treefmt.build.devShell + ]; + buildInputs = nonRustDeps; + nativeBuildInputs = with pkgs; [ + rust-toolchain + ]; + RUST_BACKTRACE = 1; + }; + + treefmt.config = { + projectRootFile = "flake.nix"; + programs = { + nixpkgs-fmt.enable = true; + rustfmt.enable = true; + }; + }; + }; }; - pkgs = import nixpkgs { - inherit system; - overlays = [rust-overlay.overlays.default]; - }; - in { - devShells.${system}.default = pkgs.mkShell { - buildInputs = - [rust] - ++ (with pkgs; [rust-analyzer pkg-config libudev-zero]); - RUST_BACKTRACE = 1; - }; - }; } diff --git a/heliox.udev b/heliox.udev new file mode 100644 index 0000000..24ed058 --- /dev/null +++ b/heliox.udev @@ -0,0 +1,2 @@ +SUBSYSTEM=="tty", GROUP="plugdev". MODE="0660" +SUBSYSTEMS=="usb", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", SYMLINK+="heliox" diff --git a/udev.nix b/udev.nix deleted file mode 100644 index 9881d00..0000000 --- a/udev.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - pkgs, - ... -}: let - my-rules = pkgs.writeTextFile { - name = "70-heliox.rules"; - text = '' - SUBSYSTEM=="tty", GROUP="plugdev". MODE="0660" - SUBSYSTEMS=="usb", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", SYMLINK+="heliox" - ''; - destination = "/etc/udev/rules.d/70-heliox.rules"; - }; -in { - services.udev.packages = [ my-rules ]; -}