diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3d9d9d1117513c6a23cd2cc9aefc976b76f13845..cf28dbd198ebd921eb0f51909e81fbc70e5f62e7 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,29 +2,31 @@ ci:
   autoupdate_branch: devel
 repos:
 - repo: https://github.com/astral-sh/ruff-pre-commit
-  rev: v0.6.4
+  rev: v0.11.0
   hooks:
   - id: ruff
     args:
     - --fix
     - --exit-non-zero-on-fix
+    exclude: '^.*\.ipynb$'
   - id: ruff-format
 - repo: https://github.com/cheshirekow/cmake-format-precommit
   rev: v0.6.13
   hooks:
   - id: cmake-format
 - repo: https://github.com/pappasam/toml-sort
-  rev: v0.23.1
+  rev: v0.24.2
   hooks:
   - id: toml-sort-fix
 - repo: https://github.com/pre-commit/mirrors-clang-format
-  rev: v18.1.8
+  rev: v20.1.0
   hooks:
   - id: clang-format
     args:
     - '--style={BasedOnStyle: Google, SortIncludes: false, WhitespaceSensitiveMacros: ["TSID_DISABLE_WARNING"]}'
+    exclude: '^.*\.ipynb$'
 - repo: https://github.com/pre-commit/pre-commit-hooks
-  rev: v4.6.0
+  rev: v5.0.0
   hooks:
   - id: check-json
   - id: check-symlinks
diff --git a/demo/demo_quadruped.py b/demo/demo_quadruped.py
index 24b3747f7ed2045700a01a0b1ffb1204abe9000b..3ea1314de01b1e7b1a6a6692ef65df63946b1d93 100644
--- a/demo/demo_quadruped.py
+++ b/demo/demo_quadruped.py
@@ -168,7 +168,7 @@ for i in range(0, N_SIMULATION):
 
     sol = solver.solve(HQPData)
     if sol.status != 0:
-        print("[%d] QP problem could not be solved! Error code:" % (i), sol.status)
+        print(f"[{i}] QP problem could not be solved! Error code", sol.status)
         break
 
     tau = invdyn.getActuatorForces(sol)
diff --git a/demo/demo_tsid_talos_gripper_closed_kinematic_chain.py b/demo/demo_tsid_talos_gripper_closed_kinematic_chain.py
index bc01e7c7f70c58dd4cef99410729918fa23bfa02..2fdb47c0086e4c835b884f2aef27eb2c10399b1e 100644
--- a/demo/demo_tsid_talos_gripper_closed_kinematic_chain.py
+++ b/demo/demo_tsid_talos_gripper_closed_kinematic_chain.py
@@ -169,7 +169,7 @@ while True:
 
     sol = solver.solve(HQPData)
     if sol.status != 0:
-        print("[%d] QP problem could not be solved! Error code:" % (i), sol.status)
+        print(f"[{i}] QP problem could not be solved! Error code:", sol.status)
         break
 
     tau = invdyn.getActuatorForces(sol)
diff --git a/exercizes/ex_4_LIPM_to_TSID.py b/exercizes/ex_4_LIPM_to_TSID.py
index a36268cd4f165bc5c0afa2816f2999504fc6443c..4e16d7dda1047e1e3b0917fb28959618f7a258fb 100644
--- a/exercizes/ex_4_LIPM_to_TSID.py
+++ b/exercizes/ex_4_LIPM_to_TSID.py
@@ -36,9 +36,8 @@ com, dcom, ddcom, cop, contact_phase, foot_steps_ctrl = interpolate_lipm_traj(
 )
 
 # COMPUTE TRAJECTORIES FOR FEET
