1 Commits

Author SHA1 Message Date
dependabot[bot]
ea719d0906 Bump cachix/cachix-action from 15 to 16
Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from 15 to 16.
- [Release notes](https://github.com/cachix/cachix-action/releases)
- [Commits](https://github.com/cachix/cachix-action/compare/v15...v16)

---
updated-dependencies:
- dependency-name: cachix/cachix-action
  dependency-version: '16'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-05 07:26:13 +00:00
33 changed files with 24 additions and 1909 deletions

View File

@@ -9,7 +9,7 @@ on:
# rebuild everyday at 2:51
# TIP: Choose a random time here so not all repositories are build at once:
# https://www.random.org/clock-times/?num=1&earliest=01%3A00&latest=08%3A00&interval=5&format=html&rnd=new
- cron: '55 3 * * *'
- cron: '51 2 * * *'
workflow_dispatch:
jobs:
tests:
@@ -36,14 +36,14 @@ jobs:
- sydpkgs
nixPath:
- nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/heads/nixpkgs-unstable.tar.gz
# - nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-unstable.tar.gz
# - nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-24.05.tar.gz
- nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-unstable.tar.gz
- nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-24.05.tar.gz
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install nix
uses: cachix/install-nix-action@v31
uses: cachix/install-nix-action@v30
with:
nix_path: "${{ matrix.nixPath }}"
extra_nix_config: |
@@ -52,7 +52,7 @@ jobs:
- name: Show nixpkgs version
run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'
- name: Setup cachix
uses: cachix/cachix-action@v15
uses: cachix/cachix-action@v16
# Don't replace <YOUR_CACHIX_NAME> here!
if: ${{ matrix.cachixName != '<YOUR_CACHIX_NAME>' }}
with:

2
.gitignore vendored
View File

@@ -1,5 +1,3 @@
result
result-*
slippi-ld-log.*

6
flake.lock generated
View File

@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1776329215,
"narHash": "sha256-a8BYi3mzoJ/AcJP8UldOx8emoPRLeWqALZWu4ZvjPXw=",
"lastModified": 1712449641,
"narHash": "sha256-U9DDWMexN6o5Td2DznEgguh8TRIUnIl9levmit43GcI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b86751bc4085f48661017fa226dee99fab6c651b",
"rev": "600b15aea1b36eeb43833a50b0e96579147099ff",
"type": "github"
},
"original": {

View File

@@ -5,21 +5,19 @@
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
outputs = inputs@{ self, ... }:
outputs = { self, nixpkgs }:
let
lib = inputs.nixpkgs.lib;
forAllSystems = lib.genAttrs lib.systems.flakeExposed;
in {
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
in
{
legacyPackages = forAllSystems (system: import ./default.nix {
pkgs = import inputs.nixpkgs { inherit system; };
pkgs = import nixpkgs { inherit system; };
});
packages =
forAllSystems (system:
lib.filterAttrs
(_: v: lib.isDerivation v)
nixpkgs.lib.filterAttrs
(_: v: nixpkgs.lib.isDerivation v)
self.legacyPackages.${system});
overlays.default = import ./overlay.nix;
};
}

View File

@@ -7,6 +7,7 @@ let
isReserved = n: n == "lib" || n == "overlays" || n == "modules";
nameValuePair = n: v: { name = n; value = v; };
nurAttrs = import ./default.nix { pkgs = super; };
in
builtins.listToAttrs
(map (n: nameValuePair n nurAttrs.${n})

View File

@@ -1,39 +0,0 @@
{ cmake
, stdenv
, fetchFromGitHub
, lib
}:
stdenv.mkDerivation (finalAttrs: {
pname = "bdwgc";
version = "8.2.12";
src = fetchFromGitHub {
owner = "bdwgc";
repo = "bdwgc";
tag = "v${finalAttrs.version}";
hash = "sha256-5yeAB5Y92YjOutwRXBJkMxoOLkmzmqIJs4PirKX89fE=";
};
nativeBuildInputs = [
cmake
];
meta = {
homepage = "https://www.hboehm.info/gc/";
description = ''
The Boehm-Demers-Weiser conservative C/C++ Garbage Collector
(bdwgc, also known as bdw-gc, boehm-gc, libgc)
'';
longDescription = ''
This is a garbage collecting storage allocator that is intended
to be used as a plug-in replacement for C's malloc.
Since the collector does not require pointers to be tagged, it
does not attempt to ensure that all inaccessible storage is
reclaimed. However, in our experience, it is typically more
successful at reclaiming unused memory than most C programs
using explicit deallocation. Unlike manually introduced leaks,
the amount of unreclaimed memory typically stays bounded.
'';
license = lib.licenses.mit;
platforms = lib.platforms.all;
};
})

View File

@@ -1,14 +0,0 @@
{ dolphin-emu, fetchFromGitHub }:
dolphin-emu.overrideAttrs (prev: final: {
pname = "Dolphin-MPN";
version = "0712d84";
src = fetchFromGitHub {
owner = "MarioPartyNetplay";
repo = "Dolphin-MPN";
rev = "0712d84c74f696791acf02df4c22e88741665da6";
hash = "sha256-dhcLJCQzd7a0l3AVFFVxfQ95sVql5N4e63xdvl7h9uc=";
fetchSubmodules = true;
};
meta.broken = true;
})

View File

@@ -6,12 +6,7 @@
, ansilove
}:
# We use `fix` explicitly since `buildPythonApplication` rejects the typical
# stdenv.mkDerivation (finalAttrs: {
# ...
# })
# syntax.
python3Packages.buildPythonApplication (lib.fix (finalAttrs: {
python3Packages.buildPythonApplication rec {
pname = "durdraw";
version = "0.29.0";
pyproject = true;
@@ -19,20 +14,15 @@ python3Packages.buildPythonApplication (lib.fix (finalAttrs: {
src = fetchFromGitHub {
owner = "cmang";
repo = "durdraw";
rev = finalAttrs.version;
rev = version;
hash = "sha256-a+4DGWBD5XLaNAfTN/fmI/gALe76SCoWrnjyglNhVPY=";
};
build-system = [
python3Packages.setuptools
build-system = with python3Packages; [
setuptools
];
dependencies =
lib.optionals withGifExport finalAttrs.optional-dependencies.gif-export;
optional-dependencies.gif-export = [
python3Packages.pillow
];
dependencies = [];
nativeBuildInputs = [
makeWrapper
@@ -44,15 +34,13 @@ python3Packages.buildPythonApplication (lib.fix (finalAttrs: {
'';
meta = {
changelog =
"https://github.com/cmang/durdraw/releases/tag/${finalAttrs.version}";
changelog = "https://github.com/cmang/durdraw/releases/tag/${version}";
description = ''
Versatile ASCII and ANSI Art text editor for drawing in the
Linux/Unix/macOS terminal, with animation, 256 and 16 colors, Unicode and
CP437, and customizable themes.
'';
homepage = "https://durdraw.org";
homepage = "https://github.com/cmang/durdraw/";
license = lib.licenses.bsd3;
mainProgram = "durdraw";
};
}))
}

View File

@@ -1,41 +0,0 @@
{ stdenv
, fetchFromGitHub
, kdePackages
, python3
, libime
, lib
}:
stdenv.mkDerivation {
pname = "fcitx5-toki-pona";
version = "git";
src = fetchFromGitHub {
owner = "msyds";
repo = "fcitx5-toki-pona";
rev = "4b4314d642c647bc714c8876460b6779facda89c";
# rev = "icons";
hash = "sha256-5Keg+7AYkELYAlJkPszcjHgJ6TwBxnwNd3cpxSOEbGc=";
};
# src = /home/msyds/git/fcitx5-toki-pona;
buildInputs = [
kdePackages.fcitx5-chinese-addons
];
nativeBuildInputs = [
python3
libime
];
buildPhase = ''
runHook preBuild
python3 combine.py
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -Dm644 -t $out/share/fcitx5/table table/*
install -Dm644 -t $out/share/fcitx5/inputmethod confs/*
find icons -name '*.png' -exec install -Dm644 {} "$out/share/{}" \;
runHook postInstall
'';
}

View File

@@ -1,30 +0,0 @@
{ haskell
, stdenv
, fetchFromGitHub
, gf-pgf
, applyPatches
, compiler ? "ghc98"
}:
let
version = "3.12";
src = applyPatches rec {
src = fetchFromGitHub {
owner = "GrammaticalFramework";
repo = "gf-core";
rev = "release-${version}";
hash = "sha256-9sB8tt2eOJT43kv2eaUYRQCzyBZOp6HvJdgGJQgiqks=";
};
patches = [
"${src}/nix/expose-all.patch"
"${src}/nix/revert-new-cabal-madness.patch"
./fix-cabal-syntax-error.patch
];
};
hpkgs = haskell.packages.${compiler};
pkg = hpkgs.callCabal2nixWithOptions "gf" src "--flag=-server" {};
in haskell.lib.overrideCabal pkg (prev: {
jailbreak = true;
configureFlags = [ "-f" "c-runtime" ];
librarySystemDepends = [ gf-pgf ];
})

View File

@@ -1,13 +0,0 @@
diff --git a/src/runtime/haskell-bind/pgf2.cabal b/src/runtime/haskell-bind/pgf2.cabal
index d7a98489e..3ca7e816c 100644
--- a/src/runtime/haskell-bind/pgf2.cabal
+++ b/src/runtime/haskell-bind/pgf2.cabal
@@ -15,7 +15,7 @@ homepage: https://www.grammaticalframework.org/
bug-reports: https://github.com/GrammaticalFramework/gf-core/issues
author: Krasimir Angelov
extra-source-files: CHANGELOG.md, README.md
-tested-with: GHC==7.10.3, GHC==8.0.2, GHC==8.10.4, GHC=9.6.6
+tested-with: GHC==7.10.3, GHC==8.0.2, GHC==8.10.4, GHC==9.6.6
library
exposed-modules:

View File

@@ -1,11 +0,0 @@
{ gf-core
, stdenv
, autoreconfHook
}:
stdenv.mkDerivation {
pname = "gf-pgf";
inherit (gf-core) version meta;
src = "${gf-core.src}/src/runtime/c";
nativeBuildInputs = [autoreconfHook ];
}

View File

@@ -1,25 +0,0 @@
{ stdenv
, ghc
, gf-core
, fetchFromGitHub
}:
stdenv.mkDerivation (finalAttrs: {
name = "gf-rgl";
version = "20250812";
src = fetchFromGitHub {
owner = "GrammaticalFramework";
repo = "gf-rgl";
tag = finalAttrs.version;
hash = "sha256-rqN5MV/XxChXC+Vs4aLIhRtyPQZNk0LQZ2TCdbd6wUw=";
};
buildInputs = [ ghc gf-core ];
LC_ALL = "C.UTF-8";
buildPhase = ''
runghc Setup.hs build
'';
installPhase = ''
mkdir -p $out/share/gf/lib
runghc Setup.hs copy --dest=$out/share/gf/lib
'';
})

View File

@@ -1,4 +0,0 @@
# Alias for `gf-core`
{ gf-core }:
gf-core

View File

@@ -1,22 +0,0 @@
{ lib
, stdenv
, gf-core
, makeWrapper
, runCommandLocal
}:
packages:
let
opts = {
passthru = {
preferLocalBuild = true;
inherit (gf-core) version meta;
};
};
paths = lib.makeSearchPath "share/gf/lib" packages;
in runCommandLocal "gf-with-rgl" opts ''
. ${makeWrapper}/nix-support/setup-hook
makeWrapper ${gf-core}/bin/gf $out/bin/gf \
--prefix GF_LIB_PATH : ${paths}
''

View File

@@ -1,26 +0,0 @@
{ gf-core
, breakpointHook
, fetchFromGitHub
, compiler ? "ghc98"
, haskell
, pgf2-haskell
, gf-pgf
}:
let
src = fetchFromGitHub {
owner = "GrammaticalFramework";
repo = "gftest";
rev = "ef7c99143d84a29fb28bbc464f661566d44a6130";
hash = "sha256-t/LaG5+bdv7f0URcn/aFx6nUIvxSSEbpWeZS92/Gbog=";
};
hpkgs = haskell.packages.${compiler}.extend (final: prev: {
# PGF2, the Haskell bindings to the C library.
pgf2 = pgf2-haskell.override { inherit compiler; };
});
pkg = hpkgs.callCabal2nix "gftest" src {};
in pkg.overrideAttrs (final: prev: {
nativeBuildInputs = (prev.nativeBuildInputs or []) ++ [
breakpointHook
];
})

View File

@@ -1,30 +0,0 @@
{ stdenvNoCC
, fetchFromGitHub
, lib
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "iropke-batang";
version = "1.2";
src = fetchFromGitHub {
owner = "iropke";
repo = "font-iropke-batang";
rev = "v${finalAttrs.version}";
hash = "sha256-wsu7JK0hHYn9aegaMeNV9fWvQ6KoMzHwOFWymWHYvxo=";
};
installPhase = ''
runHook preInstall
find . -type f -name '*.otf' \
-exec install -Dm644 {} -t $out/share/fonts/opentype \;
runHook postInstall
'';
meta = {
description = "Korean serif font";
homepage = "http://font.iropke.com/batang/";
changelog = "https://github.com/iropke/font-iropke-batang/releases";
license = lib.licenses.ofl;
platforms = lib.platforms.all;
};
})

View File

@@ -1,46 +0,0 @@
{ wine
, stdenv
, makeWrapper
, lib
}:
stdenv.mkDerivation (final: {
pname = "moresampler";
version = "0.8.4";
src = ./moresampler-${final.version}.tar.gz;
nativeBuildInputs = [
makeWrapper
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/opt/moresampler
mv moresampler.exe moreconfig.txt $out/opt/moresampler/
cat > $out/bin/moresampler << EOF
#!/usr/bin/env bash
LANG=ja_JP.UTF8 "${lib.getExe wine}" \
"$out/opt/moresampler/moresampler.exe" "\''${@,-1}"
EOF
chmod +x $out/bin/moresampler
runHook postInstall
'';
meta = {
description = "Synthesis backend for singing voice synthesis program UTAU";
longDescription = ''
Moresampler is a synthesis backend for singing voice synthesis program
UTAU. Literally the name suggests that Moresampler is not only a UTAU
resampler. In fact, it is a resampler, a wavtool and an automatic
voicebank configurator combined in one executable.
'';
license = lib.licenses.unfree;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
})

View File

@@ -1,19 +0,0 @@
{ haskell
, compiler ? "ghc96"
, gf-pgf
, gf-core
, breakpointHook
}:
let
src = "${gf-core.src}/src/runtime/haskell-bind";
hpkgs = haskell.packages.${compiler};
pkg = hpkgs.callCabal2nix "pgf2" src {
# gf-pgf provides both libpgf and libgu.
gu = gf-pgf;
};
in haskell.lib.overrideCabal pkg (prev: {
librarySystemDepends = (prev.librarySystemDepends or []) ++ [
gf-pgf
];
})

View File

@@ -1,30 +0,0 @@
{ stdenv
, ncurses
, fetchFromGitHub
, breakpointHook
}:
stdenv.mkDerivation {
pname = "progressbar";
version = "ac56232";
src = fetchFromGitHub {
owner = "doches";
repo = "progressbar";
rev = "ac56232610abf58cc2db2bc86efc8fcba7dfe8c2";
hash = "sha256-fgVIQAAtL5wSuWhGSKOTmlS2gvigInDqzfpILtGplLM";
};
nativeBuildInputs = [
ncurses.dev
breakpointHook
];
buildInputs = [
ncurses
];
outputs = [ "out" "dev" ];
installPhase = ''
runHook preInstall
install -Dm644 -t $out/lib libprogressbar.{so,a}
install -Dm644 -t $dev/include/progressbar include/progressbar/*.h
runHook postInstall
'';
}

View File

@@ -1,73 +0,0 @@
{ stdenv
, fetchNpmDeps
, fetchFromGitHub
, fetchzip
, fetchurl
, lib
, imagemagick
, nodejs_20
}:
let
vendoredKatex = fetchzip {
url = "https://github.com/KaTeX/KaTeX/releases/download/v0.16.9/katex.zip";
hash = "sha256-Nca52SW4Q0P5/fllDFQEaOQyak7ojCs0ShlqJ1mWZOM=";
};
vendoredWorkbox = fetchurl {
url = "https://storage.googleapis.com/workbox-cdn/releases/7.0.0/workbox-window.prod.mjs";
hash = "sha256-YR3m/DqqF+yahPQAk/2k0yRmdoYtQNBEHsL6fQTDmlc=";
};
vendoredWorkboxMap = fetchurl {
url = "https://storage.googleapis.com/workbox-cdn/releases/7.0.0/workbox-window.prod.mjs.map";
hash = "sha256-tUBiVoiKi3OCT+wctUYl0FVnT7StsGBDx7EzculcF5I=";
};
rev = "1816fb788e4d315bf1dc30053a5e1646eb0af9b8";
in stdenv.mkDerivation (final: {
pname = "quiver";
version = lib.substring 0 7 rev;
inherit vendoredKatex vendoredWorkbox vendoredWorkboxMap;
src = fetchFromGitHub {
owner = "varkor";
repo = "quiver";
inherit rev;
hash = "sha256-29x2x0fLemkxhv+85wPnDrrlRW2h5qJtF/QTbGa6ghE=";
};
npmDeps = fetchNpmDeps {
src = "${final.src}/service-worker";
hash = "sha256-1CdgZFvpyJFyh5x9ljTau6vrR7FeHRYZ1MG/ZOEoou8=";
};
preBuild = ''
cp -r $vendoredKatex src/KaTeX
mkdir src/Workbox
cp $vendoredWorkbox src/Workbox/workbox-window.prod.mjs
cp $vendoredWorkboxMap src/Workbox/workbox-window.prod.mjs.map
'';
buildPhase = ''
runHook preBuild
pushd service-worker
npm install --cache $npmDeps
node build.js
popd
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/opt
cp -r src $out/opt/quiver
runHook postInstall
'';
nativeBuildInputs = [
imagemagick
];
buildInputs = [
nodejs_20
];
meta = {
description = ''
A modern commutative diagram editor for the web.
'';
homepage = "https://q.uiver.app/";
license = lib.licenses.mit;
platforms = lib.platforms.unix;
};
})

View File

@@ -1,162 +0,0 @@
{
lib,
buildDotnetModule,
cctools,
darwin,
dotnetCorePackages,
fetchFromForgejo,
libX11,
libgdiplus,
moltenvk,
ffmpeg,
openal,
libsoundio,
sndio,
stdenv,
pulseaudio,
vulkan-loader,
glew,
libGL,
libICE,
libSM,
libXcursor,
libXext,
libXi,
libXrandr,
udev,
SDL2,
SDL2_mixer,
gtk3,
wrapGAppsHook3,
}:
buildDotnetModule rec {
pname = "ryubing";
version = "1.3.4";
src = fetchFromForgejo {
domain = "git.ryujinx.app";
owner = "Ryubing";
repo = "Ryujinx";
rev = "433dd58f8ce2fca3df3fa8b20bef7f003fc5a2a9";
hash = "sha256-yLf0NkdZvGNI7bbzx3Qursk3rDy5UUK8nFH9pp3wYm4=";
};
nativeBuildInputs =
lib.optional stdenv.hostPlatform.isLinux [
wrapGAppsHook3
]
++ lib.optional stdenv.hostPlatform.isDarwin [
cctools
darwin.sigtool
];
enableParallelBuilding = false;
dotnet-sdk = dotnetCorePackages.dotnet_10.sdk;
dotnet-runtime = dotnetCorePackages.dotnet_10.runtime;
nugetDeps = ./deps.json;
runtimeDeps = [
libX11
libgdiplus
SDL2_mixer
openal
libsoundio
sndio
vulkan-loader
ffmpeg
# Avalonia UI
glew
libICE
libSM
libXcursor
libXext
libXi
libXrandr
gtk3
# Headless executable
libGL
SDL2
]
++ lib.optional (!stdenv.hostPlatform.isDarwin) [
udev
pulseaudio
]
++ lib.optional stdenv.hostPlatform.isDarwin [ moltenvk ];
projectFile = "Ryujinx.sln";
testProjectFile = "src/Ryujinx.Tests/Ryujinx.Tests.csproj";
# Tests on Darwin currently fail because of Ryujinx.Tests.Unicorn
doCheck = !stdenv.hostPlatform.isDarwin;
dotnetFlags = [
"/p:ExtraDefineConstants=DISABLE_UPDATER%2CFORCE_EXTERNAL_BASE_DIR"
];
executables = [
"Ryujinx"
];
makeWrapperArgs = lib.optional stdenv.hostPlatform.isLinux [
# Without this Ryujinx fails to start on wayland. See https://github.com/Ryujinx/Ryujinx/issues/2714
"--set SDL_VIDEODRIVER x11"
];
preInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
# workaround for https://github.com/Ryujinx/Ryujinx/issues/2349
mkdir -p $out/lib/sndio-6
ln -s ${sndio}/lib/libsndio.so $out/lib/sndio-6/libsndio.so.6
'';
preFixup = ''
${lib.optionalString stdenv.hostPlatform.isLinux ''
mkdir -p $out/share/{applications,icons/hicolor/scalable/apps,mime/packages}
pushd ${src}/distribution/linux
install -D ./Ryujinx.desktop $out/share/applications/Ryujinx.desktop
install -D ./Ryujinx.sh $out/bin/Ryujinx.sh
install -D ./mime/Ryujinx.xml $out/share/mime/packages/Ryujinx.xml
install -D ../misc/Logo.svg $out/share/icons/hicolor/scalable/apps/Ryujinx.svg
popd
''}
# Don't make a softlink on OSX because of its case insensitivity
${lib.optionalString (!stdenv.hostPlatform.isDarwin) "ln -s $out/bin/Ryujinx $out/bin/ryujinx"}
'';
passthru.updateScript = ./updater.sh;
meta = {
homepage = "https://ryujinx.app";
changelog = "https://git.ryujinx.app/ryubing/ryujinx/-/wikis/changelog";
description = "Experimental Nintendo Switch Emulator written in C# (community fork of Ryujinx)";
longDescription = ''
Ryujinx is an open-source Nintendo Switch emulator, created by gdkchan,
written in C#. This emulator aims at providing excellent accuracy and
performance, a user-friendly interface and consistent builds. It was
written from scratch and development on the project began in September
2017. The project has since been abandoned on October 1st 2024 and QoL
updates are now managed under a fork.
'';
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
jk
artemist
willow
];
platforms = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
mainProgram = "Ryujinx";
};
}

View File

@@ -1,793 +0,0 @@
[
{
"pname": "Avalonia",
"version": "11.3.12",
"hash": "sha256-T2y8aoKUSfXqmV2RL1QStytzJkc/SZYfIdJihB5UWR0="
},
{
"pname": "Avalonia.Angle.Windows.Natives",
"version": "2.1.25547.20250602",
"hash": "sha256-LE/lENAHptmz6t3T/AoJwnhpda+xs7PqriNGzdcfg8M="
},
{
"pname": "Avalonia.BuildServices",
"version": "11.3.2",
"hash": "sha256-6wx06tjSKWQOlX2czdp6Wh0nuwVapx5qf/s8Qj5we40="
},
{
"pname": "Avalonia.Controls.ColorPicker",
"version": "11.3.10",
"hash": "sha256-d8VTsT6yYAa8uZAodX7SWgf4+izVHrP/hy/pDpT91Wk="
},
{
"pname": "Avalonia.Controls.ColorPicker",
"version": "11.3.12",
"hash": "sha256-zNpmfOTfw+gKZp8VPpfHe2hjqhrRmExf7lxqLf5OvDg="
},
{
"pname": "Avalonia.Controls.DataGrid",
"version": "11.3.12",
"hash": "sha256-xuAL5FOvonyaY9CwEhjtMnurPcA0lYe0dyLLK0GEzd8="
},
{
"pname": "Avalonia.Desktop",
"version": "11.3.12",
"hash": "sha256-IY6TkpVh0GiCkKbestdwH8KEJ0Embxy+JYe7lww0xBA="
},
{
"pname": "Avalonia.Diagnostics",
"version": "11.3.12",
"hash": "sha256-iDH6DjRKqm4YLXBq2JGg9IkkEGm3Rq1FQWyr/L+VaVA="
},
{
"pname": "Avalonia.FreeDesktop",
"version": "11.3.12",
"hash": "sha256-NTcYVHn13lFQjTNezmpmPGjxsBzryXorK0K6hl4ZZto="
},
{
"pname": "Avalonia.Markup.Xaml.Loader",
"version": "11.3.12",
"hash": "sha256-Ch2G7HQcj50dkr2fw1PhB9SPctUVdnhhKckj42YFykY="
},
{
"pname": "Avalonia.Native",
"version": "11.3.12",
"hash": "sha256-1ujLmYaL1zTgtlsNerBDtTuoaJX7c7HukNLJIalrB4Q="
},
{
"pname": "Avalonia.Remote.Protocol",
"version": "11.3.12",
"hash": "sha256-dF93nP1Cd7ZdzrO7ScGHchxYxCjWN45AjiqiO1J+cmU="
},
{
"pname": "Avalonia.Skia",
"version": "11.3.10",
"hash": "sha256-XJXyK19ow9mvcssdmjPvh8zyh4VExcVEoiIauqPNC5s="
},
{
"pname": "Avalonia.Skia",
"version": "11.3.12",
"hash": "sha256-gRMjH7igRIm22zQV0WxtwFHe8AiMTcaPlR0sC5lJy+w="
},
{
"pname": "Avalonia.Skia",
"version": "11.3.9",
"hash": "sha256-KCL1LNUd2i+50vQpDgfI+aMkIBUWtxExyuc43QIK21o="
},
{
"pname": "Avalonia.Themes.Simple",
"version": "11.3.12",
"hash": "sha256-EIuAcUmoL7/y4lUfdSg120/l/v3zQytC2rfr0b6jKiM="
},
{
"pname": "Avalonia.Win32",
"version": "11.3.12",
"hash": "sha256-haIKvJ1SD17+EUJHILoFJMy+WJJtXr9I+ZYMFtwEuTc="
},
{
"pname": "Avalonia.X11",
"version": "11.3.12",
"hash": "sha256-SEc0GaZTh1eGNFWHT6lGiN6LD0qE+ubTK7Efl0H/Q2w="
},
{
"pname": "CommandLineParser",
"version": "2.9.1",
"hash": "sha256-ApU9y1yX60daSjPk3KYDBeJ7XZByKW8hse9NRZGcjeo="
},
{
"pname": "CommunityToolkit.Mvvm",
"version": "8.4.0",
"hash": "sha256-a0D550q+ffreU9Z+kQPdzJYPNaj1UjgyPofLzUg02ZI="
},
{
"pname": "Concentus",
"version": "2.2.2",
"hash": "sha256-9If4kL72V1evHOz0IONX8ASIy/rAtAm6RhzLzu+BSB8="
},
{
"pname": "csFastFloat",
"version": "4.1.5",
"hash": "sha256-dEbMPu/EmsRodI20P15F38QInil0IPcKE03akYp8tBY="
},
{
"pname": "DiscordRichPresence",
"version": "1.6.1.70",
"hash": "sha256-uXTNIWfZU7Gf/JpXQ5ufKA3SQdXYSkg3yLm5yCrBDd8="
},
{
"pname": "DynamicData",
"version": "9.4.1",
"hash": "sha256-CX4NQj2LTk/8f4xDE5rUVBsqcY74H/1qUHFTrVX+9/0="
},
{
"pname": "ExCSS",
"version": "4.3.1",
"hash": "sha256-nNn5+YEaqKSULhtDsImNEyndU/MHna7VpZNUExmo80o="
},
{
"pname": "FluentAvaloniaUI",
"version": "2.5.0",
"hash": "sha256-AC+IlESkbom+qxp6p/gYjLi5rAIBlbpln2DO2xhhXmc="
},
{
"pname": "FSharp.Core",
"version": "7.0.200",
"hash": "sha256-680VgvYbZbztPQosO17r5y8vxg/Y/4Vmr5K3iLIJKMo="
},
{
"pname": "Gommon",
"version": "2.8.0.1",
"hash": "sha256-c3a/43OJaL1glrsjdlyj9D/ooYpNKpYkn1lMKWxC4uE="
},
{
"pname": "HarfBuzzSharp",
"version": "8.3.1.1",
"hash": "sha256-614yv6bK9ynhdUnvW4wIkgpBe2sqTh28U9cDZzdhPc0="
},
{
"pname": "HarfBuzzSharp.NativeAssets.Linux",
"version": "8.3.1.1",
"hash": "sha256-sBbez6fc9axVcsBbIHbpQh/MM5NHlMJgSu6FyuZzVyU="
},
{
"pname": "HarfBuzzSharp.NativeAssets.macOS",
"version": "8.3.1.1",
"hash": "sha256-hK20KbX2OpewIO5qG5gWw5Ih6GoLcIDgFOqCJIjXR/Q="
},
{
"pname": "HarfBuzzSharp.NativeAssets.WebAssembly",
"version": "8.3.1.1",
"hash": "sha256-mLKoLqI47ZHXqTMLwP1UCm7faDptUfQukNvdq6w/xxw="
},
{
"pname": "HarfBuzzSharp.NativeAssets.Win32",
"version": "8.3.1.1",
"hash": "sha256-Um4iwLdz9XtaDSAsthNZdev6dMiy7OBoHOrorMrMYyo="
},
{
"pname": "Humanizer",
"version": "2.14.1",
"hash": "sha256-1wGwf5KAmDeiH0Dz8KcTdZw+UMkiNsjKOIOt/VJnnqE="
},
{
"pname": "Humanizer.Core",
"version": "2.14.1",
"hash": "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="
},
{
"pname": "Humanizer.Core.af",
"version": "2.14.1",
"hash": "sha256-8CCgI7OweSa53cZWZBXQ8a7VVt/NPP16zHVBZvzU9KQ="
},
{
"pname": "Humanizer.Core.ar",
"version": "2.14.1",
"hash": "sha256-JRoP+brQgYBZI8OccH/jaM1Z482ZWBiqU2XL3KsIPw8="
},
{
"pname": "Humanizer.Core.az",
"version": "2.14.1",
"hash": "sha256-ubwkbes9zrrisuXTcT4ZgOAiFsUieC6OLd4pgzxsE40="
},
{
"pname": "Humanizer.Core.bg",
"version": "2.14.1",
"hash": "sha256-Xv6DP1xxxGVUfP44TZasWpxgQ/DkriljvmIMtHf+nGk="
},
{
"pname": "Humanizer.Core.bn-BD",
"version": "2.14.1",
"hash": "sha256-6JpReIc3fkExvJIXzk6fUw56wJ78aTEg1dWQ6o+dQow="
},
{
"pname": "Humanizer.Core.cs",
"version": "2.14.1",
"hash": "sha256-MGL86KxSbz0PkDo9+NRj6h1fDjPZXlxAtYNf0Zreg/4="
},
{
"pname": "Humanizer.Core.da",
"version": "2.14.1",
"hash": "sha256-Gpw8kJbgz0KQS2mGY5tmrHqpgUO4abD7dSKIy//ONYM="
},
{
"pname": "Humanizer.Core.de",
"version": "2.14.1",
"hash": "sha256-Eswv8aEQoxI9MZr2CvWtBUn5X9JRZTWQjRzHJkGj80g="
},
{
"pname": "Humanizer.Core.el",
"version": "2.14.1",
"hash": "sha256-wCK2Uy/AV6FxPUSUM0NMbV14pAP+ss25AaVAHMQIeJA="
},
{
"pname": "Humanizer.Core.es",
"version": "2.14.1",
"hash": "sha256-iEHiQXKwg0ABDxh//HSrzwaVOlilQBFI96+GYzzTMwQ="
},
{
"pname": "Humanizer.Core.fa",
"version": "2.14.1",
"hash": "sha256-2Js7k3nvwJvxAjq3yoLn7PUY2S8+vXfgESwU4SbvjaA="
},
{
"pname": "Humanizer.Core.fi-FI",
"version": "2.14.1",
"hash": "sha256-jOWo43r3dhiBsV9cCoDfqK/YqWj5LejZsnfkG6mlkpA="
},
{
"pname": "Humanizer.Core.fr",
"version": "2.14.1",
"hash": "sha256-WCbA+f4B3g/ml7KrkHkzpU2Fj38HtWc/ujoVY5F3lk4="
},
{
"pname": "Humanizer.Core.fr-BE",
"version": "2.14.1",
"hash": "sha256-GydVmoEy+lwEQ1nM39QXSRhYNchqM47p7qhUEimN4Cw="
},
{
"pname": "Humanizer.Core.he",
"version": "2.14.1",
"hash": "sha256-MMf3qjJ+yzxjMxOR7wMWf+eErxWLqpsdWKFhjNCOsyM="
},
{
"pname": "Humanizer.Core.hr",
"version": "2.14.1",
"hash": "sha256-kBv2I9ns6L6D4XfXfyZS1VM6+YwF4yUkCmCA5zqvsok="
},
{
"pname": "Humanizer.Core.hu",
"version": "2.14.1",
"hash": "sha256-vRje+kxqOsl1JCXAE0yDKvauUumzuEhNcnhNsdIdgVM="
},
{
"pname": "Humanizer.Core.hy",
"version": "2.14.1",
"hash": "sha256-UL7PsK4msT5c96lk70/bVAxN63B71l8VOFtvuJQH9a0="
},
{
"pname": "Humanizer.Core.id",
"version": "2.14.1",
"hash": "sha256-nIl64gCuZh4D527qI2hfQRvzt1mTJUCDGMIZwpS3C/A="
},
{
"pname": "Humanizer.Core.is",
"version": "2.14.1",
"hash": "sha256-38vUQ1aVtlhK15kP9ZlDO0Nl0DcOA5iHx6F2SPN1gYM="
},
{
"pname": "Humanizer.Core.it",
"version": "2.14.1",
"hash": "sha256-4ne0VRNi9OAj3bGCQgCy1BNYKMizoHykJ/lchmCsWdc="
},
{
"pname": "Humanizer.Core.ja",
"version": "2.14.1",
"hash": "sha256-oAilMM8J6LumV6qv3gSIBNTm7u2L4vV38cQXtME3PhM="
},
{
"pname": "Humanizer.Core.ko-KR",
"version": "2.14.1",
"hash": "sha256-b70HQl2IWVPATtaYGDyJ+Z6ioPtrM53vXzfTCHYgxpQ="
},
{
"pname": "Humanizer.Core.ku",
"version": "2.14.1",
"hash": "sha256-8LiEH7MaapMtkHFMj7Y3pG+g0QYuIa5gD3VR9nYQn+k="
},
{
"pname": "Humanizer.Core.lv",
"version": "2.14.1",
"hash": "sha256-zyCsE5cD++u5shNIqCQUd+66FkUWOl+NfFrs2JduCaQ="
},
{
"pname": "Humanizer.Core.ms-MY",
"version": "2.14.1",
"hash": "sha256-pSdZLUi9oWo78nBh2DJunPhDR7THdZSZP0msCVbPsrY="
},
{
"pname": "Humanizer.Core.mt",
"version": "2.14.1",
"hash": "sha256-mkX2reEvNpx9w6gtZw+6bkrnj3Di1qgVDMr9q0IeKCw="
},
{
"pname": "Humanizer.Core.nb",
"version": "2.14.1",
"hash": "sha256-QvYJHqjO/SrelWYgtm8Sc7axs7J8wbJE+GbTgVw5LYs="
},
{
"pname": "Humanizer.Core.nb-NO",
"version": "2.14.1",
"hash": "sha256-YW8y2XkmHjwqf2fztNB3rsn3+CgslF1TclITwp0fA9g="
},
{
"pname": "Humanizer.Core.nl",
"version": "2.14.1",
"hash": "sha256-bQM7aXNQMBY+65NfMVQz/xYz9Ad2JC+ryXoB4lcYgmA="
},
{
"pname": "Humanizer.Core.pl",
"version": "2.14.1",
"hash": "sha256-IrPxHI4uQvBeMM9/8PaNueKwVkbN+1zFQlNWRjNfXEA="
},
{
"pname": "Humanizer.Core.pt",
"version": "2.14.1",
"hash": "sha256-XrlC15HNJFmDwLpHIUHb3Bec9A79msQCRB9Dvz8w4l0="
},
{
"pname": "Humanizer.Core.ro",
"version": "2.14.1",
"hash": "sha256-llXtfq4Tr5V2Q4dVD7J0IKITtpiWrFs50DAtJhcSuRI="
},
{
"pname": "Humanizer.Core.ru",
"version": "2.14.1",
"hash": "sha256-lD0dB3mkbFfGExwVWZk6fv24MyQQ8Cdv5OrleuZeChg="
},
{
"pname": "Humanizer.Core.sk",
"version": "2.14.1",
"hash": "sha256-EmyE+wssZwY6tAuEiFXGn5/yzVMZe7QEuTjOcByOXaA="
},
{
"pname": "Humanizer.Core.sl",
"version": "2.14.1",
"hash": "sha256-sWWxh7KZ8Y3Ps6GbBOHbU2GMsNZfkM+BOnUChf3fz4s="
},
{
"pname": "Humanizer.Core.sr",
"version": "2.14.1",
"hash": "sha256-/bA3LULRFn5WYmCscr5R5vaFRjeHC0xjNiF7PXEJ8r0="
},
{
"pname": "Humanizer.Core.sr-Latn",
"version": "2.14.1",
"hash": "sha256-43+o6oj0UNRJKiFoh57MGPSzlsWAq0eRtzlCrewDmVM="
},
{
"pname": "Humanizer.Core.sv",
"version": "2.14.1",
"hash": "sha256-9lXrHveKDs1y/W3Qxd+MVcohhKEU7zNPx21GBVPp/rA="
},
{
"pname": "Humanizer.Core.th-TH",
"version": "2.14.1",
"hash": "sha256-ldCsXINSvL2xom0SCtVQy+qX1IN5//EUoyIOwXiJ3k8="
},
{
"pname": "Humanizer.Core.tr",
"version": "2.14.1",
"hash": "sha256-VZnO1vMXiR7egKEKJ6lBsj7eNgxhFzakFWsYYRW4u2U="
},
{
"pname": "Humanizer.Core.uk",
"version": "2.14.1",
"hash": "sha256-rdvleUrKbj3c06A0O2MkgAZLtXLro9SPB1YqAGE1Vyg="
},
{
"pname": "Humanizer.Core.uz-Cyrl-UZ",
"version": "2.14.1",
"hash": "sha256-Qso1Iz9MTLs63x4F00kK31TZAN4AoFaFsuVzM+1z38k="
},
{
"pname": "Humanizer.Core.uz-Latn-UZ",
"version": "2.14.1",
"hash": "sha256-sVnkZTuEaHfMJIAZmSCqsspnKkYxK9eVBQZnAAqHNW4="
},
{
"pname": "Humanizer.Core.vi",
"version": "2.14.1",
"hash": "sha256-5wDt72+HdNN3mt/iJkxV9LaH13Jc1qr1vB4Lz8ahIPs="
},
{
"pname": "Humanizer.Core.zh-CN",
"version": "2.14.1",
"hash": "sha256-Z3qfFWyovcVT4Hqy51lgW2xGwyfI//Yfv90E0Liy1sw="
},
{
"pname": "Humanizer.Core.zh-Hans",
"version": "2.14.1",
"hash": "sha256-BTGkMEkQYJKRp858EU7hwNOdsHRT+w6vAMa6H8JIyX4="
},
{
"pname": "Humanizer.Core.zh-Hant",
"version": "2.14.1",
"hash": "sha256-N3D1z5aoGwAZ6+ZxrWMtXgacvQcgDG+aLrQQI9uysmM="
},
{
"pname": "MicroCom.Runtime",
"version": "0.11.0",
"hash": "sha256-VdwpP5fsclvNqJuppaOvwEwv2ofnAI5ZSz2V+UEdLF0="
},
{
"pname": "Microsoft.CodeAnalysis.Analyzers",
"version": "3.3.4",
"hash": "sha256-qDzTfZBSCvAUu9gzq2k+LOvh6/eRvJ9++VCNck/ZpnE="
},
{
"pname": "Microsoft.CodeAnalysis.Common",
"version": "4.9.2",
"hash": "sha256-QU/nyiJWpdPQGHBdaOEVc+AghnGHcKBFBX0oyhRZ9CQ="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp",
"version": "4.9.2",
"hash": "sha256-j06Q4A9E65075SBXdXVCMRgeLxA63Rv1vxarydmmVAA="
},
{
"pname": "Microsoft.CodeCoverage",
"version": "17.9.0",
"hash": "sha256-OaGa4+jRPHs+T+p/oekm2Miluqfd2IX8Rt+BmUx8kr4="
},
{
"pname": "Microsoft.DotNet.PlatformAbstractions",
"version": "3.1.6",
"hash": "sha256-RfM2qXiqdiamPkXr4IDkNc0IZSF9iTZv4uou/E7zNS0="
},
{
"pname": "Microsoft.Extensions.DependencyModel",
"version": "8.0.0",
"hash": "sha256-qkCdwemqdZY/yIW5Xmh7Exv74XuE39T8aHGHCofoVgo="
},
{
"pname": "Microsoft.IdentityModel.Abstractions",
"version": "8.3.0",
"hash": "sha256-LSZ91DbPswCWibHNSGWC3Jh3KQwAthVaU3r7XQJyutM="
},
{
"pname": "Microsoft.IdentityModel.JsonWebTokens",
"version": "8.3.0",
"hash": "sha256-Hiiv10LSOMIt7KsQSsteJV4DFkLebHMYmoISn/pl2F8="
},
{
"pname": "Microsoft.IdentityModel.Logging",
"version": "8.3.0",
"hash": "sha256-0P14ilpV+9yp+nqZWI/ilkTnRas4pic8NjNVcYxuXWs="
},
{
"pname": "Microsoft.IdentityModel.Tokens",
"version": "8.3.0",
"hash": "sha256-+TzBeZH2Tgs0EMoU5QuCdOD/5V8xM7MHClX578AUIxw="
},
{
"pname": "Microsoft.IO.RecyclableMemoryStream",
"version": "3.0.1",
"hash": "sha256-unFg/5EcU/XKJbob4GtQC43Ydgi5VjeBGs7hfhj4EYo="
},
{
"pname": "Microsoft.NET.Test.Sdk",
"version": "17.9.0",
"hash": "sha256-q/1AJ7eNlk02wvN76qvjl2xBx5iJ+h5ssiE/4akLmtI="
},
{
"pname": "Microsoft.NETCore.Platforms",
"version": "1.1.0",
"hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM="
},
{
"pname": "Microsoft.TestPlatform.ObjectModel",
"version": "17.9.0",
"hash": "sha256-iiXUFzpvT8OWdzMj9FGJDqanwHx40s1TXVY9l3ii+s0="
},
{
"pname": "Microsoft.TestPlatform.TestHost",
"version": "17.9.0",
"hash": "sha256-1BZIY1z+C9TROgdTV/tq4zsPy7Q71GQksr/LoMKAzqU="
},
{
"pname": "MsgPack.Cli",
"version": "1.0.1",
"hash": "sha256-Gf0Ed9XHH4oFpJIkzhg/xhDVpenunSol65qa8IZeYrY="
},
{
"pname": "NetCoreServer",
"version": "8.0.7",
"hash": "sha256-RUYic8uAgJGdhUCrMJQULKlHB6xvw9H1lnNGU1axNZw="
},
{
"pname": "NETStandard.Library",
"version": "2.0.0",
"hash": "sha256-Pp7fRylai8JrE1O+9TGfIEJrAOmnWTJRLWE+qJBahK0="
},
{
"pname": "NETStandard.Library",
"version": "2.0.3",
"hash": "sha256-Prh2RPebz/s8AzHb2sPHg3Jl8s31inv9k+Qxd293ybo="
},
{
"pname": "Newtonsoft.Json",
"version": "13.0.1",
"hash": "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo="
},
{
"pname": "NUnit",
"version": "3.13.3",
"hash": "sha256-Zn+sJIF7ieNqu/t2RwJx6WPFb1jl9UuNHidb/Px0v3E="
},
{
"pname": "NUnit3TestAdapter",
"version": "4.1.0",
"hash": "sha256-nDPiYdTFulqozEJrujr8/cqjG7m15Vkd/Frqem0Jr/w="
},
{
"pname": "Open.NAT.Core",
"version": "2.1.0.5",
"hash": "sha256-LqG5L2APr11142fsZPQ3clk3tJfAYBMXi1rP0EM9zDg="
},
{
"pname": "OpenTK.Audio.OpenAL",
"version": "4.8.2",
"hash": "sha256-i5KRiTYTNMB4Y5Qd5xewaYrb9sBbnXMDu2QXbM3RCeU="
},
{
"pname": "OpenTK.Core",
"version": "4.8.2",
"hash": "sha256-59S4Vj13y8HtZT6RZTwO6ZZbk1GUNDcYx1rMdv5jr4I="
},
{
"pname": "OpenTK.Graphics",
"version": "4.8.2",
"hash": "sha256-DNpXqtM9Oj6wDGYSF2FD4A4ueWG892Wk6uGWffNspo0="
},
{
"pname": "OpenTK.Mathematics",
"version": "4.8.2",
"hash": "sha256-TPsts443n6iEajfH2EuYTKtubrWuTLiCrTB1F4FndIo="
},
{
"pname": "OpenTK.redist.glfw",
"version": "3.3.8.39",
"hash": "sha256-bg8bGfoDDqmZ/efLFVm8l5etQajIVvOcQ/Nv+yKD4Bc="
},
{
"pname": "OpenTK.Windowing.GraphicsLibraryFramework",
"version": "4.8.2",
"hash": "sha256-a1MGtU+27pBNns55g8mOsxXpZxfEr6M62zLkIkkJTIY="
},
{
"pname": "ppy.SDL3-CS",
"version": "2026.320.0",
"hash": "sha256-dK58LuY8DQgw3Wfnj/HPup7Hxa9r2QvT/GBJbpUQ874="
},
{
"pname": "Projektanker.Icons.Avalonia",
"version": "9.6.2",
"hash": "sha256-BMbZQ2Hj80Yxcx8mNZ8+A4fxyB/Sa0QhFX5gC6jAueA="
},
{
"pname": "Projektanker.Icons.Avalonia.FontAwesome",
"version": "9.6.2",
"hash": "sha256-GumFdzG2GPCxfAU47Qk8a0RI4IlSzSTmRFMJ5ZVFvDg="
},
{
"pname": "Projektanker.Icons.Avalonia.MaterialDesign",
"version": "9.6.2",
"hash": "sha256-CG4VZDafywR278XwZTosm0sYzJyQ6AGHEQiIDB9y81I="
},
{
"pname": "Ryujinx.Audio.OpenAL.Dependencies",
"version": "1.21.0.1",
"hash": "sha256-NHGzMcYduuYJjduIlf8M8zSQQuJcXAEaMNmKIqAgs3w="
},
{
"pname": "Ryujinx.Graphics.Nvdec.Dependencies.AllArch",
"version": "6.1.2-build3",
"hash": "sha256-Glhvv00ZbrbB+Z4PMSTsmiP14HZDonp611s1gXGuyqI="
},
{
"pname": "Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK",
"version": "1.2.0",
"hash": "sha256-vdDw6YGoyQzv6ustyXP6v7YWUIKEXaZOyUKAaVbRauI="
},
{
"pname": "Ryujinx.LibHac",
"version": "0.21.0-alpha.129",
"hash": "sha256-vwpjCsMZayUAzaydzcO9ktEzNIYEmDpQbhswGx8O7no=",
"url": "https://git.ryujinx.app/api/packages/projects/nuget/package/ryujinx.libhac/0.21.0-alpha.129/ryujinx.libhac.0.21.0-alpha.129.nupkg"
},
{
"pname": "Ryujinx.Systems.Update.Common",
"version": "2.0.6",
"hash": "sha256-2btWQmCwqJSxISN3N7HdRCbkfSAs4Ph+o8hT+GlySYk="
},
{
"pname": "Ryujinx.UpdateClient",
"version": "1.0.44",
"hash": "sha256-4lKA2mscjyiJZAQf0ixAdVmwzDWog+CTGIftOmC0xnk="
},
{
"pname": "securifybv.PropertyStore",
"version": "0.1.0",
"hash": "sha256-jTPT9E2LyElgJq4HMavkdwT8tA9uklnJv00mlIx66+g="
},
{
"pname": "securifybv.ShellLink",
"version": "0.1.0",
"hash": "sha256-Am+ZednCVJUDgB7TePyY3CTxKDQ6Lr8M8KiCVAJoouw="
},
{
"pname": "Sep",
"version": "0.11.1",
"hash": "sha256-GkDWF51QOIKUu55By5ya471KrwXvQbm98DOo/zV0Bew="
},
{
"pname": "shaderc.net",
"version": "0.1.0",
"hash": "sha256-+K7ObC9ucilwWY+Tlf9KcrAVoTFS65V6Di7JDWDSZTg="
},
{
"pname": "SharpCompress",
"version": "0.47.4",
"hash": "sha256-mH0R+al2GUomIYkieYudTmF1mAnIUiifQPTp13eUFg8="
},
{
"pname": "ShimSkiaSharp",
"version": "3.6.0",
"hash": "sha256-73Z5rWOt8MFXAvR1FmN8jIoZKNJafKpR75FyqqoS0gE="
},
{
"pname": "Silk.NET.Core",
"version": "2.22.0",
"hash": "sha256-1aBiBwifLel9aaGI97gxbvID/XKbFm1dpVv2zm0NSEc="
},
{
"pname": "Silk.NET.Vulkan",
"version": "2.22.0",
"hash": "sha256-TxCjv6Q35PrJTs0SkiE1srJNZf1yh9k98Gfx8DWSWjY="
},
{
"pname": "Silk.NET.Vulkan.Extensions.EXT",
"version": "2.22.0",
"hash": "sha256-spbTFm5wHbVZqMNvAih6wexeZs61B8kbX4sKYSe5Syk="
},
{
"pname": "Silk.NET.Vulkan.Extensions.KHR",
"version": "2.22.0",
"hash": "sha256-aXgS8UxYlfBIrxmoAOuy6Z3NZuV+ruSibQPvLO1wL/U="
},
{
"pname": "SkiaSharp",
"version": "2.88.9",
"hash": "sha256-jZ/4nVXYJtrz9SBf6sYc/s0FxS7ReIYM4kMkrhZS+24="
},
{
"pname": "SkiaSharp.NativeAssets.Linux",
"version": "2.88.9",
"hash": "sha256-mQ/oBaqRR71WfS66mJCvcc3uKW7CNEHoPN2JilDbw/A="
},
{
"pname": "SkiaSharp.NativeAssets.macOS",
"version": "2.88.9",
"hash": "sha256-qvGuAmjXGjGKMzOPBvP9VWRVOICSGb7aNVejU0lLe/g="
},
{
"pname": "SkiaSharp.NativeAssets.WebAssembly",
"version": "2.88.9",
"hash": "sha256-vgFL4Pdy3O1RKBp+T9N3W4nkH9yurZ0suo8u3gPmmhY="
},
{
"pname": "SkiaSharp.NativeAssets.Win32",
"version": "2.88.9",
"hash": "sha256-kP5XM5GgwHGfNJfe4T2yO5NIZtiF71Ddp0pd1vG5V/4="
},
{
"pname": "SPB",
"version": "0.0.4-build32",
"hash": "sha256-GUzbV5rLWtXTpiddYrKnWWLujG38vBDCO4xRStwAaDo="
},
{
"pname": "Svg.Controls.Avalonia",
"version": "11.3.9.4",
"hash": "sha256-VtT78D+HNZfwetSzYG+oDhzl4EZYcIlcq+59mPqyIGk="
},
{
"pname": "Svg.Controls.Skia.Avalonia",
"version": "11.3.9.4",
"hash": "sha256-q9mixdAKtgxHS+//lfD1kgOhcKs9sNoqs6OnT3WBte8="
},
{
"pname": "Svg.Custom",
"version": "3.6.0",
"hash": "sha256-caId1MZbsDR5kZYxiVUZfZJl6FLt1RbqSA46YZ2EXA4="
},
{
"pname": "Svg.Model",
"version": "3.6.0",
"hash": "sha256-iQMvX6UUu5REzUHBrPQcAVXP8KEzz8b5lratPaIEjbc="
},
{
"pname": "Svg.Skia",
"version": "3.6.0",
"hash": "sha256-USVPjpvV3FoMLoThAqz53IscTKw4oVIAyDkdo03Z6Do="
},
{
"pname": "System.Buffers",
"version": "4.5.1",
"hash": "sha256-wws90sfi9M7kuCPWkv1CEYMJtCqx9QB/kj0ymlsNaxI="
},
{
"pname": "System.CodeDom",
"version": "4.4.0",
"hash": "sha256-L1xyspJ8pDJNVPYKl+FMGf4Zwm0tlqtAyQCNW6pT6/0="
},
{
"pname": "System.Collections.Immutable",
"version": "8.0.0",
"hash": "sha256-F7OVjKNwpqbUh8lTidbqJWYi476nsq9n+6k0+QVRo3w="
},
{
"pname": "System.IO.Hashing",
"version": "9.0.2",
"hash": "sha256-CI1z3rCDA2XnYE7hA1Hh6+rPkdIRAcswCXu/Pbaavck="
},
{
"pname": "System.Memory",
"version": "4.5.5",
"hash": "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI="
},
{
"pname": "System.Numerics.Vectors",
"version": "4.4.0",
"hash": "sha256-auXQK2flL/JpnB/rEcAcUm4vYMCYMEMiWOCAlIaqu2U="
},
{
"pname": "System.Reactive",
"version": "6.0.1",
"hash": "sha256-Lo5UMqp8DsbVSUxa2UpClR1GoYzqQQcSxkfyFqB/d4Q="
},
{
"pname": "System.Reflection.Metadata",
"version": "8.0.0",
"hash": "sha256-dQGC30JauIDWNWXMrSNOJncVa1umR1sijazYwUDdSIE="
},
{
"pname": "System.Runtime.CompilerServices.Unsafe",
"version": "4.5.3",
"hash": "sha256-lnZMUqRO4RYRUeSO8HSJ9yBHqFHLVbmenwHWkIU20ak="
},
{
"pname": "System.Runtime.CompilerServices.Unsafe",
"version": "6.0.0",
"hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I="
},
{
"pname": "System.Text.Encoding.CodePages",
"version": "8.0.0",
"hash": "sha256-fjCLQc1PRW0Ix5IZldg0XKv+J1DqPSfu9pjMyNBp7dE="
},
{
"pname": "System.Threading.Tasks.Extensions",
"version": "4.5.4",
"hash": "sha256-owSpY8wHlsUXn5xrfYAiu847L6fAKethlvYx97Ri1ng="
},
{
"pname": "Tmds.DBus.Protocol",
"version": "0.21.2",
"hash": "sha256-gaK/5aAummyin6ptnhaJbnA0ih4+2xADrtrLfFbHwYI="
},
{
"pname": "UnicornEngine.Unicorn",
"version": "2.0.2-rc1-fb78016",
"hash": "sha256-NrJ4/o4FmCt2zoB1fWAzqdonvpYhTFsWwh3h0lxZg+Q="
}
]

View File

@@ -1,37 +0,0 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p coreutils gnused curl common-updater-scripts nix-prefetch-git jq
# shellcheck shell=bash
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
# If NEW_VERSION or COMMIT are not set, fetch the latest version
if [ -z ${NEW_VERSION+x} ] && [ -z ${COMMIT+x} ]; then
RELEASE_DATA=$(curl -s "https://git.ryujinx.app/api/v4/projects/1/repository/tags?order_by=updated&sort=desc")
if [ -z "$RELEASE_DATA" ] || [[ $RELEASE_DATA =~ "imposed ratelimits" ]]; then
echo "failed to get release job data" >&2
exit 1
fi
NEW_VERSION=$(echo "$RELEASE_DATA" | jq -r '[.[] | select(.name | startswith("Canary") | not)][0].name')
fi
OLD_VERSION="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./package.nix)"
echo "comparing versions $OLD_VERSION -> $NEW_VERSION"
if [[ "$OLD_VERSION" == "$NEW_VERSION" ]]; then
echo "Already up to date!"
if [[ "${1-default}" != "--deps-only" ]]; then
exit 0
fi
fi
cd ../../../..
if [[ "${1-default}" != "--deps-only" ]]; then
SHA="$(nix-prefetch-git https://git.ryujinx.app/ryubing/ryujinx --rev "$NEW_VERSION" --quiet | jq -r '.sha256')"
SRI=$(nix --experimental-features nix-command hash to-sri "sha256:$SHA")
# update-source-version ryubing-canary "$NEW_VERSION" "$SRI"
fi
echo "building Nuget lockfile"
eval "$(nix-build -A ryubing-canary.fetch-deps --no-out-link)"

View File

@@ -1,58 +0,0 @@
{ lib
, appimageTools
, fetchurl
, fuse3
, makeWrapper
}:
# WARNING: This package is a fucking hack! Two things:
#
# - You must manually patch the Dolphin emulator installed by Slippi. After
# Dolphin is installed (i.e. once the 'play' button is clickable), you must
# navigate to ~/.cache/appimage-run/*/apprun-hooks/linux-env.sh and
# delete/comment the lines modifying LD_LIBRARY_PATH. I hope to fix this at
# some point, but it took me like 15 hours just to attain this bare minimum
# functionality, rofl. Good luck. Open an issue or contact me (msyds) if you
# need assistance.
#
# - Requires
# programs.appimage = {
# enable = true;
# binfmt = true;
# };
# in your NixOS config. This is because Slippi tries to run the Dolphin
# AppImage like a normal executable.
appimageTools.wrapType2 rec {
pname = "slippi-launcher";
version = "2.11.10";
src = fetchurl {
url = "https://github.com/project-slippi/slippi-launcher/releases/download/v${version}/Slippi-Launcher-${version}-x86_64.AppImage";
hash = "sha256-OrWd0jVqe6CzNbVRNlm2alt2NZ8uBYeHiASaB74ouW4=";
};
nativeBuildInputs = [
makeWrapper
];
extraPkgs = pkgs: [
pkgs.fuse3
];
extraInstallCommands = ''
wrapProgram $out/bin/slippi-launcher \
--set FUSERMOUNT_PROG "${fuse3}/bin/fusermount3" \
--add-flags "''${NIXOS_OZONE_WL:+''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"
'';
# note to madddy./.. DELETE "ubuntu is stupid" LINE FROM ~/.cache/appimage-run/XXXXX/shell-hooks/a
meta = {
description = "The way to play Slippi Online and watch replays.";
homepage = "https://github.com/project-slippi/slippi-launcher";
downloadPage = "https://github.com/project-slippi/slippi-launcher/releases";
license = lib.licenses.gpl3;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
platforms = [ "x86_64-linux" ];
};
}

View File

@@ -1,184 +0,0 @@
{ lib
, fetchFromGitHub
, electron
, nodejs
, makeWrapper
, git
, stdenv
, yarnConfigHook
, fetchYarnDeps
}:
# Similar derivations:
# - Logseq: https://github.com/NixOS/nixpkgs/blob/nixos-25.05/pkgs/by-name/lo/logseq/package.nix#L283
# - Podman: https://github.com/NixOS/nixpkgs/blob/224042e9a3039291f22f4f2ded12af95a616cca0/pkgs/applications/virtualization/podman-desktop/default.nix
stdenv.mkDerivation (final: {
pname = "slippi-launcher";
version = "2.11.10";
src = fetchFromGitHub {
owner = "project-slippi";
repo = "slippi-launcher";
rev = "v${final.version}";
hash = "sha256-EWKxzGLjyJ15wGioUtfh3biU7Pfa5bYtV1Om2w5IZW8=";
leaveDotGit = true;
};
patches = [
# Dependency with git+https protocol breaks yarnConfigHook.
./fix-git-deps.patch
];
# Avoid network error during build.
# https://stackoverflow.com/questions/78004799/78004800
env.ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
buildInputs = [
electron
];
nativeBuildInputs = [
yarnConfigHook
nodejs
electron
git
makeWrapper
];
# Disable the default usage of yarnConfigHook. We instead opt to run the hook
# manually (several times) for reasons made clear in the commentary on this
# package's `postConfigure` script.
dontYarnInstallDeps = true;
configurePhase =
let
# Constants to be set in the .env file. Slippi contains an example .env
# file here:
# https://github.com/project-slippi/slippi-launcher/blob/main/.env.example
dotenv = {
# N.B. although these values are *not* secrets (yes, even the API key), they
# were extracted from the AppImage release.
FIREBASE_API_KEY = "AIzaSyAuQqc_wgqcUu3FqrICEPZ9Av_hPxMR_i4";
FIREBASE_AUTH_DOMAIN = "slippi.firebaseapp.com";
FIREBASE_DATABASE_URL = "https://slippi.firebaseio.com";
FIREBASE_PROJECT_ID = "slippi";
FIREBASE_STORAGE_BUCKET = "slippi.appspot.com";
FIREBASE_MESSAGING_SENDER_ID = "101358986051";
FIREBASE_APP_ID = "1:101358986051:web:1e361ce2a76dfd1b0f85f6";
FIREBASE_MEASUREMENT_ID = "G-VNB1EB87Y2";
# Ditto.
SLIPPI_WS_SERVER = "ws://broadcast-dot-slippi.uc.r.appspot.com/";
SLIPPI_GRAPHQL_ENDPOINT = "/graphql";
};
in ''
runHook preConfigure
# For reasons I don't quite understand[1], this package is split across two
# `package.json` files. We call yarnConfigHook once for each package.json
# to install their respective dependencies. Each yarnConfigHook call uses a
# separate offline cache.
#
# [1]: https://www.electron.build/tutorials/two-package-structure.html
yarnOfflineCache="$yarnOfflineCacheRoot" yarnConfigHook
pushd release/app
yarnOfflineCache="$yarnOfflineCacheRelease" yarnConfigHook
popd
# Merge the dependencies listed in release/app/package.json into the
# node_modules/ directory corresponding to the top-level package.json.
# This feels very wrong! Surely there's a better way
for i in release/app/node_modules/*; do
dest="node_modules/$(basename "$i")"
if [[ ! -f "$dest" ]]; then
mv "$i" "$dest"
fi
done
# Populate the .env file.
tee .env << EOF
${lib.concatLines
(lib.mapAttrsToList (k: v: "${k}=${v}") dotenv)}
EOF
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
cp -r ${electron.dist} electron-dist
chmod -R u+w electron-dist
# Run builds concurrently. Taken from Slippi's `yarn run package` script,
# but we've added the `--ofline` flag.
yarn --offline run build:main &
yarn --offline run build:renderer &
yarn --offline run build:migrations &
wait
# Build to release/build/linux-unwrapped. The flag `--dir` stops
# electron-builder before creating an AppImage.
./node_modules/.bin/electron-builder \
build --dir --publish never \
-c.electronDist=electron-dist \
-c.electronVersion=${electron.version}
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,opt/slippi-launcher}
cp -r release/build/linux-unpacked/* $out/opt/slippi-launcher
# Electron programs need to differentiate between production and
# non-production builds, and they do so by testing if argv[0] is 'electron'
# or not. Thus, --inherit-argv0 should be all we need; however, this is not
# the case. God knows why. Just suck it up and set
# ELECTRON_FORCE_IS_PACKAGED=true.
makeWrapper '${lib.getExe electron}' $out/bin/slippi-launcher \
--add-flags "$out/opt/slippi-launcher/resources/app.asar" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
--prefix LD_LIBRARY_PATH : $out/opt/slippi-launcher \
--inherit-argv0 \
--set ELECTRON_FORCE_IS_PACKAGED true
runHook postInstall
'';
yarnOfflineCacheRoot = fetchYarnDeps {
name = "slippi-launcher-yarn-deps-root";
# One of our patches modifies the (top-level) Yarn lockfile and thus must be
# visible to fetchYarnDeps.
inherit (final) src patches;
hash = "sha256-Crq9XywLtEc8IImkldodZJ823YG6dB8D9qGksH/lb3I=";
};
yarnOfflineCacheRelease = fetchYarnDeps {
name = "slippi-launcher-yarn-deps-resources";
# Our patches don't touch the lockfile at release/app/yarn.lock, so there's
# no need to inherit patches }:).
inherit (final) src;
sourceRoot = "${final.src.name}/release/app";
hash = "sha256-iCFqgy+jRaMCoGC77iXkEh964cZAtXFRfdOOJaRTfLc=";
};
meta = {
description = "The way to play Slippi Online and watch replays.";
longDescription = ''
The Slippi Launcher acts as a one stop shop for everything Slippi
related. It handles updating Slippi Dolphin, playing Slippi Online,
launching and analyzing replays, and more.
'';
license = lib.licenses.gpl3;
homepage = "https://github.com/project-slippi/slippi-launcher";
changelog =
"https://github.com/project-slippi/slippi-launcher/releases/tag/v${final.version}";
platforms = lib.platforms.all;
broken = true;
};
})

View File

@@ -1,16 +0,0 @@
diff --git a/yarn.lock b/yarn.lock
index 6b2fba28..40ed0fc4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1848,9 +1848,9 @@
global-agent "^3.0.0"
global-tunnel-ng "^2.7.1"
-"@electron/node-gyp@git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2":
+"@electron/node-gyp@https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2":
version "10.2.0-electron.1"
- resolved "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2"
+ resolved "https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2"
dependencies:
env-paths "^2.2.0"
exponential-backoff "^3.1.1"

View File

@@ -1,32 +0,0 @@
{ stdenvNoCC
, texlive
}:
stdenvNoCC.mkDerivation (final: {
pname = "syd-plex-latex";
version = "1.0.0";
src = ./.;
nativeBuildInputs = [ texlive.combined.scheme-small ];
passthru = {
pkgs = [ final.finalPackage ];
tlDeps = with texlive; [
plex
plex-otf
fontaxes
unicode-math
xetex
fontspec
xltxtra
realscripts
xecjk
];
tlType = "run";
};
installPhase = ''
runHook preInstall
dir="$out/tex/latex/syd-plex"
mkdir -p "$dir"
mv syd-plex.sty "$dir"
runHook postInstall
'';
})

View File

@@ -1,15 +0,0 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{syd-plex}[2025/12/01 Configure IBM Plex fonts]
% Redefine some commands to make unicode-math work lol. See §3.1 of the
% unicode-math manual.
\renewcommand*{\mathrm}[1]{\symup{#1}}
\RequirePackage{plex-otf}
\RequirePackage{xeCJK}
\setmathfont{IBM Plex Math}
\setmainfont{IBM Plex Serif}
\setCJKmainfont{IBM Plex Sans KR}
% Use sans-serif for \operatorname
\setoperatorfont\mathsf

View File

@@ -1,109 +0,0 @@
{ cmake
, cacert
, cpm-cmake
, git
, pkg-config
, pulseaudio
, pipewire
, fetchFromGitHub
, stdenv
}:
# See
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/pkgs/development/compilers/codon/default.nix#L136
# for an example of an CPM/CMake project built with Nix.
let
version = "6.1.0";
depsDir = "deps";
src = fetchFromGitHub {
owner = "Vencord";
repo = "venmic";
rev = "v${version}";
hash = "sha256-0UP8a2bfhWGsB2Lg/GeIBu4zw1zHnXbitT8vU+DLeEY=";
};
venmicDeps = stdenv.mkDerivation {
name = "venmic-deps-${version}.tar.gz";
inherit src;
nativeBuildInputs = [
cmake
cacert
cpm-cmake
git
# Pkg-config is implicitly used by CMake and will fail to find libs
# without it.
pkg-config
];
buildInputs = [
pulseaudio
pipewire
];
dontBuild = true;
cmakeFlags = [
"-DCPM_DOWNLOAD_ALL=ON"
"-DCPM_SOURCE_CACHE=${depsDir}"
];
installPhase = ''
# Remove .git directories. For reasons unknown to me, they are a source
# of indeterminism.
find "${depsDir}" -type d -name '.git' -exec rm -rf {} +
# Build a reproducible tarball, per
# https://reproducible-builds.org/docs/archives.
tar --owner=0 --group=0 --numeric-owner --format=gnu \
--sort=name --mtime="@$SOURCE_DATE_EPOCH" \
-czf $out \
"${depsDir}"
'';
outputHashAlgo = "sha256";
outputHash = "sha256-cnkqZbSnxFFwDy0zNo4QuQQCaT0dav3V8TDjzZ4mMFA=";
};
venmic-server = stdenv.mkDerivation {
pname = "venmic-server";
inherit version src venmicDeps;
postUnpack = ''
# Bring in the cached CPM deps.
mkdir -p $sourceRoot/build
tar xzf "$venmicDeps" -C $sourceRoot/build
# Bring in CPM itself Venmic tries to download it itself.
rm $sourceRoot/cmake/cpm.cmake
ln -s ${cpm-cmake}/share/cpm/CPM.cmake $sourceRoot/cmake/cpm.cmake
'';
cmakeFlags = [
"-DCPM_SOURCE_CACHE=${depsDir}"
"-Dvenmic_prefer_remote=OFF"
];
nativeBuildInputs = [
cmake
cpm-cmake
git
# Pkg-config is implicitly used by CMake and will fail to find libs
# without it.
pkg-config
];
buildInputs = [
pulseaudio
pipewire
];
installPhase = ''
mkdir -p $out/bin
mv server/venmic-server $out/bin
'';
};
in venmic-server

View File

@@ -1,31 +0,0 @@
{ stdenv, pkg-config, udev, libusb1, fetchFromGitHub }:
stdenv.mkDerivation {
pname = "wii-u-gc-adapter";
version = "fa098ef";
src = fetchFromGitHub {
owner = "ToadKing";
repo = "wii-u-gc-adapter";
rev = "fa098efa7f6b34f8cd82e2c249c81c629901976c";
hash = "sha256-wm0vDU7QckFvpgI50PG4/elgPEkfr8xTmroz8kE6QMo=";
};
nativeBuildInputs = [
pkg-config
];
buildInputs = [
udev
libusb1
];
patches = [
./remove-Wformat.patch
];
installPhase = ''
mkdir -p $out/bin
mv wii-u-gc-adapter $out/bin
'';
}

View File

@@ -1,10 +0,0 @@
diff --git a/Makefile b/Makefile
index a00f13a..f13d0c2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-CFLAGS += -Wall -Wextra -pedantic -Wno-format -std=c99 $(shell pkg-config --cflags libusb-1.0) $(shell pkg-config --cflags udev)
+CFLAGS += -Wall -Wextra -Wformat -std=c99 $(shell pkg-config --cflags libusb-1.0) $(shell pkg-config --cflags udev)
LDFLAGS += -lpthread -ludev $(shell pkg-config --libs libusb-1.0) $(shell pkg-config --libs udev)
ifeq ($(DEBUG), 1)