-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflake.nix
121 lines (116 loc) · 3.26 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{
description = "Chaotic Next ❄️";
inputs = {
devshell = {
url = "github:numtide/devshell";
flake = false;
};
flake-parts.url = "github:hercules-ci/flake-parts";
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
pre-commit-hooks = {
url = "github:cachix/pre-commit-hooks.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
flake-parts,
nixpkgs,
pre-commit-hooks,
self,
...
} @ inp: let
inputs = inp;
perSystem = {
pkgs,
system,
...
}: {
apps.default = self.outputs.devShells.${system}.default.flakeApp;
checks.pre-commit-check = pre-commit-hooks.lib.${system}.run {
hooks = {
actionlint.enable = true;
alejandra-quiet = {
description = "Run Alejandra in quiet mode";
enable = true;
entry = ''
${pkgs.alejandra}/bin/alejandra --quiet
'';
files = "\\.nix$";
name = "alejandra";
};
commitizen.enable = true;
# Eslint pulls ~1GB of nix derivations, let's reuse node_modules instead
eslint = {
description = "Run eslint";
enable = true;
entry = ''
${pkgs.pnpm}/bin/pnpm run lint
'';
name = "eslint";
pass_filenames = false;
};
flake-checker.enable = true;
hadolint.enable = true;
prettier.enable = true;
shellcheck.enable = true;
shfmt.enable = true;
yamllint.enable = true;
};
src = ./.;
};
# Handy devshell for working with this flake
devShells = let
# Import the devshell module as module rather than a flake input
makeDevshell = import "${inp.devshell}/modules" pkgs;
mkShell = config:
(makeDevshell {
configuration = {
inherit config;
imports = [];
};
})
.shell;
in rec {
default = chaotic-next;
chaotic-next = mkShell {
commands = [
{package = "corepack_latest";}
{package = "nodejs_latest";}
{package = "pre-commit";}
];
devshell = {
name = "chaotic-next";
startup.preCommitHooks.text = ''
${self.checks.${system}.pre-commit-check.shellHook}
if [ ! -d node_modules ]; then
corepack pnpm install
else
outcome=$(corepack pnpm install)
if [[ ! "$outcome" =~ "Already up to date" ]]; then
echo "Dependencies have been updated"
fi
fi
'';
};
env = [
{
name = "NIX_PATH";
value = "${nixpkgs}";
}
];
};
};
# By default, alejandra is WAY to verbose
formatter = pkgs.writeShellScriptBin "alejandra" ''
exec ${pkgs.alejandra}/bin/alejandra --quiet "$@"
'';
};
in
flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
inputs.pre-commit-hooks.flakeModule
];
systems = ["x86_64-linux" "aarch64-linux"];
inherit perSystem;
};
}