diff --git a/flake/dev/default.nix b/flake/dev/default.nix index 4cc3d37c..2fc3ba64 100644 --- a/flake/dev/default.nix +++ b/flake/dev/default.nix @@ -4,81 +4,6 @@ ./nixpkgs-and-dev-nixpkgs-version-consistency.nix ./packages.nix ./pre-commit.nix + ./treefmt.nix ]; - - perSystem = - { pkgs, ... }: - { - # TODO: consider using https://flake.parts/options/treefmt-nix.html - formatter = pkgs.treefmt.withConfig { - runtimeInputs = with pkgs; [ - # keep-sorted start - biome - keep-sorted - nixfmt-rfc-style - ruff - stylish-haskell - # keep-sorted end - ]; - - settings = { - on-unmatched = "info"; - tree-root-file = "flake.nix"; - - formatter = { - # keep-sorted start block=yes - biome = { - command = "biome"; - options = [ - "format" - "--write" - "--no-errors-on-unmatched" - "--config-path" - (pkgs.writers.writeJSON "biome.json" { - formatter = { - indentStyle = "space"; - indentWidth = 2; - lineWidth = 80; - }; - }) - ]; - includes = [ - "*.css" - "*.js" - "*.json" - ]; - excludes = [ - # Contains custom syntax that biome can't handle - "modules/swaync/base.css" - ]; - }; - keep-sorted = { - command = "keep-sorted"; - includes = [ "*" ]; - }; - nixfmt = { - command = "nixfmt"; - options = [ "--width=80" ]; - includes = [ "*.nix" ]; - }; - ruff = { - command = "ruff"; - options = [ - "--config" - (pkgs.writers.writeTOML "ruff.toml" { - line-length = 80; - }) - "format" - ]; - includes = [ "*.py" ]; - }; - stylish-haskell = { - command = "stylish-haskell"; - includes = [ "*.hx" ]; - }; - # keep-sorted end - }; - }; - }; - }; } diff --git a/flake/dev/dev-shell.nix b/flake/dev/dev-shell.nix index d66479d2..a125e398 100644 --- a/flake/dev/dev-shell.nix +++ b/flake/dev/dev-shell.nix @@ -44,15 +44,14 @@ # Install git-hooks when activating the shell shellHook = config.pre-commit.installationScript; - packages = - [ - stylix-check - build-and-run-docs - inputs'.home-manager.packages.default - config.formatter - ] - ++ config.pre-commit.settings.enabledPackages - ++ config.formatter.runtimeInputs; + packages = [ + stylix-check + build-and-run-docs + inputs'.home-manager.packages.default + config.formatter + ] ++ config.pre-commit.settings.enabledPackages; + + inputsFrom = [ config.treefmt.build.devShell ]; }; ghc = pkgs.mkShell { diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index 64f1d79d..3be6632b 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -101,7 +101,28 @@ "dev-nixpkgs": "dev-nixpkgs", "flake-compat": "flake-compat", "git-hooks": "git-hooks", - "home-manager": "home-manager" + "home-manager": "home-manager", + "treefmt-nix": "treefmt-nix" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "dev-nixpkgs" + ] + }, + "locked": { + "lastModified": 1750931469, + "narHash": "sha256-0IEdQB1nS+uViQw4k3VGUXntjkDp7aAlqcxdewb/hAc=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "ac8e6f32e11e9c7f153823abc3ab007f2a65d3e1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" } } }, diff --git a/flake/dev/flake.nix b/flake/dev/flake.nix index 214a83e0..13e038ee 100644 --- a/flake/dev/flake.nix +++ b/flake/dev/flake.nix @@ -46,6 +46,11 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "dev-nixpkgs"; }; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "dev-nixpkgs"; + }; # keep-sorted end }; diff --git a/flake/dev/treefmt.nix b/flake/dev/treefmt.nix new file mode 100644 index 00000000..c899074d --- /dev/null +++ b/flake/dev/treefmt.nix @@ -0,0 +1,41 @@ +{ inputs, ... }: +{ + imports = [ inputs.treefmt-nix.flakeModule ]; + + perSystem.treefmt = { + projectRootFile = "flake.nix"; + + programs = { + # keep-sorted start block=yes newline_separated=no + biome = { + enable = true; + settings.formatter = { + indentStyle = "space"; + indentWidth = 2; + lineWidth = 80; + }; + includes = [ + "*.css" + "*.js" + "*.json" + ]; + excludes = [ + # Contains custom syntax that biome can't handle + "modules/swaync/base.css" + ]; + }; + keep-sorted.enable = true; + nixfmt = { + enable = true; + width = 80; + }; + ruff-format = { + enable = true; + lineLength = 80; + }; + shfmt.enable = true; + stylish-haskell.enable = true; + # keep-sorted end + }; + }; +}