Merge remote-tracking branch 'origin/master' into staging-next
This commit is contained in:
@@ -13,7 +13,6 @@ on:
|
||||
- release-*
|
||||
- staging-*
|
||||
- haskell-updates
|
||||
- python-updates
|
||||
|
||||
permissions: {}
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ For the purposes of CI, branches in the NixOS/nixpkgs repository are classified
|
||||
- Pull Requests required.
|
||||
- Long-lived, no deletion, no force push.
|
||||
- **Secondary development** branches
|
||||
- `staging-` prefix, `haskell-updates` and `python-updates`
|
||||
- `staging-` prefix and `haskell-updates`
|
||||
- Pull Requests normally required, except when merging development branches into each other.
|
||||
- Long-lived, no deletion, no force push.
|
||||
- **Work-In-Progress** branches
|
||||
|
||||
@@ -6,4 +6,3 @@ staging
|
||||
release-*
|
||||
staging-*
|
||||
haskell-updates
|
||||
python-updates
|
||||
|
||||
@@ -9,7 +9,6 @@ const typeConfig = {
|
||||
staging: ['development', 'secondary'],
|
||||
'staging-next': ['development', 'secondary'],
|
||||
'haskell-updates': ['development', 'secondary'],
|
||||
'python-updates': ['development', 'secondary'],
|
||||
nixos: ['channel'],
|
||||
nixpkgs: ['channel'],
|
||||
}
|
||||
|
||||
@@ -31,10 +31,7 @@ let
|
||||
PAPERLESS_REDIS = "unix://${redisServer.unixSocket}";
|
||||
}
|
||||
// lib.optionalAttrs (cfg.settings.PAPERLESS_ENABLE_NLTK or true) {
|
||||
PAPERLESS_NLTK_DIR = pkgs.symlinkJoin {
|
||||
name = "paperless_ngx_nltk_data";
|
||||
paths = cfg.package.nltkData;
|
||||
};
|
||||
PAPERLESS_NLTK_DIR = cfg.package.nltkDataDir;
|
||||
}
|
||||
// lib.optionalAttrs (cfg.openMPThreadingWorkaround) {
|
||||
OMP_NUM_THREADS = "1";
|
||||
|
||||
@@ -103,14 +103,16 @@ let
|
||||
# Send a subrequest to verify if the user is authenticated and has permission to access the resource.
|
||||
auth_request /auth;
|
||||
|
||||
# Save the upstream metadata response headers from Authelia to variables.
|
||||
# Save the upstream metadata response headers from the auth request to variables
|
||||
auth_request_set $user $upstream_http_remote_user;
|
||||
auth_request_set $role $upstream_http_remote_role;
|
||||
auth_request_set $groups $upstream_http_remote_groups;
|
||||
auth_request_set $name $upstream_http_remote_name;
|
||||
auth_request_set $email $upstream_http_remote_email;
|
||||
|
||||
# Inject the metadata response headers from the variables into the request made to the backend.
|
||||
proxy_set_header Remote-User $user;
|
||||
proxy_set_header Remote-Role $role;
|
||||
proxy_set_header Remote-Groups $groups;
|
||||
proxy_set_header Remote-Email $email;
|
||||
proxy_set_header Remote-Name $name;
|
||||
@@ -195,9 +197,11 @@ in
|
||||
|
||||
checkConfig = mkOption {
|
||||
type = bool;
|
||||
default = pkgs.stdenv.buildPlatform.canExecute pkgs.stdenv.hostPlatform;
|
||||
defaultText = literalExpression ''
|
||||
default =
|
||||
pkgs.stdenv.buildPlatform.canExecute pkgs.stdenv.hostPlatform
|
||||
&& (!pkgs.stdenv.hostPlatform.isAarch64);
|
||||
defaultText = literalExpression ''
|
||||
pkgs.stdenv.buildPlatform.canExecute pkgs.stdenv.hostPlatform && !(pkgs.stdenv.hostPlaform.isAarch64)
|
||||
'';
|
||||
description = ''
|
||||
Whether to check the configuration at build time.
|
||||
@@ -343,8 +347,15 @@ in
|
||||
expires off;
|
||||
|
||||
keepalive_disable safari;
|
||||
|
||||
# vod module returns 502 for non-existent media
|
||||
# https://github.com/kaltura/nginx-vod-module/issues/468
|
||||
error_page 502 =404 /vod-not-found;
|
||||
'';
|
||||
};
|
||||
"/vod-not-found" = {
|
||||
return = 404;
|
||||
};
|
||||
"/stream/" = {
|
||||
alias = "/var/cache/frigate/stream/";
|
||||
extraConfig = nginxAuthRequest + ''
|
||||
@@ -549,6 +560,23 @@ in
|
||||
add_header Cache-Control "public";
|
||||
'';
|
||||
};
|
||||
"/locales/" = {
|
||||
root = cfg.package.web;
|
||||
extraConfig = ''
|
||||
access_log off;
|
||||
add_header Cache-Control "public";
|
||||
'';
|
||||
};
|
||||
"~ ^/.*-([A-Za-z0-9]+)\.webmanifest$" = {
|
||||
root = cfg.package.web;
|
||||
extraConfig = ''
|
||||
access_log off;
|
||||
expires 1y;
|
||||
add_header Cache-Control "public";
|
||||
default_type application/json;
|
||||
proxy_set_header Accept-Encoding "";
|
||||
'';
|
||||
};
|
||||
"/" = {
|
||||
root = cfg.package.web;
|
||||
tryFiles = "$uri $uri.html $uri/ /index.html";
|
||||
@@ -583,6 +611,9 @@ in
|
||||
open_file_cache_errors on;
|
||||
aio on;
|
||||
|
||||
# file upload size
|
||||
client_max_body_size 20M;
|
||||
|
||||
# https://github.com/kaltura/nginx-vod-module#vod_open_file_thread_pool
|
||||
vod_open_file_thread_pool default;
|
||||
|
||||
@@ -657,7 +688,6 @@ in
|
||||
[
|
||||
# unfree:
|
||||
# config.boot.kernelPackages.nvidiaPackages.latest.bin
|
||||
ffmpeg-headless
|
||||
libva-utils
|
||||
procps
|
||||
radeontop
|
||||
|
||||
@@ -1,31 +1,37 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
makeWrapper,
|
||||
electron,
|
||||
python3,
|
||||
stdenv,
|
||||
copyDesktopItems,
|
||||
nodejs,
|
||||
pnpm,
|
||||
makeDesktopItem,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "youtube-music";
|
||||
version = "3.9.0";
|
||||
version = "3.10.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "th-ch";
|
||||
repo = "youtube-music";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-xaHYNfW5ZLYiaeJ0F32NQ87woMh6K4Ea9rjgNOyabck=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-+PCDA7lHaUQw9DhODRsEScyJC+9v8UPiZ1W8w2h/Ljg=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# MPRIS's DesktopEntry property needs to match the desktop entry basename
|
||||
./fix-mpris-desktop-entry.patch
|
||||
];
|
||||
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-xIQyTetHU37gTxCcQp4VCqzGdIfVQGy/aORCVba6YQ0=";
|
||||
fetcherVersion = 2;
|
||||
hash = "sha256-b5I0n3CedA6qCL68lePU3pwyGp1JlQHzUpfCvhqw2qI=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -36,7 +42,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
]
|
||||
++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ copyDesktopItems ];
|
||||
|
||||
ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
|
||||
env.ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
|
||||
|
||||
postBuild =
|
||||
lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
@@ -51,6 +57,17 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
-c.electronVersion=${electron.version}
|
||||
'';
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "com.github.th_ch.youtube_music";
|
||||
exec = "youtube-music %u";
|
||||
icon = "youtube-music";
|
||||
desktopName = "YouTube Music";
|
||||
startupWMClass = "com.github.th_ch.youtube_music";
|
||||
categories = [ "AudioVideo" ];
|
||||
})
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
@@ -58,11 +75,11 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
mkdir -p $out/{Applications,bin}
|
||||
mv pack/mac*/YouTube\ Music.app $out/Applications
|
||||
makeWrapper $out/Applications/YouTube\ Music.app/Contents/MacOS/YouTube\ Music $out/bin/youtube-music
|
||||
ln -s "$out/Applications/YouTube Music.app/Contents/MacOS/YouTube Music" $out/bin/youtube-music
|
||||
''
|
||||
+ lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
|
||||
mkdir -p "$out/share/lib/youtube-music"
|
||||
cp -r pack/*-unpacked/{locales,resources{,.pak}} "$out/share/lib/youtube-music"
|
||||
mkdir -p "$out/share/youtube-music"
|
||||
cp -r pack/*-unpacked/{locales,resources{,.pak}} "$out/share/youtube-music"
|
||||
|
||||
pushd assets/generated/icons/png
|
||||
for file in *.png; do
|
||||
@@ -77,37 +94,23 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
postFixup = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
|
||||
makeWrapper ${electron}/bin/electron $out/bin/youtube-music \
|
||||
--add-flags $out/share/lib/youtube-music/resources/app.asar \
|
||||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
|
||||
--add-flags $out/share/youtube-music/resources/app.asar \
|
||||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \
|
||||
--set-default ELECTRON_FORCE_IS_PACKAGED 1 \
|
||||
--set-default ELECTRON_IS_DEV 0 \
|
||||
--inherit-argv0
|
||||
'';
|
||||
|
||||
patches = [
|
||||
# MPRIS's DesktopEntry property needs to match the desktop entry basename
|
||||
./fix-mpris-desktop-entry.patch
|
||||
];
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "com.github.th_ch.youtube_music";
|
||||
exec = "youtube-music %u";
|
||||
icon = "youtube-music";
|
||||
desktopName = "YouTube Music";
|
||||
startupWMClass = "com.github.th_ch.youtube_music";
|
||||
categories = [ "AudioVideo" ];
|
||||
})
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Electron wrapper around YouTube Music";
|
||||
homepage = "https://th-ch.github.io/youtube-music/";
|
||||
changelog = "https://github.com/th-ch/youtube-music/blob/master/changelog.md#${
|
||||
lib.replaceStrings [ "." ] [ "" ] finalAttrs.src.rev
|
||||
lib.replaceStrings [ "." ] [ "" ] finalAttrs.src.tag
|
||||
}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
aacebedo
|
||||
SuperSandro2000
|
||||
];
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
copper,
|
||||
python3,
|
||||
pkg-config,
|
||||
withQt ? false,
|
||||
qtbase ? null,
|
||||
wrapQtAppsHook ? null,
|
||||
withGtk2 ? false,
|
||||
gtk2,
|
||||
withGtk3 ? false,
|
||||
gtk3,
|
||||
mkDerivation ? stdenv.mkDerivation,
|
||||
}:
|
||||
let
|
||||
onlyOneEnabled = xs: 1 == builtins.length (builtins.filter lib.id xs);
|
||||
in
|
||||
assert onlyOneEnabled [
|
||||
withQt
|
||||
withGtk2
|
||||
withGtk3
|
||||
];
|
||||
mkDerivation rec {
|
||||
pname = "code-browser";
|
||||
version = "8.0";
|
||||
src = fetchurl {
|
||||
url = "https://tibleiz.net/download/code-browser-${version}-src.tar.gz";
|
||||
sha256 = "sha256-beCp4lx4MI1+hVgWp2h3piE/zu51zfwQdB5g7ImgmwY=";
|
||||
};
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile --replace "LFLAGS=-no-pie" "LFLAGS=-no-pie -L."
|
||||
patchShebangs .
|
||||
''
|
||||
+ lib.optionalString withQt ''
|
||||
substituteInPlace libs/copper-ui/Makefile --replace "moc -o" "${qtbase.dev}/bin/moc -o"
|
||||
substituteInPlace libs/copper-ui/Makefile --replace "all: qt gtk gtk2" "all: qt"
|
||||
''
|
||||
+ lib.optionalString withGtk2 ''
|
||||
substituteInPlace libs/copper-ui/Makefile --replace "all: qt gtk gtk2" "all: gtk2"
|
||||
''
|
||||
+ lib.optionalString withGtk3 ''
|
||||
substituteInPlace libs/copper-ui/Makefile --replace "all: qt gtk gtk2" "all: gtk"
|
||||
'';
|
||||
nativeBuildInputs = [
|
||||
copper
|
||||
python3
|
||||
pkg-config
|
||||
]
|
||||
++ lib.optionals withGtk2 [ gtk2 ]
|
||||
++ lib.optionals withGtk3 [ gtk3 ]
|
||||
++ lib.optionals withQt [
|
||||
qtbase
|
||||
wrapQtAppsHook
|
||||
];
|
||||
buildInputs =
|
||||
lib.optionals withQt [ qtbase ]
|
||||
++ lib.optionals withGtk2 [ gtk2 ]
|
||||
++ lib.optionals withGtk3 [ gtk3 ];
|
||||
makeFlags = [
|
||||
"prefix=$(out)"
|
||||
"COPPER=${copper}/bin/copper-elf64"
|
||||
"with-local-libs"
|
||||
]
|
||||
++ lib.optionals withQt [
|
||||
"QINC=${qtbase.dev}/include"
|
||||
"UI=qt"
|
||||
]
|
||||
++ lib.optionals withGtk2 [ "UI=gtk2" ]
|
||||
++ lib.optionals withGtk3 [ "UI=gtk" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Folding text editor, designed to hierarchically structure any kind of text file and especially source code";
|
||||
homepage = "https://tibleiz.net/code-browser/";
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.x86_64;
|
||||
};
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
pkg-config,
|
||||
intltool,
|
||||
gtk2,
|
||||
xorg,
|
||||
glib,
|
||||
xneur,
|
||||
libglade,
|
||||
GConf,
|
||||
libappindicator-gtk2,
|
||||
pcre,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gxneur";
|
||||
version = "0.20.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/AndrewCrewKuznetsov/xneur-devel/raw/f66723feb272c68f7c22a8bf0dbcafa5e3a8a5ee/dists/${version}/gxneur_${version}.orig.tar.gz";
|
||||
sha256 = "0avmhdcj0hpr55fc0iih8fjykmdhn34c8mwdnqvl8jh4nhxxchxr";
|
||||
};
|
||||
|
||||
# glib-2.62 deprecations
|
||||
env.NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
intltool
|
||||
];
|
||||
buildInputs = [
|
||||
xorg.libX11
|
||||
glib
|
||||
gtk2
|
||||
xorg.libXpm
|
||||
xorg.libXt
|
||||
xorg.libXext
|
||||
xneur
|
||||
libglade
|
||||
GConf
|
||||
pcre
|
||||
libappindicator-gtk2
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "GUI for XNEUR keyboard layout switcher";
|
||||
platforms = platforms.linux;
|
||||
license = with licenses; [
|
||||
gpl2
|
||||
gpl3
|
||||
];
|
||||
mainProgram = "gxneur";
|
||||
};
|
||||
}
|
||||
@@ -128,6 +128,10 @@ rec {
|
||||
krb5
|
||||
gsettings-desktop-schemas
|
||||
hicolor-icon-theme # dont show a gtk warning about hicolor not being installed
|
||||
|
||||
# libraries not on the upstream include list, but nevertheless expected
|
||||
# by at least one appimage
|
||||
libsecret # For bitwarden, appimage is x86_64 only
|
||||
];
|
||||
|
||||
# list of libraries expected in an appimage environment:
|
||||
@@ -244,8 +248,6 @@ rec {
|
||||
at-spi2-core
|
||||
pciutils # for FreeCAD
|
||||
pipewire # immersed-vr wayland support
|
||||
|
||||
libsecret # For bitwarden
|
||||
libmpg123 # Slippi launcher
|
||||
brotli # TwitchDropsMiner
|
||||
];
|
||||
|
||||
@@ -308,8 +308,6 @@ let
|
||||
substituteInPlace authentik/lib/default.yml \
|
||||
--replace-fail '/blueprints' "$out/blueprints" \
|
||||
--replace-fail './media' '/var/lib/authentik/media'
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail 'djangorestframework-guardian' 'djangorestframework-guardian2'
|
||||
substituteInPlace authentik/stages/email/utils.py \
|
||||
--replace-fail 'web/' '${webui}/'
|
||||
'';
|
||||
@@ -346,7 +344,7 @@ let
|
||||
django-storages
|
||||
django-tenants
|
||||
djangorestframework
|
||||
djangorestframework-guardian2
|
||||
djangorestframework-guardian
|
||||
docker
|
||||
drf-orjson-renderer
|
||||
drf-spectacular
|
||||
|
||||
@@ -92,9 +92,10 @@ stdenv.mkDerivation rec {
|
||||
patchelf --replace-needed libpcap.so.0.8 ${libpcap}/lib/libpcap.so $out/bin/warp-dex
|
||||
mv lib/systemd/system $out/lib/systemd/
|
||||
substituteInPlace $out/lib/systemd/system/warp-svc.service \
|
||||
--replace "ExecStart=" "ExecStart=$out"
|
||||
--replace-fail "ExecStart=" "ExecStart=$out"
|
||||
substituteInPlace $out/lib/systemd/user/warp-taskbar.service \
|
||||
--replace "ExecStart=" "ExecStart=$out"
|
||||
--replace-fail "ExecStart=" "ExecStart=$out" \
|
||||
--replace-fail "BindsTo=" "PartOf="
|
||||
|
||||
cat >>$out/lib/systemd/user/warp-taskbar.service <<EOF
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
libffi,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "copper";
|
||||
version = "4.6";
|
||||
src = fetchurl {
|
||||
url = "https://tibleiz.net/download/copper-${version}-src.tar.gz";
|
||||
sha256 = "sha256-tyxAMJp4H50eBz8gjt2O3zj5fq6nOIXKX47wql8aUUg=";
|
||||
};
|
||||
buildInputs = [
|
||||
libffi
|
||||
];
|
||||
postPatch = ''
|
||||
patchShebangs .
|
||||
'';
|
||||
buildPhase = ''
|
||||
make BACKEND=elf64 boot-elf64
|
||||
make BACKEND=elf64 COPPER=stage3/copper-elf64 copper-elf64
|
||||
'';
|
||||
installPhase = ''
|
||||
make BACKEND=elf64 install prefix=$out
|
||||
'';
|
||||
meta = with lib; {
|
||||
description = "Simple imperative language, statically typed with type inference and genericity";
|
||||
homepage = "https://tibleiz.net/copper/";
|
||||
license = licenses.bsd2;
|
||||
platforms = platforms.x86_64;
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
versionCheckHook,
|
||||
}:
|
||||
let
|
||||
version = "1.35.0";
|
||||
version = "1.35.1";
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
throwSystem = throw "envoy-bin is not available for ${system}.";
|
||||
|
||||
@@ -21,8 +21,8 @@ let
|
||||
|
||||
hash =
|
||||
{
|
||||
aarch64-linux = "sha256-PLlFrs65Z+mV5V2OoW+bb/91DC5V9Ss2HnERccIunWY=";
|
||||
x86_64-linux = "sha256-0l12MVwCNrUPjn9t6hOpuUscP6EQQHNLd0kG4YjhEeY=";
|
||||
aarch64-linux = "sha256-tIBXnm6bGdA6tlYFL+aDf1bOjlUVof0MDNDpFi0tcbE=";
|
||||
x86_64-linux = "sha256-emAbbVhEw0MA21rPxQD/z/p3yVuDi5JZg1yjuRkkmlo=";
|
||||
}
|
||||
.${system} or throwSystem;
|
||||
in
|
||||
|
||||
@@ -1,380 +1,22 @@
|
||||
diff --git a/frigate/api/media.py b/frigate/api/media.py
|
||||
index b5f3ba70..09a09c13 100644
|
||||
--- a/frigate/api/media.py
|
||||
+++ b/frigate/api/media.py
|
||||
@@ -31,6 +31,7 @@ from frigate.config import FrigateConfig
|
||||
from frigate.const import (
|
||||
CACHE_DIR,
|
||||
CLIPS_DIR,
|
||||
+ INSTALL_DIR,
|
||||
MAX_SEGMENT_DURATION,
|
||||
PREVIEW_FRAME_TYPE,
|
||||
RECORD_DIR,
|
||||
@@ -154,7 +155,9 @@ def latest_frame(
|
||||
frame_processor.get_current_frame_time(camera_name) + retry_interval
|
||||
):
|
||||
if request.app.camera_error_image is None:
|
||||
- error_image = glob.glob("/opt/frigate/frigate/images/camera-error.jpg")
|
||||
+ error_image = glob.glob(
|
||||
+ os.path.join(INSTALL_DIR, "frigate/images/camera-error.jpg")
|
||||
+ )
|
||||
|
||||
if len(error_image) > 0:
|
||||
request.app.camera_error_image = cv2.imread(
|
||||
@@ -497,7 +500,7 @@ def recording_clip(
|
||||
)
|
||||
|
||||
file_name = sanitize_filename(f"playlist_{camera_name}_{start_ts}-{end_ts}.txt")
|
||||
- file_path = f"/tmp/cache/{file_name}"
|
||||
+ file_path = os.path.join(CACHE_DIR, file_name)
|
||||
with open(file_path, "w") as file:
|
||||
clip: Recordings
|
||||
for clip in recordings:
|
||||
diff --git a/frigate/api/preview.py b/frigate/api/preview.py
|
||||
index d14a15ff..2db2326a 100644
|
||||
--- a/frigate/api/preview.py
|
||||
+++ b/frigate/api/preview.py
|
||||
@@ -9,7 +9,7 @@ from fastapi import APIRouter
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from frigate.api.defs.tags import Tags
|
||||
-from frigate.const import CACHE_DIR, PREVIEW_FRAME_TYPE
|
||||
+from frigate.const import BASE_DIR, CACHE_DIR, PREVIEW_FRAME_TYPE
|
||||
from frigate.models import Previews
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -52,7 +52,7 @@ def preview_ts(camera_name: str, start_ts: float, end_ts: float):
|
||||
clips.append(
|
||||
{
|
||||
"camera": preview["camera"],
|
||||
- "src": preview["path"].replace("/media/frigate", ""),
|
||||
+ "src": preview["path"].replace(BASE_DIR, ""),
|
||||
"type": "video/mp4",
|
||||
"start": preview["start_time"],
|
||||
"end": preview["end_time"],
|
||||
diff --git a/frigate/comms/webpush.py b/frigate/comms/webpush.py
|
||||
index abfd52d1..ab4cf3c5 100644
|
||||
index c5986d45..b767e19e 100644
|
||||
--- a/frigate/comms/webpush.py
|
||||
+++ b/frigate/comms/webpush.py
|
||||
@@ -12,7 +12,7 @@ from pywebpush import WebPusher
|
||||
@@ -17,7 +17,7 @@ from titlecase import titlecase
|
||||
from frigate.comms.base_communicator import Communicator
|
||||
from frigate.comms.config_updater import ConfigSubscriber
|
||||
from frigate.comms.dispatcher import Communicator
|
||||
from frigate.config import FrigateConfig
|
||||
-from frigate.const import CONFIG_DIR
|
||||
+from frigate.const import BASE_DIR, CONFIG_DIR
|
||||
from frigate.models import User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -151,7 +151,7 @@ class WebPushClient(Communicator): # type: ignore[misc]
|
||||
camera: str = payload["after"]["camera"]
|
||||
title = f"{', '.join(sorted_objects).replace('_', ' ').title()}{' was' if state == 'end' else ''} detected in {', '.join(payload['after']['data']['zones']).replace('_', ' ').title()}"
|
||||
message = f"Detected on {camera.replace('_', ' ').title()}"
|
||||
@@ -333,7 +333,7 @@ class WebPushClient(Communicator): # type: ignore[misc]
|
||||
|
||||
title = f"{titlecase(', '.join(sorted_objects).replace('_', ' '))}{' was' if state == 'end' else ''} detected in {titlecase(', '.join(payload['after']['data']['zones']).replace('_', ' '))}"
|
||||
message = f"Detected on {titlecase(camera.replace('_', ' '))}"
|
||||
- image = f"{payload['after']['thumb_path'].replace('/media/frigate', '')}"
|
||||
+ image = f"{payload['after']['thumb_path'].replace(BASE_DIR, '')}"
|
||||
|
||||
# if event is ongoing open to live view otherwise open to recordings view
|
||||
direct_url = f"/review?id={reviewId}" if state == "end" else f"/#{camera}"
|
||||
diff --git a/frigate/const.py b/frigate/const.py
|
||||
index 5976f47b..dc710467 100644
|
||||
--- a/frigate/const.py
|
||||
+++ b/frigate/const.py
|
||||
@@ -1,5 +1,6 @@
|
||||
import re
|
||||
|
||||
+INSTALL_DIR = "/opt/frigate"
|
||||
CONFIG_DIR = "/config"
|
||||
DEFAULT_DB_PATH = f"{CONFIG_DIR}/frigate.db"
|
||||
MODEL_CACHE_DIR = f"{CONFIG_DIR}/model_cache"
|
||||
diff --git a/frigate/detectors/detector_config.py b/frigate/detectors/detector_config.py
|
||||
index 452f1fee..13535a62 100644
|
||||
--- a/frigate/detectors/detector_config.py
|
||||
+++ b/frigate/detectors/detector_config.py
|
||||
@@ -9,7 +9,7 @@ import requests
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic.fields import PrivateAttr
|
||||
|
||||
-from frigate.const import DEFAULT_ATTRIBUTE_LABEL_MAP
|
||||
+from frigate.const import DEFAULT_ATTRIBUTE_LABEL_MAP, MODEL_CACHE_DIR
|
||||
from frigate.plus import PlusApi
|
||||
from frigate.util.builtin import generate_color_palette, load_labels
|
||||
|
||||
@@ -117,7 +117,7 @@ class ModelConfig(BaseModel):
|
||||
return
|
||||
|
||||
model_id = self.path[7:]
|
||||
- self.path = f"/config/model_cache/{model_id}"
|
||||
+ self.path = os.path.join(MODEL_CACHE_DIR, model_id)
|
||||
model_info_path = f"{self.path}.json"
|
||||
|
||||
# download the model if it doesn't exist
|
||||
diff --git a/frigate/detectors/plugins/hailo8l.py b/frigate/detectors/plugins/hailo8l.py
|
||||
index b66d78bd..69e86bc5 100644
|
||||
--- a/frigate/detectors/plugins/hailo8l.py
|
||||
+++ b/frigate/detectors/plugins/hailo8l.py
|
||||
@@ -22,6 +22,7 @@ except ModuleNotFoundError:
|
||||
from pydantic import BaseModel, Field
|
||||
from typing_extensions import Literal
|
||||
|
||||
+from frigate.const import MODEL_CACHE_DIR
|
||||
from frigate.detectors.detection_api import DetectionApi
|
||||
from frigate.detectors.detector_config import BaseDetectorConfig
|
||||
|
||||
@@ -57,7 +58,7 @@ class HailoDetector(DetectionApi):
|
||||
self.h8l_tensor_format = detector_config.model.input_tensor
|
||||
self.h8l_pixel_format = detector_config.model.input_pixel_format
|
||||
self.model_url = "https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v2.11.0/hailo8l/ssd_mobilenet_v1.hef"
|
||||
- self.cache_dir = "/config/model_cache/h8l_cache"
|
||||
+ self.cache_dir = os.path.join(MODEL_CACHE_DIR, "h8l_cache")
|
||||
self.expected_model_filename = "ssd_mobilenet_v1.hef"
|
||||
output_type = "FLOAT32"
|
||||
|
||||
diff --git a/frigate/detectors/plugins/openvino.py b/frigate/detectors/plugins/openvino.py
|
||||
index 51e48530..d199317b 100644
|
||||
--- a/frigate/detectors/plugins/openvino.py
|
||||
+++ b/frigate/detectors/plugins/openvino.py
|
||||
@@ -7,6 +7,7 @@ import openvino.properties as props
|
||||
from pydantic import Field
|
||||
from typing_extensions import Literal
|
||||
|
||||
+from frigate.const import MODEL_CACHE_DIR
|
||||
from frigate.detectors.detection_api import DetectionApi
|
||||
from frigate.detectors.detector_config import BaseDetectorConfig, ModelTypeEnum
|
||||
|
||||
@@ -35,8 +36,10 @@ class OvDetector(DetectionApi):
|
||||
logger.error(f"OpenVino model file {detector_config.model.path} not found.")
|
||||
raise FileNotFoundError
|
||||
|
||||
- os.makedirs("/config/model_cache/openvino", exist_ok=True)
|
||||
- self.ov_core.set_property({props.cache_dir: "/config/model_cache/openvino"})
|
||||
+ os.makedirs(os.path.join(MODEL_CACHE_DIR, "openvino"), exist_ok=True)
|
||||
+ self.ov_core.set_property(
|
||||
+ {props.cache_dir: os.path.join(MODEL_CACHE_DIR, "openvino")}
|
||||
+ )
|
||||
self.interpreter = self.ov_core.compile_model(
|
||||
model=detector_config.model.path, device_name=detector_config.device
|
||||
)
|
||||
diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py
|
||||
index df94d7b6..bc3d9ae0 100644
|
||||
--- a/frigate/detectors/plugins/rknn.py
|
||||
+++ b/frigate/detectors/plugins/rknn.py
|
||||
@@ -6,6 +6,7 @@ from typing import Literal
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
+from frigate.const import MODEL_CACHE_DIR
|
||||
from frigate.detectors.detection_api import DetectionApi
|
||||
from frigate.detectors.detector_config import BaseDetectorConfig, ModelTypeEnum
|
||||
|
||||
@@ -17,7 +18,7 @@ supported_socs = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"]
|
||||
|
||||
supported_models = {ModelTypeEnum.yolonas: "^deci-fp16-yolonas_[sml]$"}
|
||||
|
||||
-model_cache_dir = "/config/model_cache/rknn_cache/"
|
||||
+model_cache_dir = os.path.join(MODEL_CACHE_DIR, "rknn_cache/")
|
||||
|
||||
|
||||
class RknnDetectorConfig(BaseDetectorConfig):
|
||||
diff --git a/frigate/detectors/plugins/rocm.py b/frigate/detectors/plugins/rocm.py
|
||||
index 60118d12..7c87edb5 100644
|
||||
--- a/frigate/detectors/plugins/rocm.py
|
||||
+++ b/frigate/detectors/plugins/rocm.py
|
||||
@@ -9,6 +9,7 @@ import numpy as np
|
||||
from pydantic import Field
|
||||
from typing_extensions import Literal
|
||||
|
||||
+from frigate.const import MODEL_CACHE_DIR
|
||||
from frigate.detectors.detection_api import DetectionApi
|
||||
from frigate.detectors.detector_config import (
|
||||
BaseDetectorConfig,
|
||||
@@ -116,7 +117,7 @@ class ROCmDetector(DetectionApi):
|
||||
|
||||
logger.info(f"AMD/ROCm: saving parsed model into {mxr_path}")
|
||||
|
||||
- os.makedirs("/config/model_cache/rocm", exist_ok=True)
|
||||
+ os.makedirs(os.path.join(MODEL_CACHE_DIR, "rocm"), exist_ok=True)
|
||||
migraphx.save(self.model, mxr_path)
|
||||
|
||||
logger.info("AMD/ROCm: model loaded")
|
||||
diff --git a/frigate/output/birdseye.py b/frigate/output/birdseye.py
|
||||
index 00f17c8f..8331eb64 100644
|
||||
--- a/frigate/output/birdseye.py
|
||||
+++ b/frigate/output/birdseye.py
|
||||
@@ -16,7 +16,7 @@ import numpy as np
|
||||
|
||||
from frigate.comms.config_updater import ConfigSubscriber
|
||||
from frigate.config import BirdseyeModeEnum, FfmpegConfig, FrigateConfig
|
||||
-from frigate.const import BASE_DIR, BIRDSEYE_PIPE
|
||||
+from frigate.const import BASE_DIR, BIRDSEYE_PIPE, INSTALL_DIR
|
||||
from frigate.util.image import (
|
||||
SharedMemoryFrameManager,
|
||||
copy_yuv_to_position,
|
||||
@@ -297,7 +297,9 @@ class BirdsEyeFrameManager:
|
||||
birdseye_logo = cv2.imread(custom_logo_files[0], cv2.IMREAD_UNCHANGED)
|
||||
|
||||
if birdseye_logo is None:
|
||||
- logo_files = glob.glob("/opt/frigate/frigate/images/birdseye.png")
|
||||
+ logo_files = glob.glob(
|
||||
+ os.path.join(INSTALL_DIR, "frigate/images/birdseye.png")
|
||||
+ )
|
||||
|
||||
if len(logo_files) > 0:
|
||||
birdseye_logo = cv2.imread(logo_files[0], cv2.IMREAD_UNCHANGED)
|
||||
diff --git a/frigate/test/http_api/base_http_test.py b/frigate/test/http_api/base_http_test.py
|
||||
index e7a1d03e..4fa4a5b5 100644
|
||||
--- a/frigate/test/http_api/base_http_test.py
|
||||
+++ b/frigate/test/http_api/base_http_test.py
|
||||
@@ -9,6 +9,7 @@ from playhouse.sqliteq import SqliteQueueDatabase
|
||||
|
||||
from frigate.api.fastapi_app import create_fastapi_app
|
||||
from frigate.config import FrigateConfig
|
||||
+from frigate.const import BASE_DIR, CACHE_DIR
|
||||
from frigate.models import Event, Recordings, ReviewSegment
|
||||
from frigate.review.types import SeverityEnum
|
||||
from frigate.test.const import TEST_DB, TEST_DB_CLEANUPS
|
||||
@@ -72,19 +73,19 @@ class BaseTestHttp(unittest.TestCase):
|
||||
"total": 67.1,
|
||||
"used": 16.6,
|
||||
},
|
||||
- "/media/frigate/clips": {
|
||||
+ os.path.join(BASE_DIR, "clips"): {
|
||||
"free": 42429.9,
|
||||
"mount_type": "ext4",
|
||||
"total": 244529.7,
|
||||
"used": 189607.0,
|
||||
},
|
||||
- "/media/frigate/recordings": {
|
||||
+ os.path.join(BASE_DIR, "recordings"): {
|
||||
"free": 0.2,
|
||||
"mount_type": "ext4",
|
||||
"total": 8.0,
|
||||
"used": 7.8,
|
||||
},
|
||||
- "/tmp/cache": {
|
||||
+ CACHE_DIR: {
|
||||
"free": 976.8,
|
||||
"mount_type": "tmpfs",
|
||||
"total": 1000.0,
|
||||
diff --git a/frigate/test/test_config.py b/frigate/test/test_config.py
|
||||
index e6cb1274..5a3deefd 100644
|
||||
--- a/frigate/test/test_config.py
|
||||
+++ b/frigate/test/test_config.py
|
||||
@@ -854,9 +854,9 @@ class TestConfig(unittest.TestCase):
|
||||
assert frigate_config.model.merged_labelmap[0] == "person"
|
||||
|
||||
def test_plus_labelmap(self):
|
||||
- with open("/config/model_cache/test", "w") as f:
|
||||
+ with open(os.path.join(MODEL_CACHE_DIR, "test"), "w") as f:
|
||||
json.dump(self.plus_model_info, f)
|
||||
- with open("/config/model_cache/test.json", "w") as f:
|
||||
+ with open(os.path.join(MODEL_CACHE_DIR, "test.json"), "w") as f:
|
||||
json.dump(self.plus_model_info, f)
|
||||
|
||||
config = {
|
||||
diff --git a/frigate/test/test_http.py b/frigate/test/test_http.py
|
||||
index 21379425..66f9d22a 100644
|
||||
--- a/frigate/test/test_http.py
|
||||
+++ b/frigate/test/test_http.py
|
||||
@@ -12,6 +12,7 @@ from playhouse.sqliteq import SqliteQueueDatabase
|
||||
|
||||
from frigate.api.fastapi_app import create_fastapi_app
|
||||
from frigate.config import FrigateConfig
|
||||
+from frigate.const import BASE_DIR, CACHE_DIR
|
||||
from frigate.models import Event, Recordings, Timeline
|
||||
from frigate.stats.emitter import StatsEmitter
|
||||
from frigate.test.const import TEST_DB, TEST_DB_CLEANUPS
|
||||
@@ -76,19 +77,19 @@ class TestHttp(unittest.TestCase):
|
||||
"total": 67.1,
|
||||
"used": 16.6,
|
||||
},
|
||||
- "/media/frigate/clips": {
|
||||
+ os.path.join(BASE_DIR, "clips"): {
|
||||
"free": 42429.9,
|
||||
"mount_type": "ext4",
|
||||
"total": 244529.7,
|
||||
"used": 189607.0,
|
||||
},
|
||||
- "/media/frigate/recordings": {
|
||||
+ os.path.join(BASE_DIR, "recordings"): {
|
||||
"free": 0.2,
|
||||
"mount_type": "ext4",
|
||||
"total": 8.0,
|
||||
"used": 7.8,
|
||||
},
|
||||
- "/tmp/cache": {
|
||||
+ CACHE_DIR: {
|
||||
"free": 976.8,
|
||||
"mount_type": "tmpfs",
|
||||
"total": 1000.0,
|
||||
diff --git a/frigate/util/config.py b/frigate/util/config.py
|
||||
index d456c755..b6b270c9 100644
|
||||
--- a/frigate/util/config.py
|
||||
+++ b/frigate/util/config.py
|
||||
@@ -14,7 +14,7 @@ from frigate.util.services import get_video_properties
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
CURRENT_CONFIG_VERSION = "0.15-1"
|
||||
-DEFAULT_CONFIG_FILE = "/config/config.yml"
|
||||
+DEFAULT_CONFIG_FILE = os.path.join(CONFIG_DIR, "config.yml")
|
||||
|
||||
|
||||
def find_config_file() -> str:
|
||||
diff --git a/frigate/util/model.py b/frigate/util/model.py
|
||||
index ce2c9538..6e93cb38 100644
|
||||
--- a/frigate/util/model.py
|
||||
+++ b/frigate/util/model.py
|
||||
@@ -12,6 +12,8 @@ except ImportError:
|
||||
# openvino is not included
|
||||
pass
|
||||
|
||||
+from frigate.const import MODEL_CACHE_DIR
|
||||
+
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -46,7 +48,8 @@ def get_ort_providers(
|
||||
# so it is not enabled by default
|
||||
if device == "Tensorrt":
|
||||
os.makedirs(
|
||||
- "/config/model_cache/tensorrt/ort/trt-engines", exist_ok=True
|
||||
+ os.path.join(MODEL_CACHE_DIR, "tensorrt/ort/trt-engines"),
|
||||
+ exist_ok=True,
|
||||
)
|
||||
device_id = 0 if not device.isdigit() else int(device)
|
||||
providers.append(provider)
|
||||
@@ -57,19 +60,23 @@ def get_ort_providers(
|
||||
and os.environ.get("USE_FP_16", "True") != "False",
|
||||
"trt_timing_cache_enable": True,
|
||||
"trt_engine_cache_enable": True,
|
||||
- "trt_timing_cache_path": "/config/model_cache/tensorrt/ort",
|
||||
- "trt_engine_cache_path": "/config/model_cache/tensorrt/ort/trt-engines",
|
||||
+ "trt_timing_cache_path": os.path.join(
|
||||
+ MODEL_CACHE_DIR, "tensorrt/ort"
|
||||
+ ),
|
||||
+ "trt_engine_cache_path": os.path.join(
|
||||
+ MODEL_CACHE_DIR, "tensorrt/ort/trt-engines"
|
||||
+ ),
|
||||
}
|
||||
)
|
||||
else:
|
||||
continue
|
||||
elif provider == "OpenVINOExecutionProvider":
|
||||
- os.makedirs("/config/model_cache/openvino/ort", exist_ok=True)
|
||||
+ os.makedirs(os.path.join(MODEL_CACHE_DIR, "openvino/ort"), exist_ok=True)
|
||||
providers.append(provider)
|
||||
options.append(
|
||||
{
|
||||
"arena_extend_strategy": "kSameAsRequested",
|
||||
- "cache_dir": "/config/model_cache/openvino/ort",
|
||||
+ "cache_dir": os.path.join(MODEL_CACHE_DIR, "openvino/ort"),
|
||||
"device_type": device,
|
||||
}
|
||||
)
|
||||
@@ -103,7 +110,7 @@ class ONNXModelRunner:
|
||||
self.type = "ov"
|
||||
self.ov = ov.Core()
|
||||
self.ov.set_property(
|
||||
- {ov.properties.cache_dir: "/config/model_cache/openvino"}
|
||||
+ {ov.properties.cache_dir: os.path.join(MODEL_CACHE_DIR, "openvino")}
|
||||
)
|
||||
self.interpreter = self.ov.compile_model(
|
||||
model=model_path, device_name=device
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
diff --git a/frigate/config/camera/ffmpeg.py b/frigate/config/camera/ffmpeg.py
|
||||
index 04bbfac7..4390a571 100644
|
||||
--- a/frigate/config/camera/ffmpeg.py
|
||||
+++ b/frigate/config/camera/ffmpeg.py
|
||||
@@ -70,18 +70,14 @@ class FfmpegConfig(FrigateBaseModel):
|
||||
@property
|
||||
def ffmpeg_path(self) -> str:
|
||||
if self.path == "default":
|
||||
- return f"/usr/lib/ffmpeg/{DEFAULT_FFMPEG_VERSION}/bin/ffmpeg"
|
||||
- elif self.path in INCLUDED_FFMPEG_VERSIONS:
|
||||
- return f"/usr/lib/ffmpeg/{self.path}/bin/ffmpeg"
|
||||
+ return "@ffmpeg@"
|
||||
else:
|
||||
return f"{self.path}/bin/ffmpeg"
|
||||
|
||||
@property
|
||||
def ffprobe_path(self) -> str:
|
||||
if self.path == "default":
|
||||
- return f"/usr/lib/ffmpeg/{DEFAULT_FFMPEG_VERSION}/bin/ffprobe"
|
||||
- elif self.path in INCLUDED_FFMPEG_VERSIONS:
|
||||
- return f"/usr/lib/ffmpeg/{self.path}/bin/ffprobe"
|
||||
+ return "@ffprobe@"
|
||||
else:
|
||||
return f"{self.path}/bin/ffprobe"
|
||||
|
||||
diff --git a/frigate/record/export.py b/frigate/record/export.py
|
||||
index 0d3f96da..09cadbcd 100644
|
||||
--- a/frigate/record/export.py
|
||||
+++ b/frigate/record/export.py
|
||||
@@ -126,7 +126,7 @@ class RecordingExporter(threading.Thread):
|
||||
minutes = int(diff / 60)
|
||||
seconds = int(diff % 60)
|
||||
ffmpeg_cmd = [
|
||||
- "/usr/lib/ffmpeg/7.0/bin/ffmpeg", # hardcode path for exports thumbnail due to missing libwebp support
|
||||
+ "@ffmpeg@", # hardcode path for exports thumbnail due to missing libwebp support
|
||||
"-hide_banner",
|
||||
"-loglevel",
|
||||
"warning",
|
||||
~
|
||||
@@ -2,31 +2,32 @@
|
||||
lib,
|
||||
stdenv,
|
||||
callPackage,
|
||||
python312,
|
||||
replaceVars,
|
||||
python312Packages,
|
||||
fetchFromGitHub,
|
||||
fetchurl,
|
||||
rocmPackages,
|
||||
ffmpeg-headless,
|
||||
sqlite-vec,
|
||||
frigate,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "0.15.2";
|
||||
version = "0.16.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
name = "frigate-${version}-source";
|
||||
owner = "blakeblackshear";
|
||||
repo = "frigate";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-YJFtMVCTtp8h9a9RmkcoZSQ+nIKb5o/4JVynVslkx78=";
|
||||
hash = "sha256-O1rOFRrS3hDbf4fVgfz+KASo20R1aqbDoIf3JKQ1jhs=";
|
||||
};
|
||||
|
||||
frigate-web = callPackage ./web.nix {
|
||||
inherit version src;
|
||||
};
|
||||
|
||||
python = python312;
|
||||
python = python312Packages.python;
|
||||
|
||||
# Tensorflow audio model
|
||||
# https://github.com/blakeblackshear/frigate/blob/v0.15.0/docker/main/Dockerfile#L125
|
||||
@@ -55,14 +56,21 @@ let
|
||||
hash = "sha256-5Cj2vEiWR8Z9d2xBmVoLZuNRv4UOuxHSGZQWTJorXUQ=";
|
||||
};
|
||||
in
|
||||
python.pkgs.buildPythonApplication rec {
|
||||
python312Packages.buildPythonApplication rec {
|
||||
pname = "frigate";
|
||||
inherit version;
|
||||
format = "other";
|
||||
|
||||
inherit src;
|
||||
|
||||
patches = [ ./constants.patch ];
|
||||
patches = [
|
||||
./constants.patch
|
||||
|
||||
(replaceVars ./ffmpeg.patch {
|
||||
ffmpeg = lib.getExe ffmpeg-headless;
|
||||
ffprobe = lib.getExe' ffmpeg-headless "ffprobe";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
echo 'VERSION = "${version}"' > frigate/version.py
|
||||
@@ -86,15 +94,6 @@ python.pkgs.buildPythonApplication rec {
|
||||
substituteInPlace frigate/db/sqlitevecq.py \
|
||||
--replace-fail "/usr/local/lib/vec0" "${lib.getLib sqlite-vec}/lib/vec0${stdenv.hostPlatform.extensions.sharedLibrary}"
|
||||
|
||||
''
|
||||
# clang-rocm, provided by `rocmPackages.clr`, only works on x86_64-linux specifically
|
||||
+ lib.optionalString (with stdenv.hostPlatform; isx86_64 && isLinux) ''
|
||||
substituteInPlace frigate/detectors/plugins/rocm.py \
|
||||
--replace-fail "/opt/rocm/bin/rocminfo" "rocminfo" \
|
||||
--replace-fail "/opt/rocm/lib" "${rocmPackages.clr}/lib"
|
||||
|
||||
''
|
||||
+ ''
|
||||
# provide default paths for models and maps that are shipped with frigate
|
||||
substituteInPlace frigate/config/config.py \
|
||||
--replace-fail "/cpu_model.tflite" "${tflite_cpu_model}" \
|
||||
@@ -106,30 +105,37 @@ python.pkgs.buildPythonApplication rec {
|
||||
substituteInPlace frigate/events/audio.py \
|
||||
--replace-fail "/cpu_audio_model.tflite" "${placeholder "out"}/share/frigate/cpu_audio_model.tflite" \
|
||||
--replace-fail "/audio-labelmap.txt" "${placeholder "out"}/share/frigate/audio-labelmap.txt"
|
||||
|
||||
# work around onvif-zeep idiosyncrasy
|
||||
substituteInPlace frigate/ptz/onvif.py \
|
||||
--replace-fail dist-packages site-packages
|
||||
'';
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
dependencies = with python.pkgs; [
|
||||
dependencies = with python312Packages; [
|
||||
# docker/main/requirements.txt
|
||||
scikit-build
|
||||
# docker/main/requirements-wheel.txt
|
||||
aiofiles
|
||||
aiohttp
|
||||
appdirs
|
||||
argcomplete
|
||||
contextlib2
|
||||
click
|
||||
distlib
|
||||
fastapi
|
||||
filelock
|
||||
future
|
||||
importlib-metadata
|
||||
importlib-resources
|
||||
google-generativeai
|
||||
imutils
|
||||
joserfc
|
||||
levenshtein
|
||||
markupsafe
|
||||
netaddr
|
||||
netifaces
|
||||
norfair
|
||||
numpy
|
||||
ollama
|
||||
onnxruntime
|
||||
onvif-zeep
|
||||
onvif-zeep-async
|
||||
openai
|
||||
opencv4
|
||||
openvino
|
||||
@@ -138,9 +144,12 @@ python.pkgs.buildPythonApplication rec {
|
||||
pathvalidate
|
||||
peewee
|
||||
peewee-migrate
|
||||
prometheus-client
|
||||
psutil
|
||||
py3nvml
|
||||
pyclipper
|
||||
pydantic
|
||||
python-multipart
|
||||
pytz
|
||||
py-vapid
|
||||
pywebpush
|
||||
@@ -149,14 +158,18 @@ python.pkgs.buildPythonApplication rec {
|
||||
ruamel-yaml
|
||||
scipy
|
||||
setproctitle
|
||||
shapely
|
||||
slowapi
|
||||
starlette
|
||||
starlette-context
|
||||
tensorflow-bin
|
||||
titlecase
|
||||
transformers
|
||||
tzlocal
|
||||
unidecode
|
||||
uvicorn
|
||||
verboselogs
|
||||
virtualenv
|
||||
ws4py
|
||||
];
|
||||
|
||||
@@ -178,7 +191,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
nativeCheckInputs = with python.pkgs; [
|
||||
nativeCheckInputs = with python312Packages; [
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
@@ -200,7 +213,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
passthru = {
|
||||
web = frigate-web;
|
||||
inherit python;
|
||||
pythonPath = (python.pkgs.makePythonPath dependencies) + ":${frigate}/${python.sitePackages}";
|
||||
pythonPath = (python312Packages.makePythonPath dependencies) + ":${frigate}/${python.sitePackages}";
|
||||
tests = {
|
||||
inherit (nixosTests) frigate;
|
||||
};
|
||||
|
||||
@@ -30,7 +30,7 @@ buildNpmPackage {
|
||||
--replace-fail "/tmp/cache" "/var/cache/frigate"
|
||||
'';
|
||||
|
||||
npmDepsHash = "sha256-tPwydUJtFDJs17q0haJaUVEkxua+nHfmwQ9Z9Y24ca8=";
|
||||
npmDepsHash = "sha256-CrK/6BaKmKIxlohEZdGEEKJkioszBUupyKQx4nBeLqI=";
|
||||
|
||||
installPhase = ''
|
||||
cp -rv dist/ $out
|
||||
|
||||
@@ -135,7 +135,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
'';
|
||||
|
||||
nativeCheckInputs = with python.pkgs; [
|
||||
(postgresql.withPackages (p: [ p.postgis ]))
|
||||
(postgresql.withPackages (p: [ p.postgis ])).out
|
||||
postgresqlTestHook
|
||||
pytest-django
|
||||
pytest-playwright
|
||||
|
||||
@@ -24,23 +24,24 @@
|
||||
xcbuild,
|
||||
pango,
|
||||
pkg-config,
|
||||
symlinkJoin,
|
||||
nltk-data,
|
||||
xorg,
|
||||
}:
|
||||
let
|
||||
version = "2.17.1";
|
||||
version = "2.18.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "paperless-ngx";
|
||||
repo = "paperless-ngx";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-6FvP/HgomsPxqCtKrZFxMlD2fFyT2e/JII2L7ANiOao=";
|
||||
hash = "sha256-POHF00cV8pl6i1rcwxtZ+Q1AlLybDj6gSlL0lPwSSCo=";
|
||||
};
|
||||
|
||||
python = python3.override {
|
||||
self = python;
|
||||
packageOverrides = final: prev: {
|
||||
django = prev.django_5_1;
|
||||
django = prev.django_5_2;
|
||||
|
||||
fido2 = prev.fido2.overridePythonAttrs {
|
||||
version = "1.2.0";
|
||||
@@ -71,73 +72,79 @@ let
|
||||
poppler-utils
|
||||
];
|
||||
|
||||
frontend =
|
||||
let
|
||||
frontendSrc = src + "/src-ui";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "paperless-ngx-frontend";
|
||||
inherit version;
|
||||
frontend = stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "paperless-ngx-frontend";
|
||||
inherit version;
|
||||
|
||||
src = frontendSrc;
|
||||
src = src + "/src-ui";
|
||||
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit pname version src;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-VtYYwpMXPAC3g1OESnw3dzLTwiGqJBQcicFZskEucok=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
node-gyp
|
||||
nodejs_20
|
||||
pkg-config
|
||||
pnpm.configHook
|
||||
python3
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
xcbuild
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
pango
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
giflib
|
||||
];
|
||||
|
||||
CYPRESS_INSTALL_BINARY = "0";
|
||||
NG_CLI_ANALYTICS = "false";
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
pushd node_modules/canvas
|
||||
node-gyp rebuild
|
||||
popd
|
||||
|
||||
pnpm run build --configuration production
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
pnpm run test
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/lib/paperless-ui
|
||||
mv ../src/documents/static/frontend $out/lib/paperless-ui/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-bx/jXlG3lRiwKyz1M0dU00Xn5xaeALSIxIAGzo8gAgo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
node-gyp
|
||||
nodejs_20
|
||||
pkg-config
|
||||
pnpm.configHook
|
||||
python3
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
xcbuild
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
pango
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
giflib
|
||||
];
|
||||
|
||||
CYPRESS_INSTALL_BINARY = "0";
|
||||
NG_CLI_ANALYTICS = "false";
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
pushd node_modules/canvas
|
||||
node-gyp rebuild
|
||||
popd
|
||||
|
||||
# cat forcefully disables angular cli's spinner which doesn't work with nix' tty which is 0x0
|
||||
pnpm run build --configuration production | cat
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
pnpm run test | cat
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/lib/paperless-ui
|
||||
mv ../src/documents/static/frontend $out/lib/paperless-ui/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
});
|
||||
|
||||
nltkDataDir = symlinkJoin {
|
||||
name = "paperless_ngx_nltk_data";
|
||||
paths = with nltk-data; [
|
||||
punkt-tab
|
||||
snowball-data
|
||||
stopwords
|
||||
];
|
||||
};
|
||||
in
|
||||
python.pkgs.buildPythonApplication rec {
|
||||
pname = "paperless-ngx";
|
||||
@@ -161,8 +168,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
fi
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail '"--numprocesses=auto",' "" \
|
||||
--replace-fail '--maxprocesses=16' "--numprocesses=$NIX_BUILD_CORES" \
|
||||
--replace-fail "djangorestframework-guardian~=0.3.0" "djangorestframework-guardian2"
|
||||
--replace-fail '--maxprocesses=16' "--numprocesses=$NIX_BUILD_CORES"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -171,6 +177,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"django"
|
||||
"django-allauth"
|
||||
"django-auditlog"
|
||||
"django-guardian"
|
||||
@@ -185,6 +192,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
dependencies =
|
||||
with python.pkgs;
|
||||
[
|
||||
babel
|
||||
bleach
|
||||
channels
|
||||
channels-redis
|
||||
@@ -204,6 +212,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
}
|
||||
))
|
||||
django-auditlog
|
||||
django-cachalot
|
||||
django-celery-results
|
||||
django-compression-middleware
|
||||
django-cors-headers
|
||||
@@ -213,7 +222,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
django-multiselectfield
|
||||
django-soft-delete
|
||||
djangorestframework
|
||||
djangorestframework-guardian2
|
||||
djangorestframework-guardian
|
||||
drf-spectacular
|
||||
drf-spectacular-sidecar
|
||||
drf-writable-nested
|
||||
@@ -232,6 +241,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
pathvalidate
|
||||
pdf2image
|
||||
psycopg
|
||||
psycopg-pool
|
||||
python-dateutil
|
||||
python-dotenv
|
||||
python-gnupg
|
||||
@@ -320,6 +330,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
export PATH="${path}:$PATH"
|
||||
export HOME=$(mktemp -d)
|
||||
export XDG_DATA_DIRS="${liberation_ttf}/share:$XDG_DATA_DIRS"
|
||||
export PAPERLESS_NLTK_DIR=${passthru.nltkDataDir}
|
||||
'';
|
||||
|
||||
disabledTests = [
|
||||
@@ -337,22 +348,22 @@ python.pkgs.buildPythonApplication rec {
|
||||
# Favicon tests fail due to static file handling in the test environment
|
||||
"test_favicon_view"
|
||||
"test_favicon_view_missing_file"
|
||||
# Requires DNS
|
||||
"test_send_webhook_data_or_json"
|
||||
"test_workflow_webhook_send_webhook_retry"
|
||||
"test_workflow_webhook_send_webhook_task"
|
||||
];
|
||||
|
||||
doCheck = !stdenv.hostPlatform.isDarwin;
|
||||
|
||||
passthru = {
|
||||
inherit
|
||||
python
|
||||
path
|
||||
frontend
|
||||
nltkDataDir
|
||||
path
|
||||
python
|
||||
tesseract5
|
||||
;
|
||||
nltkData = with nltk-data; [
|
||||
punkt-tab
|
||||
snowball-data
|
||||
stopwords
|
||||
];
|
||||
tests = { inherit (nixosTests) paperless; };
|
||||
};
|
||||
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "VictoriaMetrics";
|
||||
version = "1.123.0";
|
||||
version = "1.124.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "VictoriaMetrics";
|
||||
repo = "VictoriaMetrics";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-GUVRMlF94BaZSVfz4Z+IBSpf6WuA5o1WQQmeZAqKZ1g=";
|
||||
hash = "sha256-f0Mf/4cFnJ/3I8z/4UhhNJnSCau9Q7mFfR32lP9/yi0=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
@@ -51,6 +51,10 @@ buildGoModule (finalAttrs: {
|
||||
# This appears to be some kind of test server for development purposes only.
|
||||
rm -f app/vmui/packages/vmui/web/{go.mod,main.go}
|
||||
|
||||
# Allow older go versions
|
||||
substituteInPlace go.mod \
|
||||
--replace-fail "go 1.24.6" "go ${finalAttrs.passthru.go.version}"
|
||||
|
||||
# Increase timeouts in tests to prevent failure on heavily loaded builders
|
||||
substituteInPlace lib/storage/storage_test.go \
|
||||
--replace-fail "time.After(10 " "time.After(120 " \
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
lib,
|
||||
rustPlatform,
|
||||
fetchFromGitHub,
|
||||
openssl,
|
||||
pkg-config,
|
||||
versionCheckHook,
|
||||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
@@ -17,6 +19,20 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
|
||||
cargoHash = "sha256-77ArdZ9mOYEon4nzNUNSL0x0UlE1iVujFLwreAd9iMM=";
|
||||
|
||||
strictDeps = true;
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
];
|
||||
|
||||
buildNoDefaultFeatures = true;
|
||||
buildFeatures = [
|
||||
"native-tls"
|
||||
];
|
||||
|
||||
doCheck = true;
|
||||
# Requires network access
|
||||
checkFlags = [
|
||||
|
||||
@@ -28,9 +28,12 @@ lib.makeScope pkgs.newScope (
|
||||
(prev: {
|
||||
autoPatchelfIgnoreMissingDeps = [ "libonnxruntime.so.1" ];
|
||||
});
|
||||
graalvm-oracle_24 = (self.callPackage ./graalvm-oracle { version = "24"; }).overrideAttrs (prev: {
|
||||
autoPatchelfIgnoreMissingDeps = [ "libonnxruntime.so.1.18.0" ];
|
||||
});
|
||||
graalvm-oracle_23 = self.callPackage ./graalvm-oracle { version = "23"; };
|
||||
graalvm-oracle_17 = self.callPackage ./graalvm-oracle { version = "17"; };
|
||||
graalvm-oracle = self.graalvm-oracle_23;
|
||||
graalvm-oracle = self.graalvm-oracle_24;
|
||||
}
|
||||
// lib.optionalAttrs config.allowAliases {
|
||||
graalvm-oracle_22 = throw "GraalVM 22 is EOL, use a newer version instead";
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
fetchurl,
|
||||
graalvmPackages,
|
||||
useMusl ? false,
|
||||
version ? "23",
|
||||
version ? "24",
|
||||
}:
|
||||
|
||||
graalvmPackages.buildGraalvm {
|
||||
|
||||
@@ -22,6 +22,24 @@
|
||||
url = "https://github.com/graalvm/oracle-graalvm-ea-builds/releases/download/jdk-25.0.0-ea.34/graalvm-jdk-25.0.0-ea.34_macos-aarch64_bin.tar.gz";
|
||||
};
|
||||
};
|
||||
"24" = {
|
||||
"aarch64-linux" = {
|
||||
hash = "sha256-dvJVfzLoz75ti3u/Mx8PCS674cw2omeOCYMFiSB2KYs=";
|
||||
url = "https://download.oracle.com/graalvm/24/archive/graalvm-jdk-24.0.2_linux-aarch64_bin.tar.gz";
|
||||
};
|
||||
"x86_64-linux" = {
|
||||
hash = "sha256-sBYaSbvB0PQGl1Mt36u4BSpaFeRjd15pRf4+SSAlm64=";
|
||||
url = "https://download.oracle.com/graalvm/24/archive/graalvm-jdk-24.0.2_linux-x64_bin.tar.gz";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
hash = "sha256-3w+eXRASAcUL+muqPGV6gaKIPFtQl6n1q5PauG9+O6I=";
|
||||
url = "https://download.oracle.com/graalvm/24/archive/graalvm-jdk-24.0.2_macos-x64_bin.tar.gz";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
hash = "sha256-LcdjTtk5xyXUGjU/c0Q/8y5w8vtXc2fxKmk2EH40lNw=";
|
||||
url = "https://download.oracle.com/graalvm/24/archive/graalvm-jdk-24.0.2_macos-aarch64_bin.tar.gz";
|
||||
};
|
||||
};
|
||||
"23" = {
|
||||
"aarch64-linux" = {
|
||||
hash = "sha256-VlB664/l7NWFQrPE3vEJvCXkEzKEJ0ck/HNU5pGGTwU=";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
buildDunePackage,
|
||||
fetchurl,
|
||||
backoff,
|
||||
domain-local-await,
|
||||
mtime,
|
||||
multicore-magic,
|
||||
@@ -10,14 +11,15 @@
|
||||
|
||||
buildDunePackage rec {
|
||||
pname = "multicore-bench";
|
||||
version = "0.1.4";
|
||||
version = "0.1.7";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ocaml-multicore/multicore-bench/releases/download/${version}/multicore-bench-${version}.tbz";
|
||||
hash = "sha256-iCx5QvhYo/e53cW23Sza2as4aez4HeESVvLPF1DW85A=";
|
||||
hash = "sha256-vrp9yiuTwhijhYjeDKPFRGyh/5LeydKWJSyMLZRRXIM=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
backoff
|
||||
domain-local-await
|
||||
mtime
|
||||
multicore-magic
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-auditlog";
|
||||
version = "3.2.0";
|
||||
version = "3.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jazzband";
|
||||
repo = "django-auditlog";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-NOtpnYh6HUo7VRSyCUhbpNDv0V9KWST0OEzl7Pt6eR8=";
|
||||
hash = "sha256-159p82PT3za3wp2XhekGxy+NYxLyQfAyUOyhDjyr2CI=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -7,8 +7,14 @@
|
||||
psycopg2,
|
||||
jinja2,
|
||||
beautifulsoup4,
|
||||
pytest-django,
|
||||
pytestCheckHook,
|
||||
python,
|
||||
pytz,
|
||||
redis,
|
||||
redisTestHook,
|
||||
setuptools,
|
||||
stdenv,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -29,18 +35,27 @@ buildPythonPackage rec {
|
||||
./disable-unsupported-tests.patch
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [ django ];
|
||||
build-system = [ setuptools ];
|
||||
|
||||
checkInputs = [
|
||||
dependencies = [ django ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
beautifulsoup4
|
||||
django-debug-toolbar
|
||||
psycopg2
|
||||
jinja2
|
||||
pytest-django
|
||||
pytestCheckHook
|
||||
pytz
|
||||
redis
|
||||
redisTestHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "cachalot" ];
|
||||
|
||||
# redisTestHook does not work on darwin
|
||||
doCheck = !stdenv.hostPlatform.isDarwin;
|
||||
|
||||
# disable broken pinning test
|
||||
preCheck = ''
|
||||
substituteInPlace cachalot/tests/read.py \
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
djangorestframework,
|
||||
pytest-django,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
@@ -18,21 +20,20 @@ buildPythonPackage rec {
|
||||
hash = "sha256-nUkR5xTyeBv7ziJ6Mej9TKvMOa5/k+ELBqt4BVam/wk=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs manage.py
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [ djangorestframework ];
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
nativeCheckInputs = [
|
||||
pytest-django
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
./manage.py test
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
env.DJANGO_SETTINGS_MODULE = "tests.django_settings";
|
||||
|
||||
pythonImportsCheck = [ "rest_framework_dataclasses" ];
|
||||
|
||||
|
||||
@@ -2,36 +2,38 @@
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
django,
|
||||
django-guardian,
|
||||
djangorestframework,
|
||||
pytest-django,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "djangorestframework-guardian";
|
||||
version = "0.3.0";
|
||||
format = "setuptools";
|
||||
version = "0.4.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rpkilby";
|
||||
repo = "django-rest-framework-guardian";
|
||||
rev = version;
|
||||
hash = "sha256-jl/VEl1pUHU8J1d5ZQSGJweNJayIGw1iVAmwID85fqw=";
|
||||
hash = "sha256-7SaKyWoLen5DAwSyrWeA4rEmjXMcPwJ7LM7WYxk+IKs=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
chmod +x manage.py
|
||||
patchShebangs manage.py
|
||||
'';
|
||||
build-system = [ setuptools ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dependencies = [
|
||||
django-guardian
|
||||
djangorestframework
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
./manage.py test
|
||||
'';
|
||||
nativeCheckInputs = [
|
||||
pytest-django
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
env.DJANGO_SETTINGS_MODULE = "tests.settings";
|
||||
|
||||
pythonImportsCheck = [ "rest_framework_guardian" ];
|
||||
|
||||
@@ -40,7 +42,5 @@ buildPythonPackage rec {
|
||||
homepage = "https://github.com/rpkilby/django-rest-framework-guardian";
|
||||
license = licenses.bsd3;
|
||||
maintainers = [ ];
|
||||
# unmaintained, last compatible version is 3.x, use djangorestframework-guardian2 instead
|
||||
broken = lib.versionAtLeast django.version "4";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
django-guardian,
|
||||
djangorestframework,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "djangorestframework-guardian2";
|
||||
version = "0.7.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "johnthagen";
|
||||
repo = "django-rest-framework-guardian2";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-LrIhOoBWC3HttjAGbul4zof++OW35pGMyFGZzUpG1Tk=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
chmod +x manage.py
|
||||
patchShebangs manage.py
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
django-guardian
|
||||
djangorestframework
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
./manage.py test
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "rest_framework_guardian" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Django-guardian support for Django REST Framework";
|
||||
homepage = "https://github.com/johnthagen/django-rest-framework-guardian2/";
|
||||
license = licenses.bsd3;
|
||||
maintainers = with maintainers; [ e1mo ];
|
||||
};
|
||||
}
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "drf-spectacular-sidecar";
|
||||
version = "2025.4.1";
|
||||
version = "2025.8.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tfranzel";
|
||||
repo = "drf-spectacular-sidecar";
|
||||
rev = version;
|
||||
hash = "sha256-YzSUwShj7QGCVKlTRM2Gro38Y+jGYQsMGBMAH0radmA=";
|
||||
hash = "sha256-H2eHFX7VG7YqLztEV/G4QnVYytkfADeHxgBTRlmKt50=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -33,13 +33,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "python-openstackclient";
|
||||
version = "8.1.0";
|
||||
version = "8.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "python_openstackclient";
|
||||
inherit version;
|
||||
hash = "sha256-m5xCs/a8S0tICmJU/FYKywGXh4MeCUOW2/msmuVxrks=";
|
||||
hash = "sha256-1hKvGN/GbMjzHmzpZpC2wnOt6KJA7EC39INaiJb7vgE=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -49,6 +49,9 @@ buildPythonPackage rec {
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
# redisTestHook does not work on darwin-x86_64
|
||||
doCheck = !(stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64);
|
||||
|
||||
disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
# PermissionError: [Errno 13] Permission denied: '/tmp/rq-tests.txt'
|
||||
"test_deleted_jobs_arent_executed"
|
||||
|
||||
@@ -69,8 +69,6 @@ buildPythonPackage rec {
|
||||
]
|
||||
++ optional-dependencies.http3;
|
||||
|
||||
doCheck = !stdenv.hostPlatform.isDarwin;
|
||||
|
||||
preCheck = ''
|
||||
# Some tests depends on sanic on PATH
|
||||
PATH="$out/bin:$PATH"
|
||||
@@ -78,6 +76,11 @@ buildPythonPackage rec {
|
||||
|
||||
# needed for relative paths for some packages
|
||||
cd tests
|
||||
''
|
||||
# Work around "OSError: AF_UNIX path too long"
|
||||
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
substituteInPlace worker/test_socket.py \
|
||||
--replace-fail '"./test.sock"' '"/tmp/test.sock"'
|
||||
'';
|
||||
|
||||
disabledTests = [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
pythonOlder,
|
||||
anyio,
|
||||
hatchling,
|
||||
httpx,
|
||||
}:
|
||||
@@ -12,8 +12,6 @@ buildPythonPackage rec {
|
||||
version = "0.10.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stumpylog";
|
||||
repo = "tika-client";
|
||||
@@ -23,14 +21,14 @@ buildPythonPackage rec {
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
dependencies = [ httpx ];
|
||||
dependencies = [
|
||||
anyio
|
||||
httpx
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "tika_client" ];
|
||||
|
||||
# Almost all of the tests (all except one in 0.1.0) fail since there
|
||||
# is no tika http API endpoint reachable. Since tika is not yet
|
||||
# packaged for nixpkgs, it seems like an unreasonable amount of effort
|
||||
# fixing these tests.
|
||||
# The tests expect the tika-server to run in a docker container
|
||||
doChecks = false;
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
cmake,
|
||||
protobufc,
|
||||
libunwind,
|
||||
lzo,
|
||||
openssl,
|
||||
protobuf,
|
||||
zlib,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "zbackup";
|
||||
version = "1.4.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zbackup";
|
||||
repo = "zbackup";
|
||||
rev = version;
|
||||
hash = "sha256-9Fk4EhEeQ2J4Kirc7oad4CzmW70Mmza6uozd87qfgZI=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# compare with https://github.com/zbackup/zbackup/pull/158;
|
||||
# but that doesn't apply cleanly to this version
|
||||
./protobuf-api-change.patch
|
||||
];
|
||||
|
||||
# zbackup uses dynamic exception specifications which are not
|
||||
# allowed in C++17
|
||||
env.NIX_CFLAGS_COMPILE = toString [ "--std=c++14" ];
|
||||
|
||||
buildInputs = [
|
||||
zlib
|
||||
openssl
|
||||
protobuf
|
||||
lzo
|
||||
libunwind
|
||||
];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
protobufc
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Versatile deduplicating backup tool";
|
||||
mainProgram = "zbackup";
|
||||
homepage = "http://zbackup.org/";
|
||||
platforms = lib.platforms.linux;
|
||||
license = lib.licenses.gpl2Plus;
|
||||
};
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/backup_restorer.cc
|
||||
+++ b/backup_restorer.cc
|
||||
@@ -48,7 +48,7 @@
|
||||
// TODO: this disables size checks for each separate message. Figure a better
|
||||
// way to do this while keeping them enabled. It seems we need to create an
|
||||
// instance of CodedInputStream for each message, but it might be expensive
|
||||
- cis.SetTotalBytesLimit( backupData.size(), -1 );
|
||||
+ cis.SetTotalBytesLimit( backupData.size() );
|
||||
|
||||
// Used when emitting chunks
|
||||
string chunk;
|
||||
@@ -619,11 +619,15 @@ mapAliases {
|
||||
cloudlogoffline = throw "cloudlogoffline has been removed"; # added 2025-05-18
|
||||
clwrapperFunction = throw "Lisp packages have been redesigned. See 'lisp-modules' in the nixpkgs manual."; # Added 2024-05-07
|
||||
CoinMP = coinmp; # Added 2024-06-12
|
||||
code-browser-gtk = throw "'code-browser-gtk' has been removed, as it was broken since 22.11"; # Added 2025-08-22
|
||||
code-browser-gtk2 = throw "'code-browser-gtk2' has been removed, as it was broken since 22.11"; # Added 2025-08-22
|
||||
code-browser-qt = throw "'code-browser-qt' has been removed, as it was broken since 22.11"; # Added 2025-08-22
|
||||
collada-dom = opencollada; # added 2024-02-21
|
||||
colloid-kde = throw "'colloid-kde' has been removed, as it is only compatible with Plasma 5, which is EOL"; # Added 2025-08-20
|
||||
colorpicker = throw "'colorpicker' has been removed due to lack of maintenance upstream. Consider using 'xcolor', 'gcolor3', 'eyedropper' or 'gpick' instead"; # Added 2024-10-19
|
||||
colorstorm = throw "'colorstorm' has been removed because it was unmaintained in nixpkgs and upstream was rewritten."; # Added 2025-06-15
|
||||
connman-ncurses = throw "'connman-ncurses' has been removed due to lack of maintenance upstream."; # Added 2025-05-27
|
||||
copper = throw "'copper' has been removed, as it was broken since 22.11"; # Added 2025-08-22
|
||||
cordless = throw "'cordless' has been removed due to being archived upstream. Consider using 'discordo' instead."; # Added 2025-06-07
|
||||
coriander = throw "'coriander' has been removed because it depends on GNOME 2 libraries"; # Added 2024-06-27
|
||||
corretto19 = throw "Corretto 19 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
@@ -1073,6 +1077,7 @@ mapAliases {
|
||||
guardian-agent = throw "'guardian-agent' has been removed, as it hasn't been maintained upstream in years and accumulated many vulnerabilities"; # Added 2024-06-09
|
||||
guile-disarchive = disarchive; # Added 2023-10-27
|
||||
gutenprintBin = gutenprint-bin; # Added 2025-08-21
|
||||
gxneur = throw "'gxneur' has been removed due to lack of maintenance and reliance on gnome2 and 2to3."; # Added 2025-08-17
|
||||
|
||||
### H ###
|
||||
|
||||
@@ -2439,6 +2444,7 @@ mapAliases {
|
||||
z3_4_8 = throw "'z3_4_8' has been removed in favour of the latest version. Use 'z3'."; # Added 2025-05-18
|
||||
zabbix50 = throw "'zabbix50' has been removed, it would have reached its End of Life a few days after the release of NixOS 25.05. Consider upgrading to 'zabbix60' or 'zabbix70'.";
|
||||
zabbix64 = throw "'zabbix64' has been removed because it reached its End of Life. Consider upgrading to 'zabbix70'.";
|
||||
zbackup = throw "'zbackup' has been removed due to being unmaintained upstream"; # Added 2025-08-22
|
||||
zeroadPackages = recurseIntoAttrs {
|
||||
zeroad = lib.warnOnInstantiate "'zeroadPackages.zeroad' has been renamed to 'zeroad'" zeroad; # Added 2025-03-22
|
||||
zeroad-data = lib.warnOnInstantiate "'zeroadPackages.zeroad-data' has been renamed to 'zeroad-data'" zeroad-data; # Added 2025-03-22
|
||||
|
||||
@@ -2615,10 +2615,6 @@ with pkgs;
|
||||
|
||||
cask-server = libsForQt5.callPackage ../applications/misc/cask-server { };
|
||||
|
||||
code-browser-qt = libsForQt5.callPackage ../applications/editors/code-browser { withQt = true; };
|
||||
code-browser-gtk2 = callPackage ../applications/editors/code-browser { withGtk2 = true; };
|
||||
code-browser-gtk = callPackage ../applications/editors/code-browser { withGtk3 = true; };
|
||||
|
||||
cffconvert = python3Packages.toPythonApplication python3Packages.cffconvert;
|
||||
|
||||
ckb-next = libsForQt5.callPackage ../tools/misc/ckb-next { };
|
||||
@@ -4583,10 +4579,6 @@ with pkgs;
|
||||
# To expose more packages for Yi, override the extraPackages arg.
|
||||
yi = callPackage ../applications/editors/yi/wrapper.nix { };
|
||||
|
||||
zbackup = callPackage ../tools/backup/zbackup {
|
||||
protobuf = protobuf_21;
|
||||
};
|
||||
|
||||
zbar = libsForQt5.callPackage ../tools/graphics/zbar { };
|
||||
|
||||
# Nvidia support does not require any proprietary libraries, so CI can build it.
|
||||
@@ -13836,10 +13828,6 @@ with pkgs;
|
||||
;
|
||||
};
|
||||
|
||||
gxneur = callPackage ../applications/misc/gxneur {
|
||||
inherit (gnome2) libglade GConf;
|
||||
};
|
||||
|
||||
xournalpp = callPackage ../applications/graphics/xournalpp {
|
||||
lua = lua5_3;
|
||||
};
|
||||
|
||||
@@ -188,6 +188,7 @@ mapAliases ({
|
||||
distutils_extra = distutils-extra; # added 2023-10-12
|
||||
digital-ocean = python-digitalocean; # addad 2024-04-12
|
||||
dj-stripe = throw "dj-stripe has been removed because it is unused and broken"; # added 2025-07-21
|
||||
djangorestframework-guardian2 = throw "djangorestframework-guardian2 has been removed because djangorestframework-guardian is active again and the upstream project was archived"; # added 2025-08-22
|
||||
djangorestframework-jwt = drf-jwt; # added 2021-07-20
|
||||
django-allauth-2fa = throw "django-allauth-2fa was removed because it was unused and django-allauth now contains 2fa logic itself."; # added 2025-02-15
|
||||
django-sampledatahelper = throw "django-sampledatahelper was removed because it is no longer compatible to latest Django version"; # added 2022-07-18
|
||||
|
||||
@@ -4142,10 +4142,6 @@ self: super: with self; {
|
||||
callPackage ../development/python-modules/djangorestframework-guardian
|
||||
{ };
|
||||
|
||||
djangorestframework-guardian2 =
|
||||
callPackage ../development/python-modules/djangorestframework-guardian2
|
||||
{ };
|
||||
|
||||
djangorestframework-jsonp = callPackage ../development/python-modules/djangorestframework-jsonp { };
|
||||
|
||||
djangorestframework-recursive =
|
||||
|
||||
Reference in New Issue
Block a user