From 54c04d379643e92dadeccda6f2423937d5e2b1ee Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Mon, 23 Dec 2024 18:39:15 +0100 Subject: build(flake): Use treefmt as nix formatter This allows us to also keep markdown and other documents, that aren't nix, formatted. --- flake.lock | 23 ++++++++++++++++- flake.nix | 18 ++++++++++--- treefmt.nix | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 treefmt.nix diff --git a/flake.lock b/flake.lock index c85da85..662b7ff 100644 --- a/flake.lock +++ b/flake.lock @@ -279,7 +279,8 @@ "ragenix": "ragenix", "rust-overlay": "rust-overlay", "simple-nixos-mailserver": "simple-nixos-mailserver", - "systems": "systems" + "systems": "systems", + "treefmt-nix": "treefmt-nix" } }, "rust-overlay": { @@ -342,6 +343,26 @@ "repo": "x86_64-linux", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734704479, + "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index dc63ea9..c7af7b4 100644 --- a/flake.nix +++ b/flake.nix @@ -7,6 +7,13 @@ library.url = "git+https://git.vhack.eu/vhack.eu/nix-library?ref=prime"; + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; + }; + # inputs for following systems = { url = "github:nix-systems/x86_64-linux"; # only evaluate for this system @@ -76,6 +83,7 @@ nixpkgs, nixpkgs-unstable, library, + treefmt-nix, # modules simple-nixos-mailserver, impermanence, @@ -107,6 +115,7 @@ vhackPackages = import ./pkgs {inherit pkgs nixLib;}; inherit (library) nixLib; + treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;}; in { nixosConfigurations."server1" = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; @@ -119,15 +128,17 @@ ]; }; - checks."${system}" = tests; + checks."${system}" = nixLib.warnMerge tests { + formatting = + treefmtEval.config.build.check self; + } "the flake checks"; packages."${system}" = vhackPackages; + formatter."${system}" = treefmtEval.config.build.wrapper; devShells."${system}" = { default = pkgs.mkShell { packages = with pkgs; [ - alejandra - # used for certificate generation in the taskserver setup gnutls @@ -138,6 +149,5 @@ ]; }; }; - formatter."${system}" = pkgs.alejandra; }; } diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..e2c6aea --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,86 @@ +{ + treefmt-nix, + pkgs, +}: +treefmt-nix.lib.evalModule pkgs ( + {pkgs, ...}: { + # Used to find the project root + projectRootFile = "flake.nix"; + + programs = { + alejandra.enable = true; + rustfmt.enable = true; + clang-format.enable = true; + mdformat.enable = true; + shfmt = { + enable = true; + indent_size = 4; + }; + shellcheck.enable = true; + prettier = { + settings = { + arrowParens = "always"; + bracketSameLine = false; + bracketSpacing = true; + editorconfig = true; + embeddedLanguageFormatting = "auto"; + endOfLine = "lf"; + # experimentalTernaries = false; + htmlWhitespaceSensitivity = "css"; + insertPragma = false; + jsxSingleQuote = true; + printWidth = 80; + proseWrap = "always"; + quoteProps = "consistent"; + requirePragma = false; + semi = true; + singleAttributePerLine = true; + singleQuote = true; + trailingComma = "all"; + useTabs = false; + vueIndentScriptAndStyle = false; + + tabWidth = 4; + overrides = { + files = ["*.js"]; + options.tabwidth = 2; + }; + }; + }; + stylua = { + enable = true; + settings = { + sort_requires.enabled = true; + column_width = 120; + line_endings = "Unix"; + indent_type = "Spaces"; + indent_width = 2; + quote_style = "ForceDouble"; + call_parentheses = "Always"; + # space_after_function_names = "Never"; + collapse_simple_statement = "Always"; + }; + }; + ruff = { + enable = true; + format = true; + }; + taplo.enable = true; + }; + + settings = { + global.excludes = [ + "CHANGELOG.md" + "NEWS.md" + ]; + formatter = { + clang-format = { + options = ["--style" "GNU"]; + }; + shfmt = { + includes = ["*.bash"]; + }; + }; + }; + } +) -- cgit 1.4.1