diff --git a/community/chromium/APKBUILD b/community/chromium/APKBUILD
index a375622234f542eac38a55f22f12e345b176130f..66d0823a3a551dcf85986050e993650be5b0ae57 100644
--- a/community/chromium/APKBUILD
+++ b/community/chromium/APKBUILD
@@ -3,14 +3,16 @@
 # Contributor: Elly Fong-Jones <elly@elly.town>
 # Maintainer: lauren n. liberda <lauren@selfisekai.rocks>
 pkgname=chromium
-pkgver=123.0.6312.122
+pkgver=124.0.6367.60
 pkgrel=0
+_copium_tag=124.4
 # https://source.chromium.org/chromium/chromium/src/+/main:third_party/test_fonts/test_fonts.tar.gz.sha1
 # (for the given version, when it changes)
 _testfonts=336e775eec536b2d785cc80eff6ac39051931286
 pkgdesc="Chromium web browser"
 url="https://www.chromium.org/Home"
-arch="aarch64 armv7 x86_64"
+# armv7: https://github.com/google/ruy/issues/352
+arch="aarch64 x86_64"
 license="BSD-3-Clause"
 # explicit depends for --headless
 # XXX: eudev-libs replaced by so:libudev.so.1 to allow installation with libudev-zero
@@ -46,6 +48,7 @@ makedepends="
 	ffmpeg-dev
 	findutils
 	flac-dev
+	flatbuffers-dev
 	flex
 	freetype-dev
 	gn
@@ -57,6 +60,7 @@ makedepends="
 	hunspell-dev
 	hwdata-dev
 	jpeg-dev
+	jsoncpp-dev
 	krb5-dev
 	lcms2-dev
 	libbsd-dev
@@ -94,10 +98,15 @@ makedepends="
 	py3-setuptools
 	python3
 	qt5-qtbase-dev
+	re2-dev
 	rust
 	samurai
+	snappy-dev
 	speex-dev
+	spirv-tools-dev
 	sqlite-dev
+	vulkan-headers
+	woff2-dev
 	xcb-proto
 	zlib-dev
 	zstd-dev
@@ -113,12 +122,14 @@ subpackages="
 source="https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz
 	https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver-testdata.tar.xz
 	test_fonts-$_testfonts.tar.gz::https://chromium-fonts.storage.googleapis.com/$_testfonts
+	copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz
 	chromium-launcher.sh
 	chromium.conf
 	google-api.keys
 
 	chromium-revert-drop-of-system-java.patch
 	compiler.patch
+	disable-dns_config_service.patch
 	disable-failing-tests.patch
 	fc-cache-version.patch
 	fix-missing-cstdint-include-musl.patch
@@ -145,10 +156,33 @@ source="https://commondatastorage.googleapis.com/chromium-browser-official/chrom
 	system-zstd.patch
 	temp-failure-retry.patch
 	yes-musl.patch
-	disable-dns_config_service.patch
+	"
+_copium_patches="
+	cr124-disable-libstdcpp-assertions.patch
+	cr124-gcc-readablestream.patch
+	cr124-iwyu-atomic-crime.patch
+	cr124-iwyu-bitset-tempora.patch
+	cr124-iwyu-cstdint-in-path_util.patch
+	cr124-iwyu-cstdint-mhtml-gen-result.patch
+	cr124-iwyu-cstdint-webrtc-reorder_optimizer.patch
+	cr124-iwyu-dawncontextprovider.patch
+	cr124-iwyu-include-cstdint-in-autofill.patch
+	cr124-iwyu-memory-in-gpu_init.patch
+	cr124-iwyu-optional-1party-sets.patch
+	cr124-iwyu-optional-base-span_reader.patch
+	cr124-iwyu-optional-gpu-adapter.patch
+	cr124-iwyu-sys-select-dawn-terminal.patch
+	cr124-iwyu-ukm-bitset.patch
+	cr124-libstdc-replace-std-powf-with-std-pow.patch
+	cr124-libvpx-disable-sve-on-gcc.patch
+	cr124-libwebp-shim-sharpyuv.patch
+	cr124-openh264-unbundle-gcc.patch
+	cr124-partition_allocator-xclang.patch
+	cr124-re2-unbundle-googletest-config.patch
+	cr124-stdcpp-blink-fragmentdataiterator.patch
+	cr124-webui-preload-manager-default-constructor.patch
 	"
 # chrome-sandbox can use suid when user namespaces aren't available, but uses only userns and drops privileges normally
