From 5f27d4612aa79e70ca7d390befd274a7bd584184 Mon Sep 17 00:00:00 2001 From: Danilo Reyes Date: Fri, 1 Nov 2024 17:06:42 -0600 Subject: [PATCH] chintrolas me rindo --- dotfiles/gallery-dl/config.json | 240 -- flake.nix | 35 - nix/download/.direnv/bin/nix-direnv-reload | 19 - .../nix-profile-24.11-wb6agba4kfsxpbnb | 1 - .../nix-profile-24.11-wb6agba4kfsxpbnb.rc | 2037 ----------------- nix/download/.env | 1 - nix/download/.envrc | 1 - nix/download/argparser.py | 96 - .../__pycache__/gallery.cpython-311.pyc | Bin 3130 -> 0 bytes .../classes/__pycache__/user.cpython-311.pyc | Bin 8094 -> 0 bytes nix/download/classes/gallery.py | 46 - nix/download/classes/user.py | 105 - nix/download/download.py | 295 --- nix/download/functions.py | 112 - nix/download/setup.cfg | 16 - nix/download/setup.py | 3 - nix/download/shell.nix | 37 - nix/ffmpeg4discord.py | 138 -- nix/ffmpreg.sh | 122 - nix/find-dup-episodes.sh | 27 - nix/manage-library.sh | 191 -- nix/nextcloud-cronjob.sh | 59 - nix/pika-list.sh | 51 - nix/run.sh | 44 - nix/split-dir.sh | 33 - nix/stream-dl.sh | 29 - nix/sub-sync.sh | 186 -- nix/tasks.sh | 165 -- nix/update-dns.sh | 28 - pkgs/download.nix | 17 - scripts.nix | 11 - 31 files changed, 4145 deletions(-) delete mode 100644 dotfiles/gallery-dl/config.json delete mode 100644 flake.nix delete mode 100755 nix/download/.direnv/bin/nix-direnv-reload delete mode 120000 nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb delete mode 100644 nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb.rc delete mode 100644 nix/download/.env delete mode 100644 nix/download/.envrc delete mode 100644 nix/download/argparser.py delete mode 100644 nix/download/classes/__pycache__/gallery.cpython-311.pyc delete mode 100644 nix/download/classes/__pycache__/user.cpython-311.pyc delete mode 100644 nix/download/classes/gallery.py delete mode 100644 nix/download/classes/user.py delete mode 100644 nix/download/download.py delete mode 100644 nix/download/functions.py delete mode 100644 nix/download/setup.cfg delete mode 100644 nix/download/setup.py delete mode 100644 nix/download/shell.nix delete mode 100644 nix/ffmpeg4discord.py delete mode 100644 nix/ffmpreg.sh delete mode 100644 nix/find-dup-episodes.sh delete mode 100644 nix/manage-library.sh delete mode 100644 nix/nextcloud-cronjob.sh delete mode 100644 nix/pika-list.sh delete mode 100644 nix/run.sh delete mode 100644 nix/split-dir.sh delete mode 100644 nix/stream-dl.sh delete mode 100755 nix/sub-sync.sh delete mode 100755 nix/tasks.sh delete mode 100755 nix/update-dns.sh delete mode 100644 pkgs/download.nix delete mode 100644 scripts.nix diff --git a/dotfiles/gallery-dl/config.json b/dotfiles/gallery-dl/config.json deleted file mode 100644 index 8a56f04..0000000 --- a/dotfiles/gallery-dl/config.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "extractor": { - "skip": "abort:5", - "cookies": [ - "firefox", - "/home/jawz/.librewolf/jjwvqged.default", - "gnomekeyring" - ], - "user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0", - "retries": 10, - "sleep-request": 0, - "directlink": { - "directory": [], - "filename": "{filename}.{extension}" - }, - "bluesky": { - "username": "jawz.bsky.social", - "password": "isrb-ydbt-oz52-v7z3", - "directory": ["{author['handle']}"], - "include": ["media"], - "reposts": false, - "videos": true - }, - "twitter": { - "skip": "abort:1", - "directory": ["{user[name]}"], - "include": ["media"], - "retweets": false, - "videos": "ytdl", - "logout": true - }, - "flickr": { - "directory": ["{category}", "{owner[username]}"], - "size-max": "Original", - "access-token": "72157720915197374-51a26dc4fdfdf173", - "access-token-secret": "a1ddb10902f3fa85" - }, - "pinterest": { - "directory": ["{board[owner][username]}", "{board[name]}"] - }, - "wikifeet": { - "page-reverse": true, - "directory": ["{category}", "{celebrity}"] - }, - "instagram": { - "sleep-request": "25-45", - "sleep": "25-45", - "directory": ["{username}"], - "parent-directory": true, - "highlights": { - "reverse": "true", - "directory": ["{username}"] - }, - "stories": { - "reverse": "true", - "directory": ["{username}"] - }, - "tagged": { - "directory": ["{tagged_username}", "tagged"] - } - }, - "kemonoparty": { - "directory": ["{category}", "{user}"], - "retries": 10, - "timeout": 5, - "filename": "{id}_{filename}.{extension}" - }, - "exhentai": { - "directory": ["{category}", "{title}"] - }, - "tumblr": { - "directory": ["{blog_name}"], - "access-token": "5VwIW8TNBoNVPo9CzvKMza2wcn9gJXd6rnUBy6Ctqb4BCPpI59", - "access-token-secret": "8krZGeauA171aZpXZhwgZN8nZCxKQkXYKXWL473mTQPKrqoP3e", - "external": true, - "inline": true, - "posts": "all", - "reblogs": false, - "parent-directory": true, - "api-key": "uhBUtgPaX9gl7eaD8suGWW6ZInRedQoVT6xsZzopljy0jXHqm5", - "api-secret": "D3FDj1INyPzXikVpp4jmzSqjlC9czFUQ8oj2I883PSYJdqwURv" - }, - "deviantart": { - "client-id": "20016", - "client-secret": "52e1f9b0cb26e673da36f69e2ddd0e9a", - "refresh-token": "3fd25b06f97853a93cbe3729edf5d1d196d44700", - "directory": ["{username}"], - "include": "gallery,scraps", - "flat": true, - "original": true, - "mature": true, - "auto-watch": true, - "auto-unwatch": true - }, - "furaffinity": { - "directory": ["{user}", "{subcategory}"], - "include": ["scraps", "gallery"] - }, - "patreon": { - "directory": [ - "(Patreon) {creator[vanity]}", - "({date:%Y%m%d}) {title} ({id})" - ], - "filename": "{filename}.{num}.{extension}", - "browser": "firefox" - }, - "blogger": { - "directory": [ - "{blog[name]}", - "{post[author]}", - "{post[title]} - [{post[id]}]" - ], - "filename": "{filename} - {num}.{extension}" - }, - "artstation": { - "directory": ["{userinfo[username]}"], - "external": true - }, - "gfycat": { - "format": "webm" - }, - "reddit": { - "user-agent": "Python:gallery-dl:v1.0 (by /u/captainjawz)", - "client-id": "T7nZ6WZ3_onJWBhLP8r08g", - "refresh-token": "184157546842-UHdPQX1c7kG1kbO09NAHY2O2taEiwg", - "directory": ["{author}"], - "parent-directory": true - }, - "redgifs": { - "reverse": "true", - "directory": ["{userName}"] - }, - "imgur": { - "mp4": true - }, - "paheal": { - "directory": ["Husbands", "{search_tags}"] - }, - "rule34": { - "directory": ["Husbands", "{search_tags}"] - }, - "e621": { - "directory": ["Husbands", "{search_tags}"] - }, - "baraag": { - "directory": ["{account[username]}"] - }, - "pixiv": { - "refresh-token": "O4kc9tTzGItuuacDcfmevW6NELjm5CJdWiAbZdUv3Kk", - "directory": ["{user[account]} - {user[id]}"], - "ugoira": true, - "favorite": { - "directory": [ - "{user_bookmark[account]} - {user_bookmark[id]}", - "Bookmarks" - ] - }, - "postprocessors": [ - { - "name": "ugoira", - "extension": "webm", - "keep-files": false, - "whitelist": ["pixiv"], - "ffmpeg-twopass": true, - "ffmpeg-args": ["-c:v", "libvpx", "-crf", "4", "-b:v", "5000k", "-an"] - } - ] - }, - "fanbox": { - "directory": ["{category}", "{creatorId}"], - "embeds": true - }, - "readcomiconline": { - "chapter-reverse": true, - "directory": ["Comics", "{comic}", "{comic} #{issue}"], - "quality": "hq", - "captcha": "wait", - "postprocessors": ["cbz"] - }, - "kissmanga": { - "chapter-reverse": true, - "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], - "captcha": "wait", - "postprocessors": ["cbz"] - }, - "mangahere": { - "chapter-reverse": true, - "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], - "postprocessors": ["cbz"] - }, - "mangadex": { - "chapter-reverse": true, - "chapter-filter": "lang == 'en'", - "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], - "postprocessors": ["cbz"] - }, - "mangareader": { - "chapter-reverse": true, - "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], - "postprocessors": ["cbz"] - }, - "mangapanda": { - "chapter-reverse": true, - "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], - "postprocessors": ["cbz"] - }, - "webtoons": { - "chapter-reverse": true, - "directory": ["Webtoons", "{comic}", "{comic} #{episode}"], - "postprocessors": ["cbz"] - } - }, - "output": { - "mode": "auto" - }, - "downloader": { - "part": true, - "part-directory": "/home/jawz/.cache/gallery-dl", - "ytdl": { - "logging": true, - "format": "bestvideo+bestaudio/best", - "module": "yt_dlp", - "forward-cookies": true - }, - "http": { - "rate": null, - "retries": 5, - "timeout": 10.0, - "verify": true - } - }, - "postprocessor": { - "cbz": { - "name": "zip", - "compression": "store", - "mode": "safe", - "extension": "cbz" - } - } -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index bb126ef..0000000 --- a/flake.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - description = "JawZ scripts flake setup"; - inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; - outputs = - { self, nixpkgs }@inputs: - let - inherit (self) outputs; - pkgs = import nixpkgs { - system = "x86_64-linux"; - config.allowUnfree = true; - }; - in - { - packages.x86_64-linux = { - download = import ./pkgs/download.nix { inherit pkgs; }; - ffmpeg4discord = pkgs.writeScriptBin "ffmpeg4discord" (builtins.readFile ./nix/ffmpeg4discord.py); - ffmpreg = pkgs.writeScriptBin "ffmpreg" (builtins.readFile ./nix/ffmpreg.sh); - find-dup-episodes = pkgs.writeScriptBin "find-dup-episodes" ( - builtins.readFile ./nix/find-dup-episodes.sh - ); - manage-library = pkgs.writeScriptBin "manage-library" (builtins.readFile ./nix/manage-library.sh); - nextcloud-cronjob = pkgs.writeScriptBin "nextcloud-cronjob" ( - builtins.readFile ./nix/nextcloud-cronjob.sh - ); - pika-list = pkgs.writeScriptBin "pika-list" (builtins.readFile ./nix/pika-list.sh); - run = pkgs.writeScriptBin "run" (builtins.readFile ./nix/run.sh); - split-dir = pkgs.writeScriptBin "split-dir" (builtins.readFile ./nix/split-dir.sh); - stream-dl = pkgs.writeScriptBin "stream-dl" (builtins.readFile ./nix/stream-dl.sh); - sub-sync = pkgs.writeScriptBin "sub-sync" (builtins.readFile ./nix/sub-sync.sh); - package = pkgs.writeScriptBin "tasks" (builtins.readFile ./nix/tasks.sh); - update-dns = pkgs.writeScriptBin "update-dns" (builtins.readFile ./nix/update-dns.sh); - - }; - }; -} diff --git a/nix/download/.direnv/bin/nix-direnv-reload b/nix/download/.direnv/bin/nix-direnv-reload deleted file mode 100755 index d5e69fd..0000000 --- a/nix/download/.direnv/bin/nix-direnv-reload +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -set -e -if [[ ! -d "/home/jawz/Development/NixOS/scripts/download" ]]; then - echo "Cannot find source directory; Did you move it?" - echo "(Looking for "/home/jawz/Development/NixOS/scripts/download")" - echo 'Cannot force reload with this script - use "direnv reload" manually and then try again' - exit 1 -fi - -# rebuild the cache forcefully -_nix_direnv_force_reload=1 direnv exec "/home/jawz/Development/NixOS/scripts/download" true - -# Update the mtime for .envrc. -# This will cause direnv to reload again - but without re-building. -touch "/home/jawz/Development/NixOS/scripts/download/.envrc" - -# Also update the timestamp of whatever profile_rc we have. -# This makes sure that we know we are up to date. -touch -r "/home/jawz/Development/NixOS/scripts/download/.envrc" "/home/jawz/Development/NixOS/scripts/download/.direnv"/*.rc diff --git a/nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb b/nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb deleted file mode 120000 index fe9bbdf..0000000 --- a/nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb +++ /dev/null @@ -1 +0,0 @@ -/nix/store/ilq7gdgibfyxmagbp4hivixvxl44apyr-nix-shell-env \ No newline at end of file diff --git a/nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb.rc b/nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb.rc deleted file mode 100644 index de5c770..0000000 --- a/nix/download/.direnv/nix-profile-24.11-wb6agba4kfsxpbnb.rc +++ /dev/null @@ -1,2037 +0,0 @@ -unset shellHook -PATH=${PATH:-} -nix_saved_PATH="$PATH" -XDG_DATA_DIRS=${XDG_DATA_DIRS:-} -nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS" -AR='ar' -export AR -AS='as' -export AS -BASH='/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin/bash' -CC='gcc' -export CC -CONFIG_SHELL='/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin/bash' -export CONFIG_SHELL -CXX='g++' -export CXX -DETERMINISTIC_BUILD='1' -export DETERMINISTIC_BUILD -HOSTTYPE='x86_64' -HOST_PATH='/nix/store/ph44jcx3ddmlwh394mh1wb7f1qigxqb1-coreutils-9.5/bin:/nix/store/yb8icljkwhk5lla4nci3myndq2m4ywly-findutils-4.10.0/bin:/nix/store/phqahkhjsk8sl2jjiid1d47l2s4wy33h-diffutils-3.10/bin:/nix/store/yd9vbyhbxx62j0cyhd6v0iacz11nxpvc-gnused-4.9/bin:/nix/store/lvnwdmnjm7nvaq0a3vhvvn46iy4ql7gr-gnugrep-3.11/bin:/nix/store/0np7q7np75csai2cwzx57n332vn9ig4i-gawk-5.2.2/bin:/nix/store/zvn9bvrl2g516d2hfnanljiw24qa6w8l-gnutar-1.35/bin:/nix/store/db379c3zrmncmbv5khqxpk6ggbhxjw61-gzip-1.13/bin:/nix/store/girfp68w14pxfii52ak8gcs212y4q2s2-bzip2-1.0.8-bin/bin:/nix/store/21y3gqgm2a3w94m0wcrz1xxshks80z7p-gnumake-4.4.1/bin:/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin:/nix/store/91ixz3zw9ipc5j93gybir9fp5mzisq8w-patch-2.7.6/bin:/nix/store/6v73xwg2c7p5ap29ckyg18ng87pzlnxs-xz-5.6.2-bin/bin:/nix/store/a6nsbir3y5ni3wwkw933aqvcmyyywnnz-file-5.45/bin' -export HOST_PATH -IFS=' -' -IN_NIX_SHELL='impure' -export IN_NIX_SHELL -LD='ld' -export LD -LINENO='76' -MACHTYPE='x86_64-pc-linux-gnu' -NIX_BINTOOLS='/nix/store/l7n97992gd5piaw8phkxzsz176gfk1yj-binutils-wrapper-2.43.1' -export NIX_BINTOOLS -NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' -export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu -NIX_BUILD_CORES='16' -export NIX_BUILD_CORES -NIX_CC='/nix/store/vh9fsdhgxcnab2qk7vdp2palkkn6j3cp-gcc-wrapper-13.3.0' -export NIX_CC -NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' -export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu -NIX_CFLAGS_COMPILE=' -frandom-seed=ilq7gdgibf -isystem /nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/include -isystem /nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/include -isystem /nix/store/bakyrc1qx6imk38276zpf4b4hlzpqi62-ffmpeg-7.0.2-dev/include -isystem /nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/include -isystem /nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/include -isystem /nix/store/bakyrc1qx6imk38276zpf4b4hlzpqi62-ffmpeg-7.0.2-dev/include' -export NIX_CFLAGS_COMPILE -NIX_ENFORCE_NO_NATIVE='1' -export NIX_ENFORCE_NO_NATIVE -NIX_HARDENING_ENABLE='bindnow format fortify fortify3 pic relro stackprotector strictoverflow zerocallusedregs' -export NIX_HARDENING_ENABLE -NIX_LDFLAGS='-rpath /home/jawz/Development/NixOS/scripts/download/outputs/out/lib -L/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/lib -L/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/lib -L/nix/store/74fr1b2y17nvzgwg9dsj0d6bhgrngwn0-ffmpeg-7.0.2-lib/lib -L/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/lib -L/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/lib -L/nix/store/74fr1b2y17nvzgwg9dsj0d6bhgrngwn0-ffmpeg-7.0.2-lib/lib' -export NIX_LDFLAGS -NIX_NO_SELF_RPATH='1' -NIX_STORE='/nix/store' -export NIX_STORE -NM='nm' -export NM -OBJCOPY='objcopy' -export OBJCOPY -OBJDUMP='objdump' -export OBJDUMP -OLDPWD='' -export OLDPWD -OPTERR='1' -OSTYPE='linux-gnu' -PATH='/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/bin:/nix/store/idnzls4cmcmrqlhpbx07s739xvwqj8rd-yt-dlp-2024.10.22/bin:/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/bin:/nix/store/lszjnzx43wz099v49za1561kng6mny59-python3.12-mutagen-1.47.0/bin:/nix/store/7akj36xklfgdvm26gs99bafp3851vznf-python3.12-charset-normalizer-3.3.2/bin:/nix/store/p7a65yfimcpmn4i8rpf0j5d7cqhvd10w-gallery-dl-1.27.6/bin:/nix/store/l007n3frvwsmi8ch2pdp7vshc790d8g0-ffmpeg-7.0.2-bin/bin:/nix/store/dvfb5mrpfhg5211v6pl0a3fmz9idg6w7-patchelf-0.15.0/bin:/nix/store/vh9fsdhgxcnab2qk7vdp2palkkn6j3cp-gcc-wrapper-13.3.0/bin:/nix/store/0vsyw5bhwmisszyfd1a0sdnwvnf4qa5a-gcc-13.3.0/bin:/nix/store/vpsla1ivhavzd4fmi95yzmgb4g9rd072-glibc-2.40-36-bin/bin:/nix/store/ph44jcx3ddmlwh394mh1wb7f1qigxqb1-coreutils-9.5/bin:/nix/store/l7n97992gd5piaw8phkxzsz176gfk1yj-binutils-wrapper-2.43.1/bin:/nix/store/vcvhwiilizhijk7ywyn58p9l005n9sbn-binutils-2.43.1/bin:/nix/store/ph44jcx3ddmlwh394mh1wb7f1qigxqb1-coreutils-9.5/bin:/nix/store/yb8icljkwhk5lla4nci3myndq2m4ywly-findutils-4.10.0/bin:/nix/store/phqahkhjsk8sl2jjiid1d47l2s4wy33h-diffutils-3.10/bin:/nix/store/yd9vbyhbxx62j0cyhd6v0iacz11nxpvc-gnused-4.9/bin:/nix/store/lvnwdmnjm7nvaq0a3vhvvn46iy4ql7gr-gnugrep-3.11/bin:/nix/store/0np7q7np75csai2cwzx57n332vn9ig4i-gawk-5.2.2/bin:/nix/store/zvn9bvrl2g516d2hfnanljiw24qa6w8l-gnutar-1.35/bin:/nix/store/db379c3zrmncmbv5khqxpk6ggbhxjw61-gzip-1.13/bin:/nix/store/girfp68w14pxfii52ak8gcs212y4q2s2-bzip2-1.0.8-bin/bin:/nix/store/21y3gqgm2a3w94m0wcrz1xxshks80z7p-gnumake-4.4.1/bin:/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin:/nix/store/91ixz3zw9ipc5j93gybir9fp5mzisq8w-patch-2.7.6/bin:/nix/store/6v73xwg2c7p5ap29ckyg18ng87pzlnxs-xz-5.6.2-bin/bin:/nix/store/a6nsbir3y5ni3wwkw933aqvcmyyywnnz-file-5.45/bin' -export PATH -PS4='+ ' -PYTHONHASHSEED='0' -export PYTHONHASHSEED -PYTHONNOUSERSITE='1' -export PYTHONNOUSERSITE -PYTHONPATH='/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/lib/python3.12/site-packages:/nix/store/idnzls4cmcmrqlhpbx07s739xvwqj8rd-yt-dlp-2024.10.22/lib/python3.12/site-packages:/nix/store/jq2hmnvx911a8y4pprsddffr35khdk0z-python3.12-brotli-1.1.0/lib/python3.12/site-packages:/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/lib/python3.12/site-packages:/nix/store/zvixkvf303l194bbwkspm329v10g4rm1-python3.12-certifi-2024.07.04/lib/python3.12/site-packages:/nix/store/3m1gvjna4nd6s57i8z5s2f5f71x3sady-python3.12-curl-cffi-0.7.1/lib/python3.12/site-packages:/nix/store/fdxlra5xny01lsfvfh1l0banr3imxvvx-python3.12-cffi-1.17.1/lib/python3.12/site-packages:/nix/store/p2gdkij2rnis9mfhh2b9n434xn4ys314-python3.12-pycparser-2.22/lib/python3.12/site-packages:/nix/store/lszjnzx43wz099v49za1561kng6mny59-python3.12-mutagen-1.47.0/lib/python3.12/site-packages:/nix/store/zjh736vrgx8vscy4sddwdq6rqz204c8c-python3.12-pycryptodome-3.20.0/lib/python3.12/site-packages:/nix/store/4px67r7243qjr75n5l1bzqf8hlzylwwd-python3.12-requests-2.32.3/lib/python3.12/site-packages:/nix/store/1yyxjlv56wbgjzl2ikhrwglyfq8487x7-python3.12-brotlicffi-1.1.0.0/lib/python3.12/site-packages:/nix/store/7akj36xklfgdvm26gs99bafp3851vznf-python3.12-charset-normalizer-3.3.2/lib/python3.12/site-packages:/nix/store/s84p3zf46i9fm3jy7rm5w89c51as2k81-python3.12-idna-3.7/lib/python3.12/site-packages:/nix/store/b7r5sizpalyck3w8nfal0p8v304z4r60-python3.12-urllib3-2.2.2/lib/python3.12/site-packages:/nix/store/zyxx9gwjhj55771nbnm78q45pzcaps0c-python3.12-secretstorage-3.3.3/lib/python3.12/site-packages:/nix/store/631s3slrh66vhydhkzp85spbihmbax05-python3.12-cryptography-43.0.0/lib/python3.12/site-packages:/nix/store/2h74pqir5nsdqw8vq049iyg2jzs4nigm-python3.12-jeepney-0.8.0/lib/python3.12/site-packages:/nix/store/qjvzxy2vp2bk7347954q0bv82l7jx6l0-python3.12-websockets-12.0/lib/python3.12/site-packages:/nix/store/p7a65yfimcpmn4i8rpf0j5d7cqhvd10w-gallery-dl-1.27.6/lib/python3.12/site-packages' -export PYTHONPATH -RANLIB='ranlib' -export RANLIB -READELF='readelf' -export READELF -SHELL='/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin/bash' -export SHELL -SIZE='size' -export SIZE -SOURCE_DATE_EPOCH='315532800' -export SOURCE_DATE_EPOCH -STRINGS='strings' -export STRINGS -STRIP='strip' -export STRIP -XDG_DATA_DIRS='/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env/share:/nix/store/idnzls4cmcmrqlhpbx07s739xvwqj8rd-yt-dlp-2024.10.22/share:/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6/share:/nix/store/lszjnzx43wz099v49za1561kng6mny59-python3.12-mutagen-1.47.0/share:/nix/store/p7a65yfimcpmn4i8rpf0j5d7cqhvd10w-gallery-dl-1.27.6/share:/nix/store/dvfb5mrpfhg5211v6pl0a3fmz9idg6w7-patchelf-0.15.0/share' -export XDG_DATA_DIRS -_PYTHON_HOST_PLATFORM='linux-x86_64' -export _PYTHON_HOST_PLATFORM -_PYTHON_SYSCONFIGDATA_NAME='_sysconfigdata__linux_x86_64-linux-gnu' -export _PYTHON_SYSCONFIGDATA_NAME -__structuredAttrs='' -export __structuredAttrs -_substituteStream_has_warned_replace_deprecation='false' -buildInputs='' -export buildInputs -buildPhase='{ echo "------------------------------------------------------------"; - echo " WARNING: the existence of this path is not guaranteed."; - echo " It is an internal implementation detail for pkgs.mkShell."; - echo "------------------------------------------------------------"; - echo; - # Record all build inputs as runtime dependencies - export; -} >> "$out" -' -export buildPhase -builder='/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin/bash' -export builder -cmakeFlags='' -export cmakeFlags -configureFlags='' -export configureFlags -defaultBuildInputs='' -defaultNativeBuildInputs='/nix/store/dvfb5mrpfhg5211v6pl0a3fmz9idg6w7-patchelf-0.15.0 /nix/store/n9iajmgf6z1rvwrdxy3fp8q9xa16j7x7-update-autotools-gnu-config-scripts-hook /nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh /nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh /nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh /nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh /nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh /nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh /nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh /nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh /nix/store/12lvf0c7xric9cny7slvf9cmhypl1p67-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/aazf105snicrlvyzzbdj85sx4179rpfp-set-source-date-epoch-to-latest.sh /nix/store/gps9qrh99j7g02840wv5x78ykmz30byp-strip.sh /nix/store/vh9fsdhgxcnab2qk7vdp2palkkn6j3cp-gcc-wrapper-13.3.0' -depsBuildBuild='' -export depsBuildBuild -depsBuildBuildPropagated='' -export depsBuildBuildPropagated -depsBuildTarget='' -export depsBuildTarget -depsBuildTargetPropagated='' -export depsBuildTargetPropagated -depsHostHost='' -export depsHostHost -depsHostHostPropagated='' -export depsHostHostPropagated -depsTargetTarget='' -export depsTargetTarget -depsTargetTargetPropagated='' -export depsTargetTargetPropagated -doCheck='' -export doCheck -doInstallCheck='' -export doInstallCheck -dontAddDisableDepTrack='1' -export dontAddDisableDepTrack -declare -a envBuildBuildHooks=('addPythonPath' 'sysconfigdataHook' ) -declare -a envBuildHostHooks=('addPythonPath' 'sysconfigdataHook' ) -declare -a envBuildTargetHooks=('addPythonPath' 'sysconfigdataHook' ) -declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) -declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) -declare -a envTargetTargetHooks=() -declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' ) -initialPath='/nix/store/ph44jcx3ddmlwh394mh1wb7f1qigxqb1-coreutils-9.5 /nix/store/yb8icljkwhk5lla4nci3myndq2m4ywly-findutils-4.10.0 /nix/store/phqahkhjsk8sl2jjiid1d47l2s4wy33h-diffutils-3.10 /nix/store/yd9vbyhbxx62j0cyhd6v0iacz11nxpvc-gnused-4.9 /nix/store/lvnwdmnjm7nvaq0a3vhvvn46iy4ql7gr-gnugrep-3.11 /nix/store/0np7q7np75csai2cwzx57n332vn9ig4i-gawk-5.2.2 /nix/store/zvn9bvrl2g516d2hfnanljiw24qa6w8l-gnutar-1.35 /nix/store/db379c3zrmncmbv5khqxpk6ggbhxjw61-gzip-1.13 /nix/store/girfp68w14pxfii52ak8gcs212y4q2s2-bzip2-1.0.8-bin /nix/store/21y3gqgm2a3w94m0wcrz1xxshks80z7p-gnumake-4.4.1 /nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32 /nix/store/91ixz3zw9ipc5j93gybir9fp5mzisq8w-patch-2.7.6 /nix/store/6v73xwg2c7p5ap29ckyg18ng87pzlnxs-xz-5.6.2-bin /nix/store/a6nsbir3y5ni3wwkw933aqvcmyyywnnz-file-5.45' -mesonFlags='' -export mesonFlags -name='nix-shell-env' -export name -nativeBuildInputs='/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env /nix/store/idnzls4cmcmrqlhpbx07s739xvwqj8rd-yt-dlp-2024.10.22 /nix/store/p7a65yfimcpmn4i8rpf0j5d7cqhvd10w-gallery-dl-1.27.6 /nix/store/bakyrc1qx6imk38276zpf4b4hlzpqi62-ffmpeg-7.0.2-dev' -export nativeBuildInputs -out='/home/jawz/Development/NixOS/scripts/download/outputs/out' -export out -outputBin='out' -outputDev='out' -outputDevdoc='REMOVE' -outputDevman='out' -outputDoc='out' -outputInclude='out' -outputInfo='out' -outputLib='out' -outputMan='out' -outputs='out' -export outputs -patches='' -export patches -phases='buildPhase' -export phases -pkg='/nix/store/vh9fsdhgxcnab2qk7vdp2palkkn6j3cp-gcc-wrapper-13.3.0' -declare -a pkgsBuildBuild=() -declare -a pkgsBuildHost=('/nix/store/0aspc8na2ipa80yba0zj4wzigfkzs1dc-python3-3.12.6-env' '/nix/store/idnzls4cmcmrqlhpbx07s739xvwqj8rd-yt-dlp-2024.10.22' '/nix/store/jq2hmnvx911a8y4pprsddffr35khdk0z-python3.12-brotli-1.1.0' '/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6' '/nix/store/zvixkvf303l194bbwkspm329v10g4rm1-python3.12-certifi-2024.07.04' '/nix/store/3m1gvjna4nd6s57i8z5s2f5f71x3sady-python3.12-curl-cffi-0.7.1' '/nix/store/fdxlra5xny01lsfvfh1l0banr3imxvvx-python3.12-cffi-1.17.1' '/nix/store/p2gdkij2rnis9mfhh2b9n434xn4ys314-python3.12-pycparser-2.22' '/nix/store/lszjnzx43wz099v49za1561kng6mny59-python3.12-mutagen-1.47.0' '/nix/store/zjh736vrgx8vscy4sddwdq6rqz204c8c-python3.12-pycryptodome-3.20.0' '/nix/store/4px67r7243qjr75n5l1bzqf8hlzylwwd-python3.12-requests-2.32.3' '/nix/store/1yyxjlv56wbgjzl2ikhrwglyfq8487x7-python3.12-brotlicffi-1.1.0.0' '/nix/store/7akj36xklfgdvm26gs99bafp3851vznf-python3.12-charset-normalizer-3.3.2' '/nix/store/s84p3zf46i9fm3jy7rm5w89c51as2k81-python3.12-idna-3.7' '/nix/store/b7r5sizpalyck3w8nfal0p8v304z4r60-python3.12-urllib3-2.2.2' '/nix/store/zyxx9gwjhj55771nbnm78q45pzcaps0c-python3.12-secretstorage-3.3.3' '/nix/store/631s3slrh66vhydhkzp85spbihmbax05-python3.12-cryptography-43.0.0' '/nix/store/2h74pqir5nsdqw8vq049iyg2jzs4nigm-python3.12-jeepney-0.8.0' '/nix/store/qjvzxy2vp2bk7347954q0bv82l7jx6l0-python3.12-websockets-12.0' '/nix/store/p7a65yfimcpmn4i8rpf0j5d7cqhvd10w-gallery-dl-1.27.6' '/nix/store/bakyrc1qx6imk38276zpf4b4hlzpqi62-ffmpeg-7.0.2-dev' '/nix/store/l007n3frvwsmi8ch2pdp7vshc790d8g0-ffmpeg-7.0.2-bin' '/nix/store/74fr1b2y17nvzgwg9dsj0d6bhgrngwn0-ffmpeg-7.0.2-lib' '/nix/store/dvfb5mrpfhg5211v6pl0a3fmz9idg6w7-patchelf-0.15.0' '/nix/store/n9iajmgf6z1rvwrdxy3fp8q9xa16j7x7-update-autotools-gnu-config-scripts-hook' '/nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh' '/nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh' '/nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh' '/nix/store/12lvf0c7xric9cny7slvf9cmhypl1p67-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/aazf105snicrlvyzzbdj85sx4179rpfp-set-source-date-epoch-to-latest.sh' '/nix/store/gps9qrh99j7g02840wv5x78ykmz30byp-strip.sh' '/nix/store/vh9fsdhgxcnab2qk7vdp2palkkn6j3cp-gcc-wrapper-13.3.0' '/nix/store/l7n97992gd5piaw8phkxzsz176gfk1yj-binutils-wrapper-2.43.1' ) -declare -a pkgsBuildTarget=() -declare -a pkgsHostHost=() -declare -a pkgsHostTarget=() -declare -a pkgsTargetTarget=() -declare -a postFixupHooks=('_makeSymlinksRelativeInAllOutputs' '_multioutPropagateDev' ) -declare -a postUnpackHooks=('_updateSourceDateEpochFromSourceRoot' ) -declare -a preConfigureHooks=('_multioutConfig' ) -preConfigurePhases=' updateAutotoolsGnuConfigScriptsPhase' -declare -a preFixupHooks=('_moveToShare' '_multioutDocs' '_multioutDevs' ) -preferLocalBuild='1' -export preferLocalBuild -prefix='/home/jawz/Development/NixOS/scripts/download/outputs/out' -declare -a propagatedBuildDepFiles=('propagated-build-build-deps' 'propagated-native-build-inputs' 'propagated-build-target-deps' ) -propagatedBuildInputs='' -export propagatedBuildInputs -declare -a propagatedHostDepFiles=('propagated-host-host-deps' 'propagated-build-inputs' ) -propagatedNativeBuildInputs='' -export propagatedNativeBuildInputs -declare -a propagatedTargetDepFiles=('propagated-target-target-deps' ) -shell='/nix/store/717iy55ncqs0wmhdkwc5fg2vci5wbmq8-bash-5.2p32/bin/bash' -export shell -shellHook='' -export shellHook -stdenv='/nix/store/ncv68hjnidcd2bm5abkhklrijhn0cgn6-stdenv-linux' -export stdenv -strictDeps='' -export strictDeps -system='x86_64-linux' -export system -declare -a unpackCmdHooks=('_defaultUnpack' ) -_activatePkgs () -{ - - local hostOffset targetOffset; - local pkg; - for hostOffset in "${allPlatOffsets[@]}"; - do - local pkgsVar="${pkgAccumVarVars[hostOffset + 1]}"; - for targetOffset in "${allPlatOffsets[@]}"; - do - (( hostOffset <= targetOffset )) || continue; - local pkgsRef="${pkgsVar}[$targetOffset - $hostOffset]"; - local pkgsSlice="${!pkgsRef}[@]"; - for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; - do - activatePackage "$pkg" "$hostOffset" "$targetOffset"; - done; - done; - done -} -_addRpathPrefix () -{ - - if [ "${NIX_NO_SELF_RPATH:-0}" != 1 ]; then - export NIX_LDFLAGS="-rpath $1/lib ${NIX_LDFLAGS-}"; - fi -} -_addToEnv () -{ - - local depHostOffset depTargetOffset; - local pkg; - for depHostOffset in "${allPlatOffsets[@]}"; - do - local hookVar="${pkgHookVarVars[depHostOffset + 1]}"; - local pkgsVar="${pkgAccumVarVars[depHostOffset + 1]}"; - for depTargetOffset in "${allPlatOffsets[@]}"; - do - (( depHostOffset <= depTargetOffset )) || continue; - local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]"; - if [[ -z "${strictDeps-}" ]]; then - local visitedPkgs=""; - for pkg in "${pkgsBuildBuild[@]}" "${pkgsBuildHost[@]}" "${pkgsBuildTarget[@]}" "${pkgsHostHost[@]}" "${pkgsHostTarget[@]}" "${pkgsTargetTarget[@]}"; - do - if [[ "$visitedPkgs" = *"$pkg"* ]]; then - continue; - fi; - runHook "${!hookRef}" "$pkg"; - visitedPkgs+=" $pkg"; - done; - else - local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"; - local pkgsSlice="${!pkgsRef}[@]"; - for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; - do - runHook "${!hookRef}" "$pkg"; - done; - fi; - done; - done -} -_allFlags () -{ - - export system pname name version; - while IFS='' read -r varName; do - nixTalkativeLog "@${varName}@ -> ${!varName}"; - args+=("--subst-var" "$varName"); - done < <(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }') -} -_assignFirst () -{ - - local varName="$1"; - local _var; - local REMOVE=REMOVE; - shift; - for _var in "$@"; - do - if [ -n "${!_var-}" ]; then - eval "${varName}"="${_var}"; - return; - fi; - done; - echo; - echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}."; - echo " The following variables were all unset or empty:"; - echo " $*"; - if [ -z "${out:-}" ]; then - echo ' If you do not want an "out" output in your derivation, make sure to define'; - echo ' the other specific required outputs. This can be achieved by picking one'; - echo " of the above as an output."; - echo ' You do not have to remove "out" if you want to have a different default'; - echo ' output, because the first output is taken as a default.'; - echo; - fi; - return 1 -} -_callImplicitHook () -{ - - local def="$1"; - local hookName="$2"; - if declare -F "$hookName" > /dev/null; then - nixTalkativeLog "calling implicit '$hookName' function hook"; - "$hookName"; - else - if type -p "$hookName" > /dev/null; then - nixTalkativeLog "sourcing implicit '$hookName' script hook"; - source "$hookName"; - else - if [ -n "${!hookName:-}" ]; then - nixTalkativeLog "evaling implicit '$hookName' string hook"; - eval "${!hookName}"; - else - return "$def"; - fi; - fi; - fi -} -_defaultUnpack () -{ - - local fn="$1"; - local destination; - if [ -d "$fn" ]; then - destination="$(stripHash "$fn")"; - if [ -e "$destination" ]; then - echo "Cannot copy $fn to $destination: destination already exists!"; - echo "Did you specify two \"srcs\" with the same \"name\"?"; - return 1; - fi; - cp -pr --reflink=auto -- "$fn" "$destination"; - else - case "$fn" in - *.tar.xz | *.tar.lzma | *.txz) - ( XZ_OPT="--threads=$NIX_BUILD_CORES" xz -d < "$fn"; - true ) | tar xf - --mode=+w --warning=no-timestamp - ;; - *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz) - tar xf "$fn" --mode=+w --warning=no-timestamp - ;; - *) - return 1 - ;; - esac; - fi -} -_doStrip () -{ - - local -ra flags=(dontStripHost dontStripTarget); - local -ra debugDirs=(stripDebugList stripDebugListTarget); - local -ra allDirs=(stripAllList stripAllListTarget); - local -ra stripCmds=(STRIP STRIP_FOR_TARGET); - local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET); - stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin}; - stripDebugListTarget=${stripDebugListTarget[*]:-}; - stripAllList=${stripAllList[*]:-}; - stripAllListTarget=${stripAllListTarget[*]:-}; - local i; - for i in ${!stripCmds[@]}; - do - local -n flag="${flags[$i]}"; - local -n debugDirList="${debugDirs[$i]}"; - local -n allDirList="${allDirs[$i]}"; - local -n stripCmd="${stripCmds[$i]}"; - local -n ranlibCmd="${ranlibCmds[$i]}"; - if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then - continue; - fi; - stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}"; - stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}"; - done -} -_eval () -{ - - if declare -F "$1" > /dev/null 2>&1; then - "$@"; - else - eval "$1"; - fi -} -_logHook () -{ - - if [[ -z ${NIX_LOG_FD-} ]]; then - return; - fi; - local hookKind="$1"; - local hookExpr="$2"; - shift 2; - if declare -F "$hookExpr" > /dev/null 2>&1; then - nixTalkativeLog "calling '$hookKind' function hook '$hookExpr'" "$@"; - else - if type -p "$hookExpr" > /dev/null; then - nixTalkativeLog "sourcing '$hookKind' script hook '$hookExpr'"; - else - if [[ "$hookExpr" != "_callImplicitHook"* ]]; then - local exprToOutput; - if [[ ${NIX_DEBUG:-0} -ge 5 ]]; then - exprToOutput="$hookExpr"; - else - local hookExprLine; - while IFS= read -r hookExprLine; do - hookExprLine="${hookExprLine#"${hookExprLine%%[![:space:]]*}"}"; - if [[ -n "$hookExprLine" ]]; then - exprToOutput+="$hookExprLine\\n "; - fi; - done <<< "$hookExpr"; - exprToOutput="${exprToOutput%%\\n }"; - fi; - nixTalkativeLog "evaling '$hookKind' string hook '$exprToOutput'"; - fi; - fi; - fi -} -_makeSymlinksRelative () -{ - - local symlinkTarget; - if [ "${dontRewriteSymlinks-}" ] || [ ! -e "$prefix" ]; then - return; - fi; - while IFS= read -r -d '' f; do - symlinkTarget=$(readlink "$f"); - if [[ "$symlinkTarget"/ != "$prefix"/* ]]; then - continue; - fi; - if [ ! -e "$symlinkTarget" ]; then - echo "the symlink $f is broken, it points to $symlinkTarget (which is missing)"; - fi; - echo "rewriting symlink $f to be relative to $prefix"; - ln -snrf "$symlinkTarget" "$f"; - done < <(find $prefix -type l -print0) -} -_makeSymlinksRelativeInAllOutputs () -{ - - local output; - for output in $(getAllOutputNames); - do - prefix="${!output}" _makeSymlinksRelative; - done -} -_moveLib64 () -{ - - if [ "${dontMoveLib64-}" = 1 ]; then - return; - fi; - if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then - return; - fi; - echo "moving $prefix/lib64/* to $prefix/lib"; - mkdir -p $prefix/lib; - shopt -s dotglob; - for i in $prefix/lib64/*; - do - mv --no-clobber "$i" $prefix/lib; - done; - shopt -u dotglob; - rmdir $prefix/lib64; - ln -s lib $prefix/lib64 -} -_moveSbin () -{ - - if [ "${dontMoveSbin-}" = 1 ]; then - return; - fi; - if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then - return; - fi; - echo "moving $prefix/sbin/* to $prefix/bin"; - mkdir -p $prefix/bin; - shopt -s dotglob; - for i in $prefix/sbin/*; - do - mv "$i" $prefix/bin; - done; - shopt -u dotglob; - rmdir $prefix/sbin; - ln -s bin $prefix/sbin -} -_moveSystemdUserUnits () -{ - - if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then - return; - fi; - if [ ! -e "${prefix:?}/lib/systemd/user" ]; then - return; - fi; - local source="$prefix/lib/systemd/user"; - local target="$prefix/share/systemd/user"; - echo "moving $source/* to $target"; - mkdir -p "$target"; - ( shopt -s dotglob; - for i in "$source"/*; - do - mv "$i" "$target"; - done ); - rmdir "$source"; - ln -s "$target" "$source" -} -_moveToShare () -{ - - if [ -n "$__structuredAttrs" ]; then - if [ -z "${forceShare-}" ]; then - forceShare=(man doc info); - fi; - else - forceShare=(${forceShare:-man doc info}); - fi; - if [[ -z "$out" ]]; then - return; - fi; - for d in "${forceShare[@]}"; - do - if [ -d "$out/$d" ]; then - if [ -d "$out/share/$d" ]; then - echo "both $d/ and share/$d/ exist!"; - else - echo "moving $out/$d to $out/share/$d"; - mkdir -p $out/share; - mv $out/$d $out/share/; - fi; - fi; - done -} -_multioutConfig () -{ - - if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then - return; - fi; - if [ -z "${shareDocName:-}" ]; then - local confScript="${configureScript:-}"; - if [ -z "$confScript" ] && [ -x ./configure ]; then - confScript=./configure; - fi; - if [ -f "$confScript" ]; then - local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"; - fi; - if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then - shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"; - fi; - fi; - prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!outputInclude}"/include --oldincludedir="${!outputInclude}"/include --mandir="${!outputMan}"/share/man --infodir="${!outputInfo}"/share/info --docdir="${!outputDoc}"/share/doc/"${shareDocName}" --libdir="${!outputLib}"/lib --libexecdir="${!outputLib}"/libexec --localedir="${!outputLib}"/share/locale; - prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal -} -_multioutDevs () -{ - - if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then - return; - fi; - moveToOutput include "${!outputInclude}"; - moveToOutput lib/pkgconfig "${!outputDev}"; - moveToOutput share/pkgconfig "${!outputDev}"; - moveToOutput lib/cmake "${!outputDev}"; - moveToOutput share/aclocal "${!outputDev}"; - for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc; - do - echo "Patching '$f' includedir to output ${!outputInclude}"; - sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f"; - done -} -_multioutDocs () -{ - - local REMOVE=REMOVE; - moveToOutput share/info "${!outputInfo}"; - moveToOutput share/doc "${!outputDoc}"; - moveToOutput share/gtk-doc "${!outputDevdoc}"; - moveToOutput share/devhelp/books "${!outputDevdoc}"; - moveToOutput share/man "${!outputMan}"; - moveToOutput share/man/man3 "${!outputDevman}" -} -_multioutPropagateDev () -{ - - if [ "$(getAllOutputNames)" = "out" ]; then - return; - fi; - local outputFirst; - for outputFirst in $(getAllOutputNames); - do - break; - done; - local propagaterOutput="$outputDev"; - if [ -z "$propagaterOutput" ]; then - propagaterOutput="$outputFirst"; - fi; - if [ -z "${propagatedBuildOutputs+1}" ]; then - local po_dirty="$outputBin $outputInclude $outputLib"; - set +o pipefail; - propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `; - set -o pipefail; - fi; - if [ -z "$propagatedBuildOutputs" ]; then - return; - fi; - mkdir -p "${!propagaterOutput}"/nix-support; - for output in $propagatedBuildOutputs; - do - echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs; - done -} -_overrideFirst () -{ - - if [ -z "${!1-}" ]; then - _assignFirst "$@"; - fi -} -_pruneLibtoolFiles () -{ - - if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then - return; - fi; - find "$prefix" -type f -name '*.la' -exec grep -q '^# Generated by .*libtool' {} \; -exec grep -q "^old_library=''" {} \; -exec sed -i {} -e "/^dependency_libs='[^']/ c dependency_libs='' #pruned" \; -} -_updateSourceDateEpochFromSourceRoot () -{ - - if [ -n "$sourceRoot" ]; then - updateSourceDateEpoch "$sourceRoot"; - fi -} -activatePackage () -{ - - local pkg="$1"; - local -r hostOffset="$2"; - local -r targetOffset="$3"; - (( hostOffset <= targetOffset )) || exit 1; - if [ -f "$pkg" ]; then - nixTalkativeLog "sourcing setup hook '$pkg'"; - source "$pkg"; - fi; - if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then - addToSearchPath _PATH "$pkg/bin"; - fi; - if (( hostOffset <= -1 )); then - addToSearchPath _XDG_DATA_DIRS "$pkg/share"; - fi; - if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then - addToSearchPath _HOST_PATH "$pkg/bin"; - fi; - if [[ -f "$pkg/nix-support/setup-hook" ]]; then - nixTalkativeLog "sourcing setup hook '$pkg/nix-support/setup-hook'"; - source "$pkg/nix-support/setup-hook"; - fi -} -addEnvHooks () -{ - - local depHostOffset="$1"; - shift; - local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"; - local pkgHookVar; - for pkgHookVar in "${!pkgHookVarsSlice}"; - do - eval "${pkgHookVar}s"'+=("$@")'; - done -} -addPythonPath () -{ - - addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.12/site-packages -} -addToSearchPath () -{ - - addToSearchPathWithCustomDelimiter ":" "$@" -} -addToSearchPathWithCustomDelimiter () -{ - - local delimiter="$1"; - local varName="$2"; - local dir="$3"; - if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then - export "${varName}=${!varName:+${!varName}${delimiter}}${dir}"; - fi -} -appendToVar () -{ - - local -n nameref="$1"; - local useArray type; - if [ -n "$__structuredAttrs" ]; then - useArray=true; - else - useArray=false; - fi; - if type=$(declare -p "$1" 2> /dev/null); then - case "${type#* }" in - -A*) - echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2; - return 1 - ;; - -a*) - useArray=true - ;; - *) - useArray=false - ;; - esac; - fi; - shift; - if $useArray; then - nameref=(${nameref+"${nameref[@]}"} "$@"); - else - nameref="${nameref-} $*"; - fi -} -auditTmpdir () -{ - - local dir="$1"; - [ -e "$dir" ] || return 0; - echo "checking for references to $TMPDIR/ in $dir..."; - local i; - find "$dir" -type f -print0 | while IFS= read -r -d '' i; do - if [[ "$i" =~ .build-id ]]; then - continue; - fi; - if isELF "$i"; then - if { - printf :; - patchelf --print-rpath "$i" - } | grep -q -F ":$TMPDIR/"; then - echo "RPATH of binary $i contains a forbidden reference to $TMPDIR/"; - exit 1; - fi; - fi; - if isScript "$i"; then - if [ -e "$(dirname "$i")/.$(basename "$i")-wrapped" ]; then - if grep -q -F "$TMPDIR/" "$i"; then - echo "wrapper script $i contains a forbidden reference to $TMPDIR/"; - exit 1; - fi; - fi; - fi; - done -} -bintoolsWrapper_addLDVars () -{ - - local role_post; - getHostRoleEnvHook; - if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then - export NIX_LDFLAGS${role_post}+=" -L$1/lib64"; - fi; - if [[ -d "$1/lib" ]]; then - local -a glob=($1/lib/lib*); - if [ "${#glob[*]}" -gt 0 ]; then - export NIX_LDFLAGS${role_post}+=" -L$1/lib"; - fi; - fi -} -buildPhase () -{ - - runHook preBuild; - if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then - echo "no Makefile or custom buildPhase, doing nothing"; - else - foundMakefile=1; - local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray; - echoCmd 'build flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - fi; - runHook postBuild -} -ccWrapper_addCVars () -{ - - local role_post; - getHostRoleEnvHook; - if [ -d "$1/include" ]; then - export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"; - fi; - if [ -d "$1/Library/Frameworks" ]; then - export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"; - fi -} -checkPhase () -{ - - runHook preCheck; - if [[ -z "${foundMakefile:-}" ]]; then - echo "no Makefile or custom checkPhase, doing nothing"; - runHook postCheck; - return; - fi; - if [[ -z "${checkTarget:-}" ]]; then - if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then - checkTarget="check"; - else - if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then - checkTarget="test"; - fi; - fi; - fi; - if [[ -z "${checkTarget:-}" ]]; then - echo "no check/test target in ${makefile:-Makefile}, doing nothing"; - else - local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray checkFlags=VERBOSE=y checkFlagsArray checkTarget; - echoCmd 'check flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - fi; - runHook postCheck -} -compressManPages () -{ - - local dir="$1"; - if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then - return; - fi; - echo "gzipping man pages under $dir/share/man/"; - find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | while IFS= read -r -d '' f; do - if gzip -c -n "$f" > "$f".gz; then - rm "$f"; - else - rm "$f".gz; - fi; - done; - find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do - local target; - target="$(readlink -f "$f")"; - if [ -f "$target".gz ]; then - ln -sf "$target".gz "$f".gz && rm "$f"; - fi; - done -} -concatStringsSep () -{ - - local sep="$1"; - local name="$2"; - local type oldifs; - if type=$(declare -p "$name" 2> /dev/null); then - local -n nameref="$name"; - case "${type#* }" in - -A*) - echo "concatStringsSep(): ERROR: trying to use concatStringsSep on an associative array." 1>&2; - return 1 - ;; - -a*) - local IFS="$sep"; - echo -n "${nameref[*]}" - ;; - *) - echo -n "${nameref// /"${sep}"}" - ;; - esac; - fi -} -concatTo () -{ - - local -; - set -o noglob; - local -n targetref="$1"; - shift; - local arg default name type; - for arg in "$@"; - do - IFS="=" read -r name default <<< "$arg"; - local -n nameref="$name"; - if [[ ! -n "${nameref[@]}" && -n "$default" ]]; then - targetref+=("$default"); - else - if type=$(declare -p "$name" 2> /dev/null); then - case "${type#* }" in - -A*) - echo "concatTo(): ERROR: trying to use concatTo on an associative array." 1>&2; - return 1 - ;; - -a*) - targetref+=("${nameref[@]}") - ;; - *) - if [[ "$name" = *"Array" ]]; then - nixErrorLog "concatTo(): $name is not declared as array, treating as a singleton. This will become an error in future"; - targetref+=(${nameref+"${nameref[@]}"}); - else - targetref+=(${nameref-}); - fi - ;; - esac; - fi; - fi; - done -} -configurePhase () -{ - - runHook preConfigure; - : "${configureScript=}"; - if [[ -z "$configureScript" && -x ./configure ]]; then - configureScript=./configure; - fi; - if [ -z "${dontFixLibtool:-}" ]; then - export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}"; - local i; - find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do - echo "fixing libtool script $i"; - fixLibtool "$i"; - done; - CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX); - find . -executable -type f -name configure -exec grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; -exec touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; -exec sed -i s_/usr/bin/file_file_g {} \; -exec touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;; - rm -f "$CONFIGURE_MTIME_REFERENCE"; - fi; - if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then - prependToVar configureFlags "${prefixKey:---prefix=}$prefix"; - fi; - if [[ -f "$configureScript" ]]; then - if [ -z "${dontAddDisableDepTrack:-}" ]; then - if grep -q dependency-tracking "$configureScript"; then - prependToVar configureFlags --disable-dependency-tracking; - fi; - fi; - if [ -z "${dontDisableStatic:-}" ]; then - if grep -q enable-static "$configureScript"; then - prependToVar configureFlags --disable-static; - fi; - fi; - if [ -z "${dontPatchShebangsInConfigure:-}" ]; then - patchShebangs --build "$configureScript"; - fi; - fi; - if [ -n "$configureScript" ]; then - local -a flagsArray; - concatTo flagsArray configureFlags configureFlagsArray; - echoCmd 'configure flags' "${flagsArray[@]}"; - $configureScript "${flagsArray[@]}"; - unset flagsArray; - else - echo "no configure script, doing nothing"; - fi; - runHook postConfigure -} -consumeEntire () -{ - - if IFS='' read -r -d '' "$1"; then - echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2; - return 1; - fi -} -distPhase () -{ - - runHook preDist; - local flagsArray=(); - concatTo flagsArray distFlags distFlagsArray distTarget=dist; - echo 'dist flags: %q' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - if [ "${dontCopyDist:-0}" != 1 ]; then - mkdir -p "$out/tarballs"; - cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs"; - fi; - runHook postDist -} -dumpVars () -{ - - if [ "${noDumpEnvVars:-0}" != 1 ]; then - { - install -m 0600 /dev/null "$NIX_BUILD_TOP/env-vars" && export 2> /dev/null >| "$NIX_BUILD_TOP/env-vars" - } || true; - fi -} -echoCmd () -{ - - printf "%s:" "$1"; - shift; - printf ' %q' "$@"; - echo -} -exitHandler () -{ - - exitCode="$?"; - set +e; - if [ -n "${showBuildStats:-}" ]; then - read -r -d '' -a buildTimes < <(times); - echo "build times:"; - echo "user time for the shell ${buildTimes[0]}"; - echo "system time for the shell ${buildTimes[1]}"; - echo "user time for all child processes ${buildTimes[2]}"; - echo "system time for all child processes ${buildTimes[3]}"; - fi; - if (( "$exitCode" != 0 )); then - runHook failureHook; - if [ -n "${succeedOnFailure:-}" ]; then - echo "build failed with exit code $exitCode (ignored)"; - mkdir -p "$out/nix-support"; - printf "%s" "$exitCode" > "$out/nix-support/failed"; - exit 0; - fi; - else - runHook exitHook; - fi; - return "$exitCode" -} -findInputs () -{ - - local -r pkg="$1"; - local -r hostOffset="$2"; - local -r targetOffset="$3"; - (( hostOffset <= targetOffset )) || exit 1; - local varVar="${pkgAccumVarVars[hostOffset + 1]}"; - local varRef="$varVar[$((targetOffset - hostOffset))]"; - local var="${!varRef}"; - unset -v varVar varRef; - local varSlice="$var[*]"; - case "${!varSlice-}" in - *" $pkg "*) - return 0 - ;; - esac; - unset -v varSlice; - eval "$var"'+=("$pkg")'; - if ! [ -e "$pkg" ]; then - echo "build input $pkg does not exist" 1>&2; - exit 1; - fi; - function mapOffset () - { - local -r inputOffset="$1"; - local -n outputOffset="$2"; - if (( inputOffset <= 0 )); then - outputOffset=$((inputOffset + hostOffset)); - else - outputOffset=$((inputOffset - 1 + targetOffset)); - fi - }; - local relHostOffset; - for relHostOffset in "${allPlatOffsets[@]}"; - do - local files="${propagatedDepFilesVars[relHostOffset + 1]}"; - local hostOffsetNext; - mapOffset "$relHostOffset" hostOffsetNext; - (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; - local relTargetOffset; - for relTargetOffset in "${allPlatOffsets[@]}"; - do - (( "$relHostOffset" <= "$relTargetOffset" )) || continue; - local fileRef="${files}[$relTargetOffset - $relHostOffset]"; - local file="${!fileRef}"; - unset -v fileRef; - local targetOffsetNext; - mapOffset "$relTargetOffset" targetOffsetNext; - (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; - [[ -f "$pkg/nix-support/$file" ]] || continue; - local pkgNext; - read -r -d '' pkgNext < "$pkg/nix-support/$file" || true; - for pkgNext in $pkgNext; - do - findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext"; - done; - done; - done -} -fixLibtool () -{ - - local search_path; - for flag in $NIX_LDFLAGS; - do - case $flag in - -L*) - search_path+=" ${flag#-L}" - ;; - esac; - done; - sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^' -} -fixupPhase () -{ - - local output; - for output in $(getAllOutputNames); - do - if [ -e "${!output}" ]; then - chmod -R u+w,u-s,g-s "${!output}"; - fi; - done; - runHook preFixup; - local output; - for output in $(getAllOutputNames); - do - prefix="${!output}" runHook fixupOutput; - done; - recordPropagatedDependencies; - if [ -n "${setupHook:-}" ]; then - mkdir -p "${!outputDev}/nix-support"; - substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"; - fi; - if [ -n "${setupHooks:-}" ]; then - mkdir -p "${!outputDev}/nix-support"; - local hook; - for hook in ${setupHooks[@]}; - do - local content; - consumeEntire content < "$hook"; - substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook"; - unset -v content; - done; - unset -v hook; - fi; - if [ -n "${propagatedUserEnvPkgs:-}" ]; then - mkdir -p "${!outputBin}/nix-support"; - printWords $propagatedUserEnvPkgs > "${!outputBin}/nix-support/propagated-user-env-packages"; - fi; - runHook postFixup -} -genericBuild () -{ - - export GZIP_NO_TIMESTAMPS=1; - if [ -f "${buildCommandPath:-}" ]; then - source "$buildCommandPath"; - return; - fi; - if [ -n "${buildCommand:-}" ]; then - eval "$buildCommand"; - return; - fi; - if [ -z "${phases[*]:-}" ]; then - phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}"; - fi; - for curPhase in ${phases[*]}; - do - runPhase "$curPhase"; - done -} -getAllOutputNames () -{ - - if [ -n "$__structuredAttrs" ]; then - echo "${!outputs[*]}"; - else - echo "$outputs"; - fi -} -getHostRole () -{ - - getRole "$hostOffset" -} -getHostRoleEnvHook () -{ - - getRole "$depHostOffset" -} -getRole () -{ - - case $1 in - -1) - role_post='_FOR_BUILD' - ;; - 0) - role_post='' - ;; - 1) - role_post='_FOR_TARGET' - ;; - *) - echo "binutils-wrapper-2.43.1: used as improper sort of dependency" 1>&2; - return 1 - ;; - esac -} -getTargetRole () -{ - - getRole "$targetOffset" -} -getTargetRoleEnvHook () -{ - - getRole "$depTargetOffset" -} -getTargetRoleWrapper () -{ - - case $targetOffset in - -1) - export NIX_BINTOOLS_WRAPPER_TARGET_BUILD_x86_64_unknown_linux_gnu=1 - ;; - 0) - export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1 - ;; - 1) - export NIX_BINTOOLS_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu=1 - ;; - *) - echo "binutils-wrapper-2.43.1: used as improper sort of dependency" 1>&2; - return 1 - ;; - esac -} -installCheckPhase () -{ - - runHook preInstallCheck; - if [[ -z "${foundMakefile:-}" ]]; then - echo "no Makefile or custom installCheckPhase, doing nothing"; - else - if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then - echo "no installcheck target in ${makefile:-Makefile}, doing nothing"; - else - local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray installCheckTarget=installcheck; - echoCmd 'installcheck flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - fi; - fi; - runHook postInstallCheck -} -installPhase () -{ - - runHook preInstall; - if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then - echo "no Makefile or custom installPhase, doing nothing"; - runHook postInstall; - return; - else - foundMakefile=1; - fi; - if [ -n "$prefix" ]; then - mkdir -p "$prefix"; - fi; - local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray installFlags installFlagsArray installTargets=install; - echoCmd 'install flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - runHook postInstall -} -isELF () -{ - - local fn="$1"; - local fd; - local magic; - exec {fd}< "$fn"; - read -r -n 4 -u "$fd" magic; - exec {fd}>&-; - if [ "$magic" = 'ELF' ]; then - return 0; - else - return 1; - fi -} -isMachO () -{ - - local fn="$1"; - local fd; - local magic; - exec {fd}< "$fn"; - read -r -n 4 -u "$fd" magic; - exec {fd}>&-; - if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then - return 0; - else - if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then - return 0; - else - if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then - return 0; - else - return 1; - fi; - fi; - fi -} -isScript () -{ - - local fn="$1"; - local fd; - local magic; - exec {fd}< "$fn"; - read -r -n 2 -u "$fd" magic; - exec {fd}>&-; - if [[ "$magic" =~ \#! ]]; then - return 0; - else - return 1; - fi -} -mapOffset () -{ - - local -r inputOffset="$1"; - local -n outputOffset="$2"; - if (( inputOffset <= 0 )); then - outputOffset=$((inputOffset + hostOffset)); - else - outputOffset=$((inputOffset - 1 + targetOffset)); - fi -} -moveToOutput () -{ - - local patt="$1"; - local dstOut="$2"; - local output; - for output in $(getAllOutputNames); - do - if [ "${!output}" = "$dstOut" ]; then - continue; - fi; - local srcPath; - for srcPath in "${!output}"/$patt; - do - if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then - continue; - fi; - if [ "$dstOut" = REMOVE ]; then - echo "Removing $srcPath"; - rm -r "$srcPath"; - else - local dstPath="$dstOut${srcPath#${!output}}"; - echo "Moving $srcPath to $dstPath"; - if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then - rmdir "$srcPath" --ignore-fail-on-non-empty; - if [ -d "$srcPath" ]; then - mv -t "$dstPath" "$srcPath"/*; - rmdir "$srcPath"; - fi; - else - mkdir -p "$(readlink -m "$dstPath/..")"; - mv "$srcPath" "$dstPath"; - fi; - fi; - local srcParent="$(readlink -m "$srcPath/..")"; - if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then - echo "Removing empty $srcParent/ and (possibly) its parents"; - rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true; - fi; - done; - done -} -nixChattyLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 5 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixDebugLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 6 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixErrorLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 0 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixInfoLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 3 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixNoticeLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 2 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixTalkativeLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 4 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixVomitLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 7 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -nixWarnLog () -{ - - if [[ -z ${NIX_LOG_FD-} ]] || [[ ${NIX_DEBUG:-0} -lt 1 ]]; then - return; - fi; - printf "%s\n" "$*" >&"$NIX_LOG_FD" -} -patchELF () -{ - - local dir="$1"; - [ -e "$dir" ] || return 0; - echo "shrinking RPATHs of ELF executables and libraries in $dir"; - local i; - while IFS= read -r -d '' i; do - if [[ "$i" =~ .build-id ]]; then - continue; - fi; - if ! isELF "$i"; then - continue; - fi; - echo "shrinking $i"; - patchelf --shrink-rpath "$i" || true; - done < <(find "$dir" -type f -print0) -} -patchPhase () -{ - - runHook prePatch; - local -a patchesArray; - concatTo patchesArray patches; - for i in "${patchesArray[@]}"; - do - echo "applying patch $i"; - local uncompress=cat; - case "$i" in - *.gz) - uncompress="gzip -d" - ;; - *.bz2) - uncompress="bzip2 -d" - ;; - *.xz) - uncompress="xz -d" - ;; - *.lzma) - uncompress="lzma -d" - ;; - esac; - local -a flagsArray; - concatTo flagsArray patchFlags=-p1; - $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}"; - done; - runHook postPatch -} -patchShebangs () -{ - - local pathName; - local update; - while [[ $# -gt 0 ]]; do - case "$1" in - --host) - pathName=HOST_PATH; - shift - ;; - --build) - pathName=PATH; - shift - ;; - --update) - update=true; - shift - ;; - --) - shift; - break - ;; - -* | --*) - echo "Unknown option $1 supplied to patchShebangs" 1>&2; - return 1 - ;; - *) - break - ;; - esac; - done; - echo "patching script interpreter paths in $@"; - local f; - local oldPath; - local newPath; - local arg0; - local args; - local oldInterpreterLine; - local newInterpreterLine; - if [[ $# -eq 0 ]]; then - echo "No arguments supplied to patchShebangs" 1>&2; - return 0; - fi; - local f; - while IFS= read -r -d '' f; do - isScript "$f" || continue; - read -r oldInterpreterLine < "$f" || [ "$oldInterpreterLine" ]; - read -r oldPath arg0 args <<< "${oldInterpreterLine:2}"; - if [[ -z "${pathName:-}" ]]; then - if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then - pathName=HOST_PATH; - else - pathName=PATH; - fi; - fi; - if [[ "$oldPath" == *"/bin/env" ]]; then - if [[ $arg0 == "-S" ]]; then - arg0=${args%% *}; - args=${args#* }; - newPath="$(PATH="${!pathName}" type -P "env" || true)"; - args="-S $(PATH="${!pathName}" type -P "$arg0" || true) $args"; - else - if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then - echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2; - exit 1; - else - newPath="$(PATH="${!pathName}" type -P "$arg0" || true)"; - fi; - fi; - else - if [[ -z $oldPath ]]; then - oldPath="/bin/sh"; - fi; - newPath="$(PATH="${!pathName}" type -P "$(basename "$oldPath")" || true)"; - args="$arg0 $args"; - fi; - newInterpreterLine="$newPath $args"; - newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}}; - if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then - if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then - echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""; - escapedInterpreterLine=${newInterpreterLine//\\/\\\\}; - timestamp=$(stat --printf "%y" "$f"); - sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f"; - touch --date "$timestamp" "$f"; - fi; - fi; - done < <(find "$@" -type f -perm -0100 -print0) -} -patchShebangsAuto () -{ - - if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then - if [[ "$output" != out && "$output" = "$outputDev" ]]; then - patchShebangs --build "$prefix"; - else - patchShebangs --host "$prefix"; - fi; - fi -} -prependToVar () -{ - - local -n nameref="$1"; - local useArray type; - if [ -n "$__structuredAttrs" ]; then - useArray=true; - else - useArray=false; - fi; - if type=$(declare -p "$1" 2> /dev/null); then - case "${type#* }" in - -A*) - echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2; - return 1 - ;; - -a*) - useArray=true - ;; - *) - useArray=false - ;; - esac; - fi; - shift; - if $useArray; then - nameref=("$@" ${nameref+"${nameref[@]}"}); - else - nameref="$* ${nameref-}"; - fi -} -printLines () -{ - - (( "$#" > 0 )) || return 0; - printf '%s\n' "$@" -} -printWords () -{ - - (( "$#" > 0 )) || return 0; - printf '%s ' "$@" -} -recordPropagatedDependencies () -{ - - declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated); - declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}"); - local propagatedInputsIndex; - for propagatedInputsIndex in "${!flatVars[@]}"; - do - local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]"; - local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}"; - [[ -n "${!propagatedInputsSlice}" ]] || continue; - mkdir -p "${!outputDev}/nix-support"; - printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile"; - done -} -runHook () -{ - - local hookName="$1"; - shift; - local hooksSlice="${hookName%Hook}Hooks[@]"; - local hook; - for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"}; - do - _logHook "$hookName" "$hook" "$@"; - _eval "$hook" "$@"; - done; - return 0 -} -runOneHook () -{ - - local hookName="$1"; - shift; - local hooksSlice="${hookName%Hook}Hooks[@]"; - local hook ret=1; - for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"}; - do - _logHook "$hookName" "$hook" "$@"; - if _eval "$hook" "$@"; then - ret=0; - break; - fi; - done; - return "$ret" -} -runPhase () -{ - - local curPhase="$*"; - if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then - return; - fi; - if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then - return; - fi; - if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then - return; - fi; - if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then - return; - fi; - if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then - return; - fi; - if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then - return; - fi; - if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then - return; - fi; - if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then - return; - fi; - if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then - return; - fi; - showPhaseHeader "$curPhase"; - dumpVars; - local startTime endTime; - startTime=$(date +"%s"); - eval "${!curPhase:-$curPhase}"; - endTime=$(date +"%s"); - showPhaseFooter "$curPhase" "$startTime" "$endTime"; - if [ "$curPhase" = unpackPhase ]; then - [ -n "${sourceRoot:-}" ] && chmod +x -- "${sourceRoot}"; - cd -- "${sourceRoot:-.}"; - fi -} -showPhaseFooter () -{ - - local phase="$1"; - local startTime="$2"; - local endTime="$3"; - local delta=$(( endTime - startTime )); - (( delta < 30 )) && return; - local H=$((delta/3600)); - local M=$((delta%3600/60)); - local S=$((delta%60)); - echo -n "$phase completed in "; - (( H > 0 )) && echo -n "$H hours "; - (( M > 0 )) && echo -n "$M minutes "; - echo "$S seconds" -} -showPhaseHeader () -{ - - local phase="$1"; - echo "Running phase: $phase"; - if [[ -z ${NIX_LOG_FD-} ]]; then - return; - fi; - printf "@nix { \"action\": \"setPhase\", \"phase\": \"%s\" }\n" "$phase" >&"$NIX_LOG_FD" -} -stripDirs () -{ - - local cmd="$1"; - local ranlibCmd="$2"; - local paths="$3"; - local stripFlags="$4"; - local excludeFlags=(); - local pathsNew=; - [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1; - [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1; - local pattern; - if [ -n "${stripExclude:-}" ]; then - for pattern in "${stripExclude[@]}"; - do - excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')'); - done; - fi; - local p; - for p in ${paths}; - do - if [ -e "$prefix/$p" ]; then - pathsNew="${pathsNew} $prefix/$p"; - fi; - done; - paths=${pathsNew}; - if [ -n "${paths}" ]; then - echo "stripping (with command $cmd and flags $stripFlags) in $paths"; - local striperr; - striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')"; - find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -printf '%D-%i,%p\0' | sort -t, -k1,1 -u -z | cut -d, -f2- -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?; - [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 ); - rm "$striperr"; - find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null; - fi -} -stripHash () -{ - - local strippedName casematchOpt=0; - strippedName="$(basename -- "$1")"; - shopt -q nocasematch && casematchOpt=1; - shopt -u nocasematch; - if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then - echo "${strippedName:33}"; - else - echo "$strippedName"; - fi; - if (( casematchOpt )); then - shopt -s nocasematch; - fi -} -substitute () -{ - - local input="$1"; - local output="$2"; - shift 2; - if [ ! -f "$input" ]; then - echo "substitute(): ERROR: file '$input' does not exist" 1>&2; - return 1; - fi; - local content; - consumeEntire content < "$input"; - if [ -e "$output" ]; then - chmod +w "$output"; - fi; - substituteStream content "file '$input'" "$@" > "$output" -} -substituteAll () -{ - - local input="$1"; - local output="$2"; - local -a args=(); - _allFlags; - substitute "$input" "$output" "${args[@]}" -} -substituteAllInPlace () -{ - - local fileName="$1"; - shift; - substituteAll "$fileName" "$fileName" "$@" -} -substituteAllStream () -{ - - local -a args=(); - _allFlags; - substituteStream "$1" "$2" "${args[@]}" -} -substituteInPlace () -{ - - local -a fileNames=(); - for arg in "$@"; - do - if [[ "$arg" = "--"* ]]; then - break; - fi; - fileNames+=("$arg"); - shift; - done; - for file in "${fileNames[@]}"; - do - substitute "$file" "$file" "$@"; - done -} -substituteStream () -{ - - local var=$1; - local description=$2; - shift 2; - while (( "$#" )); do - local replace_mode="$1"; - case "$1" in - --replace) - if ! "$_substituteStream_has_warned_replace_deprecation"; then - echo "substituteStream() in derivation $name: WARNING: '--replace' is deprecated, use --replace-{fail,warn,quiet}. ($description)" 1>&2; - _substituteStream_has_warned_replace_deprecation=true; - fi; - replace_mode='--replace-warn' - ;& - --replace-quiet | --replace-warn | --replace-fail) - pattern="$2"; - replacement="$3"; - shift 3; - local savedvar; - savedvar="${!var}"; - eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; - if [ "$pattern" != "$replacement" ]; then - if [ "${!var}" == "$savedvar" ]; then - if [ "$replace_mode" == --replace-warn ]; then - printf "substituteStream() in derivation $name: WARNING: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; - else - if [ "$replace_mode" == --replace-fail ]; then - printf "substituteStream() in derivation $name: ERROR: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; - return 1; - fi; - fi; - fi; - fi - ;; - --subst-var) - local varName="$2"; - shift 2; - if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then - echo "substituteStream() in derivation $name: ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2; - return 1; - fi; - if [ -z ${!varName+x} ]; then - echo "substituteStream() in derivation $name: ERROR: variable \$$varName is unset" 1>&2; - return 1; - fi; - pattern="@$varName@"; - replacement="${!varName}"; - eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' - ;; - --subst-var-by) - pattern="@$2@"; - replacement="$3"; - eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; - shift 3 - ;; - *) - echo "substituteStream() in derivation $name: ERROR: Invalid command line argument: $1" 1>&2; - return 1 - ;; - esac; - done; - printf "%s" "${!var}" -} -sysconfigdataHook () -{ - - if [ "$1" = '/nix/store/wfbjq35kxs6x83c3ncpfxdyl5gbhdx4h-python3-3.12.6' ]; then - export _PYTHON_HOST_PLATFORM='linux-x86_64'; - export _PYTHON_SYSCONFIGDATA_NAME='_sysconfigdata__linux_x86_64-linux-gnu'; - fi -} -toPythonPath () -{ - - local paths="$1"; - local result=; - for i in $paths; - do - p="$i/lib/python3.12/site-packages"; - result="${result}${result:+:}$p"; - done; - echo $result -} -unpackFile () -{ - - curSrc="$1"; - echo "unpacking source archive $curSrc"; - if ! runOneHook unpackCmd "$curSrc"; then - echo "do not know how to unpack source archive $curSrc"; - exit 1; - fi -} -unpackPhase () -{ - - runHook preUnpack; - if [ -z "${srcs:-}" ]; then - if [ -z "${src:-}" ]; then - echo 'variable $src or $srcs should point to the source'; - exit 1; - fi; - srcs="$src"; - fi; - local -a srcsArray; - concatTo srcsArray srcs; - local dirsBefore=""; - for i in *; - do - if [ -d "$i" ]; then - dirsBefore="$dirsBefore $i "; - fi; - done; - for i in "${srcsArray[@]}"; - do - unpackFile "$i"; - done; - : "${sourceRoot=}"; - if [ -n "${setSourceRoot:-}" ]; then - runOneHook setSourceRoot; - else - if [ -z "$sourceRoot" ]; then - for i in *; - do - if [ -d "$i" ]; then - case $dirsBefore in - *\ $i\ *) - - ;; - *) - if [ -n "$sourceRoot" ]; then - echo "unpacker produced multiple directories"; - exit 1; - fi; - sourceRoot="$i" - ;; - esac; - fi; - done; - fi; - fi; - if [ -z "$sourceRoot" ]; then - echo "unpacker appears to have produced no directories"; - exit 1; - fi; - echo "source root is $sourceRoot"; - if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then - chmod -R u+w -- "$sourceRoot"; - fi; - runHook postUnpack -} -updateAutotoolsGnuConfigScriptsPhase () -{ - - if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then - return; - fi; - for script in config.sub config.guess; - do - for f in $(find . -type f -name "$script"); - do - echo "Updating Autotools / GNU config script to a newer upstream version: $f"; - cp -f "/nix/store/ga0gqnv6qyzvg08jqw0pc2fkyzlv1qrv-gnu-config-2024-01-01/$script" "$f"; - done; - done -} -updateSourceDateEpoch () -{ - - local path="$1"; - [[ $path == -* ]] && path="./$path"; - local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ %p\0' | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1)); - local time="${res[0]//\.[0-9]*/}"; - local newestFile="${res[1]}"; - if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then - echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"; - export SOURCE_DATE_EPOCH="$time"; - local now="$(date +%s)"; - if [ "$time" -gt $((now - 60)) ]; then - echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"; - fi; - fi -} -PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}" -XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}" -export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)" -export TMP="$NIX_BUILD_TOP" -export TMPDIR="$NIX_BUILD_TOP" -export TEMP="$NIX_BUILD_TOP" -export TEMPDIR="$NIX_BUILD_TOP" -eval "${shellHook:-}" diff --git a/nix/download/.env b/nix/download/.env deleted file mode 100644 index 6b75134..0000000 --- a/nix/download/.env +++ /dev/null @@ -1 +0,0 @@ -CONFIG_FILE = "/home/jawz/.config/jawz/config.yaml" diff --git a/nix/download/.envrc b/nix/download/.envrc deleted file mode 100644 index 1d953f4..0000000 --- a/nix/download/.envrc +++ /dev/null @@ -1 +0,0 @@ -use nix diff --git a/nix/download/argparser.py b/nix/download/argparser.py deleted file mode 100644 index 7bee860..0000000 --- a/nix/download/argparser.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python3 -"""Setup the argparser""" -import argparse - -scrapper_types = ( - "push", - "main", - "instagram", - "kemono", - "comic", - "manga", - "webcomic", -) -# Define types of instagram stories -instagram_types = ["posts", "reels", "stories", "highlights", "avatar"] - - -def argparser(users: list) -> argparse.Namespace: - """Returns an argparser to evaluate user input""" - # ARG PARSER - parser = argparse.ArgumentParser( - prog="Downloader", - description="Download images and galleries from a wide array of websites" - " either by using links or chosing from user define lists." - " This program also takes care of archiving tasks," - " that keep the run time fast and prevents downloading duplicates.", - ) - # Chose the type of scrapper - parser.add_argument( - choices=scrapper_types, - nargs="?", - dest="scrapper", - help="Select a scrapper.", - ) - # Parse user list - parser.add_argument( - "-u", - "--user", - choices=users, - dest="user", - help="Selects the personal user list to process. Defaults to everyone", - default="everyone", - type=str, - ) - # Parse individual links - parser.add_argument( - "-i", - "--input", - nargs="*", - dest="link", - action="append", - help="Download the provided links", - type=str, - ) - # Set the print list flag - parser.add_argument( - "-l", - "--list", - dest="flag_list", - action="store_true", - help="Prints a list of all the added links and prompts for a choice", - ) - # Set the use archiver flag - parser.add_argument( - "-a", - "--no-archive", - dest="flag_archive", - action="store_false", - help="Disables the archiver flag", - ) - # Set the skip flag - parser.add_argument( - "-s", - "--no_skip", - dest="flag_skip", - action="store_false", - help="Disables the skip function, downloads the entire gallery", - ) - parser.add_argument( - "-v", - "--verbose", - dest="flag_verbose", - action="store_true", - help="Prints the generated commands instead of running them", - ) - parser.add_argument( - "-t", - "--type-post", - choices=instagram_types, - nargs="*", - dest="post_type", - help="Filters posts on instagram by type", - default=instagram_types, - type=str, - ) - return parser.parse_args() diff --git a/nix/download/classes/__pycache__/gallery.cpython-311.pyc b/nix/download/classes/__pycache__/gallery.cpython-311.pyc deleted file mode 100644 index 433d06be87dd6cad4a82e794ba95911326dc8008..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3130 zcmZ3^%ge>Uz`ziv#Ff^{#=!6x#DQTJDC2Vs0|Uc!h7^Vr#vF!R#wbQc5SuB7DVI5l z8O&zRVajERVga*Ra+q>iqgcUg)*Pl>wkS461||k~h7`6Ih7|T?ObiUGnV=>!M6suE z1T$!Iz61$qGTvedElw@cWW2@fYj!tEWVoYI(VoKpoVQyiGVrF7UWl3RK#>l|1nh~m! zA%!)KDTOVSC51heHH9&SDUB_KqlGn!Erl}`B*WFh62+dv6wIK>bBoPY z5Phs*2?hoTj}6Xa2xib^_6xbipviuVJ+UY`BeN{^7DsV*WGoXouJTP!K5 z#U&tiamg)?{DKmYRPinL5y>IE2zB15g(tKmst`Y zUnKwyEj^eBD6JKnGcYhTFx-$;>|p8Pxgjgx!P3KfLsGhfrH2!Zg38IrfmC+zbntuz zdHf~Fp>DTWN{dsAZgFH5$0z6KW+o@YgO7oM0Te(W{^uNKP|B@gDk>}i=>lnIU|?9r zz`(E?%4T4wWiA1!h4O2dQy3+oY*26`*r^#ZoowDO|`Q zSA(P$HTFO@LtT!X?)Z^)6m!(Dr*PM>A=H*g!)#_?$l`;sYuHiEW@G?`Sv)^XK7}Wk zL6f&i+C4QdwJ5P9wOAoh0b0f=6qgib=B4Z1Vg={bDjrz*p_`Ifbc-V;u_Q4mu{gDg zRW~QIxTFZ=@muWBBBe?g%Fs>8QP9;b&Ph!zP^jWi(A5PMYYJ5&AQrSZ(uEd*3cnZ? zs#p|sGZp+a1&ToNRRl_^MS=_r47ZqzONwrBr(_nTCYR(FWu_Jv34n!Dl8SG!g6uE8 z#R|5i2;}u5UQi?nfe4UKi$GcF7HdjsQfYdTFaraFCP$G7ND`DXi=;pXu|w*s;#-_B zJ1UE0K@zNmrKzQK=u}&WCRtX54eRt zFmP~sGu{=`z9^=9MNGHD{jP-UjPwQRSLF0o)LoIYyC`9QMZ&(r^RBqejPM2FS7dcp zWL=T9yeMvUMck^x{tWUUZcBY8#6_@b1_6)BU8BBobFOfQI-o?z;5eIR7H zmU)HC8n2c7Yxpk+SzZvb>|npa!N0&|iSGqr%Lyh^Y$w=mD7wf25nd6pCh~%?-34LI z8JQP^H6dt+(?t$Du&x~}dw4Dg`&9Ya2QGr~K)i7kiYqc6i)Rq;f{T0lh$>^uaRKyNSprAyf$plHPS_}*f#UM)*6d;L@ zyQnk|p6-NU=?+Oy7o-D}yc-zqa&ULJ^!UtBzsR9Q_*-1@@wxdar8yurPkek~X<`mUrbrCrGLY|Xu_Wc^=M-sz_&N*>3@aJH#(`Z| z1S*!n1c*`G2yQ<#FhJl3CU#c&4-BY;5QDDa3YQInE8W+)A4vVcAOTV$!79HX1kB!1 z0;VnmK)7HI5@Eu~s=UDD0|O(gGEM^GI*@xnUgd!{gY-ack|MBwIMYh=l1no4^NPVm z22vpejt!8`B14dGK`{^Z<}VH#NGRDAnJ_RgfMT|IA_D`%2WCb_#s>_t7f{g+2FVMk m=mvxK1ypo{LHYtJ!qoMFO_fpk0|O@U5hV5nM4-un{SE-V$h~m@ diff --git a/nix/download/classes/__pycache__/user.cpython-311.pyc b/nix/download/classes/__pycache__/user.cpython-311.pyc deleted file mode 100644 index 72d48537cb7e14983a23d5178191cf374bd0ea1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8094 zcmZ3^%ge>Uz`$T+#Fh4spMl{qhy%kcP{!v51_p-d3@Hpz3@MB$OgW5Ej46yM%sEWC z%u&pYATgF4mR!~-Rxq12hb@;qiXF^m%VEpqh~faV*>l)(IioniY>phZT&^fCFq<=n zEtflrn~{Nu!JQ$6tA!zjdl?f0!)hj|?F>;oDNMl(nmko5E~#mmd8rB|8L0}T#i>OK z$vKI|#R?_)3I+KEr8$WusS1gCDGJ4@C8Y&mMJf5^c{%xsDGI51Wtm0!dAX^1B`-n7 z`e`!WVlU1pO-sv3)nvTI5|CJup~-kl6r?ylIX^EgGd;d6u_!Y!DJQiUBvF=_lbMoO zk{Vx9o>@|oS`?p?nU}4}c#Eqbv8Xr|#^X-TNlna)PfkqE02#~dFp^VHH zOyR{a8_5qTd>FDwVUxm-S5^S8tRP4>MQ9FdCqq03%#|q&!3>(hez#abB|-5mw)C9* zq{N(CEP08!skc~*b5c_alHm!Afq?;w*bz9Sqq|57*ZHflS>Iw0_$YTf+x-z#@P&r$U-%HGEAR$srRL-pfQmVNzsw5%VEy9cqRfJlVtrUis1GhOQ;YRMp{7?*`HRaY zB{R7sIX}0+u1XP9aOlOyXXa&=#K-H|>CxkHok!*pkIam)1wj{iG_LSytW{Z2vZi`R@(znD`Yso>T(4-k zeqct?{}~jrC@}`|KRCv8z@;T}JRubwj5Q3XaRCZbzao%EO{QB+MX9&gic=Gdk~3B^ z-eRmM21Tesku(DX!!Hh-oW$IultjBKd0ZZcDv$zsTZn;yp@Cs7(;ChVYC9A!YS>)S zuxVf@l4W3ExW$?bD)Mi!=42L^6yM@ZNi0cBN-Rz-uHw)uF3ia+Nj0wGjIS(7$vbvuw4;R?_lZSydf$%C3=DQ6;aI&mL9GTY$z!Poc5lI%U+PPxgck= zBV|wabvwUHc77M_0I=H~e5+yf*q8?Ocd^W&RsUugG$kjP&iN%OoslqEeP|k&6)JoNbAy%c9 z5!rO)2Eqc6dte&jbP7`n(;8;fJk7|^ql#=w3Q}WW0jQjS>xMB<-BB!6!VQyQK(4-7 zI~lS-H3L`@-OdtF>IKU%Fo2sGY%Ls}3|X8|A%+D+gaE3UE)21XwM@un)F3sH7J!@L zFwH7#OOwAf;O}I4t6kf&rwDn_=1*iaL0tbANCCF=5 zAeT|%H9L?2P_M0ES;Mu#a1HNu4cki^wih+*uV~m`P_c*Bj76Ft3$+*+82mJOia?FG zA_I_!J}AgpbF)D$AGXY5P)HVm^3^TY)S{yNB1rY52T}=+9M+Qj(&P-V7c^NQRS_pF z@GEaIr6k>A&M7V_29*Q}3a~m!I36>asw8kmAjnTzkecc#hwua!Sc!a*L+=WQ-USZ5 z4{Qula#tiZuS@D(lGM8>X>di--~$6Ar#B;n?C`w7BXEUBW=7-{9`)-yx|eu#H>4a0 zxxk})k;m%_kJkk-`oP8@AaaFYegXRxevRw=`j`0iFY+5+;Wq>s;>UQGhrh@3f|%n0 zlOvWFd3>+%_+H@g{mRB5EO|lF299>5?8(@lyDN8R{+|4cLVj0-{6M-D!9<7C4IY6W zj|o9NKG%8VF7e1+LP*opBG`Y-fED# ze#rF!XmDW-^D<@zhSeaQ;GAvBP|IAyjJ>3-VM<}C0(D7I+U$%BDXbufS{8ytgBg?= z3>k`9%9$#dBN@sW85trO7#Scknru}{js*p&c`3yTi3%X!C}if9Ax7c{4|+wvE&z|=7AIGE!Og)%#u`SS_KDD z5va_%#g+&zWWXs^0iII16TvpegRKw%r%)sjM^MU~3T}Nq?m%h0GF#q|}`JymZh=o8B#U=m=PmE~q}_g>*1t^a>J-N-B#$ zJ+&fjaB0s{Bo8XS6+nb9hyWD`noQur8=My)l`FLWAQTTx@ZgRVBqNA}GXkcB8z?{Q z0_TUX91J{sJ(d$97qDF9R=vWl`hkI+Q~L&w0IdIcRn=;T$wgI%E2<6`c^t3sI9`CE zyS)58kr%|(SBPBX)w{y0_kn>GS!cw8l8Zb#S9o+Tzz|r&gz5z@7kM?W@M?ZwU`AFS zy+Y+8kNy=N{R=Sk0O5)SAs2bHuJCAGfFW?niBj!@(le;g`>Y1eBQ*>Qz{MXrf!c&& zWGDgYfhwwDK#V^jH{wAXm6RKH^3^hzH46)+1%ry)PKxqW(8w6FujIN_c0+jPK*{gJY6Y~<&Qxy_(a=>XG z+=K*`qTqqxWN<4@p|~_j7bI2;Zj9VwEGhz}pdxn$1_qQU0JVs~txHgIWjX_KQ4q`k zX!XM( zLTW3RH>6+SwY$h`cZJsuRA;y{9#Fe0tGHD8f|}I@HLD$N7nPi^C^=u0b-5zz(%}cH zm0ZD1Cm0E;m|Ph_H4{t(Vhk=4S~p=+{FQ@&Q(yw$MGpBZ9P$@9YBkMaVSi#(cFcr-775y(jpCE!|Zlf0uW^Fdh_M@9C7DvXYb?4U5u%f?=}%>n0I zwLqB}lB2+4*a&DYMpyNfje$pOLdr#M=_}mQ*SQrhaVuWrR=&cmyrA>~ zx6TD_9Z*ln1 zXkH;c{uWn!d~SY9X-;Z<{4JjN_`=e}9HFrX4vf~+bZ7*Gi{ zW>&QY%pVw-S=Ck;gQ*QBU<#e!;%3$Uz<^3fak6TCU_d3rxLHkSB!g6%E=U1WI0 None: - self.archive: bool = True - self.skip_arg: str = "" - self.link: str = "" - self.dest: str = "" - self.list: str = "" - self.opt_args: str = "" - self.command: str = "" - - def generate_command(self, user: User = User(1), is_comic: bool = False) -> None: - """Generates a command string.""" - if is_comic: - configs = load_config_variables() - directory = quote(configs["comic"]["download-dir"]) - database = quote(configs["comic"]["database"]) - queue = quote(configs["comic"][f"{self.list}-list"]) if self.list else "" - else: - directory = quote(str(user.directories[self.dest])) - database = quote(str(user.dbs["gallery"])) - queue = quote(str(user.lists[self.list])) if self.list else "" - - command = f"gallery-dl --sleep {str(user.sleep)}" - command += self.skip_arg if self.skip_arg else "" - command += f" --dest {directory}" if self.dest or is_comic else "" - command += f" --download-archive {database}" if self.archive else "" - command += self.opt_args if self.opt_args else "" - - if self.link and not self.list: - command += f" {quote(self.link)}" - if self.list and not self.link: - command += f" -i {queue}" - - LOG.debug(command) - self.command = command - - def run_command(self, verbose: bool): - run(self.command, verbose) diff --git a/nix/download/classes/user.py b/nix/download/classes/user.py deleted file mode 100644 index 6dd5c30..0000000 --- a/nix/download/classes/user.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -"""Define the user class to populate and setup the download environment""" -import re -from random import shuffle -from pathlib import Path -from functions import load_config_variables -from functions import validate_x_link -from functions import parse_link -from functions import clean_cache -from functions import LOG - - -class User: - """Populate the directory for each user""" - - # pylint: disable=too-many-instance-attributes - def __init__(self, index) -> None: - config = load_config_variables() - self.config = config["users"][index] | config["global"] - self.name = self.config["name"] - self.sleep = self.config["sleep"] - - # Directories - self.directories = { - str(key).replace("-dir", ""): Path(self.config[f"{key}"]) - for key in filter(lambda x: re.search("-dir", x), self.config.keys()) - } - self.directories["cache"] = self.directories["cache"] / self.name - self.directories["lists"] = self.directories["lists"] / self.name - - # Files - self.dbs = { - "gallery": self.directories["databases"] / f"{self.name}.sqlite3", - "media": self.directories["databases"] / f"{self.name}_ytdl.txt", - } - - # Lists - self.lists = { - "master": self.directories["lists"] / "watch.txt", - "push": self.directories["lists"] / "instant.txt", - "instagram": self.directories["cache"] / "instagram.txt", - "kemono": self.directories["cache"] / "kemono.txt", - "main": self.directories["cache"] / "main.txt", - } - - def _create_directories(self) -> None: - """Create user directories if they don't exist""" - clean_cache(self.directories["cache"]) - - # Create directories - for directory in self.directories.keys(): - self.directories[directory].mkdir(parents=True, exist_ok=True) - - # Check for the existence of core files - if not self.directories["lists"].is_dir(): - LOG.error("Lists directory for user %s doesn't exist", self.name) - - # dbs stands for databases, the archives. - for db in filter(lambda x: not self.dbs[x].is_file(), self.dbs.keys()): - self.dbs[db].touch() - - for lst in filter(lambda x: not self.lists[x].is_file(), ["master", "push"]): - self.lists[lst].touch() - - def append_list(self, name: str, line: str) -> None: - """Appends a line into the given list""" - with open(self.lists[name], "a+", encoding="utf-8") as a_file: - a_file.write(line + "\n") - - def _append_cache_list(self, line) -> None: - """Writes the input line into it's respective list, - depending on what website it belongs to.""" - - if re.search("x", line): - self.append_list("main", validate_x_link(line)) - elif re.search(r"kemono\.party", line): - self.append_list("kemono", line) - elif re.search("instagram", line): - self.append_list("instagram", line) - else: - self.append_list("main", line) - - def list_manager(self) -> None: - """Manage all the user list and create sub-lists""" - self._create_directories() # Call the function to create necesary cache dirs - with open(self.lists["master"], "r", encoding="utf-8") as r_file: - master_content = list(map(lambda x: x.rstrip(), r_file)) - - # Create temporary list files segmented per scrapper - shuffle(master_content) - for line in master_content: - self._append_cache_list(line) - - def save_link(self, link: str) -> None: - """Checks the master list against a new link - if unmatched, appends it to the end of the list""" - with open(self.lists["master"], "r", encoding="utf-8") as r_file: - links = r_file.read().lower() - - if parse_link(link).lower() in links: - LOG.info("Gallery repeated, not saving") - return - - LOG.info("New gallery, saving") - self.append_list("master", parse_link(link)) diff --git a/nix/download/download.py b/nix/download/download.py deleted file mode 100644 index 824e96f..0000000 --- a/nix/download/download.py +++ /dev/null @@ -1,295 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Rewriting of the download manager script -with the intention to make it -more modular with the use of flags -in order to avoid unnecesary modifications -to the cofig files. -Also following in line more posix and python rules. -""" - -import re -import yaml -from typing import Dict -from functions import LOG -from functions import run -from functions import quote -from functions import list_lines -from functions import load_config_variables -from functions import parse_link -from argparser import argparser -from classes.user import User -from classes.gallery import Gallery - -# GLOBAL VARIABLE SECTION -CONFIGS = load_config_variables() -# Enable a default "everyone" flag for when running stuff like download gallery -USERS = ["everyone"] + [user["name"] for user in CONFIGS["users"]] -ARGS = argparser(USERS) - - -class Video: - """Just a simple class to unify the Video parameters into a single one.""" - - def __init__(self) -> None: - self.use_archive: bool = True - self.link: str = "" - self.dest: str = "" - self.database: str = "" - - -def get_index(name: str) -> int: - """Find the index in the config file""" - return next((i for i, d in enumerate(CONFIGS["users"]) if d["name"] == name), -1) - - -def parse_gallery(gdl_list: str, user: User) -> None: - """Processes the gallery-dl command based on the selected gallery""" - gallery = Gallery() - gallery.archive = ARGS.flag_archive - gallery.skip_arg = " -o skip=true" if not ARGS.flag_skip else "" - gallery.dest = "download" - gallery.list = gdl_list - gallery.opt_args = parse_instagram(gdl_list) - - gallery.generate_command(user) - gallery.run_command(ARGS.flag_verbose) - - -def parse_instagram(link: str) -> str: - """Fix instagram links""" - if "instagram" not in link: - return "" - if isinstance(ARGS.post_type, list): - return f" -o include={quote(','.join(ARGS.post_type))}" - return f" -o include={quote(ARGS.post_type)}" - - -def video_command(video: Video) -> str: - """Filters and processes the required command to download videos""" - command = "yt-dlp" - rgx_yt = re.compile(r"(https:\/\/youtube|https:\/\/www.youtube|https:\/\/youtu.be)") - rgx_music = re.compile(r"(https:\/\/music.youtube.*)") - - if re.search(r"chaturbate", video.link): - return f"chat-dl {video.link}" - - if rgx_yt.search(video.link): - command += " --embed-subs --embed-thumbnail" - command += " --embed-metadata --embed-chapters" - command += f" -o {quote(video.dest + '/%(title)s.%(ext)s')}" - - elif rgx_music.search(video.link): - command += f" --download-archive {video.database}" if video.use_archive else "" - command += " --no-playlist --newline -x" - command += " --audio-format best --add-metadata --audio-quality 0 -o" - command += f" {quote(video.dest + '/%(title)s.%(ext)s')}" - - else: # Any other video link, just do it generic - command += f" -f mp4 -o {quote(video.dest + '/%(title)s.%(ext)s')}" - - LOG.info("%s %s", command, video.link) - return f"{command} {quote(video.link)}" - - -def comic_manager(skip_arg: str, category: str) -> None: - """Process the information to download manga""" - re_cat = "manga|webtoon" if category == "manga" else "readcomiconline" - with open(CONFIGS["comic"]["comic-list"], "r", encoding="utf-8") as r_file: - links = list(filter(lambda x: re.search(re_cat, x), r_file)) - - for link in links: - gallery = Gallery() - gallery.archive = ARGS.flag_archive - gallery.skip_arg = skip_arg - gallery.link = link - gallery.generate_command(is_comic=True) - gallery.run_command(ARGS.flag_verbose) - - -def print_webcomics(webcomics: Dict[str, Dict]) -> int: - """Prints a list of webcomics, and returns an index.""" - for index, entry in enumerate(webcomics["webcomics"]): - print(list_lines(index, entry["name"])) - - return int(input("Select a webcomic: ")) - - -def webcomic_manager(): - """Process the information to download webcomics""" - with open(CONFIGS["comic"]["webcomic-list"], "r", encoding="utf-8") as r_file: - webcomics = yaml.safe_load(r_file) - - usr_input = print_webcomics(webcomics) - - # Determines where the webcomic will be downloaded - rating = webcomics["webcomics"][usr_input]["type"] - dest = webcomics["global"][f"{rating}_directory"] - name = webcomics["webcomics"][usr_input]["name"] - link = webcomics["webcomics"][usr_input]["url"] - nxt_code = webcomics["webcomics"][usr_input]["next_code"] - img_code = webcomics["webcomics"][usr_input]["image_code"] - - LOG.info("The webcomic is %s", dest) - - command = f"cd {quote(dest)} && webcomix custom" - command += f" {quote(name)}" - command += " --start-url" - command += f" {quote(link)}" - command += f" --next-page-xpath={quote(nxt_code)}" - command += f" --image-xpath={quote(img_code)}" - command += " -y --cbz" - - run(command, ARGS.flag_verbose) - - -def save_comic(link: str) -> None: - """Add comic/manga link to the list""" - list_comic = CONFIGS["comic"]["comic-list"] - with open(list_comic, "r", encoding="utf-8") as r_file: - links = r_file.read().lower() - if parse_link(link).lower() in links: - LOG.info("Graphic novel repeated, not saving") - return - LOG.info("New graphic novel, saving") - - with open(list_comic, "a", encoding="utf-8") as w_file: - w_file.write(link + "\n") - - -def push_manager(user: User): - """Filters out the URL to use the appropiate downloader""" - # Creates an array which will store any links that should use youtube-dl - rgx_gallery = re.compile( - r"(x\.com\/\w+((?=.*media)|(?!.*status)))" - r"|(men\.wikifeet)" - r"|(furaffinity\.net\/user\/)" - r"|((deviantart\.com\/\w+(?!.*\/art\/)))" - r"|(furaffinity\.net\/gallery\/)" - r"|(furaffinity\.net\/scraps\/)" - r"|(furaffinity\.net\/favorites\/)" - r"|(instagram.com(?!\/p\/)\/\w+)" - r"|(e621\.net((?=\/post\/)|(?!\/posts\/)))" - r"|(flickr\.com\/photos\/\w+\/(?!\d+))" - r"|(tumblr\.com(?!\/post\/))" - r"|(kemono\.party\/(fanbox|gumroad|patreon)(?!\/user\/\d+\/post))" - r"|(blogspot\.com(?!\/))" - r"|(rule34\.paheal\.net\/post\/(?!view))" - r"|(rule34\.xxx\/index\.php\?page\=post&s=(?!view))" - r"|(pixiv\.net\/(en\/)?((?=users)|(?!artwork)))" - r"|(fanbox\.cc\/@\w+(?!.*posts\/\d+))" - r"|(reddit\.com\/(user|u))" - r"|(baraag\.net\/((@\w+)|(?!\/\d+)))" - r"|(pinterest\.com\/(?!pin\/\d+))" - r"|(redgifs\.com\/(users|u|(?!watch)))" - r"|(bsky\.app\/profile\/(?!.*\/post\/))" - ) - rgx_video = re.compile("youtu.be|youtube|pornhub|xtube|xvideos|chaturbate") - rgx_comic = re.compile("readcomiconline|mangahere|mangadex|webtoons") - - with open(user.lists["push"], "r", encoding="utf-8") as r_file: - links = list(map(lambda x: x.rstrip(), r_file)) - links_galleries = filter(rgx_gallery.search, links) - links_videos = filter(rgx_video.search, links) - links_comics = filter(rgx_comic.search, links) - links_other = filter( - lambda x: (not rgx_video.search(x)) - and (not rgx_gallery.search(x)) - and (not rgx_comic.search(x)), - links, - ) - - for link in links_galleries: - gallery = Gallery() - gallery.archive = ARGS.flag_archive - gallery.skip_arg = " -o skip=true" if not ARGS.flag_skip else "" - gallery.link = parse_link(link) - gallery.dest = "download" - gallery.opt_args = parse_instagram(link) - gallery.generate_command(user) - gallery.run_command(ARGS.flag_verbose) - user.save_link(link) - - for link in links_comics: - if ARGS.flag_skip and re.search(r"readcomiconline", link): - skip_arg = " --chapter-range 1" - elif ARGS.flag_skip and re.search(r"mangahere|webtoons", link): - skip_arg = " --chapter-range 1-5" - else: - skip_arg = "" - - gallery = Gallery() - gallery.archive = ARGS.flag_archive - gallery.skip_arg = skip_arg - gallery.link = link - gallery.generate_command(is_comic=True) - gallery.run_command(ARGS.flag_verbose) - save_comic(link) - - for link in links_videos: - video = Video() - video.use_archive = ARGS.flag_archive - video.link = link - video.dest = f"{user.directories['media']}" - video.database = quote(f"{user.dbs['media']}") - run(video_command(video), ARGS.flag_verbose) - - for link in links_other: - LOG.info("Other type of download %s", link) - gallery = Gallery() - gallery.archive = False - gallery.skip_arg = " -o directory='[]'" - gallery.link = link - gallery.dest = "push" - gallery.generate_command(user) - gallery.run_command(ARGS.flag_verbose) - - # Flush the push list, cleans all the contents - with open(user.lists["push"], "w", encoding="utf-8") as w_file: - w_file.close() - - -def scrapper_manager(user: User) -> None: - """Analyze the user arguments and call in functions""" - user.list_manager() - if re.search(r"main|instagram|kemono", ARGS.scrapper): - skip_arg = "" if ARGS.flag_skip else " -o skip=true" - parse_gallery(ARGS.scrapper, user) - elif ARGS.scrapper in "push": - push_manager(user) - elif re.search("^comic|manga", ARGS.scrapper): - skip_arg = " --chapter-range 1" if ARGS.flag_skip else "" - skip_arg += "-5" if ARGS.scrapper in "manga" else "" - comic_manager(skip_arg, ARGS.scrapper) - elif re.search("webcomic", ARGS.scrapper): - webcomic_manager() - - -def scrap_everyone() -> None: - """Iterates over every user of my scrapper""" - for current_user in CONFIGS["users"]: - user = User(get_index(current_user["name"])) - LOG.info("Scrapping %s for %s", ARGS.scrapper, current_user["name"]) - scrapper_manager(user) - - -def main(): - """Main module to decide what to do based on the parsed arguments""" - if ARGS.scrapper: - rgx_shared = re.compile("push|main|instagram|kemono") - if (ARGS.user in "everyone") and (rgx_shared.search(ARGS.scrapper)): - scrap_everyone() - else: - scrapper_manager(User(get_index(ARGS.user))) - elif ARGS.link: - is_admin = re.search(r"everyone|jawz", ARGS.user) - user = User(get_index("jawz" if is_admin else ARGS.user)) - for arg_link in ARGS.link[0]: - user.append_list("push", parse_link(arg_link)) - - push_manager(user) - - -if __name__ == "__main__": - main() diff --git a/nix/download/functions.py b/nix/download/functions.py deleted file mode 100644 index 47d476a..0000000 --- a/nix/download/functions.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -"""Personal functions to aid on multiple scripts""" -import sys -import fileinput -import re -import os -import logging -from pathlib import Path -import yaml - -VERBOSE_G = False - -LOG = logging.getLogger() -HANDLER = logging.StreamHandler() -FORMATTER = logging.Formatter( - "[%(filename)s][%(levelname)s] %(funcName)s '%(message)s'" -) -HANDLER.setFormatter(FORMATTER) -LOG.addHandler(HANDLER) -LOG.setLevel(logging.INFO) - - -def validate_x_link(line: str) -> str: - """returns a fixed link, which ends with /media""" - # if url contains /media at the end just write the line - if re.search(r"\/media$", line): - return line - # if does not contain /media at the end then add /media - return f"{line}/media" - - -def parse_link(link: str) -> str: - """Fixes links""" - if not re.search(r"(x\.com\/\w+(\/)?(?!.*status))", link): - LOG.debug("No modifications needed for the link %s", link) - return link - # if url contains /media at the end just write the line - fixed_link = validate_x_link(link) - LOG.debug("Processed link %s", fixed_link) - return fixed_link - - -def load_config_variables(): - """Loads all the variables from the config file""" - config_file = Path("~/.config/jawz/config.yaml") - with open(config_file.expanduser(), encoding="utf-8") as open_file: - return yaml.safe_load(open_file) - - -def clean_cache(directory: Path): - """Recursively deletes all the content of a directory, - including the directory itself.""" - if not directory.is_dir(): - return - for file in filter(lambda x: x.is_file(), directory.iterdir()): - file.unlink() - for dir in filter(lambda x: x.is_dir(), directory.iterdir()): - dir.rmdir() - directory.rmdir() - - -def run(command: str, verbose: bool): - """Run command in a subprocess""" - # pylint: disable=subprocess-run-check - # This toggle allows for a really wasy debug when using -v - if verbose: - print(command) - else: - os.system(command) - - -def list_lines(i: int, line: str) -> str: - """Create a numbered list""" - return f"{i}) {line}" - - -def quote(line: str) -> str: - """Quote the line""" - return f'"{line}"' - - -def sort_txt_file(file_path: Path): - """Sort every line alphabetically - remove duplicated and empty lines""" - file = str(file_path.resolve()) - run(f"sort -u {quote(file)} -o {quote(file)}", VERBOSE_G) - run(f"sed -i '/^$/d' {quote(file)}", VERBOSE_G) - run(f'sed -i -e "s,http:,https:," {quote(file)}', VERBOSE_G) - # fix this using strip on python - # line.strip("/") - run(f'sed -i -e "s,/$,," {quote(file)}', VERBOSE_G) # trailing / - - -def randomize_txt_file(file_path: Path): - """Randomize the order of the - lines of the txt file""" - file = str(file_path.resolve()) - run(f"sort -R {quote(file)} -o {quote(file)}", VERBOSE_G) - - -def parse_list(file): - """Replace http with https and remove trailing /""" - for line in fileinput.input(file, inplace=True): - sys.stdout.write(str(line).replace("http://", "https://")) - with open(file, "r+", encoding="utf-8") as open_file: - f_content = open_file.read() - f_content = re.compile(r"\/$", 0).sub(r"\/$", "") - open_file.seek(0) - open_file.truncate() - print(f_content) - sort_txt_file(file) diff --git a/nix/download/setup.cfg b/nix/download/setup.cfg deleted file mode 100644 index 9135acf..0000000 --- a/nix/download/setup.cfg +++ /dev/null @@ -1,16 +0,0 @@ -[metadata] -name = download -version = 1.5 - -[options] -py_modules = - download - functions - argparser - classes.gallery - classes.user - -[options.entry_points] -console_scripts = - download = download:main - diff --git a/nix/download/setup.py b/nix/download/setup.py deleted file mode 100644 index 6068493..0000000 --- a/nix/download/setup.py +++ /dev/null @@ -1,3 +0,0 @@ -from setuptools import setup - -setup() diff --git a/nix/download/shell.nix b/nix/download/shell.nix deleted file mode 100644 index 65c1346..0000000 --- a/nix/download/shell.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - pkgs ? import { }, -}: - -with pkgs; - -mkShell { - packages = [ - (python3.withPackages ( - ps: with ps; [ - setuptools - pyyaml - types-pyyaml - ] - )) - yt-dlp - gallery-dl - ffmpeg - # (buildPythonApplication rec { - # pname = "webcomix"; - # version = "3.9.0"; - # src = fetchFromGitHub { - # inherit pname version; - # owner = "J-CPelletier"; - # repo = pname; - # rev = "v${version}"; - # sha256 = "sha256-hCnic8Rd81qY1R1XMrSME5ntYTSvZu4/ANp03nCmLKU="; - # }; - # doCheck = false; - # propagatedBuildInputs = - # [ click scrapy scrapy-splash scrapy-fake-useragent tqdm ]; - # }) - ]; - buildInputs = [ - - ]; -} diff --git a/nix/ffmpeg4discord.py b/nix/ffmpeg4discord.py deleted file mode 100644 index c1e6f08..0000000 --- a/nix/ffmpeg4discord.py +++ /dev/null @@ -1,138 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i python3 -p python3 - -# Imports -import os -import math - - -# Function for calculating the appropriate bitrate to use during conversion -def get_bitrate(duration, filesize, audio_br): - br = math.floor(filesize / duration - audio_br) - return br, br * 0.50, br * 1.45 - - -def encode(ffmpeg_string, output_name, fs): - os.system(ffmpeg_string) - end_size = ( - os.path.getsize( - "/dev/shm/ffmpeg/out/{output_name}".format(output_name=output_name) - ) - * 0.00000095367432 - ) - if end_size < fs: - print( - ffmpeg_string.replace("\t", "") - + "\nThe FFMPEG string above has yielded a file whose size is " - + str(end_size) - + "MB.\n{output_name} is ready for Discord.\n".format( - output_name=output_name - ) - ) - return False - else: - print( - ffmpeg_string.replace("\t", "") - + "\nThe FFMPEG string above has yielded a file whose size is " - + str(end_size) - + "MB.\n{output_name} is NOT ready for Discord, and will be re-run.\nMy bad.".format( - output_name=output_name - ) - ) - return True - - -def time_calculations(fname, length): - startstring = fname[0:2] + ":" + fname[2:4] + ":" + fname[4:6] - endstring = fname[7:9] + ":" + fname[9:11] + ":" + fname[11:13] - - try: - int(fname[0:6]) - startseconds = ( - int(fname[0:2]) * 60 * 60 + int(fname[2:4]) * 60 + int(fname[4:6]) - ) - try: - int(fname[11:13]) - endseconds = ( - int(fname[7:9]) * 60 * 60 + int(fname[9:11]) * 60 + int(fname[11:13]) - ) - duration = endseconds - startseconds - timestamped_section = f"-ss {startstring} -to {endstring}" - except: - duration = length - startseconds - timestamped_section = f"-ss {startstring}" - except: - duration = length - timestamped_section = "" - - return duration, timestamped_section - - -fname = os.listdir("/dev/shm/ffmpeg/in/")[0] -os.rename("/dev/shm/ffmpeg/in/" + fname, "/dev/shm/ffmpeg/in/" + fname.replace(" ", "")) -fname = fname.replace(" ", "") - -# ffprobe to calculate the total duration of the clip. -length = math.floor( - float( - os.popen( - "ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 /dev/shm/ffmpeg/in/{fname}".format( - fname=fname - ) - ).read() - ) -) - -duration, timestamped_section = time_calculations(fname, length) - -run = True - -reso = os.getenv("reso") -codec = os.getenv("codec") -audio_br = os.getenv("audio_br") -audio_br = int(str(os.getenv("audio_br"))) -fs = float(str(os.getenv("fs"))) -target_fs = fs - -codecs = { - "vp9": { - "pass1": f"-vf scale={reso} -g 240 -threads 8 -speed 4 -row-mt 1 -tile-columns 2 -vsync cfr -c:v libvpx-vp9 -pass 1 -an", - "pass2": f"-vf scale={reso} -g 240 -threads 8 -speed 2 -row-mt 1 -tile-columns 2 -c:v libvpx-vp9 -c:a libopus -pass 2", - "output_name": "small_" + fname.replace(".mp4", ".webm"), - }, - "x264": { - "pass1": f"-vf scale={reso} -vsync cfr -c:v libx264 -pass 1 -an", - "pass2": f"-vf scale={reso} -c:v libx264 -c:a aac -pass 2 ", - "output_name": "small_" + fname, - }, - "x265": { - "pass1": f"-vf scale={reso} -c:v libx265 -vsync cfr -x265-params pass=1 -an", - "pass2": f"-vf scale={reso} -c:v libx265 -x265-params pass=2 -c:a aac", - "output_name": "small_" + fname, - }, -} - - -while run: - # Conversion to KiB - end_fs = fs * 8192 - br, minbr, maxbr = get_bitrate( - duration=duration, filesize=end_fs, audio_br=audio_br - ) - ffmpeg_string = f""" - ffpb {timestamped_section} -hwaccel cuda -i /dev/shm/ffmpeg/in/{fname} -y \ - {codecs[str(codec)]['pass1']} \ - -b:v {br}k -minrate {minbr}k -maxrate {maxbr}k \ - -f null /dev/null && \ - ffpb {timestamped_section} -hwaccel cuda -i /dev/shm/ffmpeg/in/{fname} \ - {codecs[str(codec)]['pass2']} \ - -b:a {audio_br}k -b:v {br}k -minrate {minbr}k -maxrate {maxbr}k \ - /dev/shm/ffmpeg/out/{codecs[str(codec)]['output_name']} -y - """ - - run = encode( - ffmpeg_string, output_name=codecs[str(codec)]["output_name"], fs=target_fs - ) - - if run: - fs = fs - 0.2 diff --git a/nix/ffmpreg.sh b/nix/ffmpreg.sh deleted file mode 100644 index a1bcd72..0000000 --- a/nix/ffmpreg.sh +++ /dev/null @@ -1,122 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash gum trashy fd ripgrep mediainfo - -replace_extension() { - local file_basename - file_basename=$(basename "$1") - echo "${file_basename%.*}.$2" -} - -convert_gif() { - file_newname=$(replace_extension "$1" gif) - ffpb -i "$(realpath "$1")" -vf fps=12,scale=480:-1,smartblur=ls=-0.5 "$file_newname" -} - -convert_av1() { - local file_newname - file_newname=$(replace_extension "$1" mp4) - local file_tempdest=/dev/shm/$file_newname - local file_destination - file_destination=$(dirname "$(realpath "$1")")/$file_newname - ffpb -i "$1" \ - -c:v libaom-av1 \ - -threads 12 -cpu-used 7 \ - "$file_tempdest" - trash "$1" - mv -i "$file_tempdest" "$file_destination" -} - -convert_mp4() { - local file_newname - file_newname=$(replace_extension "$1" mp4) - local file_tempdest=/dev/shm/$file_newname - local file_destination - file_destination=$(dirname "$(realpath "$1")")/$file_newname - ffpb -i "$1" \ - -c:v libx265 \ - -preset veryslow \ - "$file_tempdest" - trash "$1" - mv -i "$file_tempdest" "$file_destination" -} - -convert_discord() { - local file_newname - file_newname=$2_$(replace_extension "$1" mp4) - local dir_ram=/dev/shm/ffmpeg - mkdir -p $dir_ram/{in,out} - ffpb -hwaccel cuda -i "$(realpath "$1")" \ - -c:v h264_nvenc \ - "$dir_ram"/in/discord.mp4 - cd "$dir_ram" || exit - codec=x264 audio_br=$3 fs=$4 reso=$5 ffmpeg4discord - mv "$dir_ram"/out/small_discord.mp4 ~/"$file_newname" - command rm -rf "$dir_ram" -} - -operation=$(gum choose mp4 av1 discord nitro gif enc265) - -case $operation in - 1 | mp4) - to_convert=() - while IFS= read -r file; do - to_convert+=("$file") - done < <(fd . "$(pwd)" -tf -aL | fzf --multi -i) - for file in "${to_convert[@]}"; do - convert_mp4 "$file" - done - ;; - 2 | av1) - to_convert=() - while IFS= read -r file; do - to_convert+=("$file") - done < <(fd . "$(pwd)" -tf -aL | fzf --multi -i) - for file in "${to_convert[@]}"; do - convert_av1 "$file" - done - ;; - 3 | discord) - to_convert=() - while IFS= read -r file; do - to_convert+=("$file") - done < <(fd . "$(pwd)" -tf -aL | fzf --multi -i) - for file in "${to_convert[@]}"; do - convert_discord "$file" discord 96 8.0 "1280x720" - done - ;; - 4 | nitro) - to_convert=() - while IFS= read -r file; do - to_convert+=("$file") - done < <(fd . "$(pwd)" -tf -aL | fzf --multi -i) - for file in "${to_convert[@]}"; do - convert_discord "$file" nitro 128 50.0 "1920x1080" - done - ;; - 5 | gif) - to_convert=() - while IFS= read -r file; do - to_convert+=("$file") - done < <(fd . "$(pwd)" -tf -aL | fzf --multi -i) - for file in "${to_convert[@]}"; do - convert_gif "$file" - done - ;; - 6 | enc265) - to_convert=() - extensions=(flv m4v mpg avi mov ts mkv mp4 webm) - for ext in "${extensions[@]}"; do - while IFS= read -r file; do - if ! (mediainfo "$file" | grep Writing\ library | grep -q x265); then - to_convert+=("$file") - fi - done < <(fd . -e "$ext" -tf -aL) - done - for file in "${to_convert[@]}"; do - convert_mp4 "$file" - done - ;; - *) - echo -n "Please select a valid input" - ;; -esac diff --git a/nix/find-dup-episodes.sh b/nix/find-dup-episodes.sh deleted file mode 100644 index 0167eab..0000000 --- a/nix/find-dup-episodes.sh +++ /dev/null @@ -1,27 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash fd ripgrep - -root=/srv/pool/multimedia/media/Series -while IFS= read -r directory; do - while IFS= read -r season; do - season_episodes=() - while IFS= read -r episode; do - number="$(basename "$episode" | - rg --pcre2 -o "S\d+E\d+" | - rg --pcre2 -o "\d+$" | - awk '$0*=1')" - season_episodes+=($((number))) - done < <(fd . "$season" -tf -d1 \ - -E '*.srt' \ - -E '*.jpg' \ - -E '*.nfo' \ - -E '*.json') - dupe=$(printf '%s\n' "${season_episodes[@]}" | awk '!($0 in seen){seen[$0];next} 1') - if [[ -z $dupe ]]; then - continue - fi - echo "The episode $dupe is duplicated on $(basename "$season") of $(basename "$directory")" - echo "$season" - echo "_______________" - done < <(fd . "$directory" -td -d1) -done < <(fd . "$root" -td -d 1) diff --git a/nix/manage-library.sh b/nix/manage-library.sh deleted file mode 100644 index 6ae35ad..0000000 --- a/nix/manage-library.sh +++ /dev/null @@ -1,191 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash gum fd ripgrep eza trash-cli zip unzip - -root_directories=( - /srv/pool/multimedia/media/Library/Comics - /srv/pool/multimedia/media/Library/Manga - /srv/pool/multimedia/media/Library/Webtoons - /srv/pool/multimedia/media/Library/Espaniol/Manga -) - -newname() { - echo "$1" | sed -E "s/$2/$3/g" -} - -separator() { - gum style --foreground 7 _________________________ -} -announce_changes() { - echo "Renaming:" - gum style --foreground 1 "$1" - echo "Into:" - gum style --foreground 2 "$2" - separator -} - -rename_file() { - while IFS= read -r file; do - local original_name - original_name=$(basename "$file") - local new_name - new_name=$(newname "$(basename "$file")" "$2" "$3") - - announce_changes "$original_name" "$new_name" - command mv -n "$(dirname "$file")"/{"$original_name","$new_name"} - done < <(fd "$1" --absolute-path -tf -s "${root_directories[@]}") -} - -rename_directory() { - while IFS= read -r dir; do - local new_name - new_name=$(newname "$(basename "$dir")" "$2" "$3") - local new_dir - new_dir=$(dirname "$dir")/$new_name - - announce_changes "$dir" "$new_dir" - echo "Processing..." - if [ ! -d "$new_dir" ]; then - echo "$(basename "$new_dir") doesn't exist. Creating it." - command mkdir -p "$new_dir" - fi - if [ -d "$new_dir" ]; then - echo "$(basename "$new_dir") has been created!, moving the following files:" - eza "$dir" - fd . "$dir" -x mv -n {} "$(realpath "$new_dir")" - fi - separator - done < <(fd "$1" --absolute-path -td -s "${root_directories[@]}") -} - -rename_numbered_files() { - while IFS= read -r file; do - local original_name - original_name=$(basename "$file") - local new_name - - new_name=$(echo "$original_name" | sed -E 's/(.*) - 0*([[:digit:]]+)(\.cbz)/\1 #\2\3/') - - if [[ "$new_name" != "$original_name" ]]; then - announce_changes "$original_name" "$new_name" - command mv -n "$(dirname "$file")"/{"$original_name","$new_name"} - fi - done < <(fd --absolute-path -tf -e cbz '\-[[:space:]]0*[[:digit:]]+' "${root_directories[@]}") -} - -# Check directory existence -for dir in "${root_directories[@]}"; do - if [ -d "$dir" ]; then - continue - fi - echo "directory doesn't exist... creating $dir" - mkdir -vp "$dir" -done - -# Fix numbered issues (For migrating from old directory) -rename_numbered_files - -# Capitalize Special words -words=(special tpb full annual) -Words=(Special TPB Full Annual) -counter=0 -for word in "${words[@]}"; do - while IFS= read -r file; do - new_name=$(newname "$(basename "$file")" "$word" "${Words[$counter]}") - echo "Inproper capitalization of the word" - gum style --foreground 1 "$word" - echo "adjusting it into" - gum style --foreground 2 "${Words[$counter]}" - announce_changes "$(basename "$file")" "$new_name" - command mv -n "$(dirname "$file")"/{"$(basename "$file")","$new_name"} - done < <(fd "$word" --absolute-path -tf -s "${root_directories[@]}") - counter=$((counter + 1)) -done - -# Rename Year files -# set regex_year_grep "\([[:digit:]]{4}\)" -# set regex_year_string "(\()(\d{4})(\))" -# rename_directory $regex_year_grep $regex_year_string \$2 -# rename_file $regex_year_grep $regex_year_string \$2 - -# Rename #_ downloads -regex_hashtag="#_" -rename_directory $regex_hashtag $regex_hashtag "#" -rename_file $regex_hashtag $regex_hashtag "#" - -# Rename ~ to : -# rename_directory " ~ " " ~ " ": " -# rename_file " ~ " " ~ " ": " - -rename_keywords() { - # Followed by digit - local regex_digit_fd="$1 \d+" - local regex_digit="($1 )([[:digit:]]+)" - rename_directory "$regex_digit_fd" "$regex_digit" "\1#\2" - rename_file "$regex_digit_fd" "$regex_digit" "\1#\2" - # Without digit - regex="#$1" - rename_directory "$regex" "$regex" "$1" - rename_file "$regex" "$regex" "$1" -} - -rename_keywords TPB -rename_keywords Special -rename_keywords Annual - -# Rename #Full -rename_directory " #Full" " #Full" "" -rename_file " #Full" " #Full" "" - -# Rename double space -rename_directory " " " " " " -rename_file " " " " " " - -# Fix names -wrongnames=( - "Transformers: Spotlight" - "Dr. Stone" - i-dont-want-this-kind-of-hero - pure-of-heart - scoob-and-shag - stick-n-poke - "Houseki no Kuni" - "Gantz E" - "Gantz G" -) -rightname=( - "Transformers Spotlight:" - "Dr. STONE" - "I DON'T WANT THIS KIND OF HERO" - "Pure of Heart" - "Scoob and Shag" - "Stick n' Poke" - "Land of the Lustrous" - "Gatz:E" - "Gantz:G" -) -counter=0 -for wrongname in "${wrongnames[@]}"; do - rename_directory "$wrongname" "$wrongname" "${rightname[$counter]}" - rename_file "$wrongname" "$wrongname" "${rightname[$counter]}" - counter=$((counter + 1)) -done - -# Merge TPB (Part X) files -while IFS= read -r file; do - new_name=$(newname "$(basename "$file" .cbz)" "TPB \(Part [[:digit:]]+\)" TPB) - extract_dir=$(realpath "$(dirname "$file")"/"$new_name") - if [ ! -d "$extract_dir" ]; then - mkdir -p "$extract_dir" - fi - unzip "$file" -d "$extract_dir"/"$(basename "$file" .cbz)" - cd "$extract_dir" || exit - zip -r "$(realpath "$(dirname "$file")")"/"$new_name"\.cbz ./ - trash "$file" - trash "$extract_dir"/"$(basename "$file" .cbz)" -done < <(fd "Part \d+" --absolute-path -tf -s "${root_directories[@]}") - -fd . --absolute-path -tf -td "${root_directories[@]}" -x chown jawz:kavita {} -fd . --absolute-path -tf "${root_directories[@]}" -x chmod 664 {} -fd . --absolute-path -td "${root_directories[@]}" -x chmod 775 {} - -fd . --absolute-path -td -te "${root_directories[@]}" -x rmdir {} diff --git a/nix/nextcloud-cronjob.sh b/nix/nextcloud-cronjob.sh deleted file mode 100644 index 1bcbdd2..0000000 --- a/nix/nextcloud-cronjob.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/run/current-system/sw/bin/bash - -# Cron tasks -if type /run/current-system/sw/bin/nextcloud-occ 2>/dev/null; then - /run/current-system/sw/bin/nextcloud-occ preview:pre-generate - # /run/current-system/sw/bin/nextcloud-occ face:background_job -t 900 -fi - -# Sync GDL stuff -root=/srv/pool/scrapping - -cd $root || exit -set -- Aqp Ghekre -for user in "$@"; do - originDir=$root/$user - destDir=/srv/pool/nextcloud/$user/files/Requested - destDirDup=/srv/pool/nextcloud/$user/files/RequestedDupePlzCheckNDel - if [ ! -d "$destDir" ]; then - echo "$destDir does not exist, creating..." - mkdir -p "$destDir" - fi - cd "$originDir" || exit - find . -type f -not -name '*.part' | while read -r file; do - destination=$destDir/"$(echo "$file" | sed "s/^\.\///")" - destinationDup=$destDirDup/"$(echo "$file" | sed "s/^\.\///")" - - if [ ! -f "$destination" ]; then - echo "Safe to move $(basename "$file")" - if [ ! -d "$(dirname "$destination")" ]; then - echo "Creating parent directory..." - mkdir -p "$(dirname "$destination")" - fi - mv -n "$file" "$destination" - else - echo "Duplicated encountered $(basename "$file")" - if [ ! -d "$(dirname "$destinationDup")" ]; then - echo "Creating parent directory..." - mkdir -p "$(dirname "$destinationDup")" - fi - mv -n "$file" "$destinationDup" - fi - - done - - find ./ -mindepth 1 -type d -empty -delete - - chown 987:988 -R "$destDir" - find "$destDir" -type d -exec chmod -R 755 {} \; - find "$destDir" -type f -exec chmod -R 644 {} \; - - if [ -d "$destDirDup" ]; then - chown 987:988 -R "$destDirDup" - find "$destDirDup" -type d -exec chmod -R 755 {} \; - find "$destDirDup" -type f -exec chmod -R 644 {} \; - fi - if type /run/current-system/sw/bin/nextcloud-occ 2>/dev/null; then - /run/current-system/sw/bin/nextcloud-occ files:scan --all - fi -done diff --git a/nix/pika-list.sh b/nix/pika-list.sh deleted file mode 100644 index ef3b2d6..0000000 --- a/nix/pika-list.sh +++ /dev/null @@ -1,51 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash fd borgbackup gum ripgrep - -BORG_PASSPHRASE=$(gum input --password --placeholder "Type borg password") -export BORG_PASSPHRASE - -d_root=$HOME/pika -f_string=home/jawz/.config/jawz/lists/jawz/watch.txt -d_borg=/srv/pool/backups/pika/lists - -while IFS= read -r repo; do - IFS=" " read -r -a array <<<"$repo" - repo_id="${array[0]}" - mkdir -vp "$d_root/$repo_id" && cd "$d_root/$repo_id" || exit - borg extract $d_borg::"$repo_id" $f_string - cat "$d_root/$repo_id/$f_string" >>"$d_root/master" -done < <(borg list "$d_borg") - -cd "$HOME" || exit - -sort -u "$d_root/master" -o "$d_root/sorted" -sort -u "$LW" -o "$LW" - -echo "Current $(wc -l <"$LW") archived $(wc -l <"$d_root/sorted")" - -echo "Missing lines:" -diff "$d_root/sorted" "$LW" - -# look for duped lines with different casing -echo "Duplicated lines:" -while IFS= read -r line; do - if ! [ "$line" == "${line,,}" ]; then - if rg "${line,,}" <"$LW"; then - echo "$line" - fi - fi -done <"$LW" - -# delete pika backups -if gum confirm "Limpiar pika?"; then - command rm -rf "$d_root" - while IFS= read -r repo; do - IFS=" " read -r -a array <<<"$repo" - repo_id="${array[0]}" - gum spin --spinner dot --title "Cleaning $repo_id..." -- borg delete $d_borg::"$repo_id" - done < <(borg list "$d_borg") -else - echo "Canceled, no files deleted" -fi -gum spin --spinner dot --title "Cleaning $repo_id..." -- borg compact "$d_borg" -gum spin --spinner dot --title "Cleaning $repo_id..." -- borg compact /srv/pool/backups/pika/home diff --git a/nix/run.sh b/nix/run.sh deleted file mode 100644 index 1028f37..0000000 --- a/nix/run.sh +++ /dev/null @@ -1,44 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash gnome.zenity rmlint git gum xclip - -if [ -n "$1" ]; then - operation=$1 -else - operation=$(gum choose rmlint download git) -fi - -case $operation in - # onlyfans) - # source ~/Development/Python/onlyfans/bin/activate.fish - # python ~/Development/Git/OnlyFans/start_ofd.py - # deactivate - rmlint) - rmlint -g --types="duplicates" \ - --config=sh:handler=clone \ - /srv/pool/ - ;; - download) - ENTRY=$(zenity --entry --width=250 --title "Push Manager" \ - --text="Verify the following entry is correct" \ - --add-entry="Clipboard:" --entry-text "$(xclip -o -sel clip)") - if [ -n "$ENTRY" ]; then - # kgx -e "download -u jawz -i '$ENTRY'" - kgx -e "ssh miniserver ""download -u jawz -i ""$ENTRY"" "" " - else - zenity --error --width=250 \ - --text "Please verify and try again" - fi - ;; - git) - git_dir=$HOME/Development/Git - while IFS= read -r repo; do - if ! [ -d "$repo/.git" ]; then - continue - fi - cd "$repo" || exit - gum style --foreground 2 "Updating $(basename "$repo")" - git fsck --full - git pull - done < <(fd . "$git_dir" -td --absolute-path -d 1) - ;; -esac diff --git a/nix/split-dir.sh b/nix/split-dir.sh deleted file mode 100644 index 834f313..0000000 --- a/nix/split-dir.sh +++ /dev/null @@ -1,33 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash fd - -before_count=$(fd -tf | wc -l) -i=0 - -for file in $(fd -d1 -tf -E '*.mp4' -E '*.webm'); do - dir_name=$(basename "$(pwd)")_$(printf %03d $((i / $1 + 1))) - mkdir -p "$dir_name" - mv -i "$file" "$(realpath "$dir_name")"/ - i=$((i + 1)) -done - -for file in $(fd -d1 -tf -e webm); do - mkdir -p webm - mv -i "$file" "$(realpath webm)"/ -done - -for file in $(fd -d1 -tf -e mp4); do - mkdir -p videos - mv -i "$file" "$(realpath videos)"/ -done - -after_count=$(fd -tf | wc -l) - -if [[ "$before_count" == "$after_count" ]]; then - echo "No file count differences" -else - echo "Before count: $before_count" - echo "After count: $after_count" -fi -sleep 10 -exit diff --git a/nix/stream-dl.sh b/nix/stream-dl.sh deleted file mode 100644 index 8844076..0000000 --- a/nix/stream-dl.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env nix-shell -#! nix-shell -i bash -p bash yt-dlp - -minutes=5 -time_alive=60 -sleep_time=$((minutes * 60)) -loops=$((time_alive / (sleep_time / time_alive))) - -re="[[:space:]]+" -echo $1 -if [[ $1 =~ $re ]]; then - read -ra arr <<<"$1" - url="https://picarto.tv/${arr[0]}" -else - url="https://chaturbate.com/$1" -fi - -save_dir=/srv/pool/glue/stream-dl -if [ ! -d "$save_dir" ]; then - mkdir -p "$save_dir" -fi -cd $save_dir || exit - -for i in $(seq 1 1 "$loops"); do - waiting_time=$(((i * sleep_time) / time_alive)) - yt-dlp --hls-use-mpegts --prefer-ffmpeg -o '%(title)s.%(ext)s' "$url" - echo "sleeping for $sleep_time seconds… been waiting for $waiting_time minutes" - sleep $sleep_time -done diff --git a/nix/sub-sync.sh b/nix/sub-sync.sh deleted file mode 100755 index 34e9af5..0000000 --- a/nix/sub-sync.sh +++ /dev/null @@ -1,186 +0,0 @@ -#!/run/current-system/sw/bin/bash - - -# nix-shell -i bash -p bash fd ripgrep file alass ffmpeg gum - -MEDIA_ROOT=("/srv/pool/multimedia/media/Series" "/srv/pool/multimedia/media/Movies") -REPLACE_DIR="/srv/pool/multimedia/media" -SUBTITLE_MIRROR="/srv/pool/multimedia/backups/subtitles" -RAM_SUB="/dev/shm/sub.srt" - -# BACKUPS SUBTITLES -backup_subtitles() { - while IFS= read -r subtitle; do - echo "backing up $subtitle" - dest_dir="$(dirname "$subtitle")" - dest_dir="${dest_dir/$REPLACE_DIR/$SUBTITLE_MIRROR}" - mkdir -p "$dest_dir" - cp "$subtitle" "${subtitle/$REPLACE_DIR/$SUBTITLE_MIRROR}" - done < <(fd . -tf -e srt --absolute-path "${MEDIA_ROOT[@]}") -} - -clean_up() { - while IFS= read -r directory; do - echo "cleaning up $directory" - subtitles=() - mapfile -d $'\0' subtitles < <(fd . "$directory" -e srt -tf -d 1 -0) - - if [ "${#subtitles[@]}" -lt 2 ]; then - continue - fi - - unset base_subtitle - unset subtitles_group - for subtitle in "${subtitles[@]}"; do - group=() - mapfile -d $'\0' group < <(fd --fixed-strings \ - "$(basename "$subtitle" .srt)" "$directory" \ - -d 1 -tf -0 -e srt) - for key in "${!group[@]}"; do - if ! echo "${group[$key]}" | rg -P '\.\d{1,2}(\.\w+(-\w+)?)?\.srt' -q; then - unset "group[$key]" - continue - fi - if [ -z "${group[$key]}" ]; then - continue - fi - echo "removing $(basename "$subtitle")" - rm "$subtitle" - done - done - done < <(fd . -td --absolute-path "${MEDIA_ROOT[@]}") -} - -rename_languages() { - while IFS= read -r file; do - base=$(basename "$file" .eng.srt) - dir=$(dirname "$file") - echo "renaming sub $base" - mv "$file" "$dir/$base.$2.srt" - done < <(fd . -tf --absolute-path "${MEDIA_ROOT[@]}" -e "$1.srt") -} - -sync_subtitles() { - while IFS= read -r directory; do - echo "scanning for sync $directory" - while IFS= read -r subtitle; do - echo "processing $subtitle" - video=() - extension=$(echo "$subtitle" | rg -oP "(\.\w+(-\w+)?)?\.srt") - basename="$(basename "$subtitle" "$extension")" - mapfile -d $'\0' video < <(fd "$basename" \ - "$directory" --fixed-strings \ - -e mkv -e mp4 -e avi -e webm -tf -d 1 -0) - - # skips directory if it contains more than 1 video file - # should never get triggered - if [ "${#video[@]}" -gt 1 ]; then - basename "$(dirname "$directory")" - echo "$(basename "$directory") has many video files: ${#video[@]}" - continue - fi - - # update subtitle in ram - if [ -e "$RAM_SUB" ]; then - rm "$RAM_SUB" - fi - cp "$subtitle" "$RAM_SUB" - - if [ ! -e $RAM_SUB ] && [ ! -e "${video[0]}" ]; then - continue - fi - echo "processing...$subtitle" - alass-cli "${video[0]}" "$RAM_SUB" "$subtitle" - - done < <(fd . "$directory" -tf -e srt -d 1 --newer "$1") - done < <(fd . -td --absolute-path "${MEDIA_ROOT[@]}") -} - -find_dupes() { - while IFS= read -r directory; do - videos=() - mapfile -d $'\0' videos < <(fd . \ - "$directory" -tf -d 1 -0 \ - -e mkv -e mp4 -e avi -e webm) - - if [ "${#videos[@]}" == 0 ]; then - if [[ "$directory" != *"Season"* ]]; then - continue - fi - echo "NO FILES ERROR: $directory" - fi - - if [ "${#videos[@]}" == 1 ]; then - continue - fi - - if [ "${#videos[@]}" -gt 1 ]; then - if [[ "$directory" == *"media/Movies"* ]]; then - echo "Movie directory has more than a movie" - continue - fi - for episode in "${videos[@]}"; do - episode_number="$(echo "$episode" | - rg -oP "S\d+E\d+(-E\d+)? ")" - episode_files="$( - fd "$episode_number" "$directory" --fixed-strings \ - -tf -d 1 \ - -e mkv -e mp4 -e avi -e webm | wc -l - )" - if [ "$episode_files" == 1 ]; then - continue - fi - echo ____________________________ - echo "The episode $episode_number is repeated on" - echo "$directory" - fd "$episode_number" "$directory" --fixed-strings \ - -tf -d 1 \ - -e mkv -e mp4 -e avi -e webm - done - fi - - done < <(fd . -td --absolute-path "${MEDIA_ROOT[@]}") -} - -fd . /srv/pool/multimedia/media/Series/ --owner jawz -x chown sonarr:piracy {} -fd . /srv/pool/multimedia/media/Movies/ --owner jawz -x chown radarr:piracy {} -fd . "${MEDIA_ROOT[@]}" -td -x chmod 775 {} -fd . "${MEDIA_ROOT[@]}" -tf -x chmod 664 {} - -rename_languages eng en -rename_languages spa es -rename_languages mx es_MX - -if [ -n "$1" ]; then - operation=$1 -else - operation=$(gum choose backup clean sync all) -fi -if [ -n "$2" ]; then - start_time=$2 -else - start_time="$(date '+%Y-%m-%d') 00:00:00" -fi - -case $operation in - backup) - backup_subtitles - ;; - clean) - clean_up - ;; - sync) - sync_subtitles "$start_time" - ;; - dupe) - find_dupes - ;; - all) - echo "backing up" - backup_subtitles - echo "cleaning up" - clean_up - echo "syncing" - sync_subtitles "$start_time" - ;; -esac diff --git a/nix/tasks.sh b/nix/tasks.sh deleted file mode 100755 index a54f8e2..0000000 --- a/nix/tasks.sh +++ /dev/null @@ -1,165 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p bash trashy fd ripgrep file - -directories=("$HOME/Pictures/To Organize/" "$HOME/Downloads/" "$HOME/Downloads/cache") - -replace_extension() { - local file_basename - file_basename=$(basename "$1") - echo "${file_basename%.*}.$2" -} - -generate_random_number() { - local min=0 - local max=9999999999 - printf "%010d\n" $((min + RANDOM % max)) -} - -test_name() { - local random_number - random_number=$(generate_random_number) - while (($(fd "$random_number"* "$HOME/Pictures/" "$HOME/Downloads/" -tf | wc -l) > 0)); do - echo "Conflicts found, generating a new filename" - random_number=$(generate_random_number) - echo "$random_number" - done - echo "$random_number" -} - -while IFS= read -r file; do - regex_str='source|tenor|media|duckduckgo\.com|giphy|' - regex_str+='(? 0)); then - while IFS= read -r file; do - date=$(stat -c "%y" "$file" | rg -o "\d{4}-\d{2}-\d{2}") - year=$(echo "$date" | rg -o "\d{4}") - month=$(echo "$date" | rg -o "\d{4}-\d{2}" | rg -o --pcre2 "(?<=-)\d{2}") - parent_dir=$(dirname "$(realpath "$file")") - dest_dir=$(realpath "$parent_dir")/$year/$month - echo "Moving screenshot $(basename "$file") into $dest_dir" - mkdir -vp "$dest_dir" - command mv -n "$file" "$dest_dir/" - done < <(fd . "${classify_directories[@]}" --absolute-path -tf -d 1) -fi - -# Where steam screenshots are stored, may need to replace with ur ID -dir_steam=$XDG_DATA_HOME/Steam/userdata/107446271/760/remote -declare -A games -# Insert here new games, put between [] the ID of the game -# You can find it by visiting the $dir_steam directory -# the ID is simply the name of the folder in there. -games+=( - [386360]=Smite - [960090]="Bloons Tower Defense 6" - [648800]=Raft - [262060]="Darkest Dungeon" - [234140]="Mad Max" - [433340]="Slime Rancher" - [1190460]="Death Stranding" - [1850570]="Death Stranding" - [440900]="Conan Exiles" - [679110]="Werewolf Apocalypse" - [2221490]="The Division 2" -) - -for key in "${!games[@]}"; do - # Modify this to store your screenshots somewhere else - dir_dest=$(realpath "$HOME/Pictures/Screenshots/Games")/${games[$key]} - dir_game=$(realpath "$dir_steam")/$key/screenshots - # If there are not screenshots currently stored, why bother lol - if ! [[ -d $dir_game ]]; then # - continue - fi - # If screenshots exist however... - if ! (($(fd . "$dir_game" -d 1 -tf | wc -l) > 0)); then - continue - fi - # Create destination directory - mkdir -vp "$dir_dest" - echo "Moving ${games[$key]} screenshots..." - fd . "$dir_game" -d 1 -tf -x mv -n {} "$dir_dest"/ - # Delete thumnnails - echo "Deleting ${games[$key]} thumbnails..." - rm -rf "$dir_game"/thumbnails -done -# Clearing up empty directories -fd . "$dir_steam" -td -te -x trash {} - -cyberpunk_dir=$HOME/Games/gog/cyberpunk-2077/drive_c/users/jawz/Pictures/"Cyberpunk 2077" -if [[ -d $cyberpunk_dir ]]; then - while IFS= read -r file; do - echo "Moving cyberpunk screenshots $(basename "$file")" - command mv -n "$file" "$HOME/Pictures/Screenshots/Games/Cyberpunk 2077/" - done < <(fd . "$cyberpunk_dir" -tf) -fi - -proton_dir=$HOME/.steam/steam/compatibilitytools.d -if [[ -d "$proton_dir" ]]; then - while IFS= read -r protonver; do - lutrisdir=$XDG_DATA_HOME/lutris/runners/wine/$(basename "$protonver") - if [ -d "$lutrisdir" ] && [ -L "$lutrisdir" ]; then - continue - fi - echo "Symlink $lutrisdir doesn't exist, creating link..." - ln -s "$(realpath "$protonver")"/files "$lutrisdir" - done < <(fd . "$proton_dir" -d 1 -td) -fi -fd . "$XDG_DATA_HOME/lutris/runners/wine" -d1 -tl -Lx trash {} - -while IFS= read -r file; do - ext=$(file --mime-type "$file" | rg -o '\w+$') - correct_ext=${ext,,} - filename=$(basename -- "$file") - current_ext="${filename##*.}" - filename="${filename%.*}" - if ! echo "$correct_ext" | rg -q 'jpe|jpg|jpeg|png|gif|webp'; then - continue - fi - if [ "$current_ext" == "$correct_ext" ]; then - continue - fi - echo "The file $(basename "$file")" \ - "will be renamed, the propper extension is $correct_ext" - new_name="$filename".$correct_ext - if command mv -n "$(dirname "$file")"/{"$(basename "$file")","$new_name"}; then - continue - fi - - file_hash="$(sha256sum "$file" | gawk '{ print $1 }')" - if ! echo "$file_hash $(dirname "$file")/$new_name" | sha256sum -c; then - continue - fi - echo "deleting duplicated: $file" - rm "$file" -done < <(fd . "${directories[@]}" -d 1 -tf) - -files_home_clean=(.pki HuionCore.pid DriverUI.pid huion.log) -for file in "${files_home_clean[@]}"; do - file=$HOME/$file - if [ ! -e "$file" ]; then - continue - fi - rm -rf "$file" -done diff --git a/nix/update-dns.sh b/nix/update-dns.sh deleted file mode 100755 index c720956..0000000 --- a/nix/update-dns.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env nix-shell -#! nix-shell -i bash -p bash curl - -function header { - echo ============================================= - echo "$1" - echo ============================================= -} - -ip=$(curl -s -X GET https://checkip.amazonaws.com) -header "$ip" -header NAMECHEAP - -hostname=@ -domain=rotehaare.art -password="$PASSROTE" -base="https://dynamicdns.park-your-domain.com/update" - -if host "$domain" 1.1.1.1 | grep "has address" | grep "$ip"; then - echo "$domain is currently set to $ip; no changes needed" - exit -fi -echo updating "$domain" -host="host=$hostname" -domain="domain=$domain" -password="password=$password" -curl "$base?$host&$domain&$password&ip=$ip" -echo diff --git a/pkgs/download.nix b/pkgs/download.nix deleted file mode 100644 index 3036cab..0000000 --- a/pkgs/download.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ pkgs, ... }: -with pkgs; -python3Packages.buildPythonApplication { - pname = "download"; - version = "2.6"; - src = ../nix/download/.; - build-system = with python3Packages; [ setuptools ]; - dependencies = with python3Packages; [ - pyyaml - types-pyyaml - ]; - propagatedBuildInputs = [ - gallery-dl - ffmpeg - python3Packages.yt-dlp - ]; -} diff --git a/scripts.nix b/scripts.nix deleted file mode 100644 index ce7f3d4..0000000 --- a/scripts.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ lib, ... }: -{ - imports = - let - scriptFiles = builtins.filter (file: builtins.match ".*\\.nix" file != null && file != "base.nix") ( - builtins.attrNames (builtins.readDir ./scripts) - ); - in - map (file: ./scripts/${file}) scriptFiles; - my.units.stream-dl.enable = lib.mkDefault false; -}