From c228354a13a275fac737e220b8519b5badf8256a Mon Sep 17 00:00:00 2001 From: George Thomas Date: Tue, 24 Mar 2026 16:01:44 +0000 Subject: [PATCH] Use `nix-haskell` and provide `source-repository-package`s to Cabal in shell --- cabal.project | 15 -- flake.lock | 636 ++++---------------------------------------------- flake.nix | 44 ++-- project.nix | 40 ++++ 4 files changed, 94 insertions(+), 641 deletions(-) create mode 100644 project.nix diff --git a/cabal.project b/cabal.project index 2f00410..23c65c7 100644 --- a/cabal.project +++ b/cabal.project @@ -1,20 +1,5 @@ packages: . --- not on Hackage yet: https://well-typed.com/blog/2026/02/hs-bindgen-alpha --- we've modified the stanzas from that post in order to use a more recent version --- because we want record-dot support: https://github.com/well-typed/hs-bindgen/issues/1829#issuecomment-4081875451 -source-repository-package - type: git - location: https://github.com/well-typed/hs-bindgen - tag: 6ca94188abd756a1fb4dd8a4037de3fa7dca0765 - subdir: c-expr-dsl c-expr-runtime hs-bindgen hs-bindgen-runtime - --sha256: M+8tEZA8gsEc6gXnNdSbRpMBQ5LkH7sphcV1aR0fclA= -source-repository-package - type: git - location: https://github.com/well-typed/libclang - tag: d6e482df49b88375cf3075928a78ee86c2a068d4 - --sha256: 175kjba915bh50wf03gi88njz03jp0n3wp7yq73hznkaly6bpwal - allow-newer: *:base, *:containers, diff --git a/flake.lock b/flake.lock index 5ca3138..c476884 100644 --- a/flake.lock +++ b/flake.lock @@ -1,88 +1,5 @@ { "nodes": { - "HTTP": { - "flake": false, - "locked": { - "lastModified": 1451647621, - "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", - "owner": "phadej", - "repo": "HTTP", - "rev": "9bc0996d412fef1787449d841277ef663ad9a915", - "type": "github" - }, - "original": { - "owner": "phadej", - "repo": "HTTP", - "type": "github" - } - }, - "cabal-32": { - "flake": false, - "locked": { - "lastModified": 1603716527, - "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", - "owner": "haskell", - "repo": "cabal", - "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "3.2", - "repo": "cabal", - "type": "github" - } - }, - "cabal-34": { - "flake": false, - "locked": { - "lastModified": 1645834128, - "narHash": "sha256-wG3d+dOt14z8+ydz4SL7pwGfe7SiimxcD/LOuPCV6xM=", - "owner": "haskell", - "repo": "cabal", - "rev": "5ff598c67f53f7c4f48e31d722ba37172230c462", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "3.4", - "repo": "cabal", - "type": "github" - } - }, - "cabal-36": { - "flake": false, - "locked": { - "lastModified": 1669081697, - "narHash": "sha256-I5or+V7LZvMxfbYgZATU4awzkicBwwok4mVoje+sGmU=", - "owner": "haskell", - "repo": "cabal", - "rev": "8fd619e33d34924a94e691c5fea2c42f0fc7f144", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "3.6", - "repo": "cabal", - "type": "github" - } - }, - "cardano-shell": { - "flake": false, - "locked": { - "lastModified": 1608537748, - "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", - "owner": "input-output-hk", - "repo": "cardano-shell", - "rev": "9392c75087cb9a3d453998f4230930dea3a95725", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "cardano-shell", - "type": "github" - } - }, "crane": { "locked": { "lastModified": 1771438068, @@ -98,23 +15,6 @@ "type": "github" } }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1672831974, - "narHash": "sha256-z9k3MfslLjWQfnjBtEtJZdq3H7kyi2kQtUThfTgdRk0=", - "owner": "input-output-hk", - "repo": "flake-compat", - "rev": "45f2638735f8cdc40fe302742b79f248d23eb368", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "ref": "hkm/gitlab-fix", - "repo": "flake-compat", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems" @@ -133,144 +33,7 @@ "type": "github" } }, - "hackage": { - "flake": false, - "locked": { - "lastModified": 1771461386, - "narHash": "sha256-93hCxhNOq9/HAggfTTurLhllI0IiEWZ35jk6i/X/qEo=", - "owner": "input-output-hk", - "repo": "hackage.nix", - "rev": "b4f4537825a4db29c10541a50d7eb6c848bf0dca", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "hackage.nix", - "type": "github" - } - }, - "hackage-for-stackage": { - "flake": false, - "locked": { - "lastModified": 1771461376, - "narHash": "sha256-aEuZkBpTaU0XBFiaIomicJDoWQaw84rYfKXI/r17V/w=", - "owner": "input-output-hk", - "repo": "hackage.nix", - "rev": "ca611068e77f15b96ecf71fae827e491c0b2dc3b", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "ref": "for-stackage", - "repo": "hackage.nix", - "type": "github" - } - }, - "hackage-internal": { - "flake": false, - "locked": { - "lastModified": 1750307553, - "narHash": "sha256-iiafNoeLHwlSLQTyvy8nPe2t6g5AV4PPcpMeH/2/DLs=", - "owner": "input-output-hk", - "repo": "hackage.nix", - "rev": "f7867baa8817fab296528f4a4ec39d1c7c4da4f3", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "hackage.nix", - "type": "github" - } - }, - "haskell-nix": { - "inputs": { - "HTTP": "HTTP", - "cabal-32": "cabal-32", - "cabal-34": "cabal-34", - "cabal-36": "cabal-36", - "cardano-shell": "cardano-shell", - "flake-compat": "flake-compat", - "hackage": "hackage", - "hackage-for-stackage": "hackage-for-stackage", - "hackage-internal": "hackage-internal", - "hls": "hls", - "hls-1.10": "hls-1.10", - "hls-2.0": "hls-2.0", - "hls-2.10": "hls-2.10", - "hls-2.11": "hls-2.11", - "hls-2.12": "hls-2.12", - "hls-2.2": "hls-2.2", - "hls-2.3": "hls-2.3", - "hls-2.4": "hls-2.4", - "hls-2.5": "hls-2.5", - "hls-2.6": "hls-2.6", - "hls-2.7": "hls-2.7", - "hls-2.8": "hls-2.8", - "hls-2.9": "hls-2.9", - "hpc-coveralls": "hpc-coveralls", - "iserv-proxy": "iserv-proxy", - "nixpkgs": [ - "haskell-nix", - "nixpkgs-unstable" - ], - "nixpkgs-2305": "nixpkgs-2305", - "nixpkgs-2311": "nixpkgs-2311", - "nixpkgs-2405": "nixpkgs-2405", - "nixpkgs-2411": "nixpkgs-2411", - "nixpkgs-2505": "nixpkgs-2505", - "nixpkgs-2511": "nixpkgs-2511", - "nixpkgs-unstable": "nixpkgs-unstable", - "old-ghc-nix": "old-ghc-nix", - "stackage": "stackage" - }, - "locked": { - "lastModified": 1771462666, - "narHash": "sha256-z+pJFzbYa1ulNDUZdb0qLVVAdE0dqpnE51jqh2chA7c=", - "owner": "input-output-hk", - "repo": "haskell.nix", - "rev": "857ba7b65d9c1a8765ad1599834a8fe71cb09981", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "haskell.nix", - "type": "github" - } - }, - "hls": { - "flake": false, - "locked": { - "lastModified": 1741604408, - "narHash": "sha256-tuq3+Ip70yu89GswZ7DSINBpwRprnWnl6xDYnS4GOsc=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "682d6894c94087da5e566771f25311c47e145359", - "type": "github" - }, - "original": { - "owner": "haskell", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-1.10": { - "flake": false, - "locked": { - "lastModified": 1680000865, - "narHash": "sha256-rc7iiUAcrHxwRM/s0ErEsSPxOR3u8t7DvFeWlMycWgo=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "b08691db779f7a35ff322b71e72a12f6e3376fd9", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "1.10.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2-13": { + "hls-src": { "flake": false, "locked": { "lastModified": 1768552477, @@ -287,388 +50,87 @@ "type": "github" } }, - "hls-2.0": { + "hs-bindgen-src": { "flake": false, "locked": { - "lastModified": 1687698105, - "narHash": "sha256-OHXlgRzs/kuJH8q7Sxh507H+0Rb8b7VOiPAjcY9sM1k=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "783905f211ac63edf982dd1889c671653327e441", + "lastModified": 1773399083, + "narHash": "sha256-oF6E1/zRZ4iiZs9QjtQMvHnLMfq/W6CXOX44QbDGYXs=", + "owner": "well-typed", + "repo": "hs-bindgen", + "rev": "6ca94188abd756a1fb4dd8a4037de3fa7dca0765", "type": "github" }, "original": { - "owner": "haskell", - "ref": "2.0.0.1", - "repo": "haskell-language-server", + "owner": "well-typed", + "repo": "hs-bindgen", + "rev": "6ca94188abd756a1fb4dd8a4037de3fa7dca0765", "type": "github" } }, - "hls-2.10": { + "libclang-src": { "flake": false, "locked": { - "lastModified": 1743069404, - "narHash": "sha256-q4kDFyJDDeoGqfEtrZRx4iqMVEC2MOzCToWsFY+TOzY=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "2318c61db3a01e03700bd4b05665662929b7fe8b", + "lastModified": 1773221966, + "narHash": "sha256-VPG7jKdq2g/Hwf5cPiy4coAvLULxDeA4KHCVkNSSs5w=", + "owner": "well-typed", + "repo": "libclang", + "rev": "d6e482df49b88375cf3075928a78ee86c2a068d4", "type": "github" }, "original": { - "owner": "haskell", - "ref": "2.10.0.0", - "repo": "haskell-language-server", + "owner": "well-typed", + "repo": "libclang", + "rev": "d6e482df49b88375cf3075928a78ee86c2a068d4", "type": "github" } }, - "hls-2.11": { - "flake": false, + "nix-haskell": { + "inputs": { + "nixpkgs": "nixpkgs" + }, "locked": { - "lastModified": 1747306193, - "narHash": "sha256-/MmtpF8+FyQlwfKHqHK05BdsxC9LHV70d/FiMM7pzBM=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "46ef4523ea4949f47f6d2752476239f1c6d806fe", + "lastModified": 1774311314, + "narHash": "sha256-sxoNFlpTaBnnQerzQ2LTByXPpR37M4pHnhZmzq+9440=", + "owner": "reflex-frp", + "repo": "nix-haskell", + "rev": "85d89f1cc2f591ff6be35e1f112c8ee912fba7bb", "type": "github" }, "original": { - "owner": "haskell", - "ref": "2.11.0.0", - "repo": "haskell-language-server", + "owner": "reflex-frp", + "repo": "nix-haskell", "type": "github" } }, - "hls-2.12": { - "flake": false, + "nixpkgs": { "locked": { - "lastModified": 1758709460, - "narHash": "sha256-xkI8MIIVEVARskfWbGAgP5sHG/lyeKnkm0LIOJ19X5w=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "7d983de4fa7ff54369f6dd31444bdb9869aec83e", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.12.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.2": { - "flake": false, - "locked": { - "lastModified": 1693064058, - "narHash": "sha256-8DGIyz5GjuCFmohY6Fa79hHA/p1iIqubfJUTGQElbNk=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "b30f4b6cf5822f3112c35d14a0cba51f3fe23b85", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.2.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.3": { - "flake": false, - "locked": { - "lastModified": 1695910642, - "narHash": "sha256-tR58doOs3DncFehHwCLczJgntyG/zlsSd7DgDgMPOkI=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "458ccdb55c9ea22cd5d13ec3051aaefb295321be", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.3.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.4": { - "flake": false, - "locked": { - "lastModified": 1699862708, - "narHash": "sha256-YHXSkdz53zd0fYGIYOgLt6HrA0eaRJi9mXVqDgmvrjk=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "54507ef7e85fa8e9d0eb9a669832a3287ffccd57", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.4.0.1", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.5": { - "flake": false, - "locked": { - "lastModified": 1701080174, - "narHash": "sha256-fyiR9TaHGJIIR0UmcCb73Xv9TJq3ht2ioxQ2mT7kVdc=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "27f8c3d3892e38edaef5bea3870161815c4d014c", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.5.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.6": { - "flake": false, - "locked": { - "lastModified": 1705325287, - "narHash": "sha256-+P87oLdlPyMw8Mgoul7HMWdEvWP/fNlo8jyNtwME8E8=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "6e0b342fa0327e628610f2711f8c3e4eaaa08b1e", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.6.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.7": { - "flake": false, - "locked": { - "lastModified": 1708965829, - "narHash": "sha256-LfJ+TBcBFq/XKoiNI7pc4VoHg4WmuzsFxYJ3Fu+Jf+M=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "50322b0a4aefb27adc5ec42f5055aaa8f8e38001", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.7.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.8": { - "flake": false, - "locked": { - "lastModified": 1715153580, - "narHash": "sha256-Vi/iUt2pWyUJlo9VrYgTcbRviWE0cFO6rmGi9rmALw0=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "dd1be1beb16700de59e0d6801957290bcf956a0a", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.8.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.9": { - "flake": false, - "locked": { - "lastModified": 1719993701, - "narHash": "sha256-wy348++MiMm/xwtI9M3vVpqj2qfGgnDcZIGXw8sF1sA=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "90319a7e62ab93ab65a95f8f2bcf537e34dae76a", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.9.0.1", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hpc-coveralls": { - "flake": false, - "locked": { - "lastModified": 1607498076, - "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", - "owner": "sevanspowell", - "repo": "hpc-coveralls", - "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", - "type": "github" - }, - "original": { - "owner": "sevanspowell", - "repo": "hpc-coveralls", - "type": "github" - } - }, - "iserv-proxy": { - "flake": false, - "locked": { - "lastModified": 1770174258, - "narHash": "sha256-x6QYupvHZM7rRpVO4AIC5gUWFprFQ59A95FPC7/Owjg=", - "owner": "stable-haskell", - "repo": "iserv-proxy", - "rev": "91ef7ffdeedfb141a4d69dcf9e550abe3e1160c6", - "type": "github" - }, - "original": { - "owner": "stable-haskell", - "ref": "iserv-syms", - "repo": "iserv-proxy", - "type": "github" - } - }, - "nixpkgs-2305": { - "locked": { - "lastModified": 1705033721, - "narHash": "sha256-K5eJHmL1/kev6WuqyqqbS1cdNnSidIZ3jeqJ7GbrYnQ=", + "lastModified": 1773840656, + "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a1982c92d8980a0114372973cbdfe0a307f1bdea", + "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixpkgs-23.05-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-2311": { - "locked": { - "lastModified": 1719957072, - "narHash": "sha256-gvFhEf5nszouwLAkT9nWsDzocUTqLWHuL++dvNjMp9I=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "7144d6241f02d171d25fba3edeaf15e0f2592105", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-23.11-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-2405": { - "locked": { - "lastModified": 1735564410, - "narHash": "sha256-HB/FA0+1gpSs8+/boEavrGJH+Eq08/R2wWNph1sM1Dg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "1e7a8f391f1a490460760065fa0630b5520f9cf8", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-24.05-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-2411": { - "locked": { - "lastModified": 1751290243, - "narHash": "sha256-kNf+obkpJZWar7HZymXZbW+Rlk3HTEIMlpc6FCNz0Ds=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5ab036a8d97cb9476fbe81b09076e6e91d15e1b6", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-24.11-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-2505": { - "locked": { - "lastModified": 1764560356, - "narHash": "sha256-M5aFEFPppI4UhdOxwdmceJ9bDJC4T6C6CzCK1E2FZyo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6c8f0cca84510cc79e09ea99a299c9bc17d03cb6", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-25.05-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-2511": { - "locked": { - "lastModified": 1764572236, - "narHash": "sha256-hLp6T/vKdrBQolpbN3EhJOKTXZYxJZPzpnoZz+fEGlE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b0924ea1889b366de6bb0018a9db70b2c43a15f8", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-25.11-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1764587062, - "narHash": "sha256-hdFa0TAVQAQLDF31cEW3enWmBP+b592OvHs6WVe3D8k=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c1cb7d097cb250f6e1904aacd5f2ba5ffd8a49ce", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "old-ghc-nix": { - "flake": false, - "locked": { - "lastModified": 1631092763, - "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", - "owner": "angerman", - "repo": "old-ghc-nix", - "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", - "type": "github" - }, - "original": { - "owner": "angerman", - "ref": "master", - "repo": "old-ghc-nix", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, "root": { "inputs": { "crane": "crane", "flake-utils": "flake-utils", - "haskell-nix": "haskell-nix", - "hls-2-13": "hls-2-13", - "nixpkgs": [ - "haskell-nix", - "nixpkgs-2511" - ], + "hls-src": "hls-src", + "hs-bindgen-src": "hs-bindgen-src", + "libclang-src": "libclang-src", + "nix-haskell": "nix-haskell", "rust-overlay": "rust-overlay" } }, "rust-overlay": { "inputs": { "nixpkgs": [ + "nix-haskell", "nixpkgs" ] }, @@ -686,22 +148,6 @@ "type": "github" } }, - "stackage": { - "flake": false, - "locked": { - "lastModified": 1771460325, - "narHash": "sha256-RRsGO7QVyuBtUTVqDiB7CYvFruj0Z/yxZK1JarkTqI4=", - "owner": "input-output-hk", - "repo": "stackage.nix", - "rev": "29c0dcc517e04be238023064412312ad4443ddb2", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "stackage.nix", - "type": "github" - } - }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index a0f1082..ec737b9 100644 --- a/flake.nix +++ b/flake.nix @@ -1,42 +1,24 @@ { inputs = { - haskell-nix.url = "github:input-output-hk/haskell.nix"; - hls-2-13 = { url = "github:haskell/haskell-language-server/2.13.0.0"; flake = false; }; - nixpkgs.follows = "haskell-nix/nixpkgs-2511"; + nix-haskell.url = "github:reflex-frp/nix-haskell"; + hls-src = { url = "github:haskell/haskell-language-server/2.13.0.0"; flake = false; }; + hs-bindgen-src = { url = "github:well-typed/hs-bindgen/6ca94188abd756a1fb4dd8a4037de3fa7dca0765"; flake = false; }; + libclang-src = { url = "github:well-typed/libclang/d6e482df49b88375cf3075928a78ee86c2a068d4"; flake = false; }; flake-utils.url = "github:numtide/flake-utils"; crane.url = "github:ipetkov/crane"; rust-overlay = { url = "github:oxalica/rust-overlay"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nix-haskell/nixpkgs"; }; }; outputs = - inputs@{ nixpkgs, ... }: + inputs@{ nix-haskell, ... }: inputs.flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: let - overlays = [ - inputs.haskell-nix.overlay - (final: _prev: { - hixProject = - final.haskell-nix.hix.project { - src = ./.; - evalSystem = "x86_64-linux"; - name = "garnet"; - compiler-nix-name = "ghc9141"; - shell.tools.cabal = "latest"; - shell.withHoogle = false; - shell.tools.haskell-language-server = { - src = inputs.hls-2-13; - sha256map = { - "https://github.com/snowleopard/alga"."d4e43fb42db05413459fb2df493361d5a666588a" = "0s1mlnl64wj7pkg3iipv5bb4syy3bhxwqzqv93zqlvkyfn64015i"; - }; - }; - }; - }) - (import inputs.rust-overlay) - ]; - pkgs = import nixpkgs { inherit system overlays; inherit (inputs.haskell-nix) config; }; - haskell = pkgs.hixProject.flake { }; + lib = nix-haskell.lib.${system}; + project = lib.nix-haskell (import ./project.nix { inherit (inputs) hls-src hs-bindgen-src libclang-src; }); + haskell = project.haskell-nix.project; + pkgs = project.nixpkgs.extend (import inputs.rust-overlay); rust = (inputs.crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.selectLatestNightlyWith ( toolchain: toolchain.default.override { extensions = [ "rust-src" ]; @@ -47,14 +29,14 @@ { devShells.default = pkgs.mkShell { inputsFrom = [ - haskell.devShells.default + (haskell.shell.overrideAttrs (old: { + shellHook = builtins.replaceStrings [ "*wasm*|)" ] [ "*wasm*)" ] old.shellHook; + })) (rust.devShell { }) ]; packages = with pkgs; [ bacon ghcid - llvmPackages.libclang - llvmPackages.llvm rust-analyzer ]; }; diff --git a/project.nix b/project.nix new file mode 100644 index 0000000..139ac9a --- /dev/null +++ b/project.nix @@ -0,0 +1,40 @@ +{ hls-src +, hs-bindgen-src +, libclang-src +}: +{ + name = "garnet"; + src = ./.; + compiler-nix-name = "ghc914"; + source-repository-packages = { + # not on Hackage yet: https://well-typed.com/blog/2026/02/hs-bindgen-alpha + # we're using more recent versions than in that post, because we want record-dot support: + # https://github.com/well-typed/hs-bindgen/issues/1829#issuecomment-4081875451 + c-expr-dsl = hs-bindgen-src + "/c-expr-dsl"; + c-expr-runtime = hs-bindgen-src + "/c-expr-runtime"; + hs-bindgen = hs-bindgen-src + "/hs-bindgen"; + hs-bindgen-runtime = hs-bindgen-src + "/hs-bindgen-runtime"; + libclang-bindings = libclang-src; + }; + overrides = [ + ({ pkgs, ... }: { + packages.libclang-bindings.components.library = { + build-tools = [ pkgs.llvmPackages.llvm ]; + libs = [ pkgs.llvmPackages.libclang ]; + }; + }) + ]; + shell = { + tools = { + cabal = "latest"; + haskell-language-server = { + src = hls-src; + sha256map = { + "https://github.com/snowleopard/alga"."d4e43fb42db05413459fb2df493361d5a666588a" = "0s1mlnl64wj7pkg3iipv5bb4syy3bhxwqzqv93zqlvkyfn64015i"; + }; + }; + }; + withHoogle = false; + withHaddock = true; + }; +}