Merge staging-next into staging

This commit is contained in:
github-actions[bot]
2023-08-28 00:03:02 +00:00
committed by GitHub
51 changed files with 1250 additions and 572 deletions
+6
View File
@@ -14866,6 +14866,12 @@
githubId = 7365864;
name = "Rafael Varago";
};
rvdp = {
email = "ramses@well-founded.dev";
github = "R-VdP";
githubId = 141248;
name = "Ramses";
};
rvl = {
email = "dev+nix@rodney.id.au";
github = "rvl";
@@ -223,6 +223,12 @@ The module update takes care of the new config syntax and the data itself (user
- Suricata was upgraded from 6.0 to 7.0 and no longer considers HTTP/2 support as experimental, see [upstream release notes](https://forum.suricata.io/t/suricata-7-0-0-released/3715) for more details.
- `networking.nftables` now has the option `networking.nftables.table.<table>` to create tables
and have them be updated atomically, instead of flushing the ruleset.
- `networking.nftables` is no longer flushing all rulesets on every reload.
Use `networking.nftables.flushRuleset = true;` to get back the old behaviour.
## Nixpkgs internals {#sec-release-23.11-nixpkgs-internals}
- The use of `sourceRoot = "source";`, `sourceRoot = "source/subdir";`, and similar lines in package derivations using the default `unpackPhase` is deprecated as it requires `unpackPhase` to always produce a directory named "source". Use `sourceRoot = src.name`, `sourceRoot = "${src.name}/subdir";`, or `setSourceRoot = "sourceRoot=$(echo */subdir)";` or similar instead.
@@ -70,10 +70,8 @@ in
}
];
networking.nftables.ruleset = ''
table inet nixos-fw {
networking.nftables.tables."nixos-fw".family = "inet";
networking.nftables.tables."nixos-fw".content = ''
${optionalString (cfg.checkReversePath != false) ''
chain rpfilter {
type filter hook prerouting priority mangle + 10; policy drop;
@@ -169,9 +167,6 @@ in
}
''}
}
'';
};
@@ -145,28 +145,28 @@ in
}
];
networking.nftables.ruleset = ''
table ip nixos-nat {
${mkTable {
networking.nftables.tables = {
"nixos-nat" = {
family = "ip";
content = mkTable {
ipVer = "ip";
inherit dest ipSet;
forwardPorts = filter (x: !(isIPv6 x.destination)) cfg.forwardPorts;
inherit (cfg) dmzHost;
}}
}
${optionalString cfg.enableIPv6 ''
table ip6 nixos-nat {
${mkTable {
ipVer = "ip6";
dest = destIPv6;
ipSet = ipv6Set;
forwardPorts = filter (x: isIPv6 x.destination) cfg.forwardPorts;
dmzHost = null;
}}
}
''}
'';
};
};
"nixos-nat6" = mkIf cfg.enableIPv6 {
family = "ip6";
name = "nixos-nat";
content = mkTable {
ipVer = "ip6";
dest = destIPv6;
ipSet = ipv6Set;
forwardPorts = filter (x: isIPv6 x.destination) cfg.forwardPorts;
dmzHost = null;
};
};
};
networking.firewall.extraForwardRules = optionalString config.networking.firewall.filterForward ''
${optionalString (ifaceSet != "") ''
+148 -8
View File
@@ -2,6 +2,35 @@
with lib;
let
cfg = config.networking.nftables;
tableSubmodule = { name, ... }: {
options = {
enable = mkOption {
type = types.bool;
default = true;
description = lib.mdDoc "Enable this table.";
};
name = mkOption {
type = types.str;
description = lib.mdDoc "Table name.";
};
content = mkOption {
type = types.lines;
description = lib.mdDoc "The table content.";
};
family = mkOption {
description = lib.mdDoc "Table family.";
type = types.enum [ "ip" "ip6" "inet" "arp" "bridge" "netdev" ];
};
};
config = {
name = mkDefault name;
};
};
in
{
###### interface
@@ -54,6 +83,24 @@ in
'';
};
networking.nftables.flushRuleset = mkEnableOption (lib.mdDoc "Flush the entire ruleset on each reload.");
networking.nftables.extraDeletions = mkOption {
type = types.lines;
default = "";
example = ''
# this makes deleting a non-existing table a no-op instead of an error
table inet some-table;
delete table inet some-table;
'';
description =
lib.mdDoc ''
Extra deletion commands to be run on every firewall start, reload
and after stopping the firewall.
'';
};
networking.nftables.ruleset = mkOption {
type = types.lines;
default = "";
@@ -103,7 +150,10 @@ in
lib.mdDoc ''
The ruleset to be used with nftables. Should be in a format that
can be loaded using "/bin/nft -f". The ruleset is updated atomically.
This option conflicts with rulesetFile.
Note that if the tables should be cleaned first, either:
- networking.nftables.flushRuleset = true; needs to be set (flushes all tables)
- networking.nftables.extraDeletions needs to be set
- or networking.nftables.tables can be used, which will clean up the table automatically
'';
};
networking.nftables.rulesetFile = mkOption {
@@ -113,9 +163,64 @@ in
lib.mdDoc ''
The ruleset file to be used with nftables. Should be in a format that
can be loaded using "nft -f". The ruleset is updated atomically.
This option conflicts with ruleset and nftables based firewall.
'';
};
networking.nftables.tables = mkOption {
type = types.attrsOf (types.submodule tableSubmodule);
default = {};
description = lib.mdDoc ''
Tables to be added to ruleset.
Tables will be added together with delete statements to clean up the table before every update.
'';
example = {
filter = {
family = "inet";
content = ''
# Check out https://wiki.nftables.org/ for better documentation.
# Table for both IPv4 and IPv6.
# Block all incoming connections traffic except SSH and "ping".
chain input {
type filter hook input priority 0;
# accept any localhost traffic
iifname lo accept
# accept traffic originated from us
ct state {established, related} accept
# ICMP
# routers may also want: mld-listener-query, nd-router-solicit
ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept
# allow "ping"
ip6 nexthdr icmpv6 icmpv6 type echo-request accept
ip protocol icmp icmp type echo-request accept
# accept SSH connections (required for a server)
tcp dport 22 accept
# count and drop any other traffic
counter drop
}
# Allow all outgoing connections.
chain output {
type filter hook output priority 0;
accept
}
chain forward {
type filter hook forward priority 0;
accept
}
'';
};
};
};
};
###### implementation
@@ -124,6 +229,8 @@ in
boot.blacklistedKernelModules = [ "ip_tables" ];
environment.systemPackages = [ pkgs.nftables ];
networking.networkmanager.firewallBackend = mkDefault "nftables";
# versionOlder for backportability, remove afterwards
networking.nftables.flushRuleset = mkDefault (versionOlder config.system.stateVersion "23.11" || (cfg.rulesetFile != null || cfg.ruleset != ""));
systemd.services.nftables = {
description = "nftables firewall";
before = [ "network-pre.target" ];
@@ -131,18 +238,49 @@ in
wantedBy = [ "multi-user.target" ];
reloadIfChanged = true;
serviceConfig = let
enabledTables = filterAttrs (_: table: table.enable) cfg.tables;
deletionsScript = pkgs.writeScript "nftables-deletions" ''
#! ${pkgs.nftables}/bin/nft -f
${if cfg.flushRuleset then "flush ruleset"
else concatStringsSep "\n" (mapAttrsToList (_: table: ''
table ${table.family} ${table.name}
delete table ${table.family} ${table.name}
'') enabledTables)}
${cfg.extraDeletions}
'';
deletionsScriptVar = "/var/lib/nftables/deletions.nft";
ensureDeletions = pkgs.writeShellScript "nftables-ensure-deletions" ''
touch ${deletionsScriptVar}
chmod +x ${deletionsScriptVar}
'';
saveDeletionsScript = pkgs.writeShellScript "nftables-save-deletions" ''
cp ${deletionsScript} ${deletionsScriptVar}
'';
cleanupDeletionsScript = pkgs.writeShellScript "nftables-cleanup-deletions" ''
rm ${deletionsScriptVar}
'';
rulesScript = pkgs.writeTextFile {
name = "nftables-rules";
executable = true;
text = ''
#! ${pkgs.nftables}/bin/nft -f
flush ruleset
${if cfg.rulesetFile != null then ''
# previous deletions, if any
include "${deletionsScriptVar}"
# current deletions
include "${deletionsScript}"
${concatStringsSep "\n" (mapAttrsToList (_: table: ''
table ${table.family} ${table.name} {
${table.content}
}
'') enabledTables)}
${cfg.ruleset}
${lib.optionalString (cfg.rulesetFile != null) ''
include "${cfg.rulesetFile}"
'' else cfg.ruleset}
''}
'';
checkPhase = lib.optionalString cfg.checkRuleset ''
cp $out ruleset.conf
sed 's|include "${deletionsScriptVar}"||' -i ruleset.conf
${cfg.preCheckRuleset}
export NIX_REDIRECTS=/etc/protocols=${pkgs.buildPackages.iana-etc}/etc/protocols:/etc/services=${pkgs.buildPackages.iana-etc}/etc/services
LD_PRELOAD="${pkgs.buildPackages.libredirect}/lib/libredirect.so ${pkgs.buildPackages.lklWithFirewall.lib}/lib/liblkl-hijack.so" \
@@ -152,9 +290,11 @@ in
in {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = rulesScript;
ExecReload = rulesScript;
ExecStop = "${pkgs.nftables}/bin/nft flush ruleset";
ExecStart = [ ensureDeletions rulesScript ];
ExecStartPost = saveDeletionsScript;
ExecReload = [ ensureDeletions rulesScript saveDeletionsScript ];
ExecStop = [ deletionsScriptVar cleanupDeletionsScript ];
StateDirectory = "nftables";
};
};
};
@@ -35,6 +35,7 @@ in
./openbox.nix
./pekwm.nix
./notion.nix
./ragnarwm.nix
./ratpoison.nix
./sawfish.nix
./smallwm.nix
@@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.ragnarwm;
in
{
###### interface
options = {
services.xserver.windowManager.ragnarwm = {
enable = mkEnableOption (lib.mdDoc "ragnarwm");
package = mkOption {
type = types.package;
default = pkgs.ragnarwm;
defaultText = literalExpression "pkgs.ragnarwm";
description = lib.mdDoc ''
The ragnar package to use.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
services.xserver.displayManager.sessionPackages = [ cfg.package ];
environment.systemPackages = [ cfg.package ];
};
meta.maintainers = with lib.maintainers; [ sigmanificient ];
}
+1
View File
@@ -673,6 +673,7 @@ in {
rabbitmq = handleTest ./rabbitmq.nix {};
radarr = handleTest ./radarr.nix {};
radicale = handleTest ./radicale.nix {};
ragnarwm = handleTest ./ragnarwm.nix {};
rasdaemon = handleTest ./rasdaemon.nix {};
readarr = handleTest ./readarr.nix {};
redis = handleTest ./redis.nix {};
+2 -3
View File
@@ -20,8 +20,8 @@ import ../make-test-python.nix ({ pkgs, ...} : {
networking = {
firewall.enable = false;
nftables.enable = true;
nftables.ruleset = ''
table inet filter {
nftables.tables."filter".family = "inet";
nftables.tables."filter".content = ''
chain incoming {
type filter hook input priority 0;
policy accept;
@@ -36,7 +36,6 @@ import ../make-test-python.nix ({ pkgs, ...} : {
type filter hook output priority 0;
policy accept;
}
}
'';
};
};
+32
View File
@@ -0,0 +1,32 @@
import ./make-test-python.nix ({ lib, ...} : {
name = "ragnarwm";
meta = {
maintainers = with lib.maintainers; [ sigmanificient ];
};
nodes.machine = { pkgs, lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
services.xserver.displayManager.defaultSession = lib.mkForce "ragnar";
services.xserver.windowManager.ragnarwm.enable = true;
# Setup the default terminal of Ragnar
environment.systemPackages = [ pkgs.alacritty ];
};
testScript = ''
with subtest("ensure x starts"):
machine.wait_for_x()
machine.wait_for_file("/home/alice/.Xauthority")
machine.succeed("xauth merge ~alice/.Xauthority")
with subtest("ensure we can open a new terminal"):
# Sleeping a bit before the test, as it may help for sending keys
machine.sleep(2)
machine.send_key("meta_l-ret")
machine.wait_for_window(r"alice.*?machine")
machine.sleep(2)
machine.screenshot("terminal")
'';
})
+17 -4
View File
@@ -90,7 +90,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
++ lib.optionals tlsSupport [ pkgs.openssl pkgs.gnutls ]
++ lib.optionals (openglSupport && !stdenv.isDarwin) [ pkgs.libGLU pkgs.libGL pkgs.mesa.osmesa pkgs.libdrm ]
++ lib.optionals stdenv.isDarwin (with pkgs.buildPackages.darwin.apple_sdk.frameworks; [
CoreServices Foundation ForceFeedback AppKit OpenGL IOKit DiskArbitration Security
CoreServices Foundation ForceFeedback AppKit OpenGL IOKit DiskArbitration PCSC Security
ApplicationServices AudioToolbox CoreAudio AudioUnit CoreMIDI OpenCL Cocoa Carbon
])
++ lib.optionals (stdenv.isLinux && !waylandSupport) (with pkgs.xorg; [
@@ -103,14 +103,27 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
patches = [ ]
++ lib.optionals stdenv.isDarwin [
# Wine requires `MTLDevice.registryID` for `winemac.drv`, but that property is not available
# in the 10.12 SDK (current SDK on x86_64-darwin). Work around that by using selector syntax.
# Wine uses `MTLDevice.registryID` in `winemac.drv`, but that property is not available in
# the 10.12 SDK (current SDK on x86_64-darwin). That can be worked around by using selector
# syntax. As of Wine 8.12, the logic has changed and uses selector syntax, but it still
# uses property syntax in one place. The first patch is necessary only with older
# versions of Wine. The second is needed on all versions of Wine.
(lib.optional (lib.versionOlder version "8.12") ./darwin-metal-compat-pre8.12.patch)
./darwin-metal-compat.patch
# Wine requires `qos.h`, which is not included by default on the 10.12 SDK in nixpkgs.
./darwin-qos.patch
]
++ patches';
# Because the 10.12 SDK doesnt define `registryID`, clang assumes the undefined selector returns
# `id`, which is a pointer. This causes implicit pointer to integer errors in clang 15+.
# The following post-processing step adds a cast to `uint64_t` before the selector invocation to
# silence these errors.
postPatch = lib.optionalString stdenv.isDarwin ''
sed -e 's|\(\[[A-Za-z_][][A-Za-z_0-9]* registryID\]\)|(uint64_t)\1|' \
-i dlls/winemac.drv/cocoa_display.m
'';
configureFlags = prevConfigFlags
++ lib.optionals supportFlags.waylandSupport [ "--with-wayland" ]
++ lib.optionals supportFlags.vulkanSupport [ "--with-vulkan" ]
@@ -192,7 +205,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
];
description = if supportFlags.waylandSupport then "An Open Source implementation of the Windows API on top of OpenGL and Unix (with experimental Wayland support)" else "An Open Source implementation of the Windows API on top of X, OpenGL, and Unix";
platforms = if supportFlags.waylandSupport then (lib.remove "x86_64-darwin" prevPlatforms) else prevPlatforms;
maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira ];
maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira reckenrode ];
inherit mainProgram;
};
})
@@ -0,0 +1,22 @@
diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m
--- a/dlls/winemac.drv/cocoa_display.m
+++ b/dlls/winemac.drv/cocoa_display.m
@@ -289,7 +289,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count)
* the primary GPU because we need to hide the integrated GPU for an automatic graphic switching pair to avoid apps
* using the integrated GPU. This is the behavior of Windows on a Mac. */
primary_device = [MTLCreateSystemDefaultDevice() autorelease];
- if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, primary_device.registryID))
+ if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, [primary_device registryID]))
goto done;
/* Hide the integrated GPU if the system default device is a dedicated GPU */
@@ -301,7 +301,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count)
for (i = 0; i < devices.count; i++)
{
- if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], devices[i].registryID))
+ if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], [devices[i] registryID]))
goto done;
if (hide_integrated && devices[i].isLowPower)
@@ -1,31 +1,12 @@
diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m
index f64a6c0f6ad..6da0391e3fa 100644
--- a/dlls/winemac.drv/cocoa_display.m
+++ b/dlls/winemac.drv/cocoa_display.m
@@ -289,7 +289,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count)
* the primary GPU because we need to hide the integrated GPU for an automatic graphic switching pair to avoid apps
* using the integrated GPU. This is the behavior of Windows on a Mac. */
primary_device = [MTLCreateSystemDefaultDevice() autorelease];
- if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, primary_device.registryID))
+ if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, (uint64_t)[primary_device registryID]))
goto done;
/* Hide the integrated GPU if the system default device is a dedicated GPU */
@@ -301,7 +301,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count)
for (i = 0; i < devices.count; i++)
{
- if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], devices[i].registryID))
+ if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], (uint64_t)[devices[i] registryID]))
goto done;
if (hide_integrated && devices[i].isLowPower)
@@ -354,7 +354,7 @@ static int macdrv_get_gpu_info_from_display_id_using_metal(struct macdrv_gpu* gp
device = [CGDirectDisplayCopyCurrentMetalDevice(display_id) autorelease];
if (device && [device respondsToSelector:@selector(registryID)])
- ret = macdrv_get_gpu_info_from_registry_id(gpu, device.registryID);
+ ret = macdrv_get_gpu_info_from_registry_id(gpu, (uint64_t)[device registryID]);
+ ret = macdrv_get_gpu_info_from_registry_id(gpu, [device registryID]);
done:
[pool release];
+3 -3
View File
@@ -69,9 +69,9 @@ in rec {
unstable = fetchurl rec {
# NOTE: Don't forget to change the hash for staging as well.
version = "8.13";
version = "8.14";
url = "https://dl.winehq.org/wine/source/8.x/wine-${version}.tar.xz";
hash = "sha256-JuXTqD0lxUGMbA9USORD0gh2OiZDqrSw8a01KSKkwnU=";
hash = "sha256-4YNu9msYJfqdoEKDDASVsqw5SBVENkNGaXnuif3X+vQ=";
inherit (stable) patches;
## see http://wiki.winehq.org/Gecko
@@ -117,7 +117,7 @@ in rec {
staging = fetchFromGitHub rec {
# https://github.com/wine-staging/wine-staging/releases
inherit (unstable) version;
hash = "sha256-5upC+IWHBJE5DeFv96lD1hr4LYYaqAAzfxIroK9KlOY=";
hash = "sha256-ct/RGXt9B6F3PHbirX8K03AZ0Kunitd2HmI0N5k6VHI=";
owner = "wine-staging";
repo = "wine-staging";
rev = "v${version}";
+4 -9
View File
@@ -1,7 +1,7 @@
{ stdenv
, lib
, fetchFromGitHub
, fetchurl
, fetchzip
, python310
, nodePackages
, wkhtmltopdf
@@ -53,17 +53,12 @@ in python.pkgs.buildPythonApplication rec {
format = "setuptools";
# latest release is at https://github.com/odoo/docker/blob/master/16.0/Dockerfile
src = fetchurl {
url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.tar.gz";
src = fetchzip {
url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip";
name = "${pname}-${version}";
hash = "sha256-DV5JBY+2gq5mUfcvN9S5xkd+ufgEBjvyvBY1X7pPFPk="; # odoo
hash = "sha256-pSycpYSiqJ6DKENvCWwLz+JaPUXT5dmaq8x4Aency60="; # odoo
};
unpackPhase = ''
tar xfz $src
cd odoo*
'';
# needs some investigation
doCheck = false;
+5 -12
View File
@@ -1,4 +1,4 @@
{ stdenv, lib, fetchFromGitHub, fetchurl, python310, nodePackages, wkhtmltopdf
{ stdenv, lib, fetchFromGitHub, fetchzip, python310, nodePackages, wkhtmltopdf
, nixosTests }:
let
@@ -38,7 +38,7 @@ let
};
odoo_version = "15.0";
odoo_release = "20230720";
odoo_release = "20230816";
in python.pkgs.buildPythonApplication rec {
pname = "odoo15";
version = "${odoo_version}.${odoo_release}";
@@ -46,18 +46,12 @@ in python.pkgs.buildPythonApplication rec {
format = "setuptools";
# latest release is at https://github.com/odoo/docker/blob/master/15.0/Dockerfile
src = fetchurl {
url =
"https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.tar.gz";
src = fetchzip {
url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip";
name = "${pname}-${version}";
hash = "sha256-XH4cN2OrPvMjN3VcDJFxCacNxKkrN65jwhUN1dnGwgo="; # odoo
hash = "sha256-h81JA0o44DVtl/bZ52rGQfg54TigwQcNpcMjQbi0zIQ="; # odoo
};
unpackPhase = ''
tar xfz $src
cd odoo*
'';
# needs some investigation
doCheck = false;
@@ -115,7 +109,6 @@ in python.pkgs.buildPythonApplication rec {
dontStrip = true;
passthru = {
updateScript = ./update.sh;
tests = { inherit (nixosTests) odoo15; };
};
+3 -3
View File
@@ -1,9 +1,9 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gnused nix coreutils
#!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch
set -euo pipefail
DOCKER=$(curl -s https://raw.githubusercontent.com/odoo/docker/master/15.0/Dockerfile)
DOCKER=$(curl -s https://raw.githubusercontent.com/odoo/docker/master/16.0/Dockerfile)
get_var() {
echo "$DOCKER" | grep -E "^[A-Z][A-Z][A-Z] ODOO_$1" | sed -r "s|^[A-Z]{3} ODOO_$1.||g"
@@ -22,6 +22,6 @@ fi
cd "$(dirname "${BASH_SOURCE[0]}")"
sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch-url --type sha256 "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.tar.gz")\"; # odoo|g" default.nix
sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" default.nix
sed -ri "s| odoo_version.+| odoo_version = \"$VERSION\";|" default.nix
sed -ri "s| odoo_release.+| odoo_release = \"$RELEASE\";|" default.nix
@@ -2,36 +2,36 @@
beta = {
deps = {
gn = {
rev = "4bd1a77e67958fb7f6739bd4542641646f264e5d";
sha256 = "14h9jqspb86sl5lhh6q0kk2rwa9zcak63f8drp7kb3r4dx08vzsw";
rev = "811d332bd90551342c5cbd39e133aa276022d7f8";
sha256 = "0jlg3d31p346na6a3yk0x29pm6b7q03ck423n5n6mi8nv4ybwajq";
url = "https://gn.googlesource.com/gn";
version = "2023-06-09";
version = "2023-08-01";
};
};
sha256 = "0r5m2bcrh2zpl2m8wnzyl4afh8s0dh2m2fnfjf50li94694vy4jz";
sha256bin64 = "047wsszg4c23vxq93a335iymiqpy7lw5izzz4f0zk1a4sijafd59";
version = "116.0.5845.50";
sha256 = "1wf0j189cxpayy6ffmj5j6h5yg3amivryilimjc2ap0jkyj4xrbi";
sha256bin64 = "11w1di146mjb9ql30df9yk9x4b9amc6514jzyfbf09mqsrw88dvr";
version = "117.0.5938.22";
};
dev = {
deps = {
gn = {
rev = "fae280eabe5d31accc53100137459ece19a7a295";
sha256 = "02javy4jsllwl4mxl2zmg964jvzw800w6gbmr5z6jdkip24fw0kj";
rev = "cc56a0f98bb34accd5323316e0292575ff17a5d4";
sha256 = "1ly7z48v147bfdb1kqkbc98myxpgqq3g6vgr8bjx1ikrk17l82ab";
url = "https://gn.googlesource.com/gn";
version = "2023-07-12";
version = "2023-08-10";
};
};
sha256 = "0pyf3k58m26lkc6v6mqpwvhyaj6bbyywl4c17cxb5zmzc1zmc5ia";
sha256bin64 = "10w5dm68aaffgdq0xqi4ans2w7byisqqld09pz5vpk350gy16fjh";
version = "117.0.5897.3";
sha256 = "1z01b6w4sgndrlcd26jgimk3rhv3wzpn67nv1fd5ln7dwfwkyq20";
sha256bin64 = "11y09hsy7y1vg65xfilq44ffsmn15dqy80fa57psj1kin4a52v2x";
version = "118.0.5966.0";
};
stable = {
chromedriver = {
sha256_darwin = "1c41cb7zh13ny4xvpwy7703cnjrkmqxd3n8zpja7n6a38mi8mgsk";
sha256_darwin = "0gzx3zka8i2ngsdiqp8sr0v6ir978vywa1pj7j08vsf8kmb93iiy";
sha256_darwin_aarch64 =
"1kliszw10jnnlhzi8jrdzjq0r7vfn6ksk1spsh2rfn2hmghccv2d";
sha256_linux = "1797qmb213anvp9lmrkj6wmfdwkdfswmshmk1816zankw5dl883j";
version = "115.0.5790.98";
"18iyapwjg0yha8qgbw7f605n0j54nd36shv3497bd84lc9k74b14";
sha256_linux = "0d8mqzjc11g1bvxvffk0xyhxfls2ycl7ym4ssyjq752g2apjblhp";
version = "116.0.5845.96";
};
deps = {
gn = {
@@ -6,7 +6,7 @@
python3.pkgs.buildPythonApplication rec {
pname = "flexget";
version = "3.9.4";
version = "3.9.5";
format = "pyproject";
# Fetch from GitHub in order to use `requirements.in`
@@ -14,7 +14,7 @@ python3.pkgs.buildPythonApplication rec {
owner = "Flexget";
repo = "Flexget";
rev = "refs/tags/v${version}";
hash = "sha256-cdmW0VSWjr3rm/1T0uDy1iPm3ojR5wrgRixyjIQhodU=";
hash = "sha256-L3AQCc5ErWjMATKMSZf9r+4rfFA8SjCCcT0rW9oMmbA=";
};
postPatch = ''
@@ -0,0 +1,73 @@
{ lib
, stdenv
, fetchFromGitHub
, writeText
, fontconfig
, libX11
, libXft
, libXcursor
, libXcomposite
, conf ? null
, nixosTests
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ragnarwm";
version = "1.3.1";
src = fetchFromGitHub {
owner = "cococry";
repo = "Ragnar";
rev = finalAttrs.version;
hash = "sha256-SZWhmFNmS2oLdO9BnPzimoind1452v/EEQzadc5A+bI";
};
prePatch = ''
substituteInPlace Makefile \
--replace '/usr/bin' "$out/bin" \
--replace '/usr/share' "$out/share"
'';
postPatch =
let
configFile =
if lib.isDerivation conf || builtins.isPath conf
then conf else writeText "config.h" conf;
in
lib.optionalString (conf != null) "cp ${configFile} config.h";
buildInputs = [
fontconfig
libX11
libXft
libXcursor
libXcomposite
];
makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
enableParallelBuilding = true;
preInstall = ''
mkdir -p $out/bin
mkdir -p $out/share/applications
'';
postInstall = ''
install -Dm644 $out/share/applications/ragnar.desktop $out/share/xsessions/ragnar.desktop
'';
passthru = {
tests.ragnarwm = nixosTests.ragnarwm;
providedSessions = [ "ragnar" ];
};
meta = with lib; {
description = "Minimal, flexible & user-friendly X tiling window manager";
homepage = "https://ragnar-website.vercel.app";
changelog = "https://github.com/cococry/Ragnar/releases/tag/${finalAttrs.version}";
license = licenses.gpl3Only;
maintainers = with maintainers; [ sigmanificient ];
mainProgram = "ragnar";
platforms = platforms.linux;
};
})
@@ -8,11 +8,11 @@ assert odbcSupport -> unixODBC != null;
stdenv.mkDerivation rec {
pname = "freetds";
version = "1.3.18";
version = "1.3.20";
src = fetchurl {
url = "https://www.freetds.org/files/stable/${pname}-${version}.tar.bz2";
sha256 = "sha256-HYVh1XxxmRoo9GgTQ3hcI6aj61TVvNI4l9B+OCX/LVY=";
sha256 = "sha256-IK4R87gG5PvA+gtZMftHO7V0i+6dSH9qoSiFCDV4pe0=";
};
buildInputs = [
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "Libraries to natively talk to Microsoft SQL Server and Sybase databases";
homepage = "https://www.freetds.org";
changelog = "https://github.com/FreeTDS/freetds/releases/tag/v${version}";
license = licenses.lgpl2;
maintainers = with maintainers; [ peterhoeg ];
platforms = platforms.all;
@@ -9,6 +9,16 @@
, pkg-config
, withBluez ? false
, withRemote ? false
# for passthru.tests
, ettercap
, nmap
, ostinato
, tcpreplay
, vde2
, wireshark
, python3
, haskellPackages
}:
stdenv.mkDerivation rec {
@@ -44,6 +54,12 @@ stdenv.mkDerivation rec {
fi
'';
passthru.tests = {
inherit ettercap nmap ostinato tcpreplay vde2 wireshark;
inherit (python3.pkgs) pcapy-ng scapy;
haskell-pcap = haskellPackages.pcap;
};
meta = with lib; {
homepage = "https://www.tcpdump.org";
description = "Packet Capture Library";
@@ -29,6 +29,16 @@
, common-updater-scripts
, jq
, nix
# for passthru.tests
, enlightenment
, ffmpeg
, gegl
, gimp
, imagemagick
, imlib2
, vips
, xfce
}:
stdenv.mkDerivation (finalAttrs: {
@@ -193,6 +203,17 @@ stdenv.mkDerivation (finalAttrs: {
updateSource
updateLockfile
];
tests = {
inherit
gegl
gimp
imagemagick
imlib2
vips;
inherit (enlightenment) efl;
inherit (xfce) xfwm4;
ffmpeg = ffmpeg.override { withSvg = true; };
};
};
meta = with lib; {
@@ -0,0 +1,43 @@
{ buildPythonPackage
, click-odoo
, fetchPypi
, importlib-resources
, lib
, manifestoo-core
, nix-update-script
, pythonOlder
, setuptools-scm
}:
buildPythonPackage rec {
pname = "click-odoo-contrib";
version = "1.16.1";
format = "pyproject";
src = fetchPypi {
inherit pname version;
hash = "sha256-VFoS/lOw/jbJNj9xfgZHKzR6JDTwnlCAItq4mZ3RA6I=";
};
nativeBuildInputs = [
setuptools-scm
];
propagatedBuildInputs = [
click-odoo
manifestoo-core
] ++ lib.optionals (pythonOlder "3.9") [ importlib-resources ];
SETUPTOOLS_SCM_PRETEND_VERSION = version;
passthru.updateScript = nix-update-script { };
pythonImportsCheck = [ "click_odoo_contrib" ];
meta = with lib; {
description = "Collection of community-maintained scripts for Odoo maintenance";
homepage = "https://github.com/acsone/click-odoo-contrib";
license = licenses.lgpl3Only;
maintainers = with maintainers; [ yajo ];
};
}
@@ -0,0 +1,37 @@
{ buildPythonPackage
, click
, fetchPypi
, lib
, nix-update-script
, setuptools-scm
}:
buildPythonPackage rec {
pname = "click-odoo";
version = "1.6.0";
format = "pyproject";
src = fetchPypi {
inherit pname version;
hash = "sha256-zyfgsHzIoz4lnqANe63b2oqgD/oxBbTbJYEedfSHWQ8=";
};
nativeBuildInputs = [
setuptools-scm
];
propagatedBuildInputs = [
click
];
SETUPTOOLS_SCM_PRETEND_VERSION = version;
passthru.updateScript = nix-update-script { };
meta = with lib; {
description = "Odoo scripting helper library";
homepage = "https://github.com/acsone/click-odoo";
license = licenses.lgpl3Only;
maintainers = with maintainers; [ yajo ];
};
}
@@ -0,0 +1,40 @@
{ buildPythonPackage
, typing-extensions
, fetchPypi
, lib
, nix-update-script
, hatch-vcs
, pythonOlder
, importlib-resources
}:
buildPythonPackage rec {
pname = "manifestoo-core";
version = "0.11.0";
format = "pyproject";
src = fetchPypi {
inherit version;
pname = "manifestoo_core";
hash = "sha256-ZZAJDOtGcYWm0yS5bMOUdM1Jf+kfurwiLsJwyTYPz/4=";
};
nativeBuildInputs = [
hatch-vcs
];
propagatedBuildInputs =
lib.optionals (pythonOlder "3.7") [ importlib-resources ]
++ lib.optionals (pythonOlder "3.8") [ typing-extensions ];
SETUPTOOLS_SCM_PRETEND_VERSION = version;
passthru.updateScript = nix-update-script { };
meta = with lib; {
description = "A library to reason about Odoo addons manifests";
homepage = "https://github.com/acsone/manifestoo-core";
license = licenses.lgpl3Only;
maintainers = with maintainers; [ yajo ];
};
}
@@ -0,0 +1,51 @@
{ buildPythonPackage
, fetchPypi
, hatch-vcs
, importlib-metadata
, lib
, manifestoo-core
, nix-update-script
, pytestCheckHook
, pythonOlder
, textual
, typer
, typing-extensions
}:
buildPythonPackage rec {
pname = "manifestoo";
version = "0.7";
format = "pyproject";
src = fetchPypi {
inherit pname version;
hash = "sha256-gCGchc+fShBgt6fVJAx80+QnH+vxWo3jsIyePkFwhYE=";
};
nativeBuildInputs = [
hatch-vcs
];
nativeCheckInputs = [
pytestCheckHook
];
propagatedBuildInputs = [
manifestoo-core
textual
typer
]
++ typer.passthru.optional-dependencies.all
++ lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
SETUPTOOLS_SCM_PRETEND_VERSION = version;
passthru.updateScript = nix-update-script { };
meta = with lib; {
description = "A tool to reason about Odoo addons manifests";
homepage = "https://github.com/acsone/manifestoo";
license = licenses.mit;
maintainers = with maintainers; [ yajo ];
};
}
@@ -8,7 +8,7 @@
buildPythonPackage rec {
pname = "msgspec";
version = "0.18.1";
version = "0.18.2";
format = "setuptools";
disabled = pythonOlder "3.8";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
owner = "jcrist";
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-cacwbl5JYqQGXhdt/F0nhX032GCw8RwFi0XBsn7dlq0=";
hash = "sha256-t5TM7CgVIxdXR6jMOXh1XhpA9vBrYHBcR2iLYP4A/Jc=";
};
# Requires libasan to be accessible
@@ -1,4 +1,4 @@
{ lib, buildPythonPackage, fetchFromGitHub, numpy, scipy, pillow }:
{ lib, buildPythonPackage, fetchFromGitHub, numpy, scipy, pillow, fetchpatch }:
buildPythonPackage rec {
pname = "pyssim";
@@ -14,6 +14,18 @@ buildPythonPackage rec {
sha256 = "sha256-VvxQTvDTDms6Ccyclbf9P0HEQksl5atPPzHuH8yXTmc=";
};
patches = [
# "Replace Image.ANTIALIAS with Image.LANCZOS"
# Image.ANTIALIAS has been removed in Pillow 10.0.0,
# the version currently in nixpkgs,
# and Image.LANCZOS is a drop-in since Pillow 2.7.0.
# https://github.com/jterrace/pyssim/pull/45
(fetchpatch {
url = "https://github.com/jterrace/pyssim/commit/db4296c12ca9c027eb9cd61b52195a78dfcc6711.patch";
hash = "sha256-wNp47EFtjXv6jIFX25IErXg83ksmGRNFKNeMFS+tP6s=";
})
];
# Tests are copied from .travis.yml
checkPhase = ''
$out/bin/pyssim test-images/test1-1.png test-images/test1-1.png | grep 1
@@ -0,0 +1,76 @@
{ buildPythonPackage
, fetchFromGitHub
, lib
, nix-update-script
, pytestCheckHook
, git
, setuptools-scm
, writeScript
}:
buildPythonPackage rec {
pname = "setuptools-odoo";
version = "3.1.12";
src = fetchFromGitHub {
owner = "acsone";
repo = pname;
rev = version;
hash = "sha256-GIX21gOENE0r3yFIyzwjaoEcb0XvuCqiPU8F3GLxNt4=";
};
propagatedBuildInputs = [
setuptools-scm
];
# HACK https://github.com/NixOS/nixpkgs/pull/229460
SETUPTOOLS_SCM_PRETEND_VERSION = version;
patchPhase = ''
runHook prePatch
old_manifest="$(cat MANIFEST.in 2>/dev/null || true)"
echo 'global-include **' > MANIFEST.in
echo "$old_manifest" >> MANIFEST.in
runHook postPatch
'';
pythonImportsCheck = [
"setuptools_odoo"
];
setupHook = writeScript "setupHook.sh" ''
setuptoolsOdooHook() {
# Don't look for a version suffix from git when building addons
export SETUPTOOLS_ODOO_POST_VERSION_STRATEGY_OVERRIDE=none
# Let setuptools-odoo know which files to install, when Git is missing
# HACK https://github.com/acsone/setuptools-odoo/issues/20#issuecomment-340192355
echo 'recursive-include odoo/addons/* **' >> MANIFEST.in
# Make sure you can import the built addon
for manifest in $(find -L . -name __manifest__.py); do
export pythonImportsCheck="$pythonImportsCheck odoo.addons.$(basename $(dirname $manifest))"
done
}
preBuildHooks+=(setuptoolsOdooHook)
'';
nativeCheckInputs = [ pytestCheckHook git ];
disabledTests = [
"test_addon1_uncommitted_change"
"test_addon1"
"test_addon2_uncommitted_version_change"
"test_odoo_addon1_sdist"
"test_odoo_addon1"
"test_odoo_addon5_wheel"
];
passthru.updateScript = nix-update-script { };
meta = {
description = "Setuptools plugin for Odoo addons";
homepage = "https://github.com/acsone/setuptools-odoo";
license = lib.licenses.lgpl3Only;
maintainers = with lib.maintainers; [ yajo ];
};
}
@@ -1,7 +1,7 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, pythonOlder
, python
, poetry-core
, pytest
, colored
@@ -13,7 +13,7 @@ buildPythonPackage rec {
version = "4.0.8";
format = "pyproject";
disabled = pythonOlder "3.8.1";
disabled = lib.versionOlder python.version "3.8.1";
src = fetchFromGitHub {
owner = "tophat";
@@ -22,14 +22,14 @@ with py.pkgs;
buildPythonApplication rec {
pname = "checkov";
version = "2.4.10";
version = "2.4.12";
format = "setuptools";
src = fetchFromGitHub {
owner = "bridgecrewio";
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-L5BRpwWAP4WyP3kyzp8ELVnXth84jRwP9wmj9kA+xcw=";
hash = "sha256-DBwYEE/JyjN97VZX1bwooozFONwMf9w31NTlzDA058k=";
};
patches = [
@@ -25,11 +25,11 @@ in
stdenv.mkDerivation rec {
pname = "liquibase";
version = "4.23.0";
version = "4.23.1";
src = fetchurl {
url = "https://github.com/liquibase/liquibase/releases/download/v${version}/${pname}-${version}.tar.gz";
hash = "sha256-mIuHNNo/L5h2RvpTN0jZt6ri+Il0H9aSL4auOjIepjU=";
hash = "sha256-uWZ9l6C6QlVHqp/ma6/sz07zuCHpGucy7GhNDq8v1/U=";
};
nativeBuildInputs = [ makeWrapper ];
+3 -3
View File
@@ -12,13 +12,13 @@
rustPlatform.buildRustPackage rec {
pname = "kdash";
version = "0.4.0";
version = "0.4.2";
src = fetchFromGitHub {
owner = "kdash-rs";
repo = pname;
rev = "v${version}";
sha256 = "sha256-U2Ne0wDgPkNZa68KbJ9Hke5l+tBAf7imu1Cj+r/uZUE=";
sha256 = "sha256-PjkRE4JWDxiDKpENN/yDnO45CegxLPov/EhxnUbmpOg=";
};
nativeBuildInputs = [ perl python3 pkg-config ];
@@ -26,7 +26,7 @@ rustPlatform.buildRustPackage rec {
buildInputs = [ openssl xorg.xcbutil ]
++ lib.optional stdenv.isDarwin AppKit;
cargoHash = "sha256-dX5p+eLhZlU1Xg2SoqtEYb8T3/lvoJa78zgQStLPZNE=";
cargoHash = "sha256-nCFXhAaVrIkm6XOSa1cDCxukbf/CVmwPEu6gk7VybVQ=";
meta = with lib; {
description = "A simple and fast dashboard for Kubernetes";
@@ -5,16 +5,16 @@
rustPlatform.buildRustPackage rec {
pname = "neocmakelsp";
version = "0.6.1";
version = "0.6.3";
src = fetchFromGitHub {
owner = "Decodetalkers";
repo = "neocmakelsp";
rev = "v${version}";
hash = "sha256-wwFek9668tC+j2F12b9YiYbYJWp5z4J4F09dlj+hlq0=";
hash = "sha256-8FQFg9EV50wGnhAoK6TNL2n7BSuvJnVw73LRNdmaegw=";
};
cargoHash = "sha256-XmacBalkevCmYxWFcez/++1ng2yyURge466VX6QZC9M=";
cargoHash = "sha256-HWu+SYwjnZCv9K9Uru3YlZukpjK9+en2HBMTbRz5oW4=";
meta = with lib; {
description = "A cmake lsp based on tower-lsp and treesitter";
@@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-udeps";
version = "0.1.41";
version = "0.1.42";
src = fetchFromGitHub {
owner = "est31";
repo = pname;
rev = "v${version}";
sha256 = "sha256-LfPhs3hTM47ktDSSC5TVYQoJa4OzMfL7zKLWV4d6bAA=";
sha256 = "sha256-8CQnmUk7jMlcdtZh6046B5duKnZKaMVk2xG4D2svqVw=";
};
cargoHash = "sha256-NBxQ75J60kZX6ASk3/42N5JT6pDLEZpnZtUCgRDOvSY=";
cargoHash = "sha256-e3ku9c4VLZtnJIUDRMAcUVaJnOsMqckj3XmuJHSR364=";
nativeBuildInputs = [ pkg-config ];
@@ -5,16 +5,16 @@
rustPlatform.buildRustPackage rec {
pname = "leptosfmt";
version = "0.1.12";
version = "0.1.13";
src = fetchFromGitHub {
owner = "bram209";
repo = "leptosfmt";
rev = version;
hash = "sha256-RR4gwmYna/mvUw5akQutWKaUCWzCjK512gynR9Pddd0=";
hash = "sha256-QitvZ0AkZcXmjv8EnewWjexQMVEHy/naUarBIrzHbBA=";
};
cargoHash = "sha256-6du44SfH0dT1gWVFluB3+AA3GUzwN7Sjh03rKhSRKCM=";
cargoHash = "sha256-Fjj4lgkdHeA/3ajNbF1vTf6/YzGvDUJsDmiXzkEpels=";
meta = with lib; {
description = "A formatter for the leptos view! macro";
@@ -123,7 +123,7 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "fwupd";
version = "1.9.3";
version = "1.9.4";
# libfwupd goes to lib
# daemon, plug-ins and libfwupdplugin go to out
@@ -134,7 +134,7 @@ stdenv.mkDerivation (finalAttrs: {
owner = "fwupd";
repo = "fwupd";
rev = finalAttrs.version;
hash = "sha256-IVP5RVHRxWkvPqndiuCxiguYWN5d32qJo9YzBOHoyUk";
hash = "sha256-xjN6nHqg7sQzgojClySQEjLQBdI5291TxPhgLjKzKvk=";
};
patches = [
@@ -212,9 +212,6 @@ stdenv.mkDerivation (finalAttrs: {
"-Dplugin_dummy=true"
# We are building the official releases.
"-Dsupported_build=enabled"
# Would dlopen libsoup to preserve compatibility with clients linking against older fwupd.
# https://github.com/fwupd/fwupd/commit/173d389fa59d8db152a5b9da7cc1171586639c97
"-Dsoup_session_compat=false"
"-Dudevdir=lib/udev"
"-Dsystemd_root_prefix=${placeholder "out"}"
"-Dinstalled_test_prefix=${placeholder "installedTests"}"
@@ -399,7 +396,7 @@ stdenv.mkDerivation (finalAttrs: {
meta = with lib; {
homepage = "https://fwupd.org/";
maintainers = with maintainers; [ ];
maintainers = with maintainers; [ rvdp ];
license = licenses.lgpl21Plus;
platforms = platforms.linux;
};
+26
View File
@@ -1,6 +1,18 @@
{ stdenv, lib, buildPackages, fetchurl, attr, runtimeShell
, usePam ? !isStatic, pam ? null
, isStatic ? stdenv.hostPlatform.isStatic
# passthru.tests
, bind
, chrony
, htop
, libgcrypt
, libvirt
, ntp
, qemu
, squid
, tor
, uwsgi
}:
assert usePam -> pam != null;
@@ -57,6 +69,20 @@ stdenv.mkDerivation rec {
mv "$lib"/lib/security "$pam/lib"
'';
passthru.tests = {
inherit
bind
chrony
htop
libgcrypt
libvirt
ntp
qemu
squid
tor
uwsgi;
};
meta = {
description = "Library for working with POSIX capabilities";
homepage = "https://sites.google.com/site/fullycapable";
+3 -3
View File
@@ -4,9 +4,9 @@
"sha256": "sha256-EU6T9yQCdOLx98Io8o01rEsgxDFF/Xoy42LgPopD2/A="
},
"invidious": {
"rev": "34508966027fce3f460d9670eeecef67b92565a0",
"sha256": "sha256-z+6YHhESb0Ws9DRaVH4AR2i/SaWgM9OhTzxdY1bkv/0=",
"version": "unstable-2023-08-07"
"rev": "1377f2ce7d0a8fed716e8e285902bfbfef1a17e0",
"sha256": "sha256-ro5XneQqKGOfR7UZrowiht5V45s7EgkpbJiyBoLcnBo=",
"version": "unstable-2023-08-25"
},
"lsquic": {
"sha256": "sha256-hG8cUvhbCNeMOsKkaJlgGpzUrIx47E/WhmPIdI5F3qM=",
+3 -3
View File
@@ -8,20 +8,20 @@
rustPlatform.buildRustPackage rec {
pname = "awsbck";
version = "0.3.3";
version = "0.3.4";
src = fetchFromGitHub {
owner = "beeb";
repo = "awsbck";
rev = "v${version}";
hash = "sha256-L5hQ6vwuC9HuAGD9mvS8BGkPV3Ry5jJgRUF4Qf7fqaM=";
hash = "sha256-MDlFCbBAvGovhCO5uxXRQhIN4Fw9wav0afIBNzz3Mow=";
};
nativeBuildInputs = [ installShellFiles ];
buildInputs = lib.optionals stdenv.isDarwin [ Security ];
cargoSha256 = "sha256-VKm27IzCUv3e1Mapb46SBJqvEwifgGxaRX2uM9MTNnQ=";
cargoSha256 = "sha256-p7t/QtihdP6dyJ7tKpNkqcyYJvFJG8+fPqSGH7DNAtg=";
doCheck = false;
+4 -4
View File
@@ -1,15 +1,15 @@
{ fetchCrate, lib, rustPlatform }:
{ lib, rustPlatform, fetchCrate }:
rustPlatform.buildRustPackage rec {
pname = "textplots";
version = "0.8.0";
version = "0.8.1";
src = fetchCrate {
inherit pname version;
sha256 = "07lxnvg8g24r1j6h07w91j5lp0azngmb76lagk55y28br0y70qr4";
hash = "sha256-fzuvJwxU6Vi9hWW0IcRAHUeSoOBpGyebzvgjKiYxAbs=";
};
cargoSha256 = "19xb1ann3bqx26nhjjvcwqdsvzg7lflg9fdrnlx05ndd2ip44flz";
cargoHash = "sha256-QH27BjS75jZOQBBflGapAjg49LpG12DxWZo8TjLoXmI=";
meta = with lib; {
description = "Terminal plotting written in Rust";
+5 -4
View File
@@ -1,21 +1,22 @@
{ fetchFromGitHub, lib, rustPlatform }:
{ lib, rustPlatform, fetchFromGitHub }:
rustPlatform.buildRustPackage rec {
pname = "nomino";
version = "1.3.1";
version = "1.3.2";
src = fetchFromGitHub {
owner = "yaa110";
repo = pname;
rev = version;
sha256 = "sha256-XUxoHmZePn/VVlu2KctC+TbmCwp+tYEYg5EYXI8ZB7o=";
hash = "sha256-pzAL7e72sO94qLEwsH/5RuiuzvnsSelIq47jdU8INDw=";
};
cargoSha256 = "sha256-RyEqDC2gRacd27uvNf3XOATZdeVg70vBEdPURNuf38w=";
cargoHash = "sha256-gDOZ3nD7pTIRNXG3S+qTkl+HInBcAErvwPqa0NZWxY4=";
meta = with lib; {
description = "Batch rename utility for developers";
homepage = "https://github.com/yaa110/nomino";
changelog = "https://github.com/yaa110/nomino/releases/tag/${src.rev}";
license = with licenses; [ mit /* or */ asl20 ];
maintainers = with maintainers; [ figsoda ];
};
+3 -3
View File
@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "frp";
version = "0.51.2";
version = "0.51.3";
src = fetchFromGitHub {
owner = "fatedier";
repo = pname;
rev = "v${version}";
sha256 = "sha256-uiF27qGHwAg05o9thCxIf6Z2xhMnKzhDgMKTuS6IJ8A=";
sha256 = "sha256-ijcYSuB91I9lD4qx6ohVFDQgTE0+FTQ5Hr1heNwKyUo=";
};
vendorHash = "sha256-sqlBgEfIWuDnGsepSZtrgxmG/DoP+Hc4c3nOpo8S/Ks=";
vendorHash = "sha256-DFQ59E24LR5/qodtge0EsqajvrjPN0otpxGB8JQ0ERw=";
doCheck = false;
+3 -2
View File
@@ -18,11 +18,11 @@ assert usePcre -> pcre != null;
stdenv.mkDerivation (finalAttrs: {
pname = "haproxy";
version = "2.8.1";
version = "2.8.2";
src = fetchurl {
url = "https://www.haproxy.org/download/${lib.versions.majorMinor finalAttrs.version}/src/haproxy-${finalAttrs.version}.tar.gz";
hash = "sha256-SFVS/NnV1fQarQRvEx/Ap+hJvvJaNJoEB1CvDG/FaAc=";
hash = "sha256-aY1pBtFwlGqGl2mWTleBa6PaOt9h/3XomXKxN/RljbA=";
};
buildInputs = [ openssl zlib libxcrypt ]
@@ -76,5 +76,6 @@ stdenv.mkDerivation (finalAttrs: {
'';
maintainers = with lib.maintainers; [ ];
platforms = with lib.platforms; linux ++ darwin;
mainProgram = "haproxy";
};
})
@@ -0,0 +1,31 @@
{ lib, buildGo118Module, fetchFromGitHub }:
buildGo118Module rec {
pname = "ssl-proxy";
version = "0.2.7";
src = fetchFromGitHub {
owner = "suyashkumar";
repo = "ssl-proxy";
rev = "v${version}";
hash = "sha256-c9BLdDlkrg1z1QrO+vEAVyPtrV/nQcYlGXFmwfAOSpQ=";
};
vendorHash = "sha256-310K9ZSxy/OQ4HYFCcHQaj4NQwzATrOZ2YkhiSkhY5I=";
checkTarget = "test";
meta = with lib; {
homepage = "https://github.com/suyashkumar/ssl-proxy";
description = "Simple single-command SSL reverse proxy with autogenerated certificates (LetsEncrypt, self-signed)";
longDescription = ''
A handy and simple way to add SSL to your thing running on a VM--be it your personal jupyter
notebook or your team jenkins instance. ssl-proxy autogenerates SSL certs and proxies
HTTPS traffic to an existing HTTP server in a single command.
'';
license = licenses.mit;
mainProgram = "ssl-proxy";
maintainers = [ maintainers.konst-aa ];
platforms = platforms.linux ++ platforms.darwin ++ platforms.windows ;
};
}
+19 -1
View File
@@ -1,4 +1,6 @@
params: with params;
{ lib, buildEnv, runCommand, writeText, makeWrapper, libfaketime, makeFontsConf
, perl, bash, coreutils, gnused, gnugrep, gawk, ghostscript
, bin, tl }:
# combine =
args@{
pkgFilter ? (pkg: pkg.tlType == "run" || pkg.tlType == "bin" || pkg.pname == "core"
@@ -8,6 +10,22 @@ args@{
, ...
}:
let
# combine a set of TL packages into a single TL meta-package
combinePkgs = pkgList: lib.catAttrs "pkg" (
let
# a TeX package is an attribute set { pkgs = [ ... ]; ... } where pkgs is a list of derivations
# the derivations make up the TeX package and optionally (for backward compatibility) its dependencies
tlPkgToSets = { pkgs, ... }: map ({ tlType, version ? "", outputName ? "", ... }@pkg: {
# outputName required to distinguish among bin.core-big outputs
key = "${pkg.pname or pkg.name}.${tlType}-${version}-${outputName}";
inherit pkg;
}) pkgs;
pkgListToSets = lib.concatMap tlPkgToSets; in
builtins.genericClosure {
startSet = pkgListToSets pkgList;
operator = { pkg, ... }: pkgListToSets (pkg.tlDeps or []);
});
pkgSet = removeAttrs args [ "pkgFilter" "extraName" "extraVersion" ];
pkgList = rec {
combined = combinePkgs (lib.attrValues pkgSet);
+10 -418
View File
@@ -23,8 +23,8 @@ let
# function for creating a working environment from a set of TL packages
combine = import ./combine.nix {
inherit bin combinePkgs buildEnv lib makeWrapper writeText runCommand
stdenv perl libfaketime makeFontsConf bash tl coreutils gawk gnugrep gnused;
inherit bin buildEnv lib makeWrapper writeText runCommand
perl libfaketime makeFontsConf bash tl coreutils gawk gnugrep gnused;
ghostscript = ghostscript_headless;
};
@@ -34,406 +34,14 @@ let
# the set of TeX Live packages, collections, and schemes; using upstream naming
overriddenTlpdb = let
# most format -> engine links are generated by texlinks according to fmtutil.cnf at combine time
# so we remove them from binfiles, and add back the ones texlinks purposefully ignore (e.g. mptopdf)
removeFormatLinks = lib.mapAttrs (_: attrs:
if (attrs ? formats && attrs ? binfiles)
then let formatLinks = lib.catAttrs "name" (lib.filter (f: f.name != f.engine) attrs.formats);
binNotFormats = lib.subtractLists formatLinks attrs.binfiles;
in if binNotFormats != [] then attrs // { binfiles = binNotFormats; } else removeAttrs attrs [ "binfiles" ]
else attrs);
orig = removeFormatLinks (removeAttrs tlpdb [ "00texlive.config" ]); in
lib.recursiveUpdate orig rec {
#### overrides of texlive.tlpdb
#### nonstandard script folders
context.scriptsFolder = "context/stubs/unix";
cyrillic-bin.scriptsFolder = "texlive-extra";
fontinst.scriptsFolder = "texlive-extra";
mptopdf.scriptsFolder = "context/perl";
pdftex.scriptsFolder = "simpdftex";
texlive-scripts.scriptsFolder = "texlive";
texlive-scripts-extra.scriptsFolder = "texlive-extra";
xetex.scriptsFolder = "texlive-extra";
#### interpreters not detected by looking at the script extensions
ctanbib.extraBuildInputs = [ bin.luatex ];
de-macro.extraBuildInputs = [ python3 ];
match_parens.extraBuildInputs = [ ruby ];
optexcount.extraBuildInputs = [ python3 ];
pdfbook2.extraBuildInputs = [ python3 ];
texlogsieve.extraBuildInputs = [ bin.luatex ];
#### perl packages
crossrefware.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ LWP URI ])) ];
ctan-o-mat.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ LWP LWPProtocolHttps ])) ];
ctanify.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileCopyRecursive ])) ];
ctanupload.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ HTMLFormatter WWWMechanize ])) ];
exceltex.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ SpreadsheetParseExcel ])) ];
latex-git-log.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ IPCSystemSimple ])) ];
latexindent.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileHomeDir LogDispatch LogLog4perl UnicodeLineBreak YAMLTiny ])) ];
pax.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileWhich ])) ];
ptex-fontmaps.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ Tk ])) ];
purifyeps.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileWhich ])) ];
svn-multi.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ TimeDate ])) ];
texdoctk.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ Tk ])) ];
ulqda.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ DigestSHA1 ])) ];
#### python packages
pythontex.extraBuildInputs = [ (python3.withPackages (ps: with ps; [ pygments ])) ];
#### other runtime PATH dependencies
a2ping.extraBuildInputs = [ ghostscript_headless ];
bibexport.extraBuildInputs = [ gnugrep ];
checklistings.extraBuildInputs = [ coreutils ];
cjk-gs-integrate.extraBuildInputs = [ ghostscript_headless ];
context.extraBuildInputs = [ coreutils ruby ];
cyrillic-bin.extraBuildInputs = [ coreutils gnused ];
dtxgen.extraBuildInputs = [ coreutils getopt gnumake zip ];
dviljk.extraBuildInputs = [ coreutils ];
epspdf.extraBuildInputs = [ ghostscript_headless ];
epstopdf.extraBuildInputs = [ ghostscript_headless ];
fragmaster.extraBuildInputs = [ ghostscript_headless ];
installfont.extraBuildInputs = [ coreutils getopt gnused ];
latexfileversion.extraBuildInputs = [ coreutils gnugrep gnused ];
listings-ext.extraBuildInputs = [ coreutils getopt ];
ltxfileinfo.extraBuildInputs = [ coreutils getopt gnused ];
ltximg.extraBuildInputs = [ ghostscript_headless ];
luaotfload.extraBuildInputs = [ ncurses ];
makeindex.extraBuildInputs = [ coreutils gnused ];
pagelayout.extraBuildInputs = [ gnused ncurses ];
pdfcrop.extraBuildInputs = [ ghostscript_headless ];
pdftex.extraBuildInputs = [ coreutils ghostscript_headless gnused ];
pdftex-quiet.extraBuildInputs = [ coreutils ];
pdfxup.extraBuildInputs = [ coreutils ghostscript_headless ];
pkfix-helper.extraBuildInputs = [ ghostscript_headless ];
ps2eps.extraBuildInputs = [ ghostscript_headless ];
pst2pdf.extraBuildInputs = [ ghostscript_headless ];
tex4ht.extraBuildInputs = [ ruby ];
texlive-scripts.extraBuildInputs = [ gnused ];
texlive-scripts-extra.extraBuildInputs = [ coreutils findutils ghostscript_headless gnused ];
thumbpdf.extraBuildInputs = [ ghostscript_headless ];
tpic2pdftex.extraBuildInputs = [ gawk ];
wordcount.extraBuildInputs = [ coreutils gnugrep ];
xdvi.extraBuildInputs = [ coreutils gnugrep ];
xindy.extraBuildInputs = [ gzip ];
#### adjustments to binaries
# TODO patch the scripts from bin.* directly in bin.* instead of here
# mptopdf is a format link, but not generated by texlinks
# so we add it back to binfiles to generate it from mkPkgBin
mptopdf.binfiles = (orig.mptopdf.binfiles or []) ++ [ "mptopdf" ];
# remove man
texlive-scripts.binfiles = lib.remove "man" orig.texlive-scripts.binfiles;
# upmendex is "TODO" in bin.nix
uptex.binfiles = lib.remove "upmendex" orig.uptex.binfiles;
# xindy is broken on some platforms unfortunately
xindy.binfiles = if bin ? xindy
then lib.subtractLists [ "xindy.mem" "xindy.run" ] orig.xindy.binfiles
else [];
#### additional symlinks
cluttex.binlinks = {
cllualatex = "cluttex";
clxelatex = "cluttex";
};
epstopdf.binlinks.repstopdf = "epstopdf";
pdfcrop.binlinks.rpdfcrop = "pdfcrop";
ptex.binlinks = {
pdvitomp = bin.metapost + "/bin/pdvitomp";
pmpost = bin.metapost + "/bin/pmpost";
r-pmpost = bin.metapost + "/bin/r-pmpost";
};
texdef.binlinks = {
latexdef = "texdef";
};
texlive-scripts.binlinks = {
mktexfmt = "fmtutil";
texhash = (lib.last tl."texlive.infra".pkgs) + "/bin/mktexlsr";
};
texlive-scripts-extra.binlinks = {
allec = "allcm";
kpsepath = "kpsetool";
kpsexpand = "kpsetool";
};
# metapost binaries are in bin.metapost instead of bin.core
uptex.binlinks = {
r-upmpost = bin.metapost + "/bin/r-upmpost";
updvitomp = bin.metapost + "/bin/updvitomp";
upmpost = bin.metapost + "/bin/upmpost";
};
#### add PATH dependencies without wrappers
# TODO deduplicate this code
a2ping.postFixup = ''
sed -i '6i$ENV{PATH}='"'"'${lib.makeBinPath a2ping.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/a2ping
'';
bibexport.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath bibexport.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/bibexport
'';
checklistings.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath checklistings.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/checklistings
'';
cjk-gs-integrate.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath cjk-gs-integrate.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/cjk-gs-integrate
'';
context.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath [ coreutils ]}''${PATH:+:$PATH}"' "$out"/bin/{contextjit,mtxrunjit}
sed -i '2iPATH="${lib.makeBinPath [ ruby ]}''${PATH:+:$PATH}"' "$out"/bin/texexec
'';
cyrillic-bin.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath cyrillic-bin.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/rumakeindex
'';
dtxgen.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath dtxgen.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/dtxgen
'';
dviljk.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath dviljk.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/dvihp
'';
epstopdf.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath epstopdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/epstopdf
'';
fragmaster.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath fragmaster.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/fragmaster
'';
installfont.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath installfont.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/installfont-tl
'';
latexfileversion.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath latexfileversion.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/latexfileversion
'';
listings-ext.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath listings-ext.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/listings-ext.sh
'';
ltxfileinfo.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath ltxfileinfo.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/ltxfileinfo
'';
ltximg.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath ltximg.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/ltximg
'';
luaotfload.postFixup = ''
sed -i '2ios.setenv("PATH","${lib.makeBinPath luaotfload.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/luaotfload-tool
'';
makeindex.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath makeindex.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/mkindex
'';
pagelayout.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath [ gnused ]}''${PATH:+:$PATH}"' "$out"/bin/pagelayoutapi
sed -i '2iPATH="${lib.makeBinPath [ ncurses ]}''${PATH:+:$PATH}"' "$out"/bin/textestvis
'';
pdfcrop.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pdfcrop.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pdfcrop
'';
pdftex.postFixup = ''
sed -i -e '2iPATH="${lib.makeBinPath [ coreutils gnused ]}''${PATH:+:$PATH}"' \
-e 's!^distillerpath="/usr/local/bin"$!distillerpath="${lib.makeBinPath [ ghostscript_headless ]}"!' \
"$out"/bin/simpdftex
'';
pdftex-quiet.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath pdftex-quiet.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/pdftex-quiet
'';
pdfxup.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath pdfxup.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/pdfxup
'';
pkfix-helper.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pkfix-helper.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pkfix-helper
'';
ps2eps.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath ps2eps.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/ps2eps
'';
pst2pdf.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pst2pdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pst2pdf
'';
tex4ht.postFixup = ''
sed -i -e '2iPATH="${lib.makeBinPath tex4ht.extraBuildInputs}''${PATH:+:$PATH}"' -e 's/\\rubyCall//g;' "$out"/bin/htcontext
'';
texlive-scripts.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath texlive-scripts.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/{fmtutil-user,mktexmf,mktexpk,mktextfm,updmap-user}
'';
thumbpdf.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath thumbpdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/thumbpdf
'';
tpic2pdftex.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath tpic2pdftex.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/tpic2pdftex
'';
wordcount.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath wordcount.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/wordcount
'';
# TODO patch in bin.xdvi
xdvi.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath xdvi.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/xdvi
'';
xindy.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath xindy.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/{texindy,xindy}
'';
#### other script fixes
# misc tab and python3 fixes
ebong.postFixup = ''
sed -Ei 's/import sre/import re/; s/file\(/open(/g; s/\t/ /g; s/print +(.*)$/print(\1)/g' "$out"/bin/ebong
'';
# find files in script directory, not binary directory
# add runtime dependencies to PATH
epspdf.postFixup = ''
sed -i '2ios.setenv("PATH","${lib.makeBinPath epspdf.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/epspdf
substituteInPlace "$out"/bin/epspdftk --replace '[info script]' "\"$scriptsFolder/epspdftk.tcl\""
'';
# find files in script directory, not in binary directory
latexindent.postFixup = ''
substituteInPlace "$out"/bin/latexindent --replace 'use FindBin;' "BEGIN { \$0 = '$scriptsFolder' . '/latexindent.pl'; }; use FindBin;"
'';
# Patch texlinks.sh back to 2015 version;
# otherwise some bin/ links break, e.g. xe(la)tex.
# add runtime dependencies to PATH
texlive-scripts-extra.postFixup = ''
patch -R "$out"/bin/texlinks < '${./texlinks.diff}'
sed -i '2iPATH="${lib.makeBinPath [ coreutils ]}''${PATH:+:$PATH}"' "$out"/bin/{allcm,dvired,mkocp,ps2frag}
sed -i '2iPATH="${lib.makeBinPath [ coreutils findutils ]}''${PATH:+:$PATH}"' "$out"/bin/allneeded
sed -i '2iPATH="${lib.makeBinPath [ coreutils ghostscript_headless ]}''${PATH:+:$PATH}"' "$out"/bin/dvi2fax
sed -i '2iPATH="${lib.makeBinPath [ gnused ]}''${PATH:+:$PATH}"' "$out"/bin/{kpsetool,texconfig,texconfig-sys}
sed -i '2iPATH="${lib.makeBinPath [ coreutils gnused ]}''${PATH:+:$PATH}"' "$out"/bin/texconfig-dialog
'';
# patch interpreter
texosquery.postFixup = ''
substituteInPlace "$out"/bin/* --replace java "$interpJava"
'';
# hardcode revision numbers (since texlive.infra, tlshell are not in either system or user texlive.tlpdb)
tlshell.postFixup = ''
substituteInPlace "$out"/bin/tlshell \
--replace '[dict get $::pkgs texlive.infra localrev]' '${toString orig."texlive.infra".revision}' \
--replace '[dict get $::pkgs tlshell localrev]' '${toString orig.tlshell.revision}'
'';
#### dependency changes
# it seems to need it to transform fonts
xdvi.deps = (orig.xdvi.deps or []) ++ [ "metafont" ];
# remove dependency-heavy packages from the basic collections
collection-basic.deps = lib.subtractLists [ "metafont" "xdvi" ] orig.collection-basic.deps;
# add them elsewhere so that collections cover all packages
collection-metapost.deps = orig.collection-metapost.deps ++ [ "metafont" ];
collection-plaingeneric.deps = orig.collection-plaingeneric.deps ++ [ "xdvi" ];
#### misc
# tlpdb lists license as "unknown", but the README says lppl13: http://mirrors.ctan.org/language/arabic/arabi-add/README
arabi-add.license = [ "lppl13c" ];
# TODO: remove this when updating to texlive-2023, npp-for-context is no longer in texlive
# tlpdb lists license as "noinfo", but it's gpl3: https://github.com/luigiScarso/context-npp
npp-for-context.license = [ "gpl3Only" ];
texdoc = {
extraRevision = "-tlpdb${toString tlpdbVersion.revision}";
extraVersion = "-tlpdb-${toString tlpdbVersion.revision}";
extraNativeBuildInputs = [ installShellFiles ];
# build Data.tlpdb.lua (part of the 'tlType == "run"' package)
postUnpack = ''
if [[ -f "$out"/scripts/texdoc/texdoc.tlu ]]; then
unxz --stdout "${tlpdbxz}" > texlive.tlpdb
# create dummy doc file to ensure that texdoc does not return an error
mkdir -p support/texdoc
touch support/texdoc/NEWS
TEXMFCNF="${bin.core}"/share/texmf-dist/web2c TEXMF="$out" TEXDOCS=. TEXMFVAR=. \
"${bin.luatex}"/bin/texlua "$out"/scripts/texdoc/texdoc.tlu \
-c texlive_tlpdb=texlive.tlpdb -lM texdoc
cp texdoc/cache-tlpdb.lua "$out"/scripts/texdoc/Data.tlpdb.lua
fi
'';
# install zsh completion
postFixup = ''
TEXMFCNF="${bin.core}"/share/texmf-dist/web2c TEXMF="$scriptsFolder/../.." \
texlua "$out"/bin/texdoc --print-completion zsh > "$TMPDIR"/_texdoc
substituteInPlace "$TMPDIR"/_texdoc \
--replace 'compdef __texdoc texdoc' '#compdef texdoc' \
--replace '$(kpsewhich -var-value TEXMFROOT)/tlpkg/texlive.tlpdb' '$(kpsewhich Data.tlpdb.lua)' \
--replace '/^name[^.]*$/ {print $2}' '/^ \["[^"]*"\] = {$/ { print substr($1,3,length($1)-4) }'
echo '__texdoc' >> "$TMPDIR"/_texdoc
installShellCompletion --zsh "$TMPDIR"/_texdoc
'';
};
"texlive.infra" = {
extraRevision = ".tlpdb${toString tlpdbVersion.revision}";
extraVersion = "-tlpdb-${toString tlpdbVersion.revision}";
# add license of tlmgr and TeXLive::* perl packages and of bin.core
license = [ "gpl2Plus" ] ++ lib.toList bin.core.meta.license.shortName ++ orig."texlive.infra".license or [ ];
scriptsFolder = "texlive";
extraBuildInputs = [ coreutils gnused gnupg (lib.last tl.kpathsea.pkgs) (perl.withPackages (ps: with ps; [ Tk ])) ];
# make tlmgr believe it can use kpsewhich to evaluate TEXMFROOT
postFixup = ''
substituteInPlace "$out"/bin/tlmgr \
--replace 'if (-r "$bindir/$kpsewhichname")' 'if (1)'
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath [ gnupg ]}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/tlmgr
sed -i '2iPATH="${lib.makeBinPath [ coreutils gnused (lib.last tl.kpathsea.pkgs) ]}''${PATH:+:$PATH}"' "$out"/bin/mktexlsr
'';
# add minimal texlive.tlpdb
postUnpack = ''
if [[ "$tlType" == "tlpkg" ]] ; then
xzcat "${tlpdbxz}" | sed -n -e '/^name \(00texlive.config\|00texlive.installation\)$/,/^$/p' > "$out"/texlive.tlpdb
fi
'';
};
}; # overrides
overrides = import ./tlpdb-overrides.nix {
inherit
lib bin tlpdb tlpdbxz tl
installShellFiles
coreutils findutils gawk getopt ghostscript_headless gnugrep
gnumake gnupg gnused gzip ncurses perl python3 ruby zip;
};
in overrides tlpdb;
version = {
# day of the snapshot being taken
@@ -492,22 +100,6 @@ let
// lib.optionalAttrs (args ? deps) { deps = map (n: tl.${n}) (args.deps or [ ]); })
) overriddenTlpdb;
# combine a set of TL packages into a single TL meta-package
combinePkgs = pkgList: lib.catAttrs "pkg" (
let
# a TeX package is an attribute set { pkgs = [ ... ]; ... } where pkgs is a list of derivations
# the derivations make up the TeX package and optionally (for backward compatibility) its dependencies
tlPkgToSets = { pkgs, ... }: map ({ tlType, version ? "", outputName ? "", ... }@pkg: {
# outputName required to distinguish among bin.core-big outputs
key = "${pkg.pname or pkg.name}.${tlType}-${version}-${outputName}";
inherit pkg;
}) pkgs;
pkgListToSets = lib.concatMap tlPkgToSets; in
builtins.genericClosure {
startSet = pkgListToSets pkgList;
operator = { pkg, ... }: pkgListToSets (pkg.tlDeps or []);
});
assertions = with lib;
assertMsg (tlpdbVersion.year == version.texliveYear) "TeX Live year in texlive does not match tlpdb.nix, refusing to evaluate" &&
assertMsg (tlpdbVersion.frozen == version.final) "TeX Live final status in texlive does not match tlpdb.nix, refusing to evaluate";
@@ -0,0 +1,411 @@
{ lib, tlpdb, bin, tlpdbxz, tl
, installShellFiles
, coreutils, findutils, gawk, getopt, ghostscript_headless, gnugrep
, gnumake, gnupg, gnused, gzip, ncurses, perl, python3, ruby, zip
}:
oldTlpdb:
let
tlpdbVersion = tlpdb."00texlive.config";
# most format -> engine links are generated by texlinks according to fmtutil.cnf at combine time
# so we remove them from binfiles, and add back the ones texlinks purposefully ignore (e.g. mptopdf)
removeFormatLinks = lib.mapAttrs (_: attrs:
if (attrs ? formats && attrs ? binfiles)
then let formatLinks = lib.catAttrs "name" (lib.filter (f: f.name != f.engine) attrs.formats);
binNotFormats = lib.subtractLists formatLinks attrs.binfiles;
in if binNotFormats != [] then attrs // { binfiles = binNotFormats; } else removeAttrs attrs [ "binfiles" ]
else attrs);
orig = removeFormatLinks (removeAttrs oldTlpdb [ "00texlive.config" ]);
in lib.recursiveUpdate orig rec {
#### overrides of texlive.tlpdb
#### nonstandard script folders
context.scriptsFolder = "context/stubs/unix";
cyrillic-bin.scriptsFolder = "texlive-extra";
fontinst.scriptsFolder = "texlive-extra";
mptopdf.scriptsFolder = "context/perl";
pdftex.scriptsFolder = "simpdftex";
texlive-scripts.scriptsFolder = "texlive";
texlive-scripts-extra.scriptsFolder = "texlive-extra";
xetex.scriptsFolder = "texlive-extra";
#### interpreters not detected by looking at the script extensions
ctanbib.extraBuildInputs = [ bin.luatex ];
de-macro.extraBuildInputs = [ python3 ];
match_parens.extraBuildInputs = [ ruby ];
optexcount.extraBuildInputs = [ python3 ];
pdfbook2.extraBuildInputs = [ python3 ];
texlogsieve.extraBuildInputs = [ bin.luatex ];
#### perl packages
crossrefware.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ LWP URI ])) ];
ctan-o-mat.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ LWP LWPProtocolHttps ])) ];
ctanify.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileCopyRecursive ])) ];
ctanupload.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ HTMLFormatter WWWMechanize ])) ];
exceltex.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ SpreadsheetParseExcel ])) ];
latex-git-log.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ IPCSystemSimple ])) ];
latexindent.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileHomeDir LogDispatch LogLog4perl UnicodeLineBreak YAMLTiny ])) ];
pax.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileWhich ])) ];
ptex-fontmaps.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ Tk ])) ];
purifyeps.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileWhich ])) ];
svn-multi.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ TimeDate ])) ];
texdoctk.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ Tk ])) ];
ulqda.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ DigestSHA1 ])) ];
#### python packages
pythontex.extraBuildInputs = [ (python3.withPackages (ps: with ps; [ pygments ])) ];
#### other runtime PATH dependencies
a2ping.extraBuildInputs = [ ghostscript_headless ];
bibexport.extraBuildInputs = [ gnugrep ];
checklistings.extraBuildInputs = [ coreutils ];
cjk-gs-integrate.extraBuildInputs = [ ghostscript_headless ];
context.extraBuildInputs = [ coreutils ruby ];
cyrillic-bin.extraBuildInputs = [ coreutils gnused ];
dtxgen.extraBuildInputs = [ coreutils getopt gnumake zip ];
dviljk.extraBuildInputs = [ coreutils ];
epspdf.extraBuildInputs = [ ghostscript_headless ];
epstopdf.extraBuildInputs = [ ghostscript_headless ];
fragmaster.extraBuildInputs = [ ghostscript_headless ];
installfont.extraBuildInputs = [ coreutils getopt gnused ];
latexfileversion.extraBuildInputs = [ coreutils gnugrep gnused ];
listings-ext.extraBuildInputs = [ coreutils getopt ];
ltxfileinfo.extraBuildInputs = [ coreutils getopt gnused ];
ltximg.extraBuildInputs = [ ghostscript_headless ];
luaotfload.extraBuildInputs = [ ncurses ];
makeindex.extraBuildInputs = [ coreutils gnused ];
pagelayout.extraBuildInputs = [ gnused ncurses ];
pdfcrop.extraBuildInputs = [ ghostscript_headless ];
pdftex.extraBuildInputs = [ coreutils ghostscript_headless gnused ];
pdftex-quiet.extraBuildInputs = [ coreutils ];
pdfxup.extraBuildInputs = [ coreutils ghostscript_headless ];
pkfix-helper.extraBuildInputs = [ ghostscript_headless ];
ps2eps.extraBuildInputs = [ ghostscript_headless ];
pst2pdf.extraBuildInputs = [ ghostscript_headless ];
tex4ht.extraBuildInputs = [ ruby ];
texlive-scripts.extraBuildInputs = [ gnused ];
texlive-scripts-extra.extraBuildInputs = [ coreutils findutils ghostscript_headless gnused ];
thumbpdf.extraBuildInputs = [ ghostscript_headless ];
tpic2pdftex.extraBuildInputs = [ gawk ];
wordcount.extraBuildInputs = [ coreutils gnugrep ];
xdvi.extraBuildInputs = [ coreutils gnugrep ];
xindy.extraBuildInputs = [ gzip ];
#### adjustments to binaries
# TODO patch the scripts from bin.* directly in bin.* instead of here
# mptopdf is a format link, but not generated by texlinks
# so we add it back to binfiles to generate it from mkPkgBin
mptopdf.binfiles = (orig.mptopdf.binfiles or []) ++ [ "mptopdf" ];
# remove man
texlive-scripts.binfiles = lib.remove "man" orig.texlive-scripts.binfiles;
# upmendex is "TODO" in bin.nix
uptex.binfiles = lib.remove "upmendex" orig.uptex.binfiles;
# xindy is broken on some platforms unfortunately
xindy.binfiles = if bin ? xindy
then lib.subtractLists [ "xindy.mem" "xindy.run" ] orig.xindy.binfiles
else [];
#### additional symlinks
cluttex.binlinks = {
cllualatex = "cluttex";
clxelatex = "cluttex";
};
epstopdf.binlinks.repstopdf = "epstopdf";
pdfcrop.binlinks.rpdfcrop = "pdfcrop";
ptex.binlinks = {
pdvitomp = bin.metapost + "/bin/pdvitomp";
pmpost = bin.metapost + "/bin/pmpost";
r-pmpost = bin.metapost + "/bin/r-pmpost";
};
texdef.binlinks = {
latexdef = "texdef";
};
texlive-scripts.binlinks = {
mktexfmt = "fmtutil";
texhash = (lib.last tl."texlive.infra".pkgs) + "/bin/mktexlsr";
};
texlive-scripts-extra.binlinks = {
allec = "allcm";
kpsepath = "kpsetool";
kpsexpand = "kpsetool";
};
# metapost binaries are in bin.metapost instead of bin.core
uptex.binlinks = {
r-upmpost = bin.metapost + "/bin/r-upmpost";
updvitomp = bin.metapost + "/bin/updvitomp";
upmpost = bin.metapost + "/bin/upmpost";
};
#### add PATH dependencies without wrappers
# TODO deduplicate this code
a2ping.postFixup = ''
sed -i '6i$ENV{PATH}='"'"'${lib.makeBinPath a2ping.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/a2ping
'';
bibexport.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath bibexport.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/bibexport
'';
checklistings.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath checklistings.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/checklistings
'';
cjk-gs-integrate.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath cjk-gs-integrate.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/cjk-gs-integrate
'';
context.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath [ coreutils ]}''${PATH:+:$PATH}"' "$out"/bin/{contextjit,mtxrunjit}
sed -i '2iPATH="${lib.makeBinPath [ ruby ]}''${PATH:+:$PATH}"' "$out"/bin/texexec
'';
cyrillic-bin.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath cyrillic-bin.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/rumakeindex
'';
dtxgen.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath dtxgen.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/dtxgen
'';
dviljk.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath dviljk.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/dvihp
'';
epstopdf.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath epstopdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/epstopdf
'';
fragmaster.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath fragmaster.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/fragmaster
'';
installfont.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath installfont.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/installfont-tl
'';
latexfileversion.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath latexfileversion.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/latexfileversion
'';
listings-ext.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath listings-ext.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/listings-ext.sh
'';
ltxfileinfo.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath ltxfileinfo.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/ltxfileinfo
'';
ltximg.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath ltximg.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/ltximg
'';
luaotfload.postFixup = ''
sed -i '2ios.setenv("PATH","${lib.makeBinPath luaotfload.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/luaotfload-tool
'';
makeindex.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath makeindex.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/mkindex
'';
pagelayout.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath [ gnused ]}''${PATH:+:$PATH}"' "$out"/bin/pagelayoutapi
sed -i '2iPATH="${lib.makeBinPath [ ncurses ]}''${PATH:+:$PATH}"' "$out"/bin/textestvis
'';
pdfcrop.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pdfcrop.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pdfcrop
'';
pdftex.postFixup = ''
sed -i -e '2iPATH="${lib.makeBinPath [ coreutils gnused ]}''${PATH:+:$PATH}"' \
-e 's!^distillerpath="/usr/local/bin"$!distillerpath="${lib.makeBinPath [ ghostscript_headless ]}"!' \
"$out"/bin/simpdftex
'';
pdftex-quiet.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath pdftex-quiet.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/pdftex-quiet
'';
pdfxup.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath pdfxup.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/pdfxup
'';
pkfix-helper.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pkfix-helper.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pkfix-helper
'';
ps2eps.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath ps2eps.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/ps2eps
'';
pst2pdf.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pst2pdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pst2pdf
'';
tex4ht.postFixup = ''
sed -i -e '2iPATH="${lib.makeBinPath tex4ht.extraBuildInputs}''${PATH:+:$PATH}"' -e 's/\\rubyCall//g;' "$out"/bin/htcontext
'';
texlive-scripts.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath texlive-scripts.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/{fmtutil-user,mktexmf,mktexpk,mktextfm,updmap-user}
'';
thumbpdf.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath thumbpdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/thumbpdf
'';
tpic2pdftex.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath tpic2pdftex.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/tpic2pdftex
'';
wordcount.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath wordcount.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/wordcount
'';
# TODO patch in bin.xdvi
xdvi.postFixup = ''
sed -i '2iPATH="${lib.makeBinPath xdvi.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/xdvi
'';
xindy.postFixup = ''
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath xindy.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/{texindy,xindy}
'';
#### other script fixes
# misc tab and python3 fixes
ebong.postFixup = ''
sed -Ei 's/import sre/import re/; s/file\(/open(/g; s/\t/ /g; s/print +(.*)$/print(\1)/g' "$out"/bin/ebong
'';
# find files in script directory, not binary directory
# add runtime dependencies to PATH
epspdf.postFixup = ''
sed -i '2ios.setenv("PATH","${lib.makeBinPath epspdf.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/epspdf
substituteInPlace "$out"/bin/epspdftk --replace '[info script]' "\"$scriptsFolder/epspdftk.tcl\""
'';
# find files in script directory, not in binary directory
latexindent.postFixup = ''
substituteInPlace "$out"/bin/latexindent --replace 'use FindBin;' "BEGIN { \$0 = '$scriptsFolder' . '/latexindent.pl'; }; use FindBin;"
'';
# Patch texlinks.sh back to 2015 version;
# otherwise some bin/ links break, e.g. xe(la)tex.
# add runtime dependencies to PATH
texlive-scripts-extra.postFixup = ''
patch -R "$out"/bin/texlinks < '${./texlinks.diff}'
sed -i '2iPATH="${lib.makeBinPath [ coreutils ]}''${PATH:+:$PATH}"' "$out"/bin/{allcm,dvired,mkocp,ps2frag}
sed -i '2iPATH="${lib.makeBinPath [ coreutils findutils ]}''${PATH:+:$PATH}"' "$out"/bin/allneeded
sed -i '2iPATH="${lib.makeBinPath [ coreutils ghostscript_headless ]}''${PATH:+:$PATH}"' "$out"/bin/dvi2fax
sed -i '2iPATH="${lib.makeBinPath [ gnused ]}''${PATH:+:$PATH}"' "$out"/bin/{kpsetool,texconfig,texconfig-sys}
sed -i '2iPATH="${lib.makeBinPath [ coreutils gnused ]}''${PATH:+:$PATH}"' "$out"/bin/texconfig-dialog
'';
# patch interpreter
texosquery.postFixup = ''
substituteInPlace "$out"/bin/* --replace java "$interpJava"
'';
# hardcode revision numbers (since texlive.infra, tlshell are not in either system or user texlive.tlpdb)
tlshell.postFixup = ''
substituteInPlace "$out"/bin/tlshell \
--replace '[dict get $::pkgs texlive.infra localrev]' '${toString orig."texlive.infra".revision}' \
--replace '[dict get $::pkgs tlshell localrev]' '${toString orig.tlshell.revision}'
'';
#### dependency changes
# it seems to need it to transform fonts
xdvi.deps = (orig.xdvi.deps or []) ++ [ "metafont" ];
# remove dependency-heavy packages from the basic collections
collection-basic.deps = lib.subtractLists [ "metafont" "xdvi" ] orig.collection-basic.deps;
# add them elsewhere so that collections cover all packages
collection-metapost.deps = orig.collection-metapost.deps ++ [ "metafont" ];
collection-plaingeneric.deps = orig.collection-plaingeneric.deps ++ [ "xdvi" ];
#### misc
# tlpdb lists license as "unknown", but the README says lppl13: http://mirrors.ctan.org/language/arabic/arabi-add/README
arabi-add.license = [ "lppl13c" ];
# TODO: remove this when updating to texlive-2023, npp-for-context is no longer in texlive
# tlpdb lists license as "noinfo", but it's gpl3: https://github.com/luigiScarso/context-npp
npp-for-context.license = [ "gpl3Only" ];
texdoc = {
extraRevision = "-tlpdb${toString tlpdbVersion.revision}";
extraVersion = "-tlpdb-${toString tlpdbVersion.revision}";
extraNativeBuildInputs = [ installShellFiles ];
# build Data.tlpdb.lua (part of the 'tlType == "run"' package)
postUnpack = ''
if [[ -f "$out"/scripts/texdoc/texdoc.tlu ]]; then
unxz --stdout "${tlpdbxz}" > texlive.tlpdb
# create dummy doc file to ensure that texdoc does not return an error
mkdir -p support/texdoc
touch support/texdoc/NEWS
TEXMFCNF="${bin.core}"/share/texmf-dist/web2c TEXMF="$out" TEXDOCS=. TEXMFVAR=. \
"${bin.luatex}"/bin/texlua "$out"/scripts/texdoc/texdoc.tlu \
-c texlive_tlpdb=texlive.tlpdb -lM texdoc
cp texdoc/cache-tlpdb.lua "$out"/scripts/texdoc/Data.tlpdb.lua
fi
'';
# install zsh completion
postFixup = ''
TEXMFCNF="${bin.core}"/share/texmf-dist/web2c TEXMF="$scriptsFolder/../.." \
texlua "$out"/bin/texdoc --print-completion zsh > "$TMPDIR"/_texdoc
substituteInPlace "$TMPDIR"/_texdoc \
--replace 'compdef __texdoc texdoc' '#compdef texdoc' \
--replace '$(kpsewhich -var-value TEXMFROOT)/tlpkg/texlive.tlpdb' '$(kpsewhich Data.tlpdb.lua)' \
--replace '/^name[^.]*$/ {print $2}' '/^ \["[^"]*"\] = {$/ { print substr($1,3,length($1)-4) }'
echo '__texdoc' >> "$TMPDIR"/_texdoc
installShellCompletion --zsh "$TMPDIR"/_texdoc
'';
};
"texlive.infra" = {
extraRevision = ".tlpdb${toString tlpdbVersion.revision}";
extraVersion = "-tlpdb-${toString tlpdbVersion.revision}";
# add license of tlmgr and TeXLive::* perl packages and of bin.core
license = [ "gpl2Plus" ] ++ lib.toList bin.core.meta.license.shortName ++ orig."texlive.infra".license or [ ];
scriptsFolder = "texlive";
extraBuildInputs = [ coreutils gnused gnupg (lib.last tl.kpathsea.pkgs) (perl.withPackages (ps: with ps; [ Tk ])) ];
# make tlmgr believe it can use kpsewhich to evaluate TEXMFROOT
postFixup = ''
substituteInPlace "$out"/bin/tlmgr \
--replace 'if (-r "$bindir/$kpsewhichname")' 'if (1)'
sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath [ gnupg ]}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/tlmgr
sed -i '2iPATH="${lib.makeBinPath [ coreutils gnused (lib.last tl.kpathsea.pkgs) ]}''${PATH:+:$PATH}"' "$out"/bin/mktexlsr
'';
# add minimal texlive.tlpdb
postUnpack = ''
if [[ "$tlType" == "tlpkg" ]] ; then
xzcat "${tlpdbxz}" | sed -n -e '/^name \(00texlive.config\|00texlive.installation\)$/,/^$/p' > "$out"/texlive.tlpdb
fi
'';
};
}
+4
View File
@@ -34309,6 +34309,8 @@ with pkgs;
qemacs = callPackage ../applications/editors/qemacs { };
ragnarwm = callPackage ../applications/window-managers/ragnarwm {};
rime-cli = callPackage ../applications/office/rime-cli { };
roxctl = callPackage ../applications/networking/cluster/roxctl {
@@ -42170,4 +42172,6 @@ with pkgs;
wpm = callPackage ../applications/misc/wpm { };
yazi = callPackage ../applications/file-managers/yazi { inherit (darwin.apple_sdk.frameworks) Foundation; };
ssl-proxy = callPackage ../tools/networking/ssl-proxy { };
}
+10
View File
@@ -2003,6 +2003,10 @@ self: super: with self; {
click-log = callPackage ../development/python-modules/click-log { };
click-odoo = callPackage ../development/python-modules/click-odoo { };
click-odoo-contrib = callPackage ../development/python-modules/click-odoo-contrib { };
click-option-group = callPackage ../development/python-modules/click-option-group { };
click-plugins = callPackage ../development/python-modules/click-plugins { };
@@ -6327,6 +6331,10 @@ self: super: with self; {
manifest-ml = callPackage ../development/python-modules/manifest-ml { };
manifestoo = callPackage ../development/python-modules/manifestoo { };
manifestoo-core = callPackage ../development/python-modules/manifestoo-core { };
manifestparser = callPackage ../development/python-modules/marionette-harness/manifestparser.nix { };
manuel = callPackage ../development/python-modules/manuel { };
@@ -11640,6 +11648,8 @@ self: super: with self; {
setuptools-lint = callPackage ../development/python-modules/setuptools-lint { };
setuptools-odoo = callPackage ../development/python-modules/setuptools-odoo { };
setuptools-rust = callPackage ../development/python-modules/setuptools-rust { };
setuptools-scm = callPackage ../development/python-modules/setuptools-scm { };