1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-06-10 18:12:34 +09:00

Merge master into staging-next

This commit is contained in:
github-actions[bot] 2024-10-23 00:14:18 +00:00 committed by GitHub
commit 723e1a67de
Signed by: github
GPG key ID: B5690EEEBB952194
63 changed files with 1503 additions and 876 deletions

View file

@ -9493,6 +9493,12 @@
githubId = 1318743;
name = "Ivar";
};
ivyfanchiang = {
email = "dev@ivyfanchiang.ca";
github = "hexadecimalDinosaur";
githubId = 36890802;
name = "Ivy Fan-Chiang";
};
iwanb = {
email = "tracnar@gmail.com";
github = "iwanb";

View file

@ -1471,6 +1471,7 @@
./services/web-apps/netbox.nix
./services/web-apps/nextcloud.nix
./services/web-apps/nextcloud-notify_push.nix
./services/web-apps/nextcloud-whiteboard-server.nix
./services/web-apps/nextjs-ollama-llm-ui.nix
./services/web-apps/nexus.nix
./services/web-apps/nifi.nix

View file

@ -96,7 +96,12 @@ in {
extraConfig = lib.mkOption {
description = ''
Docker extra registry configuration via environment variables.
Docker extra registry configuration.
'';
example = lib.literalExpression ''
{
log.level = "debug";
}
'';
default = {};
type = lib.types.attrs;

View file

@ -0,0 +1,72 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib)
mkIf
mkEnableOption
mkOption
types
literalExpression
;
cfg = config.services.nextcloud-whiteboard-server;
in
{
options.services.nextcloud-whiteboard-server = {
enable = mkEnableOption "Nextcloud backend server for the Whiteboard app";
settings = mkOption {
type = types.attrsOf types.str;
default = { };
description = ''
Settings to configure backend server. Especially the Nextcloud host
url has to be set. The required environment variable `JWT_SECRET_KEY`
should be set via the secrets option.
'';
example = literalExpression ''
{
NEXTCLOUD_URL = "https://nextcloud.example.org";
}
'';
};
secrets = lib.mkOption {
type = with types; listOf str;
description = ''
A list of files containing the various secrets. Should be in the
format expected by systemd's `EnvironmentFile` directory.
'';
default = [ ];
};
};
config = mkIf cfg.enable {
systemd.services.nextcloud-whiteboard-server = {
description = "Nextcloud backend server for the Whiteboard app";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
environment = cfg.settings;
serviceConfig = {
ExecStart = "${lib.getExe pkgs.nextcloud-whiteboard-server}";
WorkingDirectory = "%S/whiteboard";
StateDirectory = "whiteboard";
EnvironmentFile = [ cfg.secrets ];
DynamicUser = true;
};
};
};
meta.maintainers = with lib.maintainers; [ onny ];
}

View file

@ -107,7 +107,10 @@ let
wrapperArgsStr = if lib.isString wrapperArgs then wrapperArgs else lib.escapeShellArgs wrapperArgs;
generatedWrapperArgs =
generatedWrapperArgs = let
binPath = lib.makeBinPath (lib.optional finalAttrs.withRuby rubyEnv ++ lib.optional finalAttrs.withNodeJs nodejs);
in
# vim accepts a limited number of commands so we join them all
[
"--add-flags" ''--cmd "lua ${providerLuaRc}"''
@ -116,10 +119,15 @@ let
"--add-flags" ''--cmd "set packpath^=${finalPackdir}"''
"--add-flags" ''--cmd "set rtp^=${finalPackdir}"''
]
++ lib.optionals finalAttrs.withRuby [
"--set" "GEM_HOME" "${rubyEnv}/${rubyEnv.ruby.gemPath}"
] ++ lib.optionals (binPath != "") [
"--suffix" "PATH" ":" binPath
]
;
providerLuaRc = neovimUtils.generateProviderRc {
inherit withPython3 withNodeJs withPerl;
inherit (finalAttrs) withPython3 withNodeJs withPerl;
withRuby = rubyEnv != null;
};

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "kube-router";
version = "2.2.1";
version = "2.2.2";
src = fetchFromGitHub {
owner = "cloudnativelabs";
repo = pname;
rev = "v${version}";
hash = "sha256-Pm/CrB/RxCvEhNdCyfI7kF62cxpx96Cj2zWmW0wl5wM=";
hash = "sha256-ABSjF3Wd7Ue/c+j2BvjB0UgAMccGUgJsj33JHMG8ijs=";
};
vendorHash = "sha256-sIWRODIV3iJ5FdVjVwesqfbYivOlqZAvPSYa38vhCMA=";

View file

@ -12,7 +12,6 @@
, readline70
, xz
, cups
, glibc
, libaio
, vulkan-loader
, alsa-lib
@ -20,8 +19,7 @@
, libxcrypt-legacy
, libGL
, numactl
, libX11
, libXi
, xorg
, kmod
, python3
, autoPatchelfHook
@ -29,48 +27,17 @@
, symlinkJoin
, enableInstaller ? false, bzip2, sqlite
, enableMacOSGuests ? false, fetchFromGitHub, unzip
, enableGuestTools ? true,
}:
let
# base - versions
version = "17.5.2";
build = "23775571";
version = "17.6.1";
build = "24319023";
baseUrl = "https://softwareupdate.vmware.com/cds/vmw-desktop/ws/${version}/${build}/linux";
# tools - versions
toolsVersion = "12.4.0";
toolsBuild = "23259341";
# macOS - versions
fusionVersion = "13.5.2";
fusionBuild = "23775688";
unlockerVersion = "3.0.5";
guestToolsSrc =
let
fetchComponent = (system: hash: fetchzip {
inherit hash;
url = "${baseUrl}/packages/vmware-tools-${system}-${toolsVersion}-${toolsBuild}.x86_64.component.tar";
stripRoot = false;
} + "/vmware-tools-${system}-${toolsVersion}-${toolsBuild}.x86_64.component");
in lib.mapAttrsToList fetchComponent {
linux = "sha256-vT08mR6cCXZjiQgb9jy+MaqYzS0hFbNUM7xGAHIJ8Ao=";
linuxPreGlibc25 = "sha256-BodN1lxuhxyLlxIQSlVhGKItJ10VPlti/sEyxcRF2SA=";
netware = "sha256-o/S4wAYLR782Fn20fTQ871+rzsa1twnAxb9laV16XIk=";
solaris = "sha256-3LdFoI4TD5zxlohDGR3DRGbF6jwDZAoSMEpHWU4vSGU=";
winPre2k = "sha256-+QcvWfY3aCDxUwAfSuj7Wf9sxIO+ztWBrRolMim8Dfw=";
winPreVista = "sha256-3NgO/GdRFTpKNo45TMet0msjzxduuoF4nVLtnOUTHUA=";
windows = "sha256-2F7UPjNvtibmWAJxpB8IOnol12aMOGMy+403WeCTXw8=";
};
# macOS - ISOs
darwinIsoSrc = fetchzip {
url = "https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${fusionVersion}/${fusionBuild}/universal/core/com.vmware.fusion.zip.tar";
sha256 = "sha256-DDLRWAVRI3ZeXV5bUXWwput9mEC1qsJUsjojI0CJYMI=";
stripRoot = false;
} + "/com.vmware.fusion.zip";
# macOS - Unlocker
unlockerSrc = fetchFromGitHub {
owner = "paolo-projects";
@ -104,7 +71,6 @@ stdenv.mkDerivation rec {
readline
xz
cups
glibc
libaio
vulkan-loader
alsa-lib
@ -112,9 +78,21 @@ stdenv.mkDerivation rec {
libxcrypt-legacy
libGL
numactl
libX11
libXi
kmod
xorg.libX11
xorg.libXau
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXdmcp
xorg.libXext
xorg.libXfixes
xorg.libXft
xorg.libXinerama
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXScrnSaver
xorg.libXtst
];
nativeBuildInputs = [ python3 vmware-unpack-env autoPatchelfHook makeWrapper ]
@ -123,23 +101,13 @@ stdenv.mkDerivation rec {
src = fetchzip {
url = "${baseUrl}/core/VMware-Workstation-${version}-${build}.x86_64.bundle.tar";
sha256 = "sha256-5PZZpXN/V687TXjqeTm8MEays4/QTf02jVfdpi9C7GI=";
sha256 = "sha256-VzfiIawBDz0f1w3eynivW41Pn4SqvYf/8o9q14hln4s=";
stripRoot = false;
} + "/VMware-Workstation-${version}-${build}.x86_64.bundle";
unpackPhase = let
guestTools = lib.optionalString enableGuestTools (lib.concatMapStringsSep " " (src: "--install-component ${src}") guestToolsSrc);
in
unpackPhase =
''
${vmware-unpack-env}/bin/vmware-unpack-env -c "sh ${src} ${guestTools} --extract unpacked"
${lib.optionalString enableMacOSGuests ''
mkdir -p fusion/
unzip "${darwinIsoSrc}" \
"payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwin.iso" \
"payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwinPre15.iso" \
-d fusion/
''}
${vmware-unpack-env}/bin/vmware-unpack-env -c "sh ${src} --extract unpacked"
'';
postPatch = lib.optionalString enableMacOSGuests ''
@ -258,8 +226,8 @@ stdenv.mkDerivation rec {
--add-needed ${libpulseaudio}/lib/libpulse.so.0 \
--add-needed ${libGL}/lib/libEGL.so.1 \
--add-needed ${numactl}/lib/libnuma.so.1 \
--add-needed ${libX11}/lib/libX11.so.6 \
--add-needed ${libXi}/lib/libXi.so.6 \
--add-needed ${xorg.libX11}/lib/libX11.so.6 \
--add-needed ${xorg.libXi}/lib/libXi.so.6 \
--add-needed ${libGL}/lib/libGL.so.1 \
$out/lib/vmware/bin/$binary
done
@ -282,28 +250,6 @@ stdenv.mkDerivation rec {
unpacked="unpacked/vmware-network-editor"
cp -r $unpacked/lib $out/lib/vmware/
mkdir -p $out/lib/vmware/isoimages/
${lib.optionalString enableGuestTools ''
echo "Installing VMware Tools"
cp unpacked/vmware-tools-linux/linux.iso \
unpacked/vmware-tools-linuxPreGlibc25/linuxPreGlibc25.iso \
unpacked/vmware-tools-netware/netware.iso \
unpacked/vmware-tools-solaris/solaris.iso \
unpacked/vmware-tools-winPre2k/winPre2k.iso \
unpacked/vmware-tools-winPreVista/winPreVista.iso \
unpacked/vmware-tools-windows/windows.iso \
$out/lib/vmware/isoimages/
''}
${lib.optionalString enableMacOSGuests ''
echo "Installing VMWare Tools for MacOS"
cp -v \
"fusion/payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwin.iso" \
"fusion/payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwinPre15.iso" \
$out/lib/vmware/isoimages/
''}
## VMware Player Application
echo "Installing VMware Player Application"
unpacked="unpacked/vmware-player-app"
@ -408,6 +354,14 @@ stdenv.mkDerivation rec {
rm $out/lib/vmware/bin/vmware-vmx
ln -s /run/wrappers/bin/vmware-vmx $out/lib/vmware/bin/vmware-vmx
# Remove shipped X11 libraries
for lib in $out/lib/vmware/lib/* $out/lib/vmware-ovftool/lib*.so*; do
lib_name="$(basename "$lib")"
if [[ "$lib_name" == libX* || "$lib_name" == libxcb* ]]; then
rm -rf "$lib"
fi
done
runHook postInstall
'';

View file

@ -141,6 +141,12 @@ py.pkgs.buildPythonApplication rec {
export HOME=$(mktemp -d)
'';
# Propagating dependencies leaks them through $PYTHONPATH which causes issues
# when used in nix-shell.
postFixup = ''
rm $out/nix-support/propagated-build-inputs
'';
pytestFlagsArray = [
"-Wignore::DeprecationWarning"
];

View file

@ -44,12 +44,12 @@ stdenv.mkDerivation (finalAttrs: {
''
# Uses pkg_get_variable, cannot substitute prefix with that
substituteInPlace data/CMakeLists.txt \
--replace "\''${SYSTEMD_USER_DIR}" "$out/lib/systemd/user"
--replace-fail "\''${SYSTEMD_USER_DIR}" "$out/lib/systemd/user"
# Bad concatenation
substituteInPlace libmessaging-menu/messaging-menu.pc.in \
--replace "\''${exec_prefix}/@CMAKE_INSTALL_LIBDIR@" '@CMAKE_INSTALL_FULL_LIBDIR@' \
--replace "\''${prefix}/@CMAKE_INSTALL_INCLUDEDIR@" '@CMAKE_INSTALL_FULL_INCLUDEDIR@'
--replace-fail "\''${exec_prefix}/@CMAKE_INSTALL_LIBDIR@" '@CMAKE_INSTALL_FULL_LIBDIR@' \
--replace-fail "\''${prefix}/@CMAKE_INSTALL_INCLUDEDIR@" '@CMAKE_INSTALL_FULL_INCLUDEDIR@'
# Fix tests with gobject-introspection 1.80 not installing GLib introspection data
substituteInPlace tests/CMakeLists.txt \

View file

@ -10,13 +10,13 @@
stdenv.mkDerivation rec {
pname = "bustools";
version = "0.44.0";
version = "0.44.1";
src = fetchFromGitHub {
owner = "BUStools";
repo = "bustools";
rev = "v${version}";
sha256 = "sha256-chdHwwnhHFGJLu4KZmFJp3SZ26GFnbelm3Qz0yeKoBs=";
sha256 = "sha256-0Y+9T9V+l20hqxpKbSWsEB0tt8A/ctYcoPN2n/roxvg=";
};
nativeBuildInputs = [ cmake ];

View file

@ -1,19 +1,18 @@
{ lib
, fetchFromGitHub
, stdenv
, cmake
, pkg-config
, installShellFiles
, libclang
, clang
, llvmPackages
, libllvm
, yaml-cpp
, elfutils
, libunwind
, enableLibcxx ? false
, debug ? false
,
{
lib,
fetchFromGitHub,
stdenv,
cmake,
pkg-config,
installShellFiles,
libclang,
llvmPackages,
libllvm,
yaml-cpp,
elfutils,
libunwind,
enableLibcxx ? false,
debug ? false,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "clang-uml";
@ -26,17 +25,27 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-YzHlauVuFLT2PmfqJBNwqQ/P7d7tyl3brk7Vo/kTOF4=";
};
nativeBuildInputs = [
cmake
pkg-config
installShellFiles
] ++ (if debug then [
elfutils
libunwind
] else [ ]);
nativeBuildInputs =
[
cmake
pkg-config
installShellFiles
]
++ (
if debug then
[
elfutils
libunwind
]
else
[ ]
);
cmakeFlags = [
"-DCUSTOM_COMPILE_OPTIONS=-Wno-error=sign-compare"
];
buildInputs = [
clang
libclang
libllvm
yaml-cpp
@ -63,7 +72,7 @@ stdenv.mkDerivation (finalAttrs: {
dontFixup = debug;
dontStrip = debug;
meta = with lib; {
meta = {
description = "Customizable automatic UML diagram generator for C++ based on Clang";
longDescription = ''
clang-uml is an automatic C++ to UML class, sequence, package and include diagram generator, driven by YAML configuration files.
@ -71,9 +80,9 @@ stdenv.mkDerivation (finalAttrs: {
The configuration file or files for clang-uml define the types and contents of each generated diagram.
The diagrams can be generated in PlantUML, MermaidJS and JSON formats.
'';
maintainers = with maintainers; [ eymeric ];
maintainers = with lib.maintainers; [ eymeric ];
homepage = "https://clang-uml.github.io/";
license = licenses.asl20;
platforms = platforms.all;
license = lib.licenses.asl20;
platforms = lib.platforms.all;
};
})

View file

@ -0,0 +1,44 @@
diff --git a/XOptions/xoptions.cpp b/XOptions/xoptions.cpp
index ca5723e..30574a5 100755
--- a/XOptions/xoptions.cpp
+++ b/XOptions/xoptions.cpp
@@ -1531,14 +1531,7 @@ bool XOptions::checkNative(const QString &sIniFileName)
#if defined(Q_OS_MAC)
bResult = true;
#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- QString sApplicationDirPath = qApp->applicationDirPath();
-
- if ((sApplicationDirPath == "/bin") || (sApplicationDirPath == "/usr/bin") || (sApplicationDirPath == "/usr/local/bin") ||
- (sApplicationDirPath.contains("/usr/local/bin$")) || isAppImage()) {
- bResult = true;
- } else {
- bResult = false;
- }
+ bResult = true;
#elif defined(Q_OS_WIN)
QString sApplicationDirPath = qApp->applicationDirPath();
@@ -1565,22 +1558,7 @@ QString XOptions::getApplicationDataPath()
#ifdef Q_OS_MAC
sResult = sApplicationDirPath + "/../Resources";
#elif defined(Q_OS_LINUX)
- if (isNative()) {
- if (sApplicationDirPath.contains("/usr/local/bin$")) {
- QString sPrefix = sApplicationDirPath.section("/usr/local/bin", 0, 0);
-
- sResult += sPrefix + QString("/usr/local/lib/%1").arg(qApp->applicationName());
- } else {
- if (sApplicationDirPath.contains("/tmp/.mount_")) // AppImage
- {
- sResult = sApplicationDirPath.section("/", 0, 2);
- }
-
- sResult += QString("/usr/lib/%1").arg(qApp->applicationName());
- }
- } else {
- sResult = sApplicationDirPath;
- }
+ sResult = sApplicationDirPath + "/../lib/die";
#elif defined(Q_OS_FREEBSD)
sResult = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).at(1) + QDir::separator() + qApp->applicationName();
#else

View file

@ -0,0 +1,68 @@
{
lib,
stdenv,
fetchFromGitHub,
libsForQt5,
freetype,
graphite2,
icu,
krb5,
systemdLibs,
imagemagick,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "detect-it-easy";
version = "3.09";
src = fetchFromGitHub {
owner = "horsicq";
repo = "DIE-engine";
rev = finalAttrs.version;
fetchSubmodules = true;
hash = "sha256-A9YZBlGf3j+uSefPiDhrS1Qtu6vaLm4Yodt7BioGD2Q=";
};
patches = [ ./0001-remove-hard-coded-paths-in-xoptions.patch ];
buildInputs = [
libsForQt5.qtbase
libsForQt5.qtscript
libsForQt5.qtsvg
graphite2
freetype
icu
krb5
systemdLibs
];
nativeBuildInputs = [
libsForQt5.wrapQtAppsHook
libsForQt5.qmake
imagemagick
];
enableParallelBuilding = true;
# work around wrongly created dirs in `install.sh`
# https://github.com/horsicq/DIE-engine/issues/110
preInstall = ''
mkdir -p $out/bin
mkdir -p $out/share/applications
mkdir -p $out/share/icons
'';
# clean up wrongly created dirs in `install.sh` and broken .desktop file
postInstall = ''
rm -r $out/lib/{bin,share}
grep -v "Version=#VERSION#" $src/LINUX/die.desktop > $out/share/applications/die.desktop
'';
meta = {
description = "Program for determining types of files for Windows, Linux and MacOS.";
mainProgram = "die";
homepage = "https://github.com/horsicq/Detect-It-Easy";
maintainers = with lib.maintainers; [ ivyfanchiang ];
platforms = [ "x86_64-linux" ];
license = lib.licenses.mit;
};
})

View file

@ -0,0 +1,310 @@
{
lib,
alsa-lib,
factorio-utils,
fetchurl,
libGL,
libICE,
libSM,
libX11,
libXcursor,
libXext,
libXi,
libXinerama,
libXrandr,
libpulseaudio,
libxkbcommon,
makeDesktopItem,
makeWrapper,
releaseType,
stdenv,
wayland,
mods-dat ? null,
versionsJson ? ./versions.json,
username ? "",
token ? "", # get/reset token at https://factorio.com/profile
experimental ? false, # true means to always use the latest branch
...
}@args:
assert
releaseType == "alpha"
|| releaseType == "headless"
|| releaseType == "demo"
|| releaseType == "expansion";
let
inherit (lib) importJSON;
mods = args.mods or [ ];
helpMsg = ''
===FETCH FAILED===
Please ensure you have set the username and token with config.nix, or
/etc/nix/nixpkgs-config.nix if on NixOS.
Your token can be seen at https://factorio.com/profile (after logging in). It is
not as sensitive as your password, but should still be safeguarded. There is a
link on that page to revoke/invalidate the token, if you believe it has been
leaked or wish to take precautions.
Example:
{
packageOverrides = pkgs: {
factorio = pkgs.factorio.override {
username = "FactorioPlayer1654";
token = "d5ad5a8971267c895c0da598688761";
};
};
}
Alternatively, instead of providing the username+token, you may manually
download the release through https://factorio.com/download , then add it to
the store using e.g.:
releaseType=alpha
version=0.17.74
nix-prefetch-url file://\''$HOME/Downloads/factorio_\''${releaseType}_x64_\''${version}.tar.xz --name factorio_\''${releaseType}_x64-\''${version}.tar.xz
Note the ultimate "_" is replaced with "-" in the --name arg!
'';
desktopItem = makeDesktopItem {
name = "factorio";
desktopName = "Factorio";
comment = "A game in which you build and maintain factories.";
exec = "factorio";
icon = "factorio";
categories = [ "Game" ];
};
branch = if experimental then "experimental" else "stable";
# NB `experimental` directs us to take the latest build, regardless of its branch;
# hence the (stable, experimental) pairs may sometimes refer to the same distributable.
versions = importJSON versionsJson;
binDists = makeBinDists versions;
actual =
binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch}
or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download.");
makeBinDists =
versions:
let
f =
path: name: value:
if builtins.isAttrs value then
if value ? "name" then makeBinDist value else builtins.mapAttrs (f (path ++ [ name ])) value
else
throw "expected attrset at ${toString path} - got ${toString value}";
in
builtins.mapAttrs (f [ ]) versions;
makeBinDist =
{
name,
version,
tarDirectory,
url,
sha256,
needsAuth,
candidateHashFilenames ? [ ],
}:
{
inherit version tarDirectory;
src =
if !needsAuth then
fetchurl { inherit name url sha256; }
else
(lib.overrideDerivation
(fetchurl {
inherit name url sha256;
curlOptsList = [
"--get"
"--data-urlencode"
"username@username"
"--data-urlencode"
"token@token"
];
})
(_: {
# This preHook hides the credentials from /proc
preHook =
if username != "" && token != "" then
''
echo -n "${username}" >username
echo -n "${token}" >token
''
else
''
# Deliberately failing since username/token was not provided, so we can't fetch.
# We can't use builtins.throw since we want the result to be used if the tar is in the store already.
exit 1
'';
failureHook = ''
cat <<EOF
${helpMsg}
EOF
'';
})
);
};
configBaseCfg = ''
use-system-read-write-data-directories=false
[path]
read-data=$out/share/factorio/data/
[other]
check_updates=false
'';
updateConfigSh = ''
#! $SHELL
if [[ -e ~/.factorio/config.cfg ]]; then
# Config file exists, but may have wrong path.
# Try to edit it. I'm sure this is perfectly safe and will never go wrong.
sed -i 's|^read-data=.*|read-data=$out/share/factorio/data/|' ~/.factorio/config.cfg
else
# Config file does not exist. Phew.
install -D $out/share/factorio/config-base.cfg ~/.factorio/config.cfg
fi
'';
modDir = factorio-utils.mkModDirDrv mods mods-dat;
base = with actual; {
# remap -expansion to -space-age to better match the attr name in nixpkgs.
pname = "factorio-${if releaseType == "expansion" then "space-age" else releaseType}";
inherit version src;
preferLocalBuild = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/{bin,share/factorio}
cp -a data $out/share/factorio
cp -a bin/${tarDirectory}/factorio $out/bin/factorio
patchelf \
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
$out/bin/factorio
'';
passthru.updateScript =
if (username != "" && token != "") then
[
./update.py
"--username=${username}"
"--token=${token}"
]
else
null;
meta = {
description = "Game in which you build and maintain factories";
longDescription = ''
Factorio is a game in which you build and maintain factories.
You will be mining resources, researching technologies, building
infrastructure, automating production and fighting enemies. Use your
imagination to design your factory, combine simple elements into
ingenious structures, apply management skills to keep it working and
finally protect it from the creatures who don't really like you.
Factorio has been in development since spring of 2012, and reached
version 1.0 in mid 2020.
'';
homepage = "https://www.factorio.com/";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [
Baughn
elitak
priegger
lukegb
];
platforms = [ "x86_64-linux" ];
mainProgram = "factorio";
};
};
releases = rec {
headless = base;
demo = base // {
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ libpulseaudio ];
libPath = lib.makeLibraryPath [
alsa-lib
libGL
libICE
libSM
libX11
libXcursor
libXext
libXi
libXinerama
libXrandr
libpulseaudio
libxkbcommon
wayland
];
installPhase =
base.installPhase
+ ''
wrapProgram $out/bin/factorio \
--prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \
--run "$out/share/factorio/update-config.sh" \
--argv0 "" \
--add-flags "-c \$HOME/.factorio/config.cfg" \
${lib.optionalString (mods != [ ]) "--add-flags --mod-directory=${modDir}"}
# TODO Currently, every time a mod is changed/added/removed using the
# modlist, a new derivation will take up the entire footprint of the
# client. The only way to avoid this is to remove the mods arg from the
# package function. The modsDir derivation will have to be built
# separately and have the user specify it in the .factorio config or
# right along side it using a symlink into the store I think i will
# just remove mods for the client derivation entirely. this is much
# cleaner and more useful for headless mode.
# TODO: trying to toggle off a mod will result in read-only-fs-error.
# not much we can do about that except warn the user somewhere. In
# fact, no exit will be clean, since this error will happen on close
# regardless. just prints an ugly stacktrace but seems to be otherwise
# harmless, unless maybe the user forgets and tries to use the mod
# manager.
install -m0644 <(cat << EOF
${configBaseCfg}
EOF
) $out/share/factorio/config-base.cfg
install -m0755 <(cat << EOF
${updateConfigSh}
EOF
) $out/share/factorio/update-config.sh
mkdir -p $out/share/icons/hicolor/{64x64,128x128}/apps
cp -a data/core/graphics/factorio-icon.png $out/share/icons/hicolor/64x64/apps/factorio.png
cp -a data/core/graphics/factorio-icon@2x.png $out/share/icons/hicolor/128x128/apps/factorio.png
ln -s ${desktopItem}/share/applications $out/share/
'';
};
alpha = demo // {
installPhase =
demo.installPhase
+ ''
cp -a doc-html $out/share/factorio
'';
};
expansion = alpha;
};
in
stdenv.mkDerivation (releases.${releaseType})

View file

@ -0,0 +1,289 @@
#!/usr/bin/env nix-shell
#! nix-shell -i python -p "python3.withPackages (ps: with ps; [ ps.absl-py ps.requests ])"
from collections import defaultdict
import copy
from dataclasses import dataclass
import json
import os.path
from typing import Callable, Dict
from absl import app
from absl import flags
from absl import logging
import requests
FACTORIO_RELEASES = "https://factorio.com/api/latest-releases"
FACTORIO_HASHES = "https://factorio.com/download/sha256sums/"
FLAGS = flags.FLAGS
flags.DEFINE_string("out", "", "Output path for versions.json.")
flags.DEFINE_list(
"release_type",
"",
"If non-empty, a comma-separated list of release types to update (e.g. alpha).",
)
flags.DEFINE_list(
"release_channel",
"",
"If non-empty, a comma-separated list of release channels to update (e.g. experimental).",
)
@dataclass
class System:
nix_name: str
url_name: str
tar_name: str
@dataclass
class ReleaseType:
name: str
hash_filename_format: list[str]
needs_auth: bool = False
@dataclass
class ReleaseChannel:
name: str
FactorioVersionsJSON = Dict[str, Dict[str, str]]
OurVersionJSON = Dict[str, Dict[str, Dict[str, Dict[str, str]]]]
FactorioHashes = Dict[str, str]
SYSTEMS = [
System(nix_name="x86_64-linux", url_name="linux64", tar_name="x64"),
]
RELEASE_TYPES = [
ReleaseType(
"alpha",
needs_auth=True,
hash_filename_format=["factorio_linux_{version}.tar.xz"],
),
ReleaseType("demo", hash_filename_format=["factorio_demo_x64_{version}.tar.xz"]),
ReleaseType(
"headless",
hash_filename_format=[
"factorio-headless_linux_{version}.tar.xz",
"factorio_headless_x64_{version}.tar.xz",
],
),
ReleaseType(
"expansion",
needs_auth=True,
hash_filename_format=["factorio-space-age_linux_{version}.tar.xz"],
),
]
RELEASE_CHANNELS = [
ReleaseChannel("experimental"),
ReleaseChannel("stable"),
]
def find_versions_json() -> str:
if FLAGS.out:
return FLAGS.out
try_paths = ["pkgs/by-name/fa/factorio/versions.json", "versions.json"]
for path in try_paths:
if os.path.exists(path):
return path
raise Exception(
"Couldn't figure out where to write versions.json; try specifying --out"
)
def fetch_versions() -> FactorioVersionsJSON:
return json.loads(requests.get(FACTORIO_RELEASES).text)
def fetch_hashes() -> FactorioHashes:
resp = requests.get(FACTORIO_HASHES)
resp.raise_for_status()
out = {}
for ln in resp.text.split("\n"):
ln = ln.strip()
if not ln:
continue
sha256, filename = ln.split()
out[filename] = sha256
return out
def generate_our_versions(factorio_versions: FactorioVersionsJSON) -> OurVersionJSON:
def rec_dd():
return defaultdict(rec_dd)
output = rec_dd()
# Deal with times where there's no experimental version
for rc in RELEASE_CHANNELS:
if rc.name not in factorio_versions or not factorio_versions[rc.name]:
factorio_versions[rc.name] = factorio_versions["stable"]
for rt in RELEASE_TYPES:
if (
rt.name not in factorio_versions[rc.name]
or not factorio_versions[rc.name][rt.name]
):
factorio_versions[rc.name][rt.name] = factorio_versions["stable"][
rt.name
]
for system in SYSTEMS:
for release_type in RELEASE_TYPES:
for release_channel in RELEASE_CHANNELS:
version = factorio_versions[release_channel.name].get(release_type.name)
if version is None:
continue
this_release = {
"name": f"factorio_{release_type.name}_{system.tar_name}-{version}.tar.xz",
"url": f"https://factorio.com/get-download/{version}/{release_type.name}/{system.url_name}",
"version": version,
"needsAuth": release_type.needs_auth,
"candidateHashFilenames": [
fmt.format(version=version)
for fmt in release_type.hash_filename_format
],
"tarDirectory": system.tar_name,
}
output[system.nix_name][release_type.name][release_channel.name] = (
this_release
)
return output
def iter_version(
versions: OurVersionJSON,
it: Callable[[str, str, str, Dict[str, str]], Dict[str, str]],
) -> OurVersionJSON:
versions = copy.deepcopy(versions)
for system_name, system in versions.items():
for release_type_name, release_type in system.items():
for release_channel_name, release in release_type.items():
release_type[release_channel_name] = it(
system_name, release_type_name, release_channel_name, dict(release)
)
return versions
def merge_versions(old: OurVersionJSON, new: OurVersionJSON) -> OurVersionJSON:
"""Copies already-known hashes from version.json to avoid having to re-fetch."""
def _merge_version(
system_name: str,
release_type_name: str,
release_channel_name: str,
release: Dict[str, str],
) -> Dict[str, str]:
old_system = old.get(system_name, {})
old_release_type = old_system.get(release_type_name, {})
old_release = old_release_type.get(release_channel_name, {})
if FLAGS.release_type and release_type_name not in FLAGS.release_type:
logging.info(
"%s/%s/%s: not in --release_type, not updating",
system_name,
release_type_name,
release_channel_name,
)
return old_release
if FLAGS.release_channel and release_channel_name not in FLAGS.release_channel:
logging.info(
"%s/%s/%s: not in --release_channel, not updating",
system_name,
release_type_name,
release_channel_name,
)
return old_release
if "sha256" not in old_release:
logging.info(
"%s/%s/%s: not copying sha256 since it's missing",
system_name,
release_type_name,
release_channel_name,
)
return release
if not all(
old_release.get(k, None) == release[k] for k in ["name", "version", "url"]
):
logging.info(
"%s/%s/%s: not copying sha256 due to mismatch",
system_name,
release_type_name,
release_channel_name,
)
return release
release["sha256"] = old_release["sha256"]
return release
return iter_version(new, _merge_version)
def fill_in_hash(
versions: OurVersionJSON, factorio_hashes: FactorioHashes
) -> OurVersionJSON:
"""Fill in sha256 hashes for anything missing them."""
def _fill_in_hash(
system_name: str,
release_type_name: str,
release_channel_name: str,
release: Dict[str, str],
) -> Dict[str, str]:
for candidate_filename in release["candidateHashFilenames"]:
if candidate_filename in factorio_hashes:
release["sha256"] = factorio_hashes[candidate_filename]
break
else:
logging.error(
"%s/%s/%s: failed to find any of %s in %s",
system_name,
release_type_name,
release_channel_name,
release["candidateHashFilenames"],
FACTORIO_HASHES,
)
return release
if "sha256" in release:
logging.info(
"%s/%s/%s: skipping fetch, sha256 already present",
system_name,
release_type_name,
release_channel_name,
)
return release
return release
return iter_version(versions, _fill_in_hash)
def main(argv):
factorio_versions = fetch_versions()
factorio_hashes = fetch_hashes()
new_our_versions = generate_our_versions(factorio_versions)
old_our_versions = None
our_versions_path = find_versions_json()
if our_versions_path:
logging.info("Loading old versions.json from %s", our_versions_path)
with open(our_versions_path, "r") as f:
old_our_versions = json.load(f)
if old_our_versions:
logging.info("Merging in old hashes")
new_our_versions = merge_versions(old_our_versions, new_our_versions)
logging.info("Updating hashes from Factorio SHA256")
new_our_versions = fill_in_hash(new_our_versions, factorio_hashes)
with open(our_versions_path, "w") as f:
logging.info("Writing versions.json to %s", our_versions_path)
json.dump(new_our_versions, f, sort_keys=True, indent=2)
f.write("\n")
if __name__ == "__main__":
app.run(main)

View file

@ -0,0 +1,102 @@
{
"x86_64-linux": {
"alpha": {
"experimental": {
"candidateHashFilenames": [
"factorio_linux_2.0.9.tar.xz"
],
"name": "factorio_alpha_x64-2.0.9.tar.xz",
"needsAuth": true,
"sha256": "34c21cd3cbe91b65483786ccb4467b5d4766c748cbbddd2ce3b30d319d163e3b",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.9/alpha/linux64",
"version": "2.0.9"
},
"stable": {
"candidateHashFilenames": [
"factorio_linux_2.0.8.tar.xz"
],
"name": "factorio_alpha_x64-2.0.8.tar.xz",
"needsAuth": true,
"sha256": "94ea36a5b9103369df7158a8281039dd2f1d7fa7bb3a2d854c715250dd73e185",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/alpha/linux64",
"version": "2.0.8"
}
},
"demo": {
"experimental": {
"candidateHashFilenames": [
"factorio_demo_x64_1.1.110.tar.xz"
],
"name": "factorio_demo_x64-1.1.110.tar.xz",
"needsAuth": false,
"sha256": "bddb91dcba9f300c25d590f861772eaf41f0b6ce8ae6b754de00d0e5f3eb5a35",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/1.1.110/demo/linux64",
"version": "1.1.110"
},
"stable": {
"candidateHashFilenames": [
"factorio_demo_x64_1.1.110.tar.xz"
],
"name": "factorio_demo_x64-1.1.110.tar.xz",
"needsAuth": false,
"sha256": "bddb91dcba9f300c25d590f861772eaf41f0b6ce8ae6b754de00d0e5f3eb5a35",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/1.1.110/demo/linux64",
"version": "1.1.110"
}
},
"expansion": {
"experimental": {
"candidateHashFilenames": [
"factorio-space-age_linux_2.0.9.tar.xz"
],
"name": "factorio_expansion_x64-2.0.9.tar.xz",
"needsAuth": true,
"sha256": "6369d23550a7a721d3de1d34253e8321ee601fa759d1fb5efac9abc28aa7509d",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.9/expansion/linux64",
"version": "2.0.9"
},
"stable": {
"candidateHashFilenames": [
"factorio-space-age_linux_2.0.8.tar.xz"
],
"name": "factorio_expansion_x64-2.0.8.tar.xz",
"needsAuth": true,
"sha256": "408eae824daa761564b1ea7b81925efe05298cbaffd120eea235341ac05a6a60",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/expansion/linux64",
"version": "2.0.8"
}
},
"headless": {
"experimental": {
"candidateHashFilenames": [
"factorio-headless_linux_2.0.9.tar.xz",
"factorio_headless_x64_2.0.9.tar.xz"
],
"name": "factorio_headless_x64-2.0.9.tar.xz",
"needsAuth": false,
"sha256": "f499077b3e2c1313452c350f1faf17db31cae2a0fa738f69166e97c3caa3c86d",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.9/headless/linux64",
"version": "2.0.9"
},
"stable": {
"candidateHashFilenames": [
"factorio-headless_linux_2.0.8.tar.xz",
"factorio_headless_x64_2.0.8.tar.xz"
],
"name": "factorio_headless_x64-2.0.8.tar.xz",
"needsAuth": false,
"sha256": "d9594c4d552a3e4f965b188a4774da8c8b010fc23ddb0efc63b1d94818dde1ca",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/headless/linux64",
"version": "2.0.8"
}
}
}
}

View file

@ -9,6 +9,8 @@
hyprlang,
hyprutils,
pam,
sdbus-cpp_2,
systemdLibs,
wayland,
wayland-protocols,
wayland-scanner,
@ -24,13 +26,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "hyprlock";
version = "0.4.1";
version = "0.5.0";
src = fetchFromGitHub {
owner = "hyprwm";
repo = "hyprlock";
rev = "v${finalAttrs.version}";
hash = "sha256-w+AyYuqlZ/uWEimiptlHjtDFECm/JlUOD2ciCw8/+/8=";
hash = "sha256-sUIsjWpZLplSJXWyJcDZdvDweksXLH5r9GSkwg0kgBw=";
};
strictDeps = true;
@ -54,6 +56,8 @@ stdenv.mkDerivation (finalAttrs: {
mesa
pam
pango
sdbus-cpp_2
systemdLibs
wayland
wayland-protocols
];

View file

@ -1,13 +1,13 @@
{ lib, buildGoModule, fetchFromGitHub, nix-update-script, testers, immich-go }:
buildGoModule rec {
pname = "immich-go";
version = "0.22.0";
version = "0.22.1";
src = fetchFromGitHub {
owner = "simulot";
repo = "immich-go";
rev = "${version}";
hash = "sha256-dSyVn7CQqZ/tCxF/Yl12eubWkZrV5FM8uRexCjZILbw=";
hash = "sha256-6bLjHKkEghbY+UQFrgbfeHwOjtks1HjXbDXEr7DuJbU=";
# Inspired by: https://github.com/NixOS/nixpkgs/blob/f2d7a289c5a5ece8521dd082b81ac7e4a57c2c5c/pkgs/applications/graphics/pdfcpu/default.nix#L20-L32
# The intention here is to write the information into files in the `src`'s

View file

@ -16,15 +16,15 @@
rustPlatform.buildRustPackage rec {
pname = "mixxc";
version = "0.2.2";
version = "0.2.3";
src = fetchCrate {
pname = "mixxc";
inherit version;
hash = "sha256-Y/9l8t6Vz7yq9T1AyoHnWmIcju1rfcV0S74hiK1fEjo=";
hash = "sha256-d/bMDqDR+sBtsI3ToCcByDxqd+aE6rDPRvGBcodU6iA=";
};
cargoHash = "sha256-l9inqqUiLObrqd/8pNobwBbLaiPJD39YK/38CWfDh+Q=";
cargoHash = "sha256-RoVqQaSlIvAb8mWJNOyALjCHejFEfxjJADQfHZ5EiOs=";
cargoBuildFlags = [ "--locked" ];

View file

@ -0,0 +1,35 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
stdenv,
makeWrapper,
nodejs,
}:
buildNpmPackage rec {
pname = "nextcloud-whiteboard-server";
version = "1.0.4";
src = fetchFromGitHub {
owner = "nextcloud";
repo = "whiteboard";
rev = "refs/tags/v${version}";
hash = "sha256-27w8FZz9PbVdYV7yR5iRXi5edw7U/3bLVYfdRa8yPzo=";
};
npmDepsHash = "sha256-SwFQRDRo7Q8+0zYWx5szahJzDSoxkkJDPQ3qEdNLVaE=";
nativeBuildInputs = [ makeWrapper ];
postInstall = ''
makeWrapper ${lib.getExe nodejs} "$out/bin/nextcloud-whiteboard-server" \
--add-flags "$out/lib/node_modules/whiteboard/websocket_server/main.js"
'';
meta = {
description = "Backend server for the Nextcloud Whiteboard app";
homepage = "https://apps.nextcloud.com/apps/whiteboard";
license = lib.licenses.agpl3Plus;
maintainers = [ lib.maintainers.onny ];
};
}

View file

@ -7,14 +7,14 @@
python3Packages.buildPythonApplication rec {
pname = "pdftitle";
version = "0.14";
version = "0.15";
pyproject = true;
src = fetchFromGitHub {
owner = "metebalci";
repo = "pdftitle";
rev = "v${version}";
hash = "sha256-7tIvvRlaKRC3/eRUS8F3d3qiJnCU0Z14Pj9E4v0X4+o=";
hash = "sha256-IEctzvNHlGYUMl3jfTVNinmfMviVQ9q15OZtRN1mhZc=";
};
build-system = with python3Packages; [

View file

@ -1,24 +1,28 @@
{ lib
, buildGoModule
, fetchFromGitHub
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "spirit";
version = "0.5.0";
version = "0.6.0";
src = fetchFromGitHub {
owner = "cashapp";
repo = "spirit";
rev = "v${version}-prerelease";
hash = "sha256-e0Eu7BeOwZA8UKwonuuOde1idzaIMtprWya7nxgqyjs=";
hash = "sha256-mI4nO/yQdCrqxCDyOYQPQ905EVreYPEiupe+F4RjIqw=";
};
vendorHash = "sha256-es1PGgLoE3DklnQziRjWmY7f6NNVd24L2JiuLkol6HI=";
subPackages = [ "cmd/spirit" ];
ldflags = [ "-s" "-w" ];
ldflags = [
"-s"
"-w"
];
meta = with lib; {
homepage = "https://github.com/cashapp/spirit";

View file

@ -25,7 +25,7 @@ let
# See upstream issue for rocksdb 9.X support
# https://github.com/stalwartlabs/mail-server/issues/407
rocksdb = rocksdb_8_11;
version = "0.10.3";
version = "0.10.5";
in
rustPlatform.buildRustPackage {
pname = "stalwart-mail";
@ -35,11 +35,11 @@ rustPlatform.buildRustPackage {
owner = "stalwartlabs";
repo = "mail-server";
rev = "refs/tags/v${version}";
hash = "sha256-xpNSMZWWiFU6OOooAD7ENzOggqYHdU88baPsXnovpXU=";
hash = "sha256-MD9zAWeitP3cXxzR4znqL551AGFbOcRzhV3goY6l/iY=";
fetchSubmodules = true;
};
cargoHash = "sha256-qiKfHrxQ4TSSomDLlPJ2+GOEri/ZuMCvUNdxRVoplgg=";
cargoHash = "sha256-ug49H6RWLlDdJNVW/BJcqNsG/NDNgWiqR8GiZ/HVrvY=";
nativeBuildInputs = [
pkg-config

View file

@ -6,16 +6,16 @@
rustPlatform.buildRustPackage rec {
pname = "tex-fmt";
version = "0.4.4";
version = "0.4.6";
src = fetchFromGitHub {
owner = "WGUNDERWOOD";
repo = "tex-fmt";
rev = "refs/tags/v${version}";
hash = "sha256-o8TlD0qxz/0sS45tnBNXYNDzp+VAhH3Ym1odSleD/uw=";
hash = "sha256-Ii/z9ZmsWCHxxqUbkcu7HRBuN2LiLCxzUvqRexwQ/Co=";
};
cargoHash = "sha256-N3kCeBisjeOAG45QPQhplGRAvj5kebEX4U9pisM/GUQ=";
cargoHash = "sha256-2vPxsXKInH18h/AoOWfl0VteUBmxWDzZa6AtpKfY5Hs=";
meta = {
description = "LaTeX formatter written in Rust";

View file

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "tootik";
version = "0.11.4";
version = "0.12.6";
src = fetchFromGitHub {
owner = "dimkr";
repo = "tootik";
rev = version;
hash = "sha256-b4uSztroeOKPOyPwxVB3ofkAmDpWFstHDQX2IwQwG/4=";
hash = "sha256-v7+WDxGUWCrZMhm0TXMIZTQZTzHYNauX2LIOV3zz+9A=";
};
vendorHash = "sha256-B+SmzNLAXIjkUO1JGpD1eqa52Z1zOdPiG8urvLFXf88=";
vendorHash = "sha256-wmyaTZX181w4Kiiw1sZ4NeIDY63PwW+ayvtwrLSiF24=";
nativeBuildInputs = [ openssl ];

View file

@ -22,12 +22,12 @@
stdenv.mkDerivation (finalAttrs: {
pname = "tradingview";
version = "2.9.2";
revision = "59";
version = "2.9.3";
revision = "60";
src = fetchurl {
url = "https://api.snapcraft.io/api/v1/snaps/download/nJdITJ6ZJxdvfu8Ch7n5kH5P99ClzBYV_${finalAttrs.revision}.snap";
hash = "sha256-qGQZKl8h23H8npdIBeVw3aCZPZiCfPsawzQxUY31Ujs=";
hash = "sha256-Oa3YfmXDiqKxEMJloTu6ihJ6LKoz2XwQ0su1KrlSaYo=";
};
nativeBuildInputs = [

View file

@ -1,12 +0,0 @@
diff --git a/crates/turborepo-lib/src/lib.rs b/crates/turborepo-lib/src/lib.rs
index e8d41933da..26b8c7c92f 100644
--- a/crates/turborepo-lib/src/lib.rs
+++ b/crates/turborepo-lib/src/lib.rs
@@ -2,6 +2,7 @@
#![feature(box_patterns)]
#![feature(error_generic_member_access)]
#![feature(hash_extract_if)]
+#![feature(lazy_cell)]
#![feature(option_get_or_insert_default)]
#![feature(once_cell_try)]
#![feature(panic_info_message)]

View file

@ -18,21 +18,16 @@
rustPlatform.buildRustPackage rec {
pname = "turbo-unwrapped";
version = "2.0.12";
version = "2.2.3";
src = fetchFromGitHub {
owner = "vercel";
repo = "turbo";
rev = "v${version}";
hash = "sha256-rh9BX8M3Kgu07Pz4G3AM6S9zeK3Bb6CzOpcYo7rQgIw=";
rev = "refs/tags/v${version}";
hash = "sha256-MDvwitzZVPVjdIVEAV1aKMAVeLSTMM2owH5RSfVg+rU=";
};
patches = [
# upstream uses nightly where lazy_cell is stable
./enable-lazy_cell.patch
];
cargoHash = "sha256-oZHSoPrPCUwXSrxEASm4LuYO+XHyNDRRl38Q7U7F/lk=";
cargoHash = "sha256-XBI/eiOyKk80ZDFLD2HCTFYRWvC7qtzQY/zFCmKdKSM=";
nativeBuildInputs =
[

View file

@ -9,13 +9,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "whatsie";
version = "4.16.0";
version = "4.16.1";
src = fetchFromGitHub {
owner = "keshavbhatt";
repo = "whatsie";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-+sbnpaR+pR5aKbGUIVM3yRpco7/jE9LkCbQKrgFDYwM=";
hash = "sha256-9G+2yYc5Lcmw5NvLnn7jVZ4Fw79L29KbhiE2CYh6SLM=";
};
sourceRoot = "${finalAttrs.src.name}/src";

View file

@ -8,13 +8,13 @@
stdenv.mkDerivation rec {
pname = "xchm";
version = "1.36";
version = "1.37";
src = fetchFromGitHub {
owner = "rzvncj";
repo = "xCHM";
rev = version;
sha256 = "sha256-+RbFE/jOD8sofHMCFgTIfgokrXYqDbCSSnN6SdEZ/b0=";
sha256 = "sha256-UMn8ds4nheuYSu0PesxdGoyxyn5AcKq9WByeRUxxx3k=";
};
nativeBuildInputs = [

View file

@ -37,6 +37,7 @@ stdenv.mkDerivation (finalAttrs: {
homepage = "https://codeberg.org/jbruchon/libjodycode";
changelog = "https://codeberg.org/jbruchon/libjodycode/src/branch/master/CHANGES.txt";
license = lib.licenses.mit;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [ pbsds ];
};
})

View file

@ -1,53 +1,71 @@
{ lib
, stdenv
, fetchFromGitHub
, cmake
, expat
, pkg-config
, systemd
{
lib,
stdenv,
fetchFromGitHub,
cmake,
expat,
pkg-config,
systemdLibs,
}:
let
generic =
{
version,
rev ? "v${version}",
hash,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "sdbus-cpp";
inherit version;
stdenv.mkDerivation rec {
pname = "sdbus-cpp";
version = "1.5.0";
src = fetchFromGitHub {
owner = "kistler-group";
repo = "sdbus-cpp";
inherit rev hash;
};
src = fetchFromGitHub {
owner = "kistler-group";
repo = "sdbus-cpp";
rev = "v${version}";
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
expat
systemdLibs
];
cmakeFlags = [
(lib.cmakeBool "BUILD_CODE_GEN" true)
];
meta = {
homepage = "https://github.com/Kistler-Group/sdbus-cpp";
changelog = "https://github.com/Kistler-Group/sdbus-cpp/blob/v${version}/ChangeLog";
description = "High-level C++ D-Bus library designed to provide easy-to-use yet powerful API";
longDescription = ''
sdbus-c++ is a high-level C++ D-Bus library for Linux designed to provide
expressive, easy-to-use API in modern C++.
It adds another layer of abstraction on top of sd-bus, a nice, fresh C
D-Bus implementation by systemd.
It's been written primarily as a replacement of dbus-c++, which currently
suffers from a number of (unresolved) bugs, concurrency issues and
inherent design complexities and limitations.
'';
license = lib.licenses.lgpl2Only;
maintainers = [ ];
platforms = lib.platforms.linux;
mainProgram = "sdbus-c++-xml2cpp";
};
});
in
{
sdbus-cpp = generic {
version = "1.5.0";
hash = "sha256-oO8QNffwNI245AEPdutOGqxj4qyusZYK3bZWLh2Lcag=";
};
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
expat
systemd
];
cmakeFlags = [
"-DBUILD_CODE_GEN=ON"
];
meta = {
homepage = "https://github.com/Kistler-Group/sdbus-cpp";
changelog = "https://github.com/Kistler-Group/sdbus-cpp/blob/v${version}/ChangeLog";
description = "High-level C++ D-Bus library designed to provide easy-to-use yet powerful API";
longDescription = ''
sdbus-c++ is a high-level C++ D-Bus library for Linux designed to provide
expressive, easy-to-use API in modern C++.
It adds another layer of abstraction on top of sd-bus, a nice, fresh C
D-Bus implementation by systemd.
It's been written primarily as a replacement of dbus-c++, which currently
suffers from a number of (unresolved) bugs, concurrency issues and
inherent design complexities and limitations.
'';
license = lib.licenses.lgpl2Only;
maintainers = [ ];
platforms = lib.platforms.linux;
mainProgram = "sdbus-c++-xml2cpp";
sdbus-cpp_2 = generic {
version = "2.0.0";
hash = "sha256-W8V5FRhV3jtERMFrZ4gf30OpIQLYoj2yYGpnYOmH2+g=";
};
}

View file

@ -7,14 +7,15 @@
cargo,
rustPlatform,
rustc,
setuptools,
setuptools-rust,
libiconv,
}:
buildPythonPackage rec {
pname = "cryptg";
version = "0.4";
format = "setuptools";
version = "0.5";
pyproject = true;
disabled = pythonOlder "3.7";
@ -22,16 +23,20 @@ buildPythonPackage rec {
owner = "cher-nov";
repo = pname;
rev = "v${version}";
hash = "sha256-2HP1mKGPr8wOL5B0APJks3EVBicX2iMFI7vLJGTa1PM=";
hash = "sha256-uJfMetplTyRT95P/8ljz4H4ASYMXEM7jROWSpjftKjU=";
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
hash = "sha256-AqSVFOB9Lfvk9h3GtoYlEOXBEt7YZYLhCDNKM9upQ2U=";
hash = "sha256-HDMztt7/ZpPlpy0IMGuWGGo4vwKhraFTmTTPr9tC+Ok=";
};
nativeBuildInputs = [
build-system = [
setuptools
setuptools-rust
];
nativeBuildInputs = [
rustPlatform.cargoSetupHook
rustc
cargo
@ -44,6 +49,10 @@ buildPythonPackage rec {
pythonImportsCheck = [ "cryptg" ];
postPatch = ''
substituteInPlace pyproject.toml --replace-fail "setuptools[core]" "setuptools"
'';
meta = with lib; {
description = "Official Telethon extension to provide much faster cryptography for Telegram API requests";
homepage = "https://github.com/cher-nov/cryptg";

View file

@ -0,0 +1,52 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
django,
pythonOlder,
djangorestframework,
pytestCheckHook,
pytest-django,
python,
}:
buildPythonPackage rec {
pname = "djangorestframework-csv";
version = "3.0.2";
format = "setuptools";
disabled = pythonOlder "3.8";
src = fetchFromGitHub {
owner = "mjumbewu";
repo = "django-rest-framework-csv";
rev = "refs/tags/${version}";
hash = "sha256-XtMkSucB7+foRpTaRfGF1Co0n3ONNGyzex6MXR4xM5c=";
};
dependencies = [
django
djangorestframework
];
checkInputs = [
pytestCheckHook
pytest-django
];
checkPhase = ''
runHook preCheck
${python.interpreter} manage.py test
runHook postCheck
'';
pythonImportsCheck = [ "rest_framework_csv" ];
meta = {
description = "CSV Tools for Django REST Framework";
homepage = "https://github.com/mjumbewu/django-rest-framework-csv";
changelog = "https://github.com/mjumbewu/django-rest-framework-csv/releases/tag/${version}";
license = lib.licenses.bsd2;
maintainers = [ lib.maintainers.onny ];
};
}

View file

@ -15,7 +15,7 @@
buildPythonPackage rec {
pname = "gcal-sync";
version = "6.1.6";
version = "6.2.0";
pyproject = true;
disabled = pythonOlder "3.10";
@ -24,7 +24,7 @@ buildPythonPackage rec {
owner = "allenporter";
repo = "gcal_sync";
rev = "refs/tags/${version}";
hash = "sha256-dVpPq2TJsR+0VWfup2SNLsnBP2j/HUQsoxJebNkD8Sw=";
hash = "sha256-424PRKjQnpb6fH+iSAqkoOhlvugW7W3wjUxCHTc/A20=";
};
nativeBuildInputs = [ setuptools ];

View file

@ -1,11 +1,13 @@
{
lib,
buildPythonPackage,
fetchPypi,
pythonOlder,
fetchFromGitHub,
# build-system
hatchling,
# dependencies
ipykernel,
exceptiongroup,
ipython,
jupyter-client,
jupyter-core,
@ -13,6 +15,8 @@
pygments,
pyzmq,
traitlets,
# tests
flaky,
pexpect,
pytestCheckHook,
@ -21,27 +25,29 @@
buildPythonPackage rec {
pname = "jupyter-console";
version = "6.6.3";
format = "pyproject";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
pname = "jupyter_console";
inherit version;
hash = "sha256-VmpL8xyHrb+t8izfhG4wabWace1dpx1rpNiqrRSlNTk=";
src = fetchFromGitHub {
owner = "jupyter";
repo = "jupyter_console";
rev = "refs/tags/v${version}";
hash = "sha256-jdSeZCspcjEQVBpJyxVnwJ5SAq+SS1bW9kqp/F/zwCQ=";
};
nativeBuildInputs = [ hatchling ];
postPatch =
# Use wrapped executable in tests
let
binPath = "${placeholder "out"}/bin/jupyter-console";
in
''
substituteInPlace jupyter_console/tests/test_console.py \
--replace-fail "'-m', 'jupyter_console', " "" \
--replace-fail "sys.executable" "'${binPath}'"
'';
postPatch = ''
# use wrapped executable in tests
substituteInPlace jupyter_console/tests/test_console.py \
--replace "args = ['-m', 'jupyter_console', '--colors=NoColor']" "args = ['--colors=NoColor']" \
--replace "cmd = sys.executable" "cmd = '${placeholder "out"}/bin/jupyter-console'" \
--replace "check_output([sys.executable, '-m', 'jupyter_console'," "check_output(['${placeholder "out"}/bin/jupyter-console',"
'';
build-system = [ hatchling ];
propagatedBuildInputs = [
dependencies = [
ipykernel
ipython
jupyter-client
@ -50,7 +56,7 @@ buildPythonPackage rec {
pygments
pyzmq
traitlets
] ++ lib.optionals (pythonOlder "3.11") [ exceptiongroup ];
];
pythonImportsCheck = [ "jupyter_console" ];
@ -64,6 +70,14 @@ buildPythonPackage rec {
export HOME=$TMPDIR
'';
disabledTests = [
# Flaky: pexpect.exceptions.TIMEOUT: Timeout exceeded
"test_console_starts"
"test_display_text"
];
__darwinAllowLocalNetworking = true;
meta = {
description = "Jupyter terminal console";
mainProgram = "jupyter-console";

View file

@ -14,7 +14,7 @@
buildPythonPackage rec {
pname = "nebula3-python";
version = "3.8.2";
version = "3.8.3";
pyproject = true;
disabled = pythonOlder "3.8";
@ -23,7 +23,7 @@ buildPythonPackage rec {
owner = "vesoft-inc";
repo = "nebula-python";
rev = "refs/tags/v${version}";
hash = "sha256-XwrrT5Vuwqw57u3Xt9nS4NjmFG2VD62gWSVfeek2478=";
hash = "sha256-p2dXpcOwVKbdfRKKTAc4LhaNuTjvPd8BBBI8aUivaZ4=";
};
build-system = [ pdm-backend ];

View file

@ -0,0 +1,77 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
# build-system
cython,
numpy,
setuptools,
# tests
pytestCheckHook,
scipy,
}:
buildPythonPackage rec {
pname = "pesq";
version = "0.0.4";
pyproject = true;
src = fetchFromGitHub {
owner = "ludlows";
repo = "PESQ";
rev = "refs/tags/v${version}";
hash = "sha256-JuwZ+trFKGMetS3cC3pEQsV+wbj6+klFnC3THOd8bPE=";
};
postPatch =
# pythonRemoveDeps does not work for removing pytest-runner
''
substituteInPlace setup.py \
--replace-fail ", 'pytest-runner'" ""
''
# Flaky tests: numerical equality is not satisfied on ARM platforms
+ ''
substituteInPlace tests/test_pesq.py \
--replace-fail \
"assert score == 1.6072081327438354" \
"assert abs(score - 1.6072081327438354) < 1e-5" \
--replace-fail \
"assert score == [1.6072081327438354]" \
"assert np.allclose(np.array(score), np.array([1.6072081327438354]))"
'';
build-system = [
cython
setuptools
numpy
];
dependencies = [
numpy
];
pythonImportsCheck = [
"pesq"
"pesq.cypesq"
];
# Prevents importing the `pesq` module from the source files (which lack the cypesq extension)
preCheck = ''
rm -rf pesq
'';
nativeCheckInputs = [
pytestCheckHook
scipy
];
meta = {
description = "PESQ (Perceptual Evaluation of Speech Quality) Wrapper for Python Users";
homepage = "https://github.com/ludlows/PESQ";
changelog = "https://github.com/ludlows/PESQ/releases/tag/v${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ GaetanLepage ];
};
}

View file

@ -13,21 +13,21 @@
buildPythonPackage rec {
pname = "pyvlx";
version = "0.2.23";
version = "0.2.25";
pyproject = true;
disabled = pythonOlder "3.10";
disabled = pythonOlder "3.11";
src = fetchFromGitHub {
owner = "Julius2342";
repo = "pyvlx";
rev = "refs/tags/${version}";
hash = "sha256-J+oJQHsULrJQNdZqYsl2hufNubMwV1KtG10jZH0jbU4=";
hash = "sha256-c0HlmqLvpIn2GXorOArBKJ0YzvWz1spmhWwm6Gow2iU=";
};
nativeBuildInputs = [ setuptools ];
build-system = [ setuptools ];
propagatedBuildInputs = [
dependencies = [
pyyaml
typing-extensions
zeroconf
@ -45,7 +45,7 @@ buildPythonPackage rec {
'';
homepage = "https://github.com/Julius2342/pyvlx";
changelog = "https://github.com/Julius2342/pyvlx/releases/tag/${version}";
license = with licenses; [ lgpl2Only ];
license = licenses.lgpl2Only;
maintainers = with maintainers; [ fab ];
broken = stdenv.hostPlatform.isDarwin;
};

View file

@ -9,14 +9,14 @@
buildPythonPackage rec {
pname = "survey";
version = "5.4.0";
version = "5.4.2";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-JT0tcNBReNdfbZrwSgv0OFcBz9Hp1N5JF4nP9oXfTJs=";
hash = "sha256-4vnjtSbw2y/o+fSWDl/CqTEZkl0jULGOLURdZ0BpKvY=";
};
build-system = [

View file

@ -11,14 +11,14 @@
buildPythonPackage rec {
pname = "trimesh";
version = "4.5.0";
version = "4.5.1";
pyproject = true;
disabled = pythonOlder "3.8";
src = fetchPypi {
inherit pname version;
hash = "sha256-/EnZ+8KeJQF3daAk5d+A9iXJ3dv5gs4+pdNEUHCVBCU=";
hash = "sha256-LoUXn9vuHocqoA1CpbKGBaBTApaIV6gyGk36Q5ByWxw=";
};
build-system = [ setuptools ];

View file

@ -1,13 +1,14 @@
{
lib,
bleak,
bleak-retry-connector,
bleak,
bluetooth-data-tools,
bluetooth-sensor-state-data,
buildPythonPackage,
cryptography,
fetchFromGitHub,
home-assistant-bluetooth,
orjson,
poetry-core,
pycryptodomex,
pytestCheckHook,
@ -17,7 +18,7 @@
buildPythonPackage rec {
pname = "xiaomi-ble";
version = "0.32.0";
version = "0.33.0";
pyproject = true;
disabled = pythonOlder "3.9";
@ -26,7 +27,7 @@ buildPythonPackage rec {
owner = "Bluetooth-Devices";
repo = "xiaomi-ble";
rev = "refs/tags/v${version}";
hash = "sha256-dZJsB40BMPo0tOFq0vLILrwfezf5dnspFK/aZWOV4uc=";
hash = "sha256-7/4Ea8IiRPxhgMiazSylYZAmznqIula2yCEUAyIHBBg=";
};
postPatch = ''
@ -46,6 +47,7 @@ buildPythonPackage rec {
bluetooth-sensor-state-data
cryptography
home-assistant-bluetooth
orjson
pycryptodomex
sensor-state-data
];

View file

@ -7,11 +7,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "allure";
version = "2.30.0";
version = "2.31.0";
src = fetchurl {
url = "https://github.com/allure-framework/allure2/releases/download/${finalAttrs.version}/allure-${finalAttrs.version}.tgz";
hash = "sha256-jYdinK7it2MDwrWZmxPHR5YqZhhVIo2vMZDCX38+igU=";
hash = "sha256-rhuIf+lwxw55SscOmtCsbrcIdjpTTM9joQbMbx8G0Uw=";
};
dontConfigure = true;

View file

@ -7,16 +7,16 @@
rustPlatform.buildRustPackage rec {
pname = "rustywind";
version = "0.22.0";
version = "0.23.1";
src = fetchFromGitHub {
owner = "avencera";
repo = "rustywind";
rev = "v${version}";
hash = "sha256-dK8tO7rIsu1zVmA2reduBe8vM6L6oesig1tE+ajGSXM=";
hash = "sha256-NRIWjmKjteJibqnOjkkUY9eKIM65H7NaRX8rn1MdXmY=";
};
cargoHash = "sha256-yZQSY2zqVpmhMd6+Avg2vBh0WQB2FJ2fiMuy5x9Zl9U=";
cargoHash = "sha256-yUODUAhWtRGCj3U9nBlw3+5dNv6vGHXmJzUd8hGKnu0=";
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
darwin.apple_sdk.frameworks.Security

View file

@ -12,7 +12,7 @@
}:
stdenvNoCC.mkDerivation rec {
version = "1.1.29";
version = "1.1.31";
pname = "bun";
src = passthru.sources.${stdenvNoCC.hostPlatform.system} or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}");
@ -51,19 +51,19 @@ stdenvNoCC.mkDerivation rec {
sources = {
"aarch64-darwin" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-aarch64.zip";
hash = "sha256-RSMuealmdHe7qGFwhK9e51TED3PaCwSqzd4aj2RKMxE=";
hash = "sha256-dOQFfkxCiOFmAr11CjSdSKNpiLERkbVWawAuy8ASkJE=";
};
"aarch64-linux" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-linux-aarch64.zip";
hash = "sha256-gY+MDJqDjQamxQsk/CJJVuHsBAfwgrebs/h6nI0HV78=";
hash = "sha256-ZuU14GvAtf1n1sA8amtZUSGp5iJ5qp/SI2wrw4Gwe/4=";
};
"x86_64-darwin" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-x64-baseline.zip";
hash = "sha256-j5jpgofGcfjto/3CtBsC4QV411lUGdk2wHwLGmLduo4=";
hash = "sha256-qN8ciVHzHH8GgR89GDgfvteMV+YawMUQLiXNwYyN+wU=";
};
"x86_64-linux" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-linux-x64.zip";
hash = "sha256-RnKczYB/IkUYVBnRktCFhHsmvObQovVMfCilqJq3q1g=";
hash = "sha256-zHitG4Ktt+iCKk9GrC3C4MRSWhUxh89kW9bUeHzqNJs=";
};
};
updateScript = writeShellScript "update-bun" ''

View file

@ -1,280 +0,0 @@
{ lib
, alsa-lib
, factorio-utils
, fetchurl
, libGL
, libICE
, libSM
, libX11
, libXcursor
, libXext
, libXi
, libXinerama
, libXrandr
, libpulseaudio
, libxkbcommon
, makeDesktopItem
, makeWrapper
, releaseType
, stdenv
, wayland
, mods-dat ? null
, versionsJson ? ./versions.json
, username ? ""
, token ? "" # get/reset token at https://factorio.com/profile
, experimental ? false # true means to always use the latest branch
, ...
} @ args:
assert releaseType == "alpha"
|| releaseType == "headless"
|| releaseType == "demo"
|| releaseType == "expansion";
let
inherit (lib) importJSON;
mods = args.mods or [ ];
helpMsg = ''
===FETCH FAILED===
Please ensure you have set the username and token with config.nix, or
/etc/nix/nixpkgs-config.nix if on NixOS.
Your token can be seen at https://factorio.com/profile (after logging in). It is
not as sensitive as your password, but should still be safeguarded. There is a
link on that page to revoke/invalidate the token, if you believe it has been
leaked or wish to take precautions.
Example:
{
packageOverrides = pkgs: {
factorio = pkgs.factorio.override {
username = "FactorioPlayer1654";
token = "d5ad5a8971267c895c0da598688761";
};
};
}
Alternatively, instead of providing the username+token, you may manually
download the release through https://factorio.com/download , then add it to
the store using e.g.:
releaseType=alpha
version=0.17.74
nix-prefetch-url file://\''$HOME/Downloads/factorio_\''${releaseType}_x64_\''${version}.tar.xz --name factorio_\''${releaseType}_x64-\''${version}.tar.xz
Note the ultimate "_" is replaced with "-" in the --name arg!
'';
desktopItem = makeDesktopItem {
name = "factorio";
desktopName = "Factorio";
comment = "A game in which you build and maintain factories.";
exec = "factorio";
icon = "factorio";
categories = [ "Game" ];
};
branch = if experimental then "experimental" else "stable";
# NB `experimental` directs us to take the latest build, regardless of its branch;
# hence the (stable, experimental) pairs may sometimes refer to the same distributable.
versions = importJSON versionsJson;
binDists = makeBinDists versions;
actual = binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download.");
makeBinDists = versions:
let
f = path: name: value:
if builtins.isAttrs value then
if value ? "name" then
makeBinDist value
else
builtins.mapAttrs (f (path ++ [ name ])) value
else
throw "expected attrset at ${toString path} - got ${toString value}";
in
builtins.mapAttrs (f [ ]) versions;
makeBinDist = { name, version, tarDirectory, url, sha256, needsAuth }: {
inherit version tarDirectory;
src =
if !needsAuth then
fetchurl { inherit name url sha256; }
else
(lib.overrideDerivation
(fetchurl {
inherit name url sha256;
curlOptsList = [
"--get"
"--data-urlencode"
"username@username"
"--data-urlencode"
"token@token"
];
})
(_: {
# This preHook hides the credentials from /proc
preHook =
if username != "" && token != "" then ''
echo -n "${username}" >username
echo -n "${token}" >token
'' else ''
# Deliberately failing since username/token was not provided, so we can't fetch.
# We can't use builtins.throw since we want the result to be used if the tar is in the store already.
exit 1
'';
failureHook = ''
cat <<EOF
${helpMsg}
EOF
'';
}));
};
configBaseCfg = ''
use-system-read-write-data-directories=false
[path]
read-data=$out/share/factorio/data/
[other]
check_updates=false
'';
updateConfigSh = ''
#! $SHELL
if [[ -e ~/.factorio/config.cfg ]]; then
# Config file exists, but may have wrong path.
# Try to edit it. I'm sure this is perfectly safe and will never go wrong.
sed -i 's|^read-data=.*|read-data=$out/share/factorio/data/|' ~/.factorio/config.cfg
else
# Config file does not exist. Phew.
install -D $out/share/factorio/config-base.cfg ~/.factorio/config.cfg
fi
'';
modDir = factorio-utils.mkModDirDrv mods mods-dat;
base = with actual; {
pname = "factorio-${releaseType}";
inherit version src;
preferLocalBuild = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/{bin,share/factorio}
cp -a data $out/share/factorio
cp -a bin/${tarDirectory}/factorio $out/bin/factorio
patchelf \
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
$out/bin/factorio
'';
passthru.updateScript =
if (username != "" && token != "") then [
./update.py
"--username=${username}"
"--token=${token}"
] else null;
meta = {
description = "Game in which you build and maintain factories";
longDescription = ''
Factorio is a game in which you build and maintain factories.
You will be mining resources, researching technologies, building
infrastructure, automating production and fighting enemies. Use your
imagination to design your factory, combine simple elements into
ingenious structures, apply management skills to keep it working and
finally protect it from the creatures who don't really like you.
Factorio has been in development since spring of 2012, and reached
version 1.0 in mid 2020.
'';
homepage = "https://www.factorio.com/";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ Baughn elitak priegger lukegb ];
platforms = [ "x86_64-linux" ];
mainProgram = "factorio";
};
};
releases = rec {
headless = base;
demo = base // {
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ libpulseaudio ];
libPath = lib.makeLibraryPath [
alsa-lib
libGL
libICE
libSM
libX11
libXcursor
libXext
libXi
libXinerama
libXrandr
libpulseaudio
libxkbcommon
wayland
];
installPhase = base.installPhase + ''
wrapProgram $out/bin/factorio \
--prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \
--run "$out/share/factorio/update-config.sh" \
--argv0 "" \
--add-flags "-c \$HOME/.factorio/config.cfg" \
${lib.optionalString (mods!=[]) "--add-flags --mod-directory=${modDir}"}
# TODO Currently, every time a mod is changed/added/removed using the
# modlist, a new derivation will take up the entire footprint of the
# client. The only way to avoid this is to remove the mods arg from the
# package function. The modsDir derivation will have to be built
# separately and have the user specify it in the .factorio config or
# right along side it using a symlink into the store I think i will
# just remove mods for the client derivation entirely. this is much
# cleaner and more useful for headless mode.
# TODO: trying to toggle off a mod will result in read-only-fs-error.
# not much we can do about that except warn the user somewhere. In
# fact, no exit will be clean, since this error will happen on close
# regardless. just prints an ugly stacktrace but seems to be otherwise
# harmless, unless maybe the user forgets and tries to use the mod
# manager.
install -m0644 <(cat << EOF
${configBaseCfg}
EOF
) $out/share/factorio/config-base.cfg
install -m0755 <(cat << EOF
${updateConfigSh}
EOF
) $out/share/factorio/update-config.sh
mkdir -p $out/share/icons/hicolor/{64x64,128x128}/apps
cp -a data/core/graphics/factorio-icon.png $out/share/icons/hicolor/64x64/apps/factorio.png
cp -a data/core/graphics/factorio-icon@2x.png $out/share/icons/hicolor/128x128/apps/factorio.png
ln -s ${desktopItem}/share/applications $out/share/
'';
};
alpha = demo // {
installPhase = demo.installPhase + ''
cp -a doc-html $out/share/factorio
'';
};
expansion = alpha;
};
in
stdenv.mkDerivation (releases.${releaseType})

View file

@ -1,191 +0,0 @@
#!/usr/bin/env nix-shell
#! nix-shell -i python -p "python3.withPackages (ps: with ps; [ ps.absl-py ps.requests ])" nix
from collections import defaultdict
import copy
from dataclasses import dataclass
import json
import os.path
import subprocess
from typing import Callable, Dict
from absl import app
from absl import flags
from absl import logging
import requests
FACTORIO_API = "https://factorio.com/api/latest-releases"
FLAGS = flags.FLAGS
flags.DEFINE_string('username', '', 'Factorio username for retrieving binaries.')
flags.DEFINE_string('token', '', 'Factorio token for retrieving binaries.')
flags.DEFINE_string('out', '', 'Output path for versions.json.')
flags.DEFINE_list('release_type', '', 'If non-empty, a comma-separated list of release types to update (e.g. alpha).')
flags.DEFINE_list('release_channel', '', 'If non-empty, a comma-separated list of release channels to update (e.g. experimental).')
@dataclass
class System:
nix_name: str
url_name: str
tar_name: str
@dataclass
class ReleaseType:
name: str
needs_auth: bool = False
@dataclass
class ReleaseChannel:
name: str
FactorioVersionsJSON = Dict[str, Dict[str, str]]
OurVersionJSON = Dict[str, Dict[str, Dict[str, Dict[str, str]]]]
SYSTEMS = [
System(nix_name="x86_64-linux", url_name="linux64", tar_name="x64"),
]
RELEASE_TYPES = [
ReleaseType("alpha", needs_auth=True),
ReleaseType("expansion", needs_auth=True),
ReleaseType("demo"),
ReleaseType("headless"),
]
RELEASE_CHANNELS = [
ReleaseChannel("experimental"),
ReleaseChannel("stable"),
]
def find_versions_json() -> str:
if FLAGS.out:
return FLAGS.out
try_paths = ["pkgs/games/factorio/versions.json", "versions.json"]
for path in try_paths:
if os.path.exists(path):
return path
raise Exception("Couldn't figure out where to write versions.json; try specifying --out")
def fetch_versions() -> FactorioVersionsJSON:
return json.loads(requests.get("https://factorio.com/api/latest-releases").text)
def generate_our_versions(factorio_versions: FactorioVersionsJSON) -> OurVersionJSON:
rec_dd = lambda: defaultdict(rec_dd)
output = rec_dd()
# Deal with times where there's no experimental version
for rc in RELEASE_CHANNELS:
if not factorio_versions[rc.name]:
factorio_versions[rc.name] = factorio_versions['stable']
for system in SYSTEMS:
for release_type in RELEASE_TYPES:
for release_channel in RELEASE_CHANNELS:
version = factorio_versions[release_channel.name].get(release_type.name)
if version == None:
continue
this_release = {
"name": f"factorio_{release_type.name}_{system.tar_name}-{version}.tar.xz",
"url": f"https://factorio.com/get-download/{version}/{release_type.name}/{system.url_name}",
"version": version,
"needsAuth": release_type.needs_auth,
"tarDirectory": system.tar_name,
}
output[system.nix_name][release_type.name][release_channel.name] = this_release
return output
def iter_version(versions: OurVersionJSON, it: Callable[[str, str, str, Dict[str, str]], Dict[str, str]]) -> OurVersionJSON:
versions = copy.deepcopy(versions)
for system_name, system in versions.items():
for release_type_name, release_type in system.items():
for release_channel_name, release in release_type.items():
release_type[release_channel_name] = it(system_name, release_type_name, release_channel_name, dict(release))
return versions
def merge_versions(old: OurVersionJSON, new: OurVersionJSON) -> OurVersionJSON:
"""Copies already-known hashes from version.json to avoid having to re-fetch."""
def _merge_version(system_name: str, release_type_name: str, release_channel_name: str, release: Dict[str, str]) -> Dict[str, str]:
old_system = old.get(system_name, {})
old_release_type = old_system.get(release_type_name, {})
old_release = old_release_type.get(release_channel_name, {})
if FLAGS.release_type and release_type_name not in FLAGS.release_type:
logging.info("%s/%s/%s: not in --release_type, not updating", system_name, release_type_name, release_channel_name)
return old_release
if FLAGS.release_channel and release_channel_name not in FLAGS.release_channel:
logging.info("%s/%s/%s: not in --release_channel, not updating", system_name, release_type_name, release_channel_name)
return old_release
if not "sha256" in old_release:
logging.info("%s/%s/%s: not copying sha256 since it's missing", system_name, release_type_name, release_channel_name)
return release
if not all(old_release.get(k, None) == release[k] for k in ['name', 'version', 'url']):
logging.info("%s/%s/%s: not copying sha256 due to mismatch", system_name, release_type_name, release_channel_name)
return release
release["sha256"] = old_release["sha256"]
return release
return iter_version(new, _merge_version)
def nix_prefetch_url(name: str, url: str, algo: str = 'sha256') -> str:
cmd = ['nix-prefetch-url', '--type', algo, '--name', name, url]
logging.info('running %s', cmd)
out = subprocess.check_output(cmd)
return out.decode('utf-8').strip()
def fill_in_hash(versions: OurVersionJSON) -> OurVersionJSON:
"""Fill in sha256 hashes for anything missing them."""
urls_to_hash = {}
def _fill_in_hash(system_name: str, release_type_name: str, release_channel_name: str, release: Dict[str, str]) -> Dict[str, str]:
if "sha256" in release:
logging.info("%s/%s/%s: skipping fetch, sha256 already present", system_name, release_type_name, release_channel_name)
return release
url = release["url"]
if url in urls_to_hash:
logging.info("%s/%s/%s: found url %s in cache", system_name, release_type_name, release_channel_name, url)
release["sha256"] = urls_to_hash[url]
return release
logging.info("%s/%s/%s: fetching %s", system_name, release_type_name, release_channel_name, url)
if release["needsAuth"]:
if not FLAGS.username or not FLAGS.token:
raise Exception("fetching %s/%s/%s from %s requires --username and --token" % (system_name, release_type_name, release_channel_name, url))
url += f"?username={FLAGS.username}&token={FLAGS.token}"
release["sha256"] = nix_prefetch_url(release["name"], url)
urls_to_hash[url] = release["sha256"]
return release
return iter_version(versions, _fill_in_hash)
def main(argv):
factorio_versions = fetch_versions()
new_our_versions = generate_our_versions(factorio_versions)
old_our_versions = None
our_versions_path = find_versions_json()
if our_versions_path:
logging.info('Loading old versions.json from %s', our_versions_path)
with open(our_versions_path, 'r') as f:
old_our_versions = json.load(f)
if old_our_versions:
logging.info('Merging in old hashes')
new_our_versions = merge_versions(old_our_versions, new_our_versions)
logging.info('Fetching necessary tars to get hashes')
new_our_versions = fill_in_hash(new_our_versions)
with open(our_versions_path, 'w') as f:
logging.info('Writing versions.json to %s', our_versions_path)
json.dump(new_our_versions, f, sort_keys=True, indent=2)
f.write("\n")
if __name__ == '__main__':
app.run(main)

View file

@ -1,68 +0,0 @@
{
"x86_64-linux": {
"alpha": {
"experimental": {
"name": "factorio_alpha_x64-2.0.8.tar.xz",
"needsAuth": true,
"sha256": "11g1fgfm0lki9j2jsfmvlxzisbyx7482ia2qf7gnjcqhp6jkdsll",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/alpha/linux64",
"version": "2.0.8"
},
"stable": {
"name": "factorio_alpha_x64-2.0.8.tar.xz",
"needsAuth": true,
"sha256": "11g1fgfm0lki9j2jsfmvlxzisbyx7482ia2qf7gnjcqhp6jkdsll",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/alpha/linux64",
"version": "2.0.8"
}
},
"demo": {
"experimental": {
"name": "factorio_demo_x64-1.1.110.tar.xz",
"needsAuth": false,
"sha256": "0dasxgrybl00vrabgrlarsvg0hdg5rvn3y4hsljhqc4zpbf93nxx",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/1.1.110/demo/linux64",
"version": "1.1.110"
},
"stable": {
"name": "factorio_demo_x64-1.1.110.tar.xz",
"needsAuth": false,
"sha256": "0dasxgrybl00vrabgrlarsvg0hdg5rvn3y4hsljhqc4zpbf93nxx",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/1.1.110/demo/linux64",
"version": "1.1.110"
}
},
"expansion": {
"stable": {
"name": "factorio_expansion_x64-2.0.8.tar.xz",
"needsAuth": true,
"sha256": "0q3abb01ld1mlbp21lgzpa62j1gybs982yzan5j1axma9n1ax3j0",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/expansion/linux64",
"version": "2.0.8"
}
},
"headless": {
"experimental": {
"name": "factorio_headless_x64-2.0.8.tar.xz",
"needsAuth": false,
"sha256": "1jp1vlc4indicgy0xnrxq87h32wcv9s4g2hqbfb4ygiaam6lqnfr",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/headless/linux64",
"version": "2.0.8"
},
"stable": {
"name": "factorio_headless_x64-2.0.8.tar.xz",
"needsAuth": false,
"sha256": "1jp1vlc4indicgy0xnrxq87h32wcv9s4g2hqbfb4ygiaam6lqnfr",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.8/headless/linux64",
"version": "2.0.8"
}
}
}
}

View file

@ -2,15 +2,15 @@
stdenv.mkDerivation rec {
pname = "vmware-modules";
version = "workstation-17.5.1-unstable-2024-01-12-${kernel.version}";
version = "workstation-17.6.1-unstable-2024-10-12-${kernel.version}";
src = fetchFromGitHub {
owner = "mkubecek";
owner = "philipl";
repo = "vmware-host-modules";
# Developer no longer provides tags for kernel compatibility fixes
# Commit hash for branch workstation-17.5.1 as of 2024-03-07
rev = "2c6d66f3f1947384038b765c897b102ecdb18298";
hash = "sha256-VKN6nxtgQqElVrSD5++UdngjZio4+vmetGCgTAfgtTs=";
# Commit hash for branch workstation-17.6.1 as of 2024-10-15
rev = "3a7595bddb2239c2149d7f730a4b57c8bb120d99";
hash = "sha256-YqRnym5bOZ2ApMegOAeiUNyhsEsF5g1TVALtkUz/v6E=";
};
hardeningDisable = [ "pic" ];

View file

@ -70,9 +70,9 @@
]
},
"forms": {
"hash": "sha256-JhLaTXll2kh/TaWXR1DfUCHuxaJlUMU1oY9ry9yoTTg=",
"url": "https://github.com/nextcloud-releases/forms/releases/download/v4.3.1/forms-v4.3.1.tar.gz",
"version": "4.3.1",
"hash": "sha256-iU2bqojO+pvMvKDiw+ANMvsH71Ul+8yQ+uNvJfa1ngc=",
"url": "https://github.com/nextcloud-releases/forms/releases/download/v4.3.2/forms-v4.3.2.tar.gz",
"version": "4.3.2",
"description": "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🧑‍💻 Connect to your software:** Easily integrate Forms into your service with our full-fledged [REST-API](https://github.com/nextcloud/forms/blob/main/docs/API.md).\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!",
"homepage": "https://github.com/nextcloud/forms",
"licenses": [
@ -90,9 +90,9 @@
]
},
"groupfolders": {
"hash": "sha256-PaDPYHUzkqY24Hzpi4e3DkvT32f+WYmx7WUNRevqIh8=",
"url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v16.0.10/groupfolders-v16.0.10.tar.gz",
"version": "16.0.10",
"hash": "sha256-Plgmnp3fIzvHVcy8+wEmjNHegHqBeUtcbsRA/PHEAlc=",
"url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v16.0.11/groupfolders-v16.0.11.tar.gz",
"version": "16.0.11",
"description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.",
"homepage": "https://github.com/nextcloud/groupfolders",
"licenses": [
@ -130,9 +130,9 @@
]
},
"mail": {
"hash": "sha256-8xQglDlOudopTsEqvnlsOTwOU6eAt6argVSXDxJdWUA=",
"url": "https://github.com/nextcloud-releases/mail/releases/download/v3.7.8/mail-v3.7.8.tar.gz",
"version": "3.7.8",
"hash": "sha256-Y591RR3m4k8G0+sNU+hRN013LikCFJ/41SbrILEfp8A=",
"url": "https://github.com/nextcloud-releases/mail/releases/download/v3.7.9/mail-v3.7.9.tar.gz",
"version": "3.7.9",
"description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 Were not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
"homepage": "https://github.com/nextcloud/mail#readme",
"licenses": [
@ -250,9 +250,9 @@
]
},
"richdocuments": {
"hash": "sha256-nk5l9naHHBmpZe0oNzRNuYchbOl2asPgoRaM1vQ3CLc=",
"url": "https://github.com/nextcloud-releases/richdocuments/releases/download/v8.3.11/richdocuments-v8.3.11.tar.gz",
"version": "8.3.11",
"hash": "sha256-MD6zuKfGdDeItmgO9NxJogUCgVS/8b5w/TZh9mPTQno=",
"url": "https://github.com/nextcloud-releases/richdocuments/releases/download/v8.3.12/richdocuments-v8.3.12.tar.gz",
"version": "8.3.12",
"description": "This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.\n\nYou can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store.",
"homepage": "https://collaboraoffice.com/",
"licenses": [
@ -320,9 +320,9 @@
]
},
"user_oidc": {
"hash": "sha256-8e4xQjOWSVAps6dg4jvN3MGVSOhaOgjPHPpTOgXKFJY=",
"url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v6.0.1/user_oidc-v6.0.1.tar.gz",
"version": "6.0.1",
"hash": "sha256-tF68YonuCQ90XuZvZnS7NmJApk3P2741XhFjnyb7TSQ=",
"url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v6.1.0/user_oidc-v6.1.0.tar.gz",
"version": "6.1.0",
"description": "Allows flexible configuration of an OIDC server as Nextcloud login user backend.",
"homepage": "https://github.com/nextcloud/user_oidc",
"licenses": [
@ -338,5 +338,15 @@
"licenses": [
"agpl"
]
},
"whiteboard": {
"hash": "sha256-3Q0B4nAVoerolDlBmjp0KwTWXLzETPrrZxnmfSDF5Gk=",
"url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.0.4/whiteboard-v1.0.4.tar.gz",
"version": "1.0.4",
"description": "The official whiteboard app for Nextcloud. It allows users to create and share whiteboards with other users and collaborate in real-time.\n\n**Whiteboard requires a separate collaboration server to work.** Please see the [documentation](https://github.com/nextcloud/whiteboard?tab=readme-ov-file#backend) on how to install it.\n\n- 🎨 Drawing shapes, writing text, connecting elements\n- 📝 Real-time collaboration\n- 🖼️ Add images with drag and drop\n- 📊 Easily add mermaid diagrams\n- ✨ Use the Smart Picker to embed other elements from Nextcloud\n- 📦 Image export\n- 💪 Strong foundation: We use Excalidraw as our base library",
"homepage": "https://github.com/nextcloud/whiteboard",
"licenses": [
"agpl"
]
}
}

View file

@ -70,9 +70,9 @@
]
},
"forms": {
"hash": "sha256-JhLaTXll2kh/TaWXR1DfUCHuxaJlUMU1oY9ry9yoTTg=",
"url": "https://github.com/nextcloud-releases/forms/releases/download/v4.3.1/forms-v4.3.1.tar.gz",
"version": "4.3.1",
"hash": "sha256-iU2bqojO+pvMvKDiw+ANMvsH71Ul+8yQ+uNvJfa1ngc=",
"url": "https://github.com/nextcloud-releases/forms/releases/download/v4.3.2/forms-v4.3.2.tar.gz",
"version": "4.3.2",
"description": "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🧑‍💻 Connect to your software:** Easily integrate Forms into your service with our full-fledged [REST-API](https://github.com/nextcloud/forms/blob/main/docs/API.md).\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!",
"homepage": "https://github.com/nextcloud/forms",
"licenses": [
@ -90,9 +90,9 @@
]
},
"groupfolders": {
"hash": "sha256-3CG5lp1lcPzcvOjcQIFcP8OVZvWCq3iNf4OUCu3X7t8=",
"url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v17.0.4/groupfolders-v17.0.4.tar.gz",
"version": "17.0.4",
"hash": "sha256-/pREdGW7kM2imVx6Jk5iZ9odQpk/93AwkFECVPJhyuI=",
"url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v17.0.5/groupfolders-v17.0.5.tar.gz",
"version": "17.0.5",
"description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.",
"homepage": "https://github.com/nextcloud/groupfolders",
"licenses": [
@ -130,9 +130,9 @@
]
},
"mail": {
"hash": "sha256-8xQglDlOudopTsEqvnlsOTwOU6eAt6argVSXDxJdWUA=",
"url": "https://github.com/nextcloud-releases/mail/releases/download/v3.7.8/mail-v3.7.8.tar.gz",
"version": "3.7.8",
"hash": "sha256-Y591RR3m4k8G0+sNU+hRN013LikCFJ/41SbrILEfp8A=",
"url": "https://github.com/nextcloud-releases/mail/releases/download/v3.7.9/mail-v3.7.9.tar.gz",
"version": "3.7.9",
"description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 Were not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
"homepage": "https://github.com/nextcloud/mail#readme",
"licenses": [
@ -140,8 +140,8 @@
]
},
"maps": {
"hash": "sha256-BmXs6Oepwnm+Cviy4awm3S8P9AiJTt1BnAQNb4TxVYE=",
"url": "https://github.com/nextcloud/maps/releases/download/v1.4.0/maps-1.4.0.tar.gz",
"hash": "sha256-FmRhpPRpMnCHkJFaVvQuR6Y7Pd7vpP+tUVih919g/fQ=",
"url": "https://github.com/nextcloud/maps/releases/download/v1.4.0-1-nightly/maps-1.4.0-1-nightly.tar.gz",
"version": "1.4.0",
"description": "**The whole world fits inside your cloud!**\n\n- **🗺 Beautiful map:** Using [OpenStreetMap](https://www.openstreetmap.org) and [Leaflet](https://leafletjs.com), you can choose between standard map, satellite, topographical, dark mode or even watercolor! 🎨\n- **⭐ Favorites:** Save your favorite places, privately! Sync with [GNOME Maps](https://github.com/nextcloud/maps/issues/30) and mobile apps is planned.\n- **🧭 Routing:** Possible using either [OSRM](http://project-osrm.org), [GraphHopper](https://www.graphhopper.com) or [Mapbox](https://www.mapbox.com).\n- **🖼 Photos on the map:** No more boring slideshows, just show directly where you were!\n- **🙋 Contacts on the map:** See where your friends live and plan your next visit.\n- **📱 Devices:** Lost your phone? Check the map!\n- **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned.",
"homepage": "https://github.com/nextcloud/maps",
@ -250,9 +250,9 @@
]
},
"richdocuments": {
"hash": "sha256-fcKzfo8tyYiZTwqMnR6vP+dTwTYt1UfBZG8ortPDCNg=",
"url": "https://github.com/nextcloud-releases/richdocuments/releases/download/v8.4.7/richdocuments-v8.4.7.tar.gz",
"version": "8.4.7",
"hash": "sha256-oRk06JoOvHUD4D7htl/B+CyCz9ybSIAZCELxV3v4uCU=",
"url": "https://github.com/nextcloud-releases/richdocuments/releases/download/v8.4.8/richdocuments-v8.4.8.tar.gz",
"version": "8.4.8",
"description": "This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.\n\nYou can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store.",
"homepage": "https://collaboraoffice.com/",
"licenses": [
@ -320,9 +320,9 @@
]
},
"user_oidc": {
"hash": "sha256-8e4xQjOWSVAps6dg4jvN3MGVSOhaOgjPHPpTOgXKFJY=",
"url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v6.0.1/user_oidc-v6.0.1.tar.gz",
"version": "6.0.1",
"hash": "sha256-tF68YonuCQ90XuZvZnS7NmJApk3P2741XhFjnyb7TSQ=",
"url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v6.1.0/user_oidc-v6.1.0.tar.gz",
"version": "6.1.0",
"description": "Allows flexible configuration of an OIDC server as Nextcloud login user backend.",
"homepage": "https://github.com/nextcloud/user_oidc",
"licenses": [
@ -338,5 +338,15 @@
"licenses": [
"agpl"
]
},
"whiteboard": {
"hash": "sha256-3Q0B4nAVoerolDlBmjp0KwTWXLzETPrrZxnmfSDF5Gk=",
"url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.0.4/whiteboard-v1.0.4.tar.gz",
"version": "1.0.4",
"description": "The official whiteboard app for Nextcloud. It allows users to create and share whiteboards with other users and collaborate in real-time.\n\n**Whiteboard requires a separate collaboration server to work.** Please see the [documentation](https://github.com/nextcloud/whiteboard?tab=readme-ov-file#backend) on how to install it.\n\n- 🎨 Drawing shapes, writing text, connecting elements\n- 📝 Real-time collaboration\n- 🖼️ Add images with drag and drop\n- 📊 Easily add mermaid diagrams\n- ✨ Use the Smart Picker to embed other elements from Nextcloud\n- 📦 Image export\n- 💪 Strong foundation: We use Excalidraw as our base library",
"homepage": "https://github.com/nextcloud/whiteboard",
"licenses": [
"agpl"
]
}
}

View file

@ -10,9 +10,9 @@
]
},
"calendar": {
"hash": "sha256-mlxW7ALSUr3t7fd4H/TDWASzsSlPKojOLh76v8wd1w0=",
"url": "https://github.com/nextcloud-releases/calendar/releases/download/v5.0.0/calendar-v5.0.0.tar.gz",
"version": "5.0.0",
"hash": "sha256-v9qjcyc2UBZK7QeO1XBZu11coPI92PRZcTipzBEMm3c=",
"url": "https://github.com/nextcloud-releases/calendar/releases/download/v5.0.1/calendar-v5.0.1.tar.gz",
"version": "5.0.1",
"description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite teams matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **Were not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
"homepage": "https://github.com/nextcloud/calendar/",
"licenses": [
@ -70,9 +70,9 @@
]
},
"forms": {
"hash": "sha256-JhLaTXll2kh/TaWXR1DfUCHuxaJlUMU1oY9ry9yoTTg=",
"url": "https://github.com/nextcloud-releases/forms/releases/download/v4.3.1/forms-v4.3.1.tar.gz",
"version": "4.3.1",
"hash": "sha256-iU2bqojO+pvMvKDiw+ANMvsH71Ul+8yQ+uNvJfa1ngc=",
"url": "https://github.com/nextcloud-releases/forms/releases/download/v4.3.2/forms-v4.3.2.tar.gz",
"version": "4.3.2",
"description": "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🧑‍💻 Connect to your software:** Easily integrate Forms into your service with our full-fledged [REST-API](https://github.com/nextcloud/forms/blob/main/docs/API.md).\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!",
"homepage": "https://github.com/nextcloud/forms",
"licenses": [
@ -90,9 +90,9 @@
]
},
"groupfolders": {
"hash": "sha256-jSDp8+s0bqYHMZ95UaiAMkMQdYL7tmdbde5mLG6gLOk=",
"url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v18.0.2/groupfolders-v18.0.2.tar.gz",
"version": "18.0.2",
"hash": "sha256-IrxzWjxqsA6prPn/gKj9MAw0R/1Qi3kHsddNU5E9sVk=",
"url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v18.0.3/groupfolders-v18.0.3.tar.gz",
"version": "18.0.3",
"description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.",
"homepage": "https://github.com/nextcloud/groupfolders",
"licenses": [
@ -130,9 +130,9 @@
]
},
"mail": {
"hash": "sha256-u0h9zCT/l9cUUFppKazx4oLkHYzlgGcb0OBOy1CXOG8=",
"url": "https://github.com/nextcloud-releases/mail/releases/download/v4.0.1/mail-v4.0.1.tar.gz",
"version": "4.0.1",
"hash": "sha256-iCK+B/BP4fCzaELNxL/A9OJ6Y34gZl9KIgh7lmSgtSA=",
"url": "https://github.com/nextcloud-releases/mail/releases/download/v4.0.2/mail-v4.0.2.tar.gz",
"version": "4.0.2",
"description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 Were not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
"homepage": "https://github.com/nextcloud/mail#readme",
"licenses": [
@ -240,9 +240,9 @@
]
},
"richdocuments": {
"hash": "sha256-sM536BlvbNNrGL++ZQItvnOBk+85Hr1Sxr6/0SZTm+g=",
"url": "https://github.com/nextcloud-releases/richdocuments/releases/download/v8.5.1/richdocuments-v8.5.1.tar.gz",
"version": "8.5.1",
"hash": "sha256-7sdMClIyQxeCToP40mKDzD4kY/wjSe8WyNl2dlis1a8=",
"url": "https://github.com/nextcloud-releases/richdocuments/releases/download/v8.5.2/richdocuments-v8.5.2.tar.gz",
"version": "8.5.2",
"description": "This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.\n\nYou can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store.",
"homepage": "https://collaboraoffice.com/",
"licenses": [
@ -290,9 +290,9 @@
]
},
"user_oidc": {
"hash": "sha256-8e4xQjOWSVAps6dg4jvN3MGVSOhaOgjPHPpTOgXKFJY=",
"url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v6.0.1/user_oidc-v6.0.1.tar.gz",
"version": "6.0.1",
"hash": "sha256-tF68YonuCQ90XuZvZnS7NmJApk3P2741XhFjnyb7TSQ=",
"url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v6.1.0/user_oidc-v6.1.0.tar.gz",
"version": "6.1.0",
"description": "Allows flexible configuration of an OIDC server as Nextcloud login user backend.",
"homepage": "https://github.com/nextcloud/user_oidc",
"licenses": [
@ -308,5 +308,15 @@
"licenses": [
"agpl"
]
},
"whiteboard": {
"hash": "sha256-3Q0B4nAVoerolDlBmjp0KwTWXLzETPrrZxnmfSDF5Gk=",
"url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.0.4/whiteboard-v1.0.4.tar.gz",
"version": "1.0.4",
"description": "The official whiteboard app for Nextcloud. It allows users to create and share whiteboards with other users and collaborate in real-time.\n\n**Whiteboard requires a separate collaboration server to work.** Please see the [documentation](https://github.com/nextcloud/whiteboard?tab=readme-ov-file#backend) on how to install it.\n\n- 🎨 Drawing shapes, writing text, connecting elements\n- 📝 Real-time collaboration\n- 🖼️ Add images with drag and drop\n- 📊 Easily add mermaid diagrams\n- ✨ Use the Smart Picker to embed other elements from Nextcloud\n- 📦 Image export\n- 💪 Strong foundation: We use Excalidraw as our base library",
"homepage": "https://github.com/nextcloud/whiteboard",
"licenses": [
"agpl"
]
}
}

View file

@ -37,4 +37,5 @@
, "unsplash": "agpl3Only"
, "user_oidc": "agpl3Plus"
, "user_saml": "agpl3Plus"
, "whiteboard": "agpl3Plus"
}

View file

@ -10,4 +10,5 @@ lib.makeScope newScope (self: with self; {
units = callPackage ./units.nix { inherit IOKit Foundation; };
highlight = callPackage ./highlight.nix { inherit IOKit Foundation; };
dbus = callPackage ./dbus.nix { inherit dbus; nushell_plugin_dbus = self.dbus; };
skim = callPackage ./skim.nix { inherit IOKit CoreFoundation; };
})

View file

@ -0,0 +1,55 @@
{
stdenv,
runCommand,
lib,
rustPlatform,
nix-update-script,
fetchFromGitHub,
IOKit,
CoreFoundation,
nushell,
skim,
}:
rustPlatform.buildRustPackage rec {
pname = "nu_plugin_skim";
version = "0.8.0";
src = fetchFromGitHub {
owner = "idanarye";
repo = pname;
rev = "v${version}";
hash = "sha256-3q2qt35lZ07N8E3p4/BoYX1H4B8qcKXJWnZhdJhgpJE=";
};
cargoHash = "sha256-+RYrQsB8LVjxZsQ7dVDK6GT6nXSM4b+qpILOe0Q2SjA=";
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ rustPlatform.bindgenHook ];
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
IOKit
CoreFoundation
];
passthru = {
updateScript = nix-update-script { };
tests.check =
let
nu = lib.getExe nushell;
plugin = lib.getExe skim;
in
runCommand "${pname}-test" { } ''
touch $out
${nu} -n -c "plugin add --plugin-config $out ${plugin}"
${nu} -n -c "plugin use --plugin-config $out skim"
'';
};
meta = with lib; {
description = "A nushell plugin that adds integrates the skim fuzzy finder";
mainProgram = "nu_plugin_skim";
homepage = "https://github.com/idanarye/nu_plugin_skim";
license = licenses.mit;
maintainers = with maintainers; [ aftix ];
platforms = with platforms; all;
};
}

View file

@ -18,13 +18,13 @@
stdenv.mkDerivation rec {
pname = "pgbackrest";
version = "2.53.1";
version = "2.54.0";
src = fetchFromGitHub {
owner = "pgbackrest";
repo = "pgbackrest";
rev = "release/${version}";
sha256 = "sha256-gCjPwDV7jlUwWUhuXHKqL/kigsu3V0ikxhcB3EIBvU0=";
sha256 = "sha256-EYpzVrEM0GrCJcGnFT4XfN6pULqsSMyH02b0zGInH7U=";
};
strictDeps = true;

View file

@ -28,18 +28,18 @@
stdenv.mkDerivation rec {
pname = "stratisd";
version = "3.7.2";
version = "3.7.3";
src = fetchFromGitHub {
owner = "stratis-storage";
repo = pname;
rev = "refs/tags/stratisd-v${version}";
hash = "sha256-pxLf/YLd7vdAjGRQDvJvwhJXpMUiI3dge5Y5x895SPA=";
hash = "sha256-W8ssLTFU36t6iLrt9S9V8qcN7EP4IsL7VbhNPLpftio=";
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
hash = "sha256-btSj69yBbnbK+jdWdMi3rQGKMOLWcwY5Zn3hmEWk/Hs=";
hash = "sha256-Qv2qknWNx2OQeucUFwL1veu3MSF+fd19jFfHCCVGprM=";
};
postPatch = ''

View file

@ -5,15 +5,15 @@
rustPlatform.buildRustPackage rec {
pname = "askalono";
version = "0.4.6";
version = "0.5.0";
src = fetchCrate {
pname = "askalono-cli";
inherit version;
hash = "sha256-7l5bHSsmuMoHbbOI3TAYFeHwD3Y62JvfrrXZa08V3+U=";
hash = "sha256-LwyUaU4m9fk+mG8FBfkbj9nBvd8KokwlV7cE7EBwk0Q=";
};
cargoHash = "sha256-OkN8V37GApJvremRJlWG3HSpWgMC17Ge8JMTiQVoc/g=";
cargoHash = "sha256-7yFdoXK9Nyg1uT0mtiXs6evOu1U1quxL7iMMMyxqxqk=";
meta = with lib; {
description = "Tool to detect open source licenses from texts";

View file

@ -9,16 +9,16 @@
buildGoModule rec {
pname = "saml2aws";
version = "2.36.17";
version = "2.36.18";
src = fetchFromGitHub {
owner = "Versent";
repo = "saml2aws";
rev = "v${version}";
sha256 = "sha256-2bt/AUcXwXf1TxPesfXSyoiBeLHx+LGgDk4xbXEAcaY=";
sha256 = "sha256-sj+6EnpPPsl/MWMxan6dXIqJO8NePcwnVFrTCcM1SbQ=";
};
vendorHash = "sha256-gtl8T8wXnpLgDZc6qSgFKpA+XbcLNHf20ieBkyNdE+s=";
vendorHash = "sha256-mi2Jqiy1T1fcuasrIXPkhu8VTmq78WFOK/d3i7CXkhw=";
nativeBuildInputs = [ installShellFiles ];
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ AppKit ];

View file

@ -448,6 +448,10 @@ with pkgs;
circt = callPackage ../development/compilers/circt { };
clang-uml = callPackage ../by-name/cl/clang-uml/package.nix {
stdenv = clangStdenv;
};
classicube = callPackage ../games/classicube { };
clj-kondo = callPackage ../development/tools/clj-kondo { };
@ -1910,7 +1914,7 @@ with pkgs;
scarab = callPackage ../tools/games/scarab { };
sdbus-cpp = callPackage ../development/libraries/sdbus-cpp { };
inherit (callPackage ../development/libraries/sdbus-cpp { }) sdbus-cpp sdbus-cpp_2;
sdlookup = callPackage ../tools/security/sdlookup { };
@ -33618,8 +33622,6 @@ with pkgs;
xchainkeys = callPackage ../tools/X11/xchainkeys { };
xchm = callPackage ../applications/misc/xchm { };
inherit (xorg) xcompmgr;
x-create-mouse-void = callPackage ../applications/window-managers/x-create-mouse-void { };
@ -34588,7 +34590,7 @@ with pkgs;
fltk = fltk-minimal;
};
factorio = callPackage ../games/factorio { releaseType = "alpha"; };
factorio = callPackage ../by-name/fa/factorio/package.nix { releaseType = "alpha"; };
factorio-experimental = factorio.override { releaseType = "alpha"; experimental = true; };
@ -34602,9 +34604,9 @@ with pkgs;
factorio-space-age-experimental = factorio.override { releaseType = "expansion"; experimental = true; };
factorio-mods = callPackage ../games/factorio/mods.nix { };
factorio-mods = callPackage ../by-name/fa/factorio/mods.nix { };
factorio-utils = callPackage ../games/factorio/utils.nix { };
factorio-utils = callPackage ../by-name/fa/factorio/utils.nix { };
fairymax = callPackage ../games/fairymax { };

View file

@ -3520,6 +3520,8 @@ self: super: with self; {
djangorestframework-camel-case = callPackage ../development/python-modules/djangorestframework-camel-case { };
djangorestframework-csv = callPackage ../development/python-modules/djangorestframework-csv { };
djangorestframework-guardian = callPackage ../development/python-modules/djangorestframework-guardian { };
djangorestframework-guardian2 = callPackage ../development/python-modules/djangorestframework-guardian2 { };
@ -9896,6 +9898,8 @@ self: super: with self; {
pescea = callPackage ../development/python-modules/pescea { };
pesq = callPackage ../development/python-modules/pesq { };
pex = callPackage ../development/python-modules/pex { };
pexif = callPackage ../development/python-modules/pexif { };