I would like to offer a tactic to make the process easier to handle. It works for me, at least. 
In order to keep things straight, and easy to identify when time comes for doing upgrades, I have a habit of keeping track of which system files I modified by having a set of 3 files for every file that is changed, as follows:
-rw-r--r-- 1 root root 3393 Feb 7 17:39 /etc/default/grub
-rw-r--r-- 1 root root 3344 Jul 14 2024 /etc/default/grub.DISTRO
-rw-r--r-- 1 root root 3393 Feb 7 17:39 /etc/default/grub.OasisMega1
The last file, nomenclature ${file}.${hostname), is my customized version of the file. ${file}.DISTRO is the version delivered by the OS, "out-of-box". The file in its original location is the active version of the file, visible to the OS.
So, I do a find
for all file *.OasisMega1, and can copy those directly onto the newly installed OS, after which I compare the old and the new for possible new entries which need to be "handled".
Performing
cd /etc/; find '*.Oasis*' -print | sort
gives me the following:
./apt/sources.list.Oasis
./crontab.allow.Oasis
./default/console-setup.OasisMega1
./default/grub.OasisMega1
./default/keyboard.OasisMega1
./default/sysstat.OasisMega1
./dhcp/dhclient.conf.Oasis
./fstab.OasisMega1
./grub.d.BK.OasisMega1
./grub.d.BK.OasisMega1/00_header.OasisMega1
./grub.d.BK.OasisMega1/00_header.OasisMega1.patch
./grub.d.BK.OasisMega1/00_header.OasisMega1.patch.PREVIOUS
./grub.d.BK.OasisMega1/10_linux.OasisMega1
./grub.d.BK.OasisMega1/10_linux.OasisMega1.patch
./grub.d.BK.OasisMega1/10_linux.OasisMega1.patch.PREVIOUS
./grub.d.BK.OasisMega1/30_os-prober.OasisMega1
./grub.d.BK.OasisMega1/30_os-prober.OasisMega1.patch
./grub.d.BK.OasisMega1/30_os-prober.OasisMega1.patch.PREVIOUS
./head.Oasis
./init.d/Oasis/cpufrequtils.Oasis
./init.d/Oasis/loadcpufreq.Oasis
./init.d/Oasis/spacenavd.Oasis
./initramfs-tools/conf.d/resume.OasisMega1
./issue.net.Oasis
./issue.Oasis
./lightdm/lightdm.conf.d/91-arctica-greeter-guest-session.conf.Oasis
./lightdm/lightdm.conf.Oasis
./lightdm/lightdm-gtk-greeter.conf.Oasis
./lightdm/slick-greeter.conf.Oasis
./magic.Oasis
./mke2fs.conf.OasisMega1
./network/interfaces.Oasis
./pam.d/login.Oasis
./rc.local.Oasis
./recoll.Oasis
./resolv.conf.Oasis
./security/access.conf.Oasis
./smartd.conf.OasisMega1
./spnavrc.Oasis
./ssh/ssh_config.d/ssh_client.conf.Oasis
./ssh/ssh_config.Oasis
./ssh/sshd_config.d/sshd_server.conf.Oasis
./sudoers.Oasis
./sysctl.conf.Oasis
./sysstat/sysstat.OasisMega1
./systemd/resolved.conf.Oasis
./systemd/system/lightdm.service.d/override.conf.lightdm.service.OasisMega1
./systemd/system/sysinit.target.d/override.conf.sysinit.target.OasisMega1
./tail.Oasis
./vnstat.conf.Oasis
[Edit:]
Also, if you have any PPAs, you would need to keep track of those, but that should already be covered in the
/etc/apt/sources.list
Also, if you have packages that you downloaded directly as a tarball to compile/install in some custom location (like /Local, or /local, or /www and have the path to the startup commands for those added to you ${SHELL}'s PATH definition, you likely want to preserve those as well.
[Edit:]
One other thing: if you use any snap packages that you are attached to, make sure they have been fully proven-in for 24.04, before you do the distro install.
You can list those using:
snap list