Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

102 changes: 63 additions & 39 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,71 @@
outputs = { self, flake-utils, clash-compiler, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
# What version of the GHC compiler to use
compiler-version = clash-compiler.ghcVersion.${system};

pkgs = (import clash-compiler.inputs.nixpkgs {
inherit system;
}).extend clash-compiler.overlays.${compiler-version};
clash-pkgs = pkgs."clashPackages-${compiler-version}";

overlay = final: prev: {
circuit-notation = prev.developPackage {
root = ./.;
overrides = _: _: final;
};
};

hs-pkgs = clash-pkgs.extend overlay;
# The package to expose as 'default'
default-package = "circuit-notation";
# The 'default' version of ghc to use
default-version = clash-compiler.ghcVersion.${system};
# A list of all ghc versions this package supports
supported-versions = clash-compiler.supportedGhcVersions.${system};

all-overlays = builtins.listToAttrs (builtins.map (compiler-version:
let
overlay = final: prev: {
circuit-notation = prev.developPackage {
root = ./.;
overrides = _: _: final;
};
};
in
{ name = compiler-version; value = overlay; }
) supported-versions);

all-hs-pkgs = builtins.mapAttrs (compiler-version: overlay:
let
pkgs = (import clash-compiler.inputs.nixpkgs {
inherit system;
}).extend clash-compiler.overlays.${compiler-version};
clash-pkgs = pkgs."clashPackages-${compiler-version}";

hs-pkgs = clash-pkgs.extend overlay;
in
hs-pkgs
) all-overlays;

all-shells = builtins.mapAttrs (_: hs-pkgs:
hs-pkgs.shellFor {
packages = p: [
p.circuit-notation
];

nativeBuildInputs =
[
# Haskell stuff
hs-pkgs.cabal-install
hs-pkgs.cabal-plan
hs-pkgs.haskell-language-server
hs-pkgs.fourmolu
]
;
}) all-hs-pkgs;

all-packages = builtins.mapAttrs (_: hs-pkgs:
{
circuit-notation = hs-pkgs.circuit-notation;

default = hs-pkgs.${default-package};
}) all-hs-pkgs;
in
{
# Expose the overlay which adds circuit-notation
# Expose the overlay of each supported version which adds circuit-notation
# The base of the overlay is clash-pkgs
overlays.default = overlay;

devShells.default = hs-pkgs.shellFor {
packages = p: [
p.circuit-notation
];

nativeBuildInputs =
[
# Haskell stuff
hs-pkgs.cabal-install
hs-pkgs.cabal-plan
hs-pkgs.haskell-language-server
hs-pkgs.fourmolu
]
;
};
packages = {
circuit-notation = hs-pkgs.circuit-notation;

default = hs-pkgs.circuit-notation;
};
overlays = all-overlays // { default = all-overlays.${default-version}; };

# A devShell for each supported version
devShells = all-shells // { default = all-shells.${default-version}; };

# The default directly refers to the default package of the default ghc version of this flake
# All other entries aren't packages, they're a set of packages for each supported ghc version
packages = all-packages // { default = all-packages.${default-version}.${default-package}; };
});
}
Loading