{ description = "A very basic flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; utils.url = "github:numtide/flake-utils"; ocaml-overlays.url = "github:anmonteiro/nix-overlays"; dotsnix.url = "github:quartz55/dotsnix"; }; outputs = { self, nixpkgs, utils, ocaml-overlays, dotsnix }: utils.lib.eachDefaultSystem ( system: let pkgs = import nixpkgs { inherit system; overlays = [ ocaml-overlays.overlay (self: super: { ocamlPackages = super.ocaml-ng.ocamlPackages_5_00; }) (self: super: { ocamlPackages = super.ocamlPackages // { ppx_yojson_conv = super.ocamlPackages.buildDunePackage rec { pname = "ppx_yojson_conv"; version = "0.15.0"; src = builtins.fetchurl { url = "https://github.com/janestreet/ppx_yojson_conv/archive/refs/tags/v${version}.tar.gz"; sha256 = sha256:0lyhvw73cq2sw1bwackmxk1bricw9y5p03g2qvjqphaaq9fi74lj; }; propagatedBuildInputs = with self.ocamlPackages; [ base ppx_js_style ppx_yojson_conv_lib ppxlib ]; }; streaming = super.ocamlPackages.buildDunePackage rec { pname = "streaming"; version = "master"; rev = "74a48634f81eefc5ff98103016b4be9645c1ea01"; src = builtins.fetchurl { url = "https://github.com/odis-labs/streaming/archive/${rev}.tar.gz"; sha256 = sha256:0ckc1k3waq1ax873nmzqs67cnd15di7yskfba5vddzncc6jsn6rv; }; propagatedBuildInputs = with self.ocamlPackages; [ stdlib-shims ]; }; stdint = super.ocamlPackages.stdint.overrideAttrs (_: rec { rev = "cb95ca6dff6bd58aa555b872a5db6558837d52db"; src = builtins.fetchurl { url = "https://github.com/kit-ty-kate/ocaml-stdint/archive/${rev}.tar.gz"; sha256 = sha256:0ib82j20zjq5111rwhl2281lbccbsi2cqibvbqcanim5ffd008l1; }; patches = [ ]; }); eio = super.ocamlPackages.buildDunePackage { pname = "eio"; version = "0.2"; src = builtins.fetchurl { url = "https://github.com/ocaml-multicore/eio/archive/refs/tags/v0.2.tar.gz"; sha256 = sha256:047qsiajrcglnws1fmcbikkfgm7prl05rvf1ylfbd69vdxd9ykjm; }; propagatedBuildInputs = with self.ocamlPackages; [ cstruct lwt-dllist optint psq fmt mtime ]; }; eio_luv = super.ocamlPackages.buildDunePackage { pname = "eio_luv"; inherit (self.ocamlPackages.eio) version src; propagatedBuildInputs = with self.ocamlPackages; [ eio luv luv_unix logs fmt ]; }; luv_unix = super.ocamlPackages.buildDunePackage { pname = "luv_unix"; inherit (self.ocamlPackages.luv) version src; propagatedBuildInputs = with self.ocamlPackages; [ luv ctypes result ]; }; # TODO @quartz55: upstream this websocketaf = super.ocamlPackages.websocketaf.overrideAttrs (_: rec { rev = "49bb812266608835b56ea75bf18f75666639a760"; src = builtins.fetchurl { url = "https://github.com/quartz55/websocketaf/archive/${rev}.tar.gz"; sha256 = sha256:0lsnrl8h5bmx866lflnbca4yhwzq4q67d15q51157khnchjr34rq; }; }); # TODO @quartz55: update it upstream relog = super.ocamlPackages.buildDunePackage rec { pname = "relog"; version = "master"; rev = "15a27a87dc15b1a6092f2197effd51577ca0eaf7"; src = builtins.fetchurl { url = "https://github.com/quartz55/relog-native/archive/${rev}.tar.gz"; sha256 = sha256:01j75d8h22aj26wh7hw541gxdzmy7pb78dncyvxd52nv1xrc0fvf; }; buildInputs = with self.ocamlPackages; [ reason ]; propagatedBuildInputs = with self.ocamlPackages; [ containers ptime yojson ]; postPatch = '' substituteInPlace lib/Formatter.re --replace "Bi_outbuf" "Buffer" ''; }; disco-opus = super.callPackage ./vendor/opus { }; disco = super.callPackage ./. { }; }; }) ]; }; in rec { packages = { disco = pkgs.ocamlPackages.disco; discopotty = pkgs.callPackage ./discopotty.nix { }; # docker = pkgs.dockerTools.buildImage { # name = "discopotty"; # config = { # Cmd = [ "${packages.discopotty}/bin/discopotty" ]; # }; # }; }; defaultPackage = packages.discopotty; apps = { discopotty = utils.lib.mkApp { drv = packages.discopotty; }; }; defaultApp = apps.discopotty; devShell = pkgs.callPackage ./shell.nix { inherit self; }; } ); }