From 7aae5f6b3b3a817e3e108a0c43deaad904d47726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20N=C3=BCtzi?= Date: Sat, 25 Jul 2026 11:27:49 +0200 Subject: [PATCH 1/6] feat: add treefmt nix to dev flake --- dev/flake.lock | 23 ++++++++++++++++++++++- dev/flake.nix | 10 +++++++++- dev/nix/treefmt.nix | 36 ++++++++++++++++++++++++++++++++++++ justfile | 5 +++++ 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 dev/nix/treefmt.nix diff --git a/dev/flake.lock b/dev/flake.lock index 07e50046..a76cfc6f 100644 --- a/dev/flake.lock +++ b/dev/flake.lock @@ -67,7 +67,8 @@ "flake-parts": "flake-parts", "nixpkgs": "nixpkgs", "pre-commit-hooks-nix": "pre-commit-hooks-nix", - "services-flake": "services-flake" + "services-flake": "services-flake", + "treefmt-nix": "treefmt-nix" } }, "services-flake": { @@ -84,6 +85,26 @@ "repo": "services-flake", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784369104, + "narHash": "sha256-47cxbcZODibHv3rELFQ9vZly0vUNkND/atn/U7HLeb0=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "df3c0640565d04a0261253cdd89fce78ec50168a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", diff --git a/dev/flake.nix b/dev/flake.nix index 539c0da5..a3ba55c4 100644 --- a/dev/flake.nix +++ b/dev/flake.nix @@ -7,15 +7,23 @@ # CI will override `services-flake` to run checks on the latest source services-flake.url = "github:juspay/services-flake"; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ self, nixpkgs, flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = nixpkgs.lib.systems.flakeExposed; + imports = [ (inputs.pre-commit-hooks-nix + /flake-module.nix) ./nix/pre-commit.nix + ./nix/treefmt.nix ]; - perSystem = { self', pkgs, config, ... }: { + + perSystem = { pkgs, config, ... }: { devShells.default = pkgs.mkShell { packages = with pkgs; [ just diff --git a/dev/nix/treefmt.nix b/dev/nix/treefmt.nix new file mode 100644 index 00000000..0db83128 --- /dev/null +++ b/dev/nix/treefmt.nix @@ -0,0 +1,36 @@ +{ inputs, ... }: +{ + imports = [ + inputs.treefmt-nix.flakeModule + ]; + + perSystem = + { config, ... }: + let + treefmt = config.treefmt.build.wrapper; + in + { + # Define formatter for `nix fmt`. + formatter = treefmt; + + treefmt = { + # Used to find the project root + # For worktrees we need either `.git` or a file. + projectRootFile = "CHANGELOG.md"; + + settings.global = { + excludes = [ + ]; + }; + + # Markdown, JSON, YAML, etc. + programs.prettier.enable = true; + settings.formatter.prettier.excludes = [ ]; + + # Nix. + programs.deadnix.enable = false; + programs.statix.enable = false; + programs.nixfmt.enable = true; + }; + }; +} diff --git a/justfile b/justfile index 3c38b02f..0b35298f 100644 --- a/justfile +++ b/justfile @@ -6,6 +6,11 @@ default: changelog: cz ch --start-rev $(git describe --tags --abbrev=0 HEAD^) --incremental +# Format treewide all files. +[group('lint')] +format: + cd dev && nix fmt -- ../flake.nix + # Run example/simple [group('example')] ex-simple: From e6280a948611934485ade4a199e94972b6f5a9c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20N=C3=BCtzi?= Date: Sat, 25 Jul 2026 11:32:12 +0200 Subject: [PATCH 2/6] fix: update all inputs in `dev/flake.nix` due to treefmt --- dev/flake.lock | 39 +++++++++++++++++++++------------------ dev/flake.nix | 2 +- dev/nix/treefmt.nix | 7 +++++-- justfile | 9 +++++++-- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/dev/flake.lock b/dev/flake.lock index a76cfc6f..fde3f7e7 100644 --- a/dev/flake.lock +++ b/dev/flake.lock @@ -5,11 +5,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1727826117, - "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1729755165, - "narHash": "sha256-6IpnOHWsaSSjT3yvqlrWfHW6HVCT+wOAlUpcooGJ+FQ=", + "lastModified": 1784812282, + "narHash": "sha256-Na4aTmdz22ovtSvcvNKaRwEWkg801hDyX6t8JqvW+sE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "cabaf14d3e69c9921d7acedf5d7d60bb2b90be02", + "rev": "6d12004108e0e4a5cfa4bd83b14477f040b15773", "type": "github" }, "original": { @@ -36,24 +36,27 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1727825735, - "narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" + "lastModified": 1782614948, + "narHash": "sha256-ePjCwr1sNm9NYUqywL7QfK3JnlS015msC+eBu2zKlp8=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "db3f255737b94216eb71cce308e2912cf6bc2d7c", + "type": "github" }, "original": { - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" } }, "pre-commit-hooks-nix": { "flake": false, "locked": { - "lastModified": 1732021966, - "narHash": "sha256-mnTbjpdqF0luOkou8ZFi2asa1N3AA2CchR/RqCNmsGE=", + "lastModified": 1784288435, + "narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "3308484d1a443fc5bc92012435d79e80458fe43c", + "rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9", "type": "github" }, "original": { @@ -73,11 +76,11 @@ }, "services-flake": { "locked": { - "lastModified": 1708321363, - "narHash": "sha256-8tyA4VIUrbYJaF/eOnx5fzvw3jSskQ622XPUqSoAEGU=", + "lastModified": 1784799366, + "narHash": "sha256-aK4fmqmGbk0J2sUhex79NAZTd1002DNWNsfubO6aic0=", "owner": "juspay", "repo": "services-flake", - "rev": "29781d10d08ab704dacf58cad35cddac7d19d5bd", + "rev": "eed1ab55413afbb8fd7bc929076c73894e5104e0", "type": "github" }, "original": { diff --git a/dev/flake.nix b/dev/flake.nix index a3ba55c4..89d9c5ed 100644 --- a/dev/flake.nix +++ b/dev/flake.nix @@ -13,7 +13,7 @@ inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = inputs@{ self, nixpkgs, flake-parts, ... }: + outputs = inputs@{ nixpkgs, flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = nixpkgs.lib.systems.flakeExposed; diff --git a/dev/nix/treefmt.nix b/dev/nix/treefmt.nix index 0db83128..f7b9ea93 100644 --- a/dev/nix/treefmt.nix +++ b/dev/nix/treefmt.nix @@ -10,8 +10,11 @@ treefmt = config.treefmt.build.wrapper; in { - # Define formatter for `nix fmt`. - formatter = treefmt; + # Define formatter as global output. + # cause it provides better options than `nix fmt ...` + packages = { + inherit treefmt; + }; treefmt = { # Used to find the project root diff --git a/justfile b/justfile index 0b35298f..e13bbbd9 100644 --- a/justfile +++ b/justfile @@ -1,3 +1,6 @@ +set positional-arguments +set shell := ["bash", "-cue"] + # List all the just commands default: @just --list @@ -8,8 +11,10 @@ changelog: # Format treewide all files. [group('lint')] -format: - cd dev && nix fmt -- ../flake.nix +format *args: + cd dev && nix run \ + --override-input services-flake ../. \ + ".#treefmt" "$@" # Run example/simple [group('example')] From ccc00f49ff17191e9a6f54fa611d7e1b19c77699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20N=C3=BCtzi?= Date: Sat, 25 Jul 2026 11:43:54 +0200 Subject: [PATCH 3/6] fix: remove nixfmt from pre-commit --- dev/nix/pre-commit.nix | 3 +-- dev/nix/treefmt.nix | 24 ++++++++++++++++++++++-- justfile | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/dev/nix/pre-commit.nix b/dev/nix/pre-commit.nix index 6d95b519..c37c492b 100644 --- a/dev/nix/pre-commit.nix +++ b/dev/nix/pre-commit.nix @@ -1,12 +1,11 @@ { inputs, ... }: { - perSystem = { pkgs, lib, ... }: { + perSystem = { lib, ... }: { pre-commit = { check.enable = true; settings = { rootSrc = lib.mkForce inputs.services-flake; hooks = { - nixpkgs-fmt.enable = true; commitizen.enable = true; }; }; diff --git a/dev/nix/treefmt.nix b/dev/nix/treefmt.nix index f7b9ea93..d8e32953 100644 --- a/dev/nix/treefmt.nix +++ b/dev/nix/treefmt.nix @@ -1,11 +1,11 @@ -{ inputs, ... }: +{ lib, inputs, ... }: { imports = [ inputs.treefmt-nix.flakeModule ]; perSystem = - { config, ... }: + { config, pkgs, ... }: let treefmt = config.treefmt.build.wrapper; in @@ -17,6 +17,26 @@ }; treefmt = { + # Overwrite the built in check, since we need to + # run in the root of the repo. + build.check = self: + let + src = ./../..; + in + pkgs.runCommandLocal "format" { } + # Bash + '' + PRJ=$TMP/project + cp -r "${src}" $PRJ && chmod -R a+w $PRJ && cd $PRJ + + echo "Check formatting of all files." + + "${lib.getExe treefmt}" --no-cache --fail-on-change "$@" . || { + echo "Formatting check failed: please run 'just format'." + exit 1 + } + ''; + # Used to find the project root # For worktrees we need either `.git` or a file. projectRootFile = "CHANGELOG.md"; diff --git a/justfile b/justfile index e13bbbd9..438f9690 100644 --- a/justfile +++ b/justfile @@ -14,7 +14,7 @@ changelog: format *args: cd dev && nix run \ --override-input services-flake ../. \ - ".#treefmt" "$@" + ".#treefmt" -- "$@" # Run example/simple [group('example')] From 7b66cf645785e8adb5837f99c329f7ecd9560512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20N=C3=BCtzi?= Date: Sat, 25 Jul 2026 12:16:30 +0200 Subject: [PATCH 4/6] fix: add treefmt as pre-commit step --- dev/nix/pre-commit.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dev/nix/pre-commit.nix b/dev/nix/pre-commit.nix index c37c492b..90cd9404 100644 --- a/dev/nix/pre-commit.nix +++ b/dev/nix/pre-commit.nix @@ -1,12 +1,17 @@ -{ inputs, ... }: +{ lib, inputs, ... }: { - perSystem = { lib, ... }: { + perSystem = { self', ... }: { pre-commit = { check.enable = true; settings = { rootSrc = lib.mkForce inputs.services-flake; hooks = { commitizen.enable = true; + + treefmt = { + enable = true; + package = self'.packages.treefmt; + }; }; }; }; From 2718d4cfeddd4458e901a6f73ad1a4aa0cf9cfb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20N=C3=BCtzi?= Date: Sat, 25 Jul 2026 12:20:58 +0200 Subject: [PATCH 5/6] fix: treefmt as precommit --- dev/nix/pre-commit.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/nix/pre-commit.nix b/dev/nix/pre-commit.nix index 90cd9404..d92b852c 100644 --- a/dev/nix/pre-commit.nix +++ b/dev/nix/pre-commit.nix @@ -11,6 +11,7 @@ treefmt = { enable = true; package = self'.packages.treefmt; + pass_filenames = false; # treefmt walks the tree itself. }; }; }; From c6326cf696dc1b5ec673a0a31231c788ec57b337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20N=C3=BCtzi?= Date: Sat, 25 Jul 2026 12:28:19 +0200 Subject: [PATCH 6/6] feat: add prettier config file --- .prettierrc.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .prettierrc.yaml diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..a8acf79b --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,11 @@ +--- +printWidth: 100 +tabWidth: 2 +semi: false +singleQuote: false + +overrides: + - files: "*.md" + options: + proseWrap: always + tabWidth: 2