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,110 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
pkg-config,
libuuid,
sane-backends,
podofo_0_10,
libjpeg,
djvulibre,
libxmlxx3,
libzip,
tesseract,
intltool,
poppler,
json-glib,
ninja,
python3,
doxygen,
enchant,
# Gtk deps
# upstream gImagereader supports Qt too
gobject-introspection,
wrapGAppsHook3,
gtkmm3,
gtksourceview3,
gtksourceviewmm,
gtkspell3,
gtkspellmm,
cairomm,
kdePackages,
qt6Packages,
withQt6 ? false,
wrapQtAppsHook ? null,
}:
let
pythonEnv = python3.withPackages (ps: with ps; [ pygobject3 ]);
in
stdenv.mkDerivation rec {
pname = "gImageReader";
version = "5aff249fdc119caa1464af9405259799b4f69d8b";
src = fetchFromGitHub {
owner = "manisandro";
repo = "gImageReader";
rev = "${version}";
sha256 = "sha256-xS63iGY1yf0NEnGuss0sme1vSYd2L3sOUd/g8yyPn1k=";
};
nativeBuildInputs = [
cmake
ninja
intltool
pkg-config
pythonEnv
enchant
gobject-introspection
wrapGAppsHook3
]
++ lib.optionals withQt6 [ qt6Packages.wrapQtAppsHook ];
buildInputs = [
libxmlxx3
libzip
libuuid
sane-backends
podofo_0_10
libjpeg
djvulibre
tesseract
poppler
doxygen
cairomm
gtkmm3
gtksourceview3
gtksourceviewmm
gtkspell3
gtkspellmm
json-glib
]
++ lib.optionals withQt6 (
with qt6Packages;
[
kdePackages.poppler
qtbase
qtspell
qttools
quazip
]
);
# interface type can be where <type> is either gtk, qt6
cmakeFlags = [
"-DINTERFACE_TYPE=gtk"
]
++ lib.optionals withQt6 [ "-DINTERFACE_TYPE=qt6 -DQT_VER=6" ];
meta = with lib; {
description = "Simple Gtk/Qt front-end to tesseract-ocr";
mainProgram = if withQt6 then "gImageReader-qt6" else "gImageReader";
homepage = "https://github.com/manisandro/gImageReader";
changelog = "https://github.com/manisandro/gImageReader/blob/${version}/NEWS";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ teto ];
platforms = platforms.linux;
};
}

View File

@@ -0,0 +1,48 @@
{
lib,
fetchFromGitHub,
crystal,
gobject-introspection,
gitUpdater,
}:
crystal.buildCrystalPackage rec {
pname = "gi-crystal";
version = "0.25.1";
src = fetchFromGitHub {
owner = "hugopl";
repo = "gi-crystal";
rev = "v${version}";
hash = "sha256-+sc36YjaVKBkrg8Ond4hCZoObnSHIU/jyMRalZ+OAwk=";
};
patches = [
./src.patch
];
nativeBuildInputs = [ gobject-introspection ];
buildTargets = [ "generator" ];
doCheck = false;
doInstallCheck = false;
installPhase = ''
runHook preInstall
mkdir $out
cp -r * $out
runHook postInstall
'';
passthru = {
updateScript = gitUpdater { rev-prefix = "v"; };
};
meta = with lib; {
description = "GI Crystal is a binding generator used to generate Crystal bindings for GObject based libraries using GObject Introspection";
homepage = "https://github.com/hugopl/gi-crystal";
mainProgram = "gi-crystal";
maintainers = with maintainers; [ sund3RRR ];
};
}

View File

