/ services.nix
services.nix
1 {inputs}: { 2 config, 3 lib, 4 pkgs, 5 ... 6 }: let 7 cfg = config.services; 8 in { 9 options = { 10 services.anvil = { 11 enable = lib.mkEnableOption "Start anvil"; 12 }; 13 services.deploy-contracts = { 14 enable = lib.mkEnableOption "Deploy contracts"; 15 rpcUrl = lib.mkOption { 16 type = lib.types.str; 17 default = "http://localhost:8545"; 18 description = "The Ethereum RPC URL to be used"; 19 }; 20 privateKey = lib.mkOption { 21 type = lib.types.str; 22 default = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; 23 description = "The private key to be used"; 24 }; 25 }; 26 }; 27 config = { 28 settings.processes = lib.mkMerge [ 29 (lib.mkIf cfg.deploy-contracts.enable { 30 deploy-contracts = { 31 environment = { 32 PRIVATE_KEY = cfg.deploy-contracts.privateKey; 33 FOUNDRY_ETH_RPC_URL = cfg.deploy-contracts.rpcUrl; 34 }; 35 command = inputs.self.packages.${pkgs.system}.deploy-market; 36 depends_on = lib.mkIf cfg.anvil.enable { 37 "anvil".condition = "process_log_ready"; 38 }; 39 log_location = "$FLAKE_ROOT/logs/deploy.log"; 40 }; 41 }) 42 (lib.mkIf cfg.anvil.enable { 43 anvil = { 44 command = "${pkgs.foundry}/bin/anvil"; 45 ready_log_line = "Listening on"; 46 log_location = "$FLAKE_ROOT/logs/anvil.log"; 47 }; 48 }) 49 ]; 50 }; 51 }