From 1133b15e759d8e9222ba60da2e691f04a731e346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 29 Nov 2023 07:13:11 +0100 Subject: [PATCH] add treefmt --- flake.lock | 46 +++++++++++++++++++------------- flake.nix | 59 ++++++++++++++++++++++++++--------------- tests/direnv_project.py | 1 + treefmt.nix | 47 ++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+), 41 deletions(-) create mode 100644 treefmt.nix diff --git a/flake.lock b/flake.lock index ec4f2f6..e449044 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,22 @@ { "nodes": { - "flake-utils": { + "flake-parts": { "inputs": { - "systems": "systems" + "nixpkgs-lib": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "lastModified": 1698882062, + "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, @@ -36,22 +38,28 @@ }, "root": { "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" } }, - "systems": { + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "lastModified": 1699786194, + "narHash": "sha256-3h3EH1FXQkIeAuzaWB+nK0XK54uSD46pp+dMD3gAcB4=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "e82f32aa7f06bbbd56d7b12186d555223dc399d1", "type": "github" }, "original": { - "owner": "nix-systems", - "repo": "default", + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } } diff --git a/flake.nix b/flake.nix index e25d39e..9403923 100644 --- a/flake.nix +++ b/flake.nix @@ -1,42 +1,57 @@ { description = "A faster, persistent implementation of `direnv`'s `use_nix`, to replace the built-in one."; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.flake-parts.url = "github:hercules-ci/flake-parts"; + inputs.flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; + inputs.treefmt-nix.url = "github:numtide/treefmt-nix"; + inputs.treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; nixConfig.extra-substituters = [ "https://cache.garnix.io" ]; nixConfig.extra-trusted-public-keys = [ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" ]; - outputs = { self, nixpkgs, flake-utils }: - flake-utils.lib.eachDefaultSystem - (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - in - { + outputs = inputs @ { flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } + ({ lib, ... }: { + imports = [ ./treefmt.nix ]; + systems = [ + "aarch64-linux" + "x86_64-linux" + + "x86_64-darwin" + "aarch64-darwin" + ]; + perSystem = { config, pkgs, self', ... }: { packages = { - default = pkgs.callPackage ./default.nix { }; + nix-direnv = pkgs.callPackage ./default.nix { }; + default = config.packages.nix-direnv; test-runner-stable = pkgs.callPackage ./test-runner.nix { nixVersion = "stable"; }; - test-runner-unstable = pkgs.callPackage ./test-runner.nix { + test-runner-unstable = pkgs.callPackage ./test-runner.nix { nixVersion = "unstable"; }; }; devShells.default = pkgs.callPackage ./shell.nix { }; apps.test-runner = { type = "app"; - program = "${self.packages.${system}.test-runner}"; + program = "${config.packages.test-runner}"; }; - checks = { - lint = pkgs.callPackage ./lint.nix { }; + + checks = + let + packages = lib.mapAttrs' (n: lib.nameValuePair "package-${n}") self'.packages; + devShells = lib.mapAttrs' (n: lib.nameValuePair "devShell-${n}") self'.devShells; + in + packages // devShells; + }; + flake = { + overlay = final: prev: { + nix-direnv = final.callPackage ./default.nix { }; }; - }) // { - overlay = final: prev: { - nix-direnv = final.callPackage ./default.nix { }; - }; - templates.default = { - path = ./templates/flake; - description = "nix flake new -t github:Mic92/nix-direnv ."; - }; - }; + templates.default = { + path = ./templates/flake; + description = "nix flake new -t github:Mic92/nix-direnv ."; + }; + }; + }); } diff --git a/tests/direnv_project.py b/tests/direnv_project.py index 124b7fd..ebca017 100644 --- a/tests/direnv_project.py +++ b/tests/direnv_project.py @@ -40,6 +40,7 @@ def direnv_project(test_root: Path, project_root: Path) -> Iterator[DirenvProjec shutil.copytree(test_root / "testenv", dir) shutil.copyfile(project_root / "flake.nix", dir / "flake.nix") shutil.copyfile(project_root / "flake.lock", dir / "flake.lock") + shutil.copyfile(project_root / "treefmt.nix", dir / "treefmt.nix") nix_direnv = project_root / "direnvrc" c = DirenvProject(Path(dir), nix_direnv) diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..7296d16 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,47 @@ +{ lib, inputs, ... }: { + imports = [ + inputs.treefmt-nix.flakeModule + ]; + + perSystem = { pkgs, ... }: { + treefmt = { + # Used to find the project root + projectRootFile = "flake.lock"; + + programs.deno.enable = true; + programs.mypy.enable = true; + programs.shellcheck.enable = true; + + settings.formatter = { + nix = { + command = "sh"; + options = [ + "-eucx" + '' + # First deadnix + ${lib.getExe pkgs.deadnix} --edit "$@" + # Then nixpkgs-fmt + ${lib.getExe pkgs.nixpkgs-fmt} "$@" + '' + "--" + ]; + includes = [ "*.nix" ]; + excludes = [ "nix/sources.nix" ]; + }; + + python = { + command = "sh"; + options = [ + "-eucx" + '' + ${lib.getExe pkgs.ruff} --fix "$@" + ${lib.getExe pkgs.ruff} format "$@" + '' + "--" # this argument is ignored by bash + ]; + includes = [ "*.py" ]; + }; + }; + }; + }; +}