-N = conf.nb_steps * int(
-    round(conf.T_step / conf.dt_mpc)
-)  # number of time steps for traj-opt
+# number of time steps for traj-opt
+N = conf.nb_steps * round(conf.T_step / conf.dt_mpc)
 N_ctrl = int((N * conf.dt_mpc) / dt_ctrl)  # number of time steps for TSID
 foot_steps_RF = foot_steps[::2, :]  # assume first foot step corresponds to right foot
 x_RF, dx_RF, ddx_RF = compute_foot_traj(
diff --git a/exercizes/ex_4_plan_LIPM_romeo.py b/exercizes/ex_4_plan_LIPM_romeo.py
index 1b326feeb803804a32e79d19ca7792cb62c79682..3c81d14325a919aed9c7607e3a355cb55ec1cab8 100644
--- a/exercizes/ex_4_plan_LIPM_romeo.py
+++ b/exercizes/ex_4_plan_LIPM_romeo.py
@@ -44,7 +44,7 @@ import matplotlib.pyplot as plt
 # ----------------------------
 foot_length = conf.lxn + conf.lxp  # foot size in the x-direction
 foot_width = conf.lyn + conf.lyp  # foot size in the y-direciton
-nb_dt_per_step = int(round(conf.T_step / conf.dt_mpc))
+nb_dt_per_step = round(conf.T_step / conf.dt_mpc)
 N = conf.nb_steps * nb_dt_per_step  # number of desired walking intervals
 
 # CoM initial state: [x_0, xdot_0].T
diff --git a/flake.lock b/flake.lock
index 5a073458915ca042fd1798626ea3f05fa7ac7be2..8e0ab984ce0835554ab04311cb3b04b54d3ff4e2 100644
--- a/flake.lock
+++ b/flake.lock
@@ -20,15 +20,16 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1724857063,
-        "narHash": "sha256-Hr4qs3NQLP6JDUPpItJOztUzsr3IjC9WAWM47ob03GU=",
-        "owner": "gepetto",
+        "lastModified": 1742069588,
+        "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=",
+        "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "b953c287a7ed9e5d33917ec4c838e1b5de9713e0",
+        "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5",
         "type": "github"
       },
       "original": {
-        "owner": "gepetto",
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
         "repo": "nixpkgs",
         "type": "github"
       }
diff --git a/flake.nix b/flake.nix
index 652ea5555aa63743cf35104124f0ba5207e53625..ec1c4e6547698973e553ca3f5fab91037a4ecc99 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,9 +3,7 @@
 
   inputs = {
     flake-parts.url = "github:hercules-ci/flake-parts";
-    #nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
-    # use gepetto fork until https://github.com/NixOS/nixpkgs/pull/337942
-    nixpkgs.url = "github:gepetto/nixpkgs";
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
   };
 
   outputs =
