anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / applications / networking / browsers / ladybird / default.nix
blob1a61d7cf77a369cda71ae33ba48074292978673f
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchzip
5 , fetchurl
6 , cacert
7 , unicode-emoji
8 , unicode-character-database
9 , cmake
10 , ninja
11 , pkg-config
12 , curl
13 , libavif
14 , libjxl
15 , libpulseaudio
16 , libwebp
17 , libxcrypt
18 , python3
19 , qt6Packages
20 , woff2
21 , ffmpeg
22 , simdutf
23 , skia
24 , nixosTests
25 , AppKit
26 , Cocoa
27 , Foundation
28 , OpenGL
29 , unstableGitUpdater
32 let
33   unicode-idna = fetchurl {
34     url = "https://www.unicode.org/Public/idna/${unicode-character-database.version}/IdnaMappingTable.txt";
35     hash = "sha256-QCy9KF8flS/NCDS2NUHVT2nT2PG4+Fmb9xoaFJNfgsQ=";
36   };
37   adobe-icc-profiles = fetchurl {
38     url = "https://download.adobe.com/pub/adobe/iccprofiles/win/AdobeICCProfilesCS4Win_end-user.zip";
39     hash = "sha256-kgQ7fDyloloPaXXQzcV9tgpn3Lnr37FbFiZzEb61j5Q=";
40     name = "adobe-icc-profiles.zip";
41   };
42   public_suffix_commit = "9094af5c6cb260e69137c043c01be18fee01a540";
43   public-suffix-list = fetchurl {
44     url = "https://raw.githubusercontent.com/publicsuffix/list/${public_suffix_commit}/public_suffix_list.dat";
45     hash = "sha256-0szHUz1T0MXOQ9tcXoKY2F/bI3s7hsYCjURqywZsf1w=";
46   };
47   # Note: The cacert version is synthetic and must match the version in the package's CMake
48   cacert_version = "2023-12-12";
50 stdenv.mkDerivation (finalAttrs: {
51   pname = "ladybird";
52   version = "0-unstable-2024-11-06";
54   src = fetchFromGitHub {
55     owner = "LadybirdWebBrowser";
56     repo = "ladybird";
57     rev = "ad1ba30b27ff2802b6e743c6b8970e4bd1309dfc";
58     hash = "sha256-vrRkUTWHm+2GTJ3axO2oPJ0gKyMSH8Reh3TjYYze/Io=";
59   };
61   postPatch = ''
62     sed -i '/iconutil/d' Ladybird/CMakeLists.txt
64     # Don't set absolute paths in RPATH
65     substituteInPlace Meta/CMake/lagom_install_options.cmake \
66       --replace-fail "\''${CMAKE_INSTALL_BINDIR}" "bin" \
67       --replace-fail "\''${CMAKE_INSTALL_LIBDIR}" "lib"
68   '';
70   preConfigure = ''
71     # Setup caches for LibUnicode, LibTLS and LibGfx
72     # Note that the versions of the input data packages must match the
73     # expected version in the package's CMake.
75     # Check that the versions match
76     grep -F 'set(CACERT_VERSION "${cacert_version}")' Meta/CMake/ca_certificates_data.cmake || (echo cacert_version mismatch && exit 1)
78     mkdir -p build/Caches
80     cp -r ${unicode-character-database}/share/unicode build/Caches/UCD
81     chmod +w build/Caches/UCD
82     cp ${unicode-emoji}/share/unicode/emoji/emoji-test.txt build/Caches/UCD
83     cp ${unicode-idna} build/Caches/UCD/IdnaMappingTable.txt
84     echo -n ${unicode-character-database.version} > build/Caches/UCD/version.txt
85     chmod -w build/Caches/UCD
87     mkdir build/Caches/CACERT
88     cp ${cacert}/etc/ssl/certs/ca-bundle.crt build/Caches/CACERT/cacert-${cacert_version}.pem
89     echo -n ${cacert_version} > build/Caches/CACERT/version.txt
91     mkdir build/Caches/PublicSuffix
92     cp ${public-suffix-list} build/Caches/PublicSuffix/public_suffix_list.dat
94     mkdir build/Caches/AdobeICCProfiles
95     cp ${adobe-icc-profiles} build/Caches/AdobeICCProfiles/adobe-icc-profiles.zip
96     chmod +w build/Caches/AdobeICCProfiles
97   '';
99   nativeBuildInputs = with qt6Packages; [
100     cmake
101     ninja
102     pkg-config
103     python3
104     wrapQtAppsHook
105   ];
107   buildInputs = with qt6Packages; [
108     curl
109     ffmpeg
110     libavif
111     libjxl
112     libwebp
113     libxcrypt
114     qtbase
115     qtmultimedia
116     simdutf
117     skia
118     woff2
119   ] ++ lib.optional stdenv.hostPlatform.isLinux [
120     libpulseaudio.dev
121     qtwayland
122   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
123     AppKit
124     Cocoa
125     Foundation
126     OpenGL
127   ];
129   cmakeFlags = [
130     # Disable network operations
131     "-DSERENITY_CACHE_DIR=Caches"
132     "-DENABLE_NETWORK_DOWNLOADS=OFF"
133   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
134     "-DCMAKE_INSTALL_LIBEXECDIR=libexec"
135   ];
137   # FIXME: Add an option to -DENABLE_QT=ON on macOS to use Qt rather than Cocoa for the GUI
139   postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
140     mkdir -p $out/Applications $out/bin
141     mv $out/bundle/Ladybird.app $out/Applications
142   '';
144   # Only Ladybird and WebContent need wrapped, if Qt is enabled.
145   # On linux we end up wraping some non-Qt apps, like headless-browser.
146   dontWrapQtApps = stdenv.hostPlatform.isDarwin;
148   passthru.tests = {
149     nixosTest = nixosTests.ladybird;
150   };
152   passthru.updateScript = unstableGitUpdater { };
154   meta = with lib; {
155     description = "Browser using the SerenityOS LibWeb engine with a Qt or Cocoa GUI";
156     homepage = "https://ladybird.org";
157     license = licenses.bsd2;
158     maintainers = with maintainers; [ fgaz ];
159     platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
160     mainProgram = "Ladybird";
161     # use of undeclared identifier 'NSBezelStyleAccessoryBarAction'
162     broken = stdenv.hostPlatform.isDarwin;
163   };