diff --git a/.gitignore b/.gitignore index 3af7b8b..3563d8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +result _build test.sh fatal.sh diff --git a/dune-project b/dune-project index c34018c..4488d76 100644 --- a/dune-project +++ b/dune-project @@ -21,12 +21,14 @@ (synopsis "A shell library") (description "A library for writing shells") (depends - morbig linenoise + visitors re terminal + (menhir + (= 20250912)) (yojson - (>= 2.2.2)) + (= 2.2.2)) (ppxlib (>= 0.37.0)) (ppx_deriving_yojson diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..16c0f82 --- /dev/null +++ b/flake.lock @@ -0,0 +1,193 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "mirage-opam-overlays": { + "flake": false, + "locked": { + "lastModified": 1710922379, + "narHash": "sha256-j4QREQDUf8oHOX7qg6wAOupgsNQoYlufxoPrgagD+pY=", + "owner": "dune-universe", + "repo": "mirage-opam-overlays", + "rev": "797cb363df3ff763c43c8fbec5cd44de2878757e", + "type": "github" + }, + "original": { + "owner": "dune-universe", + "repo": "mirage-opam-overlays", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1770473678, + "narHash": "sha256-2jWALGZyRKEW4ycxfAqG04UuZCqJwt34sfJnJkf4jzo=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c03cfff2b79dd525b374df7022ab3499ac12e59d", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "opam-nix": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": [ + "flake-utils" + ], + "mirage-opam-overlays": "mirage-opam-overlays", + "nixpkgs": [ + "nixpkgs" + ], + "opam-overlays": "opam-overlays", + "opam-repository": [ + "opam-repository" + ], + "opam2json": "opam2json" + }, + "locked": { + "lastModified": 1769900026, + "narHash": "sha256-O1cK8GVRNDKvAXU0mZjqpmftRnAeyDgyP7lf/3P/Pdg=", + "owner": "tweag", + "repo": "opam-nix", + "rev": "1f373ef8c4cc1237a74c681b47bbdbdf7ab185a6", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "opam-nix", + "type": "github" + } + }, + "opam-overlays": { + "flake": false, + "locked": { + "lastModified": 1741116009, + "narHash": "sha256-Z0PIW82fHJFvAv/JYpAffnp2DaOjLhsPutqyIrORZd0=", + "owner": "dune-universe", + "repo": "opam-overlays", + "rev": "e031bb64e33bf93be963e9a38b28962e6e14381f", + "type": "github" + }, + "original": { + "owner": "dune-universe", + "repo": "opam-overlays", + "type": "github" + } + }, + "opam-repository": { + "flake": false, + "locked": { + "lastModified": 1770398609, + "narHash": "sha256-umhfG0YRCc59Gw7Xm8Um6gPSC6vaJo7knIt9EfULs1Q=", + "owner": "ocaml", + "repo": "opam-repository", + "rev": "340ee6fd1ff10d0fce25e21ba1caca9ed1cfec68", + "type": "github" + }, + "original": { + "owner": "ocaml", + "repo": "opam-repository", + "type": "github" + } + }, + "opam2json": { + "inputs": { + "nixpkgs": [ + "opam-nix", + "nixpkgs" + ], + "systems": "systems_2" + }, + "locked": { + "lastModified": 1749457947, + "narHash": "sha256-+QVm+HOYikF3wUhqSIV8qJbE/feSG+p48fgxIosbHS0=", + "owner": "tweag", + "repo": "opam2json", + "rev": "0ecd66fc2bfb25d910522c990dd36412259eac1f", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "opam2json", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "opam-nix": "opam-nix", + "opam-repository": "opam-repository" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b041a0b --- /dev/null +++ b/flake.nix @@ -0,0 +1,54 @@ +# Mostly copied from RyanGibb/eon +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs"; + opam-nix.url = "github:tweag/opam-nix"; + flake-utils.url = "github:numtide/flake-utils"; + opam-nix.inputs.nixpkgs.follows = "nixpkgs"; + opam-nix.inputs.flake-utils.follows = "flake-utils"; + # maintain a different opam-repository to those pinned upstream + opam-repository = { + url = "github:ocaml/opam-repository"; + flake = false; + }; + self.submodules = true; + opam-nix.inputs.opam-repository.follows = "opam-repository"; + }; + outputs = { self, nixpkgs, flake-utils, opam-nix, ... }@inputs: + # create outputs for each default system + flake-utils.lib.eachDefaultSystem (system: + let + package = "merry"; + pkgs = nixpkgs.legacyPackages.${system}; + opam-nix-lib = opam-nix.lib.${system}; + devPackagesQuery = { + ocaml-lsp-server = "*"; + ocamlformat = "*"; + utop = "*"; + }; + query = { + ocaml-base-compiler = "*"; + }; + scope = + # recursive finds vendored dependancies in duniverse + opam-nix-lib.buildOpamProject' { recursive = true; } ./. (query // devPackagesQuery); + in { + packages.default = scope.${package}; + defaultPackage = scope.${package}; + + devShells.default = let + devPackages = builtins.attrValues + (pkgs.lib.getAttrs (builtins.attrNames devPackagesQuery) scope); + in pkgs.mkShell { + inputsFrom = [ scope.${package} ]; + buildInputs = devPackages; + }; + }) // { + nixosModules = { + default.imports = [ (import ./module.nix self.packages) ]; + }; + + formatter = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed + (system: nixpkgs.legacyPackages.${system}.nixfmt); + }; +} diff --git a/merry.opam b/merry.opam index d258ac2..3f09afb 100644 --- a/merry.opam +++ b/merry.opam @@ -9,11 +9,12 @@ tags: ["add topics" "to describe" "your" "project"] doc: "https://url/to/documentation" depends: [ "dune" {>= "3.20"} - "morbig" "linenoise" + "visitors" "re" "terminal" - "yojson" {>= "2.2.2"} + "menhir" {= "20250912"} + "yojson" {= "2.2.2"} "ppxlib" {>= "0.37.0"} "ppx_deriving_yojson" {>= "3.10.0"} "globlon" {>= "0"}