about summary refs log tree commit diff
path: root/pkgs/by-name/li
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/li')
-rw-r--r--pkgs/by-name/li/lib60870/package.nix6
-rw-r--r--pkgs/by-name/li/libation/package.nix2
-rw-r--r--pkgs/by-name/li/libburn/package.nix2
-rw-r--r--pkgs/by-name/li/libcamera/package.nix14
-rw-r--r--pkgs/by-name/li/libcpuid/package.nix2
-rw-r--r--pkgs/by-name/li/libedit/package.nix2
-rw-r--r--pkgs/by-name/li/libeduvpn-common/package.nix4
-rw-r--r--pkgs/by-name/li/libepubgen/package.nix2
-rw-r--r--pkgs/by-name/li/libetonyek/package.nix2
-rw-r--r--pkgs/by-name/li/libfmvoice/package.nix6
-rw-r--r--pkgs/by-name/li/libgff/package.nix2
-rw-r--r--pkgs/by-name/li/libiconv-darwin/0001-Support-static-module-loading.patch72
-rw-r--r--pkgs/by-name/li/libiconv-darwin/0002-Fix-ISO-2022-out-of-bounds-write-with-encoded-charac.patch43
-rw-r--r--pkgs/by-name/li/libiconv-darwin/meson.build82
-rw-r--r--pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c34
-rw-r--r--pkgs/by-name/li/libiconv-darwin/package.nix47
-rw-r--r--pkgs/by-name/li/libiconv-darwin/static-modules.gperf73
-rw-r--r--pkgs/by-name/li/libiconv-darwin/static-setup-hook.sh5
-rw-r--r--pkgs/by-name/li/libideviceactivation/package.nix2
-rw-r--r--pkgs/by-name/li/libiec61850/package.nix2
-rw-r--r--pkgs/by-name/li/libisofs/package.nix2
-rw-r--r--pkgs/by-name/li/libixion/package.nix2
-rw-r--r--pkgs/by-name/li/liblapin/package.nix2
-rw-r--r--pkgs/by-name/li/libmamba/package.nix2
-rw-r--r--pkgs/by-name/li/libmpd/package.nix47
-rw-r--r--pkgs/by-name/li/libopus/package.nix83
-rw-r--r--pkgs/by-name/li/libopus/test-timeout.patch9
-rw-r--r--pkgs/by-name/li/librum/package.nix2
-rw-r--r--pkgs/by-name/li/libscfg/package.nix2
-rw-r--r--pkgs/by-name/li/libsignal-ffi/package.nix2
-rw-r--r--pkgs/by-name/li/libstrophe/package.nix2
-rw-r--r--pkgs/by-name/li/libstudxml/package.nix38
-rw-r--r--pkgs/by-name/li/libui-ng/package.nix2
-rw-r--r--pkgs/by-name/li/libvibrant/package.nix2
-rw-r--r--pkgs/by-name/li/licensure/package.nix2
-rw-r--r--pkgs/by-name/li/lilipod/package.nix2
-rw-r--r--pkgs/by-name/li/lint-staged/package.nix6
-rw-r--r--pkgs/by-name/li/linux-scripts/package.nix64
-rw-r--r--pkgs/by-name/li/listmonk/package.nix2
-rw-r--r--pkgs/by-name/li/littlefs-fuse/package.nix2
-rw-r--r--pkgs/by-name/li/livi/package.nix2
41 files changed, 609 insertions, 72 deletions
diff --git a/pkgs/by-name/li/lib60870/package.nix b/pkgs/by-name/li/lib60870/package.nix
index f5c744e71098b..9d8e959b99137 100644
--- a/pkgs/by-name/li/lib60870/package.nix
+++ b/pkgs/by-name/li/lib60870/package.nix
@@ -17,12 +17,12 @@ stdenv.mkDerivation (finalAttrs: {
     hash = "sha256-9o+gWQbpCJb+UZzPNmzGqpWD0QbGjg41is/f1POUEQs=";
   };
 
+  sourceRoot = "${finalAttrs.src.name}/lib60870-C";
+
   separateDebugInfo = true;
 
   nativeBuildInputs = [ cmake ];
 
-  preConfigure = "cd lib60870-C";
-
   passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   meta = with lib; {
@@ -30,6 +30,6 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://libiec61850.com/";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ stv0g ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 })
diff --git a/pkgs/by-name/li/libation/package.nix b/pkgs/by-name/li/libation/package.nix
index 692de5d3d909a..4ee6e09f33bdc 100644
--- a/pkgs/by-name/li/libation/package.nix
+++ b/pkgs/by-name/li/libation/package.nix
@@ -88,7 +88,7 @@ buildDotnetModule rec {
 
   meta = {
     changelog = "https://github.com/rmcrackan/Libation/releases/tag/${src.rev}";
-    description = "An Audible audiobook manager";
+    description = "Audible audiobook manager";
     homepage = "https://github.com/rmcrackan/Libation";
     license = lib.licenses.gpl3Only;
     mainProgram = "libation";
diff --git a/pkgs/by-name/li/libburn/package.nix b/pkgs/by-name/li/libburn/package.nix
index 701a511dc9076..7085551c72388 100644
--- a/pkgs/by-name/li/libburn/package.nix
+++ b/pkgs/by-name/li/libburn/package.nix
@@ -28,7 +28,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     homepage = "https://dev.lovelyhq.com/libburnia/web/wiki";
-    description = "A library by which preformatted data get onto optical media: CD, DVD, BD (Blu-Ray)";
+    description = "Library by which preformatted data get onto optical media: CD, DVD, BD (Blu-Ray)";
     changelog = "https://dev.lovelyhq.com/libburnia/libburn/src/tag/${finalAttrs.src.rev}/ChangeLog";
     license = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ abbradar AndersonTorres ];
diff --git a/pkgs/by-name/li/libcamera/package.nix b/pkgs/by-name/li/libcamera/package.nix
index 8bf654f209037..c122f840df32e 100644
--- a/pkgs/by-name/li/libcamera/package.nix
+++ b/pkgs/by-name/li/libcamera/package.nix
@@ -9,7 +9,6 @@
 , libdrm
 , libevent
 , libyaml
-, lttng-ust
 , gst_all_1
 , gtest
 , graphviz
@@ -17,6 +16,8 @@
 , python3
 , python3Packages
 , systemd # for libudev
+, withTracing ? lib.meta.availableOn stdenv.hostPlatform lttng-ust
+, lttng-ust # withTracing
 , withQcam ? false
 , qt5 # withQcam
 , libtiff # withQcam
@@ -67,14 +68,12 @@ stdenv.mkDerivation rec {
     # hotplugging
     systemd
 
-    # lttng tracing
-    lttng-ust
-
     # yamlparser
     libyaml
 
     gtest
-  ] ++ lib.optionals withQcam [ libtiff qt5.qtbase qt5.qttools ];
+  ] ++ lib.optionals withTracing [ lttng-ust ]
+    ++ lib.optionals withQcam [ libtiff qt5.qtbase qt5.qttools ];
 
   nativeBuildInputs = [
     meson
@@ -92,7 +91,8 @@ stdenv.mkDerivation rec {
 
   mesonFlags = [
     "-Dv4l2=true"
-    "-Dqcam=${if withQcam then "enabled" else "disabled"}"
+    (lib.mesonEnable "tracing" withTracing)
+    (lib.mesonEnable "qcam" withQcam)
     "-Dlc-compliance=disabled" # tries unconditionally to download gtest when enabled
     # Avoid blanket -Werror to evade build failures on less
     # tested compilers.
@@ -110,7 +110,7 @@ stdenv.mkDerivation rec {
   FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ ]; };
 
   meta = with lib; {
-    description = "An open source camera stack and framework for Linux, Android, and ChromeOS";
+    description = "Open source camera stack and framework for Linux, Android, and ChromeOS";
     homepage = "https://libcamera.org";
     license = licenses.lgpl2Plus;
     maintainers = with maintainers; [ citadelcore ];
diff --git a/pkgs/by-name/li/libcpuid/package.nix b/pkgs/by-name/li/libcpuid/package.nix
index 6cbc2c689cab8..8378a804fdcf0 100644
--- a/pkgs/by-name/li/libcpuid/package.nix
+++ b/pkgs/by-name/li/libcpuid/package.nix
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://libcpuid.sourceforge.net/";
-    description = "A small C library for x86 CPU detection and feature extraction";
+    description = "Small C library for x86 CPU detection and feature extraction";
     mainProgram = "cpuid_tool";
     changelog = "https://raw.githubusercontent.com/anrieff/libcpuid/master/ChangeLog";
     license = licenses.bsd2;
diff --git a/pkgs/by-name/li/libedit/package.nix b/pkgs/by-name/li/libedit/package.nix
index aeb79811d6e78..eb228ae3217bd 100644
--- a/pkgs/by-name/li/libedit/package.nix
+++ b/pkgs/by-name/li/libedit/package.nix
@@ -42,7 +42,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     homepage = "http://www.thrysoee.dk/editline/";
-    description = "A port of the NetBSD Editline library (libedit)";
+    description = "Port of the NetBSD Editline library (libedit)";
     longDescription = ''
        This is an autotool- and libtoolized port of the NetBSD Editline library
        (libedit). This Berkeley-style licensed command line editor library
diff --git a/pkgs/by-name/li/libeduvpn-common/package.nix b/pkgs/by-name/li/libeduvpn-common/package.nix
index cafe417348cb3..a0b559fa31e7a 100644
--- a/pkgs/by-name/li/libeduvpn-common/package.nix
+++ b/pkgs/by-name/li/libeduvpn-common/package.nix
@@ -5,11 +5,11 @@
 
 buildGoModule rec {
   pname = "libeduvpn-common";
-  version = "1.2.1";
+  version = "2.0.1";
 
   src = fetchurl {
     url = "https://github.com/eduvpn/eduvpn-common/releases/download/${version}/eduvpn-common-${version}.tar.xz";
-    hash = "sha256-MCMbOVDx9nQwTLH8EjCFD2T6mFwwFX8Jvae8PIrstvU=";
+    hash = "sha256-hTF9CSqU9c0+TOK+/oRGjY1fBCKpisiiTJnWZqcdvjA=";
   };
 
   vendorHash = null;
diff --git a/pkgs/by-name/li/libepubgen/package.nix b/pkgs/by-name/li/libepubgen/package.nix
index 906642f140293..ec0901ec43855 100644
--- a/pkgs/by-name/li/libepubgen/package.nix
+++ b/pkgs/by-name/li/libepubgen/package.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = with lib; {
-    description = "An EPUB generator for librevenge";
+    description = "EPUB generator for librevenge";
     homepage = "https://sourceforge.net/projects/libepubgen/";
     license = licenses.mpl20;
     maintainers = [ ];
diff --git a/pkgs/by-name/li/libetonyek/package.nix b/pkgs/by-name/li/libetonyek/package.nix
index 4d0811ace7ba7..8ff8349b9d400 100644
--- a/pkgs/by-name/li/libetonyek/package.nix
+++ b/pkgs/by-name/li/libetonyek/package.nix
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
   configureFlags = ["--with-mdds=2.1"];
 
   meta = with lib; {
-    description = "A library and a set of tools for reading and converting Apple iWork documents (Keynote, Pages and Numbers).";
+    description = "Library and a set of tools for reading and converting Apple iWork documents (Keynote, Pages and Numbers)";
     homepage = "https://github.com/LibreOffice/libetonyek";
     changelog = "https://github.com/LibreOffice/libetonyek/blob/${src.rev}/NEWS";
     license = licenses.mpl20;
diff --git a/pkgs/by-name/li/libfmvoice/package.nix b/pkgs/by-name/li/libfmvoice/package.nix
index 294b9c34c6b42..cccc2f512e547 100644
--- a/pkgs/by-name/li/libfmvoice/package.nix
+++ b/pkgs/by-name/li/libfmvoice/package.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "libfmvoice";
-  version = "0-unstable-2024-05-30";
+  version = "0-unstable-2024-06-06";
 
   src = fetchFromGitHub {
     owner = "vampirefrog";
     repo = "libfmvoice";
-    rev = "0e58cfb323dc6461c705a5fadac4362a17fbec4e";
-    hash = "sha256-HyGB180roo28vJ+11/ocoKu1kHpn6GxtEg9NluQsECg=";
+    rev = "cd89a6a386b3b17c74b1caca11e297b2748cf90d";
+    hash = "sha256-yak+pKxkrKOX/qgtwpldjd85deE/JB040bVjDD1mo7A=";
   };
 
   strictDeps = true;
diff --git a/pkgs/by-name/li/libgff/package.nix b/pkgs/by-name/li/libgff/package.nix
index fe3473f2e4df8..fc81cd0927776 100644
--- a/pkgs/by-name/li/libgff/package.nix
+++ b/pkgs/by-name/li/libgff/package.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation (finalAttrs: {
   nativeBuildInputs = [ cmake ];
 
   meta = {
-    description = "A lightweight GTF/GFF parsers exposing a C++ interface";
+    description = "Lightweight GTF/GFF parsers exposing a C++ interface";
     homepage = "https://github.com/COMBINE-lab/libgff";
     downloadPage = "https://github.com/COMBINE-lab/libgff/releases";
     changelog = "https://github.com/COMBINE-lab/libgff/releases/tag/" +
diff --git a/pkgs/by-name/li/libiconv-darwin/0001-Support-static-module-loading.patch b/pkgs/by-name/li/libiconv-darwin/0001-Support-static-module-loading.patch
new file mode 100644
index 0000000000000..691b483b27efe
--- /dev/null
+++ b/pkgs/by-name/li/libiconv-darwin/0001-Support-static-module-loading.patch
@@ -0,0 +1,72 @@
+From a3e945c630180e9aa182603207238302e58fe8fe Mon Sep 17 00:00:00 2001
+From: Randy Eckenrode <randy@largeandhighquality.com>
+Date: Sat, 25 May 2024 19:03:58 -0400
+Subject: [PATCH 1/2] Support static module loading
+
+---
+ citrus/citrus_module.c | 21 ++++++++++++++++++---
+ 1 file changed, 18 insertions(+), 3 deletions(-)
+
+diff --git a/citrus/citrus_module.c b/citrus/citrus_module.c
+index 5103d30..c22c9da 100644
+--- a/citrus/citrus_module.c
++++ b/citrus/citrus_module.c
+@@ -324,22 +324,36 @@ out:
+ 	return (path[0] ? path : NULL);
+ }
+ 
++#if defined(ENABLE_STATIC)
++#include "static-modules.h"
++#endif
++
+ void *
+ _citrus_find_getops(_citrus_module_t handle, const char *modname,
+     const char *ifname)
+ {
+ 	char name[PATH_MAX];
+ 	void *p;
+-
++#if defined(ENABLE_STATIC)
++	const struct getops_pair* res = lookup_getops(modname, strlen(modname));
++	p = res ? res->opsfn : NULL;
++#else
+ 	snprintf(name, sizeof(name), "_citrus_%s_%s_getops",
+ 	    modname, ifname);
+ 	p = dlsym((void *)handle, name);
++#endif
+ 	return (p);
+ }
+ 
+ int
+ _citrus_load_module(_citrus_module_t *rhandle, const char *encname)
+ {
++#if defined(ENABLE_STATIC)
++	if (is_known_encoding(encname, strnlen(encname, MAX_WORD_LENGTH)) > MAX_HASH_VALUE) {
++		return (EINVAL);
++	}
++	*rhandle = (_citrus_module_t)encodings;
++#else
+ 	const char *p;
+ 	char path[PATH_MAX];
+ 	void *handle;
+@@ -368,14 +382,15 @@ _citrus_load_module(_citrus_module_t *rhandle, const char *encname)
+ 	}
+ 
+ 	*rhandle = (_citrus_module_t)handle;
+-
++#endif
+ 	return (0);
+ }
+ 
+ void
+ _citrus_unload_module(_citrus_module_t handle)
+ {
+-
++#if !defined(ENABLE_STATIC)
+ 	if (handle)
+ 		dlclose((void *)handle);
++#endif
+ }
+-- 
+2.44.1
+
diff --git a/pkgs/by-name/li/libiconv-darwin/0002-Fix-ISO-2022-out-of-bounds-write-with-encoded-charac.patch b/pkgs/by-name/li/libiconv-darwin/0002-Fix-ISO-2022-out-of-bounds-write-with-encoded-charac.patch
new file mode 100644
index 0000000000000..e6bce71abd938
--- /dev/null
+++ b/pkgs/by-name/li/libiconv-darwin/0002-Fix-ISO-2022-out-of-bounds-write-with-encoded-charac.patch
@@ -0,0 +1,43 @@
+From 6a2c81d23558d19a68d5494f8f8618bd55c89405 Mon Sep 17 00:00:00 2001
+From: Randy Eckenrode <randy@largeandhighquality.com>
+Date: Mon, 27 May 2024 13:43:43 -0400
+Subject: [PATCH 2/2] Fix ISO-2022 out-of-bounds write with encoded characters
+
+---
+ libiconv_modules/ISO2022/citrus_iso2022.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libiconv_modules/ISO2022/citrus_iso2022.c b/libiconv_modules/ISO2022/citrus_iso2022.c
+index 46da1d6..c2eeaa8 100644
+--- a/libiconv_modules/ISO2022/citrus_iso2022.c
++++ b/libiconv_modules/ISO2022/citrus_iso2022.c
+@@ -1031,7 +1031,7 @@ _ISO2022_sputwchar(_ISO2022EncodingInfo * __restrict ei, wchar_t wc,
+ {
+ 	_ISO2022Charset cs;
+ 	char *p;
+-	char tmp[MB_LEN_MAX];
++	char tmp[MB_LEN_MAX + 4];
+ 	size_t len;
+ 	int bit8, i = 0, target;
+ 	unsigned char mask;
+@@ -1196,7 +1196,7 @@ _citrus_ISO2022_put_state_reset(_ISO2022EncodingInfo * __restrict ei,
+     size_t * __restrict nresult)
+ {
+ 	char *result;
+-	char buf[MB_LEN_MAX];
++	char buf[MB_LEN_MAX + 4];
+ 	size_t len;
+ 	int ret;
+ 
+@@ -1225,7 +1225,7 @@ _citrus_ISO2022_wcrtomb_priv(_ISO2022EncodingInfo * __restrict ei,
+     _ISO2022State * __restrict psenc, size_t * __restrict nresult)
+ {
+ 	char *result;
+-	char buf[MB_LEN_MAX];
++	char buf[MB_LEN_MAX + 4];
+ 	size_t len;
+ 	int ret;
+ 
+-- 
+2.44.1
+
diff --git a/pkgs/by-name/li/libiconv-darwin/meson.build b/pkgs/by-name/li/libiconv-darwin/meson.build
index 99adeb7fe0849..9473cb8911423 100644
--- a/pkgs/by-name/li/libiconv-darwin/meson.build
+++ b/pkgs/by-name/li/libiconv-darwin/meson.build
@@ -19,6 +19,19 @@ i18nmoduledir = prefix_libdir / 'i18n'
 esdbdir = prefix_datadir / 'i18n/esdb'
 csmapperdir = prefix_datadir / 'i18n/csmapper'
 
+is_static = get_option('default_library') == 'static'
+static_suffix = is_static ? '_static' : ''
+
+# Generators
+if is_static
+    gperf_bin = find_program('gperf', required : true)
+    gperf = generator(
+        gperf_bin,
+        arguments : ['@INPUT@', '--output-file=@OUTPUT@'],
+        output : '@BASENAME@.h'
+    )
+endif
+
 
 # Libraries
 libcharset = library(
@@ -37,15 +50,16 @@ install_headers(
 )
 
 libiconv = library(
-    'iconv',
+    'iconv' + static_suffix,
     build_rpath : fs.parent(libcharset.full_path()),
     c_args : [
         f'-D_PATH_I18NMODULE="@i18nmoduledir@"',
         f'-D_PATH_ESDB="@esdbdir@"',
-        f'-D_PATH_CSMAPPER="@csmapperdir@"'
+        f'-D_PATH_CSMAPPER="@csmapperdir@"',
+        is_static ? '-DENABLE_STATIC=1' : [ ]
     ],
     darwin_versions : '7',
-    install : true,
+    install : not is_static,
     include_directories : ['citrus', 'libcharset'],
     link_args : ['-Wl,-reexport_library', fs.name(libcharset.full_path())],
     link_depends : [libcharset],
@@ -84,6 +98,7 @@ libiconv = library(
         'citrus/iconvctl.c',
         'citrus/iconvlist.c',
         'citrus/iconv.c',
+        is_static ? gperf.process('static-modules.gperf') : [ ]
     ],
     soversion : '2'
 )
@@ -99,19 +114,6 @@ install_man(
 )
 
 
-# Binaries
-executable(
-    'iconv',
-    install : true,
-    include_directories : ['citrus', 'libcharset'],
-    link_with : [libiconv],
-    sources : [
-        'iconv/iconv.c'
-    ]
-)
-install_man('iconv/iconv.1')
-
-
 # Data
 ## csmapper
 csmapper_modules = [
@@ -216,6 +218,7 @@ libiconv_modules = [
     'mapper_zone'
 ]
 
+modules = [ ]
 foreach module : libiconv_modules
     module_source = module.to_lower()
     module_path = 'libiconv_modules' / module
@@ -230,14 +233,19 @@ foreach module : libiconv_modules
     # See: https://github.com/apple-oss-distributions/libiconv/blob/81be60a93521c931a01aab9c747dd2b078bc0679/libiconv.xcodeproj/project.pbxproj#L2549-L2556
     # See also: https://cgit.freebsd.org/src/tree/lib/libiconv_modules/mapper_parallel/Makefile?id=9241ebc796c11cf133c550f188f324bd2c12d89a
     if module == 'mapper_parallel'
+        # Skip including mapper_parallel since it’s the same as mapper_serial, which would result in duplicate symbols.
+        if is_static
+            continue
+        endif
+
         module_source = 'mapper_serial'
         module_path = 'libiconv_modules/mapper_serial'
     endif
 
-    library(
+    modules += library(
         module,
         darwin_versions : '1',
-        install : true,
+        install : not is_static,
         install_dir : i18nmoduledir,
         include_directories : [module_path, 'citrus', 'libcharset'] + extra_headers,
         link_with : [libiconv],
@@ -249,6 +257,38 @@ foreach module : libiconv_modules
 endforeach
 
 
+# Bundle the modules into libiconv.a
+if is_static
+    objects = [libiconv.extract_all_objects(recursive : true)]
+    foreach module : modules
+        objects += module.extract_all_objects(recursive : true)
+    endforeach
+
+    libiconv = static_library(
+        'iconv',
+        install : true,
+        objects : objects
+    )
+endif
+
+
+# Binaries
+executable(
+    'iconv',
+    install : true,
+    include_directories : ['citrus', 'libcharset'],
+    link_with : [
+        libiconv,
+        # Darwin’s system `iconv` relies on the reexported symbols from libiconv
+        is_static ? libcharset : [ ]
+    ],
+    sources : [
+        'iconv/iconv.c'
+    ]
+)
+install_man('iconv/iconv.1')
+
+
 # Tests
 if get_option('tests') == true
 ## Only required for running the tests
@@ -259,7 +299,11 @@ if get_option('tests') == true
             suite,
             dependencies : [atf],
             include_directories : ['citrus', 'libcharset'],
-            link_with : [libiconv],
+            link_with : [
+                libiconv,
+                # Make sure the libcharset reexport is working by relying on libiconv to provide its symbols.
+                is_static ? libcharset : [ ]
+            ],
             sources : [test_src]
         )
 
diff --git a/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c b/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
index 40400ef832832..90981c5820f35 100644
--- a/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
+++ b/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
@@ -73,10 +73,44 @@ ATF_TC_BODY(test_cp932_cp932, tc)
     ATF_CHECK_STREQ(expected, output);
 }
 
+ATF_TC(test_iso2022_crash);
+ATF_TC_HEAD(test_iso2022_crash, tc)
+{
+    atf_tc_set_md_var(tc, "descr", "regression test for converting to ISO-2022 with escape sequences");
+}
+ATF_TC_BODY(test_iso2022_crash, tc)
+{
+    char expected[] = "";
+    size_t expected_length = sizeof(expected) - 1;
+
+    char input[] = "\x41\x41\x41\x41\x41\xe5\x8a\x84";
+    size_t input_length = sizeof(input) - 1;
+
+    size_t output_available = sizeof(expected) - 1 ;
+    char output[sizeof(expected)] = { 0 };
+
+    iconv_t cd = iconv_open("ISO-2022-CN-EXT", "UTF-8");
+    ATF_REQUIRE((size_t)cd != -1);
+
+    char* input_buf = input;
+    char* output_buf = output;
+
+    size_t res = iconv(cd, &input_buf, &input_length, &output_buf, &output_available);
+    iconv_close(cd);
+
+    ATF_CHECK(res == -1);
+
+    size_t output_length = sizeof(output) - output_available - 1;
+
+    ATF_CHECK_INTEQ(expected_length, output_length);
+    ATF_CHECK_STREQ(expected, output);
+}
+
 ATF_TP_ADD_TCS(tp)
 {
     ATF_TP_ADD_TC(tp, test_cp932_eucjp);
     ATF_TP_ADD_TC(tp, test_cp932_cp932);
+    ATF_TP_ADD_TC(tp, test_iso2022_crash);
 
     return atf_no_error();
 }
diff --git a/pkgs/by-name/li/libiconv-darwin/package.nix b/pkgs/by-name/li/libiconv-darwin/package.nix
index 0cb34224a6c78..5792568852ff6 100644
--- a/pkgs/by-name/li/libiconv-darwin/package.nix
+++ b/pkgs/by-name/li/libiconv-darwin/package.nix
@@ -3,6 +3,7 @@
   stdenv,
   fetchFromGitHub,
   atf,
+  gperf,
   libiconvReal,
   meson,
   ninja,
@@ -10,6 +11,9 @@
   gitUpdater,
 }:
 
+let
+  inherit (stdenv) hostPlatform;
+in
 stdenv.mkDerivation (finalAttrs: {
   pname = "libiconv";
   version = "99";
@@ -19,6 +23,9 @@ stdenv.mkDerivation (finalAttrs: {
     "dev"
   ];
 
+  # Propagate `out` only when there are dylibs to link (i.e., don’t propagate when doing a static build).
+  propagatedBuildOutputs = lib.optionalString (!hostPlatform.isStatic) "out";
+
   src = fetchFromGitHub {
     owner = "apple-oss-distributions";
     repo = "libiconv";
@@ -26,7 +33,13 @@ stdenv.mkDerivation (finalAttrs: {
     hash = "sha256-TGt6rsU52ztfW2rCqwnhMAExLbexI/59IoDOGY+XGu0=";
   };
 
-  inherit (libiconvReal) setupHooks;
+  setupHooks =
+    libiconvReal.setupHooks
+    ++ lib.optionals hostPlatform.isStatic [ ./static-setup-hook.sh ];
+
+  patches = lib.optionals hostPlatform.isStatic [ ./0001-Support-static-module-loading.patch ] ++ [
+    ./0002-Fix-ISO-2022-out-of-bounds-write-with-encoded-charac.patch
+  ];
 
   postPatch =
     ''
@@ -41,30 +54,42 @@ stdenv.mkDerivation (finalAttrs: {
       header
 
       cp ${./nixpkgs_test.c} tests/libiconv/nixpkgs_test.c
+    ''
+    + lib.optionalString hostPlatform.isStatic ''
+      cp ${./static-modules.gperf} static-modules.gperf
     '';
 
   strictDeps = true;
 
-  nativeBuildInputs = [
-    meson
-    ninja
-  ];
+  nativeBuildInputs =
+    [
+      meson
+      ninja
+    ]
+    # Dynamic builds use `dlopen` to load modules, but static builds have to link them all.
+    # `gperf` is used to generate a lookup table from module to ops functions.
+    ++ lib.optionals hostPlatform.isStatic [ gperf ];
 
   mesonBuildType = "release";
 
   mesonFlags = [ (lib.mesonBool "tests" finalAttrs.doInstallCheck) ];
 
-  postInstall = lib.optionalString stdenv.isDarwin ''
-    ${stdenv.cc.targetPrefix}install_name_tool "$out/lib/libiconv.2.dylib" \
-      -change '@rpath/libcharset.1.dylib' "$out/lib/libcharset.1.dylib"
-  '';
+  postInstall =
+    lib.optionalString (stdenv.isDarwin && !hostPlatform.isStatic) ''
+      ${stdenv.cc.targetPrefix}install_name_tool "$out/lib/libiconv.2.dylib" \
+        -change '@rpath/libcharset.1.dylib' "$out/lib/libcharset.1.dylib"
+    ''
+    # Move the static library to the `dev` output
+    + lib.optionalString hostPlatform.isStatic ''
+      moveToOutput lib "$dev"
+    '';
 
   # Tests have to be run in `installCheckPhase` because libiconv expects to `dlopen`
   # modules from `$out/lib/i18n`.
   nativeInstallCheckInputs = [ pkg-config ];
   installCheckInputs = [ atf ];
 
-  doInstallCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
+  doInstallCheck = stdenv.buildPlatform.canExecute hostPlatform;
 
   # Can’t use `mesonCheckPhase` because it runs the wrong hooks for `installCheckPhase`.
   installCheckPhase = ''
@@ -78,7 +103,7 @@ stdenv.mkDerivation (finalAttrs: {
   __structuredAttrs = true;
 
   meta = {
-    description = "An iconv(3) implementation";
+    description = "Iconv(3) implementation";
     homepage = "https://opensource.apple.com/releases/";
     license =
       with lib.licenses;
diff --git a/pkgs/by-name/li/libiconv-darwin/static-modules.gperf b/pkgs/by-name/li/libiconv-darwin/static-modules.gperf
new file mode 100644
index 0000000000000..be916fb257ec2
--- /dev/null
+++ b/pkgs/by-name/li/libiconv-darwin/static-modules.gperf
@@ -0,0 +1,73 @@
+%language=ANSI-C
+%compare-strncmp
+%pic
+%readonly-tables
+%{
+#include "citrus_namespace.h"
+#include "citrus_types.h"
+#include "citrus_module.h"
+#include "citrus_hash.h"
+
+#include "citrus_iconv.h"
+#include "citrus_mapper.h"
+#include "citrus_stdenc.h"
+
+extern _CITRUS_STDENC_GETOPS_FUNC(BIG5);
+extern _CITRUS_STDENC_GETOPS_FUNC(DECHanyu);
+extern _CITRUS_STDENC_GETOPS_FUNC(DECKanji);
+extern _CITRUS_STDENC_GETOPS_FUNC(EUC);
+extern _CITRUS_STDENC_GETOPS_FUNC(EUCTW);
+extern _CITRUS_STDENC_GETOPS_FUNC(GBK2K);
+extern _CITRUS_STDENC_GETOPS_FUNC(HZ);
+extern _CITRUS_STDENC_GETOPS_FUNC(ISO2022);
+extern _CITRUS_STDENC_GETOPS_FUNC(JOHAB);
+extern _CITRUS_STDENC_GETOPS_FUNC(MSKanji);
+extern _CITRUS_STDENC_GETOPS_FUNC(UES);
+extern _CITRUS_STDENC_GETOPS_FUNC(UTF1632);
+extern _CITRUS_STDENC_GETOPS_FUNC(UTF7);
+extern _CITRUS_STDENC_GETOPS_FUNC(UTF8);
+extern _CITRUS_STDENC_GETOPS_FUNC(UTF8MAC);
+extern _CITRUS_STDENC_GETOPS_FUNC(VIQR);
+extern _CITRUS_STDENC_GETOPS_FUNC(ZW);
+
+extern _CITRUS_ICONV_GETOPS_FUNC(iconv_none);
+extern _CITRUS_ICONV_GETOPS_FUNC(iconv_std);
+
+extern _CITRUS_MAPPER_GETOPS_FUNC(mapper_646);
+extern _CITRUS_MAPPER_GETOPS_FUNC(mapper_none);
+extern _CITRUS_MAPPER_GETOPS_FUNC(mapper_parallel);
+extern _CITRUS_MAPPER_GETOPS_FUNC(mapper_serial);
+extern _CITRUS_MAPPER_GETOPS_FUNC(mapper_std);
+extern _CITRUS_MAPPER_GETOPS_FUNC(mapper_zone);
+%}
+%define lookup-function-name lookup_getops
+%define hash-function-name is_known_encoding
+%define string-pool-name encodings
+%struct-type
+struct getops_pair { int name; void* opsfn; };
+%%
+BIG5, _citrus_BIG5_stdenc_getops
+DECHanyu, _citrus_DECHanyu_stdenc_getops
+DECKanji, _citrus_DECKanji_stdenc_getops
+EUC, _citrus_EUC_stdenc_getops
+EUCTW, _citrus_EUCTW_stdenc_getops
+GBK2K, _citrus_GBK2K_stdenc_getops
+HZ, _citrus_HZ_stdenc_getops
+ISO2022, _citrus_ISO2022_stdenc_getops
+JOHAB, _citrus_JOHAB_stdenc_getops
+MSKanji, _citrus_MSKanji_stdenc_getops
+UES, _citrus_UES_stdenc_getops
+UTF1632, _citrus_UTF1632_stdenc_getops
+UTF7, _citrus_UTF7_stdenc_getops
+UTF8, _citrus_UTF8_stdenc_getops
+UTF8MAC, _citrus_UTF8MAC_stdenc_getops
+VIQR, _citrus_VIQR_stdenc_getops
+ZW, _citrus_ZW_stdenc_getops
+iconv_none, _citrus_iconv_none_iconv_getops
+iconv_std, _citrus_iconv_std_iconv_getops
+mapper_646, _citrus_mapper_646_mapper_getops
+mapper_none, _citrus_mapper_none_mapper_getops
+mapper_serial, _citrus_mapper_serial_mapper_getops
+mapper_parallel, _citrus_mapper_parallel_mapper_getops
+mapper_std, _citrus_mapper_std_mapper_getops
+mapper_zone, _citrus_mapper_zone_mapper_getops
diff --git a/pkgs/by-name/li/libiconv-darwin/static-setup-hook.sh b/pkgs/by-name/li/libiconv-darwin/static-setup-hook.sh
new file mode 100644
index 0000000000000..2ad108b82f1d2
--- /dev/null
+++ b/pkgs/by-name/li/libiconv-darwin/static-setup-hook.sh
@@ -0,0 +1,5 @@
+# Darwin’s dynamic libiconv reexports libcharset, so reproduce that in static builds.
+if [ -z "${dontAddExtraLibs-}" ]; then
+    getHostRole
+    export NIX_LDFLAGS${role_post}+=" -lcharset"
+fi
diff --git a/pkgs/by-name/li/libideviceactivation/package.nix b/pkgs/by-name/li/libideviceactivation/package.nix
index 74ee9ddc2cc9c..dffe780d28a87 100644
--- a/pkgs/by-name/li/libideviceactivation/package.nix
+++ b/pkgs/by-name/li/libideviceactivation/package.nix
@@ -42,7 +42,7 @@ stdenv.mkDerivation (finalAttrs: {
   installFlags = [ "PREFIX=$(out)" ];
 
   meta = {
-    description = "A library to manage the activation process of Apple iOS devices.";
+    description = "Library to manage the activation process of Apple iOS devices";
     homepage = "https://libimobiledevice.org";
     license = with lib.licenses; [
       lgpl21
diff --git a/pkgs/by-name/li/libiec61850/package.nix b/pkgs/by-name/li/libiec61850/package.nix
index c5e85c462bb39..ccbf571bba292 100644
--- a/pkgs/by-name/li/libiec61850/package.nix
+++ b/pkgs/by-name/li/libiec61850/package.nix
@@ -28,6 +28,6 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://libiec61850.com/";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ stv0g ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 })
diff --git a/pkgs/by-name/li/libisofs/package.nix b/pkgs/by-name/li/libisofs/package.nix
index d49279dc1f1be..ac9c606b55523 100644
--- a/pkgs/by-name/li/libisofs/package.nix
+++ b/pkgs/by-name/li/libisofs/package.nix
@@ -39,7 +39,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     homepage = "https://dev.lovelyhq.com/libburnia/web/wiki";
-    description = "A library to create an ISO-9660 filesystem with extensions like RockRidge or Joliet";
+    description = "Library to create an ISO-9660 filesystem with extensions like RockRidge or Joliet";
     changelog = "https://dev.lovelyhq.com/libburnia/libisofs/src/tag/${finalAttrs.src.rev}/ChangeLog";
     license = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ abbradar AndersonTorres ];
diff --git a/pkgs/by-name/li/libixion/package.nix b/pkgs/by-name/li/libixion/package.nix
index f47cf289b0c02..c501442ff8be2 100644
--- a/pkgs/by-name/li/libixion/package.nix
+++ b/pkgs/by-name/li/libixion/package.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = with lib; {
-    description = "A general purpose formula parser, interpreter, formula cell dependency tracker and spreadsheet document model backend all in one package.";
+    description = "General purpose formula parser, interpreter, formula cell dependency tracker and spreadsheet document model backend all in one package";
     homepage = "https://gitlab.com/ixion/ixion";
     changelog = "https://gitlab.com/ixion/ixion/-/blob/${src.rev}/CHANGELOG";
     license = licenses.mpl20;
diff --git a/pkgs/by-name/li/liblapin/package.nix b/pkgs/by-name/li/liblapin/package.nix
index 97bcb1d1e181b..f736bb2d42687 100644
--- a/pkgs/by-name/li/liblapin/package.nix
+++ b/pkgs/by-name/li/liblapin/package.nix
@@ -9,7 +9,7 @@
 }:
 
 stdenv.mkDerivation {
-  name = "liblapin";
+  pname = "liblapin";
   version = "0-unstable-2024-05-20";
 
   src = fetchFromGitHub {
diff --git a/pkgs/by-name/li/libmamba/package.nix b/pkgs/by-name/li/libmamba/package.nix
index af87959a2e5f8..8db98ea2b664a 100644
--- a/pkgs/by-name/li/libmamba/package.nix
+++ b/pkgs/by-name/li/libmamba/package.nix
@@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = {
-    description = "The library for the fast Cross-Platform Package Manager";
+    description = "Library for the fast Cross-Platform Package Manager";
     homepage = "https://github.com/mamba-org/mamba";
     license = lib.licenses.bsd3;
     platforms = lib.platforms.all;
diff --git a/pkgs/by-name/li/libmpd/package.nix b/pkgs/by-name/li/libmpd/package.nix
new file mode 100644
index 0000000000000..bf2e6c70d2ad8
--- /dev/null
+++ b/pkgs/by-name/li/libmpd/package.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, doxygen
+, glib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "libmpd";
+  version = "11.8.17";
+  outputs = [
+    "out"
+    "dev"
+    "devdoc"
+  ];
+
+  src = fetchurl {
+    url = "https://www.musicpd.org/download/libmpd/${finalAttrs.version}/libmpd-${finalAttrs.version}.tar.gz";
+    hash = "sha256-/iAyaw0QZB9xxGc/rmN7+SIqluFxL3HxcPyi/DS/eoM=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    doxygen
+  ];
+  buildInputs = [
+    glib
+  ];
+
+  postInstall = ''
+    make doc
+    mkdir -p $devdoc/share/devhelp/libmpd
+    cp -r doc/html $devdoc/share/devhelp/libmpd/doxygen
+  '';
+
+  meta = with lib; {
+    description = "Higher level access to MPD functions";
+    homepage = "https://www.musicpd.org/download/libmpd/";
+    changelog = "https://www.musicpd.org/download/libmpd/${finalAttrs.version}/README";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ doronbehar ];
+    platforms = platforms.all;
+    # Getting DARWIN_NULL related errors
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/pkgs/by-name/li/libopus/package.nix b/pkgs/by-name/li/libopus/package.nix
new file mode 100644
index 0000000000000..cdf00a244ba4b
--- /dev/null
+++ b/pkgs/by-name/li/libopus/package.nix
@@ -0,0 +1,83 @@
+{
+  lib,
+  stdenv,
+  fetchurl,
+  gitUpdater,
+  meson,
+  python3,
+  ninja,
+  fixedPoint ? false,
+  withCustomModes ? true,
+  withIntrinsics ? stdenv.hostPlatform.isAarch || stdenv.hostPlatform.isx86,
+  withAsm ? false,
+
+  # tests
+  ffmpeg-headless,
+  testers,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "libopus";
+  version = "1.5.2";
+
+  src = fetchurl {
+    url = "https://downloads.xiph.org/releases/opus/opus-${finalAttrs.version}.tar.gz";
+    hash = "sha256-ZcHS94ufL7IAgsOMvkfJUa1YOTRYduRpQWEu6H+afOE=";
+  };
+
+  patches = [
+    # Some tests time out easily on slower machines
+    ./test-timeout.patch
+  ];
+
+  postPatch = ''
+    patchShebangs meson/
+  '';
+
+  outputs = [
+    "out"
+    "dev"
+  ];
+
+  nativeBuildInputs = [
+    meson
+    python3
+    ninja
+  ];
+
+  mesonFlags = [
+    (lib.mesonBool "fixed-point" fixedPoint)
+    (lib.mesonBool "custom-modes" withCustomModes)
+    (lib.mesonEnable "intrinsics" withIntrinsics)
+    (lib.mesonEnable "rtcd" (withIntrinsics || withAsm))
+    (lib.mesonEnable "asm" withAsm)
+    (lib.mesonEnable "docs" false)
+  ];
+
+  doCheck = !stdenv.isi686 && !stdenv.isAarch32; # test_unit_LPC_inv_pred_gain fails
+
+  passthru = {
+    updateScript = gitUpdater {
+      url = "https://gitlab.xiph.org/xiph/opus.git";
+      rev-prefix = "v";
+    };
+
+    tests = {
+      inherit ffmpeg-headless;
+
+      pkg-config = testers.hasPkgConfigModules {
+        package = finalAttrs.finalPackage;
+        moduleNames = [ "opus" ];
+      };
+    };
+  };
+
+  meta = {
+    description = "Open, royalty-free, highly versatile audio codec";
+    homepage = "https://opus-codec.org/";
+    changelog = "https://gitlab.xiph.org/xiph/opus/-/releases/v${finalAttrs.version}";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ getchoo jopejoe1 ];
+  };
+})
diff --git a/pkgs/by-name/li/libopus/test-timeout.patch b/pkgs/by-name/li/libopus/test-timeout.patch
new file mode 100644
index 0000000000000..76025e648d8f5
--- /dev/null
+++ b/pkgs/by-name/li/libopus/test-timeout.patch
@@ -0,0 +1,9 @@
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -1,6 +1,5 @@
+ # Tests that link to libopus
+ opus_tests = [
+-  ['test_opus_api'],
+   ['test_opus_decode', [], 120],
+   ['test_opus_encode', 'opus_encode_regressions.c', 240],
+   ['test_opus_extensions', [], 120],
diff --git a/pkgs/by-name/li/librum/package.nix b/pkgs/by-name/li/librum/package.nix
index 928bc7e0439c0..33972b85dc05e 100644
--- a/pkgs/by-name/li/librum/package.nix
+++ b/pkgs/by-name/li/librum/package.nix
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = with lib; {
-    description = "An application designed to make reading enjoyable and straightforward";
+    description = "Application designed to make reading enjoyable and straightforward";
     longDescription = ''
       Librum is an application designed to make reading enjoyable
       and straightforward for everyone. It's not just an e-book
diff --git a/pkgs/by-name/li/libscfg/package.nix b/pkgs/by-name/li/libscfg/package.nix
index d0c7426080f68..f9eb2a5b804b0 100644
--- a/pkgs/by-name/li/libscfg/package.nix
+++ b/pkgs/by-name/li/libscfg/package.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://sr.ht/~emersion/libscfg";
-    description = "A simple configuration file format";
+    description = "Simple configuration file format";
     license = licenses.mit;
     maintainers = with maintainers; [ michaeladler ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/li/libsignal-ffi/package.nix b/pkgs/by-name/li/libsignal-ffi/package.nix
index 06afbfc804080..d2c8f1f3df806 100644
--- a/pkgs/by-name/li/libsignal-ffi/package.nix
+++ b/pkgs/by-name/li/libsignal-ffi/package.nix
@@ -38,7 +38,7 @@ rustPlatform.buildRustPackage rec {
   cargoBuildFlags = [ "-p" "libsignal-ffi" ];
 
   meta = with lib; {
-    description = "A C ABI library which exposes Signal protocol logic";
+    description = "C ABI library which exposes Signal protocol logic";
     homepage = "https://github.com/signalapp/libsignal";
     license = licenses.agpl3Plus;
     maintainers = with maintainers; [ niklaskorz ];
diff --git a/pkgs/by-name/li/libstrophe/package.nix b/pkgs/by-name/li/libstrophe/package.nix
index f66c15edfd21b..d8ae379859cc2 100644
--- a/pkgs/by-name/li/libstrophe/package.nix
+++ b/pkgs/by-name/li/libstrophe/package.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
   doCheck = true;
 
   meta = with lib; {
-    description = "A simple, lightweight C library for writing XMPP clients";
+    description = "Simple, lightweight C library for writing XMPP clients";
     longDescription = ''
       libstrophe is a lightweight XMPP client library written in C. It has
       minimal dependencies and is configurable for various environments. It
diff --git a/pkgs/by-name/li/libstudxml/package.nix b/pkgs/by-name/li/libstudxml/package.nix
new file mode 100644
index 0000000000000..ceaf052eee70a
--- /dev/null
+++ b/pkgs/by-name/li/libstudxml/package.nix
@@ -0,0 +1,38 @@
+{
+  lib,
+  stdenv,
+  fetchgit,
+  build2,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "libstudxml";
+  version = "1.1.0-b.10+2";
+
+  src = fetchgit {
+    url = "https://git.codesynthesis.com/libstudxml/libstudxml.git";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-OsjMhQ3u/wLhOay7qg9sQMEhnAOdrO30dsKQ8aDWUOo=";
+  };
+
+  outputs = [
+    "out"
+    "dev"
+    "doc"
+  ];
+
+  nativeBuildInputs = [ build2 ];
+
+  # lib files are not marked as executable by default
+  postInstall = ''
+    chmod +x "$out"/lib/*
+  '';
+
+  meta = {
+    description = "A streaming XML pull parser and streaming XML serializer implementation for modern, standard C++";
+    homepage = "https://www.codesynthesis.com/projects/libstudxml/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ tomasajt ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/pkgs/by-name/li/libui-ng/package.nix b/pkgs/by-name/li/libui-ng/package.nix
index 51f73ecb69562..8799750b94236 100644
--- a/pkgs/by-name/li/libui-ng/package.nix
+++ b/pkgs/by-name/li/libui-ng/package.nix
@@ -52,7 +52,7 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    description = "A portable GUI library for C";
+    description = "Portable GUI library for C";
     homepage = "https://github.com/libui-ng/libui-ng";
     license = licenses.mit;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/by-name/li/libvibrant/package.nix b/pkgs/by-name/li/libvibrant/package.nix
index f9802bddafa8e..905ad34d29ea3 100644
--- a/pkgs/by-name/li/libvibrant/package.nix
+++ b/pkgs/by-name/li/libvibrant/package.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake makeWrapper ];
 
   meta = with lib; {
-    description = "A simple library to adjust color saturation of X11 outputs";
+    description = "Simple library to adjust color saturation of X11 outputs";
     homepage = "https://github.com/libvibrant/libvibrant";
     license = licenses.mit;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/li/licensure/package.nix b/pkgs/by-name/li/licensure/package.nix
index f7c54ca83ed0c..19e580df3d5bb 100644
--- a/pkgs/by-name/li/licensure/package.nix
+++ b/pkgs/by-name/li/licensure/package.nix
@@ -28,7 +28,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = with lib; {
-    description = "A FOSS License management tool for your projects";
+    description = "FOSS License management tool for your projects";
     homepage = "https://github.com/chasinglogic/licensure";
     license = licenses.gpl3Plus;
     mainProgram = "licensure";
diff --git a/pkgs/by-name/li/lilipod/package.nix b/pkgs/by-name/li/lilipod/package.nix
index b5d6f56768a2b..0185a25c8a489 100644
--- a/pkgs/by-name/li/lilipod/package.nix
+++ b/pkgs/by-name/li/lilipod/package.nix
@@ -52,7 +52,7 @@ buildGoModule rec {
   '';
 
   meta = {
-    description = "A very simple (as in few features) container and image manager";
+    description = "Very simple (as in few features) container and image manager";
     longDescription = ''
       Lilipod is a very simple container manager with minimal features to:
 
diff --git a/pkgs/by-name/li/lint-staged/package.nix b/pkgs/by-name/li/lint-staged/package.nix
index 82a8de430623d..0fa6179dca687 100644
--- a/pkgs/by-name/li/lint-staged/package.nix
+++ b/pkgs/by-name/li/lint-staged/package.nix
@@ -2,16 +2,16 @@
 
 buildNpmPackage rec {
   pname = "lint-staged";
-  version = "15.2.5";
+  version = "15.2.6";
 
   src = fetchFromGitHub {
     owner = "okonet";
     repo = "lint-staged";
     rev = "v${version}";
-    hash = "sha256-Mr8Gtm5kXv+ZcLAMCe8JadJwlTRjD29xojN6Tyzdfb8=";
+    hash = "sha256-Jn6KGfgL4Si48hdg4glACe6AO5QzPgnasYhHMivzMGk=";
   };
 
-  npmDepsHash = "sha256-BAVxloOuHodxPLoN5iMQcL04rdmkIEL6UYPnp2HbTe0=";
+  npmDepsHash = "sha256-6BKx06h+laYSMNm36R992oXYwCDS90F+nh21MnHA998=";
 
   dontNpmBuild = true;
 
diff --git a/pkgs/by-name/li/linux-scripts/package.nix b/pkgs/by-name/li/linux-scripts/package.nix
new file mode 100644
index 0000000000000..f317538be7e70
--- /dev/null
+++ b/pkgs/by-name/li/linux-scripts/package.nix
@@ -0,0 +1,64 @@
+{ lib
+, linuxHeaders # Linux source tree
+, makeWrapper
+, stdenvNoCC
+
+, binutils
+, coreutils
+, gnugrep
+
+  # decompressors for possible kernel image formats
+, bzip2
+, gzip
+, lz4
+, lzop
+, xz
+, zstd
+}:
+
+let
+  commonDeps = [
+    binutils
+    coreutils
+    gnugrep
+    gzip
+    xz
+    bzip2
+    lzop
+    lz4
+    zstd
+  ];
+
+  toWrapScriptLines = scriptName: ''
+    install -Dm 0755 scripts/${scriptName} $out/bin/${scriptName}
+    wrapProgram $out/bin/${scriptName} --prefix PATH : ${lib.makeBinPath commonDeps}
+  '';
+in
+stdenvNoCC.mkDerivation
+{
+  inherit (linuxHeaders) version;
+  pname = "linux-scripts";
+
+  # These scripts will rarely change and are usually not bound to a specific
+  # version of Linux. So it is okay to just use whatever Linux version comes
+  # from `linuxHeaders.
+  src = linuxHeaders.src;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    ${toWrapScriptLines "extract-ikconfig"}
+    ${toWrapScriptLines "extract-vmlinux"}
+  '';
+
+  meta = with lib; {
+    description = "Standalone scripts from <linux>/scripts";
+    homepage = "https://www.kernel.org/";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.phip1611 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/by-name/li/listmonk/package.nix b/pkgs/by-name/li/listmonk/package.nix
index 0a111224161ee..800540a25ea55 100644
--- a/pkgs/by-name/li/listmonk/package.nix
+++ b/pkgs/by-name/li/listmonk/package.nix
@@ -47,7 +47,7 @@ buildGoModule rec {
   };
 
   meta = with lib; {
-    description = "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard.";
+    description = "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard";
     mainProgram = "listmonk";
     homepage = "https://github.com/knadh/listmonk";
     changelog = "https://github.com/knadh/listmonk/releases/tag/v${version}";
diff --git a/pkgs/by-name/li/littlefs-fuse/package.nix b/pkgs/by-name/li/littlefs-fuse/package.nix
index 81300a8a82246..c026a8b7ce071 100644
--- a/pkgs/by-name/li/littlefs-fuse/package.nix
+++ b/pkgs/by-name/li/littlefs-fuse/package.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
   meta = src.meta // {
-    description = "A FUSE wrapper that puts the littlefs in user-space";
+    description = "FUSE wrapper that puts the littlefs in user-space";
     license = lib.licenses.bsd3;
     maintainers = with lib.maintainers; [ ehmry ];
     mainProgram = "littlefs-fuse";
diff --git a/pkgs/by-name/li/livi/package.nix b/pkgs/by-name/li/livi/package.nix
index b36f08497a619..d39007f9efe99 100644
--- a/pkgs/by-name/li/livi/package.nix
+++ b/pkgs/by-name/li/livi/package.nix
@@ -46,7 +46,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://gitlab.gnome.org/guidog/livi";
-    description = "A small video player targeting mobile devices (also named μPlayer)";
+    description = "Small video player targeting mobile devices (also named μPlayer)";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     mainProgram = "livi";