From 59c87929df81ab50676d1c4b329293c4ac3fc730 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 14 Mar 2024 22:45:30 +0100 Subject: [PATCH 1/6] Use lib.fileset instead of builtins.path --- default.nix | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/default.nix b/default.nix index fa6d269b..c846559c 100644 --- a/default.nix +++ b/default.nix @@ -30,23 +30,14 @@ let inherit (pkgs) haskell lib; - regexes = [ - ".*.cabal$" - "^src.*" - "^main.*" - "^Setup.hs$" - "^js.*" - "LICENSE" - ]; - src = builtins.path { - path = ./.; - name = "nixfmt-src"; - filter = - path: type: - let - relPath = lib.removePrefix (toString ./. + "/") (toString path); - in - lib.any (re: builtins.match re relPath != null) regexes; + src = lib.fileset.toSource { + root = ./.; + fileset = lib.fileset.unions [ + ./nixfmt.cabal + ./src + ./main + ./LICENSE + ]; }; build = pkgs.haskellPackages.nixfmt; From dfe157eda7c37871d93f1ca2a9c760195fa882bd Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 14 Mar 2024 22:55:52 +0100 Subject: [PATCH 2/6] Always just executables and don't build haddock - Doesn't inflate closure size to over 2GB, see https://github.com/NixOS/nixfmt/issues/143 - The API docs aren't important and we're intending on deprecating the hackage package, see https://github.com/NixOS/nixfmt/issues/161 --- .github/workflows/main.yml | 2 +- default.nix | 9 ++++++--- flake.nix | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f42f9e24..be4225ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,5 +22,5 @@ jobs: run: nix shell .#packages.x86_64-linux.reuse -c reuse lint - name: build nixfmt - run: nix build -L .#nixfmt-static + run: nix build -L . if: success() || failure() diff --git a/default.nix b/default.nix index c846559c..fbca1e93 100644 --- a/default.nix +++ b/default.nix @@ -40,14 +40,17 @@ let ]; }; - build = pkgs.haskellPackages.nixfmt; + build = lib.pipe pkgs.haskellPackages.nixfmt [ + haskell.lib.justStaticExecutables + haskell.lib.dontHaddock + (drv: lib.lazyDerivation { derivation = drv; }) + ]; in build // rec { packages = { nixfmt = build; - nixfmt-static = haskell.lib.justStaticExecutables packages.nixfmt; - nixfmt-deriver = packages.nixfmt-static.cabal2nixDeriver; + nixfmt-deriver = build.cabal2nixDeriver; nixfmt-shell = packages.nixfmt.env.overrideAttrs (oldAttrs: { buildInputs = diff --git a/flake.nix b/flake.nix index bbc1f662..7aeb170e 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,7 @@ apps.default = { type = "app"; - program = "${self.packages.${system}.nixfmt-static}/bin/nixfmt"; + program = "${result}/bin/nixfmt"; }; checks = result.checks; From f231cca5dae8bf7d4a14cf7befdeb165c3d3fb85 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 14 Mar 2024 22:58:30 +0100 Subject: [PATCH 3/6] Remove nixfmt-deriver Not needed --- default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/default.nix b/default.nix index fbca1e93..6bcab526 100644 --- a/default.nix +++ b/default.nix @@ -50,7 +50,6 @@ build // rec { packages = { nixfmt = build; - nixfmt-deriver = build.cabal2nixDeriver; nixfmt-shell = packages.nixfmt.env.overrideAttrs (oldAttrs: { buildInputs = From 5db3a94cda5a672e5e5f7737feb81750480834be Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 14 Mar 2024 23:01:23 +0100 Subject: [PATCH 4/6] Switch to haskellPackages.shellFor Probably the same, but feels cleaner --- default.nix | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/default.nix b/default.nix index 6bcab526..b53c2e79 100644 --- a/default.nix +++ b/default.nix @@ -47,26 +47,21 @@ let ]; in build -// rec { +// { packages = { nixfmt = build; - - nixfmt-shell = packages.nixfmt.env.overrideAttrs (oldAttrs: { - buildInputs = - oldAttrs.buildInputs - ++ (with pkgs; [ - # nixfmt: expand - cabal-install - stylish-haskell - shellcheck - npins - ]); - }); - inherit (pkgs) reuse; }; - shell = packages.nixfmt-shell; + shell = pkgs.haskellPackages.shellFor { + packages = p: [ p.nixfmt ]; + nativeBuildInputs = with pkgs; [ + cabal-install + stylish-haskell + shellcheck + npins + ]; + }; checks = { hlint = pkgs.build.haskell.hlint ./.; From ef3ad6b3c9f54f3aeca59a4bb386be70e8a1dde5 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 14 Mar 2024 23:10:28 +0100 Subject: [PATCH 5/6] Add hls to the dev environment --- default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/default.nix b/default.nix index b53c2e79..7e4a8de8 100644 --- a/default.nix +++ b/default.nix @@ -58,6 +58,7 @@ build nativeBuildInputs = with pkgs; [ cabal-install stylish-haskell + haskellPackages.haskell-language-server shellcheck npins ]; From 43c38576d9efbfaa1f6acaba9810a7dce198b1fc Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 16 Mar 2024 00:54:18 +0100 Subject: [PATCH 6/6] Use stable Nix in CI --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index be4225ab..f2083a47 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,8 +19,8 @@ jobs: - uses: cachix/install-nix-action@v26 - name: reuse lint - run: nix shell .#packages.x86_64-linux.reuse -c reuse lint + run: nix-build -A packages.reuse && result/bin/reuse lint - name: build nixfmt - run: nix build -L . + run: nix-build if: success() || failure()