Skip to content

Instantly share code, notes, and snippets.

@piq9117
Last active April 27, 2023 02:57
Show Gist options
  • Save piq9117/53dbf9717a868847f4c1bccb8d81aaca to your computer and use it in GitHub Desktop.
Save piq9117/53dbf9717a868847f4c1bccb8d81aaca to your computer and use it in GitHub Desktop.
{
description = "Basic haskell cabal template";
inputs.nixpkgs.url = "nixpkgs/nixos-22.11";
outputs = { self, nixpkgs }:
let
supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f system);
nixpkgsFor = forAllSystems (system: import nixpkgs {
inherit system;
overlays = [ self.overlay ];
});
in
{
overlay = self: super: {
hsPkgs = super.haskell.packages.ghc943.override {
overrides = hself: hsuper: {
beam-core = hsuper.beam-core.overrideAttrs (oldAttrs: {
src = (super.fetchFromGitHub {
owner = "haskell-beam";
repo = "beam";
rev = "98b61e8ab7f5fa96da4157c2e4790b6da65224da";
sha256 = "1ksmw973hlzibpzny6ivw5gg166br0rylaxzr9nbphas5qbnw80m";
}) + "/beam-core";
});
beam-migrate = super.haskell.lib.doJailbreak (hsuper.beam-migrate.overrideAttrs (oldAttrs: {
src = (super.fetchFromGitHub {
owner = "haskell-beam";
repo = "beam";
rev = "98b61e8ab7f5fa96da4157c2e4790b6da65224da";
sha256 = "1ksmw973hlzibpzny6ivw5gg166br0rylaxzr9nbphas5qbnw80m";
}) + "/beam-migrate";
}));
beam-postgres = super.haskell.lib.doJailbreak (hsuper.beam-postgres.overrideAttrs (oldAttrs: {
src = (super.fetchFromGitHub {
owner = "haskell-beam";
repo = "beam";
rev = "98b61e8ab7f5fa96da4157c2e4790b6da65224da";
sha256 = "1ksmw973hlzibpzny6ivw5gg166br0rylaxzr9nbphas5qbnw80m";
}) + "/beam-postgres";
}));
vinyl = hsuper.vinyl.overrideAttrs (oldAttrs: {
src = super.fetchFromGitHub {
owner = "VinylRecords";
repo = "Vinyl";
rev = "0e864100849356030299ebd95919f0d8c21ee218";
sha256 = "0bq98ndlh86p8fbg20c22h6zb1qrcvpm07xd0wvy0b5cvqprjq22";
};
});
microlens-platform = super.haskell.lib.doJailbreak hsuper.microlens-platform;
relude = hsuper.relude.overrideAttrs (oldAttrs: {
version = "1.2.0.0";
src = super.fetchFromGitHub {
owner = "kowainik";
repo = "relude";
rev = "e633cb33308d259d6e4ea058ef506eb496b12323";
sha256 = "0p29sk41c51f4vqlazyw5pf6n5v59llk34b45bf747sgqbqbxzwi";
};
});
tasty-discover = hsuper.tasty-discover.overrideAttrs (oldAttrs: {
version = "5.0.0";
src = super.fetchFromGitHub {
owner = "haskell-works";
repo = "tasty-discover";
rev = "109ef0fcd6af057d24f05f11de5b8348a2a0484e";
sha256 = "0x2sz1cqclqjv133bf3wfas6bfkm946j5vz6ani8ri88kr36iip8";
};
});
tasty-hedgehog = super.haskell.lib.doJailbreak (super.haskell.lib.markUnbroken (hsuper.tasty-hedgehog.overrideAttrs (oldAttrs: {
version = "1.4.0.1";
src = super.fetchFromGitHub {
owner = "qfpl";
repo = "tasty-hedgehog";
rev = "3c254e1b012ec2cb3f39801e2adf55b4c72432fa";
sha256 = "0fdn56g4h62w61p7xmdfv9qm4qmgqr49zj87q0jfyr97jan8ii20";
};
})));
openapi3 = super.haskell.lib.dontCheck (super.haskell.lib.doJailbreak (hsuper.callCabal2nix "openapi3"
(builtins.fetchGit {
url = "https://github.com/alexbiehl/openapi3.git";
rev = "4793b3c09f8c146161f7e78f8c0924bc9b0ec395";
ref = "alex/aeson-2-support-for-extensions";
})
{ }));
tie = hsuper.callCabal2nix "tie"
(builtins.fetchGit {
url = "git@github.com:scarf-sh/tie.git";
ref = "main";
rev = "1aadc110adea816874a91b415d9a5a064a73b6f0";
})
{ };
resource-pool = hsuper.resource-pool.overrideAttrs (oldAttrs: {
pname = "resource-pool";
src = super.fetchFromGitHub {
owner = "scrive";
repo = "pool";
rev = "d8e5e061b475d51ba973ebb4431c24d17a60793e";
sha256 = "18vd5f196y9ndj0knzpaircxysn15hlw9zsn54cmrry1y9dhcww2";
};
});
opentracing = self.haskell.lib.dontCheck (self.haskell.lib.dontHaddock (hsuper.opentracing.overrideAttrs (oldAtts: {
pname = "opentracing";
src = (self.fetchFromGitHub {
owner = "piq9117";
repo = "opentracing";
rev = "f5523a30a4c2e0c9d9bc2e922ffa266801c7417c";
sha256 = "0ppmb7r0v03b2np11dkm2kprhsq1h739b23p1qdd7n21vq1lknb5";
}) + "/opentracing";
})));
opentracing-wai = self.haskell.lib.dontCheck (self.haskell.lib.dontHaddock (hsuper.opentracing-wai.overrideAttrs (oldAtts: {
pname = "opentracing";
src = (self.fetchFromGitHub {
owner = "piq9117";
repo = "opentracing";
rev = "f5523a30a4c2e0c9d9bc2e922ffa266801c7417c";
sha256 = "0ppmb7r0v03b2np11dkm2kprhsq1h739b23p1qdd7n21vq1lknb5";
}) + "/opentracing-wai";
})));
opentracing-jaeger = self.haskell.lib.dontCheck (self.haskell.lib.dontHaddock (hsuper.opentracing-jaeger.overrideAttrs (oldAtts: {
pname = "opentracing-jaeger";
src = (self.fetchFromGitHub {
owner = "piq9117";
repo = "opentracing";
rev = "f5523a30a4c2e0c9d9bc2e922ffa266801c7417c";
sha256 = "0ppmb7r0v03b2np11dkm2kprhsq1h739b23p1qdd7n21vq1lknb5";
}) + "/opentracing-jaeger";
})));
todo-api = hself.callCabal2nix "todo-api" ./todo-api { };
todo-app = hself.callCabal2nix "todo-app" ./. { };
};
};
generate-api = self.writeScriptBin "generate-api"
''
${self.hsPkgs.tie}/bin/tie --output todo-api \
--module-name Todo.API --package-name todo-api todo-api.yaml
'';
};
packages = forAllSystems (system:
let
pkgs = nixpkgsFor.${system};
in
{
default = pkgs.hsPkgs.todo-app;
run-app = pkgs.writeShellApplication {
name = "run-app";
runtimeInputs = [ ];
text = ''
cabal run exe:todo-app
'';
};
});
devShells = forAllSystems (system:
let
pkgs = nixpkgsFor.${system};
libs = with pkgs; [
zlib
dbmate
ormolu
nixpkgs-fmt
postgresql
treefmt
];
in
{
default = pkgs.hsPkgs.shellFor {
packages = hsPkgs: [
hsPkgs.todo-app
# hsPkgs.beam-core
# hsPkgs.opentracing
# hsPkgs.beam-migrate
# hsPkgs.beam-postgres
# hsPkgs.vinyl
# hsPkgs.microlens-platform
# hsPkgs.relude
# hsPkgs.tasty-discover
# hsPkgs.tasty-hedgehog
# hsPkgs.openapi3
# hsPkgs.tie
# hsPkgs.resource-pool
# hsPkgs.opentracing
# hsPkgs.opentracing-wai
# hsPkgs.opentracing-jaeger
];
buildInputs = with pkgs; [
hsPkgs.cabal-install
hsPkgs.cabal-fmt
hsPkgs.tie
hsPkgs.ghcid
hsPkgs.ghc
generate-api
] ++ libs;
shellHook = "export PS1='[$PWD]\n❄ '";
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath libs;
};
});
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment