From da4511673ef95e58ea61149ba8b67f159e58ff28 Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Sun, 23 Jul 2023 09:54:27 -0400 Subject: [PATCH 1/5] dream2nix -> pkgs.rustPlatform --- README.md | 2 +- flake.lock | 361 ++++------------------------------------------------- flake.nix | 38 +++--- 3 files changed, 38 insertions(+), 363 deletions(-) diff --git a/README.md b/README.md index c1f096a..dba2bdd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -A template Rust project with fully functional and no-frills Nix support (uses `dream2nix`), as well as builtin VSCode configuration to get IDE experience without any manual setup (just open in VSCode and accept the suggestions). +A template Rust project with fully functional and no-frills Nix support, as well as builtin VSCode configuration to get IDE experience without any manual setup (just open in VSCode and accept the suggestions). Note: If you are looking for the original template based on [this blog post](https://srid.ca/rust-nix)'s use of `crate2nix`, browse from [this tag](https://github.com/srid/rust-nix-template/tree/crate2nix). diff --git a/flake.lock b/flake.lock index 6b4875d..d135809 100644 --- a/flake.lock +++ b/flake.lock @@ -1,164 +1,15 @@ { "nodes": { - "all-cabal-json": { - "flake": false, - "locked": { - "lastModified": 1665552503, - "narHash": "sha256-r14RmRSwzv5c+bWKUDaze6pXM7nOsiz1H8nvFHJvufc=", - "owner": "nix-community", - "repo": "all-cabal-json", - "rev": "d7c0434eebffb305071404edcf9d5cd99703878e", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "hackage", - "repo": "all-cabal-json", - "type": "github" - } - }, - "crane": { - "flake": false, - "locked": { - "lastModified": 1681175776, - "narHash": "sha256-7SsUy9114fryHAZ8p1L6G6YSu7jjz55FddEwa2U8XZc=", - "owner": "ipetkov", - "repo": "crane", - "rev": "445a3d222947632b5593112bb817850e8a9cf737", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "ref": "v0.12.1", - "repo": "crane", - "type": "github" - } - }, - "devshell": { - "flake": false, - "locked": { - "lastModified": 1663445644, - "narHash": "sha256-+xVlcK60x7VY1vRJbNUEAHi17ZuoQxAIH4S4iUFUGBA=", - "owner": "numtide", - "repo": "devshell", - "rev": "e3dc3e21594fe07bdb24bdf1c8657acaa4cb8f66", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "devshell", - "type": "github" - } - }, - "dream2nix": { - "inputs": { - "all-cabal-json": "all-cabal-json", - "crane": "crane", - "devshell": "devshell", - "drv-parts": "drv-parts", - "flake-compat": "flake-compat", - "flake-parts": "flake-parts", - "flake-utils-pre-commit": "flake-utils-pre-commit", - "ghc-utils": "ghc-utils", - "gomod2nix": "gomod2nix", - "mach-nix": "mach-nix", - "nix-pypi-fetcher": "nix-pypi-fetcher", - "nixpkgs": "nixpkgs", - "nixpkgsV1": "nixpkgsV1", - "poetry2nix": "poetry2nix", - "pre-commit-hooks": "pre-commit-hooks", - "pruned-racket-catalog": "pruned-racket-catalog" - }, - "locked": { - "lastModified": 1687429612, - "narHash": "sha256-lVQlsVmWLQt+bgckBjiKxcqq2Jx1RYxyI3zmtdQ5Acs=", - "owner": "nix-community", - "repo": "dream2nix", - "rev": "6b750b01385718a6a84231d3c5451308978fa7de", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "dream2nix", - "type": "github" - } - }, - "drv-parts": { - "inputs": { - "flake-compat": [ - "dream2nix", - "flake-compat" - ], - "flake-parts": [ - "dream2nix", - "flake-parts" - ], - "nixpkgs": [ - "dream2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1680698112, - "narHash": "sha256-FgnobN/DvCjEsc0UAZEAdPLkL4IZi2ZMnu2K2bUaElc=", - "owner": "davhau", - "repo": "drv-parts", - "rev": "e8c2ec1157dc1edb002989669a0dbd935f430201", - "type": "github" - }, - "original": { - "owner": "davhau", - "repo": "drv-parts", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-parts": { - "inputs": { - "nixpkgs-lib": [ - "dream2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1675933616, - "narHash": "sha256-/rczJkJHtx16IFxMmAWu5nNYcSXNg1YYXTHoGjLrLUA=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "47478a4a003e745402acf63be7f9a092d51b83d7", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1687762428, - "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "lastModified": 1688466019, + "narHash": "sha256-VeM2akYrBYMsb4W/MmBo1zmaMfgbL4cH3Pu8PGyIwJ0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "rev": "8e8d955c22df93dbe24f19ea04f47a74adbdc5ec", "type": "github" }, "original": { @@ -182,75 +33,13 @@ "type": "github" } }, - "flake-utils-pre-commit": { - "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "ghc-utils": { - "flake": false, - "locked": { - "lastModified": 1662774800, - "narHash": "sha256-1Rd2eohGUw/s1tfvkepeYpg8kCEXiIot0RijapUjAkE=", - "ref": "refs/heads/master", - "rev": "bb3a2d3dc52ff0253fb9c2812bd7aa2da03e0fea", - "revCount": 1072, - "type": "git", - "url": "https://gitlab.haskell.org/bgamari/ghc-utils" - }, - "original": { - "type": "git", - "url": "https://gitlab.haskell.org/bgamari/ghc-utils" - } - }, - "gomod2nix": { - "flake": false, - "locked": { - "lastModified": 1627572165, - "narHash": "sha256-MFpwnkvQpauj799b4QTBJQFEddbD02+Ln5k92QyHOSk=", - "owner": "tweag", - "repo": "gomod2nix", - "rev": "67f22dd738d092c6ba88e420350ada0ed4992ae8", - "type": "github" - }, - "original": { - "owner": "tweag", - "repo": "gomod2nix", - "type": "github" - } - }, - "mach-nix": { - "flake": false, - "locked": { - "lastModified": 1634711045, - "narHash": "sha256-m5A2Ty88NChLyFhXucECj6+AuiMZPHXNbw+9Kcs7F6Y=", - "owner": "DavHau", - "repo": "mach-nix", - "rev": "4433f74a97b94b596fa6cd9b9c0402104aceef5d", - "type": "github" - }, - "original": { - "id": "mach-nix", - "type": "indirect" - } - }, "mission-control": { "locked": { - "lastModified": 1683658484, - "narHash": "sha256-JkGnWyYZxOnyOhztrxLSqaod6+O/3rRypq0dAqA/zn0=", + "lastModified": 1689802645, + "narHash": "sha256-USdf0MXZlllulmqhcqcLFQTt5FK1Lx3lQ7gxyZkz7Pk=", "owner": "Platonic-Systems", "repo": "mission-control", - "rev": "a0c93bd764a3c25e6999397e9f5f119c1b124e38", + "rev": "b48d201323df0ed2d4f05283139eaa6580ee7c39", "type": "github" }, "original": { @@ -259,45 +48,30 @@ "type": "github" } }, - "nix-pypi-fetcher": { - "flake": false, - "locked": { - "lastModified": 1669065297, - "narHash": "sha256-UStjXjNIuIm7SzMOWvuYWIHBkPUKQ8Id63BMJjnIDoA=", - "owner": "DavHau", - "repo": "nix-pypi-fetcher", - "rev": "a9885ac6a091576b5195d547ac743d45a2a615ac", - "type": "github" - }, - "original": { - "owner": "DavHau", - "repo": "nix-pypi-fetcher", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1665580254, - "narHash": "sha256-hO61XPkp1Hphl4HGNzj1VvDH5URt7LI6LaY/385Eul4=", - "owner": "NixOS", + "lastModified": 1690031011, + "narHash": "sha256-kzK0P4Smt7CL53YCdZCBbt9uBFFhE0iNvCki20etAf4=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "f634d427b0224a5f531ea5aa10c3960ba6ec5f0f", + "rev": "12303c652b881435065a98729eb7278313041e49", "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "nixos", "ref": "nixos-unstable", - "type": "indirect" + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-lib": { "locked": { "dir": "lib", - "lastModified": 1685564631, - "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "lastModified": 1688049487, + "narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9", "type": "github" }, "original": { @@ -308,38 +82,7 @@ "type": "github" } }, - "nixpkgsV1": { - "locked": { - "lastModified": 1686501370, - "narHash": "sha256-G0WuM9fqTPRc2URKP9Lgi5nhZMqsfHGrdEbrLvAPJcg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "75a5ebf473cd60148ba9aec0d219f72e5cf52519", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, "nixpkgs_2": { - "locked": { - "lastModified": 1687681650, - "narHash": "sha256-M2If+gRcfpmaJy/XbfSsRzLlPpoU4nr0NHnKKl50fd8=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "1c9db9710cb23d60570ad4d7ab829c2d34403de3", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { "locked": { "lastModified": 1680945546, "narHash": "sha256-8FuaH5t/aVi/pR1XxnF0qi4WwMYC+YxlfdsA0V+TEuQ=", @@ -355,72 +98,12 @@ "type": "github" } }, - "poetry2nix": { - "flake": false, - "locked": { - "lastModified": 1666918719, - "narHash": "sha256-BkK42fjAku+2WgCOv2/1NrPa754eQPV7gPBmoKQBWlc=", - "owner": "nix-community", - "repo": "poetry2nix", - "rev": "289efb187123656a116b915206e66852f038720e", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "1.36.0", - "repo": "poetry2nix", - "type": "github" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-utils": [ - "dream2nix", - "flake-utils-pre-commit" - ], - "nixpkgs": [ - "dream2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1646153636, - "narHash": "sha256-AlWHMzK+xJ1mG267FdT8dCq/HvLCA6jwmx2ZUy5O8tY=", - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "b6bc0b21e1617e2b07d8205e7fae7224036dfa4b", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "type": "github" - } - }, - "pruned-racket-catalog": { - "flake": false, - "locked": { - "lastModified": 1672537287, - "narHash": "sha256-SuOvXVcLfakw18oJB/PuRMyvGyGG1+CQD3R+TGHIv44=", - "owner": "nix-community", - "repo": "pruned-racket-catalog", - "rev": "c8b89557fb53b36efa2ee48a769c7364df0f6262", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "catalog", - "repo": "pruned-racket-catalog", - "type": "github" - } - }, "root": { "inputs": { - "dream2nix": "dream2nix", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts", "flake-root": "flake-root", "mission-control": "mission-control", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "systems": "systems", "treefmt-nix": "treefmt-nix" } @@ -442,14 +125,14 @@ }, "treefmt-nix": { "inputs": { - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1687600980, - "narHash": "sha256-Tbu9Hj7JVX+rCYyUPJNQTPQqw382ahAFNoDVTrXnjFk=", + "lastModified": 1689620039, + "narHash": "sha256-BtNwghr05z7k5YMdq+6nbue+nEalvDepuA7qdQMAKoQ=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "b100498935f04a70605dfde0edc6e311d865b869", + "rev": "719c2977f958c41fa60a928e2fbc50af14844114", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 4cb2fbd..d12beaa 100644 --- a/flake.nix +++ b/flake.nix @@ -4,9 +4,6 @@ flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; - # Rust - dream2nix.url = "github:nix-community/dream2nix"; - # Dev tools treefmt-nix.url = "github:numtide/treefmt-nix"; mission-control.url = "github:Platonic-Systems/mission-control"; @@ -17,32 +14,25 @@ inputs.flake-parts.lib.mkFlake { inherit inputs; } { systems = import inputs.systems; imports = [ - inputs.dream2nix.flakeModuleBeta inputs.treefmt-nix.flakeModule inputs.mission-control.flakeModule inputs.flake-root.flakeModule ]; perSystem = { config, self', pkgs, lib, system, ... }: { - # Rust project definition - # cf. https://github.com/nix-community/dream2nix - dream2nix.inputs."rust-nix-template" = { - source = lib.sourceFilesBySuffices ./. [ - ".rs" - "Cargo.toml" - "Cargo.lock" - ]; - projects."rust-nix-template" = { name, ... }: { - inherit name; - subsystem = "rust"; - translator = "cargo-lock"; + # Rust package + packages.default = + let + cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); + in + pkgs.rustPlatform.buildRustPackage { + inherit (cargoToml.package) name version; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; }; - }; - # Flake outputs - packages = config.dream2nix.outputs.rust-nix-template.packages; + # Rust dev environment devShells.default = pkgs.mkShell { inputsFrom = [ - config.dream2nix.outputs.rust-nix-template.devShells.default config.treefmt.build.devShell config.mission-control.devShell config.flake-root.devShell @@ -51,9 +41,11 @@ # For rust-analyzer 'hover' tooltips to work. export RUST_SRC_PATH=${pkgs.rustPlatform.rustLibSrc} ''; - nativeBuildInputs = [ - pkgs.cargo-watch - pkgs.rust-analyzer + nativeBuildInputs = with pkgs; [ + rustc + cargo + cargo-watch + rust-analyzer ]; }; From 5b59b4af990972ea6a056344429c0bfd05fb327a Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Sun, 23 Jul 2023 10:00:06 -0400 Subject: [PATCH 2/5] Add Jenkinsfile --- Jenkinsfile | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..1e1e945 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,20 @@ +// We use https://github.com/juspay/jenkins-nix-ci + +pipeline { + agent any + stages { + stage ('Build') { + steps { + // https://github.com/srid/nixci + nixCI () + } + } + /* stage ('Cachix push') { + when { branch 'master' } + steps { + cachixPush "srid" + } + } + */ + } +} From a511ca0e764824661c083e12947bee1f3d802342 Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Sun, 23 Jul 2023 10:07:10 -0400 Subject: [PATCH 3/5] Switch to clap, to demonstrate non-rust deps --- Cargo.lock | 265 ++++++++++++++++++++++++++++++++++++++++++++++++---- Cargo.toml | 2 +- flake.nix | 120 +++++++++++++----------- src/main.rs | 19 ++-- 4 files changed, 323 insertions(+), 83 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28057e3..303b00f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,32 +3,174 @@ version = 3 [[package]] -name = "argh" -version = "0.1.10" +name = "anstream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab257697eb9496bf75526f0217b5ed64636a9cfafa78b8365c71bd283fcef93e" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ - "argh_derive", - "argh_shared", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", ] [[package]] -name = "argh_derive" -version = "0.1.10" +name = "anstyle" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b382dbd3288e053331f03399e1db106c9fb0d8562ad62cb04859ae926f324fa6" +checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" + +[[package]] +name = "anstyle-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" dependencies = [ - "argh_shared", + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "bitflags" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "clap" +version = "4.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +dependencies = [ + "clap_builder", + "clap_derive", + "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +dependencies = [ + "heck", "proc-macro2", "quote", "syn", ] [[package]] -name = "argh_shared" -version = "0.1.10" +name = "clap_lex" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cb94155d965e3d37ffbbe7cc5b82c3dd79dd33bd48e536f73d2cfb8d85506f" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix", + "windows-sys", +] + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "linux-raw-sys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "proc-macro2" @@ -52,14 +194,33 @@ dependencies = [ name = "rust-nix-template" version = "0.1.0" dependencies = [ - "argh", + "clap", ] [[package]] -name = "syn" -version = "1.0.109" +name = "rustix" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "2.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" dependencies = [ "proc-macro2", "quote", @@ -71,3 +232,75 @@ name = "unicode-ident" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/Cargo.toml b/Cargo.toml index 8ff0e89..5790d17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,4 +8,4 @@ version = "0.1.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -argh = "0.1.10" +clap = { version = "4.3.14", features = ["derive"] } diff --git a/flake.nix b/flake.nix index d12beaa..662c776 100644 --- a/flake.nix +++ b/flake.nix @@ -18,70 +18,76 @@ inputs.mission-control.flakeModule inputs.flake-root.flakeModule ]; - perSystem = { config, self', pkgs, lib, system, ... }: { - # Rust package - packages.default = - let - cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); - in - pkgs.rustPlatform.buildRustPackage { - inherit (cargoToml.package) name version; - src = ./.; - cargoLock.lockFile = ./Cargo.lock; - }; + perSystem = { config, self', pkgs, lib, system, ... }: - # Rust dev environment - devShells.default = pkgs.mkShell { - inputsFrom = [ - config.treefmt.build.devShell - config.mission-control.devShell - config.flake-root.devShell + let + cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); + nonRustDeps = [ + pkgs.libiconv ]; - shellHook = '' - # For rust-analyzer 'hover' tooltips to work. - export RUST_SRC_PATH=${pkgs.rustPlatform.rustLibSrc} - ''; - nativeBuildInputs = with pkgs; [ - rustc - cargo - cargo-watch - rust-analyzer - ]; - }; + in + { + # Rust package + packages.default = + pkgs.rustPlatform.buildRustPackage { + inherit (cargoToml.package) name version; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + }; - # Add your auto-formatters here. - # cf. https://numtide.github.io/treefmt/ - treefmt.config = { - projectRootFile = "flake.nix"; - programs = { - nixpkgs-fmt.enable = true; - rustfmt.enable = true; - }; - }; - - # Makefile'esque but in Nix. Add your dev scripts here. - # cf. https://github.com/Platonic-Systems/mission-control - mission-control.scripts = { - fmt = { - exec = config.treefmt.build.wrapper; - description = "Auto-format project tree"; - }; - - run = { - exec = '' - cargo run "$@" + # Rust dev environment + devShells.default = pkgs.mkShell { + inputsFrom = [ + config.treefmt.build.devShell + config.mission-control.devShell + config.flake-root.devShell + ]; + shellHook = '' + # For rust-analyzer 'hover' tooltips to work. + export RUST_SRC_PATH=${pkgs.rustPlatform.rustLibSrc} ''; - description = "Run the project executable"; + buildInputs = nonRustDeps; + nativeBuildInputs = with pkgs; [ + rustc + cargo + cargo-watch + rust-analyzer + ]; }; - watch = { - exec = '' - set -x - cargo watch -x "run -- $*" - ''; - description = "Watch for changes and run the project executable"; + # Add your auto-formatters here. + # cf. https://numtide.github.io/treefmt/ + treefmt.config = { + projectRootFile = "flake.nix"; + programs = { + nixpkgs-fmt.enable = true; + rustfmt.enable = true; + }; + }; + + # Makefile'esque but in Nix. Add your dev scripts here. + # cf. https://github.com/Platonic-Systems/mission-control + mission-control.scripts = { + fmt = { + exec = config.treefmt.build.wrapper; + description = "Auto-format project tree"; + }; + + run = { + exec = '' + cargo run "$@" + ''; + description = "Run the project executable"; + }; + + watch = { + exec = '' + set -x + cargo watch -x "run -- $*" + ''; + description = "Watch for changes and run the project executable"; + }; }; }; - }; }; } diff --git a/src/main.rs b/src/main.rs index 9990f39..78591e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,22 @@ -use argh::FromArgs; +use clap::Parser; -#[derive(FromArgs, Debug)] +#[derive(Parser, Debug)] +#[clap(author = "Sridhar Ratnakumar", version, about)] /// Application configuration -struct Config { +struct Args { /// whether to be verbose - #[argh(switch, short = 'v')] + #[arg(short = 'v')] verbose: bool, /// an optional name to green - #[argh(option)] + #[arg()] name: Option, } fn main() { - let cfg: Config = argh::from_env(); - if cfg.verbose { - println!("DEBUG {cfg:?}"); + let args = Args::parse(); + if args.verbose { + println!("DEBUG {args:?}"); } - println!("Hello {}!", cfg.name.unwrap_or("world".to_string())); + println!("Hello {}!", args.name.unwrap_or("world".to_string())); } From d72071c9735153faa633589f7cdcf2e8b30755d2 Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Sun, 23 Jul 2023 10:10:10 -0400 Subject: [PATCH 4/5] mission-control -> just --- README.md | 2 +- flake.lock | 32 -------------------------------- flake.nix | 31 +------------------------------ justfile | 14 ++++++++++++++ 4 files changed, 16 insertions(+), 63 deletions(-) create mode 100644 justfile diff --git a/README.md b/README.md index dba2bdd..55077d2 100644 --- a/README.md +++ b/README.md @@ -24,4 +24,4 @@ nix develop -c cargo run nix build ``` -There are also [mission-control](https://github.com/Platonic-Systems/mission-control) shell commands provided in the devShell. +We also provide a [`justfile`](https://just.systems/) for Makefile'esque commands. \ No newline at end of file diff --git a/flake.lock b/flake.lock index d135809..2904a5f 100644 --- a/flake.lock +++ b/flake.lock @@ -18,36 +18,6 @@ "type": "github" } }, - "flake-root": { - "locked": { - "lastModified": 1680964220, - "narHash": "sha256-dIdTYcf+KW9a4pKHsEbddvLVSfR1yiAJynzg2x0nfWg=", - "owner": "srid", - "repo": "flake-root", - "rev": "f1c0b93d05bdbea6c011136ba1a135c80c5b326c", - "type": "github" - }, - "original": { - "owner": "srid", - "repo": "flake-root", - "type": "github" - } - }, - "mission-control": { - "locked": { - "lastModified": 1689802645, - "narHash": "sha256-USdf0MXZlllulmqhcqcLFQTt5FK1Lx3lQ7gxyZkz7Pk=", - "owner": "Platonic-Systems", - "repo": "mission-control", - "rev": "b48d201323df0ed2d4f05283139eaa6580ee7c39", - "type": "github" - }, - "original": { - "owner": "Platonic-Systems", - "repo": "mission-control", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1690031011, @@ -101,8 +71,6 @@ "root": { "inputs": { "flake-parts": "flake-parts", - "flake-root": "flake-root", - "mission-control": "mission-control", "nixpkgs": "nixpkgs", "systems": "systems", "treefmt-nix": "treefmt-nix" diff --git a/flake.nix b/flake.nix index 662c776..7ce3902 100644 --- a/flake.nix +++ b/flake.nix @@ -6,8 +6,6 @@ # Dev tools treefmt-nix.url = "github:numtide/treefmt-nix"; - mission-control.url = "github:Platonic-Systems/mission-control"; - flake-root.url = "github:srid/flake-root"; }; outputs = inputs: @@ -15,8 +13,6 @@ systems = import inputs.systems; imports = [ inputs.treefmt-nix.flakeModule - inputs.mission-control.flakeModule - inputs.flake-root.flakeModule ]; perSystem = { config, self', pkgs, lib, system, ... }: @@ -39,8 +35,6 @@ devShells.default = pkgs.mkShell { inputsFrom = [ config.treefmt.build.devShell - config.mission-control.devShell - config.flake-root.devShell ]; shellHook = '' # For rust-analyzer 'hover' tooltips to work. @@ -48,6 +42,7 @@ ''; buildInputs = nonRustDeps; nativeBuildInputs = with pkgs; [ + just rustc cargo cargo-watch @@ -64,30 +59,6 @@ rustfmt.enable = true; }; }; - - # Makefile'esque but in Nix. Add your dev scripts here. - # cf. https://github.com/Platonic-Systems/mission-control - mission-control.scripts = { - fmt = { - exec = config.treefmt.build.wrapper; - description = "Auto-format project tree"; - }; - - run = { - exec = '' - cargo run "$@" - ''; - description = "Run the project executable"; - }; - - watch = { - exec = '' - set -x - cargo watch -x "run -- $*" - ''; - description = "Watch for changes and run the project executable"; - }; - }; }; }; } diff --git a/justfile b/justfile new file mode 100644 index 0000000..c03df42 --- /dev/null +++ b/justfile @@ -0,0 +1,14 @@ +default: + @just --list + +# Auto-format the source tree +fmt: + treefmt + +# Run 'cargo run' on the project +run *ARGS: + cargo run {{ARGS}} + +# Run 'cargo watch' to run the project (auto-recompiles) +watch *ARGS: + cargo watch -x "run -- {{ARGS}}" \ No newline at end of file From 50741677232653ec0fb465471ce1ab83e37efb3a Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Sun, 23 Jul 2023 10:11:14 -0400 Subject: [PATCH 5/5] fmt --- flake.nix | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/flake.nix b/flake.nix index 7ce3902..9bbdc49 100644 --- a/flake.nix +++ b/flake.nix @@ -15,7 +15,6 @@ inputs.treefmt-nix.flakeModule ]; perSystem = { config, self', pkgs, lib, system, ... }: - let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); nonRustDeps = [ @@ -24,12 +23,11 @@ in { # Rust package - packages.default = - pkgs.rustPlatform.buildRustPackage { - inherit (cargoToml.package) name version; - src = ./.; - cargoLock.lockFile = ./Cargo.lock; - }; + packages.default = pkgs.rustPlatform.buildRustPackage { + inherit (cargoToml.package) name version; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + }; # Rust dev environment devShells.default = pkgs.mkShell {