Fourmolu-nix
fourmolu-nix
makes a wrapper for fourmolu with settings already pass to it so
you no longer need fourmolu.yaml
or even to be in root of project to have
these options set for you.
Getting started
For creating the wrapper, you can use mkWrapper
function from lib which takes
pkgs and configuration and returns wrapped fourmolu with the provided configuration.
Flakes
# flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
utils.url = "github:numtide/flake-utils";
fourmolu-nix.url = "github:jedimahdi/fourmolu-nix";
};
outputs = {
nixpkgs,
utils,
fourmolu-nix,
...
}:
utils.lib.eachDefaultSystem (
system: let
pkgs = nixpkgs.legacyPackages.${system};
fourmoluWrapper = fourmolu-nix.lib.mkWrapper pkgs {
settings = {
indentation = 4;
comma-style = "leading";
record-brace-space = true;
extensions = ["OverloadedRecordDot", "RecordWildCards"];
};
};
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = [
fourmoluWrapper
];
};
}
);
}
Flake-parts
With flake-parts you don't need to call mkWrapper
, just add
inputs.fourmolu-nix.flakeModule
to list of imports.
Fourmolu wrapper will be accessible via config.fourmolu.wrapper
.
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
fourmolu-nix.url = "github:jedimahdi/fourmolu-nix";
};
outputs = inputs:
inputs.flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
inputs.fourmolu-nix.flakeModule
];
systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"];
perSystem = {
config,
pkgs,
...
}: {
fourmolu.settings = {
indentation = 4;
import-export-style = "diff-friendly";
extensions = ["ImportQualifiedPost" "OverloadedRecordDot"];
};
devShells.default = pkgs.mkShell {
nativeBuildInputs = [
config.fourmolu.wrapper
];
};
};
};
}
Note: fourmolu-nix
will automatically set the wrapper package for treefmt-nix
fourmolu program.
Configuration
See options for the full list of configs.