self: super: { bento = (super.callPackage ../pkgs/bento { }); ykfde = (super.callPackage ../pkgs/ykfde { }); creality-print = (super.callPackage ../pkgs/creality-print.nix { }); openaudible = (super.callPackage ../pkgs/openaudible.nix { }); openmanus = (super.callPackage ../pkgs/openmanus.nix { }); ai-mailer = self.callPackage ../pkgs/ai-mailer.nix { }; claude-code = self.callPackage ../pkgs/claude-code { claude-code = super.claude-code; }; # Python packages python3 = super.python3.override { packageOverrides = pself: psuper: { aia-chaser = pself.callPackage ../pkgs/aia-chaser { }; mini-racer = pself.callPackage ../pkgs/mini-racer.nix { }; }; }; python3Packages = self.python3.pkgs; pyload-ng = self.callPackage ../pkgs/pyload-ng { pyload-ng = super.pyload-ng; }; # TODO: Remove this override once nixpkgs includes invidious >= 2.20250204 with PR #5614 fix # Fix for 400 errors on channel lists - https://github.com/iv-org/invidious/pull/5614 invidious = let version = "unstable-2026-02-04"; commit = "ecbc21b"; date = "2026.02.04"; src = super.fetchFromGitHub { owner = "iv-org"; repo = "invidious"; rev = "ecbc21b0678eac4a0c8f745de5cc78eef4841221"; fetchSubmodules = true; hash = "sha256-S6/d1Fzv3CrZHBW3aE21OoPUeQwEFFMwkeJyUKyTcGQ="; }; # Fetch videojs dependencies - reuse existing hash as dependencies are unlikely to change videojs = super.stdenvNoCC.mkDerivation { name = "videojs"; inherit src; builder = "${super.path}/pkgs/by-name/in/invidious/videojs.sh"; nativeBuildInputs = with super; [ cacert crystal_1_16 openssl pkg-config ]; outputHashAlgo = "sha256"; outputHashMode = "recursive"; outputHash = "sha256-jED3zsDkPN8i6GhBBJwnsHujbuwlHdsVpVqa1/pzSH4="; }; in super.invidious.overrideAttrs (oldAttrs: { inherit version src; postPatch = let branchTemplate = ''{{ "#{`git branch | sed -n '/* /s///p'`.strip}" }}''; commitTemplate = ''{{ "#{`git rev-list HEAD --max-count=1 --abbrev-commit`.strip}" }}''; versionTemplate = ''{{ "#{`git log -1 --format=%ci | awk '{print $1}' | sed s/-/./g`.strip}" }}''; tagTemplate = ''{{ "#{`git tag --points-at HEAD`.strip}" }}''; assetCommitTemplate = ''{{ "#{`git rev-list HEAD --max-count=1 --abbrev-commit -- assets`.strip}" }}''; in '' for d in ${videojs}/*; do ln -s "$d" assets/videojs; done substituteInPlace src/invidious.cr \ --replace-fail ${super.lib.escapeShellArg branchTemplate} '"master"' \ --replace-fail ${super.lib.escapeShellArg commitTemplate} '"${commit}"' \ --replace-fail ${super.lib.escapeShellArg versionTemplate} '"${date}"' \ --replace-fail ${super.lib.escapeShellArg tagTemplate} '""' \ --replace-fail ${super.lib.escapeShellArg assetCommitTemplate} '"${commit}"' substituteInPlace src/invidious.cr \ --replace-fail 'public_folder "assets"' 'public_folder "${placeholder "out"}/share/invidious/assets"' substituteInPlace src/invidious/helpers/i18n.cr \ --replace-fail 'File.read("locales/' 'File.read("${placeholder "out"}/share/invidious/locales/' substituteInPlace src/invidious/database/base.cr \ --replace-fail 'config/sql' '${placeholder "out"}/share/invidious/config/sql' substituteInPlace src/invidious/user/captcha.cr \ --replace-fail 'Process.run(%(rsvg-convert' 'Process.run(%(${super.lib.getBin super.librsvg}/bin/rsvg-convert' ''; }); # vscode-insiders = (super.callPackage ../pkgs/vscode-insiders.nix { }); }