Package Details: citron-neo-git 2026.04.27.r116.g6bd30f6-1

Git Clone URL: https://aur.archlinux.org/citron-neo-git.git (read-only, click to copy)
Package Base: citron-neo-git
Description: Nintendo Switch emulator fork from citron (git version)
Upstream URL: https://github.com/citron-neo/emulator
Keywords: citron citron-neo nintendo swicth yuzu
Licenses: GPL-3.0-or-later
Conflicts: citron, citron-bin, citron-git, citron-neo
Provides: citron, citron-neo
Submitter: CharlotteBel
Maintainer: CharlotteBel (HurricanePootis)
Last Packager: CharlotteBel
Votes: 2
Popularity: 1.65
First Submitted: 2026-04-27 18:36 (UTC)
Last Updated: 2026-05-15 05:23 (UTC)

Required by (0)

Sources (33)

Latest Comments

HurricanePootis commented on 2026-05-15 05:30 (UTC) (edited on 2026-05-15 05:31 (UTC) by HurricanePootis)

@CharlotteBel

Thank you! I appreciate the quick and timely reponse! Also, auto-updater bot sounds interesting.... I personally have a script (at least for my stable non-git packages), where it checks a .nvchecker.toml file in each package I have with pkgctl version check. pkgctl is a tool upstream maintainers use, but I find it useful as an AUR maintainer myself.

For example, I have a bash script with something like

#!/bin/bash
for package in citron-neo, citro-neo-git, vpkedit, ... (you get the idea)
do
   case $1 in
      version)
      cd "$HOME/aur/$package" || exit
      if [[ -f .nvchecker.toml ]]
      then
      pkgctl version check
      fi
      ;;
   esac
done

Allows me to like, clean all my package folders, check stable point versions, etc all at once. Also, for generating the package list (since I got 200+ lol), I made a script for that as well:

#!/bin/bash
dir=$(mktemp -d)
for part in maintainer comaintainers
do
    curl "https://aur.archlinux.org/rpc/v5/search/hurricanepootis?by=${part}" | jq '.results.[].PackageBase' | sed 's/\"//g' >> $dir/temp.txt
done
echo $(sort -u $dir/temp.txt | tr '\n' ' ') >> "$HOME/aur/package.sh"
rm -rf $dir

Edit: It ends up looking like this:

hurricane@TheCloutPC ~/aur $ ./package.sh version
Up-to-date
 ✓ an-anime-game-launcher: current version 3.19.3 is latest
Up-to-date
 ✓ anime-games-launcher: current version 2.0.0 is latest
Up-to-date
 ✓ antigravity: current version 1.23.2 is latest
Up-to-date
 ✓ azahar: current version 2125.1.2 is latest
Up-to-date

This is good if you have a lot of stable packages.

CharlotteBel commented on 2026-05-15 05:26 (UTC)

@HurricanePootis sorry about that

My auto-updater bot is a bit too eager and keeps pulling the old commit before the fix lands. I'll fix the PKGBUILD so it stops doing that.

Thanks for the fix!

HurricanePootis commented on 2026-05-14 16:15 (UTC) (edited on 2026-05-14 16:25 (UTC) by HurricanePootis)

@CharlotteBel

I switched the Vulkan headers to extern because it currently fails to compile with using system vulkan-headers. Here is the error:

