A fork of attic a self-hostable Nix Binary Cache server
1# Development shells
2
3toplevel @ { lib, flake-parts-lib, ... }:
4let
5 inherit (lib)
6 mkOption
7 types
8 ;
9 inherit (flake-parts-lib)
10 mkPerSystemOption
11 ;
12in
13{
14 options = {
15 perSystem = mkPerSystemOption {
16 options.attic.devshell = {
17 packageSets = mkOption {
18 type = types.attrsOf (types.listOf types.package);
19 default = {};
20 };
21 extraPackages = mkOption {
22 type = types.listOf types.package;
23 default = [];
24 };
25 extraArgs = mkOption {
26 type = types.attrsOf types.unspecified;
27 default = {};
28 };
29 };
30 };
31 };
32
33 config = {
34 perSystem = { self', pkgs, config, ... }: let
35 cfg = config.attic.devshell;
36 in {
37 attic.devshell.packageSets = with pkgs; {
38 rustc = lib.optionals (config.attic.toolchain == null) [
39 rustc
40 ];
41
42 rust = [
43 cargo-audit
44 cargo-expand
45 cargo-outdated
46 cargo-edit
47 cargo-udeps
48 tokio-console
49 ];
50
51 linters = [
52 clippy
53 rustfmt
54
55 editorconfig-checker
56 ];
57
58 utils = [
59 jq
60 just
61 ];
62
63 ops = [
64 postgresql
65 sqlite-interactive
66
67 skopeo
68 manifest-tool
69 ];
70
71 bench = [
72 wrk
73 ] ++ lib.optionals pkgs.stdenv.isLinux [
74 linuxPackages.perf
75 ];
76
77 wasm = [
78 llvmPackages_latest.bintools
79 worker-build wasm-pack wasm-bindgen-cli
80 ];
81 };
82
83 devShells.default = pkgs.mkShell (lib.recursiveUpdate {
84 inputsFrom = [
85 self'.packages.attic
86 self'.packages.book
87 ];
88
89 packages = lib.flatten (lib.attrValues cfg.packageSets);
90
91 env = {
92 ATTIC_DISTRIBUTOR = toplevel.config.attic.distributor;
93
94 RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc;
95
96 NIX_PATH = "nixpkgs=${pkgs.path}";
97
98 # Used by `just with-nix` to build/test with alternative Nix versions.
99 NIX_VERSIONS = config.attic.nix-versions.manifestFile;
100 };
101 } cfg.extraArgs);
102
103 devShells.demo = pkgs.mkShell {
104 packages = [ self'.packages.default ];
105
106 shellHook = ''
107 >&2 echo
108 >&2 echo '🚀 Run `atticd` to get started!'
109 >&2 echo
110 '';
111 };
112 };
113 };
114}