diff --git a/dotfiles/gallery-dl.nix b/dotfiles/gallery-dl.nix new file mode 100644 index 0000000..edcd37a --- /dev/null +++ b/dotfiles/gallery-dl.nix @@ -0,0 +1,304 @@ +{ + extractor = { + skip = "abort:5"; + cookies = [ + "firefox" + "/home/jawz/.librewolf/jjwvqged.default" + "gnomekeyring" + ]; + user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0"; + retries = 10; + sleep-request = 0; + directlink = { + filename = "{filename}.{extension}"; + directory = [ ]; + }; + bluesky = { + username = "jawz.bsky.social"; + password = "isrb-ydbt-oz52-v7z3"; + reposts = false; + videos = true; + directory = [ "{author['handle']}" ]; + include = [ "media" ]; + }; + twitter = { + skip = "abort:1"; + retweets = false; + videos = "ytdl"; + logout = true; + include = [ "media" ]; + directory = [ "{user[name]}" ]; + }; + flickr = { + size-max = "Original"; + access-token = "72157720915197374-51a26dc4fdfdf173"; + access-token-secret = "a1ddb10902f3fa85"; + directory = [ + "{category}" + "{owner[username]}" + ]; + }; + pinterest.directory = [ + "{board[owner][username]}" + "{board[name]}" + ]; + wikifeet = { + page-reverse = true; + directory = [ + "{category}" + "{celebrity}" + ]; + }; + instagram = { + sleep-request = "25-45"; + sleep = "25-45"; + parent-directory = true; + directory = [ "{username}" ]; + highlights = { + reverse = true; + directory = [ "{username}" ]; + }; + stories = { + reverse = true; + directory = [ "{username}" ]; + }; + tagged.directory = [ + "{tagged_username}" + "tagged" + ]; + }; + kemonoparty = { + retries = 10; + timeout = 5; + filename = "{id}_{filename}.{extension}"; + directory = [ + "{category}" + "{user}" + ]; + }; + exhentai.directory = [ + "{category}" + "{title}" + ]; + tumblr = { + access-token = "5VwIW8TNBoNVPo9CzvKMza2wcn9gJXd6rnUBy6Ctqb4BCPpI59"; + access-token-secret = "8krZGeauA171aZpXZhwgZN8nZCxKQkXYKXWL473mTQPKrqoP3e"; + external = true; + inline = true; + posts = "all"; + reblogs = false; + parent-directory = true; + api-key = "uhBUtgPaX9gl7eaD8suGWW6ZInRedQoVT6xsZzopljy0jXHqm5"; + api-secret = "D3FDj1INyPzXikVpp4jmzSqjlC9czFUQ8oj2I883PSYJdqwURv"; + directory = [ "{blog_name}" ]; + }; + deviantart = { + client-id = 20016; + client-secret = "52e1f9b0cb26e673da36f69e2ddd0e9a"; + refresh-token = "4364d30b6f3777b3c5c1ab2c1c428b0245272ebe"; + include = "gallery,scraps"; + flat = true; + original = true; + mature = true; + auto-watch = true; + auto-unwatch = true; + directory = [ "{username}" ]; + }; + furaffinity = { + directory = [ + "{user}" + "{subcategory}" + ]; + include = [ + "scraps" + "gallery" + ]; + }; + patreon = { + filename = "{filename}.{num}.{extension}"; + browser = "firefox"; + directory = [ + "(Patreon) {creator[vanity]}" + "({date:%Y%m%d}) {title} ({id})" + ]; + }; + blogger = { + filename = "{filename} - {num}.{extension}"; + directory = [ + "{blog[name]}" + "{post[author]}" + "{post[title]} - [{post[id]}]" + ]; + }; + artstation = { + external = true; + directory = [ "{userinfo[username]}" ]; + }; + gfycat.format = "webm"; + reddit = { + user-agent = "Python:gallery-dl:v1.0 (by /u/captainjawz)"; + client-id = "T7nZ6WZ3_onJWBhLP8r08g"; + refresh-token = "184157546842-UHdPQX1c7kG1kbO09NAHY2O2taEiwg"; + parent-directory = true; + directory = [ "{author}" ]; + }; + 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 = { + embeds = true; + directory = [ + "{category}" + "{creatorId}" + ]; + }; + readcomiconline = { + chapter-reverse = true; + quality = "hq"; + captcha = "wait"; + postprocessors = [ "cbz" ]; + directory = [ + "comics" + "{comic}" + "{comic} #{issue}" + ]; + }; + kissmanga = { + chapter-reverse = true; + captcha = "wait"; + postprocessors = [ "cbz" ]; + directory = [ + "manga" + "{subcategory}" + "{manga}" + "{manga} Ch.{chapter}{chapter_minor}" + ]; + }; + mangahere = { + chapter-reverse = true; + postprocessors = [ "cbz" ]; + directory = [ + "manga" + "{subcategory}" + "{manga}" + "{manga} Ch.{chapter}{chapter_minor}" + ]; + }; + mangadex = { + chapter-reverse = true; + chapter-filter = "lang == 'en'"; + postprocessors = [ "cbz" ]; + directory = [ + "manga" + "manga" + "{manga}" + "{manga} Ch.{chapter}{chapter_minor}" + ]; + }; + manganelo = { + chapter-reverse = true; + chapter-filter = "lang == 'en'"; + postprocessors = [ "cbz" ]; + directory = [ + "manga" + "{subcategory}" + "{manga}" + "{manga} Ch.{chapter}{chapter_minor}" + ]; + }; + mangareader = { + chapter-reverse = true; + postprocessors = [ "cbz" ]; + directory = [ + "manga" + "{subcategory}" + "{manga}" + "{manga} Ch.{chapter}{chapter_minor}" + ]; + }; + mangapanda = { + chapter-reverse = true; + postprocessors = [ "cbz" ]; + directory = [ + "manga" + "{subcategory}" + "{manga}" + "{manga} Ch.{chapter}{chapter_minor}" + ]; + }; + webtoons = { + chapter-reverse = true; + postprocessors = [ "cbz" ]; + directory = [ + "webtoons" + "{comic}" + "{comic} #{episode}" + ]; + }; + }; + 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/dotfiles/gallery-dl/config.json b/dotfiles/gallery-dl/config.json deleted file mode 100644 index d6582e4..0000000 --- a/dotfiles/gallery-dl/config.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "extractor": { - "skip": "abort:5", - "cookies": [ - "firefox", - "/home/jawz/.librewolf/jjwvqged.default", - "gnomekeyring" - ], - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.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", - "{subcategory}", - "{manga}", - "{manga} Ch.{chapter}{chapter_minor}" - ], - "captcha": "wait", - "postprocessors": ["cbz"] - }, - "mangahere": { - "chapter-reverse": true, - "directory": [ - "manga", - "{subcategory}", - "{manga}", - "{manga} Ch.{chapter}{chapter_minor}" - ], - "postprocessors": ["cbz"] - }, - "mangadex": { - "chapter-reverse": true, - "chapter-filter": "lang == 'en'", - "directory": [ - "manga", - "manga", - "{manga}", - "{manga} Ch.{chapter}{chapter_minor}" - ], - "postprocessors": ["cbz"] - }, - "manganelo": { - "chapter-reverse": true, - "chapter-filter": "lang == 'en'", - "directory": [ - "manga", - "{subcategory}", - "{manga}", - "{manga} Ch.{chapter}{chapter_minor}" - ], - "postprocessors": ["cbz"] - }, - "mangareader": { - "chapter-reverse": true, - "directory": [ - "manga", - "{subcategory}", - "{manga}", - "{manga} Ch.{chapter}{chapter_minor}" - ], - "postprocessors": ["cbz"] - }, - "mangapanda": { - "chapter-reverse": true, - "directory": [ - "manga", - "{subcategory}", - "{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/modules/dev/python.nix b/modules/dev/python.nix index 5c5301c..f5de487 100644 --- a/modules/dev/python.nix +++ b/modules/dev/python.nix @@ -26,9 +26,6 @@ pyflakes # checks source code for errors pylint # bug and style checker for python speedtest-cli # check internet speed from the comand line - # nose # testing and running python scripts - # poetry # dependency management made easy - # pytest # framework for writing tests ; }; in diff --git a/modules/scripts/download.nix b/modules/scripts/download.nix index 479eadc..fc4deef 100644 --- a/modules/scripts/download.nix +++ b/modules/scripts/download.nix @@ -16,7 +16,6 @@ in { home-manager.users.jawz = { - xdg.configFile."gallery-dl/config.json".source = ../../dotfiles/gallery-dl/config.json; services.lorri.enable = true; programs.bash = { shellAliases = { @@ -31,6 +30,7 @@ export LC=$list_root/comic.txt ''; }; + }; systemd.user = { services = diff --git a/modules/shell/multimedia.nix b/modules/shell/multimedia.nix index 12e130e..2541ae6 100644 --- a/modules/shell/multimedia.nix +++ b/modules/shell/multimedia.nix @@ -7,11 +7,14 @@ { options.my.shell.multimedia.enable = lib.mkEnableOption "enable"; config = lib.mkIf config.my.shell.multimedia.enable { + home-manager.users.jawz.programs.gallery-dl = { + enable = true; + settings = import ../../dotfiles/gallery-dl.nix; + }; users.users.jawz.packages = let packages = builtins.attrValues { inherit (pkgs) - gallery-dl # similar to yt-dlp but for most image gallery websites yt-dlp # downloads videos from most video websites ffmpeg # not ffmpreg, the coolest video conversion tool! imagemagick # photoshop what??