diff --git a/.envrc b/.envrc index 1d953f4..3550a30 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use nix +use flake diff --git a/.gitignore b/.gitignore index ea8c4bf..cb8c9e0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +.direnv \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0baf00e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.linkedProjects": [ + "./helloworld/Cargo.toml", + ] +} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..97a944e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "helloworld" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index d31d346..0bda405 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,2 @@ -[package] -name = "" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] +[workspace] +members = ["helloworld"] \ No newline at end of file diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..5b171c7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,114 @@ +/* +TODO +1. Find and replace "helloworld" with your package name for **ALL FILES IN REPOSITORY** +2. Add a flake description that describes the workspace on line 27 +3. Add a package description on line 70 +4. (optional) uncomment `nativeBuildInputs` and `buildInputs` on lines 43 and 44 if you need openssl +5. (optional) set your project homepage, license, and maintainers list on lines 48-51 +6. (optional) uncomment the NixOS module and update it for your needs +7. Delete this comment block +*/ + +/* +Some utility commands: +- `nix flake update --commit-lock-file` +- `nix flake lock update-input ` +- `nix build .#helloworld` +- `nix run .#helloworld` + +Updating `cargoHash`: +- Set `cargoHash` to an empty string +- run `nix run .#helloworld` +- Update `cargoHash` with correct hash from output +rust-project TODO: write shell script for automatically updating `cargoHash` +*/ + +{ + description = ""; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + rust-overlay.url = "github:oxalica/rust-overlay"; + }; + + outputs = { self, nixpkgs, rust-overlay }: + let + overlays = [ (import rust-overlay) ]; + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system overlays; + }; + rustSettings = with pkgs; { + src = ./.; + #nativeBuildInputs = [ pkg-config ]; + #buildInputs = [ openssl ]; + cargoHash = nixpkgs.lib.fakeHash; + }; + meta = with nixpkgs.lib; { + #homepage = "https://example.com"; + #license = [ licenses.gpl3 ]; + platforms = [ system ]; + #maintainers = with maintainers; [ ]; + }; + in { + devShells.${system}.default = with pkgs; mkShell { + packages = [ + (pkgs.rust-bin.stable.latest.default.override { + extensions = [ "rust-src" ]; + }) + bacon + ]; + inputsFrom = with self.packages.${system}; [ helloworld ]; + }; + packages.${system} = { + helloworld = pkgs.rustPlatform.buildRustPackage (rustSettings // { + pname = "helloworld"; + version = "0.1.0"; + buildAndTestSubdir = "helloworld"; + cargoHash = "sha256-+TaGIiKf+Pz2bTABeG8aCZz0/ZTCKl5398+qbas4Nvo="; + meta = meta // { + description = ""; + }; + }); + }; + /* + nixosModules.default = { config, ... }: let + lib = nixpkgs.lib; + in { + options.services.helloworld = { + enable = lib.mkEnableOption (lib.mdDoc "helloworld service"); + package = lib.mkOption { + type = lib.types.package; + default = self.packages.${system}.helloworld; + defaultText = "pkgs.helloworld"; + description = lib.mdDoc '' + The helloworld package that should be used. + ''; + }; + port = lib.mkOption { + type = lib.types.port; + default = 8000; + description = lib.mdDoc '' + The port at which to run. + ''; + }; + }; + config.systemd.services.helloworld = let + cfg = config.services.helloworld; + pkg = self.packages.${system}.helloworld; + in lib.mkIf cfg.enable { + description = pkg.meta.description; + after = [ "network.target" ]; + wantedBy = [ "network.target" ]; + serviceConfig = { + ExecStart = '' + ${cfg.package}/bin/helloworld --port ${builtins.toString cfg.port} + ''; + Restart = "always"; + DynamicUser = true; + }; + }; + }; + */ + }; +} diff --git a/helloworld/Cargo.toml b/helloworld/Cargo.toml new file mode 100644 index 0000000..5371865 --- /dev/null +++ b/helloworld/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "helloworld" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/main.rs b/helloworld/src/main.rs similarity index 100% rename from src/main.rs rename to helloworld/src/main.rs diff --git a/shell.nix b/shell.nix deleted file mode 100644 index bd75433..0000000 --- a/shell.nix +++ /dev/null @@ -1,21 +0,0 @@ -# -{ pkgs ? import {}}: - -let - rust_overlay = import (builtins.fetchTarball "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"); - pkgs = import { overlays = [ rust_overlay ]; }; - ruststable = (pkgs.rust-bin.stable.latest.default.override { - extensions = [ - "rust-src" - ]; - }); -in -pkgs.mkShell { - buildInputs = with pkgs; [ - ruststable - rust-analyzer - bacon - #pkg-config - #openssl - ]; -}