-# tests stopped building with 115 with clang16
 options="suid"
 
 # backwards compat (merged into primary)
@@ -490,6 +524,22 @@ upstream_version() {
 prepare() {
 	default_prepare
 
+	for i in $_copium_patches; do
+		case "$i" in
+			*.patch)
+				msg "${i%::*}"
+				patch -p1 -i "$srcdir/copium/$i" || failed="$failed $i"
+				;;
+		esac
+	done
+	if [ ! -z "$failed" ]; then
+		error "The following patches failed to apply:"
+		for i in $failed; do
+			printf "  %s\n" "$i" >&2
+		done
+		exit 1
+	fi
+
 	mv ../test_fonts/ ./third_party/test_fonts/
 
 	# https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion
@@ -502,9 +552,9 @@ prepare() {
 	ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
 
 	# reusable system library settings
-	# libavif - https://github.com/AOMediaCodec/libavif/commit/4d2776a3
+	# libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9
 	# libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/
-	# jsoncpp, re2, snappy, swiftshader-spirv, woff2 - requires use_custom_libcxx=false
+	#   but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606
 	local use_system="
 		brotli
 		crc32c
@@ -512,11 +562,13 @@ prepare() {
 		double-conversion
 		ffmpeg
 		flac
+		flatbuffers
 		fontconfig
 		freetype
 		harfbuzz-ng
 		highway
 		icu
+		jsoncpp
 		libdrm
 		libevent
 		libjpeg
@@ -527,11 +579,16 @@ prepare() {
 		libxslt
 		openh264
 		opus
+		re2
+		snappy
+		swiftshader-SPIRV-Headers
+		swiftshader-SPIRV-Tools
+		woff2
 		zlib
 		zstd
 		"
 
-	for _lib in $use_system libjpeg_turbo; do
+	for _lib in $use_system libc++ libc++abi libjpeg_turbo swiftshader/third_party/SPIRV-Headers swiftshader/third_party/SPIRV-Tools; do
 		msg "Removing buildscripts for system provided $_lib"
 			find . -type f -path "*third_party/$_lib/*" \
 			\! -path "*third_party/$_lib/chromium/*" \
@@ -579,8 +636,8 @@ _configure() {
 	local _google_api_key _google_default_client_id _google_default_client_secret
 	eval "$(base64 -d < $srcdir/google-api.keys)"
 
-	export CFLAGS="${CFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
-	export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
+	export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes"
+	export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-invalid-constexpr"
 	export CPPFLAGS="${CPPFLAGS/-g/} -D__DATE__=  -D__TIME__=  -D__TIMESTAMP__="
 
 	# breaks chromium
@@ -589,8 +646,8 @@ _configure() {
 	export CFLAGS="${CFLAGS/-fstack-clash-protection}"
 
 	export AR="llvm-ar"
-	export CC="clang"
-	export CXX="clang++"
+	export CC="gcc"
+	export CXX="g++"
 	export NM="llvm-nm"
 
 	msg "Configuring build"
@@ -652,6 +709,7 @@ _configure() {
 		host_toolchain=\"//build/toolchain/linux/unbundle:default\"
 		icu_use_data_file=false
 		is_cfi=false
+		is_clang=false
 		is_component_ffmpeg=true
 		is_debug=false
 		is_official_build=true
@@ -664,17 +722,12 @@ _configure() {
 		rust_sysroot_absolute=\"/usr\"
 		symbol_level=$symbol_level
 		treat_warnings_as_errors=false
-		use_custom_libcxx=true
+		use_custom_libcxx=false
 		use_lld=true
 		use_pulseaudio=true
-		use_sysroot=false
-		use_system_freetype=true
-		use_system_harfbuzz=true
-		use_system_lcms2=true
-		use_system_libdrm=true
+		use_safe_libstdcxx=false
 		use_system_libffi=true
-		use_system_libjpeg=true
-		use_system_zlib=true
+		use_sysroot=false
 		use_thin_lto=false
 		use_vaapi=$vaapi
 		v8_enable_maglev=$maglev
@@ -693,8 +746,11 @@ build() {
 	# moc and friends not in path by default
 	export PATH="$PATH:/usr/lib/qt5/bin"
 
+	# ~1 GB per concurrent job is not enough with gcc
+	_njobs="${NJOBS:-"$(python3 -c 'import os; print(max((os.cpu_count() - (10 if os.uname().machine == "aarch64" else 8), 1)))')"}"
+
 	# shellcheck disable=2046
-	ninja -C out/bld \
+	ninja -C out/bld -j$_njobs \
 		chrome \
 		chrome_sandbox \
 		chromedriver.unstripped \
@@ -705,7 +761,15 @@ build() {
 
 check_base_unittests() {
 	# TODO: fix these tests, hopefully
+	# https://issues.chromium.org/issues/40939315
 	broken="MessagePumpLibeventTest.NestedNotification*"
+	broken="$broken:AlternateTestParams/PartitionAllocTest.SchedulerLoopQuarantine"
+	broken="$broken:ClampTest.Death"
+	broken="$broken:OptionalTest.DereferencingNoValueCrashes"
+	broken="$broken:RawPtrTest.TrivialRelocability"
+	broken="$broken:SafeNumerics.IntMaxOperations"
+	broken="$broken:StringPieceTest.InvalidLengthDeath"
+	broken="$broken:StringPieceTest.OutOfBoundsDeath"
 	# test-launcher-bot-mode enables parallelism and uncolored output
 	./out/bld/base_unittests --test-launcher-bot-mode --gtest_filter="-$broken"
 }
@@ -847,14 +911,16 @@ swiftshader() {
 }
 
 sha512sums="
-23e13d1d5758aa771f4c66e1a55068438e7c4890456dcb0b7a1fc1839b750e612e29d59e744c8b773935757aad01b78a5fecc3e03057a8acbb7e997dbb98f007  chromium-123.0.6312.122.tar.xz
-51d2eeb54ccaa3e936341cc1b6b8434982ba5f0dbe2f60eff3f5b8a89d59214b2acc19daae10602ff2f4ec8d75a7730e5bf645acdc88143f061c364c89f8f81f  chromium-123.0.6312.122-testdata.tar.xz
+3c13cbd65b11d187576dbf40665b4e43397e706fe43516dd280ad238519aa663c490a314ff43a1f2b41c1f757e3d9dbeeefe88e2d0cf312bb149c7737d8713fd  chromium-124.0.6367.60.tar.xz
+6837910f964f337cb7d43a4482dcebe707957940f037cbc368133df6ba23207dab0061d28f120cdbc9f9fb992c6256cff8e92638f767c3bc36323fbcbf10aa17  chromium-124.0.6367.60-testdata.tar.xz
 bbc928e99ebcd4d953b982688b01526cb754bad018f67be9e777a4f8ac51cdd3e01374e5a63faf55b12e7cee0d52816c88062e012b5bcc4f9bb41f28d8e0b7f7  test_fonts-336e775eec536b2d785cc80eff6ac39051931286.tar.gz
+a6f400da98ee3ae30460fc8d79214a7aee5625b89a02817525e6ed5807956df52ecd5ba2a47e70caf102235266f1ff0be69402cca50799b67a2c3ad9cef1b2a4  copium-124.4.tar.gz
 1b16564f85a03f3eb934ec51289dc6159e2454202d40f48354f947d6ceffac8889e9eb4c0f4dfaafb3a15101566d54039f832bc9a8433c3c463e2d1dac2d2acc  chromium-launcher.sh
 9cfcb41d69c5a515b6f9fe2a629579fa499e1f48eb58a0ce4ec8e5029d450bcafb6d963019aaac9a6838244bee9f9ba7fe5ef6146a0ca6b20fcda4ab7f059476  chromium.conf
 2d8237a940ea691bd10b08315429677a587f7ef9692a0cca53bfd066eae82998a6c71f402a8669e9de39f94d7f3280745d1628ea6eac5d76ca7116844d4e0dac  google-api.keys
 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020  chromium-revert-drop-of-system-java.patch
-c116ad6325a79b799b6c56312891d5b3d2f0d0c1c3e2c03f339144b3f93b871db190f83fe5eadc5542303d61849cc362299932a2f93661198e11ba0c1e492e48  compiler.patch
+54eb147c0af2ba096d1df375a289b339ee855ab1a9114e7c747753f0274a6bafb7212c1859b7885454c4529d9a5e3bd9559fc14e8e006f23ccd381895fa68d15  compiler.patch
+4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa  disable-dns_config_service.patch
 111bc22fb704d97759988268a40d6b356c51b0bd7a8119a694e905ffe21850ff64e91566cd0dd0c9d62fcb46dca8acc821436c34eb0ba78be872ee4f7ec88a7b  disable-failing-tests.patch
 5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf  fc-cache-version.patch
 9200f78bad70e95c648a5e8392d50642190600f655c6baa366ff6467ebad52d3b3f305dad58f3610da67136f4b723557653b174ec5c25be8d8737ee04d9ee09f  fix-missing-cstdint-include-musl.patch
@@ -869,7 +935,7 @@ e75f57ae34c97ca1caf15fa4b4106c6c1e79c31ed66869cf92ed9ea0c449886c9511e455047c17c1
 50c274a420bb8a7f14fcb56e40920dac8f708792a4520789b4987facea459bef88113d5a2b60fa8c57bee6e92bff3617d6b73fa305c8c44614c638971cffd440  musl-sandbox.patch
 e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2  musl-tid-caching.patch
 92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa  musl-v8-monotonic-pthread-cont_timedwait.patch
-5eb0b83264e2c9213fb871838827eb7875c05131a42d901032d6d1f05eec98609fefac4772385046887a773daf4f1e0ee5a647e82c1c3d73aec3fcf76f887084  no-execinfo.patch
+73bca6c6f9873f2f11cef04f3f41f71e0ae86e7e2d77e14db4298675fec390744c5081f6fdb14052e5ee2b5885be1198c3aa6068eb2b656d1a665c0c3f36e708  no-execinfo.patch
 8e17101d69e23b456a9c03dc2fe95bcd56846389707ba6f4720192a9e9168406d20d9168dbebbb3a47d921ec92e478f0e390f46e6b9bb43a34dda217c6e6448b  no-mallinfo.patch
 e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf  no-res-ninit-nclose.patch
 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b  no-sandbox-settls.patch
@@ -881,5 +947,4 @@ d4ac7f350806b4410ccb1df3b0ad7e90a7b6d724a16919761aa2d47a6f21008c7374da528b05b754
 b3beb98b539fe160fbc493ba410ae0f68540cc4b6834f1f8ce9a22c3f4f59ef5d583ad48793e10549fd02a701f833a3969791ef4524322cd1e715ca5bf226bc8  system-zstd.patch
 e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb  temp-failure-retry.patch
 914ccf649d7771f19f209ab97f99c481aebc6f66174d68e8b539f6ad4a70bc8cb0fae2df6dadbf0415958ffb3574c420fe029079dcce45f5e5add4db2e903566  yes-musl.patch
-4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa  disable-dns_config_service.patch
 "
diff --git a/community/chromium/compiler.patch b/community/chromium/compiler.patch
index 2541d19992b85eeb564ad23d619ab96166f36576..fedc978ae48e87994ff157c1252fb516f87425f7 100644
--- a/community/chromium/compiler.patch
+++ b/community/chromium/compiler.patch
@@ -1,6 +1,6 @@
 --- ./build/config/compiler/BUILD.gn.orig
 +++ ./build/config/compiler/BUILD.gn
-@@ -616,24 +618,6 @@
+@@ -613,24 +613,6 @@
        }
      }
  
@@ -25,7 +25,7 @@
      # TODO(crbug.com/1235145): Investigate why/if this should be needed.
      if (is_win) {
        cflags += [ "/clang:-ffp-contract=off" ]
-@@ -1011,17 +998,6 @@
+@@ -1005,17 +987,6 @@
      # `-nodefaultlibs` from the linker invocation from Rust, which would be used
      # to compile dylibs on Android, such as for constructing unit test APKs.
      "-Cdefault-linker-libraries",
@@ -43,7 +43,7 @@
    ]
  
    if (!is_win || force_rustc_color_output) {
-@@ -1175,8 +1151,8 @@
+@@ -1182,8 +1153,8 @@
      } else if (current_cpu == "arm") {
        if (is_clang && !is_android && !is_nacl &&
            !(is_chromeos_lacros && is_chromeos_device)) {
@@ -54,7 +54,7 @@
        }
        if (!is_nacl) {
          cflags += [
-@@ -1190,8 +1166,8 @@
+@@ -1197,8 +1168,8 @@
      } else if (current_cpu == "arm64") {
        if (is_clang && !is_android && !is_nacl && !is_fuchsia &&
            !(is_chromeos_lacros && is_chromeos_device)) {
@@ -65,6 +65,15 @@
        }
      } else if (current_cpu == "mipsel" && !is_nacl) {
        ldflags += [ "-Wl,--hash-style=sysv" ]
+@@ -1983,7 +1954,7 @@
+       defines = [ "_HAS_NODISCARD" ]
+     }
+   } else {
+-    cflags = [ "-Wall" ]
++    cflags = []
+     if (is_clang) {
+       # Enable extra warnings for chromium_code when we control the compiler.
+       cflags += [ "-Wextra" ]
 --- ./build/config/rust.gni.orig
 +++ ./build/config/rust.gni
 @@ -186,11 +186,11 @@
diff --git a/community/chromium/no-execinfo.patch b/community/chromium/no-execinfo.patch
index 4b578976a3eb3380d432c09f6453bd043b53d987..b1705f5d85f68043e4530138e5b553d742d31605 100644
--- a/community/chromium/no-execinfo.patch
+++ b/community/chromium/no-execinfo.patch
@@ -37,25 +37,24 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
  #define HAVE_FCNTL_H 1
 --- a/base/debug/stack_trace.cc
 +++ b/base/debug/stack_trace.cc
-@@ -251,7 +253,9 @@
+@@ -291,7 +291,7 @@
  }
- 
- void StackTrace::OutputToStream(std::ostream* os) const {
+ std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const {
+   std::stringstream stream;
+-#if !defined(__UCLIBC__) && !defined(_AIX)
 +#if defined(__GLIBC__) && !defined(_AIX)
-   OutputToStreamWithPrefix(os, nullptr);
-+#endif
+   if (ShouldSuppressOutput()) {
+     return "Backtrace suppressed.";
+   }
+@@ -301,7 +301,7 @@
  }
  
- std::string StackTrace::ToString() const {
-@@ -281,7 +281,7 @@
- }
- std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const {
-   std::stringstream stream;
+ std::ostream& operator<<(std::ostream& os, const StackTrace& s) {
 -#if !defined(__UCLIBC__) && !defined(_AIX)
 +#if defined(__GLIBC__) && !defined(_AIX)
-   OutputToStreamWithPrefix(&stream, prefix_string);
- #endif
-   return stream.str();
+   s.OutputToStream(&os);
+ #else
+   os << "StackTrace::OutputToStream not implemented.";
 --- a/base/debug/stack_trace_unittest.cc
 +++ b/base/debug/stack_trace_unittest.cc
 @@ -33,7 +33,7 @@