config/flake-module.nix
2024-06-17 00:49:06 +02:00

120 lines
3.1 KiB
Nix

{
inputs,
withSystem,
lib,
...
}:
{
imports = [
inputs.pre-commit-hooks.flakeModule
./nixos/flake-module.nix
./packages/flake-module.nix
./nixpkgs/flake-module.nix
];
systems = [ "x86_64-linux" ];
flake = {
mylib = {
flattenAttrs =
attrs:
lib.listToAttrs (
lib.flatten (
lib.mapAttrsToList (
outer_key:
lib.mapAttrsToList (
inner_key: value: {
name = "${outer_key}-${inner_key}";
inherit value;
}
)
) attrs
)
);
nixFromDirs =
let
nixFromDir =
dir:
builtins.concatLists (
builtins.attrValues (
builtins.mapAttrs (
name: path_type:
if path_type == "regular" && builtins.match "[^_].*\\.nix" name != null then
[ (import (dir + "/${name}")) ]
else if path_type == "directory" then
nixFromDir (dir + "/${name}")
else
[ ]
) (builtins.readDir dir)
)
);
in
builtins.concatMap nixFromDir;
};
iso = withSystem "x86_64-linux" (
{ pkgs, ... }:
(pkgs.nixos {
imports = [
./iso.nix
"${inputs.nixos-stable}/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix"
];
}).config.system.build.isoImage
);
};
perSystem =
{
inputs',
lib,
config,
pkgs,
...
}:
{
devShells.default = pkgs.mkShell { shellHook = config.pre-commit.installationScript; };
pre-commit =
let
generated_nix_files = [
"packages/.*/default\\.nix"
"hardware-configuration\\.nix"
];
in
{
pkgs = inputs'.nixos-unstable.legacyPackages;
check.enable = true;
settings = {
tools = {
fourmolu = lib.mkForce (lib.getBin pkgs.unstableHaskellPackages.fourmolu);
};
excludes = [ "\\.zsh$" ] ++ generated_nix_files;
hooks = {
hlint.enable = true;
nixfmt = {
package = lib.getBin pkgs.nixfmt-rfc-style;
enable = true;
};
cabal2nix.enable = true;
nil.enable = true;
editorconfig-checker = {
excludes = [ ".*\\.json" ];
enable = true;
};
deadnix.enable = true;
statix = {
enable = true;
settings.ignore = generated_nix_files;
};
fourmolu.enable = true;
ormolu.settings.defaultExtensions = [
"TypeApplications"
"BangPatterns"
"ImportQualifiedPost"
"BlockArguments"
];
shellcheck.enable = true;
cabal-fmt.enable = true;
};
};
};
};
}