initial commit

This commit is contained in:
2026-07-21 13:13:31 -04:00
commit 2ac6ab0dd5
23 changed files with 2614 additions and 0 deletions
@@ -0,0 +1,39 @@
{
stdenv,
fetchFromGitHub,
cmake,
pkg-config,
unstable,
kdePackages,
}:
# Builds the kio aseprite thumbnailer using qt6 from unstable.
stdenv.mkDerivation {
pname = "aseprite-thumbnailer-kde";
version = "4189eeb7864307518938363d990fa69836e6686e";
src = fetchFromGitHub {
owner = "56789a1987";
repo = "aseprite-thumbnails-kde";
rev = "4189eeb7864307518938363d990fa69836e6686e";
hash = "sha256-+Q08KXuf9ofRBJXZtt5isRaV98U0UySW7EFnm/dg8Vc=";
fetchSubmodules = true;
leaveDotGit = false;
};
dontWrapQtApps = true;
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
unstable.qt6.qtbase
kdePackages.kio
];
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
];
}
+202
View File
@@ -0,0 +1,202 @@
{
clangStdenv,
cmake,
cmark,
curl,
fetchFromGitHub,
fmt,
fontconfig,
freetype,
giflib,
glib,
harfbuzzFull,
libicns,
lib,
libGL,
libjpeg,
libpng,
libwebp,
libx11,
libxcursor,
libxext,
libxi,
libxxf86vm,
libxcb,
libxrandr,
ninja,
pcre2,
pixman,
pkg-config,
skia-aseprite,
tinyxml-2,
zlib,
}:
let
asepriteStrings = fetchFromGitHub {
owner = "aseprite";
repo = "strings";
rev = "417074f649f359f98511fc87a707c276d87f5739";
hash = "sha256-5bB7yK4eJHhkUwGYtIFYdFXpRrBt69VBbTh7EmPFI08=";
};
in
clangStdenv.mkDerivation (finalAttrs: {
pname = "aseprite";
version = "44cd42d29dbc047ec9d341f05c0a8ff584ede151";
src = fetchFromGitHub {
owner = "aseprite";
repo = "aseprite";
rev = "${finalAttrs.version}";
hash = "sha256-swXk8wwFgao2rpF4ntCjOMnV+yk0gi+wbWoWl/wv7e8=";
fetchSubmodules = true;
};
# Translation files are copied without overwriting existing ones to preserve the
# potentially more up-to-date English file from the main source.
postUnpack = ''
cp --no-clobber ${asepriteStrings}/* "$sourceRoot/data/strings"
'';
nativeBuildInputs = [
cmake
ninja
pkg-config
]
++ lib.optionals clangStdenv.hostPlatform.isDarwin [
libicns
];
buildInputs = [
cmark
curl
fmt
fontconfig
freetype
giflib
glib
harfbuzzFull
libGL
libjpeg
libpng
libwebp
libx11
libxcursor
libxext
libxi
libxxf86vm
libxcb
libxrandr
pcre2
pixman
skia-aseprite
tinyxml-2
zlib
];
patches = [
./patches/shared-fmt.patch
./patches/shared-libwebp.patch
./patches/shared-skia-deps.patch
./patches/shared-libjpeg-turbo.patch
];
postPatch = ''
substituteInPlace src/ver/CMakeLists.txt \
--replace-fail '"1.x-dev"' '"${finalAttrs.version}"'
# Fix build on Darwin with `-Werror=format-security`.
# (NSLog requires a string-literal format).
substituteInPlace laf/os/osx/logger.mm \
--replace-fail 'NSLog([NSString stringWithUTF8String:error]);' 'NSLog(@"%@", [NSString stringWithUTF8String:error]);'
'';
cmakeFlags = [
"-DENABLE_DESKTOP_INTEGRATION=ON"
"-DENABLE_UPDATER=OFF"
"-DUSE_SHARED_CMARK=ON"
"-DUSE_SHARED_CURL=ON"
"-DUSE_SHARED_FMT=ON"
"-DUSE_SHARED_FREETYPE=ON"
"-DUSE_SHARED_GIFLIB=ON"
"-DUSE_SHARED_HARFBUZZ=ON"
"-DUSE_SHARED_LIBPNG=ON"
"-DUSE_SHARED_PIXMAN=ON"
"-DUSE_SHARED_TINYXML=OFF"
"-DUSE_SHARED_WEBP=ON"
"-DUSE_SHARED_ZLIB=ON"
# Disable libarchive programs.
"-DENABLE_CAT=OFF"
"-DENABLE_CPIO=OFF"
"-DENABLE_TAR=OFF"
# UI backend.
"-DLAF_BACKEND=skia"
"-DLAF_WITH_EXAMPLES=OFF"
"-DSKIA_DIR=${skia-aseprite}"
"-DSKIA_LIBRARY_DIR=${skia-aseprite}/lib"
];
# `libskia.a` is static, so its deps must be linked explicitly on Darwin
# (otherwise we hit undefined `_jpeg_*`/`_WebP*` symbols, e.g. in the thumbnailer).
env.NIX_LDFLAGS = lib.optionalString clangStdenv.hostPlatform.isDarwin "-ljpeg -lwebp -lwebpdemux -lwebpmux";
postInstall = ''
# Install desktop icons.
src="$out/share/aseprite/data/icons"
for size in 16 32 48 64 128 256; do
dst="$out"/share/icons/hicolor/"$size"x"$size"
install -Dm644 "$src"/ase"$size".png "$dst"/apps/aseprite.png
install -Dm644 "$src"/doc"$size".png "$dst"/mimetypes/image-x-aseprite.png
done
# Delete unneeded artifacts of bundled libraries.
rm -rf "$out"/{include,lib,man}
''
+ lib.optionalString clangStdenv.hostPlatform.isDarwin ''
install -d "$out/Applications"
if [ -d "$out/bin/aseprite.app" ]; then
rm -rf "$out/Applications/Aseprite.app"
mv "$out/bin/aseprite.app" "$out/Applications/Aseprite.app"
fi
# Generate the `.icns` files referenced by Info.plist from the shipped PNGs.
res="$out/Applications/Aseprite.app/Contents/Resources"
icons="$res/data/icons"
if [ -d "$icons" ] && command -v png2icns >/dev/null; then
for spec in "Aseprite ase" "Document doc" "Extension ext"; do
set -- $spec
name="$1"
prefix="$2"
png2icns "$res/$name.icns" \
"$icons/''${prefix}16.png" \
"$icons/''${prefix}32.png" \
"$icons/''${prefix}128.png" \
"$icons/''${prefix}256.png"
done
fi
# Keep $out/bin clean on Darwin; the bundle lives under $out/Applications.
rmdir "$out/bin" 2>/dev/null || true
'';
meta = {
homepage = "https://www.aseprite.org/";
description = "Animated sprite editor & pixel art tool";
license = lib.licenses.unfree;
longDescription = ''
Aseprite is a program to create animated sprites. Its main features are:
- Sprites are composed by layers & frames (as separated concepts).
- Supported color modes: RGBA, Indexed (palettes up to 256 colors), and Grayscale.
- Load/save sequence of PNG files and GIF animations (and FLC, FLI, JPG, BMP, PCX, TGA).
- Export/import animations to/from Sprite Sheets.
- Tiled drawing mode, useful to draw patterns and textures.
- Undo/Redo for every operation.
- Real-time animation preview.
- Multiple editors support.
- Pixel-art specific tools like filled Contour, Polygon, Shading mode, etc.
- Onion skinning.
'';
maintainers = [ lib.maintainers.iamanaws ];
platforms = lib.platforms.linux ++ lib.platforms.darwin;
mainProgram = "aseprite";
};
})
@@ -0,0 +1,79 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b1bd0189b..3fb7abffb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -66,6 +66,7 @@ enable_testing()
option(USE_SHARED_CMARK "Use your installed copy of cmark" off)
option(USE_SHARED_CURL "Use your installed copy of curl" off)
+option(USE_SHARED_FMT "Use your installed copy of fmt" off)
option(USE_SHARED_GIFLIB "Use your installed copy of giflib" off)
option(USE_SHARED_JPEGLIB "Use your installed copy of jpeglib" off)
option(USE_SHARED_ZLIB "Use your installed copy of zlib" off)
@@ -185,6 +186,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_PROFILE "${CMAKE_BINARY_DIR}/bin")
set(SOURCE_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data)
set(CMARK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cmark)
set(CURL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/curl)
+set(FMT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/fmt)
set(GIFLIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/giflib)
set(LIBJPEG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/jpeg)
set(LIBPNG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libpng)
@@ -225,6 +227,16 @@ if(NOT USE_SHARED_CURL)
set(CURL_STATICLIB ON BOOL)
endif()
+# fmt
+if(USE_SHARED_FMT)
+ find_package(FMT REQUIRED)
+ set(FMT_LIBRARIES fmt::fmt)
+else()
+ set(FMT_FOUND)
+ set(FMT_LIBRARIES fmt)
+ # No need to include extra directories, actually
+endif()
+
# zlib
if(USE_SHARED_ZLIB)
find_package(ZLIB REQUIRED)
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index 9c67c0268..b19a3e412 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -754,7 +754,7 @@ target_link_libraries(app-lib
${ZLIB_LIBRARIES}
json11
archive_static
- fmt
+ ${FMT_LIBRARIES}
tinyexpr
qoi)
diff --git a/src/dio/CMakeLists.txt b/src/dio/CMakeLists.txt
index 55cb24de5..b253dca0b 100644
--- a/src/dio/CMakeLists.txt
+++ b/src/dio/CMakeLists.txt
@@ -16,7 +16,7 @@ endif()
target_link_libraries(dio-lib
${ZLIB_LIBRARIES}
- fmt
+ ${FMT_LIBRARIES}
flic-lib
laf-base
fixmath-lib
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
index 9d09a98c8..1973b134b 100644
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -117,7 +117,10 @@ if(NOT USE_SHARED_HARFBUZZ AND NOT LAF_BACKEND STREQUAL "skia")
endif()
add_subdirectory(simpleini)
-add_subdirectory(fmt)
+
+if(NOT USE_SHARED_FMT)
+ add_subdirectory(fmt)
+endif()
# Add cmark without tests
if(NOT USE_SHARED_CMARK)
@@ -0,0 +1,21 @@
diff --git a/cmake/FindJpegTurbo.cmake b/cmake/FindJpegTurbo.cmake
index 33b5204..0407a6a 100644
--- a/cmake/FindJpegTurbo.cmake
+++ b/cmake/FindJpegTurbo.cmake
@@ -9,14 +9,11 @@
if(LAF_BACKEND STREQUAL "skia")
- find_library(LIBJPEG_TURBO_LIBRARY NAMES libjpeg jpeg
- HINTS "${SKIA_LIBRARY_DIR}" NO_DEFAULT_PATH)
- set(LIBJPEG_TURBO_INCLUDE_DIRS "${SKIA_DIR}/third_party/externals/libjpeg-turbo")
+ find_library(LIBJPEG_TURBO_LIBRARY NAMES libjpeg jpeg)
add_library(libjpeg-turbo STATIC IMPORTED)
set_target_properties(libjpeg-turbo PROPERTIES
- IMPORTED_LOCATION "${LIBJPEG_TURBO_LIBRARY}"
- INTERFACE_INCLUDE_DIRECTORIES ${LIBJPEG_TURBO_INCLUDE_DIRS})
+ IMPORTED_LOCATION "${LIBJPEG_TURBO_LIBRARY}")
else()
@@ -0,0 +1,47 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 87aed2f28f9c..498472ec2a60 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -76,6 +76,7 @@ option(USE_SHARED_TINYXML "Use your installed copy of tinyxml" off)
option(USE_SHARED_PIXMAN "Use your installed copy of pixman" off)
option(USE_SHARED_FREETYPE "Use shared FreeType library" off)
option(USE_SHARED_HARFBUZZ "Use shared HarfBuzz library" off)
+option(USE_SHARED_WEBP "Use your installed copy of webp" off)
option(ENABLE_ASEPRITE_EXE "Compile main Aseprite executable" on)
option(ENABLE_MEMLEAK "Enable memory-leaks detector (only for developers)" off)
option(ENABLE_NEWS "Enable the news in Home tab" on)
@@ -380,7 +381,20 @@ add_subdirectory(laf)
# libwebp
if(ENABLE_WEBP)
# Use libwebp from Skia
- if(LAF_BACKEND STREQUAL "skia")
+ if(USE_SHARED_WEBP)
+ find_library(WEBP_LIBRARY NAMES webp)
+ find_library(WEBPDEMUX_LIBRARY NAMES webpdemux)
+ find_library(WEBPMUX_LIBRARY NAMES webpmux)
+ set(WEBP_LIBRARIES ${WEBP_LIBRARY} ${WEBPDEMUX_LIBRARY} ${WEBPMUX_LIBRARY})
+ find_path(WEBP_INCLUDE_DIRS NAMES decode.h PATH_SUFFIXES webp)
+ find_path(WEBP_INCLUDE_DIRS NAMES decode.h PATH_SUFFIXES webp)
+ find_path(WEBP_INCLUDE_DIRS NAMES decode.h PATH_SUFFIXES webp)
+ if(WEBP_LIBRARIES)
+ set(WEBP_FOUND ON)
+ else()
+ set(WEBP_FOUND OFF)
+ endif()
+ elseif(LAF_BACKEND STREQUAL "skia")
find_library(WEBP_LIBRARIES webp
NAMES libwebp # required for Windows
PATHS "${SKIA_LIBRARY_DIR}" NO_DEFAULT_PATH)
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
index 1973b134b9f8..f15dba5a7968 100644
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -33,7 +33,7 @@ if(NOT USE_SHARED_GIFLIB)
add_subdirectory(giflib)
endif()
-if(ENABLE_WEBP AND NOT LAF_BACKEND STREQUAL "skia")
+if(ENABLE_WEBP AND NOT LAF_BACKEND STREQUAL "skia" AND NOT USE_SHARED_WEBP)
set(WEBP_BUILD_EXTRAS OFF CACHE BOOL "Build extras.")
set(WEBP_BUILD_ANIM_UTILS OFF CACHE BOOL "Build animation utilities.")
set(WEBP_BUILD_CWEBP OFF CACHE BOOL "Build the cwebp command line tool.")
@@ -0,0 +1,21 @@
--- src/laf/cmake/FindSkia.cmake.orig 2022-01-08 02:15:13.417619266 +0100
+++ src/laf/cmake/FindSkia.cmake 2022-01-08 02:15:43.603960491 +0100
@@ -32,14 +32,18 @@
# SkShaper module + freetype + harfbuzz
find_library(SKSHAPER_LIBRARY skshaper PATH "${SKIA_LIBRARY_DIR}")
+if(NOT USE_SHARED_FREETYPE)
set(FREETYPE_FOUND ON)
find_library(FREETYPE_LIBRARY freetype2 PATH "${SKIA_LIBRARY_DIR}" NO_DEFAULT_PATH)
set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARY})
set(FREETYPE_INCLUDE_DIRS "${SKIA_DIR}/third_party/externals/freetype/include")
+endif()
+if(NOT USE_SHARED_HARFBUZZ)
find_library(HARFBUZZ_LIBRARY harfbuzz PATH "${SKIA_LIBRARY_DIR}" NO_DEFAULT_PATH)
set(HARFBUZZ_LIBRARIES ${HARFBUZZ_LIBRARY})
set(HARFBUZZ_INCLUDE_DIRS "${SKIA_DIR}/third_party/externals/harfbuzz/src")
+endif()
set(SKIA_LIBRARIES
${SKIA_LIBRARY}
+137
View File
@@ -0,0 +1,137 @@
{ pkgs }:
let
heidisql-raw = pkgs.stdenv.mkDerivation rec {
pname = "heidisql-raw";
version = "12.17";
src = pkgs.fetchurl {
url = "https://github.com/HeidiSQL/HeidiSQL/releases/download/${version}/heidisql_${version}_amd64.deb";
sha256 = "sha256-RCuJzyw+53OcUYfvodXHaZPy0w6Pxn3a2Wan06feTQw=";
};
qt6pas_deb = pkgs.fetchurl {
url = "http://ftp.debian.org/debian/pool/main/libq/libqt6pas/libqt6pas6_2.4_amd64.deb";
sha256 = "sha256-vKfT4Xie/hDrFAUMDI3bvk4k8QGx14JjgJRa1iG2M2w=";
};
nativeBuildInputs = [
pkgs.dpkg
pkgs.autoPatchelfHook
pkgs.qt6.wrapQtAppsHook
];
buildInputs = [
pkgs.qt6.qtbase
pkgs.libx11
pkgs.glib
pkgs.mariadb-connector-c
pkgs.postgresql.lib
pkgs.sqlite
];
dontWrapQtApps = true;
unpackPhase = ''
dpkg-deb -x $src .
dpkg-deb -x ${qt6pas_deb} qt6pas_ext
'';
installPhase = ''
mkdir -p $out/lib
if [ -d usr ]; then
cp -r usr/* $out/
fi
# Ensure lib exists and copy Pascal-Qt6 bindings.
find qt6pas_ext -name "libQt6Pas.so*" -exec cp {} $out/lib/ \;
# Create library symlinks
ln -s ${pkgs.mariadb-connector-c}/lib/mariadb/libmariadb.so.3 $out/lib/libmariadb.so
ln -s ${pkgs.postgresql.lib}/lib/libpq.so.5 $out/lib/libpq.so
ln -s ${pkgs.sqlite.out}/lib/libsqlite3.so.0 $out/lib/libsqlite3.so
# Link them where the binary is (usually share/heidisql on Linux).
if [ -d $out/share/heidisql ]; then
ln -s $out/lib/libmariadb.so $out/share/heidisql/libmariadb.so
ln -s $out/lib/libpq.so $out/share/heidisql/libpq.so
ln -s $out/lib/libsqlite3.so $out/share/heidisql/libsqlite3.so
fi
'';
};
desktopItem = pkgs.makeDesktopItem {
name = "heidisql";
exec = "heidisql";
icon = "${heidisql-raw}/share/pixmaps/heidisql.png";
comment = "MySQL, MariaDB, PostgreSQL and SQLite manager";
desktopName = "HeidiSQL";
categories = [
"Development"
"Database"
];
};
in
pkgs.buildFHSEnv {
name = "heidisql";
targetPkgs =
pkgs: with pkgs; [
heidisql-raw
mariadb-connector-c
postgresql.lib
sqlite
openssl
zlib
glib
freetype
fontconfig
libglvnd
qt6.qtbase
qt6.qtwayland
libx11
libxext
libxrender
icu
];
extraInstallCommands = ''
mkdir -p $out/share/applications
cp ${desktopItem}/share/applications/* $out/share/applications/
# Only copy icons if they actually exist in the raw build.
if [ -d ${heidisql-raw}/share/icons ]; then
cp -r ${heidisql-raw}/share/icons $out/share/
fi
'';
runScript = pkgs.writeScript "heidisql-wrapper" ''
export LD_LIBRARY_PATH=/usr/lib/heidisql:/usr/lib:/usr/lib64:$LD_LIBRARY_PATH
# NOTE: The original package forces dark mode here, I'm turning this
# off temporarily for testing.
# Force Fusion style but tell it to use Dark Mode.
#export QT_STYLE_OVERRIDE=fusion
#export QT_QPA_PLATFORMTHEME=""
# Set the "Dark" flag for the underlying engine
#export GTK_THEME=Adwaita:dark
#export XDG_CURRENT_DESKTOP=GNOME
# This is the key: Tell Qt to prefer a dark color palette
# and not use the system's broken inheritance.
#export QT_LOGGING_RULES="qt.qpa.gl=true"
# Launch with the Fusion dark palette override
# This ensures text is white and backgrounds are charcoal
#exec heidisql -style fusion "$@"
exec heidisql "$@"
'';
multiPkgs = pkgs: [ pkgs.libGL ];
}
@@ -0,0 +1,25 @@
{
fetchFromGitHub,
rustPlatform,
libseccomp,
libcap_ng,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "virtiofsd";
version = "daea013daf5cdc0adc6ae14de92e3a48ac206eae";
src = fetchFromGitHub {
owner = "ELginas";
repo = "virtiofsd";
rev = "daea013daf5cdc0adc6ae14de92e3a48ac206eae";
hash = "sha256-3p9WoUInWh+fmUkiMCjl2Tygx2/reUyKX+3xvMsW26w=";
};
buildInputs = [
libseccomp
libcap_ng
];
cargoHash = "sha256-rKlm8TpCKc+Nzb9+H0FPs5GSNNjWs5/xNpSd0ZZuQt0=";
})
+292
View File
@@ -0,0 +1,292 @@
[
{
"pname": "Castle.Core",
"version": "4.4.1",
"hash": "sha256-J4NS8p9KqbuLl6JMmNwptsfccH37TfhAhPwX2mVQso0="
},
{
"pname": "CommandLineParser",
"version": "2.9.1",
"hash": "sha256-ApU9y1yX60daSjPk3KYDBeJ7XZByKW8hse9NRZGcjeo="
},
{
"pname": "Config.Net",
"version": "4.19.0",
"hash": "sha256-Nb4ftf+RREzgiVOpc+xSxd4b+PiLGmFQM3okA/wGO54="
},
{
"pname": "goaaats.Steamworks",
"version": "2.3.4",
"hash": "sha256-Wk9arQvVPPeMSgt8lL9rVRVkO1NrBNYzME4ZuOWcHc4="
},
{
"pname": "Hexa.NET.ImGui",
"version": "2.2.9",
"hash": "sha256-hprgiqfXjuQ+I1wMk4+ddFiQ5/r7S1KZNZShU6L5nG8="
},
{
"pname": "Hexa.NET.ImGui.Backends.SDL3",
"version": "1.0.18",
"hash": "sha256-ciEA775X+sjWVT1HAg+7OxThZOrnUKa2/eSfzQtG7GY="
},
{
"pname": "Hexa.NET.SDL3",
"version": "1.2.16",
"hash": "sha256-oSJkPJor4K4KPiN2CC67BCHVxgDXmiCf5GdS9b+JaII="
},
{
"pname": "Hexa.NET.SDL3.Image",
"version": "1.0.0",
"hash": "sha256-SPNwM1w6ksZeZYFrNvforIMvgDIvbj1nRcMDTOA9/Kc="
},
{
"pname": "HexaGen.Runtime",
"version": "1.1.18",
"hash": "sha256-eitF6L6LKuCV2nY2Y0i9kRV+FAiaCbSp6BvSSEpqMrA="
},
{
"pname": "HexaGen.Runtime",
"version": "1.1.21",
"hash": "sha256-OZdIwCjInJ6KAWmPcKs0VN/o4AcY2k427JdtOf9N9Mk="
},
{
"pname": "KeySharp",
"version": "1.0.5",
"hash": "sha256-pJWjjU3AFsnMMX6cUoLUy4wovyfPx4S44Y6coMAGgcU="
},
{
"pname": "Microsoft.CodeAnalysis.Analyzers",
"version": "3.3.3",
"hash": "sha256-pkZiggwLw8k+CVSXKTzsVGsT+K49LxXUS3VH5PNlpCY="
},
{
"pname": "Microsoft.CodeAnalysis.BannedApiAnalyzers",
"version": "3.3.4",
"hash": "sha256-YPTHTZ8xRPMLADdcVYRO/eq3O9uZjsD+OsGRZE+0+e8="
},
{
"pname": "Microsoft.CodeAnalysis.BannedApiAnalyzers",
"version": "4.14.0",
"hash": "sha256-f7svtnkq4xLTjGVj6kNZ1ZGFCV/RESsM+GJZmEpezh4="
},
{
"pname": "Microsoft.CodeAnalysis.Common",
"version": "4.0.1",
"hash": "sha256-SU1WPMlg2245w9BFhS3GHtEEbus+tVAYaemHCW3Ysis="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp",
"version": "4.0.1",
"hash": "sha256-i6XtEcymf17CcDkiEFZ6zSuLJdlEt3aZ2oLf81x00sA="
},
{
"pname": "Microsoft.CodeAnalysis.NetAnalyzers",
"version": "10.0.101",
"hash": "sha256-7rrB4tBiF3t+yoHcg170KlypFS/Z7xAPOM9OQZOs1Yg="
},
{
"pname": "Microsoft.CodeAnalysis.NetAnalyzers",
"version": "9.0.0",
"hash": "sha256-UBTANXmzAS6KuCKDIGhi0MGphAI83FizpRCPebqJ9GE="
},
{
"pname": "Microsoft.NETCore.Platforms",
"version": "1.1.0",
"hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM="
},
{
"pname": "Microsoft.Win32.Registry",
"version": "6.0.0-preview.5.21301.5",
"hash": "sha256-7Fu8oYHKsOxecDC7wT0aJR/GOPaq9W1k0SgKa5AW4Qg="
},
{
"pname": "Microsoft.Win32.SystemEvents",
"version": "6.0.0",
"hash": "sha256-N9EVZbl5w1VnMywGXyaVWzT9lh84iaJ3aD48hIBk1zA="
},
{
"pname": "NETStandard.Library",
"version": "1.6.1",
"hash": "sha256-iNan1ix7RtncGWC9AjAZ2sk70DoxOsmEOgQ10fXm4Pw="
},
{
"pname": "NETStandard.Library",
"version": "2.0.3",
"hash": "sha256-Prh2RPebz/s8AzHb2sPHg3Jl8s31inv9k+Qxd293ybo="
},
{
"pname": "Newtonsoft.Json",
"version": "13.0.3",
"hash": "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc="
},
{
"pname": "PInvoke.Kernel32",
"version": "0.7.124",
"hash": "sha256-E65U364mp9V8SzkT2/oVg1f0Ts9Q1deRLeOUK3QhIlg="
},
{
"pname": "PInvoke.Windows.Core",
"version": "0.7.124",
"hash": "sha256-n/7Y6MkUVYr1bgT8OUkl0YpOd5AFgzHEUlEN+EKyE5s="
},
{
"pname": "Serilog",
"version": "4.0.0",
"hash": "sha256-j8hQ5TdL1TjfdGiBO9PyHJFMMPvATHWN1dtrrUZZlNw="
},
{
"pname": "Serilog",
"version": "4.1.0",
"hash": "sha256-r89nJ5JE5uZlsRrfB8QJQ1byVVfCWQbySKQ/m9PYj0k="
},
{
"pname": "Serilog",
"version": "4.2.0",
"hash": "sha256-7f3EpCsEbDxXgsuhE430KVI14p7oDUuCtwRpOCqtnbs="
},
{
"pname": "Serilog",
"version": "4.3.0",
"hash": "sha256-jyIy4BjsyFXge3aO4GRFAdnX4/rz1MHfBkBDIpCDsTw="
},
{
"pname": "Serilog.Enrichers.Sensitive",
"version": "1.7.3",
"hash": "sha256-1HnnaGEwTiDo11w5wWdjDxNxVO4WLFBnAggxmyZCYIg="
},
{
"pname": "Serilog.Enrichers.Thread",
"version": "4.0.0",
"hash": "sha256-lo+3ohNHKe/hTq9vGbk29p/OWcNlcyJToGL6EpCJQm8="
},
{
"pname": "Serilog.Sinks.Async",
"version": "2.1.0",
"hash": "sha256-LDoLpXkleD2MVPK2KBsLGRf5yqrwckBiAnYDbuIbaUM="
},
{
"pname": "Serilog.Sinks.Console",
"version": "6.0.0",
"hash": "sha256-QH8ykDkLssJ99Fgl+ZBFBr+RQRl0wRTkeccQuuGLyro="
},
{
"pname": "Serilog.Sinks.Debug",
"version": "3.0.0",
"hash": "sha256-7/LmoRF1rUDFhJ47bTRQQFRgSHnZDO8484r3sCGqYvE="
},
{
"pname": "Serilog.Sinks.File",
"version": "6.0.0",
"hash": "sha256-KQmlUpG9ovRpNqKhKe6rz3XMLUjkBqjyQhEm2hV5Sow="
},
{
"pname": "Serilog.Sinks.File",
"version": "7.0.0",
"hash": "sha256-LxZYUoUPkCjIIVarJilnXnqQiMrFNJtoRilmzTNtUjo="
},
{
"pname": "SharedMemory",
"version": "2.3.2",
"hash": "sha256-HFW3T9erIDZnjO7qldQx5eRbsib52MSYdOIiCZZSGB0="
},
{
"pname": "System.Buffers",
"version": "4.5.1",
"hash": "sha256-wws90sfi9M7kuCPWkv1CEYMJtCqx9QB/kj0ymlsNaxI="
},
{
"pname": "System.Collections.Immutable",
"version": "5.0.0",
"hash": "sha256-GdwSIjLMM0uVfE56VUSLVNgpW0B//oCeSFj8/hSlbM8="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "6.0.0",
"hash": "sha256-fPV668Cfi+8pNWrvGAarF4fewdPVEDwlJWvJk0y+Cms="
},
{
"pname": "System.Drawing.Common",
"version": "6.0.0",
"hash": "sha256-/9EaAbEeOjELRSMZaImS1O8FmUe8j4WuFUw1VOrPyAo="
},
{
"pname": "System.Memory",
"version": "4.5.4",
"hash": "sha256-3sCEfzO4gj5CYGctl9ZXQRRhwAraMQfse7yzKoRe65E="
},
{
"pname": "System.Memory",
"version": "4.6.0",
"hash": "sha256-OhAEKzUM6eEaH99DcGaMz2pFLG/q/N4KVWqqiBYUOFo="
},
{
"pname": "System.Numerics.Vectors",
"version": "4.4.0",
"hash": "sha256-auXQK2flL/JpnB/rEcAcUm4vYMCYMEMiWOCAlIaqu2U="
},
{
"pname": "System.Reflection.Emit.Lightweight",
"version": "4.7.0",
"hash": "sha256-V0Wz/UUoNIHdTGS9e1TR89u58zJjo/wPUWw6VaVyclU="
},
{
"pname": "System.Reflection.Metadata",
"version": "5.0.0",
"hash": "sha256-Wo+MiqhcP9dQ6NuFGrQTw6hpbJORFwp+TBNTq2yhGp8="
},
{
"pname": "System.Runtime.CompilerServices.Unsafe",
"version": "4.5.2",
"hash": "sha256-8eUXXGWO2LL7uATMZye2iCpQOETn2jCcjUhG6coR5O8="
},
{
"pname": "System.Runtime.CompilerServices.Unsafe",
"version": "4.5.3",
"hash": "sha256-lnZMUqRO4RYRUeSO8HSJ9yBHqFHLVbmenwHWkIU20ak="
},
{
"pname": "System.Runtime.CompilerServices.Unsafe",
"version": "5.0.0",
"hash": "sha256-neARSpLPUzPxEKhJRwoBzhPxK+cKIitLx7WBYncsYgo="
},
{
"pname": "System.Security.AccessControl",
"version": "6.0.0-preview.5.21301.5",
"hash": "sha256-/rXZ6FJNEN3EuqOsCgCuypBOpA0hQyYIQXbsGccfLow="
},
{
"pname": "System.Security.Cryptography.ProtectedData",
"version": "6.0.0",
"hash": "sha256-Wi9I9NbZlpQDXgS7Kl06RIFxY/9674S7hKiYw5EabRY="
},
{
"pname": "System.Security.Permissions",
"version": "6.0.0",
"hash": "sha256-/MMvtFWGN/vOQfjXdOhet1gsnMgh6lh5DCHimVsnVEs="
},
{
"pname": "System.Security.Principal.Windows",
"version": "6.0.0-preview.5.21301.5",
"hash": "sha256-p0ROK7zJPz4EmNdjgAz2eX8dOMVHhpvQLTU7JveMceA="
},
{
"pname": "System.Text.Encoding.CodePages",
"version": "4.5.1",
"hash": "sha256-PIhkv59IXjyiuefdhKxS9hQfEwO9YWRuNudpo53HQfw="
},
{
"pname": "System.Text.Json",
"version": "9.0.2",
"hash": "sha256-kftKUuGgZtF4APmp77U79ws76mEIi+R9+DSVGikA5y8="
},
{
"pname": "System.Threading.Tasks.Extensions",
"version": "4.5.4",
"hash": "sha256-owSpY8wHlsUXn5xrfYAiu847L6fAKethlvYx97Ri1ng="
},
{
"pname": "System.Windows.Extensions",
"version": "6.0.0",
"hash": "sha256-N+qg1E6FDJ9A9L50wmVt3xPQV8ZxlG1xeXgFuxO+yfM="
}
]
+140
View File
@@ -0,0 +1,140 @@
{
lib,
buildDotnetModule,
fetchFromGitHub,
dotnetCorePackages,
sdl3,
libdecor,
libsecret,
glib,
gnutls,
aria2,
steam,
gst_all_1,
copyDesktopItems,
makeDesktopItem,
makeWrapper,
useSteamRun ? true,
}:
let
rev = "1.4.0";
in
buildDotnetModule rec {
pname = "XIVLauncher";
version = rev;
src = fetchFromGitHub {
owner = "goatcorp";
repo = "XIVLauncher.Core";
inherit rev;
hash = "sha256-kEMqqwlp+ZHjrEz6K7nYXyi0L8VAy1rHW2bOHEk1F6M=";
fetchSubmodules = true;
};
patches = [ ./patches/no-check-wine64.patch ];
nativeBuildInputs = [
copyDesktopItems
makeWrapper
];
buildInputs = with gst_all_1; [
gstreamer
gst-plugins-base
gst-plugins-good
gst-plugins-bad
gst-plugins-ugly
gst-libav
];
projectFile = "src/XIVLauncher.Core/XIVLauncher.Core.csproj";
# File generated with `nix-build -A xivlauncher.passthru.fetch-deps`.
nugetDeps = ./deps.json;
# Please do not unpin these even if they match the defaults, xivlauncher is sensitive to .NET versions.
dotnet-sdk =
with dotnetCorePackages;
sdk_10_0
// {
inherit (sdk_9_0)
packages
targetPackages
;
};
dotnetFlags = [
"-p:BuildHash=${rev}"
"-p:PublishSingleFile=false"
];
postPatch = ''
substituteInPlace lib/FFXIVQuickLauncher/src/XIVLauncher.Common/Game/Patch/Acquisition/Aria/AriaPatchAcquisition.cs \
--replace-fail 'ariaPath = "aria2c"' 'ariaPath = "${aria2}/bin/aria2c"'
'';
postInstall = ''
mkdir -p $out/share/pixmaps
cp src/XIVLauncher.Core/Resources/logo.png $out/share/pixmaps/xivlauncher.png
'';
postFixup =
lib.optionalString useSteamRun (
let
steam-run =
(steam.override {
extraPkgs = pkgs: [ pkgs.libunwind ];
extraProfile = ''
unset TZ
'';
}).run;
in
''
substituteInPlace $out/bin/XIVLauncher.Core \
--replace-fail 'exec' 'exec ${steam-run}/bin/steam-run'
''
)
+ ''
wrapProgram $out/bin/XIVLauncher.Core --prefix GST_PLUGIN_SYSTEM_PATH_1_0 ":" "$GST_PLUGIN_SYSTEM_PATH_1_0"
# The reference to aria2 gets mangled as UTF-16LE and isn't detectable by nix: https://github.com/NixOS/nixpkgs/issues/220065
mkdir -p $out/nix-support
echo ${aria2} >> $out/nix-support/depends
'';
executables = [ "XIVLauncher.Core" ];
runtimeDeps = [
sdl3
libdecor
libsecret
glib
gnutls
];
desktopItems = [
(makeDesktopItem {
name = "xivlauncher";
exec = "XIVLauncher.Core";
icon = "xivlauncher";
desktopName = "XIVLauncher";
comment = meta.description;
categories = [ "Game" ];
startupWMClass = "XIVLauncher.Core";
})
];
meta = {
description = "Custom launcher for FFXIV";
homepage = "https://github.com/goatcorp/XIVLauncher.Core";
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [
blooym
keysmashes
witchof0x20
];
platforms = [ "x86_64-linux" ];
mainProgram = "XIVLauncher.Core";
};
}
@@ -0,0 +1,26 @@
diff --git a/src/XIVLauncher.Common.Unix/Compatibility/CompatibilityTools.cs b/src/XIVLauncher.Common.Unix/Compatibility/CompatibilityTools.cs
index 864000f..510e4ff 100644
--- a/src/XIVLauncher.Common.Unix/Compatibility/CompatibilityTools.cs
+++ b/src/XIVLauncher.Common.Unix/Compatibility/CompatibilityTools.cs
@@ -28,7 +28,7 @@ public class CompatibilityTools
private string WineBinPath => Settings.StartupType == WineStartupType.Managed ?
Path.Combine(wineDirectory.FullName, Settings.Release.Name, "bin") :
Settings.CustomBinPath;
- private string Wine64Path => Path.Combine(WineBinPath, "wine64");
+ private string Wine64Path => Path.Combine(WineBinPath, "wine");
private string WineServerPath => Path.Combine(WineBinPath, "wineserver");
private readonly DxvkVersion dxvkVersion;
diff --git a/src/XIVLauncher.Core/Components/MainPage/MainPage.cs b/src/XIVLauncher.Core/Components/MainPage/MainPage.cs
index 3943c15..ee44782 100644
--- a/src/XIVLauncher.Core/Components/MainPage/MainPage.cs
+++ b/src/XIVLauncher.Core/Components/MainPage/MainPage.cs
@@ -688,7 +688,7 @@ public class MainPage : Page
else if (!Directory.Exists(App.Settings.WineBinaryPath))
throw new InvalidOperationException("Custom wine binary path is invalid: no such directory.\n" +
"Check path carefully for typos: " + App.Settings.WineBinaryPath);
- else if (!File.Exists(Path.Combine(App.Settings.WineBinaryPath, "wine64")))
+ else if (!File.Exists(Path.Combine(App.Settings.WineBinaryPath, "wine")))
throw new InvalidOperationException("Custom wine binary path is invalid: no wine64 found at that location.\n" +
"Check path carefully for typos: " + App.Settings.WineBinaryPath);