diff --git a/include/tsid/bindings/python/constraint/constraint-bound.hpp b/include/tsid/bindings/python/constraint/constraint-bound.hpp
index 51bedfc4122389ed7014d18f3d1e7e5c4033fa76..44f46476fdaafbbec7d47e6f64022ee7e7ef434b 100644
--- a/include/tsid/bindings/python/constraint/constraint-bound.hpp
+++ b/include/tsid/bindings/python/constraint/constraint-bound.hpp
@@ -56,19 +56,19 @@ struct ConstraintPythonVisitor
         .add_property("upperBound", &ConstraintPythonVisitor::upperBound)
 
         .def("setVector",
-             (bool(ConstraintBound::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintBound::setVector,
+             (bool (ConstraintBound::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintBound::setVector,
              bp::args("vector"), "Set Vector")
         .def("setLowerBound",
-             (bool(ConstraintBound::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintBound::setLowerBound,
+             (bool (ConstraintBound::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintBound::setLowerBound,
              bp::args("lb"), "Set LowerBound")
         .def("setUpperBound",
-             (bool(ConstraintBound::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintBound::setUpperBound,
+             (bool (ConstraintBound::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintBound::setUpperBound,
              bp::args("ub"), "Set UpperBound");
   }
   static Eigen::VectorXd vector(const ConstraintBound& self) {
diff --git a/include/tsid/bindings/python/constraint/constraint-equality.hpp b/include/tsid/bindings/python/constraint/constraint-equality.hpp
index 2a056801904e1155d02d35383d4fd9bdea63e802..ef8a4f1476298e6523774fbc99a525a123acab5c 100644
--- a/include/tsid/bindings/python/constraint/constraint-equality.hpp
+++ b/include/tsid/bindings/python/constraint/constraint-equality.hpp
@@ -57,24 +57,24 @@ struct ConstraintEqPythonVisitor
         .add_property("upperBound", &ConstraintEqPythonVisitor::upperBound)
 
         .def("setMatrix",
-             (bool(ConstraintEquality::*)(
-                 const Eigen::Ref<const Eigen::MatrixXd>)) &
-                 ConstraintEquality::setMatrix,
+             (bool (ConstraintEquality::*)(
+                 const Eigen::Ref<
+                     const Eigen::MatrixXd>))&ConstraintEquality::setMatrix,
              bp::args("matrix"), "Set Matrix")
         .def("setVector",
-             (bool(ConstraintEquality::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintEquality::setVector,
+             (bool (ConstraintEquality::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintEquality::setVector,
              bp::args("vector"), "Set Vector")
         .def("setLowerBound",
-             (bool(ConstraintEquality::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintEquality::setLowerBound,
+             (bool (ConstraintEquality::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintEquality::setLowerBound,
              bp::args("lb"), "Set LowerBound")
         .def("setUpperBound",
-             (bool(ConstraintEquality::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintEquality::setUpperBound,
+             (bool (ConstraintEquality::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintEquality::setUpperBound,
              bp::args("ub"), "Set UpperBound")
 
         ;
diff --git a/include/tsid/bindings/python/constraint/constraint-inequality.hpp b/include/tsid/bindings/python/constraint/constraint-inequality.hpp
index 51724ab8874bcdaabe0c6d307c04921857702979..08078380b257c9978e6cbb7087798388369218e8 100644
--- a/include/tsid/bindings/python/constraint/constraint-inequality.hpp
+++ b/include/tsid/bindings/python/constraint/constraint-inequality.hpp
@@ -57,25 +57,27 @@ struct ConstraintIneqPythonVisitor
         .add_property("upperBound", &ConstraintIneqPythonVisitor::upperBound)
 
         .def("setMatrix",
-             (bool(ConstraintInequality::*)(
-                 const Eigen::Ref<const Eigen::MatrixXd>)) &
-                 ConstraintInequality::setMatrix,
+             (bool (ConstraintInequality::*)(
+                 const Eigen::Ref<
+                     const Eigen::MatrixXd>))&ConstraintInequality::setMatrix,
              bp::args("matrix"), "Set Matrix")
         .def("setVector",
-             (bool(ConstraintInequality::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintInequality::setVector,
+             (bool (ConstraintInequality::*)(
+                 const Eigen::Ref<
+                     const Eigen::VectorXd>))&ConstraintInequality::setVector,
              bp::args("vector"), "Set Vector")
-        .def("setLowerBound",
-             (bool(ConstraintInequality::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintInequality::setLowerBound,
-             bp::args("lb"), "Set LowerBound")
-        .def("setUpperBound",
-             (bool(ConstraintInequality::*)(
-                 const Eigen::Ref<const Eigen::VectorXd>)) &
-                 ConstraintInequality::setUpperBound,
-             bp::args("ub"), "Set UpperBound");
+        .def(
+            "setLowerBound",
+            (bool (ConstraintInequality::*)(
+                const Eigen::Ref<const Eigen::VectorXd>))&ConstraintInequality::
+                setLowerBound,
+            bp::args("lb"), "Set LowerBound")
+        .def(
+            "setUpperBound",
+            (bool (ConstraintInequality::*)(
+                const Eigen::Ref<const Eigen::VectorXd>))&ConstraintInequality::
+                setUpperBound,
+            bp::args("ub"), "Set UpperBound");
   }
   static Eigen::MatrixXd matrix(const ConstraintInequality& self) {
     return self.matrix();