[635/1576] Building CXX object src/video_core/CMakeFiles/video_core.dir/renderer_vulkan/vk_swapchain.cpp.o
FAILED: [code=1] src/video_core/CMakeFiles/video_core.dir/renderer_vulkan/vk_swapchain.cpp.o 
/usr/bin/clang++ -DARCHITECTURE_x86_64=1 -DBOOST_ASIO_DISABLE_CONCEPTS -DBOOST_CONTEXT_DYN_LINK -DBOOST_CONTEXT_NO_LIB -DBOOST_DATE_TIME_DYN_LINK -DBOOST_DATE_TIME_NO_LIB -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_FILESYSTEM_NO_LIB -DBOOST_PROCESS_DYN_LINK -DBOOST_PROCESS_NO_LIB -DBOOST_REGEX_DYN_LINK -DBOOST_REGEX_NO_LIB -DCITRON_BUILD_TYPE=\"Stable\" -DFMT_SHARED -DNDEBUG -D_FILE_OFFSET_BITS=64 -I/build/citron-neo-git/src/emulator/src/. -I/build/citron-neo-git/src/build/src/video_core/host_shaders/include -I/build/citron-neo-git/src/emulator/externals/./stb -I/build/citron-neo-git/src/emulator/externals/unordered_dense/include -I/build/citron-neo-git/src/emulator/externals/glad/include -I/build/citron-neo-git/src/emulator/externals/sirit/src/../include -I/build/citron-neo-git/src/emulator/externals/SPIRV-Headers/include -I/build/citron-neo-git/src/emulator/externals/./bc_decoder -I/build/citron-neo-git/src/emulator/externals/Vulkan-Utility-Libraries/include -I/build/citron-neo-git/src/emulator/externals/VulkanMemoryAllocator/include -I/build/citron-neo-git/src/emulator/externals/xbyak -I/build/citron-neo-git/src/emulator/externals/dynarmic/src/dynarmic/.. -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection         -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/build/citron-neo-git/src=/usr/src/debug/citron-neo-git -flto=auto -DNDEBUG -flto=thin -O3 -DNDEBUG -std=gnu++20 -fwrapv -fno-rtti -pipe -Werror=all -Werror=extra -Werror=missing-declarations -Werror=shadow -Werror=unused -Wno-attributes -Wno-invalid-offsetof -Wno-unused-parameter -Wno-missing-field-initializers -Wno-braced-scalar-init -Wno-unused-private-field -Wno-nullability-completeness -Werror=shadow-uncaptured-local -Werror=implicit-fallthrough -Werror=type-limits -mcx16 -Werror=conversion -Wno-sign-conversion -Winvalid-pch -Xclang -include-pch -Xclang /build/citron-neo-git/src/build/src/video_core/CMakeFiles/video_core.dir/cmake_pch.hxx.pch -Xclang -include -Xclang /build/citron-neo-git/src/build/src/video_core/CMakeFiles/video_core.dir/cmake_pch.hxx -MD -MT src/video_core/CMakeFiles/video_core.dir/renderer_vulkan/vk_swapchain.cpp.o -MF src/video_core/CMakeFiles/video_core.dir/renderer_vulkan/vk_swapchain.cpp.o.d -o src/video_core/CMakeFiles/video_core.dir/renderer_vulkan/vk_swapchain.cpp.o -c /build/citron-neo-git/src/emulator/src/video_core/renderer_vulkan/vk_swapchain.cpp
In file included from /build/citron-neo-git/src/emulator/src/video_core/renderer_vulkan/vk_swapchain.cpp:16:
In file included from /build/citron-neo-git/src/emulator/src/./video_core/vulkan_common/vk_enum_string_helper.h:8:
/build/citron-neo-git/src/emulator/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h:8459:24: error: use of undeclared identifier 'VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV'; did you mean 'VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT'?
 8459 |     if (input_value == VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV) return "VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV";
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                        VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
/usr/include/vulkan/vulkan_core.h:8307:40: note: 'VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT' declared here
 8307 | static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000ULL;
      |                                        ^
1 error generated.

This happens in a clean chroot build with extra-x86-64-build -c. I am going to switch it back to on, again.

Edit: This error persists on a clean chroot on my server as well. Maybe you have vulkan-headers-git or something like that installed on your system? Anyways, whenever building AUR packages, it's a good idea to use a clean chroot to build as a clean baseline to target. Furthermore, with -git packages, there is no need to bump the pkgrel() yourself manually unless there is an required change. People's AUR helpers will automatically update it for them.

pqatsi commented on 2026-05-01 14:51 (UTC)

@HurricanePootis Nice manifest in this package! Good to see a good place to learn.

CharlotteBel commented on 2026-04-29 18:14 (UTC)

Thank you for the detailed review and the diff

I'm still new to making good PKGBUILDs. I really appreciate the offer.

I'd be happy if you become a co-maintainer for citron-neo-git to keep it in sync with the main citron package

feel free to apply the improvements yourself

HurricanePootis commented on 2026-04-29 18:00 (UTC)

Hey CharloetteBel, I am the maintainer for citron, azahar, citron-neo, and previous maintainer for yuzu, citra, and other switch/3DS emulators.

Congrats on making your first PKGBUILD. But, like any beginner PKGBUILD writer, there is room for a lot of improvement. I am going to write a list of what needs to be changed and leave a diff in the comments. But, if you do not want to go through the pain of applying this diff yourself, I am more than happy to be a co-maintainer of citron-neo-git since I am already the maintainer of citron-neo (It's a good idea to keep parity between features of the -git and non-git version of PKGBUILDs).

Here is the linke to the diff.

Changes:

  1. Properly set depends() based on the utility namcap. This tool will automatically tell you what a package actually depends on.
  2. Add qt6-tools, qt6-svg, qt6-multimedia, and vulkan-headers to makedepends
  3. Add "${pkgname::-4}" to conflicts and replace to add citron-neo to the array
  4. Add every single git submodule to source(). This is a big deal. Git submodules should always be handled in source, and not use git submodule update --init --recursive. By doing the latter, every time src/ directory is deleted, all of the submodules have to be redownloaded
  5. In prepare(), properly handle the new submodules
  6. Follow CMake packaging guidelines by putting the build directory in $srcdir and setting build type to None
  7. Set the CXXFLAGS and CFLAGS to $CXXFLAGS -DNDEBUG and $CFLAGS -DNDEBUG respectively. The way you were previously doing it was overwriting every single makeflag the user sets in /etc/makepkg.conf. This is incorrect. Especially so since you called the cmake command twice. Setting -march=native -O3 -pipe as the only flags is kind of insane
  8. Copy over a bunch of options from the citron PKGBUILD
  9. Build and install commands call cmake directly instead of ninja.