push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
{
lib,
stdenv,
fetchFromGitHub,
autoreconfHook,
pkg-config,
openssl,
tpm2-tss,
keyutils,
asciidoc,
libxslt,
docbook_xsl,
}:
stdenv.mkDerivation rec {
pname = "ima-evm-utils";
version = "1.6.2";
src = fetchFromGitHub {
owner = "linux-integrity";
repo = "ima-evm-utils";
tag = "v${version}";
hash = "sha256-vIu12Flc2DiEqUSKAfoUi7Zg6D25pURvlYKEQKHER4I=";
};
strictDeps = true;
nativeBuildInputs = [
autoreconfHook
pkg-config
asciidoc
libxslt
];
buildInputs = [
keyutils
openssl
tpm2-tss
];
env.MANPAGE_DOCBOOK_XSL = "${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl";
meta = {
description = "Utility to manage digital signatures of the Linux kernel integrity subsystem (IMA/EVM)";
mainProgram = "evmctl";
homepage = "https://github.com/linux-integrity/ima-evm-utils";
license = with lib.licenses; [
lgpl2Plus # libimaevm
gpl2Plus # evmctl
];
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ nickcao ];
};
}

View File

@@ -0,0 +1,53 @@
{
lib,
rustPlatform,
fetchFromGitHub,
glib,
pkg-config,
wrapGAppsHook4,
gtk4,
}:
rustPlatform.buildRustPackage rec {
pname = "image-roll";
version = "2.1.0";
src = fetchFromGitHub {
owner = "weclaw1";
repo = "image-roll";
rev = version;
sha256 = "sha256-CC40TU38bJFnbJl2EHqeB9RBvbVUrBmRdZVS2GxqGu4=";
};
cargoHash = "sha256-oKJknLKkoutPU85gbgi+369fczLghDuvT+t7R0nHwOI=";
nativeBuildInputs = [
glib
pkg-config
wrapGAppsHook4
];
buildInputs = [ gtk4 ];
checkFlags = [
# fails in the sandbox
"--skip=file_list::tests"
# sometimes fails on darwin
"--skip=image_list::tests::save_current_image_overwrites_image_at_current_image_path_when_filename_is_set_to_none"
];
postInstall = ''
install -Dm444 src/resources/com.github.weclaw1.ImageRoll.desktop -t $out/share/applications/
install -Dm444 src/resources/com.github.weclaw1.ImageRoll.svg -t $out/share/icons/hicolor/scalable/apps/
install -Dm444 src/resources/com.github.weclaw1.ImageRoll.metainfo.xml -t $out/share/metainfo/
'';
meta = with lib; {
description = "Simple and fast GTK image viewer with basic image manipulation tools";
mainProgram = "image-roll";
homepage = "https://github.com/weclaw1/image-roll";
license = licenses.mit;
maintainers = with maintainers; [ figsoda ];
};
}

View File

@@ -0,0 +1,92 @@
{
lib,
stdenv,
fetchurl,
glib,
jre,
unzip,
makeWrapper,
makeDesktopItem,
copyDesktopItems,
wrapGAppsHook3,
}:
let
icon = fetchurl {
url = "https://imagej.net/media/icons/imagej.png";
sha256 = "sha256-nU2nWI1wxZB/xlOKsZzdUjj+qiCTjO6GwEKYgZ5Risg=";
};
in
stdenv.mkDerivation rec {
pname = "imagej";
version = "153";
src = fetchurl {
url = "https://wsr.imagej.net/distros/cross-platform/ij${version}.zip";
sha256 = "sha256-MGuUdUDuW3s/yGC68rHr6xxzmYScUjdXRawDpc1UQqw=";
};
nativeBuildInputs = [
copyDesktopItems
makeWrapper
unzip
wrapGAppsHook3
];
buildInputs = [ glib ];
dontWrapGApps = true;
desktopItems = lib.optionals stdenv.hostPlatform.isLinux [
(makeDesktopItem {
name = "ImageJ";
desktopName = "ImageJ";
icon = "imagej";
categories = [
"Science"
"Utility"
"Graphics"
];
exec = "imagej";
})
];
passthru = {
inherit jre;
};
# JAR files that are intended to be used by other packages
# should go to $out/share/java.
# (Some uses ij.jar as a library not as a standalone program.)
installPhase = ''
runHook preInstall
mkdir -p $out/share/java $out/bin
# Read permisssion suffices for the jar and others.
# Simple cp shall clear suid bits, if any.
cp ij.jar $out/share/java
cp -dR luts macros plugins $out/share
runHook postInstall
'';
postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
makeWrapper ${jre}/bin/java $out/bin/imagej \
''${gappsWrapperArgs[@]} \
--add-flags "-jar $out/share/java/ij.jar -ijpath $out/share"
install -Dm644 ${icon} $out/share/icons/hicolor/128x128/apps/imagej.png
'';
meta = with lib; {
homepage = "https://imagej.nih.gov/ij/";
description = "Image processing and analysis in Java";
longDescription = ''
ImageJ is a public domain Java image processing program
inspired by NIH Image for the Macintosh.
It runs on any computer with a Java 1.4 or later virtual machine.
'';
sourceProvenance = with sourceTypes; [ binaryBytecode ];
license = licenses.publicDomain;
platforms = platforms.unix;
maintainers = with maintainers; [ yuriaisaka ];
mainProgram = "imagej";
};
}

View File

@@ -0,0 +1,64 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
}:
stdenv.mkDerivation rec {
pname = "imagelol";
version = "0.2";
src = fetchFromGitHub {
owner = "MCRedstoner2004";
repo = "imagelol";
tag = "v${version}";
sha256 = "0978zdrfj41jsqm78afyyd1l64iki9nwjvhd8ynii1b553nn4dmd";
fetchSubmodules = true;
};
patches = [
# upstream gcc-12 compatibility fix
(fetchpatch {
name = "gcc-12.patch";
url = "https://github.com/MCredstoner2004/ImageLOL/commit/013fb1f901d88f5fd21a896bfab47c7fff0737d7.patch";
hash = "sha256-RVaG2xbUqE4CxqI2lhvug2qihT6A8vN+pIfK58CXLDw=";
includes = [ "imagelol/ImageLOL.inl" ];
# change lib/ for imagelol
stripLen = 2;
extraPrefix = "imagelol/";
})
];
# fix for case-sensitive filesystems
# https://github.com/MCredstoner2004/ImageLOL/issues/1
postPatch = ''
mv imagelol src
substituteInPlace CMakeLists.txt \
--replace 'add_subdirectory("imagelol")' 'add_subdirectory("src")'
'';
nativeBuildInputs = [ cmake ];
installPhase = ''
mkdir -p $out/bin
cp ./ImageLOL $out/bin
'';
cmakeFlags = [
(lib.cmakeFeature "CMAKE_C_FLAGS" "-std=gnu90")
]
++ lib.optional (
stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64
) "-DPNG_ARM_NEON=off";
meta = with lib; {
homepage = "https://github.com/MCredstoner2004/ImageLOL";
description = "Simple program to store a file into a PNG image";
license = licenses.mit;
maintainers = [ ];
platforms = platforms.unix;
mainProgram = "ImageLOL";
};
}

View File

@@ -0,0 +1,37 @@
diff --git a/admin/Makefile.def b/admin/Makefile.def
index facc205..0daceaf 100644
--- a/admin/Makefile.def
+++ b/admin/Makefile.def
@@ -310,7 +310,7 @@ endif
# Apple CLANG flags (identical to GCC)
ifeq ($(GAG_COMPILER_CKIND),clang)
- GLOBAL_CFLAGS += -pipe -fPIC
+ GLOBAL_CFLAGS += -fPIC
ifeq ($(RELEASE_MODE),no)
OPTION_CFLAGS += -Wall
endif
@@ -360,7 +360,7 @@ endif
# GFORTRAN flags
ifeq ($(GAG_COMPILER_FKIND),gfortran)
- GLOBAL_FFLAGS += -J$(moddir) -pipe -fno-backslash -fno-range-check
+ GLOBAL_FFLAGS += -J$(moddir) -fno-backslash -fno-range-check
ifeq ($(GAG_USE_SANITIZE),yes)
GLOBAL_FFLAGS += -fsanitize=address -fsanitize=null
# Can not be used with our memory(ip):
diff --git a/admin/define-system.sh b/admin/define-system.sh
index 36d4ab9..0233259 100644
--- a/admin/define-system.sh
+++ b/admin/define-system.sh
@@ -287,8 +287,8 @@ EOF
fi
elif [ `uname -p` = "arm" ]; then
GAG_MACHINE=arm64
- if which gcc > /dev/null 2>&1; then
- DEFAULT_CCOMPILER=gcc
+ if which clang > /dev/null 2>&1; then
+ DEFAULT_CCOMPILER=clang
fi
if which clang++ > /dev/null 2>&1; then
DEFAULT_CXXCOMPILER=clang++

View File

@@ -0,0 +1,13 @@
diff --git a/admin/Makefile.def b/admin/Makefile.def
index 27a1c02..43ef322 100644
--- a/admin/Makefile.def
+++ b/admin/Makefile.def
@@ -228,7 +228,7 @@ GLOBAL_DIRTY = $(builddir) *~ TAGS ChangeLog* Makefile.bak
# Fortran preprocessing
# Preprocessor command
-CPP = cpp
+CPP = $(GAG_CPP)
# Preprocessor generic flags
GLOBAL_CPPFLAGS += -P -traditional -C

View File

@@ -0,0 +1,26 @@
diff --git a/admin/gildas-env.sh b/admin/gildas-env.sh
index acb06f9..b25ecd5 100644
--- a/admin/gildas-env.sh
+++ b/admin/gildas-env.sh
@@ -441,7 +441,7 @@ EOF
# Now search for Numpy
if python -c "import numpy" > /dev/null 2>&1; then
NUMPY_PRESENT=yes
- NUMPY_INC_DIR=`python -c "import numpy; print(numpy.__path__[0] + '/core/include')"`
+ NUMPY_INC_DIR=`python -c "import numpy; print(numpy.get_include())"`
if [ -e "$NUMPY_INC_DIR/numpy/arrayobject.h" ]; then
NUMPY_INC_PRESENT=yes
else
diff --git a/utilities/etc/setup.py.src b/utilities/etc/setup.py.src
index 9a4da86..110a0d1 100644
--- a/utilities/etc/setup.py.src
+++ b/utilities/etc/setup.py.src
@@ -75,7 +75,7 @@ mod_extras = mod_extras.split()
if (os.environ.get('NUMPY_PRESENT') == "yes"):
import numpy
- mod_inc_dirs.append(numpy.__path__[0] + '/core/include')
+ mod_inc_dirs.append(numpy.get_include())
else:
raise Exception("Numpy python package should be present. Aborting.")

View File

