diff --git a/flake.lock b/flake.lock index 103bed3..88e3dd0 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,30 @@ { "nodes": { + "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" + } + }, "nixpkgs": { "locked": { - "lastModified": 1740243248, - "narHash": "sha256-GJ/fV5AE+4i38/eXmAgBZs4lKYXfScpxPYviUV8ujlk=", + "lastModified": 1751290243, + "narHash": "sha256-kNf+obkpJZWar7HZymXZbW+Rlk3HTEIMlpc6FCNz0Ds=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a6c4bfe37c51686c042b4bdb4e650a9414e96680", + "rev": "5ab036a8d97cb9476fbe81b09076e6e91d15e1b6", "type": "github" }, "original": { @@ -18,8 +36,24 @@ }, "root": { "inputs": { + "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } + }, + "systems": { + "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", diff --git a/flake.nix b/flake.nix index ab3f209..e271542 100644 --- a/flake.nix +++ b/flake.nix @@ -2,44 +2,62 @@ description = "Unicode toy"; inputs.nixpkgs.url = "github:nixos/nixpkgs/release-24.11"; + inputs.flake-utils.url = "github:numtide/flake-utils"; - outputs = { self, nixpkgs }: - let - pkgs = nixpkgs.legacyPackages.x86_64-linux; + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachSystem ["x86_64-linux" "aarch64-darwin"] (system: + let + pkgs = import nixpkgs { inherit system; }; - utoy = pkgs.haskellPackages.developPackage { - root = ./.; - overrides = self: super: { + inherit (pkgs.haskell.lib) compose; + + # Fix broken unicode-data-names by overriding the version of the unicode-data package. + haskellPackagesOverrides = self: super: { unicode-data = super.unicode-data_0_6_0; unicode-data-names = pkgs.haskell.lib.markUnbroken super.unicode-data-names; }; - }; - in { - packages.x86_64-linux = rec { - docker = - pkgs.dockerTools.buildImage { - name = "git.pbrinkmeier.de/paul/utoy"; - tag = utoy.version; - config.Cmd = [ "${pkgs.haskell.lib.justStaticExecutables utoy}/bin/utoy" ]; - }; - default = utoy; - }; + utoy = pkgs.lib.pipe + # The basic package + (pkgs.haskellPackages.developPackage { + root = ./.; + overrides = haskellPackagesOverrides; + }) + # And some build configuration. + # See https://nixos.org/manual/nixpkgs/unstable/#haskell-packaging-helpers. + [ + # Remove warp which pulls GHC into the runtime deps for some reason. + (compose.overrideCabal (drv: { + postInstall = '' + remove-references-to -t ${pkgs.haskellPackages.warp} $out/bin/utoy + ''; + })) + # Return only the bin folder to curb image size + compose.justStaticExecutables + ]; + in { + packages = rec { + docker = + pkgs.dockerTools.buildImage { + name = "git.pbrinkmeier.de/paul/utoy"; + tag = utoy.version; + config.Cmd = [ "${utoy}/bin/utoy" ]; + }; - devShells.x86_64-linux.default = - (pkgs.haskellPackages.developPackage { - root = ./.; - overrides = self: super: { - unicode-data = super.unicode-data_0_6_0; - unicode-data-names = pkgs.haskell.lib.markUnbroken super.unicode-data-names; - }; - modifier = drv: - pkgs.haskell.lib.addBuildTools drv [ - pkgs.cabal-install - pkgs.haskellPackages.implicit-hie - pkgs.haskell-language-server - ]; - cabal2nixOptions = "--benchmark"; - }).env; - }; + default = utoy; + }; + + devShells.default = + (pkgs.haskellPackages.developPackage { + root = ./.; + overrides = haskellPackagesOverrides; + modifier = drv: + pkgs.haskell.lib.addBuildTools drv [ + pkgs.cabal-install + pkgs.haskellPackages.implicit-hie + pkgs.haskell-language-server + ]; + cabal2nixOptions = "--benchmark"; + }).env; + }); }