--- CMakeLists.txt	2026-03-31 23:49:05.000000000 +0800
+++ CMakeLists.txt	2026-04-30 20:43:20.000000000 +0800
@@ -59,11 +59,7 @@
 target_include_directories(abaddon PUBLIC ${NLOHMANN_JSON_INCLUDE_DIRS})
 
 if (ENABLE_QRCODE_LOGIN)
-    add_library(qrcodegen subprojects/qrcodegen/cpp/qrcodegen.hpp subprojects/qrcodegen/cpp/qrcodegen.cpp)
-    target_include_directories(qrcodegen PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/subprojects/qrcodegen/cpp")
-    target_link_libraries(abaddon qrcodegen)
-
-    target_include_directories(abaddon PUBLIC "subprojects/qrcodegen/cpp")
+    target_link_libraries(abaddon qrcodegencpp)
     target_compile_definitions(abaddon PRIVATE WITH_QRLOGIN)
 endif ()
 
@@ -137,13 +133,11 @@
 endif ()
 
 if (USE_KEYCHAIN)
-    find_package(keychain QUIET)
-    if (NOT keychain_FOUND)
-        message("keychain was not found and will be included as a submodule")
-        add_subdirectory(subprojects/keychain EXCLUDE_FROM_ALL)
-        target_link_libraries(abaddon keychain)
-        target_compile_definitions(abaddon PRIVATE WITH_KEYCHAIN)
+    target_link_libraries(abaddon keychain)
+    if (APPLE)
+        target_link_libraries(abaddon "-framework Security")
     endif ()
+    target_compile_definitions(abaddon PRIVATE WITH_KEYCHAIN)
 endif ()
 
 set(USE_MINIAUDIO FALSE)
