about summary refs log tree commit diff
path: root/third_party/nix/src
diff options
context:
space:
mode:
authorKane York <kanepyork@gmail.com>2020-08-02T00·17-0700
committerkanepyork <rikingcoding@gmail.com>2020-08-08T22·16+0000
commit1de00e6c42ee6beaaa490104888ef09be1d4a0d4 (patch)
treed98a37ae13525510e3b76feed56b3865360374d1 /third_party/nix/src
parent053a1380023591e8eb3f514b4214226c95da207d (diff)
chore(3p/nix): apply google-readability-casting r/1619
Command run: jq <compile_commands.json -r 'map(.file)|.[]' | grep -v '/generated/' | parallel clang-tidy -p compile_commands.json -checks=-*,google-readability-casting --fix

Manual fixes applied in src/nix-env/nix-env.cc, src/libstore/store-api.cc

Change-Id: I406b4be9368c557ca59329bf6f7002704e955f8d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1557
Tested-by: BuildkiteCI
Reviewed-by: glittershark <grfn@gws.fyi>
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'third_party/nix/src')
-rw-r--r--third_party/nix/src/libexpr/eval.cc7
-rw-r--r--third_party/nix/src/libexpr/nixexpr.cc6
-rw-r--r--third_party/nix/src/libexpr/primops.cc11
-rw-r--r--third_party/nix/src/libexpr/primops/fetchGit.cc3
-rw-r--r--third_party/nix/src/libexpr/primops/fetchMercurial.cc3
-rw-r--r--third_party/nix/src/libmain/shared.cc2
-rw-r--r--third_party/nix/src/libmain/stack.cc4
-rw-r--r--third_party/nix/src/libstore/binary-cache-store.cc11
-rw-r--r--third_party/nix/src/libstore/build.cc31
-rw-r--r--third_party/nix/src/libstore/crypto.cc11
-rw-r--r--third_party/nix/src/libstore/download.cc25
-rw-r--r--third_party/nix/src/libstore/gc.cc5
-rw-r--r--third_party/nix/src/libstore/legacy-ssh-store.cc2
-rw-r--r--third_party/nix/src/libstore/local-fs-store.cc2
-rw-r--r--third_party/nix/src/libstore/local-store.cc18
-rw-r--r--third_party/nix/src/libstore/nar-accessor.cc2
-rw-r--r--third_party/nix/src/libstore/nar-info-disk-cache.cc10
-rw-r--r--third_party/nix/src/libstore/remote-fs-accessor.cc6
-rw-r--r--third_party/nix/src/libstore/remote-store.cc2
-rw-r--r--third_party/nix/src/libstore/sqlite.cc2
-rw-r--r--third_party/nix/src/libstore/ssh.cc2
-rw-r--r--third_party/nix/src/libstore/store-api.cc6
-rw-r--r--third_party/nix/src/libutil/archive.cc6
-rw-r--r--third_party/nix/src/libutil/args.cc4
-rw-r--r--third_party/nix/src/libutil/compression.cc8
-rw-r--r--third_party/nix/src/libutil/hash.cc7
-rw-r--r--third_party/nix/src/libutil/json.cc2
-rw-r--r--third_party/nix/src/libutil/serialise.cc16
-rw-r--r--third_party/nix/src/libutil/util.cc15
-rw-r--r--third_party/nix/src/nix-build/nix-build.cc8
-rw-r--r--third_party/nix/src/nix-channel/nix-channel.cc2
-rw-r--r--third_party/nix/src/nix-daemon/nix-daemon-proto.cc2
-rw-r--r--third_party/nix/src/nix-env/nix-env.cc7
-rw-r--r--third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc4
-rw-r--r--third_party/nix/src/nix-store/nix-store.cc16
-rw-r--r--third_party/nix/src/nix/main.cc3
-rw-r--r--third_party/nix/src/nix/path-info.cc4
-rw-r--r--third_party/nix/src/nix/repl.cc4
-rw-r--r--third_party/nix/src/nix/search.cc4
-rw-r--r--third_party/nix/src/nix/verify.cc3
40 files changed, 161 insertions, 125 deletions
diff --git a/third_party/nix/src/libexpr/eval.cc b/third_party/nix/src/libexpr/eval.cc
index 3ecd990daaac..4064f1594f00 100644
--- a/third_party/nix/src/libexpr/eval.cc
+++ b/third_party/nix/src/libexpr/eval.cc
@@ -577,8 +577,8 @@ Value& mkString(Value& v, const std::string& s, const PathSet& context) {
   mkString(v, s.c_str());
   if (!context.empty()) {
     size_t n = 0;
-    v.string.context =
-        (const char**)allocBytes((context.size() + 1) * sizeof(char*));
+    v.string.context = static_cast<const char**>(
+        allocBytes((context.size() + 1) * sizeof(char*)));
     for (auto& i : context) {
       v.string.context[n++] = dupString(i.c_str());
     }
@@ -1703,7 +1703,8 @@ void EvalState::printStats() {
 
   struct rusage buf;
   getrusage(RUSAGE_SELF, &buf);
-  float cpuTime = buf.ru_utime.tv_sec + ((float)buf.ru_utime.tv_usec / 1000000);
+  float cpuTime = buf.ru_utime.tv_sec +
+                  (static_cast<float>(buf.ru_utime.tv_usec) / 1000000);
 
   uint64_t bEnvs = nrEnvs * sizeof(Env) + nrValuesInEnvs * sizeof(Value*);
   uint64_t bLists = nrListElems * sizeof(Value*);
diff --git a/third_party/nix/src/libexpr/nixexpr.cc b/third_party/nix/src/libexpr/nixexpr.cc
index 94e7d335cff0..24ce6ec3fc91 100644
--- a/third_party/nix/src/libexpr/nixexpr.cc
+++ b/third_party/nix/src/libexpr/nixexpr.cc
@@ -18,7 +18,7 @@ std::ostream& operator<<(std::ostream& str, const Expr& e) {
 
 static void showString(std::ostream& str, const std::string& s) {
   str << '"';
-  for (auto c : (std::string)s) {
+  for (auto c : std::string(s)) {
     if (c == '"' || c == '\\' || c == '$') {
       str << "\\" << c;
     } else if (c == '\n') {
@@ -191,7 +191,7 @@ std::ostream& operator<<(std::ostream& str, const Pos& pos) {
     str << "undefined position";
   } else {
     str << (format(ANSI_BOLD "%1%" ANSI_NORMAL ":%2%:%3%") %
-            (std::string)pos.file.value() % pos.line % pos.column)
+            std::string(pos.file.value()) % pos.line % pos.column)
                .str();
   }
   return str;
@@ -405,7 +405,7 @@ void ExprLambda::setName(Symbol& name) { this->name = name; }
 
 std::string ExprLambda::showNamePos() const {
   return (format("%1% at %2%") %
-          (name.has_value() ? "'" + (std::string)name.value() + "'"
+          (name.has_value() ? "'" + std::string(name.value()) + "'"
                             : "anonymous function") %
           pos)
       .str();
diff --git a/third_party/nix/src/libexpr/primops.cc b/third_party/nix/src/libexpr/primops.cc
index 04ccf7623b17..0008b7b180a9 100644
--- a/third_party/nix/src/libexpr/primops.cc
+++ b/third_party/nix/src/libexpr/primops.cc
@@ -876,7 +876,7 @@ static void prim_readFile(EvalState& state, const Pos& pos, Value** args,
   }
   std::string s =
       readFile(state.checkSourcePath(state.toRealPath(path, context)));
-  if (s.find((char)0) != std::string::npos) {
+  if (s.find(static_cast<char>(0)) != std::string::npos) {
     throw Error(format("the contents of the file '%1%' cannot be represented "
                        "as a Nix string") %
                 path);
@@ -1421,7 +1421,7 @@ static void prim_isList(EvalState& state, const Pos& pos, Value** args,
 static void elemAt(EvalState& state, const Pos& pos, Value& list, int n,
                    Value& v) {
   state.forceList(list, pos);
-  if (n < 0 || (unsigned int)n >= list.listSize()) {
+  if (n < 0 || static_cast<unsigned int>(n) >= list.listSize()) {
     throw Error(format("list index %1% is out of bounds, at %2%") % n % pos);
   }
   state.forceValue(*(*list.list)[n]);
@@ -1587,7 +1587,7 @@ static void prim_genList(EvalState& state, const Pos& pos, Value** args,
 
   state.mkList(v, len);
 
-  for (unsigned int n = 0; n < (unsigned int)len; ++n) {
+  for (unsigned int n = 0; n < static_cast<unsigned int>(len); ++n) {
     Value* arg = state.allocValue();
     mkInt(*arg, n);
     mkApp(*((*v.list)[n] = state.allocValue()), *args[0], *arg);
@@ -1790,7 +1790,10 @@ static void prim_substring(EvalState& state, const Pos& pos, Value** args,
                     pos);
   }
 
-  mkString(v, (unsigned int)start >= s.size() ? "" : std::string(s, start, len),
+  mkString(v,
+           static_cast<unsigned int>(start) >= s.size()
+               ? ""
+               : std::string(s, start, len),
            context);
 }
 
diff --git a/third_party/nix/src/libexpr/primops/fetchGit.cc b/third_party/nix/src/libexpr/primops/fetchGit.cc
index d0e0d389ccca..2b2ca476cbbb 100644
--- a/third_party/nix/src/libexpr/primops/fetchGit.cc
+++ b/third_party/nix/src/libexpr/primops/fetchGit.cc
@@ -129,7 +129,8 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
        git fetch to update the local ref to the remote ref. */
     struct stat st;
     doFetch = stat(localRefFile.c_str(), &st) != 0 ||
-              (uint64_t)st.st_mtime + settings.tarballTtl <= (uint64_t)now;
+              static_cast<uint64_t>(st.st_mtime) + settings.tarballTtl <=
+                  static_cast<uint64_t>(now);
   }
   if (doFetch) {
     DLOG(INFO) << "fetching Git repository '" << uri << "'";
diff --git a/third_party/nix/src/libexpr/primops/fetchMercurial.cc b/third_party/nix/src/libexpr/primops/fetchMercurial.cc
index 0367b2120b66..df42b6d94884 100644
--- a/third_party/nix/src/libexpr/primops/fetchMercurial.cc
+++ b/third_party/nix/src/libexpr/primops/fetchMercurial.cc
@@ -92,7 +92,8 @@ HgInfo exportMercurial(ref<Store> store, const std::string& uri,
   time_t now = time(0);
   struct stat st;
   if (stat(stampFile.c_str(), &st) != 0 ||
-      (uint64_t)st.st_mtime + settings.tarballTtl <= (uint64_t)now) {
+      static_cast<uint64_t>(st.st_mtime) + settings.tarballTtl <=
+          static_cast<uint64_t>(now)) {
     /* Except that if this is a commit hash that we already have,
        we don't have to pull again. */
     if (!(std::regex_match(rev, commitHashRegex) && pathExists(cacheDir) &&
diff --git a/third_party/nix/src/libmain/shared.cc b/third_party/nix/src/libmain/shared.cc
index b04bd279b95a..348b91ab55e9 100644
--- a/third_party/nix/src/libmain/shared.cc
+++ b/third_party/nix/src/libmain/shared.cc
@@ -327,7 +327,7 @@ RunPager::RunPager() {
   if (pager == nullptr) {
     pager = getenv("PAGER");
   }
-  if (pager && ((std::string)pager == "" || (std::string)pager == "cat")) {
+  if (pager && (std::string(pager) == "" || std::string(pager) == "cat")) {
     return;
   }
 
diff --git a/third_party/nix/src/libmain/stack.cc b/third_party/nix/src/libmain/stack.cc
index c7744f69c82c..628b6313a89c 100644
--- a/third_party/nix/src/libmain/stack.cc
+++ b/third_party/nix/src/libmain/stack.cc
@@ -16,7 +16,7 @@ static void sigsegvHandler(int signo, siginfo_t* info, void* ctx) {
   bool haveSP = true;
   char* sp = nullptr;
 #if defined(__x86_64__) && defined(REG_RSP)
-  sp = (char*)((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RSP];
+  sp = (char*)(static_cast<ucontext_t*>(ctx))->uc_mcontext.gregs[REG_RSP];
 #elif defined(REG_ESP)
   sp = (char*)((ucontext_t*)ctx)->uc_mcontext.gregs[REG_ESP];
 #else
@@ -24,7 +24,7 @@ static void sigsegvHandler(int signo, siginfo_t* info, void* ctx) {
 #endif
 
   if (haveSP) {
-    ptrdiff_t diff = (char*)info->si_addr - sp;
+    ptrdiff_t diff = static_cast<char*>(info->si_addr) - sp;
     if (diff < 0) {
       diff = -diff;
     }
diff --git a/third_party/nix/src/libstore/binary-cache-store.cc b/third_party/nix/src/libstore/binary-cache-store.cc
index fce4dc0e112c..d38db375edb9 100644
--- a/third_party/nix/src/libstore/binary-cache-store.cc
+++ b/third_party/nix/src/libstore/binary-cache-store.cc
@@ -88,7 +88,7 @@ void BinaryCacheStore::getFile(const std::string& path, Sink& sink) {
             }
           }});
   auto data = promise.get_future().get();
-  sink((unsigned char*)data->data(), data->size());
+  sink(reinterpret_cast<unsigned char*>(data->data()), data->size());
 }
 
 std::shared_ptr<std::string> BinaryCacheStore::getFile(
@@ -206,7 +206,9 @@ void BinaryCacheStore::addToStore(const ValidPathInfo& info,
           .count();
   DLOG(INFO) << "copying path '" << narInfo->path << "' (" << narInfo->narSize
              << " bytes, compressed "
-             << ((1.0 - (double)narCompressed->size() / nar->size()) * 100.0)
+             << ((1.0 -
+                  static_cast<double>(narCompressed->size()) / nar->size()) *
+                 100.0)
              << "% in " << duration << "ms) to binary cache";
 
   /* Atomically write the NAR file. */
@@ -288,9 +290,8 @@ void BinaryCacheStore::queryPathInfoUncached(
 
               stats.narInfoRead++;
 
-              (*callbackPtr)(
-                  (std::shared_ptr<ValidPathInfo>)std::make_shared<NarInfo>(
-                      *this, *data, narInfoFile));
+              (*callbackPtr)(std::shared_ptr<ValidPathInfo>(
+                  std::make_shared<NarInfo>(*this, *data, narInfoFile)));
 
             } catch (...) {
               callbackPtr->rethrow();
diff --git a/third_party/nix/src/libstore/build.cc b/third_party/nix/src/libstore/build.cc
index 9bff3b8345df..c48e1abd722a 100644
--- a/third_party/nix/src/libstore/build.cc
+++ b/third_party/nix/src/libstore/build.cc
@@ -1589,11 +1589,13 @@ MakeError(NotDeterministic, BuildError)
           8ULL * 1024 * 1024;  // FIXME: make configurable
       struct statvfs st;
       if (statvfs(worker.store.realStoreDir.c_str(), &st) == 0 &&
-          (unsigned long long)st.f_bavail * st.f_bsize < required) {
+          static_cast<unsigned long long>(st.f_bavail) * st.f_bsize <
+              required) {
         diskFull = true;
       }
       if (statvfs(tmpDir.c_str(), &st) == 0 &&
-          (unsigned long long)st.f_bavail * st.f_bsize < required) {
+          static_cast<unsigned long long>(st.f_bavail) * st.f_bsize <
+              required) {
         diskFull = true;
       }
 #endif
@@ -1832,7 +1834,7 @@ void chmod_(const Path& path, mode_t mode) {
 }
 
 int childEntry(void* arg) {
-  ((DerivationGoal*)arg)->runChild();
+  (static_cast<DerivationGoal*>(arg))->runChild();
   return 1;
 }
 
@@ -2361,9 +2363,9 @@ void DerivationGoal::startBuilder() {
           }
 
           size_t stackSize = 1 * 1024 * 1024;
-          char* stack =
-              (char*)mmap(nullptr, stackSize, PROT_WRITE | PROT_READ,
-                          MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
+          char* stack = static_cast<char*>(
+              mmap(nullptr, stackSize, PROT_WRITE | PROT_READ,
+                   MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0));
           if (stack == MAP_FAILED) {
             throw SysError("allocating stack");
           }
@@ -4483,9 +4485,9 @@ void Worker::waitForInput() {
   }
   if (nearest != steady_time_point::max()) {
     timeout.tv_sec = std::max(
-        1L,
-        (long)std::chrono::duration_cast<std::chrono::seconds>(nearest - before)
-            .count());
+        1L, static_cast<long>(std::chrono::duration_cast<std::chrono::seconds>(
+                                  nearest - before)
+                                  .count()));
     useTimeout = true;
   }
 
@@ -4500,10 +4502,11 @@ void Worker::waitForInput() {
       lastWokenUp = before;
     }
     timeout.tv_sec = std::max(
-        1L,
-        (long)std::chrono::duration_cast<std::chrono::seconds>(
-            lastWokenUp + std::chrono::seconds(settings.pollInterval) - before)
-            .count());
+        1L, static_cast<long>(std::chrono::duration_cast<std::chrono::seconds>(
+                                  lastWokenUp +
+                                  std::chrono::seconds(settings.pollInterval) -
+                                  before)
+                                  .count()));
   } else {
     lastWokenUp = steady_time_point::min();
   }
@@ -4568,7 +4571,7 @@ void Worker::waitForInput() {
           }
         } else {
           DLOG(INFO) << goal->getName() << ": read " << rd << " bytes";
-          std::string data((char*)buffer.data(), rd);
+          std::string data(reinterpret_cast<char*>(buffer.data()), rd);
           j->lastOutput = after;
           goal->handleChildOutput(k, data);
         }
diff --git a/third_party/nix/src/libstore/crypto.cc b/third_party/nix/src/libstore/crypto.cc
index 4661cbbb18fa..0a2795cb0a01 100644
--- a/third_party/nix/src/libstore/crypto.cc
+++ b/third_party/nix/src/libstore/crypto.cc
@@ -58,7 +58,8 @@ std::string SecretKey::signDetached(const std::string& data) const {
   unsigned long long sigLen;
   crypto_sign_detached(sig, &sigLen, (unsigned char*)data.data(), data.size(),
                        (unsigned char*)key.data());
-  return name + ":" + absl::Base64Escape(std::string((char*)sig, sigLen));
+  return name + ":" +
+         absl::Base64Escape(std::string(reinterpret_cast<char*>(sig), sigLen));
 #else
   noSodium();
 #endif
@@ -68,7 +69,8 @@ PublicKey SecretKey::toPublicKey() const {
 #if HAVE_SODIUM
   unsigned char pk[crypto_sign_PUBLICKEYBYTES];
   crypto_sign_ed25519_sk_to_pk(pk, (unsigned char*)key.data());
-  return PublicKey(name, std::string((char*)pk, crypto_sign_PUBLICKEYBYTES));
+  return PublicKey(name, std::string(reinterpret_cast<char*>(pk),
+                                     crypto_sign_PUBLICKEYBYTES));
 #else
   noSodium();
 #endif
@@ -102,8 +104,9 @@ bool verifyDetached(const std::string& data, const std::string& sig,
   }
 
   return crypto_sign_verify_detached(
-             (unsigned char*)sig2.data(), (unsigned char*)data.data(),
-             data.size(), (unsigned char*)key->second.key.data()) == 0;
+             reinterpret_cast<unsigned char*>(sig2.data()),
+             (unsigned char*)data.data(), data.size(),
+             (unsigned char*)key->second.key.data()) == 0;
 #else
   noSodium();
 #endif
diff --git a/third_party/nix/src/libstore/download.cc b/third_party/nix/src/libstore/download.cc
index cf64a6bad722..60a409d0dc4f 100644
--- a/third_party/nix/src/libstore/download.cc
+++ b/third_party/nix/src/libstore/download.cc
@@ -160,7 +160,7 @@ struct CurlDownloader : public Downloader {
           decompressionSink = makeDecompressionSink(encoding, finalSink);
         }
 
-        (*decompressionSink)((unsigned char*)contents, realSize);
+        (*decompressionSink)(static_cast<unsigned char*>(contents), realSize);
 
         return realSize;
       } catch (...) {
@@ -171,12 +171,13 @@ struct CurlDownloader : public Downloader {
 
     static size_t writeCallbackWrapper(void* contents, size_t size,
                                        size_t nmemb, void* userp) {
-      return ((DownloadItem*)userp)->writeCallback(contents, size, nmemb);
+      return (static_cast<DownloadItem*>(userp))
+          ->writeCallback(contents, size, nmemb);
     }
 
     size_t headerCallback(void* contents, size_t size, size_t nmemb) {
       size_t realSize = size * nmemb;
-      std::string line((char*)contents, realSize);
+      std::string line(static_cast<char*>(contents), realSize);
       DLOG(INFO) << "got header for '" << request.uri
                  << "': " << absl::StripAsciiWhitespace(line);
       if (line.compare(0, 5, "HTTP/") == 0) {  // new response starts
@@ -219,7 +220,8 @@ struct CurlDownloader : public Downloader {
 
     static size_t headerCallbackWrapper(void* contents, size_t size,
                                         size_t nmemb, void* userp) {
-      return ((DownloadItem*)userp)->headerCallback(contents, size, nmemb);
+      return (static_cast<DownloadItem*>(userp))
+          ->headerCallback(contents, size, nmemb);
     }
 
     static int debugCallback(CURL* handle, curl_infotype type, char* data,
@@ -246,7 +248,8 @@ struct CurlDownloader : public Downloader {
 
     static size_t readCallbackWrapper(char* buffer, size_t size, size_t nitems,
                                       void* userp) {
-      return ((DownloadItem*)userp)->readCallback(buffer, size, nitems);
+      return (static_cast<DownloadItem*>(userp))
+          ->readCallback(buffer, size, nitems);
     }
 
     void init() {
@@ -580,9 +583,10 @@ struct CurlDownloader : public Downloader {
           nextWakeup != std::chrono::steady_clock::time_point()
               ? std::max(
                     0,
-                    (int)std::chrono::duration_cast<std::chrono::milliseconds>(
-                        nextWakeup - std::chrono::steady_clock::now())
-                        .count())
+                    static_cast<int>(
+                        std::chrono::duration_cast<std::chrono::milliseconds>(
+                            nextWakeup - std::chrono::steady_clock::now())
+                            .count()))
               : maxSleepTimeMs;
       DLOG(INFO) << "download thread waiting for " << sleepTimeMs << " ms";
       mc = curl_multi_wait(curlm, extraFDs, 1, sleepTimeMs, &numfds);
@@ -846,7 +850,7 @@ void Downloader::download(DownloadRequest&& request, Sink& sink) {
        if it's blocked on a full buffer. We don't hold the state
        lock while doing this to prevent blocking the download
        thread if sink() takes a long time. */
-    sink((unsigned char*)chunk.data(), chunk.size());
+    sink(reinterpret_cast<unsigned char*>(chunk.data()), chunk.size());
   }
 }
 
@@ -902,7 +906,8 @@ CachedDownloadResult Downloader::downloadCached(
       if (ss.size() >= 3 && ss[0] == url) {
         time_t lastChecked;
         if (absl::SimpleAtoi(ss[2], &lastChecked) &&
-            (uint64_t)lastChecked + request.ttl >= (uint64_t)time(nullptr)) {
+            static_cast<uint64_t>(lastChecked) + request.ttl >=
+                static_cast<uint64_t>(time(nullptr))) {
           skip = true;
           result.effectiveUri = request.uri;
           result.etag = ss[1];
diff --git a/third_party/nix/src/libstore/gc.cc b/third_party/nix/src/libstore/gc.cc
index a491d7e32c48..596046e4f324 100644
--- a/third_party/nix/src/libstore/gc.cc
+++ b/third_party/nix/src/libstore/gc.cc
@@ -241,7 +241,8 @@ void LocalStore::findTempRoots(FDs& fds, Roots& tempRoots, bool censor) {
     std::string::size_type pos = 0;
     std::string::size_type end;
 
-    while ((end = contents.find((char)0, pos)) != std::string::npos) {
+    while ((end = contents.find(static_cast<char>(0), pos)) !=
+           std::string::npos) {
       Path root(contents, pos, end - pos);
       DLOG(INFO) << "got temporary root " << root;
       assertStorePath(root);
@@ -916,7 +917,7 @@ void LocalStore::autoGC(bool sync) {
       throw SysError("getting filesystem info about '%s'", realStoreDir);
     }
 
-    return (uint64_t)st.f_bavail * st.f_bsize;
+    return static_cast<uint64_t>(st.f_bavail) * st.f_bsize;
   };
 
   std::shared_future<void> future;
diff --git a/third_party/nix/src/libstore/legacy-ssh-store.cc b/third_party/nix/src/libstore/legacy-ssh-store.cc
index 02231aabcdba..343801870a96 100644
--- a/third_party/nix/src/libstore/legacy-ssh-store.cc
+++ b/third_party/nix/src/libstore/legacy-ssh-store.cc
@@ -214,7 +214,7 @@ struct LegacySSHStore : public Store {
     conn->to.flush();
 
     BuildResult status;
-    status.status = (BuildResult::Status)readInt(conn->from);
+    status.status = static_cast<BuildResult::Status>(readInt(conn->from));
     conn->from >> status.errorMsg;
 
     if (GET_PROTOCOL_MINOR(conn->remoteVersion) >= 3) {
diff --git a/third_party/nix/src/libstore/local-fs-store.cc b/third_party/nix/src/libstore/local-fs-store.cc
index 2dd09093d5f8..2ebf99a9b5a2 100644
--- a/third_party/nix/src/libstore/local-fs-store.cc
+++ b/third_party/nix/src/libstore/local-fs-store.cc
@@ -41,7 +41,7 @@ struct LocalStoreAccessor : public FSAccessor {
     return {S_ISREG(st.st_mode)
                 ? Type::tRegular
                 : S_ISLNK(st.st_mode) ? Type::tSymlink : Type::tDirectory,
-            S_ISREG(st.st_mode) ? (uint64_t)st.st_size : 0,
+            S_ISREG(st.st_mode) ? static_cast<uint64_t>(st.st_size) : 0,
             S_ISREG(st.st_mode) && ((st.st_mode & S_IXUSR) != 0u)};
   }
 
diff --git a/third_party/nix/src/libstore/local-store.cc b/third_party/nix/src/libstore/local-store.cc
index 9b19e078b86f..5e3271a5f3cc 100644
--- a/third_party/nix/src/libstore/local-store.cc
+++ b/third_party/nix/src/libstore/local-store.cc
@@ -350,7 +350,8 @@ void LocalStore::openDB(State& state, bool create) {
     if (sqlite3_step(stmt) != SQLITE_ROW) {
       throwSQLiteError(db, "querying journal mode");
     }
-    prevMode = std::string((const char*)sqlite3_column_text(stmt, 0));
+    prevMode = std::string(
+        reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)));
   }
   if (prevMode != mode &&
       sqlite3_exec(db, ("pragma main.journal_mode = " + mode + ";").c_str(),
@@ -489,7 +490,7 @@ static void canonicalisePathMetaData_(const Path& path, uid_t fromUid,
      However, ignore files that we chown'ed ourselves previously to
      ensure that we don't fail on hard links within the same build
      (i.e. "touch $out/foo; ln $out/foo $out/bar"). */
-  if (fromUid != (uid_t)-1 && st.st_uid != fromUid) {
+  if (fromUid != static_cast<uid_t>(-1) && st.st_uid != fromUid) {
     if (S_ISDIR(st.st_mode)) {
       throw BuildError(format("invalid file '%1%': is a directory") % path);
     }
@@ -690,7 +691,8 @@ void LocalStore::queryPathInfoUncached(
 
       info->registrationTime = useQueryPathInfo.getInt(2);
 
-      auto s = (const char*)sqlite3_column_text(state->stmtQueryPathInfo, 3);
+      auto s = reinterpret_cast<const char*>(
+          sqlite3_column_text(state->stmtQueryPathInfo, 3));
       if (s != nullptr) {
         info->deriver = s;
       }
@@ -700,12 +702,14 @@ void LocalStore::queryPathInfoUncached(
 
       info->ultimate = useQueryPathInfo.getInt(5) == 1;
 
-      s = (const char*)sqlite3_column_text(state->stmtQueryPathInfo, 6);
+      s = reinterpret_cast<const char*>(
+          sqlite3_column_text(state->stmtQueryPathInfo, 6));
       if (s != nullptr) {
         info->sigs = absl::StrSplit(s, absl::ByChar(' '), absl::SkipEmpty());
       }
 
-      s = (const char*)sqlite3_column_text(state->stmtQueryPathInfo, 7);
+      s = reinterpret_cast<const char*>(
+          sqlite3_column_text(state->stmtQueryPathInfo, 7));
       if (s != nullptr) {
         info->ca = s;
       }
@@ -860,8 +864,8 @@ Path LocalStore::queryPathFromHashPart(const std::string& hashPart) {
       return "";
     }
 
-    const char* s =
-        (const char*)sqlite3_column_text(state->stmtQueryPathFromHashPart, 0);
+    const char* s = reinterpret_cast<const char*>(
+        sqlite3_column_text(state->stmtQueryPathFromHashPart, 0));
     return (s != nullptr) &&
                    prefix.compare(0, prefix.size(), s, prefix.size()) == 0
                ? s
diff --git a/third_party/nix/src/libstore/nar-accessor.cc b/third_party/nix/src/libstore/nar-accessor.cc
index 49fa1bd1d61c..cfd3d50b32bc 100644
--- a/third_party/nix/src/libstore/nar-accessor.cc
+++ b/third_party/nix/src/libstore/nar-accessor.cc
@@ -76,7 +76,7 @@ struct NarAccessor : public FSAccessor {
     void preallocateContents(unsigned long long size) override {
       currentStart = std::string(s, pos, 16);
       assert(size <= std::numeric_limits<size_t>::max());
-      parents.top()->size = (size_t)size;
+      parents.top()->size = static_cast<size_t>(size);
       parents.top()->start = pos;
     }
 
diff --git a/third_party/nix/src/libstore/nar-info-disk-cache.cc b/third_party/nix/src/libstore/nar-info-disk-cache.cc
index b284fc698dcc..90ea20a8936b 100644
--- a/third_party/nix/src/libstore/nar-info-disk-cache.cc
+++ b/third_party/nix/src/libstore/nar-info-disk-cache.cc
@@ -164,8 +164,9 @@ class NarInfoDiskCacheImpl final : public NarInfoDiskCache {
               static_cast<int64_t>(wantMassQuery))(priority)
           .exec();
       assert(sqlite3_changes(state->db) == 1);
-      state->caches[uri] = Cache{(int)sqlite3_last_insert_rowid(state->db),
-                                 storeDir, wantMassQuery, priority};
+      state->caches[uri] =
+          Cache{static_cast<int>(sqlite3_last_insert_rowid(state->db)),
+                storeDir, wantMassQuery, priority};
     });
   }
 
@@ -181,8 +182,9 @@ class NarInfoDiskCacheImpl final : public NarInfoDiskCache {
           return false;
         }
         state->caches.emplace(
-            uri, Cache{(int)queryCache.getInt(0), queryCache.getStr(1),
-                       queryCache.getInt(2) != 0, (int)queryCache.getInt(3)});
+            uri, Cache{static_cast<int>(queryCache.getInt(0)),
+                       queryCache.getStr(1), queryCache.getInt(2) != 0,
+                       static_cast<int>(queryCache.getInt(3))});
       }
 
       auto& cache(getCache(*state, uri));
diff --git a/third_party/nix/src/libstore/remote-fs-accessor.cc b/third_party/nix/src/libstore/remote-fs-accessor.cc
index 2917f01f7939..d5b20288479c 100644
--- a/third_party/nix/src/libstore/remote-fs-accessor.cc
+++ b/third_party/nix/src/libstore/remote-fs-accessor.cc
@@ -75,12 +75,14 @@ std::pair<ref<FSAccessor>, Path> RemoteFSAccessor::fetch(const Path& path_) {
               throw SysError("opening NAR cache file '%s'", cacheFile);
             }
 
-            if (lseek(fd.get(), offset, SEEK_SET) != (off_t)offset) {
+            if (lseek(fd.get(), offset, SEEK_SET) !=
+                static_cast<off_t>(offset)) {
               throw SysError("seeking in '%s'", cacheFile);
             }
 
             std::string buf(length, 0);
-            readFull(fd.get(), (unsigned char*)buf.data(), length);
+            readFull(fd.get(), reinterpret_cast<unsigned char*>(buf.data()),
+                     length);
 
             return buf;
           });
diff --git a/third_party/nix/src/libstore/remote-store.cc b/third_party/nix/src/libstore/remote-store.cc
index 7c45c5ff515d..784a95d2e9f2 100644
--- a/third_party/nix/src/libstore/remote-store.cc
+++ b/third_party/nix/src/libstore/remote-store.cc
@@ -546,7 +546,7 @@ BuildResult RemoteStore::buildDerivation(const Path& drvPath,
   BuildResult res;
   unsigned int status;
   conn->from >> status >> res.errorMsg;
-  res.status = (BuildResult::Status)status;
+  res.status = static_cast<BuildResult::Status>(status);
   return res;
 }
 
diff --git a/third_party/nix/src/libstore/sqlite.cc b/third_party/nix/src/libstore/sqlite.cc
index b6ecfce924a1..0fb32326f5c5 100644
--- a/third_party/nix/src/libstore/sqlite.cc
+++ b/third_party/nix/src/libstore/sqlite.cc
@@ -133,7 +133,7 @@ bool SQLiteStmt::Use::next() {
 }
 
 std::string SQLiteStmt::Use::getStr(int col) {
-  auto s = (const char*)sqlite3_column_text(stmt, col);
+  auto s = reinterpret_cast<const char*>(sqlite3_column_text(stmt, col));
   assert(s);
   return s;
 }
diff --git a/third_party/nix/src/libstore/ssh.cc b/third_party/nix/src/libstore/ssh.cc
index 8f27f5eb2286..52fbe6425458 100644
--- a/third_party/nix/src/libstore/ssh.cc
+++ b/third_party/nix/src/libstore/ssh.cc
@@ -111,7 +111,7 @@ Path SSHMaster::startMaster() {
   state->tmpDir =
       std::make_unique<AutoDelete>(createTempDir("", "nix", true, true, 0700));
 
-  state->socketPath = (Path)*state->tmpDir + "/ssh.sock";
+  state->socketPath = Path(*state->tmpDir) + "/ssh.sock";
 
   Pipe out;
   out.create();
diff --git a/third_party/nix/src/libstore/store-api.cc b/third_party/nix/src/libstore/store-api.cc
index 4f4083f64f67..dba9c8f95ec6 100644
--- a/third_party/nix/src/libstore/store-api.cc
+++ b/third_party/nix/src/libstore/store-api.cc
@@ -304,8 +304,8 @@ Path Store::makeFixedOutputPath(bool recursive, const Hash& hash,
                    "output:out",
                    hashString(
                        htSHA256,
-                       "fixed:out:" + (recursive ? (std::string) "r:" : "") +
-                           hash.to_string(Base16) + ":"),
+                       absl::StrCat("fixed:out:", (recursive ? "r:" : ""),
+                                    hash.to_string(Base16), ":")),
                    name);
 }
 
@@ -926,7 +926,7 @@ Strings ValidPathInfo::shortRefs() const {
 }
 
 std::string makeFixedOutputCA(bool recursive, const Hash& hash) {
-  return "fixed:" + (recursive ? (std::string) "r:" : "") + hash.to_string();
+  return "fixed:" + (recursive ? std::string("r:") : "") + hash.to_string();
 }
 
 void Store::addToStore(const ValidPathInfo& info, Source& narSource,
diff --git a/third_party/nix/src/libutil/archive.cc b/third_party/nix/src/libutil/archive.cc
index 40898093212a..4489b7d2a8c5 100644
--- a/third_party/nix/src/libutil/archive.cc
+++ b/third_party/nix/src/libutil/archive.cc
@@ -80,7 +80,7 @@ static void dump(const Path& path, Sink& sink, PathFilter& filter) {
       sink << "executable"
            << "";
     }
-    dumpContents(path, (size_t)st.st_size, sink);
+    dumpContents(path, static_cast<size_t>(st.st_size), sink);
   }
 
   else if (S_ISDIR(st.st_mode)) {
@@ -170,7 +170,7 @@ static void parseContents(ParseSink& sink, Source& source, const Path& path) {
   while (left != 0u) {
     checkInterrupt();
     auto n = buf.size();
-    if ((unsigned long long)n > left) {
+    if (static_cast<unsigned long long>(n) > left) {
       n = left;
     }
     source(buf.data(), n);
@@ -267,7 +267,7 @@ static void parse(ParseSink& sink, Source& source, const Path& path) {
           name = readString(source);
           if (name.empty() || name == "." || name == ".." ||
               name.find('/') != std::string::npos ||
-              name.find((char)0) != std::string::npos) {
+              name.find(static_cast<char>(0)) != std::string::npos) {
             throw Error(format("NAR contains invalid file name '%1%'") % name);
           }
           if (name <= prevName) {
diff --git a/third_party/nix/src/libutil/args.cc b/third_party/nix/src/libutil/args.cc
index c56383ef88cc..2be8a1b0ce2a 100644
--- a/third_party/nix/src/libutil/args.cc
+++ b/third_party/nix/src/libutil/args.cc
@@ -27,12 +27,12 @@ void Args::parseCmdline(const Strings& _cmdline) {
        `-j3` -> `-j 3`). */
     if (!dashDash && arg.length() > 2 && arg[0] == '-' && arg[1] != '-' &&
         (isalpha(arg[1]) != 0)) {
-      *pos = (std::string) "-" + arg[1];
+      *pos = std::string("-") + arg[1];
       auto next = pos;
       ++next;
       for (unsigned int j = 2; j < arg.length(); j++) {
         if (isalpha(arg[j]) != 0) {
-          cmdline.insert(next, (std::string) "-" + arg[j]);
+          cmdline.insert(next, std::string("-") + arg[j]);
         } else {
           cmdline.insert(next, std::string(arg, j));
           break;
diff --git a/third_party/nix/src/libutil/compression.cc b/third_party/nix/src/libutil/compression.cc
index 779d326eb204..d0895ca5fda4 100644
--- a/third_party/nix/src/libutil/compression.cc
+++ b/third_party/nix/src/libutil/compression.cc
@@ -99,7 +99,7 @@ struct BzipDecompressionSink : ChunkedCompressionSink {
       throw CompressionError("unable to initialise bzip2 decoder");
     }
 
-    strm.next_out = (char*)outbuf;
+    strm.next_out = reinterpret_cast<char*>(outbuf);
     strm.avail_out = sizeof(outbuf);
   }
 
@@ -128,7 +128,7 @@ struct BzipDecompressionSink : ChunkedCompressionSink {
 
       if (strm.avail_out < sizeof(outbuf) || strm.avail_in == 0) {
         nextSink(outbuf, sizeof(outbuf) - strm.avail_out);
-        strm.next_out = (char*)outbuf;
+        strm.next_out = reinterpret_cast<char*>(outbuf);
         strm.avail_out = sizeof(outbuf);
       }
     }
@@ -287,7 +287,7 @@ struct BzipCompressionSink : ChunkedCompressionSink {
       throw CompressionError("unable to initialise bzip2 encoder");
     }
 
-    strm.next_out = (char*)outbuf;
+    strm.next_out = reinterpret_cast<char*>(outbuf);
     strm.avail_out = sizeof(outbuf);
   }
 
@@ -316,7 +316,7 @@ struct BzipCompressionSink : ChunkedCompressionSink {
 
       if (strm.avail_out < sizeof(outbuf) || strm.avail_in == 0) {
         nextSink(outbuf, sizeof(outbuf) - strm.avail_out);
-        strm.next_out = (char*)outbuf;
+        strm.next_out = reinterpret_cast<char*>(outbuf);
         strm.avail_out = sizeof(outbuf);
       }
     }
diff --git a/third_party/nix/src/libutil/hash.cc b/third_party/nix/src/libutil/hash.cc
index f7ee44728f60..426096e73af8 100644
--- a/third_party/nix/src/libutil/hash.cc
+++ b/third_party/nix/src/libutil/hash.cc
@@ -166,7 +166,7 @@ static std::string printHash32(const Hash& hash) {
   std::string s;
   s.reserve(len);
 
-  for (int n = (int)len - 1; n >= 0; n--) {
+  for (int n = static_cast<int>(len) - 1; n >= 0; n--) {
     unsigned int b = n * 5;
     unsigned int i = b / 8;
     unsigned int j = b % 8;
@@ -199,7 +199,8 @@ std::string Hash::to_string(Base base, bool includeType) const {
     case Base64:
     case SRI:
       std::string b64;
-      absl::Base64Escape(std::string((const char*)hash, hashSize), &b64);
+      absl::Base64Escape(
+          std::string(reinterpret_cast<const char*>(hash), hashSize), &b64);
       s += b64;
       break;
   }
@@ -366,7 +367,7 @@ Hash hashString(HashType ht, const std::string& s) {
   hash::Ctx ctx{};
   Hash hash(ht);
   start(ht, ctx);
-  update(ht, ctx, (const unsigned char*)s.data(), s.length());
+  update(ht, ctx, reinterpret_cast<const unsigned char*>(s.data()), s.length());
   finish(ht, ctx, hash.hash);
   return hash;
 }
diff --git a/third_party/nix/src/libutil/json.cc b/third_party/nix/src/libutil/json.cc
index da636e7be9c3..59ff74f5796f 100644
--- a/third_party/nix/src/libutil/json.cc
+++ b/third_party/nix/src/libutil/json.cc
@@ -18,7 +18,7 @@ void toJSON(std::ostream& str, const char* start, const char* end) {
       str << "\\t";
     } else if (*i >= 0 && *i < 32) {
       str << "\\u" << std::setfill('0') << std::setw(4) << std::hex
-          << (uint16_t)*i << std::dec;
+          << static_cast<uint16_t>(*i) << std::dec;
     } else {
       str << *i;
     }
diff --git a/third_party/nix/src/libutil/serialise.cc b/third_party/nix/src/libutil/serialise.cc
index d02a0205af0d..288255089bb6 100644
--- a/third_party/nix/src/libutil/serialise.cc
+++ b/third_party/nix/src/libutil/serialise.cc
@@ -96,7 +96,7 @@ std::string Source::drain() {
     size_t n;
     try {
       n = read(buf.data(), buf.size());
-      s.append((char*)buf.data(), n);
+      s.append(reinterpret_cast<char*>(buf.data()), n);
     } catch (EndOfFile&) {
       break;
     }
@@ -129,7 +129,7 @@ size_t FdSource::readUnbuffered(unsigned char* data, size_t len) {
   ssize_t n;
   do {
     checkInterrupt();
-    n = ::read(fd, (char*)data, len);
+    n = ::read(fd, reinterpret_cast<char*>(data), len);
   } while (n == -1 && errno == EINTR);
   if (n == -1) {
     _good = false;
@@ -149,7 +149,7 @@ size_t StringSource::read(unsigned char* data, size_t len) {
   if (pos == s.size()) {
     throw EndOfFile("end of string reached");
   }
-  size_t n = s.copy((char*)data, len, pos);
+  size_t n = s.copy(reinterpret_cast<char*>(data), len, pos);
   pos += n;
   return n;
 }
@@ -179,7 +179,7 @@ std::unique_ptr<Source> sinkToSource(const std::function<void(Sink&)>& fun,
         coro = coro_t::pull_type([&](coro_t::push_type& yield) {
           LambdaSink sink([&](const unsigned char* data, size_t len) {
             if (len != 0u) {
-              yield(std::string((const char*)data, len));
+              yield(std::string(reinterpret_cast<const char*>(data), len));
             }
           });
           fun(sink);
@@ -200,7 +200,7 @@ std::unique_ptr<Source> sinkToSource(const std::function<void(Sink&)>& fun,
       }
 
       auto n = std::min(cur.size() - pos, len);
-      memcpy(data, (unsigned char*)cur.data() + pos, n);
+      memcpy(data, reinterpret_cast<unsigned char*>(cur.data()) + pos, n);
       pos += n;
 
       return n;
@@ -225,7 +225,7 @@ void writeString(const unsigned char* buf, size_t len, Sink& sink) {
 }
 
 Sink& operator<<(Sink& sink, const std::string& s) {
-  writeString((const unsigned char*)s.data(), s.size(), sink);
+  writeString(reinterpret_cast<const unsigned char*>(s.data()), s.size(), sink);
   return sink;
 }
 
@@ -276,7 +276,7 @@ std::string readString(Source& source, size_t max) {
     throw SerialisationError("string is too long");
   }
   std::string res(len, 0);
-  source((unsigned char*)res.data(), len);
+  source(reinterpret_cast<unsigned char*>(res.data()), len);
   readPadding(len, source);
   return res;
 }
@@ -305,7 +305,7 @@ void StringSink::operator()(const unsigned char* data, size_t len) {
     warnLargeDump();
     warned = true;
   }
-  s->append((const char*)data, len);
+  s->append(reinterpret_cast<const char*>(data), len);
 }
 
 }  // namespace nix
diff --git a/third_party/nix/src/libutil/util.cc b/third_party/nix/src/libutil/util.cc
index 3e88fd29b9f0..c93570d7b0a4 100644
--- a/third_party/nix/src/libutil/util.cc
+++ b/third_party/nix/src/libutil/util.cc
@@ -308,7 +308,7 @@ std::string readFile(int fd) {
   std::vector<unsigned char> buf(st.st_size);
   readFull(fd, buf.data(), st.st_size);
 
-  return std::string((char*)buf.data(), st.st_size);
+  return std::string(reinterpret_cast<char*>(buf.data()), st.st_size);
 }
 
 std::string readFile(absl::string_view path, bool drain) {
@@ -349,7 +349,7 @@ void writeFile(const Path& path, Source& source, mode_t mode) {
   while (true) {
     try {
       auto n = source.read(buf.data(), buf.size());
-      writeFull(fd.get(), (unsigned char*)buf.data(), n);
+      writeFull(fd.get(), static_cast<unsigned char*>(buf.data()), n);
     } catch (EndOfFile&) {
       break;
     }
@@ -619,7 +619,7 @@ void replaceSymlink(const Path& target, const Path& link) {
 void readFull(int fd, unsigned char* buf, size_t count) {
   while (count != 0u) {
     checkInterrupt();
-    ssize_t res = read(fd, (char*)buf, count);
+    ssize_t res = read(fd, reinterpret_cast<char*>(buf), count);
     if (res == -1) {
       if (errno == EINTR) {
         continue;
@@ -652,7 +652,8 @@ void writeFull(int fd, const unsigned char* buf, size_t count,
 }
 
 void writeFull(int fd, const std::string& s, bool allowInterrupts) {
-  writeFull(fd, (const unsigned char*)s.data(), s.size(), allowInterrupts);
+  writeFull(fd, reinterpret_cast<const unsigned char*>(s.data()), s.size(),
+            allowInterrupts);
 }
 
 std::string drainFD(int fd, bool block) {
@@ -954,7 +955,7 @@ pid_t startProcess(std::function<void()> fun, const ProcessOptions& options) {
 std::vector<char*> stringsToCharPtrs(const Strings& ss) {
   std::vector<char*> res;
   for (auto& s : ss) {
-    res.push_back((char*)s.c_str());
+    res.push_back(const_cast<char*>(s.c_str()));
   }
   res.push_back(nullptr);
   return res;
@@ -1270,7 +1271,7 @@ std::string filterANSIEscapes(const std::string& s, bool filterAll,
   size_t w = 0;
   auto i = s.begin();
 
-  while (w < (size_t)width && i != s.end()) {
+  while (w < static_cast<size_t>(width) && i != s.end()) {
     if (*i == '\e') {
       std::string e;
       e += *i++;
@@ -1305,7 +1306,7 @@ std::string filterANSIEscapes(const std::string& s, bool filterAll,
       i++;
       t += ' ';
       w++;
-      while (w < (size_t)width && ((w % 8) != 0u)) {
+      while (w < static_cast<size_t>(width) && ((w % 8) != 0u)) {
         t += ' ';
         w++;
       }
diff --git a/third_party/nix/src/nix-build/nix-build.cc b/third_party/nix/src/nix-build/nix-build.cc
index dde03c52cbe0..34d551c2d85c 100644
--- a/third_party/nix/src/nix-build/nix-build.cc
+++ b/third_party/nix/src/nix-build/nix-build.cc
@@ -156,7 +156,7 @@ static void _main(int argc, char** argv) {
           ;  // obsolete
 
         } else if (*arg == "--no-out-link" || *arg == "--no-link") {
-          outLink = (Path)tmpDir + "/result";
+          outLink = Path(tmpDir) + "/result";
 
         } else if (*arg == "--attr" || *arg == "-A") {
           attrPaths.push_back(getArg(*arg, arg, end));
@@ -455,7 +455,7 @@ static void _main(int argc, char** argv) {
       if (passAsFile.count(var.first) != 0u) {
         keepTmp = true;
         std::string fn = ".attr-" + std::to_string(fileNr++);
-        Path p = (Path)tmpDir + "/" + fn;
+        Path p = Path(tmpDir) + "/" + fn;
         writeFile(p, var.second);
         env[var.first + "Path"] = p;
       } else {
@@ -469,7 +469,7 @@ static void _main(int argc, char** argv) {
        convenience, source $stdenv/setup to setup additional
        environment variables and shell functions.  Also don't
        lose the current $PATH directories. */
-    auto rcfile = (Path)tmpDir + "/rc";
+    auto rcfile = Path(tmpDir) + "/rc";
     writeFile(
         rcfile,
         fmt((keepTmp ? "" : "rm -rf '%1%'; "s) +
@@ -488,7 +488,7 @@ static void _main(int argc, char** argv) {
                 "shopt -u nullglob; "
                 "unset TZ; %6%"
                 "%7%",
-            (Path)tmpDir, (pure ? "" : "p=$PATH; "),
+            Path(tmpDir), (pure ? "" : "p=$PATH; "),
             (pure ? "" : "PATH=$PATH:$p; unset p; "), dirOf(shell), shell,
             (getenv("TZ") != nullptr
                  ? (std::string("export TZ='") + getenv("TZ") + "'; ")
diff --git a/third_party/nix/src/nix-channel/nix-channel.cc b/third_party/nix/src/nix-channel/nix-channel.cc
index 8afdc16ac0d0..5cc16d1b4b9a 100644
--- a/third_party/nix/src/nix-channel/nix-channel.cc
+++ b/third_party/nix/src/nix-channel/nix-channel.cc
@@ -113,7 +113,7 @@ static void update(const StringSet& channelNames) {
     std::smatch match;
     auto urlBase = baseNameOf(url);
     if (std::regex_search(urlBase, match, std::regex("(-\\d.*)$"))) {
-      cname = cname + (std::string)match[1];
+      cname = cname + std::string(match[1]);
     }
 
     std::string extraAttrs;
diff --git a/third_party/nix/src/nix-daemon/nix-daemon-proto.cc b/third_party/nix/src/nix-daemon/nix-daemon-proto.cc
index 58dbec04f30a..d5c65e197fb0 100644
--- a/third_party/nix/src/nix-daemon/nix-daemon-proto.cc
+++ b/third_party/nix/src/nix-daemon/nix-daemon-proto.cc
@@ -78,7 +78,7 @@ struct RetrieveRegularNARSink : ParseSink {
   void createDirectory(const Path& path) override { regular = false; }
 
   void receiveContents(unsigned char* data, unsigned int len) override {
-    s.append((const char*)data, len);
+    s.append(reinterpret_cast<const char*>(data), len);
   }
 
   void createSymlink(const Path& path, const std::string& target) override {
diff --git a/third_party/nix/src/nix-env/nix-env.cc b/third_party/nix/src/nix-env/nix-env.cc
index 585cfbe3f722..81eab2dedb20 100644
--- a/third_party/nix/src/nix-env/nix-env.cc
+++ b/third_party/nix/src/nix-env/nix-env.cc
@@ -1050,8 +1050,9 @@ static void opQuery(Globals& globals, Strings opFlags, Strings opArgs) {
           attrs["valid"] = isValid ? "1" : "0";
           attrs["substitutable"] = hasSubs ? "1" : "0";
         } else {
-          columns.push_back((std::string)(isInstalled ? "I" : "-") +
-                            (isValid ? "P" : "-") + (hasSubs ? "S" : "-"));
+          columns.push_back(absl::StrCat((isInstalled ? "I" : "-"),
+                                         (isValid ? "P" : "-"),
+                                         (hasSubs ? "S" : "-")));
         }
       }
 
@@ -1102,7 +1103,7 @@ static void opQuery(Globals& globals, Strings opFlags, Strings opArgs) {
             attrs["maxComparedVersion"] = version;
           }
         } else {
-          std::string column = (std::string) "" + ch + " " + version;
+          std::string column = std::to_string(ch) + " " + version;
           if (diff == cvGreater && tty) {
             column = ANSI_RED + column + ANSI_NORMAL;
           }
diff --git a/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc b/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc
index 839227c1bb2e..5454c6cd108e 100644
--- a/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc
+++ b/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc
@@ -181,7 +181,7 @@ static int _main(int argc, char** argv) {
       auto actualUri = resolveMirrorUri(*state, uri);
 
       AutoDelete tmpDir(createTempDir(), true);
-      Path tmpFile = (Path)tmpDir + "/tmp";
+      Path tmpFile = Path(tmpDir) + "/tmp";
 
       /* Download the file. */
       {
@@ -201,7 +201,7 @@ static int _main(int argc, char** argv) {
       /* Optionally unpack the file. */
       if (unpack) {
         LOG(INFO) << "unpacking...";
-        Path unpacked = (Path)tmpDir + "/unpacked";
+        Path unpacked = Path(tmpDir) + "/unpacked";
         createDirs(unpacked);
         if (absl::EndsWith(baseNameOf(uri), ".zip")) {
           runProgram("unzip", true, {"-qq", tmpFile, "-d", unpacked});
diff --git a/third_party/nix/src/nix-store/nix-store.cc b/third_party/nix/src/nix-store/nix-store.cc
index df17e5644113..152d716641b6 100644
--- a/third_party/nix/src/nix-store/nix-store.cc
+++ b/third_party/nix/src/nix-store/nix-store.cc
@@ -964,7 +964,7 @@ static void opServe(Strings opFlags, Strings opArgs) {
   while (true) {
     ServeCommand cmd;
     try {
-      cmd = (ServeCommand)readInt(in);
+      cmd = static_cast<ServeCommand>(readInt(in));
     } catch (EndOfFile& e) {
       break;
     }
@@ -1174,13 +1174,15 @@ static void opGenerateBinaryCacheKey(Strings opFlags, Strings opArgs) {
     throw Error("key generation failed");
   }
 
-  writeFile(publicKeyFile, keyName + ":" +
-                               absl::Base64Escape(std::string(
-                                   (char*)pk, crypto_sign_PUBLICKEYBYTES)));
+  writeFile(publicKeyFile,
+            keyName + ":" +
+                absl::Base64Escape(std::string(reinterpret_cast<char*>(pk),
+                                               crypto_sign_PUBLICKEYBYTES)));
   umask(0077);
-  writeFile(secretKeyFile, keyName + ":" +
-                               absl::Base64Escape(std::string(
-                                   (char*)sk, crypto_sign_SECRETKEYBYTES)));
+  writeFile(secretKeyFile,
+            keyName + ":" +
+                absl::Base64Escape(std::string(reinterpret_cast<char*>(sk),
+                                               crypto_sign_SECRETKEYBYTES)));
 #else
   throw Error(
       "Nix was not compiled with libsodium, required for signed binary cache "
diff --git a/third_party/nix/src/nix/main.cc b/third_party/nix/src/nix/main.cc
index 9ae06bc8031d..08390fd24b9f 100644
--- a/third_party/nix/src/nix/main.cc
+++ b/third_party/nix/src/nix/main.cc
@@ -38,7 +38,8 @@ static bool haveInternet() {
       continue;
     }
     if (i->ifa_addr->sa_family == AF_INET) {
-      if (ntohl(((sockaddr_in*)i->ifa_addr)->sin_addr.s_addr) !=
+      if (ntohl(
+              (reinterpret_cast<sockaddr_in*>(i->ifa_addr))->sin_addr.s_addr) !=
           INADDR_LOOPBACK) {
         return true;
       }
diff --git a/third_party/nix/src/nix/path-info.cc b/third_party/nix/src/nix/path-info.cc
index dca08b06adbb..300a588a2ef9 100644
--- a/third_party/nix/src/nix/path-info.cc
+++ b/third_party/nix/src/nix/path-info.cc
@@ -96,7 +96,9 @@ struct CmdPathInfo final : StorePathsCommand, MixJSON {
 
         if (showSize || showClosureSize || showSigs) {
           std::cout << std::string(
-              std::max(0, (int)pathLen - (int)storePath.size()), ' ');
+              std::max(0, static_cast<int>(pathLen) -
+                              static_cast<int>(storePath.size())),
+              ' ');
         }
 
         if (showSize) {
diff --git a/third_party/nix/src/nix/repl.cc b/third_party/nix/src/nix/repl.cc
index 7644b7b8c244..281b3c1e453f 100644
--- a/third_party/nix/src/nix/repl.cc
+++ b/third_party/nix/src/nix/repl.cc
@@ -194,7 +194,7 @@ static int listPossibleCallback(char* s, char*** avp) {
     return p;
   };
 
-  vp = check((char**)malloc(possible.size() * sizeof(char*)));
+  vp = check(static_cast<char**>(malloc(possible.size() * sizeof(char*))));
 
   for (auto& p : possible) {
     vp[ac++] = check(strdup(p.c_str()));
@@ -626,7 +626,7 @@ void NixRepl::addVarToScope(const Symbol& name, Value& v) {
   }
   staticEnv.vars[name] = displ;
   env->values[displ++] = &v;
-  varNames.insert((std::string)name);
+  varNames.insert(std::string(name));
 }
 
 Expr* NixRepl::parseString(const std::string& s) {
diff --git a/third_party/nix/src/nix/search.cc b/third_party/nix/src/nix/search.cc
index 2bfdeac6f7f5..06d5c207e56b 100644
--- a/third_party/nix/src/nix/search.cc
+++ b/third_party/nix/src/nix/search.cc
@@ -196,8 +196,8 @@ struct CmdSearch final : SourceExprCommand, MixJSON {
                     : nullptr;
             doExpr(i.second.value,
                    attrPath.empty()
-                       ? (std::string)i.second.name
-                       : attrPath + "." + (std::string)i.second.name,
+                       ? std::string(i.second.name)
+                       : attrPath + "." + std::string(i.second.name),
                    toplevel2 || fromCache, cache2 ? cache2.get() : nullptr);
           }
         }
diff --git a/third_party/nix/src/nix/verify.cc b/third_party/nix/src/nix/verify.cc
index a9959d50de1d..6552e3d1a7e0 100644
--- a/third_party/nix/src/nix/verify.cc
+++ b/third_party/nix/src/nix/verify.cc
@@ -99,7 +99,8 @@ struct CmdVerify final : StorePathsCommand {
 
           } else {
             StringSet sigsSeen;
-            size_t actualSigsNeeded = std::max(sigsNeeded, (size_t)1);
+            size_t actualSigsNeeded =
+                std::max(sigsNeeded, static_cast<size_t>(1));
             size_t validSigs = 0;
 
             auto doSigs = [&](const StringSet& sigs) {