From 447f9c8250f0c0320371ce922b9d8b048af8a511 Mon Sep 17 00:00:00 2001 From: Ulrik Strid Date: Mon, 19 Jun 2023 11:00:08 +0200 Subject: [PATCH 1/2] Add simple template --- flake.nix | 16 +++++++--- templates/simple/.gitignore | 2 ++ templates/simple/.ocamlformat | 0 templates/simple/dune-project | 1 + templates/simple/flake.nix | 44 ++++++++++++++++++++++++++ templates/simple/nix/default.nix | 49 +++++++++++++++++++++++++++++ templates/simple/package.opam | 0 templates/simple/src/bin/dune | 4 +++ templates/simple/src/bin/main.ml | 18 +++++++++++ templates/simple/src/lib/dune | 3 ++ templates/simple/src/lib/package.ml | 1 + templates/simple/test/dune | 3 ++ templates/simple/test/test.ml | 5 +++ 13 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 templates/simple/.gitignore create mode 100644 templates/simple/.ocamlformat create mode 100644 templates/simple/dune-project create mode 100644 templates/simple/flake.nix create mode 100644 templates/simple/nix/default.nix create mode 100644 templates/simple/package.opam create mode 100644 templates/simple/src/bin/dune create mode 100644 templates/simple/src/bin/main.ml create mode 100644 templates/simple/src/lib/dune create mode 100644 templates/simple/src/lib/package.ml create mode 100644 templates/simple/test/dune create mode 100644 templates/simple/test/test.ml diff --git a/flake.nix b/flake.nix index 7555e0c20..caa186363 100644 --- a/flake.nix +++ b/flake.nix @@ -38,14 +38,22 @@ } // attrs); in /* - You might read - https://nixos.org/manual/nixpkgs/stable/#sec-overlays-argument and - want to change this but because of how we're doing overlays we will - be overriding any extraOverlays if we don't use `appendOverlays` + You might read + https://nixos.org/manual/nixpkgs/stable/#sec-overlays-argument and + want to change this but because of how we're doing overlays we will + be overriding any extraOverlays if we don't use `appendOverlays` */ pkgs.appendOverlays extraOverlays; overlays.default = final: prev: overlay final prev; + + templates.simple = { + description = + "Simple setup for ocaml development"; + path = ./templates/simple; + }; + + templates.default = self.templates.simple; } (flake-utils.lib.eachDefaultSystem (system: { legacyPackages = self.makePkgs { inherit system; }; diff --git a/templates/simple/.gitignore b/templates/simple/.gitignore new file mode 100644 index 000000000..b86e1533f --- /dev/null +++ b/templates/simple/.gitignore @@ -0,0 +1,2 @@ +_build +result \ No newline at end of file diff --git a/templates/simple/.ocamlformat b/templates/simple/.ocamlformat new file mode 100644 index 000000000..e69de29bb diff --git a/templates/simple/dune-project b/templates/simple/dune-project new file mode 100644 index 000000000..37f995d64 --- /dev/null +++ b/templates/simple/dune-project @@ -0,0 +1 @@ +(lang dune 3.0) diff --git a/templates/simple/flake.nix b/templates/simple/flake.nix new file mode 100644 index 000000000..74422fd4d --- /dev/null +++ b/templates/simple/flake.nix @@ -0,0 +1,44 @@ +{ + nixConfig = { + extra-substituters = "https://ocaml.nix-cache.com"; + extra-trusted-public-keys = "ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY="; + }; + + inputs = { + nixpkgs.url = "github:nix-ocaml/nix-overlays"; + flake-utils.url = "github:numtide/flake-utils"; + flake-utils.follows = "nixpkgs/flake-utils"; + nix-filter.url = "github:numtide/nix-filter"; + }; + + outputs = { self, nixpkgs, flake-utils, nix-filter }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; in + { + packages = { + inherit (pkgs.ocamlPackages.callPackage ./nix { + inherit nix-filter; + doCheck = true; + }) package; + }; + + devShells = { + default = pkgs.mkShell { + inputsFrom = with self.packages.${system}; [ + package + ]; + + nativeBuildInputs = with pkgs.ocamlPackages; [ + ocaml + dune + + ocaml-lsp + + ocamlformat + dune-release + odoc + ]; + }; + }; + }); +} diff --git a/templates/simple/nix/default.nix b/templates/simple/nix/default.nix new file mode 100644 index 000000000..dc9a11b0c --- /dev/null +++ b/templates/simple/nix/default.nix @@ -0,0 +1,49 @@ +{ pkgs +, stdenv +, lib +, nix-filter +, ocamlPackages +, static ? false +, doCheck +}: +with ocamlPackages; { + package = buildDunePackage { + pname = "package"; + version = "1.0.0"; + + src = with nix-filter.lib; + filter { + # Root of the project relative to this file + root = ./..; + # If no include is passed, it will include all the paths. + include = [ + # Include the "src" path relative to the root. + "src" + "test" + # Include this specific path. The path must be under the root. + ../package.opam + ../dune-project + ]; + }; + + checkInputs = [ + # Put test dependencies here + alcotest + ]; + + propagatedBuildInputs = [ + # Put dependencies here if you're creating a library + ]; + + buildInputs = [ + # Put build-time dependencies here + ]; + + inherit doCheck; + + meta = { + description = "Describe your project here"; + # license = stdenv.lib.licenses.bsd3; + }; + }; +} diff --git a/templates/simple/package.opam b/templates/simple/package.opam new file mode 100644 index 000000000..e69de29bb diff --git a/templates/simple/src/bin/dune b/templates/simple/src/bin/dune new file mode 100644 index 000000000..995b241cb --- /dev/null +++ b/templates/simple/src/bin/dune @@ -0,0 +1,4 @@ +(executable + (name main) + (public_name package) + (libraries package)) diff --git a/templates/simple/src/bin/main.ml b/templates/simple/src/bin/main.ml new file mode 100644 index 000000000..216e2c5aa --- /dev/null +++ b/templates/simple/src/bin/main.ml @@ -0,0 +1,18 @@ +let main () = + print_string "First number: "; + let first = read_line () |> int_of_string_opt in + print_string "Second number: "; + let second = read_line () |> int_of_string_opt in + let output = + match (first, second) with + | None, Some _ -> "First input is not a number" + | Some _, None -> "Second input is not a number" + | None, None -> "Neither of the inputs is a number" + | Some f, Some s -> + let number = Package.add f s in + Printf.sprintf "%i + %i = %i" f s number + in + print_endline output +;; + +main () \ No newline at end of file diff --git a/templates/simple/src/lib/dune b/templates/simple/src/lib/dune new file mode 100644 index 000000000..74423e2eb --- /dev/null +++ b/templates/simple/src/lib/dune @@ -0,0 +1,3 @@ +(library + (name package) + (public_name package)) diff --git a/templates/simple/src/lib/package.ml b/templates/simple/src/lib/package.ml new file mode 100644 index 000000000..455045d9c --- /dev/null +++ b/templates/simple/src/lib/package.ml @@ -0,0 +1 @@ +let add a b = a + b \ No newline at end of file diff --git a/templates/simple/test/dune b/templates/simple/test/dune new file mode 100644 index 000000000..a52339956 --- /dev/null +++ b/templates/simple/test/dune @@ -0,0 +1,3 @@ +(test + (name test) + (libraries alcotest package)) diff --git a/templates/simple/test/test.ml b/templates/simple/test/test.ml new file mode 100644 index 000000000..2347d42aa --- /dev/null +++ b/templates/simple/test/test.ml @@ -0,0 +1,5 @@ +let test_add () = Alcotest.(check int) "adds numbers" 5 (Package.add 2 3) + +let () = + let open Alcotest in + run "Package" [ ("numbers", [ test_case "add" `Quick test_add ]) ] From 99c8a440d7c27dd0963de902fced520355fdf3ab Mon Sep 17 00:00:00 2001 From: Ulrik Strid Date: Sun, 2 Jul 2023 14:27:09 +0200 Subject: [PATCH 2/2] Update template from comments --- templates/simple/dune-project | 2 +- .../simple/{package.opam => example.opam} | 0 templates/simple/flake.nix | 8 +-- templates/simple/nix/default.nix | 65 +++++++++---------- templates/simple/src/bin/dune | 4 +- templates/simple/src/lib/dune | 4 +- 6 files changed, 41 insertions(+), 42 deletions(-) rename templates/simple/{package.opam => example.opam} (100%) diff --git a/templates/simple/dune-project b/templates/simple/dune-project index 37f995d64..0ececa7d7 100644 --- a/templates/simple/dune-project +++ b/templates/simple/dune-project @@ -1 +1 @@ -(lang dune 3.0) +(lang dune 3.8) diff --git a/templates/simple/package.opam b/templates/simple/example.opam similarity index 100% rename from templates/simple/package.opam rename to templates/simple/example.opam diff --git a/templates/simple/flake.nix b/templates/simple/flake.nix index 74422fd4d..fda668340 100644 --- a/templates/simple/flake.nix +++ b/templates/simple/flake.nix @@ -16,16 +16,16 @@ let pkgs = nixpkgs.legacyPackages.${system}; in { packages = { - inherit (pkgs.ocamlPackages.callPackage ./nix { + default = pkgs.callPackage ./nix { inherit nix-filter; doCheck = true; - }) package; + }; }; devShells = { default = pkgs.mkShell { - inputsFrom = with self.packages.${system}; [ - package + inputsFrom = [ + self.packages.${system}.default ]; nativeBuildInputs = with pkgs.ocamlPackages; [ diff --git a/templates/simple/nix/default.nix b/templates/simple/nix/default.nix index dc9a11b0c..a85d2a0c7 100644 --- a/templates/simple/nix/default.nix +++ b/templates/simple/nix/default.nix @@ -6,44 +6,43 @@ , static ? false , doCheck }: -with ocamlPackages; { - package = buildDunePackage { - pname = "package"; - version = "1.0.0"; +with ocamlPackages; +buildDunePackage { + pname = "example"; + version = "1.0.0"; - src = with nix-filter.lib; - filter { - # Root of the project relative to this file - root = ./..; - # If no include is passed, it will include all the paths. - include = [ - # Include the "src" path relative to the root. - "src" - "test" - # Include this specific path. The path must be under the root. - ../package.opam - ../dune-project - ]; - }; + src = with nix-filter.lib; + filter { + # Root of the project relative to this file + root = ./..; + # If no include is passed, it will include all the paths. + include = [ + # Include the "src" path relative to the root. + "src" + "test" + # Include this specific path. The path must be under the root. + ../example.opam + ../dune-project + ]; + }; - checkInputs = [ - # Put test dependencies here - alcotest - ]; + checkInputs = [ + # Put test dependencies here + alcotest + ]; - propagatedBuildInputs = [ - # Put dependencies here if you're creating a library - ]; + propagatedBuildInputs = [ + # Put dependencies here if you're creating a library + ]; - buildInputs = [ - # Put build-time dependencies here - ]; + buildInputs = [ + # Put build-time dependencies here + ]; - inherit doCheck; + inherit doCheck; - meta = { - description = "Describe your project here"; - # license = stdenv.lib.licenses.bsd3; - }; + meta = { + description = "Describe your project here"; + # license = stdenv.lib.licenses.bsd3; }; } diff --git a/templates/simple/src/bin/dune b/templates/simple/src/bin/dune index 995b241cb..808608997 100644 --- a/templates/simple/src/bin/dune +++ b/templates/simple/src/bin/dune @@ -1,4 +1,4 @@ (executable (name main) - (public_name package) - (libraries package)) + (public_name example) + (libraries example)) diff --git a/templates/simple/src/lib/dune b/templates/simple/src/lib/dune index 74423e2eb..33dbb74ad 100644 --- a/templates/simple/src/lib/dune +++ b/templates/simple/src/lib/dune @@ -1,3 +1,3 @@ (library - (name package) - (public_name package)) + (name example) + (public_name example))