diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 05ce9aec0135..86415c860b42 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -204,5 +204,8 @@ ce21e97a1f20dee15da85c084f9d1148d84f853b
 # sqlc: format with nixfmt
 2bdec131b2bb2c8563f4556d741d34ccb77409e2
 
+# ant: format with nixfmt-rfc-style
+2538d58436b8d0b56d29780aeebf4bf720ddb9ea
+
 # treewide: migrate packages to pkgs/by-name, take 1
 571c71e6f73af34a229414f51585738894211408
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 73d0223ee71e..4c8a048c763b 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -194,7 +194,7 @@
         - pkgs/by-name/ma/maven/**/*
         - doc/languages-frameworks/maven.section.md
         # Ant
-        - pkgs/by-name/ap/apacheAnt/**/*
+        - pkgs/by-name/an/ant/**/*
         # javaPackages attrset
         - pkgs/development/java-modules/**/*
         - pkgs/top-level/java-packages.nix
diff --git a/pkgs/by-name/an/ant/package.nix b/pkgs/by-name/an/ant/package.nix
new file mode 100644
index 000000000000..bedaa9b13949
--- /dev/null
+++ b/pkgs/by-name/an/ant/package.nix
@@ -0,0 +1,125 @@
+{
+  fetchurl,
+  lib,
+  stdenv,
+  coreutils,
+  makeWrapper,
+  gitUpdater,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ant";
+  version = "1.10.15";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://apache/ant/binaries/apache-ant-${finalAttrs.version}-bin.tar.bz2";
+    hash = "sha256-h/SNGLoRwRVojDfvl1g+xv+J6mAz+J2BimckjaRxDEs=";
+  };
+
+  contrib = fetchurl {
+    url = "mirror://sourceforge/ant-contrib/ant-contrib-1.0b3-bin.tar.bz2";
+    sha256 = "1l8say86bz9gxp4yy777z7nm4j6m905pg342li1aphc14p5grvwn";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib/ant
+    mv * $out/lib/ant/
+
+    # Get rid of the manual (35 MiB).  Maybe we should put this in a
+    # separate output.  Keep the antRun script since it's vanilla sh
+    # and needed for the <exec/> task (but since we set ANT_HOME to
+    # a weird value, we have to move antRun to a weird location).
+    # Get rid of the other Ant scripts since we provide our own.
+    mv $out/lib/ant/bin/antRun $out/bin/
+    rm -rf $out/lib/ant/{manual,bin,WHATSNEW}
+    mkdir $out/lib/ant/bin
+    mv $out/bin/antRun $out/lib/ant/bin/
+
+    # Install ant-contrib.
+    unpackFile $contrib
+    cp -p ant-contrib/ant-contrib-*.jar $out/lib/ant/lib/
+
+    cat >> $out/bin/ant <<EOF
+    #! ${stdenv.shell} -e
+
+    ANT_HOME=$out/lib/ant
+
+    # Find the JDK by looking for javac.  As a fall-back, find the
+    # JRE by looking for java.  The latter allows just the JRE to be
+    # used with (say) ECJ as the compiler.  Finally, allow the GNU
+    # JVM.
+    if [ -z "\''${JAVA_HOME-}" ]; then
+        for i in javac java gij; do
+            if p="\$(type -p \$i)"; then
+                export JAVA_HOME="\$(${coreutils}/bin/dirname \$(${coreutils}/bin/dirname \$(${coreutils}/bin/readlink -f \$p)))"
+                break
+            fi
+        done
+        if [ -z "\''${JAVA_HOME-}" ]; then
+            echo "\$0: cannot find the JDK or JRE" >&2
+            exit 1
+        fi
+    fi
+
+    if [ -z \$NIX_JVM ]; then
+        if [ -e \$JAVA_HOME/bin/java ]; then
+            NIX_JVM=\$JAVA_HOME/bin/java
+        elif [ -e \$JAVA_HOME/bin/gij ]; then
+            NIX_JVM=\$JAVA_HOME/bin/gij
+        else
+            NIX_JVM=java
+        fi
+    fi
+
+    LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+
+    exec \$NIX_JVM \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
+        -Dant.home=\$ANT_HOME -Dant.library.dir="\$ANT_LIB" \
+        org.apache.tools.ant.launch.Launcher \$NIX_ANT_ARGS \$ANT_ARGS \
+        -cp "\$CLASSPATH" "\$@"
+    EOF
+
+    chmod +x $out/bin/ant
+  '';
+
+  passthru = {
+    updateScript = gitUpdater {
+      rev-prefix = "rel/";
+      url = "https://gitbox.apache.org/repos/asf/ant";
+    };
+  };
+
+  meta = {
+    homepage = "https://ant.apache.org/";
+    description = "Java-based build tool";
+    mainProgram = "ant";
+
+    longDescription = ''
+      Apache Ant is a Java-based build tool.  In theory, it is kind of like
+      Make, but without Make's wrinkles.
+
+      Why another build tool when there is already make, gnumake, nmake, jam,
+      and others? Because all those tools have limitations that Ant's
+      original author couldn't live with when developing software across
+      multiple platforms.  Make-like tools are inherently shell-based -- they
+      evaluate a set of dependencies, then execute commands not unlike what
+      you would issue in a shell.  This means that you can easily extend
+      these tools by using or writing any program for the OS that you are
+      working on.  However, this also means that you limit yourself to the
+      OS, or at least the OS type such as Unix, that you are working on.
+
+      Ant is different.  Instead of a model where it is extended with
+      shell-based commands, Ant is extended using Java classes.  Instead of
+      writing shell commands, the configuration files are XML-based, calling
+      out a target tree where various tasks get executed.  Each task is run
+      by an object that implements a particular Task interface.
+    '';
+
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.asl20;
+    maintainers = [ ] ++ lib.teams.java.members;
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/pkgs/by-name/ap/apacheAnt/package.nix b/pkgs/by-name/ap/apacheAnt/package.nix
deleted file mode 100644
index 785a518edd3b..000000000000
--- a/pkgs/by-name/ap/apacheAnt/package.nix
+++ /dev/null
@@ -1,119 +0,0 @@
-{ fetchurl, lib, stdenv, coreutils, makeWrapper, gitUpdater }:
-
-stdenv.mkDerivation rec {
-  pname = "ant";
-  version = "1.10.15";
-
-  nativeBuildInputs = [ makeWrapper ];
-
-  src = fetchurl {
-    url = "mirror://apache/ant/binaries/apache-ant-${version}-bin.tar.bz2";
-    hash = "sha256-h/SNGLoRwRVojDfvl1g+xv+J6mAz+J2BimckjaRxDEs=";
-  };
-
-  contrib = fetchurl {
-    url = "mirror://sourceforge/ant-contrib/ant-contrib-1.0b3-bin.tar.bz2";
-    sha256 = "1l8say86bz9gxp4yy777z7nm4j6m905pg342li1aphc14p5grvwn";
-  };
-
-  installPhase =
-    ''
-      mkdir -p $out/bin $out/lib/ant
-      mv * $out/lib/ant/
-
-      # Get rid of the manual (35 MiB).  Maybe we should put this in a
-      # separate output.  Keep the antRun script since it's vanilla sh
-      # and needed for the <exec/> task (but since we set ANT_HOME to
-      # a weird value, we have to move antRun to a weird location).
-      # Get rid of the other Ant scripts since we provide our own.
-      mv $out/lib/ant/bin/antRun $out/bin/
-      rm -rf $out/lib/ant/{manual,bin,WHATSNEW}
-      mkdir $out/lib/ant/bin
-      mv $out/bin/antRun $out/lib/ant/bin/
-
-      # Install ant-contrib.
-      unpackFile $contrib
-      cp -p ant-contrib/ant-contrib-*.jar $out/lib/ant/lib/
-
-      cat >> $out/bin/ant <<EOF
-      #! ${stdenv.shell} -e
-
-      ANT_HOME=$out/lib/ant
-
-      # Find the JDK by looking for javac.  As a fall-back, find the
-      # JRE by looking for java.  The latter allows just the JRE to be
-      # used with (say) ECJ as the compiler.  Finally, allow the GNU
-      # JVM.
-      if [ -z "\''${JAVA_HOME-}" ]; then
-          for i in javac java gij; do
-              if p="\$(type -p \$i)"; then
-                  export JAVA_HOME="\$(${coreutils}/bin/dirname \$(${coreutils}/bin/dirname \$(${coreutils}/bin/readlink -f \$p)))"
-                  break
-              fi
-          done
-          if [ -z "\''${JAVA_HOME-}" ]; then
-              echo "\$0: cannot find the JDK or JRE" >&2
-              exit 1
-          fi
-      fi
-
-      if [ -z \$NIX_JVM ]; then
-          if [ -e \$JAVA_HOME/bin/java ]; then
-              NIX_JVM=\$JAVA_HOME/bin/java
-          elif [ -e \$JAVA_HOME/bin/gij ]; then
-              NIX_JVM=\$JAVA_HOME/bin/gij
-          else
-              NIX_JVM=java
-          fi
-      fi
-
-      LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
-
-      exec \$NIX_JVM \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
-          -Dant.home=\$ANT_HOME -Dant.library.dir="\$ANT_LIB" \
-          org.apache.tools.ant.launch.Launcher \$NIX_ANT_ARGS \$ANT_ARGS \
-          -cp "\$CLASSPATH" "\$@"
-      EOF
-
-      chmod +x $out/bin/ant
-    ''; # */
-
-  passthru = {
-    updateScript = gitUpdater {
-      rev-prefix = "rel/";
-      url = "https://gitbox.apache.org/repos/asf/ant";
-    };
-  };
-
-  meta = {
-    homepage = "https://ant.apache.org/";
-    description = "Java-based build tool";
-    mainProgram = "ant";
-
-    longDescription = ''
-      Apache Ant is a Java-based build tool.  In theory, it is kind of like
-      Make, but without Make's wrinkles.
-
-      Why another build tool when there is already make, gnumake, nmake, jam,
-      and others? Because all those tools have limitations that Ant's
-      original author couldn't live with when developing software across
-      multiple platforms.  Make-like tools are inherently shell-based -- they
-      evaluate a set of dependencies, then execute commands not unlike what
-      you would issue in a shell.  This means that you can easily extend
-      these tools by using or writing any program for the OS that you are
-      working on.  However, this also means that you limit yourself to the
-      OS, or at least the OS type such as Unix, that you are working on.
-
-      Ant is different.  Instead of a model where it is extended with
-      shell-based commands, Ant is extended using Java classes.  Instead of
-      writing shell commands, the configuration files are XML-based, calling
-      out a target tree where various tasks get executed.  Each task is run
-      by an object that implements a particular Task interface.
-    '';
-
-    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
-    license = lib.licenses.asl20;
-    maintainers = [ ] ++ lib.teams.java.members;
-    platforms = lib.platforms.all;
-  };
-}
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index e4ff2d475eeb..6fdda136f76d 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -111,6 +111,7 @@ mapAliases {
   ao = libfive; # Added 2024-10-11
   apacheKafka_3_5 = throw "apacheKafka_2_8 through _3_5 have been removed from nixpkgs as outdated"; # Added 2024-06-13
   antimicroX = throw "'antimicroX' has been renamed to/replaced by 'antimicrox'"; # Converted to throw 2024-10-17
+  apacheAnt = ant; # Added 2024-11-28
   appthreat-depscan = dep-scan; # Added 2024-04-10
   arcanist = throw "arcanist was removed as phabricator is not supported and does not accept fixes"; # Added 2024-06-07
   aria = aria2; # Added 2024-03-26
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d3c648bc6d29..e90d1208feff 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -7808,8 +7808,6 @@ with pkgs;
 
   antlr = antlr4;
 
-  ant = apacheAnt;
-
   inherit (callPackages ../servers/apache-kafka { })
     apacheKafka_3_6
     apacheKafka_3_7