@@ -0,0 +1,112 @@
{
lib,
stdenv,
fetchurl,
gtk2-x11,
pkg-config,
python3,
gfortran,
cfitsio,
getopt,
perl,
groff,
which,
darwin,
ncurses,
makeWrapper,
}:
let
python3Env = python3.withPackages (
ps: with ps; [
numpy
setuptools
]
);
in
stdenv.mkDerivation (finalAttrs: {
version = "4.5-01";
pname = "imager";
src = fetchurl {
# The recommended download link is on Nextcloud instance that
# requires to accept some general terms of use. Use a mirror at
# univ-grenoble-alpes.fr instead.
url = "https://cloud.univ-grenoble-alpes.fr/s/J6yEqA6yZ8tX9da/download?path=%2F&files=imager-may25.tar.gz";
hash = "sha256-E3JjdVGEQ0I/ogYj0G1OZxfQ3hA+sRgA4LAfHK52Sec=";
};
nativeBuildInputs = [
pkg-config
groff
perl
getopt
gfortran
which
makeWrapper
];
buildInputs = [
gtk2-x11
cfitsio
python3Env
ncurses
];
patches = [
# Use Clang as the default compiler on Darwin.
./clang.patch
# Replace hardcoded cpp with GAG_CPP (see below).
./cpp-darwin.patch
# Fix the numpy header detection with numpy > 2.0.0
# Patch submitted upstream, it will be included in the next release.
./numpy-header.patch
];
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-unused-command-line-argument";
# Workaround for https://github.com/NixOS/nixpkgs/issues/304528
env.GAG_CPP = if stdenv.hostPlatform.isDarwin then "${gfortran.outPath}/bin/cpp" else "cpp";
postPatch = ''
substituteInPlace utilities/main/gag-makedepend.pl --replace-fail '/usr/bin/perl' ${lib.getExe perl}
'';
configurePhase = ''
source admin/gildas-env.sh -c gfortran -o openmp
echo "gag_doc: $out/share/doc/" >> kernel/etc/gag.dico.lcl
'';
postInstall = ''
cp -a ../gildas-exe/* $out
mv $out/$GAG_EXEC_SYSTEM $out/libexec
makeWrapper $out/libexec/bin/imager $out/bin/imager \
--set GAG_ROOT_DIR $out \
--set GAG_PATH $out/etc \
--set GAG_EXEC_SYSTEM libexec \
--set GAG_GAG \$HOME/.gag \
--set PYTHONHOME ${python3Env} \
--prefix PYTHONPATH : $out/libexec/python \
--set LD_LIBRARY_PATH $out/libexec/lib/
'';
meta = {
description = "Interferometric imaging package";
longDescription = ''
IMAGER is an interferometric imaging package in the GILDAS software,
tailored for usage simplicity and efficiency for multi-spectral data sets.
IMAGER was developed and optimized to handle large data files.
Therefore, IMAGER works mostly on internal buffers and avoids as much as possible
saving data to intermediate files.
File saving is done ultimately once the data analysis process is complete,
which offers an optimum use of the disk bandwidth.
'';
homepage = "https://imager.oasu.u-bordeaux.fr";
license = lib.licenses.free;
maintainers = [ lib.maintainers.smaret ];
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
})

View File

@@ -0,0 +1,86 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch2,
autoreconfHook,
zlib,
libpng,
libjpeg,
libwebp,
nix-update-script,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "imageworsener";
version = "1.3.5";
src = fetchFromGitHub {
owner = "jsummers";
repo = "imageworsener";
rev = finalAttrs.version;
hash = "sha256-1f5x8Ph994Kkjo38NudXL+UF0fpR8BmZfaGPxc8RENU=";
};
patches = [
# Fix tests not failing even when they should.
# https://github.com/jsummers/imageworsener/pull/46
(fetchpatch2 {
url = "https://github.com/jsummers/imageworsener/commit/91c7c79d86f55920193d17a7b87631b14ac7779f.patch?full_index=1";
hash = "sha256-8vxht0FiQFOdglwaO0ZQpg5BNYXXHROkznZ+Caxm/v0=";
})
];
postPatch = ''
patchShebangs tests/runtest
# JPEG tests fail due to libjpeg-turbo differences.
sed -i '/\.jpg/d' tests/runtest
rm tests/expected/*.jpg
'';
postInstall = ''
mkdir -p $out/share/doc/imageworsener
cp readme.txt technical.txt $out/share/doc/imageworsener
'';
nativeBuildInputs = [ autoreconfHook ];
buildInputs = [
zlib
libpng
libjpeg
libwebp
];
strictDeps = true;
doCheck = true;
enableParallelBuilding = true;
__structuredAttrs = true;
passthru.updateScript = nix-update-script { };
meta = {
description = "Raster image scaling and processing utility";
longDescription = ''
ImageWorsener is a cross-platform command-line utility and library for
image scaling and other image processing. It has full support for PNG,
JPEG, BMP formats, experimental support for WebP, read-only support for
GIF, and limited support for some other image formats. Its not as
fast or memory-efficient as some utilities, but its very accurate.
'';
homepage = "https://entropymine.com/imageworsener/";
changelog = "${finalAttrs.src.meta.homepage}/blob/${finalAttrs.src.rev}/changelog.txt";
sourceProvenance = [ lib.sourceTypes.fromSource ];
license = lib.licenses.mit;
maintainers = [
lib.maintainers.emily
lib.maintainers.smitop
];
mainProgram = "imagew";
platforms = lib.platforms.all;
};
})

View File

@@ -0,0 +1,56 @@
{
lib,
buildGoModule,
fetchFromGitHub,
fetchpatch,
pkg-config,
vips,
}:
buildGoModule rec {
pname = "imaginary";
version = "1.2.4";
src = fetchFromGitHub {
owner = "h2non";
repo = "imaginary";
rev = "v${version}";
hash = "sha256-oEkFoZMaNNJPMisqpIneeLK/sA23gaTWJ4nqtDHkrwA=";
};
patches = [
# add -return-size flag recommend by Nextcloud
# https://github.com/h2non/imaginary/pull/382
(fetchpatch {
name = "return-width-and-height-of-generated-images.patch";
url = "https://github.com/h2non/imaginary/commit/cfbf8d724cd326e835dfcb01e7224397c46037d3.patch";
hash = "sha256-TwZ5WU5g9LXrenpfY52jYsc6KsEt2fjDq7cPz6ILlhA=";
})
];
vendorHash = "sha256-BluY6Fz4yAKJ/A9aFuPPsgQN9N/5yd8g8rDfIZeYz5U=";
buildInputs = [ vips ];
nativeBuildInputs = [ pkg-config ];
ldflags = [
"-s"
"-w"
"-X main.Version=${version}"
];
__darwinAllowLocalNetworking = true;
meta = {
homepage = "https://fly.io/docs/app-guides/run-a-global-image-service";
changelog = "https://github.com/h2non/imaginary/releases/tag/v${version}";
description = "Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
dotlambda
urandom
];
mainProgram = "imaginary";
};
}

View File

@@ -0,0 +1,69 @@
{
lib,
stdenv,
fetchurl,
autoreconfHook,
docbook_xsl,
ffmpeg-full,
glib,
gtk3,
intltool,
libxslt,
pkg-config,
sox,
wrapGAppsHook3,
}:
stdenv.mkDerivation rec {
pname = "imagination";
version = "3.6";
src = fetchurl {
url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
sha256 = "139dgb9vfr2q7bxvjskykdz526xxwrn0bh463ir8m2p7rx5a3pw5";
};
nativeBuildInputs = [
autoreconfHook
docbook_xsl
intltool
libxslt
pkg-config
wrapGAppsHook3
];
buildInputs = [
ffmpeg-full
glib
gtk3
sox
];
preBuild = ''
substituteInPlace src/main-window.c \
--replace 'gtk_icon_theme_load_icon(icon_theme,"image", 20, 0, NULL)' \
'gtk_icon_theme_load_icon(icon_theme,"insert-image", 20, 0, NULL)' \
--replace 'gtk_icon_theme_load_icon(icon_theme,"sound", 20, 0, NULL)' \
'gtk_icon_theme_load_icon(icon_theme,"audio-x-generic", 20, 0, NULL)'
'';
preFixup = ''
gappsWrapperArgs+=(
--prefix PATH : "${
lib.makeBinPath [
ffmpeg-full
sox
]
}"
)
'';
meta = with lib; {
description = "Lightweight and simple DVD slide show maker";
homepage = "https://imagination.sourceforge.net";
license = licenses.gpl3Only;
maintainers = with maintainers; [ austinbutler ];
platforms = platforms.linux;
mainProgram = "imagination";
};
}

View File

@@ -0,0 +1,13 @@
diff --git a/imake.c b/imake.c
index c20cd4a..ec2589b 100644
--- a/imake.c
+++ b/imake.c
@@ -959,7 +959,7 @@ get_libc_version(FILE *inFile)
{
char aout[4096], *tmpdir;
FILE *fp;
- const char *format = "%s -o %s -x c -";
+ const char *format = "f=$(mktemp imakeXXXXXX.c); cat > $f; %s $f -o %s";
char *cc;
int len;
char *command;

View File

@@ -0,0 +1,41 @@
Disable imake autodetection for:
- LinuxDistribution to avoid injection of /usr paths
- gcc to avoid use uf /usr/bin/gcc
https://github.com/NixOS/nixpkgs/issues/135337
--- a/imake.c
+++ b/imake.c
@@ -1065,6 +1065,7 @@ get_distrib(FILE *inFile)
fprintf (inFile, "%s\n", "#define LinuxWare 11");
fprintf (inFile, "%s\n", "#define LinuxYggdrasil 12");
+#if 0 /* disable system autodetection. Fall through to LinuxUnknown. */
# ifdef CROSSCOMPILE
if (CrossCompiling) {
fprintf (inFile, "%s\n",
@@ -1090,6 +1091,7 @@ get_distrib(FILE *inFile)
* at the content of /etc/debian_version */
return;
}
+#endif
/* what's the definitive way to tell what any particular distribution is? */
fprintf (inFile, "%s\n", "#define DefaultLinuxDistribution LinuxUnknown");
@@ -1337,6 +1339,7 @@ get_gcc_version(FILE *inFile, char *name)
static boolean
get_gcc(char *cmd)
{
+#if 0 /* disable gcc autodetection. Fall through to explicitly set. */
struct stat sb;
static const char* gcc_path[] = {
#if defined(linux) || \
@@ -1385,6 +1388,9 @@ get_gcc(char *cmd)
}
}
return FALSE;
+#endif
+ strcpy (cmd, IMAKE_COMPILETIME_CPP);
+ return TRUE;
}
#ifdef CROSSCOMPILE

View File

@@ -0,0 +1,99 @@
{
lib,
stdenv,
fetchurl,
fetchpatch,
tradcpp,
xorg-cf-files,
pkg-config,
xorgproto,
writeScript,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "imake";
version = "1.0.10";
src = fetchurl {
url = "mirror://xorg/individual/util/imake-${finalAttrs.version}.tar.xz";
hash = "sha256-dd7LzqjXs1TPNq3JZ15TxHkO495WoUvYe0LI6KrS7PU=";
};
patches = [
# Disable imake autodetection for:
# - LinuxDistribution to avoid injection of /usr paths
# - gcc to avoid use uf /usr/bin/gcc
# https://github.com/NixOS/nixpkgs/issues/135337
./disable-autodetection.patch
# uberhack to workaround broken 'gcc -x c'
#
# Our cc-wrapper is broken whenever the '-x' flag is used:
# 'gcc -x c foo.c -o bar' doesn't work the same way as 'gcc foo.c -o bar'
# does. (Try both with NIX_DEBUG=1.)
#
# What happens is that passing '-x' causes linker-related flags (such as
# -Wl,-dynamic-linker) not to be added, just like if '-c' is passed.
# The bug happens outside the multiple-outputs branch as well, but it
# doesn't break imake there. It only breaks in multiple-outputs because
# linking without -Wl,-dynamic-linker produces a binary with an invalid
# ELF interpreter path. (Which arguably, is a bug in its own.)
# (copied from the commit message on 0100b270694ecab8aaa13fa5f3d30639b50d7777)
./cc-wrapper-uberhack.patch
# Add support for RISC-V
(fetchpatch {
url = "https://gitlab.freedesktop.org/xorg/util/imake/-/commit/a37ee515742f58359b4248742fa06d504f2dce1b.patch";
hash = "sha256-2aoXBm1JmNjS5vqGKEyX/qYUVJ8kYIzh/eq3WKU3uQ4=";
})
# Add support for LoongArch
(fetchpatch {
url = "https://gitlab.freedesktop.org/xorg/util/imake/-/commit/b4d568b7aa2db5525f63b1bc9486dc5e2ed36bd0.patch";
hash = "sha256-m35H3v5IFslqx5QaszPFAJ+g2HfDYyxbX+h+7/8/59M=";
})
];
strictDeps = true;
nativeBuildInputs = [ pkg-config ];
buildInputs = [ xorgproto ];
configureFlags = [
"ac_cv_path_RAWCPP=${stdenv.cc.targetPrefix}cpp"
];
env = {
CFLAGS = "-DIMAKE_COMPILETIME_CPP='\"${
if stdenv.hostPlatform.isDarwin then "${tradcpp}/bin/cpp" else "gcc"
}\"'";
};
preInstall = ''
mkdir -p $out/lib/X11/config
ln -s ${xorg-cf-files}/lib/X11/config/* $out/lib/X11/config
'';
inherit tradcpp xorg-cf-files;
setupHook = ./setup-hook.sh;
passthru = {
updateScript = writeScript "update-${finalAttrs.pname}" ''
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p common-updater-scripts
version="$(list-directory-versions --pname ${finalAttrs.pname} \
--url https://xorg.freedesktop.org/releases/individual/util/ \
| sort -V | tail -n1)"
update-source-version ${finalAttrs.pname} "$version"
'';
};
meta = {
description = "Obsolete C preprocessor interface to the make utility";
homepage = "https://gitlab.freedesktop.org/xorg/util/imake";
license = with lib.licenses; [
mitOpenGroup
x11
];
mainProgram = "imake";
maintainers = [ ];
platforms = lib.platforms.unix;
};
})

View File

@@ -0,0 +1,19 @@
export IMAKECPP="@tradcpp@/bin/tradcpp"
imakeConfigurePhase() {
runHook preConfigure
echoCmd 'configuring with imake'
if [ -z "${imakefile:-}" -a ! -e Imakefile ]; then
echo "no Imakefile, doing nothing"
else
xmkmf -a
fi
runHook postConfigure
}
if [ -z "${dontUseImakeConfigure-}" -a -z "${configurePhase-}" ]; then
configurePhase=imakeConfigurePhase
fi

View File

@@ -0,0 +1,31 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "imapdedup";
version = "1.2";
pyproject = true;
src = fetchFromGitHub {
owner = "quentinsf";
repo = "IMAPdedup";
tag = version;
hash = "sha256-CmWkLz9hdmedUxcojmUVTkPjqpaMmtEeHnF7aglKR+s=";
};
build-system = with python3Packages; [ hatchling ];
doCheck = false; # no tests
pythonImportsCheck = [ "imapdedup" ];
meta = {
description = "Duplicate email message remover";
homepage = "https://github.com/quentinsf/IMAPdedup";
maintainers = with lib.maintainers; [ sigmanificient ];
license = with lib.licenses; [ gpl2Only ];
mainProgram = "imapdedup";
};
}

View File

@@ -0,0 +1,76 @@
{
lib,
fetchurl,
makeWrapper,
perl,
perlPackages,
stdenv,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "imapsync";
version = "2.290";
src = fetchurl {
url = "https://imapsync.lamiral.info/dist/old_releases/${finalAttrs.version}/imapsync-${finalAttrs.version}.tgz";
hash = "sha256-uFhTxnaUDP793isfpF/7T8d4AnXDL4uN6zU8igY+EFE=";
};
postPatch = ''
sed -i -e s@/usr@$out@ Makefile
substituteInPlace INSTALL.d/prerequisites_imapsync --replace "PAR::Packer" ""
'';
postInstall = ''
wrapProgram $out/bin/imapsync --set PERL5LIB $PERL5LIB
'';
nativeBuildInputs = [ makeWrapper ];
buildInputs = with perlPackages; [
Appcpanminus
CGI
CryptOpenSSLRSA
DataUniqid
DistCheckConflicts
EncodeIMAPUTF7
FileCopyRecursive
FileTail
IOSocketINET6
IOTee
JSONWebToken
LWP
MailIMAPClient
ModuleImplementation
ModuleScanDeps
NetServer
NTLM
PackageStash
PackageStashXS
ProcProcessTable
Readonly
RegexpCommon
SysMemInfo
TermReadKey
TestDeep
TestFatal
TestMockGuard
TestMockObject
TestPod
TestRequires
UnicodeString
perl
];
meta = with lib; {
description = "Mail folder synchronizer between IMAP servers";
mainProgram = "imapsync";
homepage = "https://imapsync.lamiral.info/";
license = licenses.nlpl;
maintainers = with maintainers; [
pSub
motiejus
];
platforms = platforms.unix;
};
})

View File

@@ -0,0 +1,28 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
}:
stdenv.mkDerivation rec {
pname = "imath";
version = "3.2.1";
src = fetchFromGitHub {
owner = "AcademySoftwareFoundation";
repo = "imath";
rev = "v${version}";
hash = "sha256-O8IpP2MQ7egDbHIiL5TNBygmQCiS6Q/0VSe0LypsM/g=";
};
nativeBuildInputs = [ cmake ];
meta = with lib; {
description = "C++ and python library of 2D and 3D vector, matrix, and math operations for computer graphics";
homepage = "https://github.com/AcademySoftwareFoundation/Imath";
license = licenses.bsd3;
maintainers = with maintainers; [ paperdigits ];
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,45 @@
{
lib,
fetchFromGitHub,
python3,
}:
python3.pkgs.buildPythonApplication rec {
pname = "imdshift";
version = "1.0.0";
format = "pyproject";
src = fetchFromGitHub {
owner = "ayushpriya10";
repo = "IMDShift";
tag = "v${version}";
hash = "sha256-Uoa0uNOhCkT622Yy8GEg8jz9k5zmtXwGmvdb3MVTLX8=";
};
build-system = with python3.pkgs; [
setuptools
];
dependencies = with python3.pkgs; [
boto3
click
prettytable
tqdm
];
# Project has no tests
doCheck = false;
pythonImportsCheck = [
"IMDShift"
];
meta = {
description = "Tool to migrate workloads to IMDSv2";
mainProgram = "imdshift";
homepage = "https://github.com/ayushpriya10/IMDShift";
changelog = "https://github.com/ayushpriya10/IMDShift/releases/tag/v${version}";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ fab ];
};
}

17
pkgs/by-name/im/imewlconverter/deps.json generated Normal file
View File

@@ -0,0 +1,17 @@
[
{
"pname": "CSharpier",
"version": "0.27.3",
"hash": "sha256-9g5WA+ii6ovKVGwpTaNIhs/Oti9YLwd//UhbNbBkn8E="
},
{
"pname": "SharpZipLib",
"version": "1.4.2",
"hash": "sha256-/giVqikworG2XKqfN9uLyjUSXr35zBuZ2FX2r8X/WUY="
},
{
"pname": "UTF.Unknown",
"version": "2.5.1",
"hash": "sha256-9D6TqKSPsjzSly0mtUGZJbrNAJ7ftz9LJjWNwnnQMz4="
}
]

View File

@@ -0,0 +1,31 @@
{
fetchFromGitHub,
lib,
buildDotnetModule,
dotnetCorePackages,
}:
buildDotnetModule {
pname = "imewlconverter";
version = "3.2.0";
src = fetchFromGitHub {
owner = "studyzy";
repo = "imewlconverter";
rev = "v3.2.0";
hash = "sha256-7rKWbLbRCnMmJ9pwqMYZZZujyxbX84g4rFQ/Ms/R+uE=";
};
projectFile = "src/ImeWlConverterCmd/ImeWlConverterCmd.csproj";
nugetDeps = ./deps.json;
dotnet-sdk = dotnetCorePackages.sdk_8_0;
dotnet-runtime = dotnetCorePackages.aspnetcore_8_0;
meta = {
mainProgram = "ImeWlConverterCmd";
description = "FOSS program for converting IME dictionaries";
homepage = "https://github.com/studyzy/imewlconverter";
maintainers = with lib.maintainers; [ xddxdd ];
license = lib.licenses.gpl3Only;
};
}

View File

@@ -0,0 +1,27 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "imgcat";
version = "1.2.0";
src = fetchFromGitHub {
owner = "trashhalo";
repo = "imgcat";
rev = "v${version}";
hash = "sha256-L2Yvp+UR6q45ctKsi0v45lKkSE7eJsUPvG7lpX8M6nQ=";
};
vendorHash = "sha256-4kF+LwVNBY770wHLLcVlAqPoy4SNhbp2TxdNWRiJL6Q=";
meta = with lib; {
description = "Tool to output images as RGB ANSI graphics on the terminal";
homepage = "https://github.com/trashhalo/imgcat";
license = licenses.mit;
maintainers = with maintainers; [ penguwin ];
mainProgram = "imgcat";
};
}

View File

@@ -0,0 +1,57 @@
{
buildGoModule,
fetchFromGitHub,
lib,
makeWrapper,
runc,
wrapperDir ? "/run/wrappers/bin", # Default for NixOS, other systems might need customization.
}:
buildGoModule rec {
pname = "img";
version = "0.5.11";
src = fetchFromGitHub {
owner = "genuinetools";
repo = "img";
rev = "v${version}";
sha256 = "0r5hihzp2679ki9hr3p0f085rafy2hc8kpkdhnd4m5k4iibqib08";
};
vendorHash = null;
postPatch = ''
V={newgidmap,newgidmap} \
substituteInPlace ./internal/unshare/unshare.c \
--replace "/usr/bin/$V" "${wrapperDir}/$V"
'';
nativeBuildInputs = [
makeWrapper
];
tags = [
"seccomp"
"noembed" # disables embedded `runc`
];
ldflags = [
"-X github.com/genuinetools/img/version.VERSION=v${version}"
"-s -w"
];
postInstall = ''
wrapProgram "$out/bin/img" --prefix PATH : ${lib.makeBinPath [ runc ]}
'';
# Tests fail as: internal/binutils/install.go:57:15: undefined: Asset
doCheck = false;
meta = with lib; {
description = "Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder";
mainProgram = "img";
license = licenses.mit;
homepage = "https://github.com/genuinetools/img";
maintainers = with maintainers; [ bryanasdev000 ];
};
}

View File

@@ -0,0 +1,49 @@
{
lib,
stdenv,
fetchFromGitHub,
pkg-config,
openssl,
lzfse,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "img4lib";
version = "0-unstable-2021-11-28";
src = fetchFromGitHub {
owner = "xerub";
repo = "img4lib";
rev = "69772c72f3c08f021ec9fa4c386f2b3df60a38b7";
hash = "sha256-xCWovBJ9cxT17u1uo+aUQnxDoYFQXYy9Qer0mD45aOU=";
};
nativeBuildInputs = [
pkg-config
];
buildInputs = [
lzfse
openssl
];
installPhase = "
runHook preInstall
install -Dm755 img4 $out/bin/img4
runHook postInstall
";
strictDeps = true;
meta = {
description = "Library and tool for parsing, manipulating, and patching Apple .img4 container files";
homepage = "https://github.com/xerub/img4lib";
# No licensing information available
# https://github.com/xerub/img4lib/issues/14
license = lib.licenses.unfree;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ onny ];
mainProgram = "img4";
};
})

View File

@@ -0,0 +1,27 @@
diff --git a/configure.ac b/configure.ac
index 66da2bd..86278ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ([2.69])
-AC_INIT([img4tool], m4_esyscmd([git rev-list --count HEAD | tr -d '\n']), [tihmstar@gmail.com])
+AC_INIT([img4tool], [tihmstar@gmail.com])
AC_CANONICAL_SYSTEM
AC_CANONICAL_HOST
@@ -9,11 +9,10 @@ AM_INIT_AUTOMAKE([subdir-objects])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIRS([m4])
-
-AC_DEFINE([VERSION_COMMIT_COUNT], "m4_esyscmd([git rev-list --count HEAD | tr -d '\n'])", [Git commit count])
-AC_DEFINE([VERSION_COMMIT_SHA], "m4_esyscmd([git rev-parse HEAD | tr -d '\n'])", [Git commit sha])
-AC_SUBST([VERSION_COMMIT_COUNT], ["m4_esyscmd([git rev-list --count HEAD | tr -d '\n'])"])
-AC_SUBST([VERSION_COMMIT_SHA], ["m4_esyscmd([git rev-parse HEAD | tr -d '\n'])"])
+AC_ARG_WITH([version-commit-count], [],
+ [VERSION_COMMIT_COUNT="$withval"])
+AC_DEFINE([VERSION_COMMIT_COUNT], ["$VERSION_COMMIT_COUNT"], [Git commit count])
+AC_SUBST([VERSION_COMMIT_COUNT], ["$VERSION_COMMIT_COUNT"])
# Checks for programs.
AC_PROG_CXX

View File

@@ -0,0 +1,54 @@
{
lib,
clangStdenv,
fetchFromGitHub,
autoreconfHook,
pkg-config,
libgeneral,
libplist,
openssl,
lzfse,
git,
}:
clangStdenv.mkDerivation (finalAttrs: {
pname = "img4tool";
version = "217";
src = fetchFromGitHub {
owner = "tihmstar";
repo = "img4tool";
tag = finalAttrs.version;
hash = "sha256-67Xfq4jEK9juyaSIgVdWygAePZuyb4Yp8mY+6V66+Aw=";
};
# Do not depend on git to calculate version, instead
# pass version via configureFlag
patches = [ ./configure-version.patch ];
nativeBuildInputs = [
autoreconfHook
pkg-config
];
buildInputs = [
libgeneral
libplist
lzfse
openssl
];
configureFlags = [
"--with-version-commit-count=${finalAttrs.version}"
];
strictDeps = true;
meta = {
description = "Socket daemon to multiplex connections from and to iOS devices";
homepage = "https://github.com/tihmstar/img4tool";
license = lib.licenses.lgpl3;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ onny ];
mainProgram = "img4tool";
};
})

View File

@@ -0,0 +1,11 @@
diffsrc/cli/vendor/qcommandlinecommandparser/qcommandlinecommandparser.cpp b/src/cli/vendor/qcommandlinecommandparser/qcommandlinecommandparser.cpp
index 0742cac1..da820e94 100644
--- src/cli/vendor/qcommandlinecommandparser/qcommandlinecommandparser.cpp
+++ src/cli/vendor/qcommandlinecommandparser/qcommandlinecommandparser.cpp
@@ -1,5 +1,6 @@
#include "qcommandlinecommandparser.h"
#include <QString>
+#include <QDebug>
#include "vendor.h"
Q_CORE_EXPORT void qt_call_post_routines();

View File

@@ -0,0 +1,107 @@
{
lib,
stdenv,
cmake,
fetchFromGitHub,
makeWrapper,
catch2,
nodejs,
libpulseaudio,
openssl,
rsync,
typescript,
qt6,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "imgbrd-grabber";
version = "7.13.0";
src = fetchFromGitHub {
owner = "Bionus";
repo = "imgbrd-grabber";
tag = "v${finalAttrs.version}";
hash = "sha256-7EIXmqfTADG95vxKU1cFGnzZD3NJJN28HOF71YZD6nI=";
fetchSubmodules = true;
};
buildInputs =
with qt6;
[
qtbase
qtdeclarative
qttools
qtnetworkauth
qtmultimedia
]
++ [
openssl
libpulseaudio
typescript
nodejs
];
nativeBuildInputs = [
makeWrapper
qt6.wrapQtAppsHook
cmake
];
extraOutputsToLink = [ "doc" ];
preBuild = ''
export HOME=$TMPDIR
# the package.sh script provides some install helpers
# using this might make it easier to maintain/less likely for the
# install phase to fail across version bumps
patchShebangs ../scripts/package.sh
'';
patches = [
./fix-for-qt6.patch
];
postPatch = ''
# ensure the script uses the rsync package from nixpkgs
substituteInPlace ../scripts/package.sh --replace-fail "rsync" "${lib.getExe rsync}"
substituteInPlace gui/CMakeLists.txt \
--replace-fail "find_package(Qt6 COMPONENTS " "find_package(Qt6 COMPONENTS NetworkAuth " \
--replace-fail "set(QT_LIBRARIES " "set(QT_LIBRARIES Qt6::NetworkAuth "
# the npm build step only runs typescript
# run this step directly so it doesn't try and fail to download the unnecessary node_modules, etc.
substituteInPlace ./sites/CMakeLists.txt --replace-fail "npm install" "npm run build"
# link the catch2 sources from nixpkgs
ln -sf ${catch2.src} tests/src/
'';
postInstall = ''
# move the binaries to the share/Grabber folder so
# some relative links can be resolved (e.g. settings.ini)
mv $out/bin/* $out/share/Grabber/
cd ../..
# run the package.sh with $out/share/Grabber as the $APP_DIR
sh ./scripts/package.sh $out/share/Grabber
# add symlinks for the binaries to $out/bin
ln -s $out/share/Grabber/Grabber $out/bin/Grabber
ln -s $out/share/Grabber/Grabber-cli $out/bin/Grabber-cli
'';
sourceRoot = "${finalAttrs.src.name}/src";
meta = {
description = "Very customizable imageboard/booru downloader with powerful filenaming features";
license = lib.licenses.asl20;
homepage = "https://bionus.github.io/imgbrd-grabber/";
mainProgram = "Grabber";
maintainers = with lib.maintainers; [
evanjs
luftmensch-luftmensch
];
};
})

View File

@@ -0,0 +1,41 @@
{
lib,
stdenv,
fetchFromGitHub,
cimg,
ncurses,
}:
stdenv.mkDerivation rec {
pname = "imgcat";
version = "2.6.0";
buildInputs = [
ncurses
cimg
];
preConfigure = ''
sed -i -e "s|-ltermcap|-L ${ncurses}/lib -lncurses|" Makefile
'';
makeFlags = [ "PREFIX=$(out)" ];
src = fetchFromGitHub {
owner = "eddieantonio";
repo = "imgcat";
rev = "v${version}";
sha256 = "sha256-miFjlahTI0GDpgsjnA/K1R4R5654M8AoK78CycoLTqA=";
};
env.NIX_CFLAGS_COMPILE = "-Wno-error";
meta = with lib; {
description = "It's like cat, but for images";
homepage = "https://github.com/eddieantonio/imgcat";
license = licenses.isc;
maintainers = with maintainers; [ jwiegley ];
platforms = platforms.unix;
mainProgram = "imgcat";
};
}

View File

@@ -0,0 +1,40 @@
{
buildGoModule,
fetchFromGitHub,
lib,
}:
buildGoModule rec {
pname = "imgcrypt";
version = "1.1.10";
src = fetchFromGitHub {
owner = "containerd";
repo = "imgcrypt";
rev = "v${version}";
hash = "sha256-81jfoWHYYenGQFcQI9kk8uPnv6FcyOtcJjpo1ykdtOI=";
};
vendorHash = null;
ldflags = [
"-X github.com/containerd/containerd/version.Version=${version}"
];
subPackages = [
"cmd/ctd-decoder"
"cmd/ctr"
];
postFixup = ''
mv $out/bin/ctr $out/bin/ctr-enc
'';
meta = with lib; {
description = "Image encryption library and command line tool";
homepage = "https://github.com/containerd/imgcrypt";
license = licenses.asl20;
platforms = platforms.linux;
maintainers = with maintainers; [ mikroskeem ];
};
}

View File

@@ -0,0 +1,47 @@
{
lib,
fetchFromGitHub,
python3Packages,
}:
python3Packages.buildPythonApplication rec {
pname = "imgp";
version = "2.9";
format = "pyproject";
disabled = python3Packages.pythonOlder "3.8";
src = fetchFromGitHub {
owner = "jarun";
repo = "imgp";
rev = "v${version}";
hash = "sha256-yQ2BzOBn6Bl9ieZkREKsj1zLnoPcf0hZhZ90Za5kiKA=";
};
build-system = [ python3Packages.setuptools ];
dependencies = [ python3Packages.pillow ];
installFlags = [
"DESTDIR=$(out)"
"PREFIX="
];
postInstall = ''
install -Dm555 auto-completion/bash/imgp-completion.bash $out/share/bash-completion/completions/imgp.bash
install -Dm555 auto-completion/fish/imgp.fish -t $out/share/fish/vendor_completions.d
install -Dm555 auto-completion/zsh/_imgp -t $out/share/zsh/site-functions
'';
checkPhase = ''
$out/bin/imgp --help
'';
meta = with lib; {
description = "High-performance CLI batch image resizer & rotator";
mainProgram = "imgp";
homepage = "https://github.com/jarun/imgp";
license = licenses.gpl3Plus;
platforms = platforms.unix;
maintainers = with maintainers; [ sikmir ];
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
stdenv,
fetchFromGitHub,
bzip2,
openssl,
zlib,
}:
stdenv.mkDerivation rec {
pname = "imgpatchtools";
version = "0.3";
src = fetchFromGitHub {
owner = "erfanoabdi";
repo = "imgpatchtools";
rev = version;
sha256 = "sha256-7TOkqaXPui14VcSmMmYJ1Wg+s85wrgp+E0XcCB0Ml7M=";
};
buildInputs = [
bzip2
openssl
zlib
];
installPhase = "install -Dt $out/bin bin/*";
meta = with lib; {
description = "Tools to manipulate Android OTA archives";
longDescription = ''
This package is useful for Android development. In particular, it can be
used to extract ext4 /system image from Android distribution ZIP archives
such as those distributed by LineageOS and Replicant, via BlockImageUpdate
utility. It also includes other, related, but arguably more advanced tools
for OTA manipulation.
'';
homepage = "https://github.com/erfanoabdi/imgpatchtools";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.linux;
};
}

View File

@@ -0,0 +1,32 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "imgpkg";
version = "0.46.1";
src = fetchFromGitHub {
owner = "carvel-dev";
repo = "imgpkg";
rev = "v${version}";
hash = "sha256-OrZjk0ap7ZNlxe/1FIVCZX93bVYxCJzFiijnQOIPeWk=";
};
vendorHash = null;
subPackages = [ "cmd/imgpkg" ];
env.CGO_ENABLED = "0";
ldflags = [ "-X=carvel.dev/imgpkg/pkg/imgpkg/cmd.Version=${version}" ];
meta = {
description = "Store application configuration files in Docker/OCI registries";
homepage = "https://carvel.dev/imgpkg";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ benchand ];
mainProgram = "imgpkg";
};
}

View File

@@ -0,0 +1,46 @@
{
lib,
buildGoModule,
fetchFromGitHub,
pkg-config,
vips,
gobject-introspection,
stdenv,
libunwind,
}:
buildGoModule rec {
pname = "imgproxy";
version = "3.30.0";
src = fetchFromGitHub {
owner = "imgproxy";
repo = "imgproxy";
hash = "sha256-vT+Nyjx2TTOCzosCV/EfMLEnyT6RCebBFNu0/IRuwak=";
rev = "v${version}";
};
vendorHash = "sha256-0NIsaSMOBenDCGvnGdLB60sp08EaC/CezWogxTrcDdY=";
__darwinAllowLocalNetworking = true;
nativeBuildInputs = [
pkg-config
gobject-introspection
];
buildInputs = [ vips ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ libunwind ];
preBuild = ''
export CGO_LDFLAGS_ALLOW='-(s|w)'
'';
meta = with lib; {
description = "Fast and secure on-the-fly image processing server written in Go";
mainProgram = "imgproxy";
homepage = "https://imgproxy.net";
changelog = "https://github.com/imgproxy/imgproxy/blob/${src.rev}/CHANGELOG.md";
license = licenses.mit;
maintainers = with maintainers; [ paluh ];
};
}

View File

@@ -0,0 +1,198 @@
From c5fe9a321d83fc70cf30ef999c24377869cedbd8 Mon Sep 17 00:00:00 2001
From: SomeoneSerge <else@someonex.net>
Date: Thu, 27 Jun 2024 11:15:38 +0000
Subject: [PATCH] imgui: allow installing into split outputs
---
ports/imgui/CMakeLists.txt | 74 +++++++++++++++++++++++---------------
1 file changed, 45 insertions(+), 29 deletions(-)
diff --git a/ports/imgui/CMakeLists.txt b/ports/imgui/CMakeLists.txt
index 1502a5aff2..be05d29f4f 100644
--- a/ports/imgui/CMakeLists.txt
+++ b/ports/imgui/CMakeLists.txt
@@ -8,13 +8,15 @@ if(APPLE)
enable_language(OBJCXX)
endif()
+include(GNUInstallDirs) # Defines CMAKE_INSTALL_INCLUDEDIR if not set
+
add_library(${PROJECT_NAME} "")
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(
${PROJECT_NAME}
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/test-engine>"
- $<INSTALL_INTERFACE:include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_sources(
@@ -154,18 +156,32 @@ list(REMOVE_DUPLICATES BINDINGS_SOURCES)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}_target
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
- RUNTIME DESTINATION bin
+ ARCHIVE
+ COMPONENT Development
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY
+ COMPONENT Runtime
+ NAMELINK_COMPONENT Development
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME
+ COMPONENT Runtime
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
)
foreach(BINDING_TARGET ${BINDING_TARGETS})
install(
TARGETS ${BINDING_TARGET}
EXPORT ${PROJECT_NAME}_target
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
- RUNTIME DESTINATION bin
+ ARCHIVE
+ COMPONENT Development
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY
+ COMPONENT Runtime
+ NAMELINK_COMPONENT Development
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME
+ COMPONENT Runtime
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endforeach()
@@ -178,47 +194,47 @@ if(NOT IMGUI_SKIP_HEADERS)
${CMAKE_CURRENT_SOURCE_DIR}/imstb_rectpack.h
${CMAKE_CURRENT_SOURCE_DIR}/imstb_truetype.h
${CMAKE_CURRENT_SOURCE_DIR}/misc/cpp/imgui_stdlib.h
- DESTINATION include
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
if(IMGUI_BUILD_ALLEGRO5_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if (IMGUI_BUILD_ANDROID_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_android.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_android.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_DX9_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx9.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx9.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_DX10_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx10.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx10.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_DX11_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx11.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx11.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_DX12_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx12.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx12.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_GLFW_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_GLUT_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_METAL_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_OPENGL2_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_OPENGL3_BINDING)
@@ -227,16 +243,16 @@ if(NOT IMGUI_SKIP_HEADERS)
${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3.h
${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3_loader.h
DESTINATION
- include
+ ${CMAKE_INSTALL_INCLUDEDIR}
)
endif()
if(IMGUI_BUILD_OSX_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_osx.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_osx.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_SDL3_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl3.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl3.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_SDLGPU3_BINDING)
@@ -245,24 +261,24 @@ if(NOT IMGUI_SKIP_HEADERS)
${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlgpu3.h
${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlgpu3_shaders.h
DESTINATION
- include
+ ${CMAKE_INSTALL_INCLUDEDIR}
)
endif()
if(IMGUI_BUILD_SDL3_RENDERER_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_VULKAN_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_BUILD_WIN32_BINDING)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_win32.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_win32.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_FREETYPE)
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.h DESTINATION include)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(IMGUI_TEST_ENGINE)
@@ -285,13 +301,13 @@ if(NOT IMGUI_SKIP_HEADERS)
endif()
include(CMakePackageConfigHelpers)
-configure_package_config_file(imgui-config.cmake.in imgui-config.cmake INSTALL_DESTINATION share/imgui)
+configure_package_config_file(imgui-config.cmake.in imgui-config.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imgui)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/imgui-config.cmake DESTINATION share/imgui)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/imgui-config.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imgui)
install(
EXPORT ${PROJECT_NAME}_target
NAMESPACE ${PROJECT_NAME}::
FILE ${PROJECT_NAME}-targets.cmake
- DESTINATION share/${PROJECT_NAME}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
--
2.47.2

View File

@@ -0,0 +1,11 @@
project(ImguiDemo LANGUAGES CXX)
cmake_minimum_required(VERSION 3.20)
add_executable(demo ./main.cpp)
find_package(imgui REQUIRED)
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
target_link_libraries(demo PRIVATE imgui glfw OpenGL::GL)
install(TARGETS demo RUNTIME DESTINATION bin)

View File

@@ -0,0 +1,29 @@
{
lib,
stdenv,
cmake,
imgui,
}:
stdenv.mkDerivation {
pname = "${imgui.pname}-demo";
inherit (imgui) version;
src = "${imgui.src}/examples/example_glfw_opengl3";
postPatch = ''
rm Makefile*
cp ${./CMakeLists.txt} CMakeLists.txt
'';
nativeBuildInputs = [ cmake ];
buildInputs = [ (imgui.override { IMGUI_BUILD_GLFW_BINDING = true; }) ];
meta = with lib; {
description = "Standalone ImPlot Demos";
homepage = "https://github.com/ocornut/imgui/tree/master/examples/example_glfw_opengl3";
license = licenses.mit;
maintainers = with maintainers; [ SomeoneSerge ];
mainProgram = "demo";
platforms = lib.platforms.linux;
};
}

View File

@@ -0,0 +1,161 @@
{
stdenv,
lib,
applyPatches,
callPackage,
cmake,
fetchFromGitHub,
fetchpatch,
glfw,
libGL,
SDL2,
sdl3,
vcpkg,
vulkan-headers,
vulkan-loader,
imgui,
# NOTE: Not coming from vcpkg
IMGUI_LINK_GLVND ?
!stdenv.hostPlatform.isWindows && (IMGUI_BUILD_OPENGL2_BINDING || IMGUI_BUILD_OPENGL3_BINDING),
# The intent is to mirror vcpkg's flags[^1],
# but we only actually support Linux and glfw3 until someone contributes the rest
# [^1]: https://github.com/microsoft/vcpkg/blob/095ee06e7f60dceef7d713e3f8b1c2eb10d650d7/ports/imgui/CMakeLists.txt#L33-L108
IMGUI_BUILD_ALLEGRO5_BINDING ? false,
IMGUI_BUILD_ANDROID_BINDING ? stdenv.hostPlatform.isAndroid,
IMGUI_BUILD_DX9_BINDING ? false,
IMGUI_BUILD_DX10_BINDING ? false,
IMGUI_BUILD_DX11_BINDING ? false,
IMGUI_BUILD_DX12_BINDING ? false,
IMGUI_BUILD_GLFW_BINDING ? !stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_GLUT_BINDING ? false,
IMGUI_BUILD_METAL_BINDING ? stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_OPENGL2_BINDING ? false,
IMGUI_BUILD_OPENGL3_BINDING ?
IMGUI_BUILD_SDL3_BINDING || IMGUI_BUILD_GLFW_BINDING || IMGUI_BUILD_GLUT_BINDING,
IMGUI_BUILD_OSX_BINDING ? stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_SDL3_BINDING ? !IMGUI_BUILD_GLFW_BINDING && !stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_SDL3_RENDERER_BINDING ? IMGUI_BUILD_SDL3_BINDING,
IMGUI_BUILD_SDL2_BINDING ? false,
IMGUI_BUILD_SDL2_RENDERER_BINDING ? false,
IMGUI_BUILD_SDLGPU3_BINDING ? IMGUI_BUILD_SDL3_BINDING && lib.versionAtLeast imgui.version "1.91.8",
IMGUI_BUILD_VULKAN_BINDING ? false,
IMGUI_BUILD_WIN32_BINDING ? false,
IMGUI_FREETYPE ? false,
IMGUI_FREETYPE_LUNASVG ? false,
IMGUI_USE_WCHAR32 ? false,
}:
let
vcpkgRevs.postSdl3 = lib.versionAtLeast vcpkg.version "2025.03.19";
vcpkgRevs.others = !vcpkgRevs.postSdl3;
vcpkgSource = applyPatches {
inherit (vcpkg) src;
patches =
lib.optionals vcpkgRevs.postSdl3 [
# This patch was not accepted mainstream, as out-of-scope
# and also to not encourage dependencies between Nixpkgs and Vcpkg.
# Currently @SomeoneSerge is responsible for rebasing it when necessary.
# Consider vendoring instead?
./0001-imgui-allow-installing-into-split-outputs.patch
]
++ lib.optionals vcpkgRevs.others [
# Original version of the split-outputs patch
fetchpatch
{
url = "https://github.com/microsoft/vcpkg/commit/4108dd75ce9731a4fdcf50fd05034405156eaddf.patch";
hash = "sha256-jXbR0NfyuO8EESmva5A+H3WmBfCG83OiA8ZCcWsRhQA=";
}
];
};
in
stdenv.mkDerivation rec {
pname = "imgui";
version = "1.91.4";
outputs = [
# Note: no "dev" because vcpkg installs include/ and imgui-config.cmake
# into different prefixes but expects the merged layout at import time
"out"
"lib"
];
src = fetchFromGitHub {
owner = "ocornut";
repo = "imgui";
tag = "v${version}";
hash = "sha256-6j4keBOAzbBDsV0+R4zTNlsltxz2dJDGI43UIrHXDNM=";
};
cmakeRules = "${vcpkgSource}/ports/imgui";
postPatch = ''
cp "$cmakeRules"/{CMakeLists.txt,*.cmake.in} ./
'';
nativeBuildInputs = [ cmake ];
propagatedBuildInputs =
lib.optionals IMGUI_LINK_GLVND [ libGL ]
++ lib.optionals IMGUI_BUILD_GLFW_BINDING [ glfw ]
++ lib.optionals IMGUI_BUILD_SDL3_BINDING [ sdl3 ]
++ lib.optionals IMGUI_BUILD_SDL2_BINDING [ SDL2 ]
++ lib.optionals IMGUI_BUILD_VULKAN_BINDING [
vulkan-headers
vulkan-loader
];
cmakeFlags = [
(lib.cmakeBool "IMGUI_BUILD_GLFW_BINDING" IMGUI_BUILD_GLFW_BINDING)
(lib.cmakeBool "IMGUI_BUILD_ALLEGRO5_BINDING" IMGUI_BUILD_ALLEGRO5_BINDING)
(lib.cmakeBool "IMGUI_BUILD_ANDROID_BINDING" IMGUI_BUILD_ANDROID_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX9_BINDING" IMGUI_BUILD_DX9_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX10_BINDING" IMGUI_BUILD_DX10_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX11_BINDING" IMGUI_BUILD_DX11_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX12_BINDING" IMGUI_BUILD_DX12_BINDING)
(lib.cmakeBool "IMGUI_BUILD_GLFW_BINDING" IMGUI_BUILD_GLFW_BINDING)
(lib.cmakeBool "IMGUI_BUILD_GLUT_BINDING" IMGUI_BUILD_GLUT_BINDING)
(lib.cmakeBool "IMGUI_BUILD_METAL_BINDING" IMGUI_BUILD_METAL_BINDING)
(lib.cmakeBool "IMGUI_BUILD_OPENGL2_BINDING" IMGUI_BUILD_OPENGL2_BINDING)
(lib.cmakeBool "IMGUI_BUILD_OPENGL3_BINDING" IMGUI_BUILD_OPENGL3_BINDING)
(lib.cmakeBool "IMGUI_BUILD_OSX_BINDING" IMGUI_BUILD_OSX_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL2_BINDING" IMGUI_BUILD_SDL2_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL3_BINDING" IMGUI_BUILD_SDL3_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL2_RENDERER_BINDING" IMGUI_BUILD_SDL2_RENDERER_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL3_RENDERER_BINDING" IMGUI_BUILD_SDL3_RENDERER_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDLGPU3_BINDING" IMGUI_BUILD_SDLGPU3_BINDING)
(lib.cmakeBool "IMGUI_BUILD_VULKAN_BINDING" IMGUI_BUILD_VULKAN_BINDING)
(lib.cmakeBool "IMGUI_BUILD_WIN32_BINDING" IMGUI_BUILD_WIN32_BINDING)
(lib.cmakeBool "IMGUI_FREETYPE" IMGUI_FREETYPE)
(lib.cmakeBool "IMGUI_FREETYPE_LUNASVG" IMGUI_FREETYPE_LUNASVG)
(lib.cmakeBool "IMGUI_USE_WCHAR32" IMGUI_USE_WCHAR32)
];
passthru = {
tests = {
demo = callPackage ./demo { };
};
};
meta = {
# These flags haven't been tested:
broken =
IMGUI_BUILD_SDL2_BINDING # Option removed from Vcpkg' CMakeLists
|| IMGUI_BUILD_SDL2_RENDERER_BINDING
|| IMGUI_FREETYPE
|| IMGUI_FREETYPE_LUNASVG
|| IMGUI_BUILD_DX9_BINDING
|| IMGUI_BUILD_DX10_BINDING
|| IMGUI_BUILD_DX11_BINDING
|| IMGUI_BUILD_DX12_BINDING
|| IMGUI_BUILD_WIN32_BINDING
|| IMGUI_BUILD_ALLEGRO5_BINDING
|| IMGUI_BUILD_ANDROID_BINDING;
description = "Bloat-free Graphical User interface for C++ with minimal dependencies";
homepage = "https://github.com/ocornut/imgui";
license = lib.licenses.mit; # vcpkg licensed as MIT too
maintainers = with lib.maintainers; [
SomeoneSerge
];
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,52 @@
{
lib,
stdenv,
fetchFromGitHub,
makeWrapper,
curl,
jq,
gnugrep,
libnotify,
scrot,
which,
xclip,
}:
let
deps = lib.makeBinPath [
curl
jq
gnugrep
libnotify
scrot
which
xclip
];
in
stdenv.mkDerivation rec {
version = "2.0.0";
pname = "imgur-screenshot";
src = fetchFromGitHub {
owner = "jomo";
repo = "imgur-screenshot";
rev = "v${version}";
sha256 = "0fkhvfraijbrw806pgij41bn1hc3r7l7l3snkicmshxj83lmsd5k";
};
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
install -Dm755 imgur-screenshot $out/bin/imgur-screenshot
wrapProgram $out/bin/imgur-screenshot --prefix PATH ':' ${deps}
'';
meta = with lib; {
description = "Tool for easy screencapping and uploading to imgur";
homepage = "https://github.com/jomo/imgur-screenshot/";
platforms = platforms.linux;
license = licenses.mit;
maintainers = [ ];
mainProgram = "imgur-screenshot";
};
}

View File

@@ -0,0 +1,44 @@
{
lib,
stdenv,
fetchFromGitHub,
bash,
curl,
xsel,
}:
stdenv.mkDerivation rec {
pname = "imgurbash2";
version = "3.3";
src = fetchFromGitHub {
owner = "ram-on";
repo = "imgurbash2";
rev = version;
sha256 = "sha256-7J3LquzcYX0wBR6kshz7VuPv/TftTzKFdWcgsML2DnI=";
};
installPhase = ''
mkdir -p $out/bin
cat <<EOF >$out/bin/imgurbash2
#!${bash}/bin/bash
PATH=${
lib.makeBinPath [
curl
xsel
]
}:\$PATH
EOF
cat imgurbash2 >> $out/bin/imgurbash2
chmod +x $out/bin/imgurbash2
'';
meta = with lib; {
description = "Shell script that uploads images to imgur";
license = licenses.mit;
platforms = platforms.all;
maintainers = [ ];
homepage = "https://github.com/ram-on/imgurbash2";
mainProgram = "imgurbash2";
};
}

View File

@@ -0,0 +1,149 @@
{
lib,
stdenv,
cmake,
llvm,
fetchFromGitHub,
mbedtls,
gtk3,
pkg-config,
capstone,
dbus,
libGLU,
libGL,
glfw3,
file,
perl,
python3,
jansson,
curl,
fmt,
nlohmann_json,
yara,
rsync,
nix-update-script,
autoPatchelfHook,
makeWrapper,
}:
let
version = "1.37.4";
patterns_version = "1.37.4";
patterns_src = fetchFromGitHub {
name = "ImHex-Patterns-source-${patterns_version}";
owner = "WerWolv";
repo = "ImHex-Patterns";
tag = "ImHex-v${patterns_version}";
hash = "sha256-2NgMYaG6+XKp0fIHAn3vAcoXXa3EF4HV01nI+t1IL1U=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "imhex";
inherit version;
src = fetchFromGitHub {
name = "ImHex-source-${version}";
fetchSubmodules = true;
owner = "WerWolv";
repo = "ImHex";
tag = "v${finalAttrs.version}";
hash = "sha256-uenwAaIjtBzrtiLdy6fh5TxtbWtUJbtybNOLP3+8blA=";
};
strictDeps = true;
nativeBuildInputs = [
cmake
llvm
python3
perl
pkg-config
rsync
makeWrapper
]
++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
buildInputs = [
capstone
curl
dbus
file
fmt
glfw3
gtk3
jansson
libGLU
mbedtls
nlohmann_json
yara
];
# autoPatchelfHook only searches for *.so and *.so.*, and won't find *.hexpluglib
# however, we will append to RUNPATH ourselves
autoPatchelfIgnoreMissingDeps = lib.optionals stdenv.hostPlatform.isLinux [ "*.hexpluglib" ];
appendRunpaths = lib.optionals stdenv.hostPlatform.isLinux [
(lib.makeLibraryPath [ libGL ])
"${placeholder "out"}/lib/imhex/plugins"
];
cmakeFlags = [
(lib.cmakeBool "IMHEX_OFFLINE_BUILD" true)
(lib.cmakeBool "IMHEX_COMPRESS_DEBUG_INFO" false) # avoids error: cannot compress debug sections (zstd not enabled)
(lib.cmakeBool "IMHEX_GENERATE_PACKAGE" stdenv.hostPlatform.isDarwin)
(lib.cmakeBool "USE_SYSTEM_CAPSTONE" true)
(lib.cmakeBool "USE_SYSTEM_CURL" true)
(lib.cmakeBool "USE_SYSTEM_FMT" true)
(lib.cmakeBool "USE_SYSTEM_LLVM" true)
(lib.cmakeBool "USE_SYSTEM_NLOHMANN_JSON" true)
(lib.cmakeBool "USE_SYSTEM_YARA" true)
(lib.cmakeFeature "CMAKE_POLICY_VERSION_MINIMUM" "3.5")
];
env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
# Comment out fixup_bundle in PostprocessBundle.cmake as we are not building a standalone application
postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace cmake/modules/PostprocessBundle.cmake \
--replace-fail "fixup_bundle" "#fixup_bundle"
'';
# rsync is used here so we can not copy the _schema.json files
postInstall =
if stdenv.hostPlatform.isLinux then
''
mkdir -p $out/share/imhex
rsync -av --exclude="*_schema.json" ${patterns_src}/{constants,encodings,includes,magic,nodes,patterns} $out/share/imhex
# without this imhex is not able to find pattern files
wrapProgram $out/bin/imhex --prefix XDG_DATA_DIRS : $out/share
''
else if stdenv.hostPlatform.isDarwin then
''
mkdir -p $out/Applications
mv $out/imhex.app $out/Applications
rsync -av --exclude="*_schema.json" ${patterns_src}/{constants,encodings,includes,magic,nodes,patterns} "$out/Applications/imhex.app/Contents/MacOS"
install_name_tool \
-change "$out/lib/libimhex.${finalAttrs.version}${stdenv.hostPlatform.extensions.sharedLibrary}" \
"@executable_path/../Frameworks/libimhex.${finalAttrs.version}${stdenv.hostPlatform.extensions.sharedLibrary}" \
"$out/Applications/imhex.app/Contents/MacOS/imhex"
makeWrapper "$out/Applications/imhex.app/Contents/MacOS/imhex" "$out/bin/imhex"
''
else
throw "Unsupported system";
passthru.updateScript = nix-update-script { };
meta = {
description = "Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM";
homepage = "https://github.com/WerWolv/ImHex";
license = with lib.licenses; [ gpl2Only ];
maintainers = with lib.maintainers; [
kashw2
cafkafk
govanify
ryand56
];
platforms = with lib.platforms; linux ++ darwin;
};
})

View File

@@ -0,0 +1,35 @@
{
lib,
stdenv,
autoreconfHook,
fetchurl,
gmp,
blas,
}:
stdenv.mkDerivation rec {
pname = "iml";
version = "1.0.5";
src = fetchurl {
url = "http://www.cs.uwaterloo.ca/~astorjoh/iml-${version}.tar.bz2";
sha256 = "0akwhhz9b40bz6lrfxpamp7r7wkk48p455qbn04mfnl9a1l6db8x";
};
buildInputs = [
gmp
blas
];
nativeBuildInputs = [
autoreconfHook
];
configureFlags = [
"--with-gmp-include=${gmp.dev}/include"
"--with-gmp-lib=${gmp}/lib"
"--with-cblas=-lblas"
];
meta = {
description = "Algorithms for computing exact solutions to dense systems of linear equations over the integers";
license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.raskin ];
platforms = lib.platforms.unix;
homepage = "https://cs.uwaterloo.ca/~astorjoh/iml.html";
};
}

View File

@@ -0,0 +1,128 @@
{
lib,
stdenv,
fetchurl,
# Image file formats
libjpeg,
libtiff,
giflib,
libpng,
libwebp,
libjxl,
libspectre,
# imlib2 can load images from ID3 tags.
libid3tag,
librsvg,
libheif,
freetype,
bzip2,
pkg-config,
x11Support ? true,
webpSupport ? true,
svgSupport ? false,
heifSupport ? false,
jxlSupport ? false,
psSupport ? false,
# for passthru.tests
libcaca,
diffoscopeMinimal,
feh,
icewm,
openbox,
fluxbox,
enlightenment,
xorg,
testers,
gitUpdater,
}:
let
inherit (lib) optional optionals;
in
stdenv.mkDerivation (finalAttrs: {
pname = "imlib2";
version = "1.12.5";
src = fetchurl {
url = "mirror://sourceforge/enlightenment/imlib2-${finalAttrs.version}.tar.xz";
hash = "sha256-+iMV8oN5tDCm5mBbQoSwe+BqPvQi1PXhybskcUxM9t0=";
};
buildInputs = [
libjpeg
libtiff
giflib
libpng
bzip2
freetype
libid3tag
]
++ optionals x11Support [
xorg.libXft
xorg.libXext
]
++ optional heifSupport libheif
++ optional svgSupport librsvg
++ optional webpSupport libwebp
++ optional jxlSupport libjxl
++ optional psSupport libspectre;
nativeBuildInputs = [ pkg-config ];
enableParallelBuilding = true;
# Do not build amd64 assembly code on Darwin, because it fails to compile
# with unknown directive errors
configureFlags =
optional stdenv.hostPlatform.isDarwin "--enable-amd64=no"
++ optional (!svgSupport) "--without-svg"
++ optional (!heifSupport) "--without-heif"
++ optional (!x11Support) "--without-x";
outputs = [
"bin"
"out"
"dev"
];
passthru = {
tests = {
inherit
libcaca
diffoscopeMinimal
feh
icewm
openbox
fluxbox
enlightenment
;
pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
};
updateScript = gitUpdater {
# No nicer place to find latest release.
url = "https://git.enlightenment.org/old/legacy-imlib2.git";
rev-prefix = "v";
};
};
meta = with lib; {
description = "Image manipulation library";
longDescription = ''
This is the Imlib 2 library - a library that does image file loading and
saving as well as rendering, manipulation, arbitrary polygon support, etc.
It does ALL of these operations FAST. Imlib2 also tries to be highly
intelligent about doing them, so writing naive programs can be done
easily, without sacrificing speed.
'';
homepage = "https://docs.enlightenment.org/api/imlib2/html";
changelog = "https://git.enlightenment.org/old/legacy-imlib2/raw/tag/v${finalAttrs.version}/ChangeLog";
license = licenses.imlib2;
pkgConfigModules = [ "imlib2" ];
platforms = platforms.unix;
maintainers = [ ];
};
})

View File

@@ -0,0 +1,44 @@
{
lib,
stdenv,
catch2,
fetchFromGitHub,
cmake,
nix-update-script,
}:
stdenv.mkDerivation rec {
pname = "immer";
version = "0.8.1";
src = fetchFromGitHub {
owner = "arximboldi";
repo = "immer";
tag = "v${version}";
hash = "sha256-Tyj2mNyLhrcFNQEn4xHC8Gz7/jtA4Dnkjtk8AAXJEw8=";
};
nativeBuildInputs = [
cmake
];
buildInputs = [
catch2
];
strictDeps = true;
dontBuild = true;
dontUseCmakeBuildDir = true;
passthru.updateScript = nix-update-script { };
meta = {
description = "Postmodern immutable and persistent data structures for C++ value semantics at scale";
homepage = "https://sinusoid.es/immer";
changelog = "https://github.com/arximboldi/immer/releases/tag/v${version}";
license = lib.licenses.boost;
maintainers = with lib.maintainers; [ sifmelcara ];
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,33 @@
{
stdenv,
pname,
version,
src,
meta,
undmg,
}:
stdenv.mkDerivation {
inherit
pname
version
src
meta
;
nativeBuildInputs = [ undmg ];
sourceRoot = ".";
installPhase = ''
runHook preInstall
mkdir -p $out/Applications
cp -r *.app $out/Applications
runHook postInstall
'';
# Immersed is notarized.
dontFixup = true;
}

View File

@@ -0,0 +1,46 @@
{
pname,
version,
src,
meta,
appimageTools,
libgpg-error,
}:
let
src' = appimageTools.extract {
inherit pname version;
src = src;
# Because of https://github.com/NixOS/nixpkgs/issues/267408
postExtract = ''
cp ${libgpg-error}/lib/* $out/usr/lib/
'';
};
in
appimageTools.wrapAppImage {
inherit pname version meta;
src = src';
extraPkgs =
pkgs: with pkgs; [
libgpg-error
fontconfig
libGL
libgbm
wayland
pipewire
fribidi
harfbuzz
freetype
libthai
e2fsprogs
zlib
libp11
xorg.libX11
xorg.libSM
];
multiArch = true;
}

View File

@@ -0,0 +1,65 @@
{
lib,
appimageTools,
callPackage,
fetchurl,
stdenv,
}:
let
pname = "immersed";
version = "10.9.0";
sources = lib.mapAttrs (_: fetchurl) rec {
x86_64-linux = {
url = "https://web.archive.org/web/20250725134919if_/https://static.immersed.com/dl/Immersed-x86_64.AppImage";
hash = "sha256-plGcvZRpV+nhQ4FoYiIuLmyOg/SHJ8ZjT4Fh6UyH9W0=";
};
aarch64-linux = {
url = "https://web.archive.org/web/20250725135029if_/https://static.immersed.com/dl/Immersed-aarch64.AppImage";
hash = "sha256-3BokV30y6QRjE94K7JQ6iIuQw1t+h3BKZY+nEFGTVHI=";
};
x86_64-darwin = {
url = "https://web.archive.org/web/20250725135025if_/https://static.immersed.com/dl/Immersed.dmg";
hash = "sha256-lmSkatB75Bztm19aCC50qrd/NV+HQX9nBMOTxIguaqI=";
};
aarch64-darwin = x86_64-darwin;
};
src = sources.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
meta = with lib; {
description = "VR coworking platform";
homepage = "https://immersed.com";
license = licenses.unfree;
maintainers = with maintainers; [ pandapip1 ];
platforms = builtins.attrNames sources;
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
};
in
(
if stdenv.hostPlatform.isDarwin then
callPackage ./darwin.nix {
inherit
pname
version
src
meta
;
}
else
callPackage ./linux.nix {
inherit
pname
version
src
meta
;
}
)
// {
passthru = {
inherit sources;
};
}

View File

@@ -0,0 +1,62 @@
{
lib,
immich,
jq,
nodejs,
makeWrapper,
stdenv,
}:
let
inherit (immich) pnpm;
in
stdenv.mkDerivation rec {
pname = "immich-cli";
version = "2.2.96";
inherit (immich) src pnpmDeps;
postPatch = ''
local -r cli_version="$(jq -r .version cli/package.json)"
test "$cli_version" = ${version} \
|| (echo "error: update immich-cli version to $cli_version" && exit 1)
'';
nativeBuildInputs = [
jq
makeWrapper
nodejs
pnpm
pnpm.configHook
];
buildPhase = ''
runHook preBuild
pnpm --filter @immich/sdk build
pnpm --filter @immich/cli build
runHook postBuild
'';
installPhase = ''
runHook preInstall
local -r packageOut="$out/lib/node_modules/@immich/cli"
pnpm --filter @immich/cli deploy --prod --no-optional "$packageOut"
makeWrapper '${lib.getExe nodejs}' "$out/bin/immich" \
--add-flags "$packageOut/dist/index.js"
runHook postInstall
'';
meta = {
description = "Self-hosted photo and video backup solution (command line interface)";
homepage = "https://immich.app/docs/features/command-line-interface";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ jvanbruegge ];
inherit (nodejs.meta) platforms;
mainProgram = "immich";
};
}

View File

@@ -0,0 +1,78 @@
{
lib,
buildGoModule,
fetchFromGitHub,
nix-update-script,
testers,
immich-go,
writableTmpDirAsHomeHook,
}:
buildGoModule rec {
pname = "immich-go";
version = "0.28.0";
src = fetchFromGitHub {
owner = "simulot";
repo = "immich-go";
tag = "v${version}";
hash = "sha256-H/ch6W9PrVg7MnQ6/QcMhadihjWx5oHlC7z4oZmjyvQ=";
# Inspired by: https://github.com/NixOS/nixpkgs/blob/f2d7a289c5a5ece8521dd082b81ac7e4a57c2c5c/pkgs/applications/graphics/pdfcpu/default.nix#L20-L32
# The intention here is to write the information into files in the `src`'s
# `$out`, and use them later in other phases (in this case `preBuild`).
# In order to keep determinism, we also delete the `.git` directory
# afterwards, imitating the default behavior of `leaveDotGit = false`.
# More info about git log format can be found at `git-log(1)` manpage.
leaveDotGit = true;
postFetch = ''
cd "$out"
git log -1 --pretty=%H > "COMMIT"
git log -1 --pretty=%cd --date=format:'%Y-%m-%dT%H:%M:%SZ' > "SOURCE_DATE"
rm -rf ".git"
'';
};
vendorHash = "sha256-EAlslQsLuOp1yrSi0wsNoSqyHnGvLHrf8np4rKrn9yY=";
# options used by upstream:
# https://github.com/simulot/immich-go/blob/v0.25.0/.goreleaser.yaml
ldflags = [
"-s"
"-w"
"-extldflags=-static"
"-X github.com/simulot/immich-go/app.Version=${version}"
];
preBuild = ''
ldflags+=" -X github.com/simulot/immich-go/Commit=$(cat COMMIT)"
ldflags+=" -X github.com/simulot/immich-go/Date=$(cat SOURCE_DATE)"
'';
__darwinAllowLocalNetworking = true;
nativeCheckInputs = [
writableTmpDirAsHomeHook
];
passthru = {
updateScript = nix-update-script { };
tests.versionTest = testers.testVersion {
package = immich-go;
command = "immich-go --version";
version = version;
};
};
meta = {
description = "Immich client tool for bulk-uploads";
longDescription = ''
Immich-Go is an open-source tool designed to streamline uploading
large photo collections to your self-hosted Immich server.
'';
homepage = "https://github.com/simulot/immich-go";
mainProgram = "immich-go";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ kai-tub ];
changelog = "https://github.com/simulot/immich-go/releases/tag/${src.tag}";
};
}

View File

@@ -0,0 +1,92 @@
{
lib,
immich,
python3,
nixosTests,
stdenv,
}:
let
python = python3.override {
self = python;
};
in
python.pkgs.buildPythonApplication rec {
pname = "immich-machine-learning";
inherit (immich) version;
src = "${immich.src}/machine-learning";
pyproject = true;
pythonRelaxDeps = [
"numpy"
"pillow"
"pydantic-settings"
];
build-system = with python.pkgs; [
hatchling
cython
];
dependencies =
with python.pkgs;
[
insightface
opencv-python-headless
pillow
fastapi
uvicorn
pydantic
pydantic-settings
aiocache
rich
ftfy
python-multipart
orjson
gunicorn
huggingface-hub
tokenizers
]
++ uvicorn.optional-dependencies.standard;
# aarch64-linux tries to get cpu information from /sys, which isn't available
# inside the nix build sandbox.
doCheck = stdenv.buildPlatform.system != "aarch64-linux";
nativeCheckInputs = with python.pkgs; [
httpx
pytest-asyncio
pytest-mock
pytestCheckHook
];
postInstall = ''
mkdir -p $out/share/immich
cp immich_ml/log_conf.json $out/share/immich
cp -r ann $out/${python.sitePackages}/
makeWrapper ${lib.getExe python.pkgs.gunicorn} "''${!outputBin}"/bin/machine-learning \
--prefix PYTHONPATH : "$out/${python.sitePackages}:${python.pkgs.makePythonPath dependencies}" \
--set-default MACHINE_LEARNING_WORKERS 1 \
--set-default MACHINE_LEARNING_WORKER_TIMEOUT 120 \
--set-default MACHINE_LEARNING_CACHE_FOLDER /var/cache/immich \
--set-default IMMICH_HOST "[::]" \
--set-default IMMICH_PORT 3003 \
--add-flags "immich_ml.main:app -k immich_ml.config.CustomUvicornWorker \
-w \"\$MACHINE_LEARNING_WORKERS\" \
-b \"\$IMMICH_HOST:\$IMMICH_PORT\" \
-t \"\$MACHINE_LEARNING_WORKER_TIMEOUT\"
--log-config-json $out/share/immich/log_conf.json"
'';
passthru.tests = {
inherit (nixosTests) immich;
};
meta = {
description = "${immich.meta.description} (machine learning component)";
homepage = "https://github.com/immich-app/immich/tree/main/machine-learning";
mainProgram = "machine-learning";
inherit (immich.meta) license maintainers platforms;
};
}

View File

@@ -0,0 +1,51 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
nix-update-script,
nixosTests,
nodejs,
}:
buildNpmPackage rec {
pname = "immich-public-proxy";
version = "1.13.2";
src = fetchFromGitHub {
owner = "alangrainger";
repo = "immich-public-proxy";
tag = "v${version}";
hash = "sha256-AoRqlTEwcS+RhN59/opqlYAftihmN20mW6Vn6RbLzSw=";
};
sourceRoot = "${src.name}/app";
npmDepsHash = "sha256-ZH1D0Q5SCoOwr8CLe2HLMy4xJoO3VLha4MfE9fBmhec=";
# patch in absolute nix store paths so the process doesn't need to cwd in $out
postPatch = ''
substituteInPlace src/index.ts --replace-fail \
"const app = express()" \
"const app = express()
// Set the views path to the nix output
app.set('views', '$out/lib/node_modules/immich-public-proxy/views')" \
--replace-fail \
"static('public'" \
"static('$out/lib/node_modules/immich-public-proxy/public'"
'';
passthru = {
tests = {
inherit (nixosTests) immich-public-proxy;
};
updateScript = nix-update-script { };
};
meta = {
changelog = "https://github.com/alangrainger/immich-public-proxy/releases/tag/${src.tag}";
description = "Share your Immich photos and albums in a safe way without exposing your Immich instance to the public";
homepage = "https://github.com/alangrainger/immich-public-proxy";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ jaculabilis ];
inherit (nodejs.meta) platforms;
mainProgram = "immich-public-proxy";
};
}

View File

@@ -0,0 +1,278 @@
{
lib,
stdenv,
fetchFromGitHub,
pnpm_10,
python3,
nodejs,
node-gyp,
runCommand,
nixosTests,
immich-machine-learning,
# build-time deps
pkg-config,
makeWrapper,
curl,
cacert,
unzip,
# runtime deps
cairo,
exiftool,
giflib,
jellyfin-ffmpeg, # Immich depends on the jellyfin customizations, see https://github.com/NixOS/nixpkgs/issues/351943
imagemagick,
libjpeg,
libpng,
libraw,
libheif,
librsvg,
pango,
perl,
pixman,
vips,
buildPackages,
}:
let
pnpm = pnpm_10;
version = "2.0.1";
esbuild' = buildPackages.esbuild.override {
buildGoModule =
args:
buildPackages.buildGoModule (
args
// rec {
version = "0.25.5";
src = fetchFromGitHub {
owner = "evanw";
repo = "esbuild";
tag = "v${version}";
hash = "sha256-jemGZkWmN1x2+ZzJ5cLp3MoXO0oDKjtZTmZS9Be/TDw=";
};
vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
}
);
};
buildLock = {
sources =
map
(p: {
name = p.pname;
inherit (p) version;
inherit (p.src) rev;
})
[
imagemagick
libheif
libraw
];
packages = [ ];
};
# The geodata website is not versioned, so we use the internet archive
geodata =
let
timestamp = "20250818205425";
date =
"${lib.substring 0 4 timestamp}-${lib.substring 4 2 timestamp}-${lib.substring 6 2 timestamp}T"
+ "${lib.substring 8 2 timestamp}:${lib.substring 10 2 timestamp}:${lib.substring 12 2 timestamp}Z";
in
runCommand "immich-geodata"
{
outputHash = "sha256-zZHAomW1C4qReFbhme5dkVnTiLw+jmhZhzuYvoBVBCY=";
outputHashMode = "recursive";
nativeBuildInputs = [
cacert
curl
unzip
];
meta.license = lib.licenses.cc-by-40;
}
''
mkdir $out
url="https://web.archive.org/web/${timestamp}/http://download.geonames.org/export/dump"
curl -Lo ./cities500.zip "$url/cities500.zip"
curl -Lo $out/admin1CodesASCII.txt "$url/admin1CodesASCII.txt"
curl -Lo $out/admin2Codes.txt "$url/admin2Codes.txt"
curl -Lo $out/ne_10m_admin_0_countries.geojson \
https://github.com/nvkelso/natural-earth-vector/raw/ca96624a56bd078437bca8184e78163e5039ad19/geojson/ne_10m_admin_0_countries.geojson
unzip ./cities500.zip -d $out/
echo "${date}" > $out/geodata-date.txt
'';
src = fetchFromGitHub {
owner = "immich-app";
repo = "immich";
tag = "v${version}";
hash = "sha256-lpFUjjS7Q2F/Uhog1NdJ8vaVIGjmZM9ZWxW5d0zoQsc=";
};
pnpmDeps = pnpm.fetchDeps {
pname = "immich";
inherit version src;
fetcherVersion = 2;
hash = "sha256-+CwwTqjI+xOGCAb66lZplNMBwR2xJZBs6E0OyGHbSAE=";
};
web = stdenv.mkDerivation {
pname = "immich-web";
inherit version src pnpmDeps;
nativeBuildInputs = [
nodejs
pnpm
pnpm.configHook
];
buildPhase = ''
runHook preBuild
pnpm --filter @immich/sdk build
pnpm --filter immich-web build
runHook postBuild
'';
installPhase = ''
runHook preInstall
cd web
cp -r build $out
runHook postInstall
'';
};
in
stdenv.mkDerivation {
pname = "immich";
inherit version src pnpmDeps;
postPatch = ''
# pg_dumpall fails without database root access
# see https://github.com/immich-app/immich/issues/13971
substituteInPlace server/src/services/backup.service.ts \
--replace-fail '`/usr/lib/postgresql/''${databaseMajorVersion}/bin/pg_dumpall`' '`pg_dump`'
'';
nativeBuildInputs = [
nodejs
pkg-config
pnpm_10
pnpm_10.configHook
python3
makeWrapper
node-gyp # for building node_modules/sharp from source
];
buildInputs = [
jellyfin-ffmpeg
imagemagick
libraw
libheif
# https://github.com/Automattic/node-canvas/blob/master/Readme.md#compiling
cairo
giflib
libjpeg
libpng
librsvg
pango
pixman
# Required for sharp
vips
];
env.SHARP_FORCE_GLOBAL_LIBVIPS = 1;
env.ESBUILD_BINARY_PATH = lib.getExe esbuild';
# fix for node-gyp, see https://github.com/nodejs/node-gyp/issues/1191#issuecomment-301243919
env.npm_config_nodedir = nodejs;
buildPhase = ''
runHook preBuild
# If exiftool-vendored.pl isn't found, exiftool is searched for on the PATH
rm node_modules/.pnpm/node_modules/exiftool-vendored.pl
pnpm --filter immich build
runHook postBuild
'';
installPhase = ''
runHook preInstall
local -r packageOut="$out/lib/node_modules/immich"
# install node_modules and built files in $out
# upstream uses pnpm deploy to build their docker images
pnpm --filter immich deploy --prod --no-optional "$packageOut"
# remove build artifacts that bloat the closure
find "$packageOut/node_modules" \( \
-name config.gypi \
-o -name .deps \
-o -name '*Makefile' \
-o -name '*.target.mk' \
\) -exec rm -r {} +
mkdir -p "$packageOut/build"
ln -s '${web}' "$packageOut/build/www"
ln -s '${geodata}' "$packageOut/build/geodata"
echo '${builtins.toJSON buildLock}' > "$packageOut/build/build-lock.json"
makeWrapper '${lib.getExe nodejs}' "$out/bin/immich-admin" \
--add-flags "$packageOut/dist/main" \
--add-flags immich-admin
makeWrapper '${lib.getExe nodejs}' "$out/bin/server" \
--add-flags "$packageOut/dist/main" \
--chdir "$packageOut" \
--set IMMICH_BUILD_DATA "$packageOut/build" \
--set NODE_ENV production \
--suffix PATH : '${
lib.makeBinPath [
exiftool
jellyfin-ffmpeg
perl # exiftool-vendored checks for Perl even if exiftool comes from $PATH
]
}'
runHook postInstall
'';
passthru = {
tests = {
inherit (nixosTests) immich immich-vectorchord-migration;
};
machine-learning = immich-machine-learning;
inherit
src
web
geodata
pnpm
;
};
meta = {
changelog = "https://github.com/immich-app/immich/releases/tag/${src.tag}";
description = "Self-hosted photo and video backup solution";
homepage = "https://immich.app/";
license = with lib.licenses; [
agpl3Only
cc-by-40 # geonames
];
maintainers = with lib.maintainers; [
dotlambda
jvanbruegge
Scrumplex
titaniumtown
];
platforms = lib.platforms.linux ++ lib.platforms.freebsd;
mainProgram = "server";
};
}

View File

@@ -0,0 +1,72 @@
{
lib,
buildGoModule,
fetchFromGitHub,
fetchzip,
installShellFiles,
}:
let
webconsoleVersion = "1.0.18";
webconsoleDist = fetchzip {
url = "https://github.com/codenotary/immudb-webconsole/releases/download/v${webconsoleVersion}/immudb-webconsole.tar.gz";
sha256 = "sha256-4BhTK+gKO8HW1CelGa30THpfkqfqFthK+b7p9QWl4Pw=";
};
in
buildGoModule rec {
pname = "immudb";
version = "1.9.7";
src = fetchFromGitHub {
owner = "codenotary";
repo = "immudb";
rev = "v${version}";
sha256 = "sha256-tYQYQyYhHMn0+PQWDEb4zY9EbDt1pVzZIcP0Gnsplrk=";
};
postPatch = ''
EXPECTED_WEBCONSOLE_STRING='DEFAULT_WEBCONSOLE_VERSION=${webconsoleVersion}'
if ! grep -F "$EXPECTED_WEBCONSOLE_STRING" Makefile ; then
echo "Did not find $EXPECTED_WEBCONSOLE_STRING in Makefile. " \
"Our webconsole version may need bumping (or the Makefile may have changed)"
exit 3
fi
'';
preBuild = ''
mkdir -p webconsole/dist
cp -r ${webconsoleDist}/* ./webconsole/dist
go generate -tags webconsole ./webconsole
'';
vendorHash = "sha256-6DHmJrE+xkf8K38a8h1VSD33W6qj594Q5bJJXnfSW0Q=";
nativeBuildInputs = [ installShellFiles ];
tags = [ "webconsole" ];
ldflags = [ "-X github.com/codenotary/immudb/cmd/version.Version=${version}" ];
subPackages = [
"cmd/immudb"
"cmd/immuclient"
"cmd/immuadmin"
];
postInstall = ''
mkdir -p share/completions
for executable in immudb immuclient immuadmin; do
for shell in bash fish zsh; do
$out/bin/$executable completion $shell > share/completions/$executable.$shell
installShellCompletion share/completions/$executable.$shell
done
done
'';
meta = with lib; {
description = "Immutable database based on zero trust, SQL and Key-Value, tamperproof, data change history";
homepage = "https://github.com/codenotary/immudb";
license = licenses.asl20;
maintainers = with maintainers; [ dit7ya ];
};
}

View File

@@ -0,0 +1,57 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
imgui,
SDL2,
xorg,
imnodes,
withExamples ? false,
}:
stdenv.mkDerivation {
pname = "imnodes";
version = "unstable-2024-03-12";
outputs = [
"out"
"dev"
];
src = fetchFromGitHub {
owner = "Nelarius";
repo = "imnodes";
rev = "8563e1655bd9bb1f249e6552cc6274d506ee788b";
hash = "sha256-E7NNCxYq9dyVvutWbpl2a+D2Ap2ErvdYHBDqpX0kb0c=";
};
patches = [
# CMake install rules
(fetchpatch {
url = "https://github.com/Nelarius/imnodes/commit/ff20336fcd82ce07c39fabd76d5bc9fa0a08b3bc.patch";
hash = "sha256-JHOUjwMofDwt2kg6SLPFZmuQC4bOfjGa3qHFr5MdPIE=";
})
];
nativeBuildInputs = [ cmake ];
buildInputs = [
imgui
]
++ lib.optionals withExamples [
SDL2
xorg.libXext
];
cmakeFlags = [ (lib.cmakeBool "IMNODES_EXAMPLES" withExamples) ];
passthru.tests.examples = imnodes.override { withExamples = true; };
meta = {
description = "Small, dependency-free node editor for dear imgui";
homepage = "https://github.com/Nelarius/imnodes";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ SomeoneSerge ];
mainProgram = "imnodes";
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage rec {
pname = "impala";
version = "0.3.0";
src = fetchFromGitHub {
owner = "pythops";
repo = "impala";
rev = "v${version}";
hash = "sha256-E3Vb2ZgpU0Qj5IoyB1zCyhUD1Cz07TVV0B2M6IFZ6KQ=";
};
cargoHash = "sha256-vRhv3hu6GsyOJZdP+zMFHnlNa3ETksSp6p18nVUUMQc=";
meta = {
description = "TUI for managing wifi";
homepage = "https://github.com/pythops/impala";
platforms = lib.platforms.linux;
license = lib.licenses.gpl3Only;
maintainers = [ lib.maintainers.nydragon ];
};
}

View File

@@ -0,0 +1,27 @@
{
buildGoModule,
lib,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "impl";
version = "1.4.0";
src = fetchFromGitHub {
owner = "josharian";
repo = "impl";
rev = "v${version}";
hash = "sha256-0TSyg7YEPur+h0tkDxI3twr2PzT7tmo3shKgmSSJ6qk=";
};
vendorHash = "sha256-vTqDoM/LK5SHkayLKYig+tCrXLelOoILmQGCxlTWHog=";
meta = with lib; {
description = "Generate method stubs for implementing an interface";
mainProgram = "impl";
homepage = "https://github.com/josharian/impl";
license = licenses.mit;
maintainers = with maintainers; [ kalbasit ];
};
}

View File

@@ -0,0 +1,78 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
pkg-config,
fmt,
gtk3,
iir1,
imgui,
imnodes,
implot,
openssl,
curl,
}:
stdenv.mkDerivation {
pname = "implot-demos";
version = "unstable-2023-08-20";
src = fetchFromGitHub {
owner = "epezent";
repo = "implot_demos";
rev = "f33219d3ade192a2333d4a32e749842010952a29";
hash = "sha256-Xq0kVk8qncj/BzQyIX/l1OLvPSQJU8ckTxIIfLZdO/g=";
};
patches = [
# Resolve "undefined symbols" (GetWindowContentRegionWidth &c)
(fetchpatch {
url = "https://github.com/epezent/implot_demos/commit/85a59612c102f8da97d6ead04f528f4c88f4ef9a.patch";
hash = "sha256-HRhfC3TUwz9Mv+1ODabaDxTWUaj4Nx1iH7C6vjUPo2s=";
})
# CMake: make FetchContent optional, add install targets
(fetchpatch {
url = "https://github.com/epezent/implot_demos/commit/4add0433a46ed5e2099e1af1a77e8055e49230d0.patch";
hash = "sha256-jYdM8NuwbZk7INKo2wqMAbjLMTPdrAdM4Kr3xmtquIY=";
})
# CMake: link libGL from the "app" target
(fetchpatch {
url = "https://github.com/epezent/implot_demos/commit/6742e4202858eb85bd0d67ca5fa15a7a07e6b618.patch";
hash = "sha256-h4EJ9u1iHLYkGHgxSynskkuCGmY6mmvKdZSRwHJKerY=";
})
];
cmakeFlags = [ (lib.cmakeBool "FETCHCONTENT_FULLY_DISCONNECTED" true) ];
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
curl
fmt
iir1
imgui
imnodes
implot
openssl
]
++ lib.optionals stdenv.hostPlatform.isLinux [ gtk3 ];
meta = {
description = "Standalone ImPlot Demos";
homepage = "https://github.com/epezent/implot_demos";
broken =
stdenv.hostPlatform.isAarch64 # Target "mandel" relies on AVX2
|| stdenv.hostPlatform.isDarwin;
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ SomeoneSerge ];
mainProgram = "implot-demos";
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,41 @@
{
lib,
stdenv,
fetchFromGitHub,
callPackage,
cmake,
vcpkg,
imgui,
}:
stdenv.mkDerivation rec {
pname = "implot";
version = "0.16";
src = fetchFromGitHub {
owner = "epezent";
repo = "implot";
rev = "v${version}";
hash = "sha256-/wkVsgz3wiUVZBCgRl2iDD6GWb+AoHN+u0aeqHHgem0=";
};
cmakeRules = "${vcpkg.src}/ports/implot";
postPatch = ''
cp "$cmakeRules"/CMakeLists.txt ./
'';
buildInputs = [ imgui ];
nativeBuildInputs = [ cmake ];
passthru.tests = {
implot-demos = callPackage ./demos { };
};
meta = {
description = "Immediate Mode Plotting";
homepage = "https://github.com/epezent/implot";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ SomeoneSerge ];
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
buildGoModule,
fetchFromGitHub,
leveldb,
geos,
}:
buildGoModule rec {
pname = "imposm";
version = "0.14.2";
src = fetchFromGitHub {
owner = "omniscale";
repo = "imposm3";
tag = "v${version}";
hash = "sha256-Bl6LSF/aN/c0lH93fxm2HGvxs7Grv4qJc/iN04AlQP0=";
};
vendorHash = null;
buildInputs = [
leveldb
geos
];
ldflags = [
"-s -w"
"-X github.com/omniscale/imposm3.Version=${version}"
];
# requires network access
doCheck = false;
meta = {
description = "Imports OpenStreetMap data into PostGIS";
homepage = "https://imposm.org/";
changelog = "https://github.com/omniscale/imposm3/releases/tag/${src.rev}";
license = lib.licenses.apsl20;
maintainers = with lib.maintainers; [ sikmir ];
mainProgram = "imposm";
};
}

View File

@@ -0,0 +1,78 @@
{
lib,
stdenv,
fetchFromGitLab,
blueprint-compiler,
cargo,
desktop-file-utils,
meson,
ninja,
pkg-config,
rustPlatform,
rustc,
wrapGAppsHook4,
cairo,
dbus,
gdk-pixbuf,
glib,
gtk4,
libadwaita,
openssl,
pango,
nix-update-script,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "impression";
version = "3.5.1";
src = fetchFromGitLab {
owner = "adhami3310";
repo = "Impression";
tag = "v${finalAttrs.version}";
hash = "sha256-xSgH1k/K52sh3qcIHWyv/WgRX9sVWZAXm+OabWbbNJo=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname version src;
hash = "sha256-cBaScjnhWW9nLFdeCuW7jzlJ8qZecc0FxjpJTRZJ6Lo=";
};
nativeBuildInputs = [
blueprint-compiler
cargo
desktop-file-utils
meson
ninja
pkg-config
rustPlatform.cargoSetupHook
rustc
wrapGAppsHook4
];
buildInputs = [
cairo
dbus
gdk-pixbuf
glib
gtk4
libadwaita
openssl
pango
];
passthru = {
updateScript = nix-update-script { };
};
meta = {
description = "Straight-forward and modern application to create bootable drives";
homepage = "https://gitlab.com/adhami3310/Impression";
changelog = "https://gitlab.com/adhami3310/Impression/-/releases/v${finalAttrs.version}";
license = lib.licenses.gpl3Only;
mainProgram = "impression";
maintainers = with lib.maintainers; [ dotlambda ];
teams = [ lib.teams.gnome-circle ];
platforms = lib.platforms.linux;
};
})

View File

@@ -0,0 +1,30 @@
{
fetchFromGitea,
lib,
nix-update-script,
rustPlatform,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "improv-setup";
version = "1.1.0";
src = fetchFromGitea {
domain = "git.clerie.de";
owner = "clerie";
repo = "improv-setup";
tag = "v${finalAttrs.version}";
hash = "sha256-N/HMvyZfWuxzNg0IDvyNVJiNBh7gb+v38mjVYmt2vw4=";
};
cargoHash = "sha256-vv7i+RsOjYaVWLmyBcvYNdiKsPOP4GyKyWAYB718Liw=";
passthru.updateScript = nix-update-script { };
meta = {
description = "Configure Wifi credentials on IOT devices using Improv serial protocol";
homepage = "https://git.clerie.de/clerie/improv-setup/";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ fooker ];
};
})

View File

@@ -0,0 +1,45 @@
{
lib,
stdenv,
fetchFromGitHub,
meson,
ninja,
pkg-config,
libpng,
zlib,
giflib,
libjpeg,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "impy";
version = "0.2";
src = fetchFromGitHub {
owner = "bcampbell";
repo = "impy";
rev = "v${finalAttrs.version}";
sha256 = "sha256-0bHm3jawYgcIeF2COALWlypX7kvPw1hifB/W+TKcC4M=";
};
nativeBuildInputs = [
meson
ninja
pkg-config
];
buildInputs = [
libpng
zlib
giflib
libjpeg
];
meta = with lib; {
description = "Simple library for loading/saving images and animations, written in C";
homepage = "https://github.com/bcampbell/impy";
license = licenses.gpl3;
maintainers = with maintainers; [ fgaz ];
platforms = platforms.all;
};
})

View File

@@ -0,0 +1,78 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
makeWrapper,
pkg-config,
bash,
libusb1,
qt5,
wget,
zenity,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "imsprog";
version = "1.6.2";
src = fetchFromGitHub {
owner = "bigbigmdm";
repo = "IMSProg";
tag = "v${finalAttrs.version}";
hash = "sha256-5aDQgpZ8sS7YZAE/L0WH1nnlBZY7R68XbsAssWkGTYQ=";
};
strictDeps = true;
nativeBuildInputs = [
cmake
makeWrapper
pkg-config
qt5.wrapQtAppsHook
qt5.qttools
];
buildInputs = [
bash # for patching the shebang in bin/IMSProg_database_update
libusb1
qt5.qtbase
qt5.qtwayland
];
# change default hardcoded path for chip database file, udev rules et al
postPatch = ''
while IFS= read -r -d "" file ; do
substituteInPlace "$file" \
--replace-quiet '/usr/bin/' "$out/bin/" \
--replace-quiet '/usr/lib/' "$out/lib/" \
--replace-quiet '/usr/share/' "$out/share/"
done < <(grep --files-with-matches --null --recursive '/usr/' .)
'';
postFixup = ''
wrapProgram $out/bin/IMSProg_database_update \
--prefix PATH : "${
lib.makeBinPath [
wget
zenity
]
}"
'';
doInstallCheck = true;
meta = {
changelog = "https://github.com/bigbigmdm/IMSProg/releases/tag/v${finalAttrs.version}";
description = "Free I2C EEPROM programmer tool for CH341A device";
homepage = "https://github.com/bigbigmdm/IMSProg";
license = with lib.licenses; [
gpl3Plus
gpl2Plus
lgpl21Only
];
mainProgram = "IMSProg";
maintainers = with lib.maintainers; [ wucke13 ];
platforms = lib.platforms.unix;
};
})

View File

@@ -0,0 +1,68 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
imgui,
ninja,
withEmscripten ? false,
emscripten,
withCurl ? (!withEmscripten),
curl,
withNcurses ? (!withEmscripten),
ncurses,
static ? withEmscripten,
}:
stdenv.mkDerivation rec {
pname = "imtui";
version = "1.0.5";
src = fetchFromGitHub {
owner = "ggerganov";
repo = "imtui";
rev = "v${version}";
hash = "sha256-eHQPDEfxKGLdiOi0lUUgqJcmme1XJLSPAafT223YK+U=";
};
nativeBuildInputs = [
cmake
ninja
];
buildInputs =
lib.optional withEmscripten emscripten
++ lib.optional withCurl curl
++ lib.optional withNcurses ncurses;
postPatch = ''
cp -r ${imgui.src}/* third-party/imgui/imgui
chmod -R u+w third-party/imgui
''
+ lib.optionalString (lib.versionAtLeast imgui.version "1.90.1") ''
substituteInPlace src/imtui-impl-{emscripten,ncurses}.cpp \
--replace "ImGuiKey_KeyPadEnter" "ImGuiKey_KeypadEnter"
'';
cmakeFlags = [
"-DEMSCRIPTEN:BOOL=${if withEmscripten then "ON" else "OFF"}"
"-DIMTUI_SUPPORT_CURL:BOOL=${if withCurl then "ON" else "OFF"}"
"-DIMTUI_SUPPORT_NCURSES:BOOL=${if withNcurses then "ON" else "OFF"}"
"-DBUILD_SHARED_LIBS:BOOL=${if (!static) then "ON" else "OFF"}"
"-DIMTUI_BUILD_EXAMPLES:BOOL=OFF"
"-DIMTUI_INSTALL_IMGUI_HEADERS:BOOL=OFF"
];
meta = with lib; {
description = "Immediate mode text-based user interface library";
longDescription = ''
ImTui is an immediate mode text-based user interface library. Supports 256
ANSI colors and mouse/keyboard input.
'';
homepage = "https://imtui.ggerganov.com";
changelog = "https://github.com/ggerganov/imtui/blob/${src.rev}/CHANGELOG.md";
license = licenses.mit;
maintainers = [ ];
platforms = platforms.unix;
};
}

View File

@@ -0,0 +1,155 @@
{
stdenv,
lib,
fetchFromSourcehut,
fetchpatch,
asciidoc,
cmocka,
docbook_xsl,
libxslt,
meson,
ninja,
pkg-config,
icu75,
pango,
inih,
withWindowSystem ? if stdenv.hostPlatform.isLinux then "all" else "x11",
xorg,
libxkbcommon,
libGLU,
wayland,
withBackends ? [
"libjxl"
"libtiff"
"libjpeg"
"libpng"
"librsvg"
"libheif"
"libnsgif"
],
freeimage,
libtiff,
libjpeg_turbo,
libjxl,
libpng,
librsvg,
libnsgif,
libheif,
}:
let
windowSystems = {
all = windowSystems.x11 ++ windowSystems.wayland;
x11 = [
libGLU
xorg.libxcb
xorg.libX11
];
wayland = [ wayland ];
};
backends = {
inherit
freeimage
libtiff
libpng
librsvg
libheif
libjxl
libnsgif
;
libjpeg = libjpeg_turbo;
};
backendFlags = map (
b: if builtins.elem b withBackends then "-D${b}=enabled" else "-D${b}=disabled"
) (builtins.attrNames backends);
in
# check that given window system is valid
assert lib.assertOneOf "withWindowSystem" withWindowSystem (builtins.attrNames windowSystems);
# check that every given backend is valid
assert builtins.all (
b: lib.assertOneOf "each backend" b (builtins.attrNames backends)
) withBackends;
stdenv.mkDerivation rec {
pname = "imv";
version = "4.5.0";
outputs = [
"out"
"man"
];
src = fetchFromSourcehut {
owner = "~exec64";
repo = "imv";
rev = "v${version}";
sha256 = "sha256-aJ2EXgsS0WUTxMqC1Q+uOWLG8BeuwAyXPmJB/9/NCCU=";
};
mesonFlags = [
"-Dwindows=${withWindowSystem}"
"-Dtest=enabled"
"-Dman=enabled"
]
++ backendFlags;
strictDeps = true;
nativeBuildInputs = [
asciidoc
docbook_xsl
libxslt
meson
ninja
pkg-config
];
buildInputs = [
cmocka
icu75
libxkbcommon
pango
inih
]
++ windowSystems."${withWindowSystem}"
++ map (b: backends."${b}") withBackends;
patches = [
(fetchpatch {
# https://lists.sr.ht/~exec64/imv-devel/patches/55937
name = "update libnsgif backend";
url = "https://lists.sr.ht/~exec64/imv-devel/%3C20241113012702.30521-2-reallyjohnreed@gmail.com%3E/raw";
hash = "sha256-/OQeDfIkPtJIIZwL8jYVRy0B7LSBi9/NvAdPoDm851k=";
})
];
postInstall = ''
install -Dm644 ../files/imv.desktop $out/share/applications/
'';
postFixup = lib.optionalString (withWindowSystem == "all") ''
# The `bin/imv` script assumes imv-wayland or imv-x11 in PATH,
# so we have to fix those to the binaries we installed into the /nix/store
substituteInPlace "$out/bin/imv" \
--replace-fail "imv-wayland" "$out/bin/imv-wayland" \
--replace-fail "imv-x11" "$out/bin/imv-x11"
'';
doCheck = true;
meta = with lib; {
description = "Command line image viewer for tiling window managers";
homepage = "https://sr.ht/~exec64/imv/";
license = licenses.mit;
maintainers = with maintainers; [
rnhmjoj
markus1189
];
platforms = platforms.all;
badPlatforms = platforms.darwin;
mainProgram = "imv";
};
}

View File

@@ -0,0 +1,49 @@
{
lib,
stdenv,
fetchurl,
libX11,
libXext,
libXi,
libXmu,
libXt,
libXtst,
}:
stdenv.mkDerivation rec {
pname = "imwheel";
version = "1.0.0pre12";
src = fetchurl {
url = "mirror://sourceforge/imwheel/imwheel-${version}.tar.gz";
sha256 = "2320ed019c95ca4d922968e1e1cbf0c075a914e865e3965d2bd694ca3d57cfe3";
};
buildInputs = [
libX11
libXext
libXi
libXmu
libXt
libXtst
];
makeFlags = [
"sysconfdir=/etc"
"ETCDIR=/etc"
];
installFlags = [
"sysconfdir=${placeholder "out"}/etc"
"ETCDIR=${placeholder "out"}/etc"
];
meta = with lib; {
homepage = "https://imwheel.sourceforge.net/";
description = "Mouse wheel configuration tool for XFree86/Xorg";
maintainers = with maintainers; [ jhillyerd ];
platforms = platforms.linux;
license = licenses.gpl2Only;
mainProgram = "imwheel";
};
}