@@ -0,0 +1,57 @@
--- a/src/generator/main.cr 2023-07-14 18:30:47.687581729 +0300
+++ b/src/generator/main.cr 2023-07-17 07:55:24.177630085 +0300
@@ -1,6 +1,8 @@
require "colorize"
require "log"
require "option_parser"
+require "file"
+require "file_utils"
require "./binding_config"
require "./error"
@@ -43,7 +45,7 @@
end
end
- output_dir = Path.new(project_dir, "lib/gi-crystal/src/auto").normalize if output_dir.nil?
+ output_dir = Path.new(Dir.current, "lib/gi-crystal/src/auto").normalize if output_dir.nil?
extra_bindings = argv.map { |path| Path.new(path).expand.to_s }
{output_dir: output_dir,
@@ -74,11 +76,23 @@
end
end
-private def find_bindings : Array(String)
- find_pattern = Path.new(project_dir, "**/binding.yml").normalize
+private def find_bindings_yml(path) : Array(String)
+ find_pattern = File.join(path, "**/binding.yml")
Dir[find_pattern]
end
+private def find_bindings : Array(String)
+ current_directory = Dir.current
+
+ bindings = find_bindings_yml(current_directory)
+ Dir.glob(File.join(current_directory, "**/*")).each do |path|
+ if File.symlink?(path)
+ bindings += find_bindings_yml(path)
+ end
+ end
+ bindings
+end
+
private def format_files(dir)
# We need to chdir into output dir since the formatter ignores everything under `lib` dir.
Dir.cd(dir) { `crystal tool format` }
@@ -102,7 +116,9 @@
Log.info { "Generating bindings at #{options[:output_dir]}" }
Generator::DocRepo.disable! unless options[:doc_gen]
-
+
+ FileUtils.cp_r(project_dir, File.join(Dir.current, "lib/gi-crystal"))
+
binding_yamls = find_bindings.concat(options[:extra_bindings])
binding_yamls.each do |file|
Log.info { "Using binding config at #{file}" }

View File

@@ -0,0 +1,61 @@
{
lib,
fetchurl,
meson,
ninja,
python3,
gnome,
}:
python3.pkgs.buildPythonApplication rec {
pname = "gi-docgen";
version = "2025.3";
format = "other";
src = fetchurl {
url = "mirror://gnome/sources/gi-docgen/${lib.versions.major version}/gi-docgen-${version}.tar.xz";
hash = "sha256-iomli8D3ffw+iioONJf8OfVBOuNeVZfp7GFgq/juFNg=";
};
depsBuildBuild = [
python3
];
nativeBuildInputs = [
meson
ninja
];
pythonPath = with python3.pkgs; [
jinja2
markdown
markupsafe
packaging
pygments
toml # remove once python311 is the default
typogrify
];
doCheck = false; # no tests
postFixup = ''
# Do not propagate Python
substituteInPlace $out/nix-support/propagated-build-inputs \
--replace "${python3}" ""
'';
passthru = {
updateScript = gnome.updateScript {
packageName = "gi-docgen";
};
};
meta = with lib; {
description = "Documentation generator for GObject-based libraries";
mainProgram = "gi-docgen";
homepage = "https://gitlab.gnome.org/GNOME/gi-docgen";
license = licenses.asl20; # OR GPL-3.0-or-later
teams = [ teams.gnome ];
};
}

View File

@@ -0,0 +1,28 @@
From c7eafa2d7bde0d735b125912542acec2d5896c17 Mon Sep 17 00:00:00 2001
From: George Huebner <george@feyor.sh>
Date: Sat, 20 Jul 2024 02:31:20 -0500
Subject: [PATCH 3/4] remove erroneous HAVE_LIBFLTK guard
---
src/icas.cc | 4 ----
1 file changed, 4 deletions(-)
diff --git a/src/icas.cc b/src/icas.cc
index f91885b..17a0373 100644
--- a/src/icas.cc
+++ b/src/icas.cc
@@ -2407,11 +2407,7 @@ int main(int ARGC, char *ARGV[]){
#ifdef __APPLE__
startc=clock();
#endif
-#ifdef HAVE_LIBFLTK
xcas::icas_eval(gq,e,reading_file,filename,contextptr);
-#else
- e=eval(gq,1,contextptr);
-#endif
#ifdef __APPLE__
startc=clock()-startc;
#endif
--
2.44.1

View File

@@ -0,0 +1,227 @@
{
stdenv,
lib,
fetchurl,
fetchpatch,
texliveSmall,
bison,
flex,
lapack,
blas,
autoreconfHook,
gmp,
mpfr,
pari,
ntl,
gsl,
mpfi,
ecm,
glpk,
nauty,
buildPackages,
readline,
gettext,
libpng,
libao,
gfortran,
perl,
enableGUI ? false,
libGL,
libGLU,
xorg,
fltk,
enableMicroPy ? false,
python3,
}:
assert (!blas.isILP64) && (!lapack.isILP64);
stdenv.mkDerivation rec {
pname = "giac${lib.optionalString enableGUI "-with-xcas"}";
version = "1.9.0-993"; # TODO try to remove preCheck phase on upgrade
src = fetchurl {
url = "https://www-fourier.ujf-grenoble.fr/~parisse/debian/dists/stable/main/source/giac_${version}.tar.gz";
sha256 = "sha256-pqytFWrSWfEwQqRdRbaigGCq68s8mdgj2j8M+kclslE=";
};
patches = [
./remove-old-functional-patterns.patch
./fix-fltk-guard.patch
(fetchpatch {
name = "pari_2_15.patch";
url = "https://raw.githubusercontent.com/sagemath/sage/07a2afd65fb4b0a1c9cbc43ede7d4a18c921a000/build/pkgs/giac/patches/pari_2_15.patch";
sha256 = "sha256-Q3xBFED7XEAyNz6AHjzt63XtospmdGAIdS6iPq1C2UE=";
})
(fetchpatch {
name = "infinity.patch";
url = "https://github.com/geogebra/giac/commit/851c2cd91e879c79d6652f8a5d5bed03b65c6d39.patch";
sha256 = "sha256-WJRT2b8I9kgAkRuIugMiXoF4hT7yR7qyad8A6IspNTM=";
stripLen = 5;
extraPrefix = "/src/";
excludes = [ "src/kdisplay.cc" ];
})
# giac calls scanf/printf with non-constant first arguments, which
# the compiler rightfully warns about (with an error nowadays).
(fetchpatch {
name = "fix-string-compiler-error.patch";
url = "https://salsa.debian.org/science-team/giac/-/raw/9ca8dbf4bb16d9d96948aa4024326d32485d7917/debian/patches/fix-string-compiler-error.patch";
sha256 = "sha256-r+M+9MRPRqhHcdhYWI6inxyNvWbXUbBcPCeDY7aulvk=";
})
# issue with include path precedence
(fetchpatch {
name = "fix_implicit_declaration.patch";
url = "https://salsa.debian.org/science-team/giac/-/raw/c05ae9b9e74d3c6ee6411d391071989426a76201/debian/patches/fix_implicit_declaration.patch";
sha256 = "sha256-ompUceYJLiL0ftfjBkIMcYvX1YqG2/XA7e1yDyFY0IY=";
})
]
++ lib.optionals (!enableGUI) [
# when enableGui is false, giac is compiled without fltk. That
# means some outputs differ in the make check. Patch around this:
(fetchpatch {
name = "nofltk-check.patch";
url = "https://raw.githubusercontent.com/sagemath/sage/7553a3c8dfa7bcec07241a07e6a4e7dcf5bb4f26/build/pkgs/giac/patches/nofltk-check.patch";
sha256 = "sha256-nAl5q3ufLjK3X9s0qMlGNowdRRf3EaC24eVtJABzdXY=";
})
];
# 1.9.0-5's tarball contains a binary (src/mkjs) which is executed
# at build time. we will delete and rebuild it.
depsBuildBuild = [ buildPackages.stdenv.cc ];
postPatch = ''
for i in doc/*/Makefile* micropython*/xcas/Makefile*; do
substituteInPlace "$i" --replace "/bin/cp" "cp";
done;
rm src/mkjs
substituteInPlace src/Makefile.am --replace "g++ mkjs.cc" \
"${buildPackages.stdenv.cc.targetPrefix}c++ mkjs.cc"
# to open help
substituteInPlace src/global.cc --replace 'browser="mozilla"' 'browser="xdg-open"'
'';
nativeBuildInputs = [
autoreconfHook
texliveSmall
bison
flex
];
# perl is only needed for patchShebangs fixup.
buildInputs = [
gmp
mpfr
pari
ntl
gsl
blas
mpfi
glpk
nauty
readline
gettext
libpng
libao
perl
ecm
# gfortran.cc default output contains static libraries compiled without -fPIC
# we want libgfortran.so.3 instead
(lib.getLib gfortran.cc)
lapack
blas
]
++ lib.optionals enableGUI [
libGL
libGLU
fltk
xorg.libX11
]
++ lib.optional enableMicroPy python3;
# xcas Phys and Turtle menus are broken with split outputs
# and interactive use is likely to need docs
outputs = [ "out" ] ++ lib.optional (!enableGUI) "doc";
doCheck = true;
preCheck =
lib.optionalString (!enableGUI) ''
# even with the nofltk patch, some changes in src/misc.cc (grep
# for HAVE_LIBFLTK) made it so that giac behaves differently
# when fltk is disabled. disable these tests for now.
echo > check/chk_fhan2
echo > check/chk_fhan9
''
+ lib.optionalString (stdenv.hostPlatform.isDarwin) ''
# these cover a known regression in giac, likely due to how pari state
# is shared between multiple giac instances (see pari.cc.old).
# see https://github.com/NixOS/nixpkgs/pull/264126 for more information
echo > check/chk_fhan4
echo > check/chk_fhan6
'';
enableParallelBuilding = true;
configureFlags = [
"--enable-gc"
"--enable-png"
"--enable-gsl"
"--enable-lapack"
"--enable-pari"
"--enable-ntl"
"--enable-gmpxx" # "--enable-cocoa"
"--enable-ao"
"--enable-ecm"
"--enable-glpk"
]
++ lib.optionals enableGUI [
"--enable-gui"
"--with-x"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
"--disable-nls"
]
++ lib.optionals (!enableGUI) [
"--disable-fltk"
]
++ lib.optionals (!enableMicroPy) [
"--disable-micropy"
];
postInstall = ''
# example Makefiles contain the full path to some commands
# notably texlive, and we don't want texlive to become a runtime
# dependency
for file in $(find $out -name Makefile) ; do
sed -i "s@${builtins.storeDir}/[^/]*/bin/@@" "$file" ;
done;
# reference cycle
rm "$out/share/giac/doc/el/"{casinter,tutoriel}/Makefile
if [ -n "$doc" ]; then
mkdir -p "$doc/share/giac"
# $out/share/giac/doc/aide_cas is a symlink to ../aide_cas
mv "$out/share/giac/doc" "$doc/share/giac"
ln -sf "$out/share/giac/aide_cas" "$doc/share/giac/doc/aide_cas"
mv "$out/share/giac/examples" "$doc/share/giac"
fi
''
+ lib.optionalString (!enableGUI) ''
for i in pixmaps application-registry applications icons; do
rm -r "$out/share/$i";
done;
'';
meta = with lib; {
description = "Free computer algebra system (CAS)";
homepage = "https://www-fourier.ujf-grenoble.fr/~parisse/giac.html";
license = licenses.gpl3Plus;
platforms = platforms.linux ++ (optionals (!enableGUI) platforms.darwin);
maintainers = [ maintainers.symphorien ];
};
}

View File

@@ -0,0 +1,294 @@
From f1c5309d5b815acc2616cd9fbb5182b1e64d225f Mon Sep 17 00:00:00 2001
From: George Huebner <george@feyor.sh>
Date: Wed, 17 Jul 2024 18:12:36 -0500
Subject: [PATCH 1/4] remove old <functional> patterns
pointer_to_binary_function and ptr_fun are holdovers from pre c++11,
and can be replaced or entirely removed. This allows Giac to compile
with Clang 16>=.
---
src/all_global_var | 2 +-
src/gausspol.cc | 2 +-
src/gausspol.h | 2 +-
src/gen.cc | 2 +-
src/gen.h | 4 ++--
src/maple.cc | 2 +-
src/monomial.h | 16 ++++++++--------
src/plot.cc | 2 +-
src/poly.h | 17 +++++++++--------
src/solve.cc | 18 +++++++++---------
src/usual.cc | 2 +-
11 files changed, 35 insertions(+), 34 deletions(-)
diff --git a/src/all_global_var b/src/all_global_var
index 7d75d73..55f4782 100644
--- a/src/all_global_var
+++ b/src/all_global_var
@@ -16,7 +16,7 @@ Relatif a l'evaluation du tableur
// File Eqw.cc
vector<string> completion_tab;
// File alg_ext.cc
- rootmap symbolic_rootof_list(ptr_fun(islesscomplex));
+ rootmap symbolic_rootof_list(islesscomplex);
// File derive.cc
// File desolve.cc
identificateur laplace_var(" s");
diff --git a/src/gausspol.cc b/src/gausspol.cc
index 8fbd581..2f2121f 100644
--- a/src/gausspol.cc
+++ b/src/gausspol.cc
@@ -855,7 +855,7 @@ namespace giac {
std::vector< monomial<gen> >::const_iterator & itb_end,
std::vector< monomial<gen> > & new_coord,
bool (* is_strictly_greater)( const index_m &, const index_m &),
- const std::pointer_to_binary_function < const monomial<gen> &, const monomial<gen> &, bool> m_is_strictly_greater
+ const std::function<bool(const monomial<gen> &, const monomial<gen> &)> m_is_strictly_greater
) {
if (ita==ita_end || itb==itb_end){
new_coord.clear();
diff --git a/src/gausspol.h b/src/gausspol.h
index b5d214b..e6c7e0c 100644
--- a/src/gausspol.h
+++ b/src/gausspol.h
@@ -93,7 +93,7 @@ namespace giac {
std::vector< monomial<gen> >::const_iterator & itb_end,
std::vector< monomial<gen> > & new_coord,
bool (* is_strictly_greater)( const index_t &, const index_t &),
- const std::pointer_to_binary_function < const monomial<gen> &, const monomial<gen> &, bool> m_is_greater
+ const std::function<bool(const monomial<gen> &, const monomial<gen> &)> m_is_greater
) ;
void mulpoly(const polynome & th,const gen & fact,polynome & res);
polynome operator * (const polynome & th, const gen & fact) ;
diff --git a/src/gen.cc b/src/gen.cc
index 7d4874c..0b64afe 100644
--- a/src/gen.cc
+++ b/src/gen.cc
@@ -1126,7 +1126,7 @@ namespace giac {
#if 1 // def NSPIRE
g.__MAPptr = new ref_gen_map;
#else
- g.__MAPptr = new ref_gen_map(ptr_fun(islesscomplexthanf));
+ g.__MAPptr = new ref_gen_map(islesscomplexthanf);
#endif
#endif
g.type=_MAP;
diff --git a/src/gen.h b/src/gen.h
index 04d70af..496b25d 100644
--- a/src/gen.h
+++ b/src/gen.h
@@ -443,7 +443,7 @@ namespace giac {
};
typedef std::map<gen,gen,comparegen> gen_map;
#else
- typedef std::map<gen,gen,const std::pointer_to_binary_function < const gen &, const gen &, bool> > gen_map;
+ typedef std::map<gen,gen,const std::function<bool(const gen &, const gen &)> > gen_map;
#endif
struct ref_gen_map;
@@ -902,7 +902,7 @@ namespace giac {
#if 1 // def NSPIRE
ref_gen_map(): ref_count(1),m() {}
#else
- ref_gen_map(const std::pointer_to_binary_function < const gen &, const gen &, bool> & p): ref_count(1),m(p) {}
+ ref_gen_map(const std::function<bool(const gen &, const gen &)> & p): ref_count(1),m(p) {}
#endif
ref_gen_map(const gen_map & M):ref_count(1),m(M) {}
};
diff --git a/src/maple.cc b/src/maple.cc
index 3b33da8..d57a170 100644
--- a/src/maple.cc
+++ b/src/maple.cc
@@ -3626,7 +3626,7 @@ namespace giac {
#if 1 // def NSPIRE
gen_map m;
#else
- gen_map m(ptr_fun(islessthanf));
+ gen_map m(islessthanf);
#endif
int s=int(args.size());
vector<int> indexbegin,indexsize;
diff --git a/src/monomial.h b/src/monomial.h
index 6e606d0..637a76c 100644
--- a/src/monomial.h
+++ b/src/monomial.h
@@ -338,9 +338,9 @@ namespace giac {
template<class T> class sort_helper {
public:
- std::pointer_to_binary_function < const monomial<T> &, const monomial<T> &, bool> strictly_greater ;
- sort_helper(const std::pointer_to_binary_function < const monomial<T> &, const monomial<T> &, bool> is_strictly_greater):strictly_greater(is_strictly_greater) {};
- sort_helper():strictly_greater(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>)) {};
+ std::function<bool(const monomial<T> &, const monomial<T> &)> strictly_greater ;
+ sort_helper(const std::function<bool(const monomial<T> &, const monomial<T> &)> is_strictly_greater):strictly_greater(is_strictly_greater) {};
+ sort_helper():strictly_greater(m_lex_is_strictly_greater<T>) {};
bool operator () (const monomial<T> & a, const monomial<T> & b){ return strictly_greater(a,b);}
};
@@ -677,7 +677,7 @@ namespace giac {
typename std::vector< monomial<T> >::const_iterator & itb_end,
std::vector< monomial<T> > & new_coord,
bool (* is_strictly_greater)( const index_m &, const index_m &),
- const std::pointer_to_binary_function < const monomial<T> &, const monomial<T> &, bool> m_is_strictly_greater
+ const std::function<bool(const monomial<T> &, const monomial<T> &)> m_is_strictly_greater
) {
if (ita==ita_end || itb==itb_end){
new_coord.clear();
@@ -726,8 +726,8 @@ namespace giac {
#endif
#ifndef NSPIRE
/* other algorithm using a map to avoid reserving too much space */
- typedef std::map< index_t,T,const std::pointer_to_binary_function < const index_m &, const index_m &, bool> > application;
- application produit(std::ptr_fun(is_strictly_greater));
+ typedef std::map< index_t,T,const std::function<bool(const index_m &, const index_m &)> > application;
+ application produit(is_strictly_greater);
// typedef std::map<index_t,T> application;
// application produit;
index_t somme(ita->index.size());
@@ -848,7 +848,7 @@ namespace giac {
typename std::vector< monomial<T> >::const_iterator a=v.begin(), a_end=v.end();
typename std::vector< monomial<T> >::const_iterator b=w.begin(), b_end=w.end();
std::vector< monomial<T> > res;
- Mul(a,a_end,b,b_end,res,i_lex_is_strictly_greater,std::ptr_fun< const monomial<T> &, const monomial<T> &, bool >((m_lex_is_strictly_greater<T>)));
+ Mul(a,a_end,b,b_end,res,i_lex_is_strictly_greater,m_lex_is_strictly_greater<T>);
return res ;
}
@@ -856,7 +856,7 @@ namespace giac {
std::vector< monomial<T> > & operator *= (std::vector< monomial<T> > & v,const std::vector< monomial<T> > & w){
typename std::vector< monomial<T> >::const_iterator a=v.begin(), a_end=v.end();
typename std::vector< monomial<T> >::const_iterator b=w.begin(), b_end=w.end();
- Mul(a,a_end,b,b_end,v,i_lex_is_strictly_greater,std::ptr_fun< const monomial<T> &, const monomial<T> &, bool >((m_lex_is_strictly_greater<T>)));
+ Mul(a,a_end,b,b_end,v,i_lex_is_strictly_greater,m_lex_is_strictly_greater<T>);
return v;
}
diff --git a/src/plot.cc b/src/plot.cc
index 288a1b5..ac85c9a 100755
--- a/src/plot.cc
+++ b/src/plot.cc
@@ -11886,7 +11886,7 @@ static vecteur densityscale(double xmin,double xmax,double ymin,double ymax,doub
#if 1 // def NSPIRE
gen_map m;
#else
- gen_map m(ptr_fun(islesscomplexthanf));
+ gen_map m(islesscomplexthanf);
#endif
int taille;
is >> taille;
diff --git a/src/poly.h b/src/poly.h
index 7d64e2c..d9ff991 100644
--- a/src/poly.h
+++ b/src/poly.h
@@ -40,23 +40,24 @@ namespace giac {
// T zero;
// functional object sorting function for monomial ordering
bool (* is_strictly_greater)( const index_m &, const index_m &);
- std::pointer_to_binary_function < const monomial<T> &, const monomial<T> &, bool> m_is_strictly_greater ;
+ std::function<bool(const monomial<T> &, const monomial<T> &)> m_is_strictly_greater ;
// constructors
tensor(const tensor<T> & t) : dim(t.dim), coord(t.coord), is_strictly_greater(t.is_strictly_greater), m_is_strictly_greater(t.m_is_strictly_greater) { }
tensor(const tensor<T> & t, const std::vector< monomial<T> > & v) : dim(t.dim), coord(v), is_strictly_greater(t.is_strictly_greater), m_is_strictly_greater(t.m_is_strictly_greater) { }
// warning: this constructor prohibits construction of tensor from a value
// of type T if this value is an int, except by using tensor<T>(T(int))
- tensor() : dim(0), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>)) { }
- explicit tensor(int d) : dim(d), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>)) { }
+ // DANGER
+ tensor() : dim(0), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(m_lex_is_strictly_greater<T>) { }
+ explicit tensor(int d) : dim(d), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(m_lex_is_strictly_greater<T>) { }
explicit tensor(int d,const tensor<T> & t) : dim(d),is_strictly_greater(t.is_strictly_greater), m_is_strictly_greater(t.m_is_strictly_greater) { }
- tensor(const monomial<T> & v) : dim(int(v.index.size())), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>)) {
+ tensor(const monomial<T> & v) : dim(int(v.index.size())), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(m_lex_is_strictly_greater<T>) {
coord.push_back(v);
}
- tensor(const T & v, int d) : dim(d), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>)) {
+ tensor(const T & v, int d) : dim(d), is_strictly_greater(i_lex_is_strictly_greater), m_is_strictly_greater(m_lex_is_strictly_greater<T>) {
if (!is_zero(v))
coord.push_back(monomial<T>(v,0,d));
}
- tensor(int d,const std::vector< monomial<T> > & c) : dim(d), coord(c), is_strictly_greater(i_lex_is_strictly_greater),m_is_strictly_greater(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>)) { }
+ tensor(int d,const std::vector< monomial<T> > & c) : dim(d), coord(c), is_strictly_greater(i_lex_is_strictly_greater),m_is_strictly_greater(m_lex_is_strictly_greater<T>) { }
~tensor() { coord.clear(); }
// member functions
// ordering monomials in the tensor
@@ -519,10 +520,10 @@ namespace giac {
template <class T>
void lexsort(std::vector < monomial<T> > & v){
#if 1 // def NSPIRE
- sort_helper<T> M(std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>));
+ sort_helper<T> M(m_lex_is_strictly_greater<T>);
sort(v.begin(),v.end(),M);
#else
- sort(v.begin(),v.end(),std::ptr_fun<const monomial<T> &, const monomial<T> &, bool>(m_lex_is_strictly_greater<T>));
+ sort(v.begin(),v.end(),m_lex_is_strictly_greater<T>);
#endif
}
diff --git a/src/solve.cc b/src/solve.cc
index 889f824..2a51ab8 100755
--- a/src/solve.cc
+++ b/src/solve.cc
@@ -8684,39 +8684,39 @@ namespace giac {
switch (order.val){
case _PLEX_ORDER:
p.is_strictly_greater=i_lex_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_lex_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_lex_is_strictly_greater<gen>;
break;
case _REVLEX_ORDER:
p.is_strictly_greater=i_total_revlex_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_total_revlex_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_total_revlex_is_strictly_greater<gen>;
break;
case _TDEG_ORDER:
p.is_strictly_greater=i_total_lex_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_total_lex_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_total_lex_is_strictly_greater<gen>;
break;
case _3VAR_ORDER:
p.is_strictly_greater=i_3var_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_3var_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_3var_is_strictly_greater<gen>;
break;
case _7VAR_ORDER:
p.is_strictly_greater=i_7var_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_7var_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_7var_is_strictly_greater<gen>;
break;
case _11VAR_ORDER:
p.is_strictly_greater=i_11var_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_11var_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_11var_is_strictly_greater<gen>;
break;
case _16VAR_ORDER:
p.is_strictly_greater=i_16var_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_16var_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_16var_is_strictly_greater<gen>;
break;
case _32VAR_ORDER:
p.is_strictly_greater=i_32var_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_32var_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_32var_is_strictly_greater<gen>;
break;
case _64VAR_ORDER:
p.is_strictly_greater=i_64var_is_strictly_greater;
- p.m_is_strictly_greater=std::ptr_fun(m_64var_is_strictly_greater<gen>);
+ p.m_is_strictly_greater=m_64var_is_strictly_greater<gen>;
break;
}
p.tsort();
diff --git a/src/usual.cc b/src/usual.cc
index fddede6..eb7ae5e 100755
--- a/src/usual.cc
+++ b/src/usual.cc
@@ -5950,7 +5950,7 @@ namespace giac {
#if 1 // def NSPIRE
gen_map m;
#else
- gen_map m(ptr_fun(islesscomplexthanf));
+ gen_map m(islesscomplexthanf);
#endif
for (;it!=itend;++it){
if (is_equal(*it) || it->is_symb_of_sommet(at_deuxpoints)){
--
2.44.1

View File

@@ -0,0 +1,92 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
pkg-config,
fltk,
fontconfig,
fmt,
rtmidi,
libsamplerate,
libmpg123,
libsndfile,
jack2,
alsa-lib,
libpulseaudio,
libXpm,
libXrandr,
flac,
libogg,
libvorbis,
libopus,
nlohmann_json,
expat,
libGL,
curl,
webkitgtk_4_1,
gtk3,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "giada";
version = "1.3.0";
src = fetchFromGitHub {
owner = "monocasual";
repo = "giada";
tag = finalAttrs.version;
hash = "sha256-f7Rtp/z7Z9P5TSI0UQbSuU4ukVrePKtSdihc1f3AAfo=";
fetchSubmodules = true;
};
env.NIX_CFLAGS_COMPILE = toString [
"-w"
"-Wno-error"
];
cmakeFlags = [
"-DCMAKE_INSTALL_BINDIR=bin"
];
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
alsa-lib
curl
expat
flac
fltk
fmt
gtk3
jack2
libGL
libXpm
libXrandr
libogg
libopus
libpulseaudio
libsamplerate
libsndfile
libvorbis
libmpg123
nlohmann_json
rtmidi
webkitgtk_4_1
]
++ lib.optionals (stdenv.hostPlatform.isLinux || stdenv.hostPlatform.isFreeBSD) [
fontconfig
];
meta = {
description = "Free, minimal, hardcore audio tool for DJs, live performers and electronic musicians";
mainProgram = "giada";
homepage = "https://giadamusic.com/";
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ kashw2 ];
platforms = lib.platforms.all;
};
})

View File

@@ -0,0 +1,78 @@
{
lib,
fetchFromGitLab,
meson,
gobject-introspection,
pkg-config,
ninja,
python3,
wrapGAppsHook4,
gtk4,
gdk-pixbuf,
webkitgtk_4_1,
gtksourceview5,
glib-networking,
libadwaita,
appstream,
blueprint-compiler,
}:
python3.pkgs.buildPythonApplication rec {
pname = "giara";
version = "1.1.0";
format = "other";
src = fetchFromGitLab {
domain = "gitlab.gnome.org";
owner = "World";
repo = "giara";
rev = version;
hash = "sha256-FTy0ElcoTGXG9eV85pUrF35qKDKOfYIovPtjLfTJVOg=";
};
nativeBuildInputs = [
appstream
meson
gobject-introspection
pkg-config
ninja
wrapGAppsHook4
blueprint-compiler
];
buildInputs = [
gtk4
gdk-pixbuf
webkitgtk_4_1
gtksourceview5
glib-networking
libadwaita
];
pythonPath = with python3.pkgs; [
pygobject3
pycairo
python-dateutil
praw
pillow
mistune
beautifulsoup4
];
postPatch = ''
substituteInPlace meson_post_install.py \
--replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
# blueprint-compiler expects "profile" to be a string.
substituteInPlace data/ui/headerbar.blp \
--replace "item { custom: profile; }" 'item { custom: "profile"; }'
'';
meta = with lib; {
description = "Reddit app, built with Python, GTK and Handy; Created with mobile Linux in mind";
maintainers = with maintainers; [ dasj19 ];
homepage = "https://gitlab.gnome.org/World/giara";
license = licenses.gpl3Plus;
platforms = platforms.linux;
mainProgram = "giara";
};
}

View File

@@ -0,0 +1,64 @@
{
lib,
stdenv,
buildPackages,
buildGoModule,
fetchFromGitHub,
nix-update-script,
versionCheckHook,
installShellFiles,
writableTmpDirAsHomeHook,
}:
buildGoModule (finalAttrs: {
pname = "gibo";
version = "3.0.14";
src = fetchFromGitHub {
owner = "simonwhitaker";
repo = "gibo";
tag = "v${finalAttrs.version}";
sha256 = "sha256-6w+qhwOHkfKt0hgKO98L6Si0RNJN+CXOOFzGlvxFjcA=";
};
vendorHash = "sha256-pD+7yvBydg1+BQFP0G8rRYTCO//Wg/6pzY19DLs42Gk=";
ldflags = [
"-s"
"-w"
"-X github.com/simonwhitaker/gibo/cmd.version=${finalAttrs.version}"
];
nativeBuildInputs = [
installShellFiles
];
postInstall = lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) (
let
emulator = stdenv.hostPlatform.emulator buildPackages;
in
''
installShellCompletion --cmd gibo \
--bash <(${emulator} $out/bin/gibo completion bash) \
--fish <(${emulator} $out/bin/gibo completion fish) \
--zsh <(${emulator} $out/bin/gibo completion zsh)
''
);
doInstallCheck = true;
nativeInstallCheckInputs = [
versionCheckHook
writableTmpDirAsHomeHook
];
versionCheckProgramArg = "version";
versionCheckKeepEnvironment = [ "HOME" ];
passthru.updateScript = nix-update-script { };
meta = {
homepage = "https://github.com/simonwhitaker/gibo";
license = lib.licenses.unlicense;
description = "Shell script for easily accessing gitignore boilerplates";
platforms = lib.platforms.unix;
mainProgram = "gibo";
};
})

View File

@@ -0,0 +1,33 @@
{
lib,
buildGoModule,
fetchFromGitHub,
nix-update-script,
}:
buildGoModule rec {
pname = "gickup";
version = "0.10.39";
src = fetchFromGitHub {
owner = "cooperspencer";
repo = "gickup";
tag = "v${version}";
hash = "sha256-Aalt/oiNzV2a8Ix/ruL4r3q0W1EY1UTe9IVPWNL+lLA=";
};
vendorHash = "sha256-Xtreh7nHovBYh0PnFYn2VuYGN8GQSmy6EPnZnHSdt/o=";
ldflags = [ "-X main.version=${version}" ];
passthru.updateScript = nix-update-script { };
meta = {
description = "Tool to backup repositories";
homepage = "https://github.com/cooperspencer/gickup";
changelog = "https://github.com/cooperspencer/gickup/releases/tag/v${version}";
maintainers = with lib.maintainers; [ adamcstephens ];
mainProgram = "gickup";
license = lib.licenses.asl20;
};
}

View File

@@ -0,0 +1,57 @@
{
lib,
fetchFromGitHub,
fetchpatch,
python3Packages,
ffmpeg,
zlib,
libjpeg,
}:
python3Packages.buildPythonApplication {
pname = "gif-for-cli";
version = "1.1.2";
format = "setuptools";
src = fetchFromGitHub {
owner = "google";
repo = "gif-for-cli";
rev = "31f8aa2d617d6d6e941154f60e287c38dd9a74d5";
hash = "sha256-Bl5o492BUAn1KsscnlMIXCzJuy7xWUsdnxIKZKaRM3M=";
};
patches = [
# https://github.com/google/gif-for-cli/pull/36
(fetchpatch {
name = "pillow-10-compatibility.patch";
url = "https://github.com/google/gif-for-cli/commit/49b13ec981e197cbc10f920b7b25a97c4cc6a61c.patch";
hash = "sha256-B8wfkdhSUY++St6DzgaJ1xF1mZKvi8oxLXbo63yemDM=";
})
];
# coverage is not needed to build and test this package
postPatch = ''
sed -i '/coverage>=/d' setup.py
'';
buildInputs = [
zlib
libjpeg
];
propagatedBuildInputs = with python3Packages; [
ffmpeg
pillow
requests
x256
];
meta = with lib; {
description = "Render gifs as ASCII art in your cli";
longDescription = "Takes in a GIF, short video, or a query to the Tenor GIF API and converts it to animated ASCII art.";
homepage = "https://github.com/google/gif-for-cli";
license = licenses.asl20;
maintainers = with maintainers; [ Scriptkiddi ];
mainProgram = "gif-for-cli";
};
}

View File

@@ -0,0 +1,70 @@
{
lib,
stdenv,
fetchzip,
fetchpatch,
zlib,
zopfli,
}:
stdenv.mkDerivation rec {
pname = "gif2apng";
version = "1.9";
src = fetchzip {
url = "mirror://sourceforge/gif2apng/gif2apng-${version}-src.zip";
stripRoot = false;
hash = "sha256-rt1Vp4hjeFAVWJOU04BdU2YvBwECe9Q1c7EpNpIN+uE=";
};
patches = [
(fetchpatch {
url = "https://sources.debian.org/data/main/g/gif2apng/1.9%2Bsrconly-3%2Bdeb11u1/debian/patches/10-7z.patch";
hash = "sha256-zQgSWP/CIGaTUIxP/X92zpAQVSGgVo8gQEoCCMn+XT0=";
})
(fetchpatch {
url = "https://sources.debian.org/data/main/g/gif2apng/1.9%2Bsrconly-3%2Bdeb11u1/debian/patches/CVE-2021-45909.patch";
hash = "sha256-ZDN3xgvktgahDEtrEpyVsL+4u+97Fo9vAB1RSKhu8KA=";
})
(fetchpatch {
url = "https://sources.debian.org/data/main/g/gif2apng/1.9%2Bsrconly-3%2Bdeb11u1/debian/patches/CVE-2021-45910.patch";
hash = "sha256-MzOUOC7kqH22DmTMXoDu+jZAMBJPndnFNJGAQv5FcdI=";
})
(fetchpatch {
url = "https://sources.debian.org/data/main/g/gif2apng/1.9%2Bsrconly-3%2Bdeb11u1/debian/patches/CVE-2021-45911.patch";
hash = "sha256-o2YDHsSaorCx/6bQQfudzkLHo9pakgyvs2Pbafplnek=";
})
];
# Remove bundled libs
postPatch = ''
rm -r 7z zlib zopfli
'';
buildInputs = [
zlib
zopfli
];
preBuild = ''
buildFlagsArray+=("LIBS=-lzopfli -lstdc++ -lz")
'';
makeFlags = [ "CC=${stdenv.cc.targetPrefix}c++" ];
NIX_CFLAGS_COMPILE = "-DENABLE_LOCAL_ZOPFLI";
installPhase = ''
runHook preInstall
install -Dm755 gif2apng $out/bin/gif2apng
runHook postInstall
'';
meta = with lib; {
homepage = "https://gif2apng.sourceforge.net/";
description = "Simple program that converts animations from GIF to APNG format";
license = licenses.zlib;
maintainers = with maintainers; [ fgaz ];
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,40 @@
{
lib,
stdenv,
fetchFromGitHub,
ffmpeg,
makeWrapper,
}:
stdenv.mkDerivation rec {
pname = "gifgen";
version = "1.2.0";
src = fetchFromGitHub {
owner = "lukechilds";
repo = "gifgen";
rev = version;
hash = "sha256-ni9RL4LyMejmu8vm5HC8WSTqAPQMBQNRDOZ4ZfvrkSU=";
};
nativeBuildInputs = [
makeWrapper
];
installPhase = ''
runHook preInstall
install -Dm755 gifgen $out/bin/gifgen
wrapProgram $out/bin/gifgen \
--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
runHook postInstall
'';
meta = with lib; {
description = "Simple high quality GIF encoding";
homepage = "https://github.com/lukechilds/gifgen";
license = licenses.mit;
maintainers = [ ];
mainProgram = "gifgen";
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,26 @@
From ccbc956432650734c91acb3fc88837f7b81267ff Mon Sep 17 00:00:00 2001
From: "Eric S. Raymond" <esr@thyrsus.com>
Date: Wed, 21 Feb 2024 18:55:00 -0500
Subject: [PATCH] Clean up memory better at end of run (CVE-2021-40633)
---
gif2rgb.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/gif2rgb.c b/gif2rgb.c
index d51226d..fc2e683 100644
--- a/gif2rgb.c
+++ b/gif2rgb.c
@@ -517,6 +517,9 @@ static void GIF2RGB(int NumFiles, char *FileName, bool OneFileFlag,
DumpScreen2RGB(OutFileName, OneFileFlag, ColorMap, ScreenBuffer,
GifFile->SWidth, GifFile->SHeight);
+ for (i = 0; i < GifFile->SHeight; i++) {
+ (void)free(ScreenBuffer[i]);
+ }
(void)free(ScreenBuffer);
{
--
2.44.0

View File

@@ -0,0 +1,15 @@
diff -up giflib-5.2.2/gif2rgb.c.omv~ giflib-5.2.2/gif2rgb.c
--- giflib-5.2.2/gif2rgb.c.omv~ 2025-04-07 21:44:54.956355983 +0200
+++ giflib-5.2.2/gif2rgb.c 2025-04-07 21:45:29.630769589 +0200
@@ -329,6 +329,11 @@ static void DumpScreen2RGB(char *FileNam
GifRow = ScreenBuffer[i];
GifQprintf("\b\b\b\b%-4d", ScreenHeight - i);
for (j = 0; j < ScreenWidth; j++) {
+ /* Check if color is within color palete */
+ if (GifRow[j] >= ColorMap->ColorCount) {
+ GIF_EXIT(GifErrorString(
+ D_GIF_ERR_IMAGE_DEFECT));
+ }
ColorMapEntry = &ColorMap->Colors[GifRow[j]];
Buffers[0][j] = ColorMapEntry->Red;
Buffers[1][j] = ColorMapEntry->Green;

View File

@@ -0,0 +1,11 @@
--- a/Makefile
+++ b/Makefile
@@ -92,7 +92,7 @@
install: all install-bin install-include install-lib install-man
install-bin: $(INSTALLABLE)
$(INSTALL) -d "$(DESTDIR)$(BINDIR)"
- $(INSTALL) $^ "$(DESTDIR)$(BINDIR)"
+ $(INSTALL) $(^:=.exe) "$(DESTDIR)$(BINDIR)"
install-include:
$(INSTALL) -d "$(DESTDIR)$(INCDIR)"
$(INSTALL) -m 644 gif_lib.h "$(DESTDIR)$(INCDIR)"

View File

@@ -0,0 +1,67 @@
{
stdenv,
lib,
fetchurl,
fixDarwinDylibNames,
pkgsStatic,
}:
stdenv.mkDerivation rec {
pname = "giflib";
version = "5.2.2";
src = fetchurl {
url = "mirror://sourceforge/giflib/giflib-${version}.tar.gz";
hash = "sha256-vn/70FfK3r4qoURUL9kMaDjGoIO16KkEi47jtmsp1fs=";
};
patches = [
./CVE-2021-40633.patch
./CVE-2025-31344.patch
]
++ lib.optionals stdenv.hostPlatform.isMinGW [
# Build dll libraries.
(fetchurl {
url = "https://aur.archlinux.org/cgit/aur.git/plain/001-mingw-build.patch?h=mingw-w64-giflib&id=b7311edf54824ac797c7916cd3ddc3a4b2368a19";
hash = "sha256-bBx7lw7FWtxZJ+E9AAbKIpCGcJnS5lrGpjYcv/zBtKk=";
})
# Install executables.
./mingw-install-exes.patch
];
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
fixDarwinDylibNames
];
makeFlags = [
"PREFIX=${placeholder "out"}"
];
postPatch = ''
# we don't want to build HTML documentation
substituteInPlace doc/Makefile \
--replace-fail "all: allhtml manpages" "all: manpages"
''
+ lib.optionalString stdenv.hostPlatform.isStatic ''
# Upstream build system does not support NOT building shared libraries.
sed -i '/all:/ s/$(LIBGIFSO)//' Makefile
sed -i '/all:/ s/$(LIBUTILSO)//' Makefile
sed -i '/-m 755 $(LIBGIFSO)/ d' Makefile
sed -i '/ln -sf $(LIBGIFSOVER)/ d' Makefile
sed -i '/ln -sf $(LIBGIFSOMAJOR)/ d' Makefile
'';
passthru.tests = {
static = pkgsStatic.giflib;
};
meta = {
description = "Library for reading and writing gif images";
homepage = "https://giflib.sourceforge.net/";
platforms = lib.platforms.unix ++ lib.platforms.windows;
license = lib.licenses.mit;
maintainers = [ ];
branch = "5.2";
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
stdenv,
fetchurl,
xorgproto,
libXt,
libX11,
gifview ? false,
static ? stdenv.hostPlatform.isStatic,
}:
stdenv.mkDerivation rec {
pname = "gifsicle";
version = "1.96";
src = fetchurl {
url = "https://www.lcdf.org/gifsicle/gifsicle-${version}.tar.gz";
hash = "sha256-/SPSeWgabf48FSZOM/NEBFs7pHPaTRn0nmelCZSwd/s=";
};
buildInputs = lib.optionals gifview [
xorgproto
libXt
libX11
];
configureFlags = lib.optional (!gifview) "--disable-gifview";
LDFLAGS = lib.optionalString static "-static";
doCheck = true;
checkPhase = ''
./src/gifsicle --info logo.gif
'';
meta = {
description = "Command-line tool for creating, editing, and getting information about GIF images and animations";
homepage = "https://www.lcdf.org/gifsicle/";
license = lib.licenses.gpl2Only;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [ zimbatm ];
};
}

View File

@@ -0,0 +1,51 @@
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
ffmpeg_6,
}:
rustPlatform.buildRustPackage rec {
pname = "gifski";
version = "1.34.0";
src = fetchFromGitHub {
owner = "ImageOptim";
repo = "gifski";
rev = version;
hash = "sha256-8EAC8YH3AIbvYdTL7HtqTL7WqztzCwvDwIVkhiqvtrQ=";
};
cargoHash = "sha256-ZppSO3TyZBbNhG+YW71+C9kMu7ok2+kbnnCRbAKsbfs=";
nativeBuildInputs = [
pkg-config
rustPlatform.bindgenHook
];
buildInputs = [
ffmpeg_6
];
buildFeatures = [ "video" ];
# When the default checkType of release is used, we get the following error:
#
# error: the crate `gifski` is compiled with the panic strategy `abort` which
# is incompatible with this crate's strategy of `unwind`
#
# It looks like https://github.com/rust-lang/cargo/issues/6313, which does not
# outline a solution.
#
checkType = "debug";
meta = {
description = "GIF encoder based on libimagequant (pngquant)";
homepage = "https://gif.ski/";
changelog = "https://github.com/ImageOptim/gifski/releases/tag/${src.rev}";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [ figsoda ];
mainProgram = "gifski";
};
}

View File

@@ -0,0 +1,50 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
expat,
nifticlib,
zlib,
ctestCheckHook,
}:
stdenv.mkDerivation {
pname = "gifticlib";
version = "0-unstable-2020-07-07";
src = fetchFromGitHub {
owner = "NIFTI-Imaging";
repo = "gifti_clib";
rev = "5eae81ba1e87ef3553df3b6ba585f12dc81a0030";
sha256 = "0gcab06gm0irjnlrkpszzd4wr8z0fi7gx8f7966gywdp2jlxzw19";
};
cmakeFlags = [
"-DUSE_SYSTEM_NIFTI=ON"
"-DDOWNLOAD_TEST_DATA=OFF"
];
nativeBuildInputs = [ cmake ];
buildInputs = [
expat
nifticlib
zlib
];
# without the test data, this is only a few basic tests
doCheck = !stdenv.hostPlatform.isDarwin;
nativeCheckInputs = [ ctestCheckHook ];
checkFlags = [
"-LE"
"NEEDS_DATA"
];
meta = with lib; {
homepage = "https://www.nitrc.org/projects/gifti";
description = "Medical imaging geometry format C API";
maintainers = with maintainers; [ bcdarwin ];
platforms = platforms.unix;
license = licenses.publicDomain;
};
}

View File

@@ -0,0 +1,73 @@
{
stdenv,
lib,
python3Packages,
fetchFromGitHub,
git,
}:
python3Packages.buildPythonApplication rec {
pname = "gigalixir";
version = "1.15.0";
pyproject = true;
src = fetchFromGitHub {
owner = "gigalixir";
repo = "gigalixir-cli";
tag = "v${version}";
hash = "sha256-OCPxOVWHUvH3Tj9bR+aj2VUNNuY5GWhnDaSKRDqLSvI=";
};
postPatch = ''
substituteInPlace setup.py \
--replace-fail "'pytest-runner'," ""
'';
build-system = with python3Packages; [
setuptools
];
dependencies = with python3Packages; [
importlib-metadata
click
pygments
pyopenssl
qrcode
requests
rollbar
stripe
];
nativeCheckInputs = with python3Packages; [
git
httpretty
pytestCheckHook
sure
];
disabledTests = [
# Test requires network access
"test_rollback_without_version"
"test_rollback"
"test_create_user"
# These following test's are now depraced and removed, check out these commits:
# https://github.com/gigalixir/gigalixir-cli/commit/00b758ed462ad8eff6ff0b16cd37fa71f75b2d7d
# https://github.com/gigalixir/gigalixir-cli/commit/76fa25f96e71fd75cc22e5439b4a8f9e9ec4e3e5
"test_create_config"
"test_delete_free_database"
"test_get_free_databases"
];
pythonImportsCheck = [
"gigalixir"
];
meta = {
description = "Gigalixir Command-Line Interface";
homepage = "https://github.com/gigalixir/gigalixir-cli";
license = lib.licenses.mit;
maintainers = [ ];
mainProgram = "gigalixir";
};
}

View File

@@ -0,0 +1,64 @@
{
lib,
stdenv,
fetchurl,
autoconf,
automake,
intltool,
libtool,
pkg-config,
which,
docbook_xml_dtd_45,
docbook_xsl,
gtkmm2,
pangomm_2_42,
libgig,
libsndfile,
libxslt,
linuxsampler,
}:
let
gtkmm2_with_pango242 = gtkmm2.override { pangomm = pangomm_2_42; };
in
stdenv.mkDerivation (finalAttrs: {
pname = "gigedit";
version = "1.2.1";
src = fetchurl {
url = "https://download.linuxsampler.org/packages/gigedit-${finalAttrs.version}.tar.bz2";
hash = "sha256-pz+2gbVbPytuioXxNHQWE3Pml4r9JfwBIQcsbevWHkQ=";
};
preConfigure = "make -f Makefile.svn";
nativeBuildInputs = [
autoconf
automake
intltool
libtool
pkg-config
which
];
buildInputs = [
docbook_xml_dtd_45
docbook_xsl
gtkmm2_with_pango242
libgig
libsndfile
libxslt
linuxsampler
];
enableParallelBuilding = true;
meta = {
homepage = "http://www.linuxsampler.org";
description = "Gigasampler file access library";
license = lib.licenses.gpl2;
maintainers = [ ];
platforms = lib.platforms.linux;
mainProgram = "gigedit";
};
})

View File

@@ -0,0 +1,77 @@
diff --git a/admin/Makefile.def b/admin/Makefile.def
index 932d18f102..309114e339 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 b6eda9fdfd..704050a9ac 100644
--- a/admin/define-system.sh
+++ b/admin/define-system.sh
@@ -272,34 +272,23 @@ EOF
else
GAG_MACHINE=pc
fi
- if which gcc > /dev/null 2>&1; then
- DEFAULT_CCOMPILER=gcc
- fi
- if which g++ > /dev/null 2>&1; then
- DEFAULT_CXXCOMPILER=g++
- elif which clang++ > /dev/null 2>&1; then
- DEFAULT_CXXCOMPILER=clang++
- fi
- if which ifort > /dev/null 2>&1; then
- DEFAULT_FCOMPILER=ifort
- elif which gfortran > /dev/null 2>&1; then
- DEFAULT_FCOMPILER=gfortran
- fi
- elif [ `uname -p` = "arm" ]; then
+ elif [ `uname -p` = "arm" ]; then
GAG_MACHINE=arm64
- if which gcc > /dev/null 2>&1; then
- DEFAULT_CCOMPILER=gcc
- fi
- if which clang++ > /dev/null 2>&1; then
- DEFAULT_CXXCOMPILER=clang++
- elif which g++ > /dev/null 2>&1; then
- DEFAULT_CXXCOMPILER=g++
- fi
- if which ifort > /dev/null 2>&1; then
- DEFAULT_FCOMPILER=ifort
- elif which gfortran > /dev/null 2>&1; then
- DEFAULT_FCOMPILER=gfortran
- fi
+ fi
+ if which clang > /dev/null 2>&1; then
+ DEFAULT_CCOMPILER=clang
+ elif which gcc > /dev/null 2>&1; then
+ DEFAULT_CCOMPILER=gcc
+ fi
+ if which clang++ > /dev/null 2>&1; then
+ DEFAULT_CXXCOMPILER=clang++
+ elif which g++ > /dev/null 2>&1; then
+ DEFAULT_CXXCOMPILER=g++
+ fi
+ if which ifort > /dev/null 2>&1; then
+ DEFAULT_FCOMPILER=ifort
+ elif which gfortran > /dev/null 2>&1; then
+ DEFAULT_FCOMPILER=gfortran
fi ;;
CYGWIN*)
if [ `uname -m | grep -c "x86_64"` -ne 0 ]; then

View File

@@ -0,0 +1,17 @@
diff --git a/admin/Makefile.def b/admin/Makefile.def
index 0395d9d4f0..932d18f102 100644
--- a/admin/Makefile.def
+++ b/admin/Makefile.def
@@ -228,7 +228,11 @@ GLOBAL_DIRTY = $(builddir) *~ TAGS ChangeLog* Makefile.bak
# Fortran preprocessing
# Preprocessor command
-CPP = cpp
+ifdef GAG_CPP
+ CPP = $(GAG_CPP)
+else
+ CPP = cpp
+endif
# Preprocessor generic flags
GLOBAL_CPPFLAGS += -P -traditional -C

View File

@@ -0,0 +1,117 @@
{
lib,
stdenv,
fetchurl,
gtk2-x11,
pkg-config,
python3,
gfortran,
cfitsio,
getopt,
perl,
groff,
which,
ncurses,
}:
let
python3Env = python3.withPackages (
ps: with ps; [
numpy
setuptools
]
);
in
stdenv.mkDerivation rec {
srcVersion = "oct25a";
version = "20251001_a";
pname = "gildas";
src = fetchurl {
# For each new release, the upstream developers of Gildas move the
# source code of the previous release to a different directory
urls = [
"http://www.iram.fr/~gildas/dist/gildas-src-${srcVersion}.tar.xz"
"http://www.iram.fr/~gildas/dist/archive/gildas/gildas-src-${srcVersion}.tar.xz"
];
hash = "sha256-n1IQajRXIHWkaFpLOtctlm4P+2vrxTWdyQiD3caQd3A=";
};
nativeBuildInputs = [
pkg-config
groff
perl
getopt
gfortran
which
];
buildInputs = [
gtk2-x11
cfitsio
python3Env
ncurses
];
patches = [
./wrapper.patch
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
./clang.patch
./cpp-darwin.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 = lib.optionalString stdenv.hostPlatform.isDarwin "${gfortran.outPath}/bin/cpp";
configurePhase = ''
runHook preConfigure
substituteInPlace admin/wrapper.sh --replace '%%OUT%%' $out
substituteInPlace admin/wrapper.sh --replace '%%PYTHONHOME%%' ${python3Env}
substituteInPlace utilities/main/gag-makedepend.pl --replace '/usr/bin/perl' ${perl}/bin/perl
source admin/gildas-env.sh -c gfortran -o openmp
echo "gag_doc: $out/share/doc/" >> kernel/etc/gag.dico.lcl
runHook postConfigure
'';
userExec = "astro class greg mapping sic";
postInstall = ''
mkdir -p $out/bin
cp -a ../gildas-exe-${srcVersion}/* $out
mv $out/$GAG_EXEC_SYSTEM $out/libexec
for i in ${userExec} ; do
cp admin/wrapper.sh $out/bin/$i
chmod 755 $out/bin/$i
done
'';
passthru.updateScript = ./update.py;
meta = {
description = "Radioastronomy data analysis software";
longDescription = ''
GILDAS is a collection of state-of-the-art software
oriented toward (sub-)millimeter radioastronomical
applications (either single-dish or interferometer).
It is daily used to reduce all data acquired with the
IRAM 30M telescope and Plateau de Bure Interferometer
PDBI (except VLBI observations). GILDAS is easily
extensible. GILDAS is written in Fortran-90, with a
few parts in C/C++ (mainly keyboard interaction,
plotting, widgets).'';
homepage = "http://www.iram.fr/IRAMFR/GILDAS/gildas.html";
license = lib.licenses.free;
maintainers = [
lib.maintainers.bzizou
lib.maintainers.smaret
];
platforms = lib.platforms.all;
};
}

148
pkgs/by-name/gi/gildas/update.py Executable file
View File

@@ -0,0 +1,148 @@
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p "python3.withPackages (ps: [ ps.beautifulsoup4 ps.requests ])"
"""
Update the gildas package in nixpkgs.
"""
import re
import subprocess
import requests
import os
from bs4 import BeautifulSoup
def to_version(srcVersion):
"""
Convert the source version to the package version
This function converts the source version from the format "apr25a"
to "20250401_a".
"""
months = {
"jan": "01",
"feb": "02",
"mar": "03",
"apr": "04",
"may": "05",
"jun": "06",
"jul": "07",
"aug": "08",
"sep": "09",
"oct": "10",
"nov": "11",
"dec": "12",
}
month = srcVersion[0:3]
year = srcVersion[3:5]
revision = srcVersion[5:6]
return f"20{year}{months[month]}01_{revision}"
def get_srcVersion():
"""
Get the available source versions from the gildas website
"""
srcVersions = []
response = requests.get("https://www.iram.fr/~gildas/dist/index.html")
soup = BeautifulSoup(response.text, "html.parser")
pattern = r"^gildas-src-([a-z]{3}\d{2}[a-z])\.tar\.xz$"
for link in soup.find_all("a"):
href = link["href"]
match = re.search(pattern, href)
if match:
srcVersions.append(match.group(1))
return srcVersions
def find_latest(srcVersions):
"""
Return the latest source version from a list
"""
latestVersion = ""
for srcVersion in srcVersions:
version = to_version(srcVersion)
if version > latestVersion:
latest = srcVersion
return latest
def get_hash(srcVersion):
"""
Get the hash of a given source versionn
"""
url = f"http://www.iram.fr/~gildas/dist/gildas-src-{srcVersion}.tar.xz"
srcHash = subprocess.check_output(["nix-prefetch-url", url]).decode().strip()
# Convert to SRI representation
srcSRIHash = (
subprocess.check_output(["nix-hash", "--to-sri", "--type", "sha256", srcHash])
.decode()
.strip()
)
return srcSRIHash
def get_package_attribute(attr):
"""
Get a package attribute
"""
pattern = attr + r'\s*=\s*"([^"]+)";'
with open("package.nix", "r") as f:
for line in f:
match = re.search(pattern, line)
if match:
return match.group(1)
def update_package(srcVersion, version, srcHash):
"""
Update the package
"""
current_srcVersion = get_package_attribute("srcVersion")
current_version = get_package_attribute("version")
current_hash = get_package_attribute("hash")
with open("package.nix", "r") as f:
lines = f.readlines()
with open("package.nix", "w") as f:
for line in lines:
line = line.replace(current_srcVersion, srcVersion)
line = line.replace(current_version, version)
line = line.replace(current_hash, srcHash)
f.write(line)
def main():
os.chdir(os.path.dirname(os.path.abspath(__file__))) # allow to run from anywhere
latest = find_latest(get_srcVersion())
if latest != get_package_attribute("srcVersion"):
srcVersion = latest
version = to_version(srcVersion)
print(f"Updating gildas to {version}...")
srcHash = get_hash(srcVersion)
update_package(srcVersion, version, srcHash)
print("done")
else:
print("Already up to date")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,20 @@
diff --new-file -r -u gildas-src-feb17d.orig/admin/wrapper.sh gildas-src-feb17d/admin/wrapper.sh
--- gildas-src-feb17d.orig/admin/wrapper.sh 1970-01-01 01:00:00.000000000 +0100
+++ gildas-src-feb17d/admin/wrapper.sh 2017-05-18 21:00:01.660778782 +0200
@@ -0,0 +1,16 @@
+#!/bin/sh -e
+
+export GAG_ROOT_DIR="%%OUT%%"
+export GAG_PATH="${GAG_ROOT_DIR}/etc"
+export GAG_EXEC_SYSTEM="libexec"
+export GAG_GAG="${HOME}/.gag"
+export PYTHONHOME="%%PYTHONHOME%%"
+if [ -z "\$PYTHONPATH" ]; then
+ PYTHONPATH="${GAG_ROOT_DIR}/${GAG_EXEC_SYSTEM}/python"
+else
+ PYTHONPATH="${GAG_ROOT_DIR}/${GAG_EXEC_SYSTEM}/python:${PYTHONPATH}"
+fi
+export PYTHONPATH
+export LD_LIBRARY_PATH=${GAG_ROOT_DIR}/${GAG_EXEC_SYSTEM}/lib/
+me=`basename $0`
+exec ${GAG_ROOT_DIR}/${GAG_EXEC_SYSTEM}/bin/${me} ${*}

View File

@@ -0,0 +1,84 @@
{
lib,
installShellFiles,
python3,
fetchFromGitHub,
nix-update-script,
testers,
gimme-aws-creds,
}:
python3.pkgs.buildPythonApplication rec {
pname = "gimme-aws-creds";
version = "2.8.2"; # N.B: if you change this, check if overrides are still up-to-date
format = "setuptools";
src = fetchFromGitHub {
owner = "Nike-Inc";
repo = "gimme-aws-creds";
rev = "v${version}";
hash = "sha256-fsFYcfbLeYV6tpOGgNrFmYjcUAmdsx5zwUbvcctwFVs=";
};
nativeBuildInputs = [
installShellFiles
];
pythonRemoveDeps = [
"configparser"
];
dependencies = with python3.pkgs; [
boto3
beautifulsoup4
ctap-keyring-device
requests
okta
pyjwt
html5lib
furl
];
preCheck = ''
# Disable using platform's keyring unavailable in sandbox
export PYTHON_KEYRING_BACKEND="keyring.backends.fail.Keyring"
'';
nativeCheckInputs = with python3.pkgs; [
pytestCheckHook
responses
];
disabledTests = [
"test_build_factor_name_webauthn_registered"
];
pythonImportsCheck = [
"gimme_aws_creds"
];
postInstall = ''
rm $out/bin/gimme-aws-creds.cmd
chmod +x $out/bin/gimme-aws-creds
installShellCompletion --bash --name gimme-aws-creds $out/bin/gimme-aws-creds-autocomplete.sh
rm $out/bin/gimme-aws-creds-autocomplete.sh
'';
passthru = {
updateScript = nix-update-script { };
tests.version = testers.testVersion {
package = gimme-aws-creds;
command = ''touch tmp.conf && OKTA_CONFIG="tmp.conf" gimme-aws-creds --version'';
version = "gimme-aws-creds ${version}";
};
};
meta = with lib; {
homepage = "https://github.com/Nike-Inc/gimme-aws-creds";
changelog = "https://github.com/Nike-Inc/gimme-aws-creds/releases";
description = "CLI that utilizes Okta IdP via SAML to acquire temporary AWS credentials";
mainProgram = "gimme-aws-creds";
license = licenses.asl20;
maintainers = with maintainers; [ jbgosselin ];
};
}

View File

@@ -0,0 +1,27 @@
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage rec {
pname = "gimoji";
version = "1.1.1";
src = fetchFromGitHub {
owner = "zeenix";
repo = "gimoji";
rev = version;
hash = "sha256-X1IiDnnRXiZBL/JBDfioKc/724TnVKaEjZLrNwX5SoA=";
};
cargoHash = "sha256-vAhHCNsViYyNSKeSGUL2oIp8bp5UCm8HReyDuoFvfqs=";
meta = with lib; {
description = "Easily add emojis to your git commit messages";
homepage = "https://github.com/zeenix/gimoji";
license = licenses.mit;
mainProgram = "gimoji";
maintainers = with maintainers; [ a-kenji ];
};
}

View File

@@ -0,0 +1,51 @@
--- a/core/config_reader.c
+++ b/core/config_reader.c
@@ -17,7 +17,7 @@
#include "../directories.h"
#include "macros.h"
#include <errno.h>
-
+#include <stdlib.h>
/*
* These variables are used to read the configuration.
*/
@@ -1355,7 +1355,7 @@
char file_path[PATH_MAX];
snprintf(file_path, sizeof(file_path), "%s%s%s%s", gimx_params.homedir, GIMX_DIR, CONFIG_DIR, file);
-
+ snprintf(file_path, sizeof(file_path), "%s", file);
if(read_file(file_path) == -1)
{
gerror("read_file failed\n");
--- a/core/gimx.c
+++ b/core/gimx.c
@@ -8,7 +8,7 @@
#include <errno.h> //to print errors
#include <string.h> //to print errors
#include <limits.h> //PATH_MAX
-
+#include <stdlib.h>
#ifndef WIN32
#include <termios.h> //to disable/enable echo
#include <unistd.h>
@@ -192,7 +192,7 @@
char file_path[PATH_MAX];
snprintf(file_path, sizeof(file_path), "%s%s%s%s", gimx_params.homedir, GIMX_DIR, CONFIG_DIR, gimx_params.config_file);
-
+ snprintf(file_path, sizeof(file_path), "%s", gimx_params.config_file);
FILE * fp = gfile_fopen(file_path, "r");
if (fp == NULL)
{
--- a/core/connectors/bluetooth/linux/bt_mgmt.c
+++ b/core/connectors/bluetooth/linux/bt_mgmt.c
@@ -322,7 +322,7 @@ static int read_link_keys(uint16_t index, uint16_t nb_keys, bdaddr_t bdaddrs[nb_
bdaddr_t ba;
char dongle_bdaddr[18];
- if(bt_device_abs_get(bt_abs_value)->get_bdaddr(index, &ba) < 0)
+ if(bt_device_abs_get()->get_bdaddr(index, &ba) < 0)
{
fprintf(stderr, "can't read device bdaddr\n");
return -1;

View File

@@ -0,0 +1,76 @@
{
stdenv,
lib,
fetchFromGitHub,
makeWrapper,
curl,
libusb1,
bluez,
libxml2,
ncurses5,
libmhash,
xorg,
}:
let
gimx-config = fetchFromGitHub {
owner = "matlo";
repo = "GIMX-configurations";
rev = "c20300f24d32651d369e2b27614b62f4b856e4a0";
hash = "sha256-t/Ttlvc9LCRW624oSsFaP8EmswJ3OAn86QgF1dCUjAs=";
};
in
stdenv.mkDerivation rec {
pname = "gimx";
version = "8.0";
src = fetchFromGitHub {
owner = "matlo";
repo = "GIMX";
tag = "v${version}";
fetchSubmodules = true;
hash = "sha256-BcFLdQgEAi6Sxyb5/P9YAIkmeXNZXrKcOa/6g817xQg=";
};
env.NIX_CFLAGS_COMPILE = "-Wno-error";
patches = [ ./conf.patch ];
makeFlags = [ "build-core" ];
nativeBuildInputs = [ makeWrapper ];
buildInputs = [
curl
libusb1
bluez
libxml2
ncurses5
libmhash
xorg.libX11
xorg.libXi
];
installPhase = ''
runHook preInstall
mkdir -p $out
substituteInPlace ./core/Makefile --replace-fail "chmod ug+s" "echo"
export DESTDIR="$out"
make install-shared install-core
mv $out/usr/lib $out/lib
mv $out/usr/bin $out/bin
cp -r ${gimx-config}/Linux $out/share
makeWrapper $out/bin/gimx $out/bin/gimx-ds4 \
--add-flags "--nograb" --add-flags "-p /dev/ttyUSB0" \
--add-flags "-c $out/share/Dualshock4.xml"
runHook postInstall
'';
meta = {
homepage = "https://github.com/matlo/GIMX";
description = "Game Input Multiplexer";
license = lib.licenses.gpl3Only;
platforms = lib.platforms.linux;
};
}

View File

@@ -0,0 +1,45 @@
{
lib,
stdenv,
fetchurl,
cln,
pkg-config,
readline,
gmp,
python3,
}:
stdenv.mkDerivation rec {
pname = "ginac";
version = "1.8.9";
src = fetchurl {
url = "https://www.ginac.de/ginac-${version}.tar.bz2";
sha256 = "sha256-bP1Gz043NpDhLRa3cteu0PXEM9qMfs0kd/LnNkg7tDk=";
};
propagatedBuildInputs = [ cln ];
buildInputs = [ readline ] ++ lib.optional stdenv.hostPlatform.isDarwin gmp;
nativeBuildInputs = [
pkg-config
python3
];
strictDeps = true;
preConfigure = ''
patchShebangs ginsh
'';
configureFlags = [ "--disable-rpath" ];
meta = with lib; {
description = "GiNaC C++ library for symbolic manipulations";
homepage = "https://www.ginac.de/";
maintainers = with maintainers; [ lovek323 ];
license = licenses.gpl2;
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,57 @@
{
lib,
buildGoModule,
fetchFromGitHub,
testers,
ginkgo,
}:
buildGoModule rec {
pname = "ginkgo";
version = "2.26.0";
src = fetchFromGitHub {
owner = "onsi";
repo = "ginkgo";
rev = "v${version}";
sha256 = "sha256-sf8rGRLSX3AsUSGqBXzb0KRwKqpmRiD+U9V/ldLqwps=";
};
vendorHash = "sha256-CUoVFKA/LQNVf4gnjqguYjPTF4ZdxA+QSJmw/UeUsrM=";
# integration tests expect more file changes
# types tests are missing CodeLocation
excludedPackages = [
"integration"
"types"
];
__darwinAllowLocalNetworking = true;
passthru.tests.version = testers.testVersion {
package = ginkgo;
command = "ginkgo version";
};
meta = with lib; {
homepage = "https://onsi.github.io/ginkgo/";
changelog = "https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md";
description = "Modern Testing Framework for Go";
mainProgram = "ginkgo";
longDescription = ''
Ginkgo is a testing framework for Go designed to help you write expressive
tests. It is best paired with the Gomega matcher library. When combined,
Ginkgo and Gomega provide a rich and expressive DSL
(Domain-specific Language) for writing tests.
Ginkgo is sometimes described as a "Behavior Driven Development" (BDD)
framework. In reality, Ginkgo is a general purpose testing framework in
active use across a wide variety of testing contexts: unit tests,
integration tests, acceptance test, performance tests, etc.
'';
license = licenses.mit;
maintainers = with maintainers; [
saschagrunert
jk
];
};
}

View File

@@ -0,0 +1,27 @@
{
lib,
fetchFromGitHub,
rustPlatform,
}:
rustPlatform.buildRustPackage rec {
pname = "ginko";
version = "0.0.8";
src = fetchFromGitHub {
owner = "Schottkyc137";
repo = "ginko";
tag = "v${version}";
hash = "sha256-lk+iZclni6jAkvN5/62YobFBAdwTUOfd5v7Fs8M6MQo=";
};
cargoHash = "sha256-7VwvFDjwUZechUrkxnXPFN6aMkr9KJkV81rpOZJHr8E=";
meta = {
description = "Device-tree source parser, analyzer and language server";
maintainers = [ lib.maintainers.fredeb ];
license = lib.licenses.mit;
homepage = "https://github.com/Schottkyc137/ginko";
changelog = "https://github.com/Schottkyc137/ginko/releases/tag/v${version}/CHANGELOG.md";
};
}

View File

@@ -0,0 +1,50 @@
{
lib,
stdenv,
fetchFromGitHub,
autoconf,
automake,
which,
pkg-config,
mono,
glib,
gtk-sharp-2_0,
}:
stdenv.mkDerivation rec {
pname = "gio-sharp";
version = "0.3";
src = fetchFromGitHub {
owner = "mono";
repo = "gio-sharp";
rev = version;
sha256 = "13pc529pjabj7lq23dbndc26ssmg5wkhc7lfvwapm87j711m0zig";
};
nativeBuildInputs = [
pkg-config
autoconf
automake
which
];
buildInputs = [
mono
glib
gtk-sharp-2_0
];
dontStrip = true;
prePatch = ''
./autogen-2.22.sh
'';
meta = with lib; {
description = "GIO API bindings";
homepage = "https://github.com/mono/gio-sharp";
license = licenses.mit;
platforms = platforms.linux;
};
}

View File

@@ -0,0 +1,53 @@
{
stdenvNoCC,
lib,
fetchFromGitHub,
ffmpeg,
xdotool,
slop,
libnotify,
procps,
makeWrapper,
}:
stdenvNoCC.mkDerivation rec {
pname = "giph";
version = "1.1.1";
src = fetchFromGitHub {
owner = "phisch";
repo = "giph";
rev = version;
sha256 = "19l46m1f32b3bagzrhaqsfnl5n3wbrmg3sdy6fdss4y1yf6nqayk";
};
dontConfigure = true;
dontBuild = true;
installFlags = [ "PREFIX=${placeholder "out"}" ];
nativeBuildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/giph \
--prefix PATH : ${
lib.makeBinPath [
ffmpeg
xdotool
libnotify
slop
procps
]
}
'';
meta = with lib; {
homepage = "https://github.com/phisch/giph";
description = "Simple gif recorder";
license = licenses.mit;
maintainers = [ maintainers.lom ];
platforms = platforms.linux;
mainProgram = "giph";
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
fetchFromGitHub,
rustPlatform,
}:
let
version = "0.21.0";
in
rustPlatform.buildRustPackage {
pname = "gir";
inherit version;
src = fetchFromGitHub {
owner = "gtk-rs";
repo = "gir";
rev = version;
sha256 = "sha256-fjfTB621DwnCRXTsoGxISk+4XblMbjX5dzY+M8uDZ80=";
};
cargoHash = "sha256-wT09qXGx4+oJ9MhZqpG9jZ1yMYT/JJ2bJ6z1CT7wqUQ=";
postPatch = ''
rm build.rs
sed -i '/build = "build\.rs"/d' Cargo.toml
echo "pub const VERSION: &str = \"$version\";" > src/gir_version.rs
'';
meta = with lib; {
description = "Tool to generate rust bindings and user API for glib-based libraries";
homepage = "https://github.com/gtk-rs/gir/";
license = with licenses; [ mit ];
maintainers = with maintainers; [ ekleog ];
mainProgram = "gir";
};
}

View File

@@ -0,0 +1,92 @@
{
lib,
stdenv,
fetchFromGitHub,
meson,
ninja,
pkg-config,
check,
dbus,
xvfb-run,
glib,
gtk3,
gettext,
libiconv,
json-glib,
libintl,
zathura,
}:
stdenv.mkDerivation rec {
pname = "girara";
version = "0.4.5";
outputs = [
"out"
"dev"
];
src = fetchFromGitHub {
owner = "pwmt";
repo = "girara";
tag = version;
hash = "sha256-XjRmGgljlkvxwcbPmA9ZFAPAjbClSQDdmQU/GFeLLxI=";
};
nativeBuildInputs = [
meson
ninja
pkg-config
gettext
check
dbus
glib # for glib-compile-resources
];
buildInputs = [
libintl
libiconv
json-glib
];
propagatedBuildInputs = [
glib
gtk3
];
nativeCheckInputs = [
xvfb-run
];
doCheck = !stdenv.hostPlatform.isDarwin;
mesonFlags = [
"-Ddocs=disabled" # docs do not seem to be installed
(lib.mesonEnable "tests" (
(stdenv.buildPlatform.canExecute stdenv.hostPlatform) && (!stdenv.hostPlatform.isDarwin)
))
];
checkPhase = ''
export NO_AT_BRIDGE=1
xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
--config-file=${dbus}/share/dbus-1/session.conf \
meson test --print-errorlogs
'';
passthru.tests = {
inherit zathura;
};
meta = {
homepage = "https://pwmt.org/projects/girara";
description = "User interface library";
longDescription = ''
girara is a library that implements a GTK based VIM-like user interface
that focuses on simplicity and minimalism.
'';
license = lib.licenses.zlib;
platforms = lib.platforms.linux ++ lib.platforms.darwin;
maintainers = [ ];
};
}

View File

@@ -0,0 +1,46 @@
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
dbus,
openssl,
}:
rustPlatform.buildRustPackage rec {
pname = "girouette";
version = "0.7.4";
src = fetchFromGitHub {
owner = "gourlaysama";
repo = "girouette";
rev = "v${version}";
hash = "sha256-CROd44lCCXlWF8X/9HyjtTjSlCUFkyke+BjkD4uUqXo=";
};
cargoHash = "sha256-1jRm8tKL6QTBaCjFgt+NKQjdGjJIURTb3rs1SrrKwr4=";
nativeBuildInputs = [
pkg-config
];
buildInputs = [
dbus
openssl
];
meta = with lib; {
description = "Show the weather in the terminal, in style";
homepage = "https://github.com/gourlaysama/girouette";
changelog = "https://github.com/gourlaysama/girouette/blob/${src.rev}/CHANGELOG.md";
license = with licenses; [
asl20
mit
];
maintainers = with maintainers; [
linuxissuper
cafkafk
];
mainProgram = "girouette";
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "girsh";
version = "0.41";
src = fetchFromGitHub {
owner = "nodauf";
repo = "Girsh";
tag = "v${version}";
hash = "sha256-MgzIBag0Exoh0TXW/AD0lbSOj7PVkMeVYQ8v5jdCgAs=";
};
vendorHash = "sha256-8NPFohguMX/X1khEPF+noLBNe/MUoPpXS2PN6SiotL8=";
ldflags = [
"-s"
"-w"
];
postInstall = ''
mv $out/bin/src $out/bin/$pname
'';
meta = {
description = "Automatically spawn a reverse shell fully interactive for Linux or Windows victim";
homepage = "https://github.com/nodauf/Girsh";
changelog = "https://github.com/nodauf/Girsh/releases/tag/v${version}";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ fab ];
};
}

View File

@@ -0,0 +1,21 @@
{
buildRubyGem,
lib,
ruby,
}:
buildRubyGem rec {
inherit ruby;
name = "${gemName}-${version}";
gemName = "gist";
version = "6.0.0";
source.sha256 = "0qnd1jqd7b04871v4l73grcmi7c0pivm8nsfrqvwivm4n4b3c2hd";
meta = with lib; {
description = "Upload code to https://gist.github.com (or github enterprise)";
homepage = "http://defunkt.io/gist/";
license = licenses.mit;
maintainers = with maintainers; [ zimbatm ];
platforms = ruby.meta.platforms;
};
}

View File

@@ -0,0 +1,57 @@
{
lib,
stdenv,
asciidoc,
fetchFromGitHub,
gitMinimal,
rustPlatform,
installShellFiles,
which,
}:
rustPlatform.buildRustPackage rec {
pname = "git-absorb";
version = "0.8.0";
src = fetchFromGitHub {
owner = "tummychow";
repo = "git-absorb";
tag = version;
hash = "sha256-O9bJMYhIyCtztswvL0JQ4ZtsAAI9TlHzWDeGdTHEmP4=";
};
nativeBuildInputs = [
asciidoc
installShellFiles
which # used by Documentation/Makefile
];
cargoHash = "sha256-QBZItmKH9b2KwHR88MotyIT2krZl5QQFLvUmPmbxl4U=";
nativeCheckInputs = [
gitMinimal
];
postInstall = ''
cd Documentation/
make
installManPage git-absorb.1
cd -
''
+ lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd git-absorb \
--bash <($out/bin/git-absorb --gen-completions bash) \
--fish <($out/bin/git-absorb --gen-completions fish) \
--zsh <($out/bin/git-absorb --gen-completions zsh)
'';
meta = with lib; {
homepage = "https://github.com/tummychow/git-absorb";
description = "git commit --fixup, but automatic";
license = [ licenses.bsd3 ];
maintainers = with maintainers; [
matthiasbeyer
];
mainProgram = "git-absorb";
};
}

View File

@@ -0,0 +1,41 @@
{
lib,
fetchFromGitHub,
rustPlatform,
libgit2,
git,
pkg-config,
zlib,
}:
rustPlatform.buildRustPackage {
pname = "git-agecrypt";
version = "0-unstable-2024-03-11";
src = fetchFromGitHub {
owner = "vlaci";
repo = "git-agecrypt";
rev = "126be86c515466c5878a60561f754a9ab4af6ee8";
hash = "sha256-cmnBW/691mmLHq8tWpD3+zwCf7Wph5fcVdSxQGxqd1k=";
};
cargoHash = "sha256-71puTOjuV3egkip8pbiYbKxfhoZYtnirp4NrgiXR13I=";
nativeBuildInputs = [
pkg-config
git
];
buildInputs = [
libgit2
zlib
];
meta = with lib; {
description = "Alternative to git-crypt using age instead of GPG";
homepage = "https://github.com/vlaci/git-agecrypt";
license = licenses.mpl20;
maintainers = with maintainers; [ kuznetsss ];
mainProgram = "git-agecrypt";
};
}

View File

@@ -0,0 +1,51 @@
{
lib,
python3Packages,
fetchFromGitHub,
gitMinimal,
}:
python3Packages.buildPythonApplication rec {
pname = "git-aggregator";
version = "4.1";
format = "setuptools";
src = fetchFromGitHub {
owner = "acsone";
repo = "git-aggregator";
tag = version;
hash = "sha256-sZYh3CN15WTCQ59W24ERJdP48EJt571cbkswLQ3JL2g=";
};
nativeBuildInputs = with python3Packages; [
setuptools-scm
];
propagatedBuildInputs = with python3Packages; [
argcomplete
colorama
gitMinimal
kaptan
requests
];
nativeCheckInputs = [
gitMinimal
];
preCheck = ''
export HOME="$(mktemp -d)"
git config --global user.name John
git config --global user.email john@localhost
git config --global init.defaultBranch master
git config --global pull.rebase false
'';
meta = with lib; {
description = "Manage the aggregation of git branches from different remotes to build a consolidated one";
homepage = "https://github.com/acsone/git-aggregator";
license = licenses.agpl3Plus;
maintainers = with maintainers; [ bbjubjub ];
mainProgram = "gitaggregate";
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
rclone,
makeWrapper,
}:
stdenvNoCC.mkDerivation rec {
pname = "git-annex-remote-rclone";
version = "0.8";
src = fetchFromGitHub {
owner = "DanielDent";
repo = "git-annex-remote-rclone";
rev = "v${version}";
sha256 = "sha256-B6x67XXE4BHd3x7a8pQlqPPmpy0c62ziDAldB4QpqQ4=";
};
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
install -Dm755 -t $out/bin git-annex-remote-rclone
wrapProgram "$out/bin/git-annex-remote-rclone" \
--prefix PATH ":" "${lib.makeBinPath [ rclone ]}"
'';
meta = with lib; {
homepage = "https://github.com/DanielDent/git-annex-remote-rclone";
description = "Use rclone supported cloud storage providers with git-annex";
license = licenses.gpl3Only;
platforms = platforms.all;
maintainers = [ maintainers.montag451 ];
mainProgram = "git-annex-remote-rclone";
};
}

View File

@@ -0,0 +1,32 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule {
pname = "git-appraise";
version = "unstable-2022-04-13";
src = fetchFromGitHub {
owner = "google";
repo = "git-appraise";
rev = "99aeb0e71544d3e1952e208c339b1aec70968cf3";
sha256 = "sha256-TteTI8yGP2sckoJ5xuBB5S8xzm1upXmZPlcDLvXZrpc=";
};
vendorHash = "sha256-Lzq4qpDAUjKFA2T685eW9NCfzEhDsn5UR1A1cIaZadE=";
ldflags = [
"-s"
"-w"
];
meta = with lib; {
description = "Distributed code review system for Git repos";
homepage = "https://github.com/google/git-appraise";
license = licenses.asl20;
maintainers = with maintainers; [ vdemeester ];
mainProgram = "git-appraise";
};
}

View File

@@ -0,0 +1,63 @@
{
lib,
python3Packages,
fetchFromGitHub,
git,
}:
python3Packages.buildPythonApplication rec {
pname = "git-archive-all";
version = "1.23.1";
format = "setuptools";
src = fetchFromGitHub {
owner = "Kentzo";
repo = "git-archive-all";
tag = version;
hash = "sha256-fIPjggOx+CEorj1bazz8s81ZdppkTL0OlA5tRqCYZyc=";
};
# * Don't use pinned dependencies
# * Remove formatter and coverage generator
# * Don't fail on warnings. Almost all tests output this warning:
# ResourceWarning: unclosed file [...]/repo.tar
# https://github.com/Kentzo/git-archive-all/issues/90
postPatch = ''
substituteInPlace setup.cfg \
--replace pycodestyle==2.5.0 "" \
--replace pytest==5.2.2 pytest \
--replace pytest-cov==2.8.1 "" \
--replace pytest-mock==1.11.2 pytest-mock \
--replace "filterwarnings = error" ""
substituteInPlace test_git_archive_all.py \
--replace "import pycodestyle" ""
'';
nativeCheckInputs = [
git
];
checkInputs = with python3Packages; [
pytestCheckHook
pytest-cov-stub
pytest-mock
];
disabledTests = [ "pycodestyle" ];
preCheck = ''
export HOME="$(mktemp -d)"
'';
meta = {
description = "Archive a repository with all its submodules";
longDescription = ''
A python script wrapper for git-archive that archives a git superproject
and its submodules, if it has any. Takes into account .gitattributes
'';
homepage = "https://github.com/Kentzo/git-archive-all";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fgaz ];
mainProgram = "git-archive-all";
};
}

View File

@@ -0,0 +1,40 @@
{
fetchFromGitHub,
git,
lib,
python3Packages,
}:
python3Packages.buildPythonApplication rec {
pname = "git-autoshare";
version = "1.0.0b6";
pyproject = true;
src = fetchFromGitHub {
owner = "acsone";
repo = "git-autoshare";
rev = version;
hash = "sha256-F8wcAayIR6MH8e0cQSwFJn/AVSLG3tVil80APjcFG/0=";
};
build-system = with python3Packages; [ setuptools-scm ];
dependencies = with python3Packages; [
appdirs
click
pyyaml
];
# Tests require network
doCheck = false;
makeWrapperArgs = [ "--set-default GIT_AUTOSHARE_GIT_BIN ${lib.getExe git}" ];
pythonImportsCheck = [ "git_autoshare" ];
meta = {
changelog = "https://github.com/acsone/git-autoshare/releases/tag/${version}";
description = "Git clone wrapper that automatically uses --reference to save disk space and download time";
homepage = "https://github.com/acsone/git-autoshare";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ yajo ];
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
stdenv,
fetchFromGitHub,
python3,
}:
stdenv.mkDerivation {
pname = "git-backdate";
version = "2023-07-19";
src = fetchFromGitHub {
owner = "rixx";
repo = "git-backdate";
rev = "8ba5a0eba04e5559be2e4b1b6e02e62b64ca4dd8";
sha256 = "sha256-91cEGQ0FtoiHEZHQ93jPFHF2vLoeQuBidykePFHtrsY=";
};
buildInputs = [
python3
];
installPhase = ''
runHook preInstall
install -Dm555 git-backdate -t $out/bin
runHook postInstall
'';
meta = with lib; {
description = "Backdate a commit or range of commit to a date or range of dates";
homepage = "https://github.com/rixx/git-backdate";
license = licenses.wtfpl;
maintainers = with maintainers; [ matthiasbeyer ];
mainProgram = "git-backdate";
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
buildGoModule,
fetchFromGitHub,
testers,
git-backup-go,
}:
buildGoModule rec {
pname = "git-backup-go";
version = "1.6.1";
src = fetchFromGitHub {
owner = "ChappIO";
repo = "git-backup";
rev = "v${version}";
hash = "sha256-Z32ThzmGkF89wsYqJnP/Koz4/2mulkrvvnUKHE6Crks=";
};
vendorHash = "sha256-BLnnwwCrJJd8ihpgfdWel7l8aAIVVJBIpE+97J9ojPo=";
ldflags = [ "-X main.Version=${version}" ];
passthru.tests.version = testers.testVersion {
package = git-backup-go;
command = "git-backup -version";
};
meta = {
description = "Backup all your GitHub & GitLab repositories";
homepage = "https://github.com/ChappIO/git-backup";
license = lib.licenses.asl20;
mainProgram = "git-backup";
maintainers = with lib.maintainers; [ aleksana ];
};
}

View File

@@ -0,0 +1,32 @@
{
lib,
fetchFromGitHub,
python3Packages,
git,
}:
python3Packages.buildPythonApplication {
pname = "git-bars";
version = "0-unstable-2023-08-08";
format = "setuptools";
src = fetchFromGitHub {
owner = "knadh";
repo = "git-bars";
rev = "f15fbc15345d9ef021e5a9b278e352bb532dcee8";
hash = "sha256-jHP6LqhUQv6hh97tSXAdOruWdtp2FXM6ANlpWoA+fHQ=";
};
propagatedBuildInputs = [
git
python3Packages.setuptools
];
meta = with lib; {
homepage = "https://github.com/knadh/git-bars";
description = "Utility for visualising git commit activity as bars on the terminal";
license = licenses.mit;
maintainers = [ maintainers.matthiasbeyer ];
mainProgram = "git-bars";
};
}

View File

@@ -0,0 +1,40 @@
{
lib,
python3Packages,
fetchFromGitHub,
git,
graphviz,
}:
python3Packages.buildPythonApplication rec {
pname = "git-big-picture";
version = "1.3.0";
pyproject = true;
src = fetchFromGitHub {
owner = "git-big-picture";
repo = "git-big-picture";
tag = "v${version}";
hash = "sha256-aBwSw7smeRkkXSPY02Cs+jFI1wvgj1JisUny+R8G59E=";
};
build-system = with python3Packages; [ setuptools ];
postFixup = ''
wrapProgram $out/bin/git-big-picture \
--prefix PATH : ${
lib.makeBinPath [
git
graphviz
]
}
'';
meta = {
description = "Tool for visualization of Git repositories";
homepage = "https://github.com/git-big-picture/git-big-picture";
license = lib.licenses.gpl3Plus;
maintainers = [ lib.maintainers.nthorne ];
mainProgram = "git-big-picture";
};
}

View File

@@ -0,0 +1,18 @@
diff --git a/src/lock.rs b/src/lock.rs
--- a/src/lock.rs
+++ b/src/lock.rs
@@ -132,10 +132,10 @@ impl ScopedDirLock {
// Lock
match (opts.exclusive, opts.non_blocking) {
- (true, false) => file.lock_exclusive(),
- (true, true) => file.try_lock_exclusive(),
- (false, false) => file.lock_shared(),
- (false, true) => file.try_lock_shared(),
+ (true, false) => fs2::FileExt::lock_exclusive(&file),
+ (true, true) => fs2::FileExt::try_lock_exclusive(&file),
+ (false, false) => fs2::FileExt::lock_shared(&file),
+ (false, true) => fs2::FileExt::try_lock_shared(&file),
}
.context(&path, || {
format!(

View File

@@ -0,0 +1,81 @@
{
lib,
fetchFromGitHub,
git,
ncurses,
openssl,
pkg-config,
rustPlatform,
sqlite,
stdenv,
}:
rustPlatform.buildRustPackage rec {
pname = "git-branchless";
version = "0.10.0";
src = fetchFromGitHub {
owner = "arxanas";
repo = "git-branchless";
rev = "v${version}";
hash = "sha256-8uv+sZRr06K42hmxgjrKk6FDEngUhN/9epixRYKwE3U=";
};
# Patch the vendored esl01-indexedlog crate.
# This is necessary to fix the build for rust 1.89. See:
# - https://github.com/NixOS/nixpkgs/issues/437051
# - https://github.com/arxanas/git-branchless/issues/1585
# - https://github.com/facebook/sapling/issues/1119
# The patch is derived from:
# - https://github.com/facebook/sapling/commit/9e27acb84605079bf4e305afb637a4d6801831ac
postPatch = ''
(
cd ../git-branchless-*-vendor/esl01-indexedlog-*/
patch -p1 < ${./fix-esl01-indexedlog-for-rust-1_89.patch}
)
'';
cargoHash = "sha256-i7KpTd4fX3PrhDjj3R9u98rdI0uHkpQCxSmEF+Gu7yk=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [
ncurses
openssl
sqlite
];
postInstall = lib.optionalString (with stdenv; buildPlatform.canExecute hostPlatform) ''
$out/bin/git-branchless install-man-pages $out/share/man
'';
preCheck = ''
export TEST_GIT=${git}/bin/git
export TEST_GIT_EXEC_PATH=$(${git}/bin/git --exec-path)
'';
# Note that upstream has disabled CI tests for git>=2.46
# See: https://github.com/arxanas/git-branchless/issues/1416
# https://github.com/arxanas/git-branchless/pull/1417
# To be re-enabled once arxanas/git-branchless#1416 is resolved
doCheck = false;
checkFlags = [
# FIXME: these tests deadlock when run in the Nix sandbox
"--skip=test_switch_pty"
"--skip=test_next_ambiguous_interactive"
"--skip=test_switch_auto_switch_interactive"
];
meta = with lib; {
description = "Suite of tools to help you visualize, navigate, manipulate, and repair your commit history";
homepage = "https://github.com/arxanas/git-branchless";
license = licenses.gpl2Only;
mainProgram = "git-branchless";
maintainers = with maintainers; [
nh2
hmenke
bryango
];
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
fetchPypi,
python3Packages,
}:
let
self = python3Packages.buildPythonApplication {
pname = "git-branchstack";
version = "0.2.0";
format = "pyproject";
src = fetchPypi {
pname = "git-branchstack";
inherit (self) version;
hash = "sha256-gja93LOcVCQ6l+Cygvsm+3uomvxtvUl6t23GIb/tKyQ=";
};
build-system = with python3Packages; [
setuptools
];
dependencies = with python3Packages; [
git-revise
];
meta = {
homepage = "https://github.com/krobelus/git-branchstack";
description = "Efficiently manage Git branches without leaving your local branch";
license = lib.licenses.mit;
maintainers = [ ];
};
};
in
self

View File

@@ -0,0 +1,43 @@
{
lib,
buildGoModule,
fetchFromGitHub,
gitMinimal,
}:
buildGoModule rec {
pname = "git-bug-migration";
version = "0.3.4";
src = fetchFromGitHub {
owner = "MichaelMure";
repo = "git-bug-migration";
rev = "v${version}";
hash = "sha256-IOBgrU3C0ZHD2wx9LRVgKEJzDlUj6z2UXlHGU3tdTdQ=";
};
vendorHash = "sha256-Hid9OK91LNjLmDHam0ZlrVQopVOsqbZ+BH2rfQi5lS0=";
nativeCheckInputs = [ gitMinimal ];
ldflags = [
"-X main.GitExactTag=${version}"
"-X main.GitLastTag=${version}"
];
preCheck = ''
export HOME=$(mktemp -d)
git config --global user.name 'Nixpkgs Test User'
git config --global user.email 'nobody@localhost'
'';
meta = with lib; {
description = "Tool for upgrading repositories using git-bug to new versions";
homepage = "https://github.com/MichaelMure/git-bug-migration";
license = licenses.gpl3Plus;
maintainers = with maintainers; [
DeeUnderscore
sudoforge
];
mainProgram = "git-bug-migration";
};
}

View File

@@ -0,0 +1,56 @@
{
lib,
buildGoModule,
fetchFromGitHub,
installShellFiles,
}:
buildGoModule rec {
pname = "git-bug";
version = "0.10.1";
src = fetchFromGitHub {
owner = "git-bug";
repo = "git-bug";
rev = "v${version}";
sha256 = "sha256-iLYhVv6QMZStuNtxvvIylFSVb1zLfC58NU2QJChFfug=";
};
vendorHash = "sha256-qztAkP+CHhryhfv1uKHEpDutofMwHGun7Vr30BHWAOE=";
nativeBuildInputs = [ installShellFiles ];
doCheck = false;
excludedPackages = [
"doc"
"misc"
];
ldflags = [
"-X github.com/git-bug/git-bug/commands.GitCommit=v${version}"
"-X github.com/git-bug/git-bug/commands.GitLastTag=${version}"
"-X github.com/git-bug/git-bug/commands.GitExactTag=${version}"
];
postInstall = ''
installShellCompletion \
--bash misc/completion/bash/git-bug \
--zsh misc/completion/zsh/git-bug \
--fish misc/completion/fish/git-bug
installManPage doc/man/*
'';
meta = with lib; {
description = "Distributed bug tracker embedded in Git";
homepage = "https://github.com/git-bug/git-bug";
license = licenses.gpl3Plus;
maintainers = with maintainers; [
royneary
DeeUnderscore
sudoforge
];
mainProgram = "git-bug";
};
}

View File

@@ -0,0 +1,95 @@
{
lib,
stdenv,
coreutils,
fetchFromGitHub,
nix-update-script,
python3Packages,
# nativeCheckInputs
debian-devscripts,
dpkg,
gitMinimal,
gitSetupHook,
man,
}:
python3Packages.buildPythonApplication rec {
pname = "git-buildpackage";
version = "0.9.38";
pyproject = true;
src = fetchFromGitHub {
owner = "agx";
repo = "git-buildpackage";
tag = "debian/${version}";
hash = "sha256-dZ/uJLcDPkpwIz+Y6WInJ4XlSJ5zzDY65li/xghsJTQ=";
fetchSubmodules = true;
};
postPatch = ''
substituteInPlace gbp/command_wrappers.py \
--replace-fail "/bin/true" "${lib.getExe' coreutils "true"}" \
--replace-fail "/bin/false" "${lib.getExe' coreutils "false"}"
'';
build-system = [
python3Packages.setuptools
];
dependencies = with python3Packages; [
python-dateutil
pyyaml
rpm
];
pythonImportsCheck = [
"gbp"
];
nativeCheckInputs = [
debian-devscripts
dpkg
gitMinimal
gitSetupHook
man
]
++ (with python3Packages; [
coverage
pytest-cov
pytestCheckHook
]);
disabledTests = [
# gbp.command_wrappers.CommandExecFailed:
# Couldn't commit to 'pristine-tar' with upstream 'upstream':
# execution failed: [Errno 2] No such file or directory: 'pristine-tar'
"tests.doctests.test_PristineTar.test_pristine_tar"
# When gitMinimal is used instead of git:
# UNEXPECTED EXCEPTION: GitRepositoryError("Invalid git command 'branch': No manual entry for git-branch")
"tests.doctests.test_GitRepository.test_repo"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# gbp.git.repository.GitRepositoryError:
# Cannot create Git repository at '/does/not/exist':
# [Errno 30] Read-only file system: '/does'
"tests.doctests.test_GitRepository.test_create_noperm"
];
passthru.updateScript = nix-update-script {
extraArgs = [
"--version-regex"
"debian/(.*)"
];
};
meta = {
description = "Suite to help with maintaining Debian packages in Git repositories";
homepage = "https://honk.sigxcpu.org/piki/projects/git-buildpackage/";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ nim65s ];
mainProgram = "git-buildpackage";
};
}

View File

@@ -0,0 +1,32 @@
{
fetchFromGitHub,
lib,
stdenv,
}:
stdenv.mkDerivation {
pname = "git-cache";
version = "2018-06-18";
src = fetchFromGitHub {
owner = "Seb35";
repo = "git-cache";
rev = "354f661e40b358c5916c06957bd6b2c65426f452";
hash = "sha256-V7rQOy+s9Lzdc+RTA2QGPfyavw4De/qQ+tWrzYtO2qA=";
};
dontBuild = true;
installPhase = ''
install -Dm555 git-cache $out/bin/git-cache
'';
meta = with lib; {
homepage = "https://github.com/Seb35/git-cache";
license = licenses.wtfpl;
description = "Program to add and manage a system-wide or user-wide cache for remote git repositories";
mainProgram = "git-cache";
platforms = platforms.unix;
maintainers = with maintainers; [ maxhearnden ];
};
}

View File

@@ -0,0 +1,39 @@
{
lib,
fetchFromGitHub,
rustPlatform,
pkg-config,
openssl,
git,
nix-update-script,
}:
rustPlatform.buildRustPackage {
pname = "git-chain";
version = "0-unstable-2025-03-25";
src = fetchFromGitHub {
owner = "dashed";
repo = "git-chain";
rev = "f6a6d365e6e3cce15e74649a421044a01fb4f68f";
hash = "sha256-lOAURUhR2Ts1DF8yW0WnovSWeZFC8UwR6j4cxoreonY=";
};
cargoHash = "sha256-0Ur80eIKQIsM5vyIt+9YpFufHTk97+T+KXoAkJE90Ag=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [ openssl ];
nativeCheckInputs = [ git ];
passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
meta = with lib; {
description = "Tool for rebasing a chain of local git branches";
homepage = "https://github.com/dashed/git-chain";
license = licenses.mit;
mainProgram = "git-chain";
maintainers = with maintainers; [ bcyran ];
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
fetchFromGitHub,
buildGoModule,
}:
buildGoModule rec {
pname = "git-chglog";
version = "0.15.4";
src = fetchFromGitHub {
owner = "git-chglog";
repo = "git-chglog";
rev = "v${version}";
sha256 = "sha256-rTJn2vUrEnmG2japqCxHv3BR9MpmMfpMLO2FBP6ONbw=";
};
vendorHash = "sha256-skhEHpSnxOTZrL8XLlQZL3s224mg8XRINKJnatYCQko=";
ldflags = [
"-s"
"-w"
"-X=main.Version=v${version}"
];
subPackages = [ "cmd/git-chglog" ];
meta = with lib; {
description = "CHANGELOG generator implemented in Go (Golang)";
homepage = "https://github.com/git-chglog/git-chglog";
license = licenses.mit;
maintainers = with maintainers; [ ldenefle ];
mainProgram = "git-chglog";
};
}

View File

@@ -0,0 +1,68 @@
{
stdenv,
lib,
fetchFromGitHub,
cargo,
pkg-config,
rustPlatform,
bzip2,
curl,
zlib,
zstd,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "git-cinnabar";
version = "0.7.3";
src = fetchFromGitHub {
owner = "glandium";
repo = "git-cinnabar";
tag = finalAttrs.version;
hash = "sha256-qE9LvOX2n+ylQry79CsmRCUzUEgwYZne3tbNDCoynzk=";
fetchSubmodules = true;
};
nativeBuildInputs = [
cargo
pkg-config
rustPlatform.cargoSetupHook
];
buildInputs = [
bzip2
curl
zlib
zstd
];
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) src;
hash = "sha256-IVizzc2dKZ83dz3KBMDDiaFNdnS40cS++k8AywyvakQ=";
};
ZSTD_SYS_USE_PKG_CONFIG = true;
enableParallelBuilding = true;
# Disable automated version-check
buildNoDefaultFeatures = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
install -v target/release/git-cinnabar $out/bin
ln -sv git-cinnabar $out/bin/git-remote-hg
runHook postInstall
'';
meta = {
description = "Git remote helper to interact with mercurial repositories";
homepage = "https://github.com/glandium/git-cinnabar";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ qyliss ];
platforms = lib.platforms.all;
};
})

View File

@@ -0,0 +1,53 @@
{
lib,
stdenv,
fetchFromGitHub,
rustPlatform,
installShellFiles,
}:
rustPlatform.buildRustPackage rec {
pname = "git-cliff";
version = "2.10.1";
src = fetchFromGitHub {
owner = "orhun";
repo = "git-cliff";
rev = "v${version}";
hash = "sha256-AFNOnFX/U0HkVypzrt1LELMiXshgVJ6q52ga74V9J9w=";
};
cargoHash = "sha256-6B65R/6VVUm7OZs/8UmJTEQ0htWBas1kxQj0qQ0QW+4=";
# attempts to run the program on .git in src which is not deterministic
doCheck = false;
nativeBuildInputs = [ installShellFiles ];
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
export OUT_DIR=$(mktemp -d)
# Generate shell completions
$out/bin/git-cliff-completions
installShellCompletion \
--bash $OUT_DIR/git-cliff.bash \
--fish $OUT_DIR/git-cliff.fish \
--zsh $OUT_DIR/_git-cliff
# Generate man page
$out/bin/git-cliff-mangen
installManPage $OUT_DIR/git-cliff.1
'';
meta = {
description = "Highly customizable Changelog Generator that follows Conventional Commit specifications";
homepage = "https://github.com/orhun/git-cliff";
changelog = "https://github.com/orhun/git-cliff/blob/v${version}/CHANGELOG.md";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [
siraben
matthiasbeyer
];
mainProgram = "git-cliff";
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildGoModule,
fetchFromGitHub,
git,
}:
buildGoModule rec {
pname = "git-codereview";
version = "1.17.0";
src = fetchFromGitHub {
owner = "golang";
repo = "review";
rev = "v${version}";
hash = "sha256-mcyijASjm4DeXsh5ZPLoYuRypCeIbp2FcSIDA0M+l2g=";
};
vendorHash = null;
ldflags = [
"-s"
"-w"
];
nativeCheckInputs = [ git ];
meta = with lib; {
description = "Manage the code review process for Git changes using a Gerrit server";
homepage = "https://golang.org/x/review/git-codereview";
license = licenses.bsd3;
maintainers = [ maintainers.edef ];
mainProgram = "git-codereview";
};
}

View File

@@ -0,0 +1,89 @@
{
stdenv,
lib,
fetchFromGitHub,
python3Packages,
gettext,
git,
qt5,
versionCheckHook,
copyDesktopItems,
imagemagick,
nix-update-script,
}:
python3Packages.buildPythonApplication rec {
pname = "git-cola";
version = "4.15.0";
pyproject = true;
src = fetchFromGitHub {
owner = "git-cola";
repo = "git-cola";
tag = "v${version}";
hash = "sha256-h3W7CsdJK1hid8Nmp1bvFwiHVS4UV/gziwtyZuxSxHY=";
};
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ qt5.qtwayland ];
propagatedBuildInputs = [
git
]
++ (with python3Packages; [
setuptools
pyqt5
qtpy
send2trash
polib
]);
nativeBuildInputs = [
gettext
qt5.wrapQtAppsHook
python3Packages.setuptools-scm
imagemagick
]
++ lib.optionals stdenv.hostPlatform.isLinux [ copyDesktopItems ];
nativeCheckInputs = [
git
python3Packages.pytestCheckHook
versionCheckHook
];
versionCheckProgramArg = "--version";
disabledTestPaths = [
"qtpy/"
"contrib/win32"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ "cola/inotify.py" ];
preFixup = ''
makeWrapperArgs+=("''${qtWrapperArgs[@]}")
'';
desktopItems = [
"share/applications/git-cola-folder-handler.desktop"
"share/applications/git-cola.desktop"
"share/applications/git-dag.desktop"
];
postInstall = ''
for i in 16 24 48 64 96 128 256 512; do
mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps
magick cola/icons/git-cola.svg -background none -resize ''${i}x''${i} $out/share/icons/hicolor/''${i}x''${i}/apps/${pname}.png
done
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Sleek and powerful Git GUI";
homepage = "https://git-cola.github.io/";
changelog = "https://github.com/git-cola/git-cola/blob/v${version}/CHANGES.rst";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ bobvanderlinden ];
mainProgram = "git-cola";
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
versionCheckHook,
nix-update-script,
}:
let
version = "2.7.2";
in
buildNpmPackage {
pname = "git-conventional-commits";
inherit version;
src = fetchFromGitHub {
owner = "qoomon";
repo = "git-conventional-commits";
tag = "v${version}";
hash = "sha256-3X5AnpIzqszKjMqFgUr9wzyzDpnRJ94hcBJpQ8J9H/c=";
};
npmDepsHash = "sha256-XUDWvoJTpOQZCUyYbijD/hA1HVseHO19vAheJrPd1Gk=";
dontNpmBuild = true;
nativeInstallCheckInputs = [
versionCheckHook
];
doInstallCheck = true;
versionCheckProgramArg = "--version";
passthru.updateScript = nix-update-script { };
meta = {
homepage = "https://github.com/qoomon/git-conventional-commits";
description = "Generate semantic versions, markdown changelogs, and validate commit messages";
changelog = "https://github.com/qoomon/git-conventional-commits/blob/v${version}/CHANGELOG.md";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ yzx9 ];
mainProgram = "git-conventional-commits";
};
}

View File

@@ -0,0 +1,33 @@
{
lib,
fetchFromGitHub,
python3,
}:
python3.pkgs.buildPythonApplication rec {
pname = "git-crecord";
version = "20230226.0";
format = "pyproject";
src = fetchFromGitHub {
owner = "andrewshadura";
repo = "git-crecord";
tag = version;
sha256 = "sha256-zsrMAD9EU+TvkWfWl9x6WbMXuw7YEz50LxQzSFVkKdQ=";
};
build-system = with python3.pkgs; [ setuptools ];
dependencies = with python3.pkgs; [ docutils ];
# has no tests
doCheck = false;
meta = with lib; {
homepage = "https://github.com/andrewshadura/git-crecord";
description = "Git subcommand to interactively select changes to commit or stage";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ onny ];
mainProgram = "git-crecord";
};
}

View File

@@ -0,0 +1,44 @@
{
lib,
rustPlatform,
fetchFromGitHub,
withNotification ? false,
withYubikey ? false,
withStrictCaller ? false,
withAll ? false,
}:
rustPlatform.buildRustPackage rec {
pname = "git-credential-keepassxc";
version = "0.14.1";
src = fetchFromGitHub {
owner = "Frederick888";
repo = "git-credential-keepassxc";
rev = "v${version}";
hash = "sha256-qxNzWuuIoK9BJLVcWtrER+MyA5cyd03xAwGljh8DZC4=";
};
cargoHash = "sha256-jjexSzxRhnNPW+urG7KpZBWfGcy06Cg4lXlQogF3L/A=";
buildFeatures =
[ ]
++ lib.optional withNotification "notification"
++ lib.optional withYubikey "yubikey"
++ lib.optional withStrictCaller "strict-caller"
++ lib.optional withAll "all";
meta = with lib; {
description = "Helper that allows Git (and shell scripts) to use KeePassXC as credential store";
longDescription = ''
git-credential-keepassxc is a Git credential helper that allows Git
(and shell scripts) to get/store logins from/to KeePassXC.
It communicates with KeePassXC using keepassxc-protocol which is
originally designed for browser extensions.
'';
homepage = "https://github.com/Frederick888/git-credential-keepassxc";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ fgaz ];
mainProgram = "git-credential-keepassxc";
};
}

View File

@@ -0,0 +1,41 @@
{
lib,
buildGoModule,
fetchFromGitHub,
installShellFiles,
}:
buildGoModule rec {
pname = "git-credential-oauth";
version = "0.16.0";
src = fetchFromGitHub {
owner = "hickford";
repo = "git-credential-oauth";
rev = "v${version}";
hash = "sha256-T10QGMp6keneUzdz7p/4huySIJFp4AmX253pZ3hYSYY=";
};
nativeBuildInputs = [ installShellFiles ];
ldflags = [
"-s"
"-w"
"-X main.version=${version}"
];
vendorHash = "sha256-g6HT0hmY2RQceSOigH2bVj1jXYhXq95xL0Qak7TMx0o=";
postInstall = ''
installManPage $src/git-credential-oauth.1
'';
meta = {
description = "Git credential helper that securely authenticates to GitHub, GitLab and BitBucket using OAuth";
homepage = "https://github.com/hickford/git-credential-oauth";
changelog = "https://github.com/hickford/git-credential-oauth/releases/tag/${src.rev}";
license = lib.licenses.asl20;
maintainers = [ ];
mainProgram = "git-credential-oauth";
};
}

View File

@@ -0,0 +1,80 @@
{
fetchFromGitHub,
git,
gnupg,
makeWrapper,
openssl,
lib,
stdenv,
libxslt,
docbook_xsl,
}:
stdenv.mkDerivation rec {
pname = "git-crypt";
version = "0.8.0";
src = fetchFromGitHub {
owner = "AGWA";
repo = "git-crypt";
rev = version;
sha256 = "sha256-d5nMDFQkJY+obYkhvr8yT9mjlGEBWFLN5xGizJ9kwHw=";
};
strictDeps = true;
nativeBuildInputs = [
libxslt
makeWrapper
];
buildInputs = [ openssl ];
postPatch = ''
substituteInPlace commands.cpp \
--replace '(escape_shell_arg(our_exe_path()))' '= "git-crypt"'
'';
makeFlags = [
"PREFIX=${placeholder "out"}"
"ENABLE_MAN=yes"
"DOCBOOK_XSL=${docbook_xsl}/share/xml/docbook-xsl-nons/manpages/docbook.xsl"
];
# https://github.com/AGWA/git-crypt/issues/232
CXXFLAGS = [
"-DOPENSSL_API_COMPAT=0x30000000L"
];
postFixup = ''
wrapProgram $out/bin/git-crypt \
--suffix PATH : ${
lib.makeBinPath [
git
gnupg
]
}
'';
meta = with lib; {
homepage = "https://www.agwa.name/projects/git-crypt";
description = "Transparent file encryption in git";
longDescription = ''
git-crypt enables transparent encryption and decryption of files in a git
repository. Files which you choose to protect are encrypted when
committed, and decrypted when checked out. git-crypt lets you freely
share a repository containing a mix of public and private
content. git-crypt gracefully degrades, so developers without the secret
key can still clone and commit to a repository with encrypted files. This
lets you store your secret material (such as keys or passwords) in the
same repository as your code, without requiring you to lock down your
entire repository.
'';
downloadPage = "https://github.com/AGWA/git-crypt/releases";
license = licenses.gpl3;
maintainers = with maintainers; [ dochang ];
platforms = platforms.unix;
mainProgram = "git-crypt";
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
python3Packages,
fetchFromGitHub,
git,
}:
python3Packages.buildPythonApplication rec {
pname = "git-delete-merged-branches";
version = "7.5.0";
pyproject = true;
src = fetchFromGitHub {
owner = "hartwork";
repo = "git-delete-merged-branches";
tag = version;
sha256 = "sha256-2MSdUpToOiurtiL0Ws2dLEWqd6wj4nQ2RsEepBytgAk=";
};
build-system = with python3Packages; [ setuptools ];
dependencies = with python3Packages; [
colorama
prompt-toolkit
];
nativeCheckInputs = [ git ] ++ (with python3Packages; [ parameterized ]);
meta = with lib; {
description = "Command-line tool to delete merged Git branches";
homepage = "https://github.com/hartwork/git-delete-merged-branches/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ SuperSandro2000 ];
};
}

View File

@@ -0,0 +1,69 @@
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
libgit2,
oniguruma,
zlib,
gitMinimal,
}:
rustPlatform.buildRustPackage rec {
pname = "git-dive";
version = "0.1.6";
src = fetchFromGitHub {
owner = "gitext-rs";
repo = "git-dive";
rev = "v${version}";
hash = "sha256-sy2qNFn8JLE173HVWfFXBx21jcx4kpFMwi9a0m38lso=";
};
cargoHash = "sha256-qRF111ofiM8SNUjQfpDg75OPpJnP7fOqM8Ih3NQUdGY=";
nativeBuildInputs = [
pkg-config
];
buildInputs = [
libgit2
oniguruma
zlib
];
nativeCheckInputs = [
gitMinimal
];
# don't use vendored libgit2
buildNoDefaultFeatures = true;
checkFlags = [
# requires internet access
"--skip=screenshot"
];
preCheck = ''
export HOME=$(mktemp -d)
git config --global user.name nixbld
git config --global user.email nixbld@example.com
'';
env = {
LIBGIT2_NO_VENDOR = 1;
RUSTONIG_SYSTEM_LIBONIG = true;
};
meta = with lib; {
description = "Dive into a file's history to find root cause";
homepage = "https://github.com/gitext-rs/git-dive";
changelog = "https://github.com/gitext-rs/git-dive/blob/${src.rev}/CHANGELOG.md";
license = with licenses; [
asl20
mit
];
maintainers = with maintainers; [ figsoda ];
mainProgram = "git-dive";
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
fetchFromGitHub,
python3Packages,
}:
python3Packages.buildPythonApplication rec {
pname = "git-dumper";
version = "1.0.8";
pyproject = true;
src = fetchFromGitHub {
owner = "arthaud";
repo = "git-dumper";
tag = version;
hash = "sha256-XU+6Od+mC8AV+w7sd8JaMB2Lc81ekeDLDiGGNu6bU0A=";
};
build-system = [
python3Packages.setuptools
];
dependencies = with python3Packages; [
beautifulsoup4
dulwich
pysocks
requests
requests-pkcs12
];
pythonImportsCheck = [
"git_dumper"
];
meta = {
description = "Tool to dump a git repository from a website";
homepage = "https://github.com/arthaud/git-dumper";
changelog = "https://github.com/arthaud/git-dumper/releases/tag/${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ yechielw ];
mainProgram = "git-dumper";
};
}

View File

@@ -0,0 +1,48 @@
{
lib,
stdenv,
fetchFromGitHub,
unixtools,
which,
}:
stdenv.mkDerivation rec {
pname = "git-extras";
version = "7.4.0";
src = fetchFromGitHub {
owner = "tj";
repo = "git-extras";
rev = version;
sha256 = "sha256-xxBmOAJgoVR+K3gEM5KFKyWenwFnar+zF26HnTG5vuw=";
};
postPatch = ''
patchShebangs check_dependencies.sh
'';
nativeBuildInputs = [
unixtools.column
which
];
dontBuild = true;
installFlags = [
"PREFIX=${placeholder "out"}"
"SYSCONFDIR=${placeholder "out"}/share"
];
postInstall = ''
# bash completion is already handled by make install
install -D etc/git-extras-completion.zsh $out/share/zsh/site-functions/_git_extras
'';
meta = with lib; {
homepage = "https://github.com/tj/git-extras";
description = "GIT utilities -- repo summary, repl, changelog population, author commit percentages and more";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ SuperSandro2000 ];
};
}

View File

@@ -0,0 +1,4 @@
source 'https://rubygems.org'
# Specify your gem's dependencies in git_fame.gemspec
gem "git_fame"

View File

@@ -0,0 +1,107 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (8.0.2)
base64
benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
base64 (0.2.0)
benchmark (0.4.0)
bigdecimal (3.1.9)
concurrent-ruby (1.3.5)
connection_pool (2.5.3)
drb (2.2.1)
dry-core (1.1.0)
concurrent-ruby (~> 1.0)
logger
zeitwerk (~> 2.6)
dry-inflector (1.2.0)
dry-initializer (3.2.0)
dry-logic (1.6.0)
bigdecimal
concurrent-ruby (~> 1.0)
dry-core (~> 1.1)
zeitwerk (~> 2.6)
dry-struct (1.8.0)
dry-core (~> 1.1)
dry-types (~> 1.8, >= 1.8.2)
ice_nine (~> 0.11)
zeitwerk (~> 2.6)
dry-types (1.8.2)
bigdecimal (~> 3.0)
concurrent-ruby (~> 1.0)
dry-core (~> 1.0)
dry-inflector (~> 1.0)
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
equatable (0.5.0)
git_fame (3.2.19)
activesupport (>= 7, < 9)
dry-initializer (~> 3.0)
dry-struct (~> 1.0)
dry-types (~> 1.0)
neatjson (~> 0.9)
rugged (~> 1.0)
tty-box (~> 0.5)
tty-option (~> 0.2)
tty-screen (~> 0.5)
tty-spinner (~> 0.9)
tty-table (~> 0.9, <= 0.10.0)
zeitwerk (~> 2.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
ice_nine (0.11.2)
logger (1.7.0)
minitest (5.25.5)
neatjson (0.10.5)
necromancer (0.4.0)
pastel (0.7.2)
equatable (~> 0.5.0)
tty-color (~> 0.4.0)
rugged (1.9.0)
securerandom (0.4.1)
strings (0.1.8)
strings-ansi (~> 0.1)
unicode-display_width (~> 1.5)
unicode_utils (~> 1.4)
strings-ansi (0.2.0)
tty-box (0.5.0)
pastel (~> 0.7.2)
strings (~> 0.1.6)
tty-cursor (~> 0.7)
tty-color (0.4.3)
tty-cursor (0.7.1)
tty-option (0.3.0)
tty-screen (0.6.5)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
tty-table (0.10.0)
equatable (~> 0.5.0)
necromancer (~> 0.4.0)
pastel (~> 0.7.2)
strings (~> 0.1.0)
tty-screen (~> 0.6.4)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (1.8.0)
unicode_utils (1.4.0)
uri (1.0.3)
zeitwerk (2.7.2)
PLATFORMS
ruby
DEPENDENCIES
git_fame
BUNDLED WITH
2.6.6

View File

@@ -0,0 +1,459 @@
{
activesupport = {
dependencies = [
"base64"
"benchmark"
"bigdecimal"
"concurrent-ruby"
"connection_pool"
"drb"
"i18n"
"logger"
"minitest"
"securerandom"
"tzinfo"
"uri"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0pm40y64wfc50a9sj87kxvil2102rmpdcbv82zf0r40vlgdwsrc5";
type = "gem";
};
version = "8.0.2";
};
base64 = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
type = "gem";
};
version = "0.2.0";
};
benchmark = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0jl71qcgamm96dzyqk695j24qszhcc7liw74qc83fpjljp2gh4hg";
type = "gem";
};
version = "0.4.0";
};
bigdecimal = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1k6qzammv9r6b2cw3siasaik18i6wjc5m0gw5nfdc6jj64h79z1g";
type = "gem";
};
version = "3.1.9";
};
concurrent-ruby = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1ipbrgvf0pp6zxdk5ascp6i29aybz2bx9wdrlchjmpx6mhvkwfw1";
type = "gem";
};
version = "1.3.5";
};
connection_pool = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0nrhsk7b3sjqbyl1cah6ibf1kvi3v93a7wf4637d355hp614mmyg";
type = "gem";
};
version = "2.5.3";
};
drb = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0h5kbj9hvg5hb3c7l425zpds0vb42phvln2knab8nmazg2zp5m79";
type = "gem";
};
version = "2.2.1";
};
dry-core = {
dependencies = [
"concurrent-ruby"
"logger"
"zeitwerk"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "15di39ssfkwigyyqla65n4x6cfhgwa4cv8j5lmyrlr07jwd840q9";
type = "gem";
};
version = "1.1.0";
};
dry-inflector = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0blgyg9l4gpzhb7rs9hqq9j7br80ngiigjp2ayp78w6m1ysx1x92";
type = "gem";
};
version = "1.2.0";
};
dry-initializer = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1qy4cv0j0ahabprdbp02nc3r1606jd5dp90lzqg0mp0jz6c9gm9p";
type = "gem";
};
version = "3.2.0";
};
dry-logic = {
dependencies = [
"bigdecimal"
"concurrent-ruby"
"dry-core"
"zeitwerk"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "18nf8mbnhgvkw34drj7nmvpx2afmyl2nyzncn3wl3z4h1yyfsvys";
type = "gem";
};
version = "1.6.0";
};
dry-struct = {
dependencies = [
"dry-core"
"dry-types"
"ice_nine"
"zeitwerk"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0ri9iqxknxvvhpbshf6jn7bq581k8l67iv23mii69yr4k5aqphvl";
type = "gem";
};
version = "1.8.0";
};
dry-types = {
dependencies = [
"bigdecimal"
"concurrent-ruby"
"dry-core"
"dry-inflector"
"dry-logic"
"zeitwerk"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "03zcngwfpq0nx9wmxma0s1c6sb3xxph93q8j7dy75721d7d9lkn8";
type = "gem";
};
version = "1.8.2";
};
equatable = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1sjm9zjakyixyvsqziikdrsqfzis6j3fq23crgjkp6fwkfgndj7x";
type = "gem";
};
version = "0.5.0";
};
git_fame = {
dependencies = [
"activesupport"
"dry-initializer"
"dry-struct"
"dry-types"
"neatjson"
"rugged"
"tty-box"
"tty-option"
"tty-screen"
"tty-spinner"
"tty-table"
"zeitwerk"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1891k7v2ld5p9v9zlc80s7qkqdxs1wpw6m40gx1wr273n177jal8";
type = "gem";
};
version = "3.2.19";
};
i18n = {
dependencies = [ "concurrent-ruby" ];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "03sx3ahz1v5kbqjwxj48msw3maplpp2iyzs22l4jrzrqh4zmgfnf";
type = "gem";
};
version = "1.14.7";
};
ice_nine = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x";
type = "gem";
};
version = "0.11.2";
};
logger = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr";
type = "gem";
};
version = "1.7.0";
};
minitest = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0mn7q9yzrwinvfvkyjiz548a4rmcwbmz2fn9nyzh4j1snin6q6rr";
type = "gem";
};
version = "5.25.5";
};
neatjson = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0wm1lq8yl6rzysh3wg6fa55w5534k6ppiz0qb7jyvdy582mk5i0s";
type = "gem";
};
version = "0.10.5";
};
necromancer = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0v9nhdkv6zrp7cn48xv7n2vjhsbslpvs0ha36mfkcd56cp27pavz";
type = "gem";
};
version = "0.4.0";
};
pastel = {
dependencies = [
"equatable"
"tty-color"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1yf30d9kzpm96gw9kwbv31p0qigwfykn8qdis5950plnzgc1vlp1";
type = "gem";
};
version = "0.7.2";
};
rugged = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1b7gcf6pxg4x607bica68dbz22b4kch33yi0ils6x3c8ql9akakz";
type = "gem";
};
version = "1.9.0";
};
securerandom = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1cd0iriqfsf1z91qg271sm88xjnfd92b832z49p1nd542ka96lfc";
type = "gem";
};
version = "0.4.1";
};
strings = {
dependencies = [
"strings-ansi"
"unicode-display_width"
"unicode_utils"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "111876lcqrykh30w7zzkrl06d6rj9lq24y625m28674vgfxkkcz0";
type = "gem";
};
version = "0.1.8";
};
strings-ansi = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "120wa6yjc63b84lprglc52f40hx3fx920n4dmv14rad41rv2s9lh";
type = "gem";
};
version = "0.2.0";
};
tty-box = {
dependencies = [
"pastel"
"strings"
"tty-cursor"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "14g63v0jx87hba50rlv3c521zg9rw0f5d31cihcvym19xxa7v3l5";
type = "gem";
};
version = "0.5.0";
};
tty-color = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0zz5xa6xbrj69h334d8nx7z732fz80s1a0b02b53mim95p80s7bk";
type = "gem";
};
version = "0.4.3";
};
tty-cursor = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
type = "gem";
};
version = "0.7.1";
};
tty-option = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "019ir4bcr8fag7dmq7ph6ilpvwjbv4qalip0bz7dlddbd6fk4vjs";
type = "gem";
};
version = "0.3.0";
};
tty-screen = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0azpjgyhdm8ycblnx9crq3dgb2x8yg454a13n60zfpsc0n138sw1";
type = "gem";
};
version = "0.6.5";
};
tty-spinner = {
dependencies = [ "tty-cursor" ];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0hh5awmijnzw9flmh5ak610x1d00xiqagxa5mbr63ysggc26y0qf";
type = "gem";
};
version = "0.9.3";
};
tty-table = {
dependencies = [
"equatable"
"necromancer"
"pastel"
"strings"
"tty-screen"
];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "05krrj1x5pmfbz74paszrsr1316w9b9jlc4wpd9s9gpzqfzwjzcg";
type = "gem";
};
version = "0.10.0";
};
tzinfo = {
dependencies = [ "concurrent-ruby" ];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
type = "gem";
};
version = "2.0.6";
};
unicode-display_width = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1204c1jx2g89pc25qk5150mk7j5k90692i7ihgfzqnad6qni74h2";
type = "gem";
};
version = "1.8.0";
};
unicode_utils = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0h1a5yvrxzlf0lxxa1ya31jcizslf774arnsd89vgdhk4g7x08mr";
type = "gem";
};
version = "1.4.0";
};
uri = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "04bhfvc25b07jaiaf62yrach7khhr5jlr5bx6nygg8pf11329wp9";
type = "gem";
};
version = "1.0.3";
};
zeitwerk = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0ws6rpyj0y9iadjg1890dwnnbjfdbzxsv6r48zbj7f8yn5y0cbl4";
type = "gem";
};
version = "2.7.2";
};
}

View File

@@ -0,0 +1,28 @@
{
lib,
bundlerEnv,
ruby,
bundlerUpdateScript,
}:
bundlerEnv {
inherit ruby;
pname = "git_fame";
gemdir = ./.;
passthru.updateScript = bundlerUpdateScript "git-fame";
meta = with lib; {
description = "Command-line tool that helps you summarize and pretty-print collaborators based on contributions";
homepage = "http://oleander.io/git-fame-rb";
license = licenses.mit;
maintainers = with maintainers; [
nicknovitski
matthiasbeyer
];
platforms = platforms.unix;
mainProgram = "git-fame";
};
}

View File

@@ -0,0 +1,98 @@
{
lib,
stdenv,
fetchFromGitHub,
gitMinimal,
mercurial,
makeWrapper,
nix-update-script,
fetchpatch,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "fast-export";
version = "231118";
src = fetchFromGitHub {
owner = "frej";
repo = "fast-export";
rev = "v${finalAttrs.version}";
hash = "sha256-JUy0t2yzd4bI7WPGG1E8L1topLfR5leV/WTU+u0bCyM=";
};
patches = [
(fetchpatch {
url = "https://github.com/frej/fast-export/commit/a3d0562737e1e711659e03264e45cb47a5a2f46d.patch?full_index=1";
hash = "sha256-vZOHnb5lXO22ElCK4oWQKCcPIqRyZV5axWfZqa84V1Y=";
})
];
nativeBuildInputs = [
gitMinimal
makeWrapper
];
buildInputs = [
mercurial.python
mercurial
];
installPhase = ''
binPath=$out/bin
libexecPath=$out/libexec/fast-export
sitepackagesPath=$out/${mercurial.python.sitePackages}
mkdir -p $binPath $libexecPath $sitepackagesPath
# Patch shell scripts so they can execute the Python scripts
sed -i "s|ROOT=.*|ROOT=$libexecPath|" *.sh
mv hg-fast-export.sh hg-reset.sh $binPath
mv hg-fast-export.py hg-reset.py $libexecPath
mv hg2git.py pluginloader plugins $sitepackagesPath
for script in $out/bin/*.sh; do
wrapProgram $script \
--prefix PATH : "${gitMinimal}/bin":"${mercurial.python}/bin":$libexec \
--prefix PYTHONPATH : "${mercurial}/${mercurial.python.sitePackages}":$sitepackagesPath
done
'';
doInstallCheck = true;
# deliberately not adding git or hg into nativeInstallCheckInputs - package should
# be able to work without them in runtime env
nativeCheckInputs = [
gitMinimal
mercurial
];
installCheckPhase = ''
mkdir repo-hg
pushd repo-hg
hg init
echo foo > bar
hg add bar
hg commit --message "baz"
popd
mkdir repo-git
pushd repo-git
git init
git config core.ignoreCase false # for darwin
$out/bin/hg-fast-export.sh -r ../repo-hg/ --hg-hash
for s in "foo" "bar" "baz" ; do
(git show | grep $s > /dev/null) && echo $s found
done
popd
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Import mercurial into git";
homepage = "https://repo.or.cz/w/fast-export.git";
license = lib.licenses.gpl2;
maintainers = [ lib.maintainers.koral ];
platforms = lib.platforms.unix;
mainProgram = "hg-fast-export.sh";
};
})

View File

@@ -0,0 +1,35 @@
{
lib,
stdenv,
fetchFromGitHub,
}:
stdenv.mkDerivation {
pname = "git-fire";
version = "unstable-2017-08-27";
src = fetchFromGitHub {
owner = "qw3rtman";
repo = "git-fire";
rev = "d72b68ed356f726c77c60294f9220275f16c9931";
sha256 = "1hdwkhyjjx31y0lpjkhbb4f5y9f7g70fnd4c2246cmk2rbsvj5b2";
};
installPhase = ''
install -D -m755 $src/git-fire $out/bin/git-fire
'';
meta = with lib; {
description = ''
Push ALL changes in a git repository
'';
longDescription = ''
In the event of an emergency (fire, etc.), automatically commit all changes/files in a repository, pushing to all known remotes all commits and stashes.
'';
homepage = "https://github.com/qw3rtman/git-fire";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ swflint ];
mainProgram = "git-fire";
};
}

View File

@@ -0,0 +1,61 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
makeWrapper,
git,
coreutils,
gnused,
gnugrep,
nix-update-script,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "git-fixup";
version = "1.6.1";
src = fetchFromGitHub {
owner = "keis";
repo = "git-fixup";
rev = "v${finalAttrs.version}";
hash = "sha256-Mue2xgYxJSEu0VoDmB7rnoSuzyT038xzETUO1fwptrs=";
};
nativeBuildInputs = [ makeWrapper ];
dontBuild = true;
makeFlags = [
"DESTDIR=${placeholder "out"}"
"PREFIX="
];
installFlags = [
"install"
"install-fish"
"install-zsh"
];
postInstall = ''
wrapProgram $out/bin/git-fixup \
--prefix PATH : "${
lib.makeBinPath [
git
coreutils
gnused
gnugrep
]
}"
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Fighting the copy-paste element of your rebase workflow";
homepage = "https://github.com/keis/git-fixup";
license = lib.licenses.isc;
maintainers = with lib.maintainers; [ michaeladler ];
platforms = lib.platforms.all;
mainProgram = "git-fixup";
};
})

View File

@@ -0,0 +1,104 @@
{
lib,
resholve,
fetchFromGitHub,
fetchpatch,
bash,
coreutils,
git,
gnugrep,
gawk,
curl,
hostname,
gnused,
findutils,
lftp,
pandoc,
man,
}:
resholve.mkDerivation rec {
pname = "git-ftp";
version = "1.6.0";
src = fetchFromGitHub {
owner = "git-ftp";
repo = "git-ftp";
rev = version;
sha256 = "1hxkqf7jbrx24q18yxpnd3dxzh4xk6asymwkylp1x7zg6mcci87d";
};
dontBuild = true;
# fix bug/typo; PRed upstream @
# https://github.com/git-ftp/git-ftp/pull/628
patches = [
(fetchpatch {
name = "fix-function-invocation-typo.patch";
url = "https://github.com/git-ftp/git-ftp/commit/cddf7cbba80e710758f6aac0ec0d77552ea8cd75.patch";
sha256 = "sha256-2B0QaMJi78Bg3bA1jp41aiyql1/LCryoaDs7+xmS1HY=";
})
];
installPhase = ''
make install-all prefix=$out
'';
nativeBuildInputs = [
pandoc
man
];
solutions = {
git-ftp = {
scripts = [ "bin/git-ftp" ];
interpreter = "${bash}/bin/bash";
inputs = [
coreutils
git
gnugrep
gawk
curl
hostname
gnused
findutils
lftp
];
fake = {
# don't resolve impure system macOS security
# caution: will still be fragile if PATH is bad
# TODO: fixable once we figure out how to handle
# this entire class of problem...
"external" = [ "security" ];
};
keep = {
# looks like run-time user/env/git-config controlled
"$GIT_PAGER" = true;
"$hook" = true; # presumably git hooks given context
};
execer = [
# TODO: rm when binlore/resholve handle git; manually
# checked and see no obvious subexec for now
"cannot:${git}/bin/git"
/*
Mild uncertainty here. There *are* commandlikes in
the arguments (especially wait & cd), but I think they are
fine as-is, because I'm reading them as:
1. ftp commands
2. running on the remote anyways
See https://github.com/git-ftp/git-ftp/blob/057f7d8e9f00ffc5a8c6ceaa4be30af2939df41a/git-ftp#L1214-L1221
*/
"cannot:${lftp}/bin/lftp"
];
};
};
meta = with lib; {
description = "Git powered FTP client written as shell script";
homepage = "https://git-ftp.github.io/";
license = licenses.gpl3;
maintainers = with maintainers; [ tweber ];
platforms = platforms.unix;
mainProgram = "git-ftp";
};
}

View File

@@ -0,0 +1,67 @@
{
lib,
rustPlatform,
fetchFromGitLab,
gitMinimal,
installShellFiles,
makeWrapper,
nix-update-script,
}:
let
version = "2.11.0";
src = fetchFromGitLab {
owner = "pinage404";
repo = "git-gamble";
rev = "version/${version}";
hash = "sha256-b7jGrt8uJ9arH4EEsOOPCIcQmhwrrJb8uXcSsZPFrNQ=";
};
in
rustPlatform.buildRustPackage {
pname = "git-gamble";
inherit version src;
cargoHash = "sha256-lf66me4ot5lvrz2JTj8MreaHyVwOcFSVfPGX9lBTKug=";
nativeCheckInputs = [ gitMinimal ];
preCheck = ''
patchShebangs tests/editor/fake_editor.sh
'';
checkFlags = [
# this test can be flaky ; help is needed to stabilize it in upstream
"--skip=git_time_keeper::white_box::lock_file::create_as_many_as_lock_files_when_starting_several_times"
];
nativeBuildInputs = [
installShellFiles
makeWrapper
];
postInstall = ''
wrapProgram $out/bin/git-gamble \
--prefix PATH : "${lib.makeBinPath [ gitMinimal ]}"
export PATH="$PATH:$out/bin/"
sh ./script/generate_completion.sh target/release/shell_completions/
installShellCompletion --cmd git-gamble \
--bash target/release/shell_completions/git-gamble.bash \
--fish target/release/shell_completions/git-gamble.fish \
--zsh target/release/shell_completions/_git-gamble
sh ./script/usage.sh > git-gamble.1
installManPage git-gamble.1
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Tool that blends TDD (Test Driven Development) + TCR (`test && commit || revert`)";
homepage = "https://git-gamble.is-cool.dev";
changelog = "https://gitlab.com/pinage404/git-gamble/-/blob/${src.rev}/CHANGELOG.md";
license = lib.licenses.isc;
sourceProvenance = [ lib.sourceTypes.fromSource ];
maintainers = [ lib.maintainers.pinage404 ];
mainProgram = "git-gamble";
};
}

View File

@@ -0,0 +1,61 @@
{
lib,
fetchFromGitHub,
buildGoModule,
nix-update-script,
}:
let
config-module = "git-get/pkg/cfg";
in
buildGoModule rec {
pname = "git-get";
version = "0.6.1";
src = fetchFromGitHub {
owner = "grdl";
repo = "git-get";
tag = "v${version}";
hash = "sha256-xnmFqNIabiTyf9ZPKlm5S42rfFUXnTp/jLDDY51eoMw=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
postFetch = ''
git -C $out rev-parse HEAD > $out/COMMIT
# in format of 0000-00-00T00:00:00Z
date -u -d "@$(git -C $out log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
find "$out" -name .git -print0 | xargs -0 rm -rf
'';
};
vendorHash = "sha256-8DLS1pSyh1OgnULMvAppl/+D2yfyi/dcZs08S1IMzaE=";
doCheck = false;
# ldflags based on metadata from git and source
preBuild = ''
ldflags+=" -X ${config-module}.commit=$(cat COMMIT)"
ldflags+=" -X ${config-module}.date=$(cat SOURCE_DATE_EPOCH)"
'';
ldflags = [
"-s"
"-w"
"-X ${config-module}.version=v${version}"
];
preInstall = ''
mv "$GOPATH/bin/cmd" "$GOPATH/bin/git-get"
ln -s ./git-get "$GOPATH/bin/git-list"
'';
passthru.updateScript = nix-update-script { };
meta = with lib; {
description = "Better way to clone, organize and manage multiple git repositories";
homepage = "https://github.com/grdl/git-get";
license = licenses.mit;
maintainers = with maintainers; [ sumnerevans ];
mainProgram = "git-get";
};
}

View File

@@ -0,0 +1,52 @@
{
lib,
fetchFromGitHub,
rustPlatform,
installShellFiles,
asciidoctor,
}:
rustPlatform.buildRustPackage rec {
pname = "git-gone";
version = "1.2.5";
src = fetchFromGitHub {
owner = "swsnr";
repo = "git-gone";
tag = "v${version}";
hash = "sha256-4BhFombZCmv/GNG2OcNlWNKTk2h65yKn1ku734gCBCQ=";
};
# remove if updating to rust 1.85
postPatch = ''
substituteInPlace Cargo.toml \
--replace-fail "[package]" ''$'cargo-features = ["edition2024"]\n[package]'
'';
cargoHash = "sha256-VjnnrVN+uST99paImI1uNj34CNozid7ZiPslJqvmKCs=";
# remove if updating to rust 1.85
env.RUSTC_BOOTSTRAP = 1;
nativeBuildInputs = [
installShellFiles
asciidoctor
];
postInstall = ''
asciidoctor --backend=manpage git-gone.1.adoc -o git-gone.1
installManPage git-gone.1
'';
meta = {
description = "Cleanup stale Git branches of merge requests";
homepage = "https://github.com/swsnr/git-gone";
changelog = "https://github.com/swsnr/git-gone/raw/v${version}/CHANGELOG.md";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
cafkafk
matthiasbeyer
];
mainProgram = "git-gone";
};
}

View File

@@ -0,0 +1,66 @@
{
lib,
stdenv,
buildPackages,
fetchFromGitHub,
rustPlatform,
installShellFiles,
libiconv,
nix-update-script,
pkg-config,
openssl,
}:
let
canRunGitGr = stdenv.hostPlatform.emulatorAvailable buildPackages;
gitGr = "${stdenv.hostPlatform.emulator buildPackages} $out/bin/git-gr";
pname = "git-gr";
version = "1.4.3";
in
rustPlatform.buildRustPackage {
inherit pname version;
src = fetchFromGitHub {
owner = "9999years";
repo = "git-gr";
tag = "v${version}";
hash = "sha256-t308Ep27iRvRHSdvVMOrRGVoajBtnTutHAkKbZkO7Wg=";
};
buildFeatures = [ "clap_mangen" ];
cargoHash = "sha256-5YHE1NVUcZ5NeOl3Z87l3PVsmlkswhnT83Oi9loJjdM=";
OPENSSL_NO_VENDOR = true;
nativeBuildInputs = [ installShellFiles ] ++ lib.optional stdenv.hostPlatform.isLinux pkg-config;
buildInputs =
lib.optional stdenv.hostPlatform.isLinux openssl
++ lib.optionals stdenv.hostPlatform.isDarwin [
libiconv
];
postInstall = lib.optionalString canRunGitGr ''
manpages=$(mktemp -d)
${gitGr} manpages "$manpages"
for manpage in "$manpages"/*; do
installManPage "$manpage"
done
installShellCompletion --cmd git-gr \
--bash <(${gitGr} completions bash) \
--fish <(${gitGr} completions fish) \
--zsh <(${gitGr} completions zsh)
'';
meta = {
homepage = "https://github.com/9999years/git-gr";
changelog = "https://github.com/9999years/git-gr/releases/tag/v${version}";
description = "Gerrit CLI client";
license = [ lib.licenses.mit ];
maintainers = [ lib.maintainers._9999years ];
mainProgram = "git-gr";
};
passthru.updateScript = nix-update-script { };
}

View File

@@ -0,0 +1,32 @@
{
lib,
rustPlatform,
fetchFromGitHub,
stdenv,
}:
rustPlatform.buildRustPackage rec {
pname = "git-graph";
version = "0.6.0";
src = fetchFromGitHub {
owner = "mlange-42";
repo = "git-graph";
tag = version;
hash = "sha256-xYUpLujePO1MS0c25UJX5rRdmPzkaFgF5zJonzQOJqM=";
};
cargoHash = "sha256-tN70YyhVkLD5OiYNm64vbY5NtKAG2sFp4Ry6vFpXvtE=";
meta = with lib; {
description = "Command line tool to show clear git graphs arranged for your branching model";
homepage = "https://github.com/mlange-42/git-graph";
license = licenses.mit;
broken = stdenv.hostPlatform.isDarwin;
maintainers = with maintainers; [
cafkafk
matthiasbeyer
];
mainProgram = "git-graph";
};
}

View File

@@ -0,0 +1,44 @@
{
buildGoModule,
fetchFromGitHub,
fetchpatch,
lib,
}:
buildGoModule rec {
pname = "git-hound";
version = "1.7.2";
src = fetchFromGitHub {
owner = "tillson";
repo = "git-hound";
rev = "v${version}";
hash = "sha256-W+rYDyRIw4jWWO4UZkUHFq/D/7ZXM+y5vdbclk6S0ro=";
};
patches = [
# https://github.com/tillson/git-hound/pull/66
(fetchpatch {
url = "https://github.com/tillson/git-hound/commit/cd8aa19401cfdec9e4d76c1f6eb4d85928ec4b03.patch";
hash = "sha256-EkdR2KkxxlMLNtKFGpxsQ/msJT5NcMF7irIUcU2WWJY=";
})
];
# tests fail outside of nix
doCheck = false;
vendorHash = "sha256-8teIa083oMXm0SjzMP+mGOVAel1Hbsp3TSMhdvqVbQs=";
meta = with lib; {
description = "Reconnaissance tool for GitHub code search";
longDescription = ''
GitHound pinpoints exposed API keys and other sensitive information
across all of GitHub using pattern matching, commit history searching,
and a unique result scoring system.
'';
homepage = "https://github.com/tillson/git-hound";
license = with licenses; [ mit ];
maintainers = with maintainers; [ fab ];
mainProgram = "git-hound";
};
}

View File

@@ -0,0 +1,53 @@
{
lib,
stdenv,
fetchFromGitHub,
gitMinimal,
docutils,
}:
stdenv.mkDerivation rec {
pname = "git-hub";
version = "2.1.3";
src = fetchFromGitHub {
owner = "sociomantic-tsunami";
repo = "git-hub";
rev = "v${version}";
sha256 = "sha256-fb/WDmBx1Vayu4fLeG+D1nmHJJawgIAAXcQsABsenBo=";
};
nativeBuildInputs = [
gitMinimal # Used during build to generate Bash completion.
docutils
];
postPatch = ''
patchShebangs .
'';
enableParallelBuilding = true;
installFlags = [
"prefix=$(out)"
"sysconfdir=$(out)/etc"
];
postInstall = ''
# Remove inert ftdetect vim plugin and a README that's a man page subset:
rm -r $out/share/{doc,vim}
'';
meta = with lib; {
inherit (src.meta) homepage;
description = "Git command line interface to GitHub";
longDescription = ''
A simple command line interface to GitHub, enabling most useful GitHub
tasks (like creating and listing pull request or issues) to be accessed
directly through the Git command line.
'';
license = licenses.gpl3Plus;
platforms = platforms.all;
mainProgram = "git-hub";
};
}

View File

@@ -0,0 +1,52 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
installShellFiles,
ronn,
nix-update-script,
}:
stdenvNoCC.mkDerivation rec {
pname = "git-identity";
version = "1.1.1";
src = fetchFromGitHub {
owner = "madx";
repo = "git-identity";
tag = "v${version}";
hash = "sha256-u4lIW0bntaKrVUwodXZ8ZwWxSZtLuhVSUAbIj8jjcLw=";
};
nativeBuildInputs = [
installShellFiles
ronn
];
buildPhase = ''
runHook preBuild
ronn --roff git-identity.1.ronn
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp git-identity $out/bin/git-identity
installManPage git-identity.1
installShellCompletion --cmd git-identity \
--bash git-identity.bash-completion \
--zsh git-identity.zsh-completion
runHook postInstall
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Manage your identity in Git";
mainProgram = "git-identity";
homepage = "https://github.com/madx/git-identity";
license = lib.licenses.wtfpl;
maintainers = with lib.maintainers; [ mynacol ];
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,50 @@
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
libgit2,
oniguruma,
zlib,
nix-update-script,
}:
let
pname = "git-igitt";
version = "0.1.18";
in
rustPlatform.buildRustPackage {
inherit pname version;
src = fetchFromGitHub {
owner = "mlange-42";
repo = "git-igitt";
rev = version;
hash = "sha256-JXEWnekL9Mtw0S3rI5aeO1HB9kJ7bRJDJ6EJ4ATlFeQ=";
};
cargoHash = "sha256-ndxxkYMFHAX6uourCyUpvJYcZCXQ5X2CMX4jTJmNRiQ=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [
libgit2
oniguruma
zlib
];
env = {
RUSTONIG_SYSTEM_LIBONIG = true;
};
passthru.updateScript = nix-update-script { };
meta = {
description = "Interactive, cross-platform Git terminal application with clear git graphs arranged for your branching model";
homepage = "https://github.com/mlange-42/git-igitt";
license = lib.licenses.mit;
sourceProvenance = [ lib.sourceTypes.fromSource ];
maintainers = [ lib.maintainers.pinage404 ];
mainProgram = "git-igitt";
};
}

View File

@@ -0,0 +1,39 @@
{
lib,
rustPlatform,
fetchFromGitHub,
installShellFiles,
}:
rustPlatform.buildRustPackage rec {
pname = "git-ignore";
version = "1.4.0";
src = fetchFromGitHub {
owner = "sondr3";
repo = "git-ignore";
rev = "v${version}";
hash = "sha256-KIdhsbD9v2kCM2C/kSJCleyniEz4Bw7UxBsF762fnJs=";
};
cargoHash = "sha256-Zdy6bUgpaDBiAavSlAAH7LyYbNm7UU1qz0wAnVXQzpY=";
nativeBuildInputs = [
installShellFiles
];
postInstall = ''
assets=$releaseDir/../assets
installManPage $assets/git-ignore.1
installShellCompletion $assets/git-ignore.{bash,fish} --zsh $assets/_git-ignore
'';
meta = with lib; {
description = "Quickly and easily fetch .gitignore templates from gitignore.io";
homepage = "https://github.com/sondr3/git-ignore";
changelog = "https://github.com/sondr3/git-ignore/blob/${src.rev}/CHANGELOG.md";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ figsoda ];
mainProgram = "git-ignore";
};
}

View File

@@ -0,0 +1,31 @@
{
lib,
python3Packages,
fetchPypi,
installShellFiles,
}:
python3Packages.buildPythonApplication rec {
pname = "git-imerge";
version = "1.2.0";
format = "setuptools";
src = fetchPypi {
inherit pname version;
sha256 = "df5818f40164b916eb089a004a47e5b8febae2b4471a827e3aaa4ebec3831a3f";
};
nativeBuildInputs = [ installShellFiles ];
postInstall = ''
installShellCompletion --bash completions/git-imerge
'';
meta = {
homepage = "https://github.com/mhagger/git-imerge";
description = "Perform a merge between two branches incrementally";
license = lib.licenses.gpl2Plus;
maintainers = [ ];
mainProgram = "git-imerge";
};
}

View File

@@ -0,0 +1,48 @@
{
git,
lib,
libgit2,
rustPlatform,
stdenv,
fetchFromGitHub,
}:
let
inherit (lib)
licenses
maintainers
;
version = "0.2.7";
in
rustPlatform.buildRustPackage {
pname = "git-instafix";
inherit version;
src = fetchFromGitHub {
owner = "quodlibetor";
repo = "git-instafix";
rev = "v${version}";
hash = "sha256-Uz+KQ8cQT3v97EtmbAv2II30dUrFD0hMo/GhnqcdBOs=";
};
cargoHash = "sha256-B0XTk0KxA60AuaS6eO3zF/eA/cTcLwA31ipG4VjvO8Q=";
buildInputs = [ libgit2 ];
nativeCheckInputs = [ git ];
meta = {
description = "Quickly fix up an old commit using your currently-staged changes";
mainProgram = "git-instafix";
homepage = "https://github.com/quodlibetor/git-instafix";
license = with licenses; [
mit
asl20
];
maintainers = with maintainers; [
mightyiam
quodlibetor
];
changelog = "https://github.com/quodlibetor/git-instafix/releases/tag/v${version}";
broken = stdenv.hostPlatform.isDarwin;
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
fetchFromGitHub,
rustPlatform,
}:
rustPlatform.buildRustPackage rec {
pname = "git-interactive-rebase-tool";
version = "2.4.1";
src = fetchFromGitHub {
owner = "MitMaro";
repo = "git-interactive-rebase-tool";
rev = version;
hash = "sha256-NlnESZua4OP7rhMoER/VgBST9THqISQ0LCG1ZakNTqs=";
};
cargoHash = "sha256-WTg1o2iF5/UOVIqKFqGbC28B4HrKJWM0+XCHgaA1lc4=";
# Compilation during tests fails if this env var is not set.
preCheck = "export GIRT_BUILD_GIT_HASH=${version}";
postCheck = "unset GIRT_BUILD_GIT_HASH";
meta = {
homepage = "https://github.com/MitMaro/git-interactive-rebase-tool";
description = "Native cross platform full feature terminal based sequence editor for git interactive rebase";
changelog = "https://github.com/MitMaro/git-interactive-rebase-tool/releases/tag/${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
SuperSandro2000
zowoq
ma27
];
mainProgram = "interactive-rebase-tool";
};
}

View File

@@ -0,0 +1,34 @@
{
fetchFromGitHub,
lib,
buildNpmPackage,
}:
buildNpmPackage (finalAttrs: {
pname = "git-jump";
version = "0.3.1";
src = fetchFromGitHub {
owner = "mykolaharmash";
repo = "git-jump";
tag = "v${finalAttrs.version}";
hash = "sha256-0jX7IiYWLgzjZDEc4lXylqkHqawgnOKI4I9ShzlC+8U=";
};
npmDepsHash = "sha256-9f3Ws2V6li+u6qVMD3J6IHSNvG5TGvj0XfAZArgIi1w=";
postInstall = ''
installManPage git-jump.1
'';
preFixup = ''
rm $out/lib/node_modules/git-jump/node_modules/.bin/{tsc,tsserver}
'';
meta = {
description = "Improved navigation between Git branches";
homepage = "https://github.com/mykolaharmash/git-jump";
license = lib.licenses.mit;
mainProgram = "git-jump";
maintainers = with lib.maintainers; [ juliusfreudenberger ];
};
})

View File

@@ -0,0 +1,49 @@
{
lib,
stdenv,
fetchFromGitLab,
git,
bash,
}:
stdenv.mkDerivation rec {
version = "1.6.0";
pname = "git-latexdiff";
src = fetchFromGitLab {
hash = "sha256-DMoGEbCBuqUGjbna3yDpD4WNTikPudYRD4Wy1pPG2mw=";
rev = version;
repo = "git-latexdiff";
owner = "git-latexdiff";
};
buildInputs = [
git
bash
];
dontBuild = true;
patches = [ ./version-test.patch ];
postPatch = ''
substituteInPlace git-latexdiff \
--replace "@GIT_LATEXDIFF_VERSION@" "v${version}"
patchShebangs git-latexdiff
'';
installPhase = ''
mkdir -p $prefix/bin
mv git-latexdiff $prefix/bin
chmod +x $prefix/bin/git-latexdiff
'';
meta = with lib; {
description = "View diff on LaTeX source files on the generated PDF files";
homepage = "https://gitlab.com/git-latexdiff/git-latexdiff";
maintainers = [ ];
license = licenses.bsd3; # https://gitlab.com/git-latexdiff/git-latexdiff/issues/9
platforms = platforms.unix;
mainProgram = "git-latexdiff";
};
}

View File

@@ -0,0 +1,17 @@
Fix for https://gitlab.com/git-latexdiff/git-latexdiff/issues/7
---
--- src/git-latexdiff 2016-01-26 14:04:54.338568955 +0100
+++ src/git-latexdiff 2016-01-26 14:40:23.700381943 +0100
@@ -44,11 +44,7 @@
git_latexdiff_version='@GIT_LATEXDIFF_VERSION@'
git_latexdiff_compute_version () {
- if [ "$git_latexdiff_version" = '@GIT_LATEXDIFF''_VERSION@' ]; then
- (cd "$(dirname "$0")" && git describe --tags HEAD 2>/dev/null || echo 'Unknown version')
- else
- echo "$git_latexdiff_version"
- fi
+ echo "$git_latexdiff_version"
}
usage () {

View File

@@ -0,0 +1,26 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule {
pname = "git-lfs-transfer";
version = "0.1.0-unstable-2024-10-07";
src = fetchFromGitHub {
owner = "charmbracelet";
repo = "git-lfs-transfer";
rev = "422d24414fe4b803849b3f6fe7c4d8ab1b40803b";
hash = "sha256-YsplPW3i4W1RfkWQI1eGXFXb3JofQwKe+9LbjxeL1cM=";
};
vendorHash = "sha256-1cGlhLdnU6yTqzcB3J1cq3gawncbtdgkb3LFh2ZmXbM=";
meta = {
description = "Server-side implementation of the Git LFS pure-SSH protocol";
mainProgram = "git-lfs-transfer";
homepage = "https://github.com/charmbracelet/git-lfs-transfer";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ chn ];
};
}

Some files were not shown because too many files have changed in this diff Show More