refactor(nix): Migrate from cargo2nix to rust-flake (#8503)

This commit is contained in:
Nikhil Singh
2025-07-15 13:05:29 +05:30
committed by GitHub
parent 45e2d5c144
commit 871c08249d
7 changed files with 224 additions and 222 deletions

1
.gitignore vendored
View File

@@ -270,3 +270,4 @@ creds.json
# Nix services data
/data
.pre-commit-config.yaml

224
flake.lock generated
View File

@@ -1,40 +1,17 @@
{
"nodes": {
"cargo2nix": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
},
"crane": {
"locked": {
"lastModified": 1742755793,
"narHash": "sha256-nz3zSO5a/cB/XPcP4c3cddUceKH9V3LNMuNpfV3TDeE=",
"owner": "cargo2nix",
"repo": "cargo2nix",
"rev": "f7b2c744b1e6ee39c7b4528ea34f06db598266a6",
"lastModified": 1750266157,
"narHash": "sha256-tL42YoNg9y30u7zAqtoGDNdTyXTi8EALDeCB13FtbQA=",
"owner": "ipetkov",
"repo": "crane",
"rev": "e37c943371b73ed87faf33f7583860f81f1d5a48",
"type": "github"
},
"original": {
"owner": "cargo2nix",
"ref": "release-0.11.0",
"repo": "cargo2nix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"owner": "ipetkov",
"repo": "crane",
"type": "github"
}
},
@@ -43,11 +20,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1749398372,
"narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=",
"lastModified": 1751413152,
"narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569",
"rev": "77826244401ea9de6e3bac47c2db46005e1f30b5",
"type": "github"
},
"original": {
@@ -56,47 +33,81 @@
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"git-hooks": {
"flake": false,
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"globset": {
"inputs": {
"nixpkgs-lib": [
"rust-flake",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744379919,
"narHash": "sha256-ieaQegt7LdMDFweeHhRaUQFYyF0U3pWD/XiCvq5L5U8=",
"owner": "pdtpartners",
"repo": "globset",
"rev": "4e21c96ab1259b8cd864272f96a8891b589c8eda",
"type": "github"
},
"original": {
"owner": "pdtpartners",
"repo": "globset",
"type": "github"
}
},
"nixos-unified": {
"locked": {
"lastModified": 1751174231,
"narHash": "sha256-OLPo3ZI/gKH0C6P6l2W9RYm1ow/Jl4qBrasQ3rjAA0E=",
"owner": "srid",
"repo": "nixos-unified",
"rev": "05eb3d59d3b48460ea01c419702d4fc0c3210805",
"type": "github"
},
"original": {
"owner": "srid",
"repo": "nixos-unified",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1705099185,
"narHash": "sha256-SxJenKtvcrKJd0TyJQMO3p6VA7PEp+vmMnmlKFzWMNs=",
"owner": "nixos",
"lastModified": 1751271578,
"narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2bce5ccff0ad7abda23e8bb56434b6877a446694",
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "release-23.11",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1748740939,
"narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=",
"lastModified": 1751159883,
"narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "656a64127e9d791a334452c6b6606d17539476e2",
"rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab",
"type": "github"
},
"original": {
@@ -107,36 +118,20 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1749285348,
"narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=",
"owner": "NixOS",
"lastModified": 1751271578,
"narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3e3afe5174c561dee0df6f2c2b2236990146329f",
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
"type": "github"
},
"original": {
"owner": "NixOS",
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"process-compose-flake": {
"locked": {
"lastModified": 1749418557,
@@ -154,49 +149,49 @@
},
"root": {
"inputs": {
"cargo2nix": "cargo2nix",
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2",
"git-hooks": "git-hooks",
"nixos-unified": "nixos-unified",
"nixpkgs": "nixpkgs",
"process-compose-flake": "process-compose-flake",
"rust-overlay": "rust-overlay_2",
"rust-flake": "rust-flake",
"services-flake": "services-flake"
}
},
"rust-flake": {
"inputs": {
"crane": "crane",
"globset": "globset",
"nixpkgs": "nixpkgs_2",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1751562414,
"narHash": "sha256-0ohW9/OWtkRHFteFdbhWJPGNHD00UWHjVA/qOTeuNfM=",
"owner": "juspay",
"repo": "rust-flake",
"rev": "a1c9995285b1288b3249a6ee1ac19443535bbb94",
"type": "github"
},
"original": {
"owner": "juspay",
"repo": "rust-flake",
"type": "github"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": [
"cargo2nix",
"flake-utils"
],
"nixpkgs": [
"cargo2nix",
"rust-flake",
"nixpkgs"
]
},
"locked": {
"lastModified": 1705112162,
"narHash": "sha256-IAM0+Uijh/fwlfoeDrOwau9MxcZW3zeDoUHc6Z3xfqM=",
"lastModified": 1751510438,
"narHash": "sha256-m8PjOoyyCR4nhqtHEBP1tB/jF+gJYYguSZmUmVTEAQE=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "9e0af26ffe52bf955ad5575888f093e41fba0104",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1749695868,
"narHash": "sha256-debjTLOyqqsYOUuUGQsAHskFXH5+Kx2t3dOo/FCoNRA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "55f914d5228b5c8120e9e0f9698ed5b7214d09cd",
"rev": "7f415261f298656f8164bd636c0dc05af4e95b6b",
"type": "github"
},
"original": {
@@ -207,11 +202,11 @@
},
"services-flake": {
"locked": {
"lastModified": 1749343305,
"narHash": "sha256-K4bK5OOJJlSWbJB7TbVzZQzJ694Qm7iGxOr0BpbqRpc=",
"lastModified": 1751536468,
"narHash": "sha256-lgzxvPlpx2uxkMznGBB0ID0byZBlMvcSadotcfnKIbM=",
"owner": "juspay",
"repo": "services-flake",
"rev": "62ef1d7436e7f07667a9b979c95ac2f706fdf3bb",
"rev": "a4c8b34362dc86a2d417aff1d0b87fbfef17a3c7",
"type": "github"
},
"original": {
@@ -219,21 +214,6 @@
"repo": "services-flake",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",

108
flake.nix
View File

@@ -5,110 +5,18 @@
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
# TODO: Move away from these to https://github.com/juspay/rust-flake
cargo2nix.url = "github:cargo2nix/cargo2nix/release-0.11.0";
rust-overlay.url = "github:oxalica/rust-overlay";
rust-flake.url = "github:juspay/rust-flake";
nixos-unified.url = "github:srid/nixos-unified";
git-hooks.url = "github:cachix/git-hooks.nix";
git-hooks.flake = false;
process-compose-flake.url = "github:Platonic-Systems/process-compose-flake";
services-flake.url = "github:juspay/services-flake";
};
outputs = inputs:
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
imports = [ inputs.process-compose-flake.flakeModule ];
systems = inputs.nixpkgs.lib.systems.flakeExposed;
perSystem = { self', pkgs, lib, system, ... }:
let
cargoToml = lib.importTOML ./Cargo.toml;
rustDevVersion = "1.87.0";
rustMsrv = cargoToml.workspace.package.rust-version;
# Common packages
base = with pkgs; [
diesel-cli
just
jq
openssl
pkg-config
postgresql # for libpq
protobuf
];
# Minimal packages for running hyperswitch
runPackages = base ++ (with pkgs; [
rust-bin.stable.${rustMsrv}.default
]);
# Development packages
devPackages = base ++ (with pkgs; [
cargo-watch
nixd
protobuf
rust-bin.stable.${rustDevVersion}.default
swagger-cli
]);
# QA packages
qaPackages = devPackages ++ (with pkgs; [
cypress
nodejs
parallel
]);
in
{
_module.args.pkgs = import inputs.nixpkgs {
inherit system;
overlays = [ inputs.cargo2nix.overlays.default (import inputs.rust-overlay) ];
};
# Minimal shell
devShells.default = pkgs.mkShell {
name = "hyperswitch-shell";
packages = base;
};
# Development shell
devShells.dev = pkgs.mkShell {
name = "hyperswitch-dev-shell";
packages = devPackages;
};
# QA development shell
devShells.qa = pkgs.mkShell {
name = "hyperswitch-qa-shell";
packages = qaPackages;
};
/* For running external services
- Redis
- Postgres
*/
process-compose."ext-services" =
let
developmentToml = lib.importTOML ./config/development.toml;
databaseName = developmentToml.master_database.dbname;
databaseUser = developmentToml.master_database.username;
databasePass = developmentToml.master_database.password;
in
{
imports = [ inputs.services-flake.processComposeModules.default ];
services.redis."r1".enable = true;
/* Postgres
- Create an user and grant all privileges
- Create a database
*/
services.postgres."p1" = {
enable = true;
initialScript = {
before = "CREATE USER ${databaseUser} WITH PASSWORD '${databasePass}' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;";
after = "GRANT ALL PRIVILEGES ON DATABASE ${databaseName} to ${databaseUser};";
};
initialDatabases = [
{ name = databaseName; }
];
};
};
};
};
inputs.nixos-unified.lib.mkFlake
{ inherit inputs; root = ./.; };
}

View File

@@ -0,0 +1,52 @@
{
debug = true;
perSystem = { config, pkgs, self', ... }:
let
rustMsrv = config.rust-project.cargoToml.workspace.package.rust-version;
rustDevVersion = config.rust-project.toolchain.version;
in
{
devShells = {
default =
pkgs.mkShell {
name = "hyperswitch-shell";
meta.description = "Environment for Hyperswitch development";
inputsFrom = [ config.pre-commit.devShell ];
packages = with pkgs; [
diesel-cli
just
jq
openssl
pkg-config
postgresql # for libpq
protobuf
];
};
dev = pkgs.mkShell {
name = "hyperswitch-dev-shell";
meta.description = "Environment for Hyperswitch development with additional tools";
inputsFrom = [ self'.devShells.default ];
packages = with pkgs; [
cargo-watch
nixd
rust-bin.stable.${rustDevVersion}.default
swagger-cli
];
shellHook = ''
echo 1>&2 "Ready to work on hyperswitch!"
rustc --version
'';
};
qa = pkgs.mkShell {
name = "hyperswitch-qa-shell";
meta.description = "Environment for Hyperswitch QA";
inputsFrom = [ self'.devShells.dev ];
packages = with pkgs; [
cypress
nodejs
parallel
];
};
};
};
}

View File

@@ -0,0 +1,11 @@
{ inputs, ... }:
{
imports = [
(inputs.git-hooks + /flake-module.nix)
];
perSystem = { ... }: {
pre-commit.settings.hooks = {
nixpkgs-fmt.enable = true;
};
};
}

View File

@@ -0,0 +1,12 @@
{ inputs, ... }:
{
imports = [
inputs.rust-flake.flakeModules.default
inputs.rust-flake.flakeModules.nixpkgs
];
perSystem = { pkgs, ... }: {
rust-project.toolchain = pkgs.rust-bin.fromRustupToolchain {
channel = "1.88.0";
};
};
}

View File

@@ -0,0 +1,38 @@
{ inputs, lib, ... }:
{
imports = [
inputs.process-compose-flake.flakeModule
];
perSystem = { ... }: {
/* For running external services
- Redis
- Postgres
*/
process-compose."ext-services" =
let
developmentToml = lib.importTOML (inputs.self + /config/development.toml);
databaseName = developmentToml.master_database.dbname;
databaseUser = developmentToml.master_database.username;
databasePass = developmentToml.master_database.password;
in
{
imports = [ inputs.services-flake.processComposeModules.default ];
services.redis."r1".enable = true;
/* Postgres
- Create an user and grant all privileges
- Create a database
*/
services.postgres."p1" = {
enable = true;
initialScript = {
before = "CREATE USER ${databaseUser} WITH PASSWORD '${databasePass}' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;";
after = "GRANT ALL PRIVILEGES ON DATABASE ${databaseName} to ${databaseUser};";
};
initialDatabases = [
{ name = databaseName; }
];
};
};
};
}