This commit is contained in:
Cedric Bonhomme 2024-01-16 13:23:58 +01:00
parent ec441cf714
commit 350610c45b
16 changed files with 1562 additions and 0 deletions

View file

@ -0,0 +1,297 @@
---
mangadex:
- url: "https://mangadex.org/title/658b9adf-33c5-439d-9df3-9650c0649bf9"
name: Mazumeshi Elf to Yuboku gurashi
volume: true
- url: "https://mangadex.org/title/7c418a1c-9241-451e-995a-31f673b4340a"
name: Maou-jou de Oyasumi
- url: "https://mangadex.org/title/d4ff7502-b5d4-4fd2-845f-c8754b14dd8d"
name: Machikado Mazoku
volume: true
group: "'Sunrise Arrow'"
- url: "https://mangadex.org/title/b0b721ff-c388-4486-aa0f-c2b0bb321512"
name: Sousou no Frieren
volume: true
- url: "https://mangadex.org/title/3df1a9a3-a1be-47a3-9e90-9b3e55b1d0ac"
name: Boku no Kokoro no Yabai Yatsu
volume: true
- url: "https://mangadex.org/title/190616bc-7da6-45fd-abd4-dd2ca656c183"
name: Ganbare, Douki-chan
- url: "https://mangadex.org/title/a77742b1-befd-49a4-bff5-1ad4e6b0ef7b"
name: Chainsaw Man
volume: true
- url: "https://mangadex.org/title/d7037b2a-874a-4360-8a7b-07f2899152fd"
name: Mairimashita! Iruma-kun
volume: true
- url: "https://mangadex.org/title/dce64fa7-28b5-42a4-8810-149391adfae7"
name: The Rise of the Unemployed Wise Man
- url: "https://mangadex.org/title/3ecd78d9-c686-46f8-8e74-d91a3d7e7958"
name: Ueno-san wa Bukiyou
volume: true
- url: "https://mangadex.org/title/509b1474-cb0a-4f9d-8ca4-95cb44c9b8db"
name: Boku no Tsuma wa Kanjou ga Nai
volume: true
- url: "https://mangadex.org/title/1e6ef441-f72b-4337-94d5-73b111406a3e"
name: Tonari no Kyuuketsuki-san
volume: true
- url: "https://mangadex.org/title/c3f9ce13-c465-48f2-9480-c4ce47d89b3d"
name: My Childhood Friend the Vampire
- url: "https://mangadex.org/title/8847f905-550d-4fe6-bcda-ac2b896789c7"
name: Golden Kamuy
- url: "https://mangadex.org/title/4e7a4a0f-8391-4069-839b-de2352297dab"
name: A Couple of Cuckoos
- url: "https://mangadex.org/title/47c8e8a2-97fc-415e-aa78-f02b276612e2"
name: Sore wa rei no Shiwaza desu
- url: "https://mangadex.org/title/eeea01ed-4838-45ca-8e90-88d6f6e95603"
name: Cuprums Bride
- url: "https://mangadex.org/title/a944aace-6f03-4298-b864-aee895acab28"
name: Endo and Kobayashis Live Commentary on the Villainess
volume: true
- url: "https://mangadex.org/title/a96676e5-8ae2-425e-b549-7f15dd34a6d8"
name: Komi-san wa Komyushou Desu.
- url: "https://mangadex.org/title/88eb1a22-3b66-4a72-b786-0864a56902b5"
name: Sumire 17-sai!!
completed: true
- url: "https://mangadex.org/title/66102488-d47f-423b-8cb6-44e98cdb0ad3"
name: Sumire 16-sai!!
completed: true
- url: "https://mangadex.org/title/efb4278c-a761-406b-9d69-19603c5e4c8b"
name: The 100 Girlfriends Who Really, Really, Really, Really, Really Love You
volume: true
- url: "https://mangadex.org/title/881fccb1-e60c-4c82-b64c-28f709545174"
name: Medaka Box
volume: true
- url: "https://mangadex.org/title/6670ee28-f26d-4b61-b49c-d71149cd5a6e"
name: Mieruko-chan
volume: true
- url: "https://mangadex.org/title/60e6eb5e-6798-4614-928f-064e65aabe16"
name: Jishou Akuyaku Reijou na Konyakusha no Kansatsu Kiroku
volume: true
- url: "https://mangadex.org/title/ef96c21c-6838-43d1-9b6e-cb30546bba8c"
name: Spirit Circle
completed: true
- url: "https://mangadex.org/title/af38f328-8df1-4b4c-a272-e737625c3ddc"
name: Senpai ga Uzai Kouhai no Hanashi
group: "'White Cat Scanlations', 'STALKER Scanlation'"
- url: "https://mangadex.org/title/878634d2-ea39-4001-a4bf-31458020d16a"
name: Villainess Level 99 ~I May Be the Hidden Boss but I'm Not the Demon Lord~
volume: true
- url: "https://mangadex.org/title/a50aa56e-2655-4404-8232-e4970ee63e27"
name: Rokudou no Onna-tachi
volume: true
- url: "https://mangadex.org/title/b84a9c69-624b-4c4f-ac57-8d9a162883f1"
name: Useless Ponko
volume: true
- url: "https://mangadex.org/title/19465f6a-1c11-4179-891e-68293402b883"
name: Murenase! Shiiton Gakuen
- url: "https://mangadex.org/title/d90ea6cb-7bc3-4d80-8af0-28557e6c4e17"
name: Dungeon Meshi
volume: true
- url: "https://mangadex.org/title/3fbeec9f-9c47-4565-8f79-972807c99279"
name: Sengoku Youko
volume: true
- url: "https://mangadex.org/title/6ebe8b8a-7bac-45f0-8652-4b9d52b95644"
name: Hoshi no Samidare
volume: true
- url: "https://mangadex.org/title/fd604f6e-a784-4c6b-ab00-565a996c33f8"
name: Ryuu to Yuusha to Haitatsunin
volume: true
- url: "https://mangadex.org/title/57b8b608-1026-4cab-ad6a-28d796eca663"
name: Little Girl x Scoop x Evil Eye
- url: "https://mangadex.org/title/18649fc7-410f-4509-9283-2e5d2a4cf2d4"
name: Giri-Giri Saegiru Katagirisan
completed: true
- url: "https://mangadex.org/title/9ef97eba-e0bc-452c-9ed0-bfb645d9b536"
name: Hitoribocchi no ○○ Seikatsu
volume: true
- url: "https://mangadex.org/title/0b68801b-2daa-44d8-b0c5-d909c27928b3"
name: The Troubles of a Fortune Teller
- url: "https://mangadex.org/title/84703c86-eb83-45ec-8fc5-f34a25115893"
name: Dai Dark
volume: true
- url: "https://mangadex.org/title/cade38b7-64c4-4a29-8e3c-8c283291d6c6"
name: Houseki no Kuni
hiatus: true
- url: "https://mangadex.org/title/cedc7401-8c70-4057-b14a-4ecbbcd73945"
name: Otoyomegatari
hiatus: true
- url: "https://mangadex.org/title/59a592fa-91fa-4486-a05b-8c947a1b20eb"
name: Taimashi to Akuma-chan
volume: true
- url: "https://mangadex.org/title/d86cf65b-5f6c-437d-a0af-19a31f94ec55"
name: Ijiranaide, Nagatoro-san
volume: true
- url: "https://mangadex.org/title/d8f1d7da-8bb1-407b-8be3-10ac2894d3c6"
name: Isekai Ojisan
group: "'Striptease', 'Kontol ✓', 'Dead Elf Scans', 'Big Chungus Scans', 'Isekai Ojiscan', 'Afiaki', 'Unko Scans', 'alt.ver.', 'no group', '/a/nonymous'"
- url: "https://mangadex.org/title/eeb2ab0e-7dbc-4f0c-b476-8181d44217a8"
name: Tengoku Daimakyou
volume: true
- url: "https://mangadex.org/title/4ad8613b-1987-4d6f-ac0e-3d28a9b2b6f2"
name: Franken Fran Frantic
volume: true
- url: "https://mangadex.org/title/9b78663c-850f-434b-8b33-d88d43cc3151"
name: Arakure Ojousama wa Monmon Shiteiru
volume: true
- url: "https://mangadex.org/title/feff4eaf-01df-4a05-83f4-68bb5cdf4fad"
name: Looking up to Magical Girls
volume: true
- url: "https://mangadex.org/title/b7d069cb-4ab9-4c21-a20b-38f7c269be4e"
name: One Punch Man (Webcomic/Original)
hiatus: false
- url: "https://mangadex.org/title/801513ba-a712-498c-8f57-cae55b38cc92"
name: Berserk
hiatus: true
- url: "https://mangadex.org/title/e4687487-9235-496d-9289-ea3ff955d3c0"
name: Send My Regards to Kenshiro
volume: true
- url: https://mangadex.org/title/21758/kaifuku-jutsushi-no-yarinaoshi
name: Kaifuku Jutsushi no Yarinaoshi
- url: "https://mangadex.org/title/7a36beba-1365-46de-8220-28c193572ac7"
name: Ushiro no Shoumen Kamui-san
- url: "https://mangadex.org/title/c26269c7-0f5d-4966-8cd5-b79acb86fb7a"
name: Sewayaki Kitsune no Senko-san
volume: true
- url: "https://mangadex.org/title/6e156d65-cf65-4d5b-9d04-52f2f8100fbf"
name: Isekai Apocalypse MYNOGHRA ~The Conquest of the World Starts With the Civilisation of Ruin~
volume: true
- url: "https://mangadex.org/title/578ca54a-0aaa-4928-8dd1-219a706299f9"
name: Another World Where I Can't Even Collapse and Die
- url: "https://mangadex.org/title/740471f5-4f75-457a-8c0c-cb4e0a5a999f"
name: Fushigi no Kuni no Bird
volume: true
- url: "https://mangadex.org/title/19e58e5a-4ecc-4f77-8b01-1ba7c615295d"
name: Kumo Desu ga, Nani ka? Daily Life of the Four Spider Sisters
- url: "https://mangadex.org/title/eb2d1a45-d4e7-4e32-a171-b5b029c5b0cb"
name: Kumo Desu ga, Nani ka?
volume: true
- url: "https://mangadex.org/title/5a0ab49a-1e9b-4f19-9f86-da5d7d50885a/the-apothecary-will-make-this-battered-elf-happy"
name: The Apothecary Is Gonna Make This Ragged Elf Happy
- url: "https://mangadex.org/title/5f20aded-1216-41e3-b48d-87b0c4d9957c/kono-healer-mendokusai"
name: Kono Healer Mendokusai
volume: true
- url: "https://mangadex.org/title/2f4e5f5b-d930-4266-8c8a-c4cf9a81e51f/jahy-sama-wa-kujikenai"
name: Jahy-sama wa Kujikenai!
volume: true
- url: "https://mangadex.org/title/1180743d-8e38-4c00-b767-c53169fadc6a/tensura-nikki-tensei-shitara-slime-datta-ken"
name: Tensura Nikki Tensei Shitara Slime Datta Ken
volume: true
- url: "https://mangadex.org/title/b89882d5-e2c8-457d-8b74-a70bf0b36b7e/ore-ga-fujoshi-de-aitsu-ga-yuriota-de"
name: Ore ga Fujoshi de Aitsu ga Yuriota de
- url: "https://mangadex.org/title/87ebd557-8394-4f16-8afe-a8644e555ddc/hirayasumi"
name: Hirayasumi
- url: "https://mangadex.org/title/5725100d-81bd-467d-b680-1f4dff43adbd/kyuuketsuki-sugu-shinu"
name: Kyuuketsuki Sugu Shinu
# name: The Vampire Dies in No Time
- url: "https://mangadex.org/title/665766a3-905d-4a71-a90a-bd2c75d1a81f/alice-in-borderland"
name: Alice in Borderland
volume: true
- url: "https://mangadex.org/title/a56698e8-b6c4-4e3c-9303-4c172465dd4d/imawabi-no-dakini"
name: Imawabi no Dakini
volume: true
completed: true
- url: "https://mangadex.org/title/6316eac8-53cc-4ac8-bc6b-7c5e229ac607/there-s-a-ghost-behind-the-gyaru"
name: There's a Ghost Behind the Gyaru
completed: true
- url: "https://mangadex.org/title/a892e04c-e20c-4fd3-9169-d620cee8dbd4/my-divorced-crybaby-neighbour"
name: My Divorced Crybaby Neighbour
- url: "https://mangadex.org/title/4088c3cc-6be2-4fb6-80b5-8d8606f00196/shinka-no-mi"
name: Shinka no Mi
- url: "https://mangadex.org/title/835feda4-2db0-4753-8249-4575a3ceffe2/kenja-no-mago"
volume: true
name: Kenja no Mago
- url: "https://mangadex.org/title/08a25bd7-ce34-4630-8552-b93fe16852d9/time-stop-brave"
name: Time Stop Brave
- url: "https://mangadex.org/title/eba602f3-5e5d-48ff-b054-d7776181e27c/akazukin-no-ookami-deshi"
name: Akazukin no Ookami Deshi
- url: "https://mangadex.org/title/7ce22c9e-5939-435e-b067-64ce659bb3b3/hazure-skill-gacha-de-tsuihou-sareta-ore-wa-wagamama-osananajimi-wo-zetsuen-shi-kakusei-suru"
name: Hazure Skill “Gacha” de Tsuihou Sareta Ore wa, Wagamama Osananajimi wo Zetsuen Shi Kakusei Suru
- url: "https://mangadex.org/title/cc121572-858e-4bd2-b5f3-ef505eca0081/hazure-skill-kage-ga-usui-o-motsu-guild-shokuin-ga-jitsuha-densetsu-no-ansatsusha"
name: Hazure Skill "Kage ga Usui" o Motsu Guild Shokuin ga, Jitsuha Densetsu no Ansatsusha
- url: "https://mangadex.org/title/1d44fa52-e344-42bd-9182-7b5887e1fe2c/i-became-the-mother-of-the-strongest-demon-lord-s-10-children-in-another-world"
name: I Became the Mother of the Strongest Demon Lord's 10 Children in Another World.
volume: true
- url: "https://mangadex.org/title/bc94b9a7-e17e-4a00-be92-882ba520cb85/youjo-shachou"
name: Youjo Shachou
volume: true
- url: "https://mangadex.org/title/0d8da574-3a62-48a8-aad2-05225160b1a6/one-piece-in-love"
name: One Piece in Love
- url: "https://mangadex.org/title/8f22b5ff-2d76-4f5d-9b35-7969de2dc66d/amagi-brilliant-park"
name: Amagi Brilliant Park
volume: true
- url: "https://mangadex.org/title/a971a398-192c-457d-b803-78b029fb3c7f/reki-yomi"
name: Reki Yomi
volume: true
- url: https://mangadex.org/title/607f0bbc-e36d-46af-9efd-b74a40cbbe9d/homeless-tensei-isekai-de-jiyuu-sugiru-jikyuu-jisoku-seikatsu
name: "Homeless Tensei: Isekai de Jiyuu Sugiru Jikyuu Jisoku Seikatsu"
- url: "https://mangadex.org/title/bd29a3d0-9551-45e3-b1ac-941214e535b5/heterogeneous-linguistics"
name: Heterogeneous Linguistics
- url: "https://mangadex.org/title/6057cba5-2300-4579-9acd-f19efd150270/yankee-shota-to-otaku-onee-san"
name: Yankee Shota to Otaku Onee-san
volume: true
- url: https://mangadex.org/title/843c31ff-d390-4199-bc3b-94b0dfc63632/baki-gaiden-retsu-kaioh-isekai-tensei-shitemo-ikk-kamawan
name: "Baki Gaiden - Retsu Kaioh Isekai Tensei Shitemo Ikkō Kamawan!"
- url: "https://mangadex.org/title/ffe69cc2-3f9e-4eab-a7f7-c963cea9ec25/lonely-attack-on-a-different-world"
name: Lonely Attack on a Different World
volume: true
- url: "https://mangadex.org/title/ec514ef4-fb77-43b9-b9b4-528229de1308/enen-no-shouboutai"
name: Enen no Shouboutai
volume: true
- url: "https://mangadex.org/title/70fe972b-3c88-4165-b9a5-3db96d6d2c14/shikkaku-mon-no-saikyou-kenja-sekai-saikyou-no-kenja-ga-sara-ni-tsuyokunaru-tame-ni-tensei"
name: "Shikkaku Mon no Saikyou Kenja - Sekai Saikyou no Kenja ga Sara ni Tsuyokunaru Tame ni Tensei Shimashita"
- url: "https://mangadex.org/title/c2b32bf8-5015-4ef0-9bbf-a4e63033dabb/senmetsumadou-no-saikyou-kenja-musai-no-kenja-madou-wo-kiwame-saikyou-e-itaru"
name: "Senmetsumadou no Saikyou Kenja: Musai no Kenja, Madou wo Kiwame Saikyou e Itaru"
volume: true
- url: "https://mangadex.org/title/b4615bd9-7cbd-4243-a8a2-5c24671663e0/yajin-tensei-karate-survivor-in-another-world"
name: "Yajin Tensei: Karate Survivor in Another World"
- url: "https://mangadex.org/title/08a25bd7-ce34-4630-8552-b93fe16852d9/jikan-teishi-yuusha-yomei-3-ka-no-settei-ja-sekai-wo-sukuu-ni-wa-mijika-sugiru"
name: "Jikan Teishi Yuusha - Yomei 3-ka no Settei ja Sekai wo Sukuu ni wa Mijika Sugiru"
- url: "https://mangadex.org/title/42603601-3659-430f-8306-ca703a884afe/uso-bitch-senpai?tab=chapters"
name: "Uso-Bitch Senpai"
- url: "https://mangadex.org/title/310d5beb-79fd-4a48-a028-95a016307efb/busted-darklord"
name: "Busted! Darklord"
- url: "https://mangadex.org/title/e0f2c98b-759d-4a86-8a73-7ed110eb32e3/elf-to-shuryoushi-no-item-koubou"
name: "Elf to Shuryoushi no Item Koubou"
volume: true
- url: "https://mangadex.org/title/c4c04636-3774-4f39-8424-e1aef59ac6ff/the-mermaid-princess-s-guilty-meal"
name: "The Mermaid Princess's Guilty Meal"
volume: true
- name: "The Girl, the Shovel, and the Evil Eye"
url: "https://mangadex.org/title/57b8b608-1026-4cab-ad6a-28d796eca663/the-girl-the-shovel-and-the-evil-eye"
- name: "The Exiled Reincarnated Heavy Knight Is Unrivaled in Game Knowledge"
url: "https://mangadex.org/title/7c5ee2ae-5bed-4e72-8d75-91e3b8e9787a/the-exiled-reincarnated-heavy-knight-is-unrivaled-in-game-knowledge"
- name: "Kage no Jitsuryokusha ni Naritakute"
url: "https://mangadex.org/title/77bee52c-d2d6-44ad-a33a-1734c1fe696a/kage-no-jitsuryokusha-ni-naritakute?tab=chapters"
volume: true
- name: "Vampeerz"
url: "https://mangadex.org/title/c431712b-231c-4d25-85fa-7ca6bf460f15/vampeerz"
volume: true
- name: "The Maid Who Can't Hide Her Feelings (Pre-serialization)"
url: "https://mangadex.org/title/9b2e2852-2dff-4797-bc51-c18fac8b181e/the-maid-who-can-t-hide-her-feelings-pre-serialization"
- name: "Tensei Shitara Ken Deshita"
url: "https://mangadex.org/title/77fd8118-61b0-4b1f-95a6-2b839d754f81/tensei-shitara-ken-deshita"
volume: true
- name: "Zombie 100 ~Zombie ni Naru Made ni Shitai 100 no Koto~"
url: "https://mangadex.org/title/efd02206-1cd8-4823-b497-02bb8b8d09ca/zombie-100-zombie-ni-naru-made-ni-shitai-100-no-koto"
volume: true
- name: "Orc Hero Story - Discovery Chronicles"
url: "https://mangadex.org/title/cc1fc741-8ba5-4a18-9843-5d59d8a98d0d/orc-hero-story-discovery-chronicle"
- name: "Dungeon no Osananajimi"
url: "https://mangadex.org/title/8572da1b-3b5d-44aa-a40c-8a92b512c336/dungeon-no-osananajimi"
- name: "Shinmai Ossan Bouken-sha, Saikyou paati ni shinu hodo kitae rarete Muteki ni naru"
url: "https://mangadex.org/title/a2320293-f00e-43a0-8d08-1110cf26a894/shinmai-ossan-bouken-sha-saikyou-paati-ni-shinu-hodo-kitae-rarete-muteki-ni-naru"
- name: "JoJo's Bizarre Adventure Part 9 - The JOJOLands"
url: "https://mangadex.org/title/ab8cbb82-d0ed-45a7-8ffe-4bfa6d43d79c/jojo-s-bizarre-adventure-part-9-the-jojolands"
- name: "Ore no Kokan wa Bishoujo Datta no ka"
url: "https://mangadex.org/title/cf923481-1e96-4959-b3c1-9518718a4cc2/ore-no-kokan-wa-bishoujo-datta-no-ka"
- name: "Yuko Sae Tatakaeba"
url: "https://mangadex.org/title/e750ebbd-e54a-412c-92d0-e3c183692527/yuko-sae-tatakaeba"
volume: true
- url: "https://mangadex.org/title/daa29882-e5c4-4d24-8dc9-efb407a9e84b/tonari-no-seki-kun-junior?tab=chapters"
name: "Tonari no Seki-kun Junior"
volume: true
- url: "https://mangadex.org/title/5896e05d-3900-4947-baf8-403a9d8fa5ec/nick-lever"
name: "Nick & Lever"
volume: true
- url: "https://mangadex.org/title/71c05dbe-2012-4a7b-bc22-4970b7d0afc4/ani-to-imouto-no-shitai-shitai-shitai-koto"
name: "Ani to Imouto no Shitai Shitai Shitai Koto"

125
script/Pictures/manga/update.sh Executable file
View file

@ -0,0 +1,125 @@
#!/usr/bin/env sh
normal=$(tput sgr0) # normal text
bold=$(tput bold) # make colors bold/bright
purple=$(tput setaf 5); # magenta text
pink="$bold$purple" # bright magenta text
darkcyan=$(tput setaf 6) # dim cyan text
cyan="$bold$darkcyan" # bright cyan text
#red="$bold$(tput setaf 1)" # bright red text
#green=$(tput setaf 2) # dim green text
#fawn=$(tput setaf 3); beige="$fawn" # dark yellow text
#yellow="$bold$fawn" # bright yellow text
#darkblue=$(tput setaf 4) # dim blue text
#blue="$bold$darkblue" # bright blue text
#gray=$(tput setaf 7) # dim white text
#darkgray="$bold"$(tput setaf 0) # bold black = dark gray text
#white="$bold$gray" # bright white text
MANGA_DIR="$HOME/Pictures/manga/mangadex"
# IN: text color icon
pprint() {
color=${2:-$cyan}
icon=${3:-" "}
echo "${color}${icon} ${1}${normal}"
}
# progress() {
# CHAPTER_ID=1234
# curl -xPOST "https://mangadex.org/ajax/actions.ajax.php?function=chapter_mark_read&id=$CHAPTER_ID"
# # Unselect: curl -xPOST "https://mangadex.org/ajax/actions.ajax.php?function=chapter_mark_unread&id=$CHAPTER_ID"
# }
# IN: .dir
# OUT: [string] last chapter
chapter() {
result=$(find "$1" -mindepth 1 -type d | sed -rn 's/.*c([0-9]+).*/\1/p' | sort | tail -n1)
[ -n "$result" ] && echo "$result" || echo 0
}
# IN: .dir
# OUT: [string] last volume
volume() {
result=$(find "$1" -mindepth 1 -type d | sed -rn 's/.*v([0-9]+).*/\1/p' | sort | tail -n1)
[ -n "$result" ] && echo "$result" || echo 0
}
# IN: .url
# OUT: [string] title code
titlecode() {
echo "$1" | sed 's#.*title/\([0-9a-z-]*\).*#\1#g'
}
# IN: .dir .url
cover() {
DIRECTORY="$1"
TITLE_CODE="$(titlecode "$2")"
for folder in "$DIRECTORY/"*/
do
folder=$(echo "$folder" | sed 's#/$##')
VOLUME=$(echo "$folder" | sed -e 's#.*v\([0-9]*\).*#\1#' -e 's/^0//' | bc)
COVER="$folder/000-cover.jpg"
[ ! -f "$COVER" ] && [ "$VOLUME" -ge 0 ] && curl -s -o "$COVER" "https://uploads.mangadex.org//covers/${TITLE_CODE}/$(curl -s "https://api.mangadex.org/cover?manga[]=${TITLE_CODE}&limit=100" | jq -r ".data[].attributes | select(.volume == \"${VOLUME}\") | .fileName")"
[ "$(file -b --mime-type "$COVER")" = "text/html" ] && rm "$COVER"
done
}
# IN: .dir .url
bookshelf() {
pprint "Generating volumes shortcuts..." "$pink" "└── "
DIRECTORY="$1"
VOLUME=$(volume "$1")
TITLE="$(basename "$DIRECTORY")"
URL="$2"
fish -c "mkdir -p \"$DIRECTORY/$TITLE\"\ v{(seq -s',' -w \"$VOLUME\")}"
seq -w "$VOLUME" | xargs -I% fish -c "mv \"$DIRECTORY/\"v%* \"$DIRECTORY/$TITLE\"\ v%" 2>/dev/null
cover "$DIRECTORY" "$URL"
fish -c "add_manga \"$DIRECTORY\""
}
# title() {
# gallery-dl -j "$1" | jq -rc '(.[] | reverse)[0].manga' | head -n1
# }
# IN: .dir .url .group .refetch .volume
update() {
VOLUME=0 LAST_CHAPTER=0 GROUP_OPTION="" PREFIX="└── "
[ "$5" = "true" ] && PREFIX="├── "
[ "$4" != "true" ] && VOLUME=$(volume "$1" | bc) LAST_CHAPTER=$(chapter "$1" | bc)
[ "$3" != "" ] && [ "$3" != "null" ] && GROUP_OPTION=" and ($3) in group"
pprint "v$VOLUME c$LAST_CHAPTER" "$pink" "$PREFIX"
CHAPTER_FILTER="lang == 'en' and chapter > $LAST_CHAPTER$GROUP_OPTION"
# echo "gallery-dl -d . \"$2\" --chapter-filter \"$CHAPTER_FILTER\""
gallery-dl -d . "$2" --chapter-filter "$CHAPTER_FILTER"
[ "$5" = "true" ] && bookshelf "$1" "$2"
}
_manga() {
pprint "Updating chapters from group $1..." "$bold"
list=$(yq -cr ."$1[]" "$HOME/Pictures/manga/manga.yaml" | grep "$2" | jq -r '. | @base64')
for row in $list; do
_jq() {
echo "${row}" | base64 --decode | jq -r "${1}"
}
packageurl=$(_jq '.url')
packagename=$(_jq '.name')
packagegroup=$(_jq '.group')
packagerefetch=$(_jq '.refetch')
packagecompleted=$(_jq '.completed')
packagehiatus=$(_jq '.hiatus')
packagevolume=$(_jq '.volume')
packagedir="$MANGA_DIR/$packagename"
pprint "Updating $packagename..." "$cyan" " "
{ [ "$packagecompleted" = "true" ] || [ "$packagehiatus" = "true" ]; } || update "$packagedir" "$packageurl" "$packagegroup" "$packagerefetch" "$packagevolume"
done
}
main() {
[ ! -x "/bin/yq" ] && sudo xbps-install -S yq jq
_manga "mangadex" "$@"
}
main "$@"

View file

@ -0,0 +1,483 @@
---
# vi: set ft=yaml :
# List of feeds to watch.
feeds:
# - url: https://nyaa.si/?page=rss&q=erai+Ore+dake+Haireru+Kakushi+Dungeon+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=erai+Dragon+Quest+-+Dai+no+Daibouken+1080&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Dragon Quest - Dai no Daibouken"
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+Hataraku+Saibou+Black+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+hataraku+saibou%21%21+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!v0).)*$
# - url: https://nyaa.si/?page=rss&q=rom+rem+kaifuku+1080+uncensored&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+yuru+camp+season+2+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+tatoeba+last+dungeon+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=non+non+biyori+erai+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+Azur+Lane+Bisoku+Zenshin+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=subsplease+Urasekai+Picnic+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=entame+yu-gi-oh&c=1_2&f=0
# download_path: "/home/jojo/Videos/Yu-Gi-Oh! SEVENS"
# regexp: (Episode\s[3-9]\d\s)
# - url: https://nyaa.si/?page=rss&q=erai+1080+Tenchi+Souzou+Design&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=molcar+carsplease+mkv&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+Majo+no+Tabitabi+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+slime+2nd+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=horrible+Sakamoto+Desu+ga+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=slime+1080p+oad+erai&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=erai+otona+no+bouguya-san+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=thunderbolt+fantasy+deepest+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=+dragon+ie+o+kau+erai+1080&c=0_0&f=0
# regexp: ^((?!HEVC).)*$
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=tensura+slime+datta+ken+1080+erai&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+slime+300+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+isekai+maou+omega+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+sentouin+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+1080+Seijo+no+Maryoku+wa+Bannou+Desu&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+1080+Fumetsu+no+Anata+e&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=zombieland+1080+subs&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=iruma+erai+2nd+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=erai+1080+dragon+mini&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!HEVC).)*$
# - url: https://nyaa.si/?page=rss&q=nagatoro+1080+rom&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=tensei+slime+hollow&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=otome+game+X+chihiro+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=DameDesuYo+Kobayashi-san+Chi+no+Maid+Dragon+S&c=0_0&f=0
# regexp: Kobayashi-san Chi no Maid Dragon S
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=subsplease+Tsuki+ga+Michibiku+Isekai+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=subsplease+cheat+kusushi+no+slow+life+1080&c=1_2&f=
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=Megami-ryou+nyanpasu+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=Seirei+Gensouki+1080+erai&c=1_2&f=0
# download_path: /home/jojo/Videos
- url: "https://nyaa.si/?page=rss&q=jahy+sama+GJM&c=1_2&f=0"
download_path: "/home/jojo/Videos/Jahy-sama wa Kujikenai!"
# - url: https://nyaa.si/?page=rss&q=ODD+Shinigami+Bocchan+to+Kuro+Maid&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=erai+Meikyuu+Black+Company+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=Heion+Sedai+no+Idaten-tachi+erai+1080&c=1_2&f=0
# download_path: "/home/jojo/Videos/Heion Sedai no Idaten-tachi"
# - url: https://nyaa.si/?page=rss&q=machiavellian+Genjitsu+Shugi+Yuusha+no+Oukoku+1080&c=0_0&f=0
# download_path: "/home/jojo/Videos/Genjitsu Shugi Yuusha no Oukoku Saikenki"
# - url: https://nyaa.si/?page=rss&q=Deatte+5-byou+de+Battle+1080+subsplease&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=kuro+maid+erai+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!v0).)*$
# - url: https://nyaa.si/?page=rss&q=akari+nanawo&c=2_1&f=0
# download_path: /home/jojo/Music
# - url: https://nyaa.si/?page=rss&q=erai+Genjitsu+Shugi+Yuusha+no+Oukoku+Saikenki+1080&c=0_0&f=
# download_path: /home/jojo/Videos
# regexp: ^((?!v0).)*$
# # Fall 2021
# - url: https://nyaa.si/?page=rss&q=Heike+Monogatari+1080+erai&c=0_0&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!v0).)*$
# - url: https://nyaa.si/?page=rss&q=subsplease+Kyuuketsuki+sugu+shinu+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=shinka+no+mi+1080+subsplease&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=subsplease+isekai+shokudou+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=mieruko+nekomimi+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=MTBB+mushoku+v2&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=Taishou+Otome+1080+subsplease&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=jnzngn+Takt+Op.+Destiny+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=Saihate+no+Paladin+subsplease+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=Shin+no+Nakama+1080+subsplease&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=subsplease+saihate+no+paladin+1080&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=hanashi+1080+subsplease&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=ganbare+douki+1080+erai&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: "https://nyaa.si/?page=rss&q=king+ousama+ranking+1080p+mkv&c=0_0&f=0"
# download_path: /home/jojo/Videos/Ousama Ranking
# - url: https://nyaa.si/?page=rss&q=erai+Mushoku+Tensei+2nd+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# regexp: ^((?!v0).)*$
# - url: https://nyaa.si/?page=rss&q=anime+chap+stone+ocean&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=daddy+kimetsu+entertainment&c=0_0&f=0
# download_path: "/home/jojo/Videos/Kimetsu no Yaiba"
# - url: https://nyaa.si/?page=rss&q=PQC+Sekai+Saikou+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=official+translated+LN&c=0_0&f=0
# download_path: /home/jojo/Books
# - url: https://nyaa.si/?page=rss&q=jnzngn+ansatsu+kizoku&c=0_0&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=nosferatu+erai+1080&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=mtbb+mushoku+tensei&c=1_2&f=0
# download_path: /home/jojo/Videos
# - url: https://nyaa.si/?page=rss&q=NovaWorks+komi+san&c=1_2&f=0
# regexp: ^((?!AnonymousSubs).)*$
# download_path: "/home/jojo/Videos/Komi Can't Communicate"
# - url: https://nyaa.si/?page=rss&q=Leadale+no+Daichi+nite+1080+erai&c=0_0&f=0
# download_path: "/home/jojo/Videos/Leadale no Daichi nite"
# - url: https://nyaa.si/?page=rss&q=Shikkakumon+no+Saikyou+Kenja+1080+subsplease&c=0_0&f=0
# download_path: "/home/jojo/Videos/Shikkakumon no Saikyou Kenja"
# - url: https://nyaa.si/?page=rss&q=erai+princess+connect+season+2+1080&c=0_0&f=0
# download_path: "/home/jojo/Videos/Princess Connect! Re-Dive S2"
# - url: https://nyaa.si/?page=rss&q=Kaijin+Kaihatsubu+no+Kuroitsu-san+erai+1080&c=0_0&f=0
# download_path: "/home/jojo/Videos/Kaijin Kaihatsu-bu no Kuroitsu-san"
# - url: https://nyaa.si/?page=rss&q=sabikui+bisco+1080+erai&c=0_0&f=0
# download_path: "/home/jojo/Videos/Sabikui Bisco"
# - url: https://nyaa.si/?page=rss&q=+Gensou+Sangokushi+1080+erai&c=0_0&f=0
# download_path: "/home/jojo/Videos/Gensou Sangokushi"
# - url: https://nyaa.si/?page=rss&q=Kenja+no+Deshi+1080+erai&c=0_0&f=0
# download_path: "/home/jojo/Videos/Kenja no Deshi wo Nanoru Kenja"
# - url: https://nyaa.si/?page=rss&q=+Tensai+Ouji+no+Akaji+1080+erai&c=0_0&f=0
# download_path: "/home/jojo/Videos/Tensai Ouji no Akaji Kokka Saiseijutsu"
# - url: https://nyaa.si/?page=rss&q=Fantasy+Bishoujo+Juniku+Ojisan+to+1080+erai&c=0_0&f=0
# download_path: "/home/jojo/Videos/Fantasy Bishoujo Juniku Ojisan to"
# Spring 2022
# - url: https://nyaa.si/?page=rss&q=cue+erai+1080&c=1_2&f=0
# download_path: "/home/jojo/Videos/Cue!"
- url: "https://nyaa.si/?page=rss&q=sono+bisque+gjm&c=1_2&f=0"
download_path: "/home/jojo/Videos/Sono Bisque Doll wa Koi wo Suru"
# # - url: https://nyaa.si/?page=rss&q=slow+loop+loopsub&c=0_0&f=0
# # download_path: "/home/jojo/Videos/Slow Loop"
# - url: https://nyaa.si/?page=rss&q=Atasha+Kawajiri+Kodama+da+yo+erai+1080&c=0_0&f=0
# download_path: "/home/jojo/Videos/Atasha Kawajiri Kodama Da yo"
# - url: https://nyaa.si/?page=rss&q=tsundere+vanitas+no+carte+vostfr+mkv+1080&c=0_0&f=0
# download_path: "/home/jojo/Videos/Vanitas no Carte"
# - url: "https://nyaa.si/?page=rss&q=busted+darklord+nc+raws&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Busted! Darklord"
# - url: "https://nyaa.si/?page=rss&q=cyan+Akebi-chan+no+Sailor-fuku&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Akebi-chan no Sailor-fuku"
# - url: "https://nyaa.si/?page=rss&q=erai+raws+bessatsu+olympia+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Bessatsu Olympia Kyklos"
# - url: "https://nyaa.si/?page=rss&q=Paripi+Koumei+anime+chap+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Paripi Koumei"
# - url: "https://nyaa.si/?page=rss&q=chihiro+Shokei+Shoujo+no+Virgin+Road+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Shokei Shoujo no Virgin Road"
# - url: "https://nyaa.si/?page=rss&q=Otome+Game+Sekai+wa+Mob+ni+Kibishii+Sekai+desu+1080+judas&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Otomege Sekai wa Mob ni Kibishii Sekai Desu"
# - url: "https://nyaa.si/?page=rss&q=Aharen-san+wa+Hakarenai+1080+erai&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Aharen-san wa Hakarenai"
# - url: "https://nyaa.si/?page=rss&q=Yuusha+Yamemasu+subsplease+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Yuusha Yamemasu"
# - url: "https://nyaa.si/?page=rss&q=shijou+Saikyou+no+Daimaou+erai+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Shijou Saikyou no Daimaou Murabito A ni Tensei suru"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Deaimon+erai+raws+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Deaimon"
# - url: "https://nyaa.si/?page=rss&q=RPG+Fudousan+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/RPG Fudousan"
# - url: "https://nyaa.si/?page=rss&q=Gaikotsu+Kishi-sama+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Gaikotsu Kishi-sama"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Shachiku-san+wa+Youjo+Yuurei+ni+Iyasaretai+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Shachiku-san wa Youjo Yuurei ni Iyasaretai"
# - url: "https://nyaa.si/?page=rss&q=Estab-Life+1080+subsplease&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Estab-Life"
# - url: "https://nyaa.si/?page=rss&q=Koi+wa+Sekai+Seifuku+no+Ato+de+erai+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Koi wa Sekai Seifuku no Ato de"
# - url: "https://nyaa.si/?page=rss&q=loopsubs+mazoku&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Machikado Mazoku S2"
# - url: "https://nyaa.si/?page=rss&q=kono+healer+1080+subsplease&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Kono Healer Mendokusai"
# - url: "https://nyaa.si/?page=rss&q=Kunoichi+Tsubaki+no+Mune+no+Uchi+anime+chap&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Kunoichi Tsubaki no Mune no Uchi"
# - url: "https://nyaa.si/?page=rss&q=spy+x+family+anime+chap&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Spy x Family"
- url: "https://nyaa.si/?page=rss&q=go+rush+entamesubs&c=0_0&f=0"
download_path: "/home/jojo/Videos/Yu-Gi-Oh! GO RUSH"
# - url: "https://nyaa.si/?page=rss&q=onipan+erai+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Onipan!"
# - url: "https://nyaa.si/?page=rss&q=Mahoutsukai+Reimeiki+1080+subsplease&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Mahoutsukai Reimeiki"
# - url: "https://nyaa.si/?page=rss&q=Honzuki+no+Gekokujou+gjm&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Honzuki no Gekokujou"
# - url: "https://nyaa.si/?page=rss&q=space+dandy+commie&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Space Dandy"
# - url: "https://nyaa.si/?page=rss&q=jashin-chan+x+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Jashin-chan Dropkick X"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Tensei+Kenja+no+Isekai+Life+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Tensei Kenja no Isekai Life"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Isekai+yakkyoku+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Isekai Yakkyoku"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Warau+Arsnotoria+Sun+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Warau Arsnotoria Sun!"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Isekai+Meikyuu+de+Harem+wo+uncensored+mad&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Isekai Meikyuu de Harem wo"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=+Kinsou+no+Vermeil+1080+erai&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Kinsou no Vermeil"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=hataraku+maou-sama+erai+1080&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Hataraku Maou-sama"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Kuro+no+Shoukanshi+1080+erai&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Kuro no Shoukanshi"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Saikin+Yatotta+Maid+ga+Ayashii+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Saikin Yatotta Maid ga Ayashii"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Tensei+Shitara+Ken+Deshita+1080+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Tensei Shitara Ken Deshita"
- url: "https://nyaa.si/?page=rss&q=erai+Kage+no+Jitsuryokusha+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Kage no Jitsuryokusha ni Naritakute"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=futoku+no+guild+anime+chap&c=0_0&f=0"
download_path: "/home/jojo/Videos/Futoku no Guild"
# - url: "https://nyaa.si/?page=rss&q=Seiken+Densetsu+1080+erai&c=0_0&f=0"
# regexp: ^((?!HEVC).)*$
# download_path: "/home/jojo/Videos/Seiken Densetsu"
# - url: "https://nyaa.si/?page=rss&q=mob+psycho+1080+III+erai&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Mob Psycho 100 S3"
# regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=Akuyaku+Reijou+nanode+Last+Boss+wo+Kattemimashita+1080+anime+chap&c=1_2&f=0"
# download_path: "/home/jojo/Videos/Akuyaku Reijou nanode Last Boss wo Kattemimashita"
# - url: "https://nyaa.si/?page=rss&q=Noumin+Kanren+no+Skill+bakka+Agetetara+Nazeka+Tsuyoku+Natta+1080+subsplease&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Noumin Kanren no Skill bakka Agetetara Nazeka Tsuyoku Natta"
# - url: "https://nyaa.si/?page=rss&q=Yuusha+Party+wo+Tsuihou+sareta+Beast+Tamer+1080+judas&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Yuusha Party wo Tsuihou Sareta Beast Tamer"
- url: "https://nyaa.si/?page=rss&q=iruma+erai+3rd+1080&c=1_2&f=0"
download_path: "/home/jojo/Videos/Mairimashita! Iruma-kun S3"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=peter+grill+super+extra+jackie&c=0_0&f=0"
download_path: "/home/jojo/Videos/Peter Grill to Kenja no Jikan - Super Extra"
- url: "https://nyaa.si/?page=rss&q=bleach+sennen+kessen+nokiya&c=1_2&f=0"
download_path: "/home/jojo/Videos/Bleach"
- url: "https://nyaa.si/?page=rss&q=human+bug+daigaku+1080+erai&c=0_0&f=0"
download_path: "/home/jojo/Videos/Human Bug Daigaku"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=do+it+yourself+pizza&c=0_0&f=0"
download_path: "/home/jojo/Videos/Do it Yourself"
- url: "https://nyaa.si/?page=rss&q=urusei+yatsura+2022+1080+pizza&c=1_2&f=0"
download_path: "/home/jojo/Videos/Urusei Yatsura (2022)"
- url: "https://nyaa.si/?page=rss&q=Shinmai+Renkinjutsushi+no+Tenpo+Keiei+1080+erai&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/home/jojo/Videos/Shinmai Renkinjutsushi no Tenpo Keiei"
- url: "https://nyaa.si/?page=rss&q=moyaicars+molcar+driving&c=1_2&f=0"
download_path: "/home/jojo/Videos/Pui Pui Molcar Driving School"
- url: "https://nyaa.si/?page=rss&q=Uchi+no+Shishou+wa+Shippo+1080+erai&c=1_2&f=0"
download_path: "/home/jojo/Videos/Uchi no Shishou wa Shippo ga Nai"
regexp: ^((?!HEVC).)*$
# - url: "https://nyaa.si/?page=rss&q=bocchi+the+rock++gotch&c=1_2&f=0"
- url: "https://nyaa.si/?page=rss&q=bocchi+the+rock+erai+1080&c=1_2&f=0"
download_path: "/home/jojo/Videos/Bocchi the Rock"
- url: "https://nyaa.si/?page=rss&q=Akiba+Maid+Sensou+anime+chap&c=1_2&f=0"
download_path: "/home/jojo/Videos/Akiba Maid Sensou"
# - url: "https://nyaa.si/?page=rss&q=shi+cao+lao+1080+mkv&c=0_0&f=0"
# download_path: "/home/jojo/Videos/Shi Cao Lao Long Bei Guanyi E Long Zhi Ming"
- url: "https://nyaa.si/?page=rss&q=jojo+stone+ocean+inid4c&c=0_0&f=0"
download_path: "/home/jojo/Videos/JoJos Bizarre Adventure Stone Ocean"
- url: "https://nyaa.si/?page=rss&q=bocchi+kessoku+band&c=2_1&f=0"
download_path: "/home/jojo/Music"
# ANIME WINTER 2023
- url: "https://nyaa.si/?page=rss&q=bofuri+takanishi&c=0_0&f=0"
download_path: "/home/jojo/Videos/Bofuri"
- url: "https://nyaa.si/?page=rss&q=tensei+oujo+chihiro&c=0_0&f=0"
download_path: "/home/jojo/Videos/Tensei Oujo to Tensai Reijou no Mahou Kakumei"
- url: "https://nyaa.si/?page=rss&q=Erai-raws+Kyuuketsuki+Sugu+Shinu+2+1080+ENG&c=0_0&f=0"
download_path: "/home/jojo/Videos/Kyuuketsuki Sugu Shinu S2"
- url: "https://nyaa.si/?page=rss&q=tondemo+skill+de+isekai+hourou+meshi+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Tondemo Skill de Isekai Hourou Meshi"
- url: "https://nyaa.si/?page=rss&q=ningen+fushin+no+boukensha+1080+erai&c=0_0&f=0"
download_path: "/home/jojo/Videos/Ningen Fushin no Boukensha-tachi ga Sekai o Sukuu You Desu"
- url: "https://nyaa.si/?page=rss&q=Saikyou+Onmyouji+no+Isekai+Tenseiki+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Saikyou Onmyouji no Isekai Tenseiki"
- url: "https://nyaa.si/?page=rss&q=Saikyou+no+Minarai+Kishi+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Eiyuu Ou, Bu o Kiwameru Tame Tenseisu - Soshite, Sekai Saikyou no Minarai Kishi"
- url: "https://nyaa.si/?page=rss&q=benriya+saitou-san+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Benriya Saitou-san, Isekai ni Iku"
- url: "https://nyaa.si/?page=rss&q=oshimai+okay-subs&c=0_0&f=0"
download_path: "/home/jojo/Videos/Oniichan wa Oshimai!"
- url: "https://nyaa.si/?page=rss&q=Rougo+ni+Sonaete+Isekai+de+8-manmai+no+Kinka+o+Tamemasu+1080+erai&c=0_0&f=0"
download_path: "/home/jojo/Videos/Rougo ni Sonaete Isekai de 8-manmai no Kinka o Tamemasu"
- url: "https://nyaa.si/?page=rss&q=Isekai+Nonbiri+Nouka+erai+1080&c=1_2&f=0"
download_path: "/home/jojo/Videos/Isekai Nonbiri Nouka"
- url: "https://nyaa.si/?page=rss&q=erai+Kami-tachi+ni+Hirowareta+Otoko+2+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Kami-tachi ni Hirowareta Otoko S2"
- url: "https://nyaa.si/?page=rss&q=erai+no+Slow+na+Second+Life+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Kaiko Sareta Ankoku Heishi (30-dai) no Slow na Second Life"
- url: "https://nyaa.si/?page=rss&q=Maou+Gakuin+no+Futekigousha+II+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Maou Gakuin no Futekigousha II"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=Hyouken+no+Majutsushi+ga+Sekai+o+Suberu+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Hyouken no Majutsushi ga Sekai o Suberu"
- url: "https://nyaa.si/?page=rss&q=Tsundere+Akuyaku+Reijou+Liselotte+to+Jikkyou+no+Endou-kun+to+Kaisetsu+no+Kobayashi-san+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Tsundere Akuyaku Reijou Liselotte to Jikkyou no Endou-kun to Kaisetsu no Kobayashi-san"
- url: "https://nyaa.si/?page=rss&q=Otonari+no+Tenshi-sama+ni+Itsunomanika+Dame+Ningen+ni+Sareteita+Ken+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Otonari no Tenshi-sama ni Itsunomanika Dame Ningen ni Sareteita Ken"
- url: "https://nyaa.si/?page=rss&q=Kubo-san+wa+Boku+o+Yurusanai+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Kubo-san wa Boku o Yurusanai"
- url: "https://nyaa.si/?page=rss&q=tomo-chan+1080+erai&c=0_0&f=0"
download_path: "/home/jojo/Videos/Tomo-chan wa Onnanoko!"
- url: "https://nyaa.si/?page=rss&q=Koori+Zokusei+Danshi+to+Cool+na+Douryou+Joshi+erai+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Koori Zokusei Danshi to Cool na Douryou Joshi"
- url: "https://nyaa.si/?page=rss&q=nagatoro+2nd+bullysub&c=0_0&f=0"
download_path: "/home/jojo/Videos/Ijiranaide, Nagatoro-san 2nd Attack"
- url: "https://nyaa.si/?page=rss&q=inu+ni+nattara+suki+mgv&c=0_0&f=0"
download_path: "/home/jojo/Videos/Inu ni Nattara Suki na Hito ni Hirowareta"
- url: "https://nyaa.si/?page=rss&q=magical+destroyer+1080+otakuhero&c=1_2&f=0"
download_path: "/home/jojo/Videos/Mahou Shoujo Magical Destroyers"
- url: "https://nyaa.si/?page=rss&q=kuma+kuma+bear+s2+nines&c=1_2&f=0"
download_path: "/home/jojo/Videos/Kuma Kuma Kuma Bear Punch!"
- url: "https://nyaa.si/?page=rss&q=Kaminaki+Sekai+no+Kamisama+Katsudou+erai+1080&c=1_2&f=0"
download_path: "/home/jojo/Videos/Kaminaki Sekai no Kamisama Katsudou"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=Kawaisugi+Crisis+seigyoku&c=1_2&f=0"
download_path: "/home/jojo/Videos/Kawaisugi Crisis"
- url: "https://nyaa.si/?page=rss&q=Kono+Subarashii+Sekai+ni+Bakuen+wo%21+chihiro+1080&c=0_0&f=0"
download_path: "/home/jojo/Videos/Kono Subarashii Sekai ni Bakuen wo!"
- url: "https://nyaa.si/?page=rss&q=one+turn+kill+nee-san+1080+erai&c=1_2&f=0"
download_path: "/home/jojo/Videos/Isekai One Turn Kill Nee-san"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=Isekai+Shoukan+wa+Nidome+desu+1080+erai&c=1_2&f=0"
download_path: "/home/jojo/Videos/Isekai Shoukan wa Nidome Desu"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=Tensei+Kizoku+no+Isekai+Boukenroku+1080+erai&c=1_2&f=0"
download_path: "/home/jojo/Videos/Tensei Kizoku no Isekai Boukenroku - Jichou o Shiranai Kamigami no Shito"
regexp: ^((?!HEVC).)*$
- url: "https://nyaa.si/?page=rss&q=magical+destroyers+erai+1080&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/home/jojo/Videos/Mahou Shoujo Magical Destroyers"
- url: "https://nyaa.si/?page=rss&q=Edomae+Elf+1080+erai&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/home/jojo/Videos/Edomae Elf"
- url: "https://nyaa.si/?page=rss&q=rom+Isekai+wa+Smartphone+%222+-%22&c=0_0&f=0"
download_path: "/media/sakura/jojo/Videos/Isekai wa Smartphone to Tomo ni 2"
- url: "https://nyaa.si/?page=rss&q=vending+machine+judas&c=0_0&f=0"
download_path: "/media/sakura/jojo/Videos/Reborn as a Vending Machine, I Now Wander the Dungeon"
- url: "https://nyaa.si/?page=rss&q=Mushoku+Tensei+Jobless+Reincarnation+S2+mtbb&c=1_2&f=0"
download_path: "/media/sakura/jojo/Videos/Mushoku Tensei Jobless Reincarnation"
- url: "https://nyaa.si/?page=rss&q=+Level+1+Dakedo+Unique+Skill+de+Saikyou+Desu+erai+1080&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Level 1 Dakedo Unique Skill de Saikyou Desu"
- url: "https://nyaa.si/?page=rss&q=helck+1080+subsplease&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Helck"
- url: "https://nyaa.si/?page=rss&q=wrathmonth+lastame&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/The Most Heretical Last Boss Queen: From Villainess to Savior"
- url: "https://nyaa.si/?page=rss&q=Shinigami+Bocchan+to+Kuro+Maid+2nd+1080+&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Shinigami Bocchan to Kuro Maid 2"
- url: "https://nyaa.si/?page=rss&q=Lv1+Maou+to+One+Room+Yuusha+1080+erai&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Lv1 Maou to One Room Yuusha"
- url: "https://nyaa.si/?page=rss&q=shangri+la+frontier+1080+erai&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Shangri-La Frontier"
- url: "https://nyaa.si/?page=rss&q=Toaru+Ossan+erai+1080&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Toaru Ossan no VRMMO Katsudou Ki"
- url: "https://nyaa.si/?page=rss&q=Dekoboko+Majo+no+Oyako+Jijou+erai+1080&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Dekoboko Majo no Oyako Jijou"
- url: "https://nyaa.si/?page=rss&q=potion+danomi+erai+1080&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Potion-danomi de Ikinobimasu!"
- url: "https://nyaa.si/?page=rss&q=Hyakkano+1080+erai&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Hyakkano"
- url: "https://nyaa.si/?page=rss&q=Tearmoon+1080+erai&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Tearmoon Teikoku Monogatari"
- url: "https://nyaa.si/?page=rss&q=undead+unluck+1080+breeze&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Undead Unluck"
- url: "https://nyaa.si/?page=rss&q=Watashi+no+Oshi+wa+Akuyaku+Reijou+erai+1080&c=0_0&f=0"
regexp: ^((?!v0).)*$
download_path: "/media/sakura/jojo/Videos/Watashi no Oshi wa Akuyaku Reijou"
- url: "https://nyaa.si/?page=rss&q=Kikansha+no+Mahou+wa+Tokubetsu+desu+erai+1080&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Kikansha no Mahou wa Tokubetsu Desu"
- url: "https://nyaa.si/?page=rss&q=Saihate+no+Paladin%3A+Tetsusabi+no+Yama+no+Ou+erai+1080&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Saihate no Paladin - Tetsusabi no Yama no Ou"
- url: "https://nyaa.si/?page=rss&q=dark+gathering+elainaya&c=1_2&f=0"
download_path: "/media/sakura/jojo/Videos/Dark Gathering"
- url: "https://nyaa.si/?page=rss&q=buta+no+liver+erai+1080&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Buta no Liver wa Kanetsu Shiro"
- url: "https://nyaa.si/?page=rss&q=kamierabi+1080+erai&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Kamierabi"
- url: "https://nyaa.si/?page=rss&q=spy+x+family+season+2+1080+erai&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Spy x Family Season 2"
- url: "https://nyaa.si/?page=rss&q=Ikenaikyo+1080+erai&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Ikenaikyo"
- url: "https://nyaa.si/?page=rss&q=Yuzuki-san+Chi+no+Yonkyoudai+1080+subsplease+1080&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Yuzuki-san Chi no Yonkyoudai"
- url: "https://nyaa.si/?page=rss&q=Boushoku+no+Berserk+1080+erai&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Boushoku no Berserk"
- url: "https://nyaa.si/?page=rss&q=Hikikomari+Kyuuketsuki+no+Monmon+chihiro&c=0_0&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Hikikomari Kyuuketsuki no Monmon"
- url: "https://nyaa.si/?page=rss&q=Nozomanu+Fushi+no+Boukensha+1080+erai&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Nozomanu Fushi no Boukensha"
- url: "https://nyaa.si/?page=rss&q=Sasaki+to+Pii-chan+1080+subsplease&c=1_2&f=0"
regexp: ^((?!HEVC).)*$
download_path: "/media/sakura/jojo/Videos/Sasaki to Pii-chan"

5
script/bin/album.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/sh
find . -maxdepth 1 -type d | while read -r i;do
find "$i" -maxdepth 1 -iregex '.*\.\(jpg\|png\)' | sort | head -n1
done | sxiv -qito | cut -d'/' -f2 | xargs -rI{} sxiv -qr {} &>/dev/null

23
script/bin/bspwm_resize Executable file
View file

@ -0,0 +1,23 @@
#!/usr/bin/env dash
#
# easier resizing with bspwm
#
# wm key bindings
# set step
if bspc query -N -n focused.floating > /dev/null; then
step=20
else
step=100
fi
case "$1" in
west) dir=right; falldir=left; x="-$step"; y=0;;
east) dir=right; falldir=left; x="$step"; y=0;;
north) dir=top; falldir=bottom; x=0; y="-$step";;
south) dir=top; falldir=bottom; x=0; y="$step";;
esac
bspc node -z "$dir" "$x" "$y" || bspc node -z "$falldir" "$x" "$y"
# vim: ft=sh

13
script/bin/bspwmrc Executable file
View file

@ -0,0 +1,13 @@
#!/usr/bin/env sh
# source the colors.
. "${HOME}/.cache/wal/colors.sh"
# Set the border colors.
bspc config normal_border_color "$color1"
bspc config active_border_color "$color2"
bspc config focused_border_color "$color15"
# Use the line below if you are on bspwm >= 0.9.4
bspc config presel_feedback_color "$color1"
cd "$HOME/.cache/wal" && plasma-theme -c MoeDarkCustom.colors -w qt5ct-style || exit

3
script/bin/dmenu Executable file
View file

@ -0,0 +1,3 @@
#!/usr/bin/env sh
rofi -dmenu -fullscreen -p "󰮫 Menu" "$1"

127
script/bin/epub-thumbnailer Executable file
View file

@ -0,0 +1,127 @@
#!/usr/bin/python
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Author: Mariano Simone (http://marianosimone.com)
# Version: 1.0
# Name: epub-thumbnailer
# Description: An implementation of a cover thumbnailer for epub files
# Installation: see README
import os
import re
from io import BytesIO
import sys
from xml.dom import minidom
try:
from urllib.request import urlopen
except ImportError: # Python 2
from urllib import urlopen
import zipfile
try:
from PIL import Image
except ImportError:
import Image
img_ext_regex = re.compile(r'^.*\.(jpg|jpeg|png)$', flags=re.IGNORECASE)
cover_regex = re.compile(r'.*cover.*\.(jpg|jpeg|png)', flags=re.IGNORECASE)
def get_cover_from_manifest(epub):
# open the main container
container = epub.open("META-INF/container.xml")
container_root = minidom.parseString(container.read())
# locate the rootfile
elem = container_root.getElementsByTagName("rootfile")[0]
rootfile_path = elem.getAttribute("full-path")
# open the rootfile
rootfile = epub.open(rootfile_path)
rootfile_root = minidom.parseString(rootfile.read())
# find possible cover in meta
cover_id = None
for meta in rootfile_root.getElementsByTagName("meta"):
if meta.getAttribute("name") == "cover":
cover_id = meta.getAttribute("content")
break
# find the manifest element
manifest = rootfile_root.getElementsByTagName("manifest")[0]
for item in manifest.getElementsByTagName("item"):
item_id = item.getAttribute("id")
item_properties = item.getAttribute("properties")
item_href = item.getAttribute("href")
item_href_is_image = img_ext_regex.match(item_href.lower())
item_id_might_be_cover = item_id == cover_id or ('cover' in item_id and item_href_is_image)
item_properties_might_be_cover = item_properties == cover_id or ('cover' in item_properties and item_href_is_image)
if item_id_might_be_cover or item_properties_might_be_cover:
return os.path.join(os.path.dirname(rootfile_path), item_href)
return None
def get_cover_by_filename(epub):
no_matching_images = []
for fileinfo in epub.filelist:
if cover_regex.match(fileinfo.filename):
return fileinfo.filename
if img_ext_regex.match(fileinfo.filename):
no_matching_images.append(fileinfo)
return _choose_best_image(no_matching_images)
def _choose_best_image(images):
if images:
return max(images, key=lambda f: f.file_size)
return None
def extract_cover(cover_path):
if cover_path:
cover = epub.open(cover_path)
im = Image.open(BytesIO(cover.read()))
im.thumbnail((size, size), Image.ANTIALIAS)
if im.mode == "CMYK":
im = im.convert("RGB")
im.save(output_file, "PNG")
return True
return False
# Which file are we working with?
input_file = sys.argv[1]
# Where do does the file have to be saved?
output_file = sys.argv[2]
# Required size?
size = int(sys.argv[3])
# An epub is just a zip
if os.path.isfile(input_file):
file_url = open(input_file, "rb")
else:
file_url = urlopen(input_file)
epub = zipfile.ZipFile(BytesIO(file_url.read()), "r")
extraction_strategies = [get_cover_from_manifest, get_cover_by_filename]
for strategy in extraction_strategies:
try:
cover_path = strategy(epub)
if extract_cover(cover_path):
exit(0)
except Exception as ex:
print("Error getting cover using %s: " % strategy.__name__, ex)
exit(1)

202
script/bin/mixer Executable file
View file

@ -0,0 +1,202 @@
#!/usr/bin/env sh
###########################################
# Displays audio sinks and control volume #
###########################################
sink="$HOME/.cache/mixer/sink"
# list options
help() {
echo "Usage: mixer COMMAND [OPTION] - Display audio sinks and control volume
 listen [monitor events and display current sink volume]
├── --color=color2 [xrdb foreground color]
└── --volume-icons=\"奄,奔,墳, \" [comma separated list of icons]
 update {+,-}1% [update current sink volume]
 switch [switch to the next sink]
 --help, -h [this help page]
懶 toggle [toggle between play and pause]
玲 prev [play previous song]
怜 next [play next song]
栗 stop [stop playing]
 position [position in percent]
"
#  restore [restore saved configuration]
}
# return selected color generated by pywal
get_color() {
grep -o "$1.*" "$HOME/.cache/wal/colors.sh" | sed "s/$1='\(.*\)'.*/\1/"
}
# display volume icon
# @param: volume between 1 and 100, normalized_volume otherwise
volume_icon() {
volume=${1:-$(normalized_volume)}
len_icons=$(echo "$volume_icons" | wc -l)
for i in $(seq 1 "$len_icons"); do
if [ "$(echo "$i * (100/$len_icons) + 1" | bc -l | xargs printf "%0.f\n" )" -ge "${volume}" ]; then
echo "$volume_icons" | sed "$i!d"
break
fi
done
}
# return current volume associated with current sink
current_volume() {
playerctl --player="$(current_sink)" volume
}
# print current sink
current_sink() {
cat "$sink"
}
# return volume between 0 and 100%
# @param: volume between 0 and 1.0, current_volume otherwise
normalized_volume() {
volume=${1:-$(current_volume)}
echo "${volume} * 100" | bc -l | xargs printf "%0.f\n"
}
# save sinks with volumes
# save() {
# aucatctl | tr '\n' ' ' > "$save"
# }
# update volume with increment of value
# value between 0..130
# increment +n or -n
update() {
operand=$(echo "$1" | grep -o '+\|-')
value=$(echo "$1" | grep -o '[[:digit:]]*')
volume=$(normalized_volume)
{ [ "$volume" -eq 0 ] && [ "$operand" = "-" ]; } || { [ "$volume" -eq 130 ] && [ "$operand" = "+" ]; } && return
# sndioctl "$(current_sink).level=$operand$(echo "scale=2;$value/100" | bc -l)"
playerctl --player="$(current_sink)" volume "$(echo "scale=2;$value/100" | bc -l)$operand"
}
# automatically set current sink to last modified
auto_switch_sink() {
new_sink="$(echo "$1" | cut -f 1 -d ' ')"
[ "$new_sink" = '' ] && return
[ "$new_sink" = 'No players were found' ] && return
[ "$new_sink" = "$(current_sink)" ] || echo "$new_sink" > "$sink"
}
mpris() {
while true; do
player_status=$(playerctl status 2> /dev/null)
if [ "$player_status" = "Playing" ]; then
volume=$(playerctl status --format '{{volume}}')
player=$(playerctl status --format '{{playerName}}')
normalized_volume=$(normalized_volume "$volume")
echo "$player %{F$color}$(volume_icon "$normalized_volume")%{F-} ${normalized_volume}%"
sleep 1
fi
done
}
# listen on sndiod new events and sink change
listen() {
# on separated thread listen to playerctl events
{
playerctl --all-players --follow --format '{{playerName}} {{volume}}' status 2> /dev/null | while read -r MSG; do
auto_switch_sink "$MSG"
display
done
} &
# watch for current sink value stored in file change
while inotifywait -q -q -e close_write "$sink"; do
display
done
}
# display sink and associated volume in polybar
display() {
echo "$(current_sink) %{F$color}$(volume_icon)%{F-} $(normalized_volume)%"
}
# switch to the next available sink
switch() {
sinks=$(playerctl -l | cut -f 1 -d '.')
max_index=$(echo "$sinks" | wc -l)
current_index=$(echo "$sinks" | grep -n "$(current_sink)" | cut -f 1 -d ':')
next_index=$(echo "$current_index%$max_index + 1" | bc)
echo "$sinks" | sed "$next_index!d" | cut -f 1 -d '=' | sed 's/.level//' > "$sink"
}
# restore last saved volume per sink
# restore() {
# [ -f "$save" ] && aucatctl "$(cat "$save")"
# }
is_mpd_sink() {
[ "$(current_sink | grep -o 'mpd')" = "mpd" ] && echo "true" || echo "false"
}
position() {
[ "$(is_mpd_sink)" = "true" ] && mpc status | grep -oP "\(\K[^(].*(?=%)"
}
toggle() {
playerctl --player="$(current_sink)" play-pause
eww open cover
eww open progress-bar
}
prev() {
playerctl --player="$(current_sink)" previous
"$HOME/.config/ncmpcpp/art.sh"
}
next() {
playerctl --player="$(current_sink)" next
"$HOME/.config/ncmpcpp/art.sh"
}
stop() {
playerctl --player="$(current_sink)" stop
eww close cover
eww close progress-bar
}
main() {
[ ! -f "$sink" ] && mkdir -p "$HOME/.cache/mixer" && echo "output" > "$sink"
color=$(get_color 'color2')
volume_icons="奄\n奔\n墳\n"
case "$1" in
listen)
case "$2" in
--color=?*)
case "$3" in
--volume-icons=?*)
volume_icons=$(echo "${3#*=}" | tr ',' '\n')
esac
color=$(get_color "${2#*=}");;
esac
listen;;
mpris)
mpris;;
update)
shift;
update "$@";;
switch)
switch;;
prev)
prev;;
next)
next;;
toggle)
toggle;;
stop)
stop;;
position)
position;;
--help|-h|*)
help;;
esac
}
main "$@"

11
script/bin/mount_sailfish Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env sh
mount() {
sshfs -o uid=1000 -o gid=1000 "$1:/home/defaultuser" "$HOME/mnt/sailfish/internal"
sshfs -o uid=1000 -o gid=1000 "$1:/media/ebbfe37f-2979-4239-b5e0-725872f38289/Music" "$HOME/mnt/sailfish/sdcard"
}
interface="${1:-wifi}"
[ "$interface" = "wifi" ] && sailfish="sailfish-x" || sailfish="sailfish-wired"
mount "$sailfish"

234
script/bin/pidswallow Executable file
View file

@ -0,0 +1,234 @@
#!/bin/sh
usage="pidswallow (pid swallow WM/DE independent)
Hides terminal window automatically, so that you don't have to
pidswallow [OPTION ...]
OPTIONS:
-h --help Show this message
-s --swallow <CWID> Hides parent window of the given child window id.
-v --vomit <CWID> Unhides parent window of the given child window id.
-t --toggle <CWID> toggle between swallow and vomit. (default)
-g --glue treat if parent and child window are same. (recommended)
-l --loop listen and hide / unhide window on launch / remove.
-V --verbose Shows useful information.
bugs/issues: https://github.com/liupold/pidswallow.
"
shell=" ${PIDSWALLOW_SHELL:-" ${SHELL##*/} "} "
terminal=" ${PIDSWALLOW_TERMINAL:-" $TERMINAL "} "
blacklist=" ${PIDSWALLOW_BLACKLIST:-" $terminal "} "
glue_blacklist=" $PIDSWALLOW_GLUE_BLACKLIST "
swallow_command="${PIDSWALLOW_SWALLOW_COMMAND:-xdo hide \$pwid}"
vomit_command="${PIDSWALLOW_VOMIT_COMMAND:-xdo show \$pwid}"
preglue_hook="$PIDSWALLOW_PREGLUE_HOOK"
verbose=0
glue=0
vecho() {
[ "$verbose" -eq 1 ] && echo "$@" | paste -s -d ' '
}
vomit() {
unset cwid pwid x y w h # similar to local
cwid=$(printf '0x%x' "$1") # hexadecimal conversion
[ -f "/tmp/swallowed-by-$cwid" ] && read -r pwid < "/tmp/swallowed-by-$cwid"
[ -n "$pwid" ] || return 1
vecho "vomit - $cwid vomiting $pwid using $vomit_command"
echo "pwid=$pwid;cwid=$cwid;" "$vomit_command" | /bin/sh
vecho "vomit - $cwid vomited $pwid"
rm "/tmp/swallowed-by-$cwid"
if xwininfo -id "$cwid" >/dev/null 2>&1; then
xdo activate "$cwid" # if child still exists, re-focus it
else
xdo activate "$pwid"
fi
if [ "$glue" -eq 1 ] && [ "${glue_blacklist#* $cname}" = "$glue_blacklist" ];
then
[ -f "/tmp/swallowed-by-$cwid-structure" ] && {
read -r structure < "/tmp/swallowed-by-$cwid-structure"
structure="${structure#*\(}"; x="${structure%%,*}"
structure="${structure#*,}"; y="${structure%%)*}"
structure="${structure#*width }"; w="${structure%%,*}"
h="${structure#*height }"
xdo resize -w "$w" -h "$h" "$pwid"
xdo move -x "$x" -y "$y" "$pwid"
}
[ -f "/tmp/swallowed-by-$cwid-desk" ] && {
read -r desk < "/tmp/swallowed-by-$cwid-desk"
desk="${desk##* }"
xdotool set_desktop_for_window "$pwid" "$desk"
}
fi
rm -f "/tmp/swallowed-by-$cwid-structure" "/tmp/swallowed-by-$cwid-desk"
}
swallow() {
# return values
# 0 -> Found and swallowed
# 3 -> window lacks a _NET_WM_PID property.
# 4 -> window already swallowed / not possible
# 5 -> swallow_command failed
unset cwid pwid cname pname ppid cpid x y w h # similar to local.
cwid=$(printf '0x%x' "$1") # hexadecimal conversion
[ -f "/tmp/swallowed-by-$cwid" ] && return 4
cpid="$(xdo pid "$cwid")" || return 3
cname="$(ps -p "$cpid" -o comm=)"
[ "${blacklist#* $cname }" != "$blacklist" ] && return 0
process_tree="$(pstree -ATlsp "$cpid" \
| sed -n -e 's|(|:|g' -e 's|)||g' \
-e 's|---|\n|g' -e 's|-+-|\n|g' \
-e 's/\n'"$cname"':'"$cpid"'.*//' -e '1p' | tac)"
vecho "swallow - Scanning process tree of $cname($cpid): $process_tree"
for parent in $process_tree; do
pname="${parent%%:*}" # ancestor name
ppid="${parent##*:}"
if [ "${shell#* $pname }" != "$shell" ] && [ -f "/tmp/term-wid-$ppid" ]; then
vecho "swallow - $pname($ppid) detected as shell"
read -r pwid < "/tmp/term-wid-$ppid"
break
elif [ "${terminal#* $pname}" != "$terminal" ]; then
vecho "swallow - $pname($ppid) detected as terminal (fallback)"
pwid=$(xdo id -p "$ppid" | {
read -r temp; echo "$temp"
} )
break
fi
done
[ -z "$pwid" ] && return 4
if [ "$glue" -eq 1 ]; then
vecho "swallow - Running preglue hook: $preglue_hook"
echo "pwid=$pwid;cwid=$cwid;" "$preglue_hook" | /bin/sh
fi
vecho "swallow - $cwid swallowing $pwid using $swallow_command"
echo "pwid=$pwid;cwid=$cwid;" "$swallow_command" | /bin/sh || return 5
echo "$pwid" > "/tmp/swallowed-by-$cwid"
vecho "swallow - $cname ($cwid) swallowed $pname (or its terminal) ($pwid)"
[ "$glue" -ne 1 ] ||\
[ "${glue_blacklist#* $cname}" != "$glue_blacklist" ] && return 0
pgeo=$(xwininfo -shape -id "$pwid" | tr -d '\n ')
x="${pgeo##*Absoluteupper-leftX:}"; x="${x%%Absoluteupper-leftY:*}"
y="${pgeo##*Absoluteupper-leftY:}"; y="${y%%Relativeupper-leftX:*}"
w="${pgeo##*Width:}"; w="${w%%Height:*}"
h="${pgeo##*Height:}"; h="${h%%Depth:*}"
xdo resize -w "$w" -h "$h" "$cwid"
xdo move -x "$x" -y "$y" "$cwid"
echo "event ($x,$y), width $w, height $h" \
> "/tmp/swallowed-by-$cwid-structure"
xprop -notype -id "$cwid" _NET_WM_DESKTOP > "/tmp/swallowed-by-$cwid-desk"
# subscribe to window
{
xev -id "$cwid" -event structure -event property | while read -r event ; do
[ "${event#*DestroyNotify}" != "$event" ] && pkill -s 0 -f "xev.*$cwid"
[ "${event#* width }" != "$event" ] \
&& echo "$event" > "/tmp/swallowed-by-$cwid-structure"
[ "${event#*_NET_WM_DESKTOP}" != "$event" ] \
&& xprop -notype -id "$cwid" _NET_WM_DESKTOP \
> "/tmp/swallowed-by-$cwid-desk"
done
} &
}
toggle() {
cwid=$(printf '0x%x' "$1") # hexadecimal conversion
if [ -f "/tmp/swallowed-by-$cwid" ]; then
vomit "$cwid"
return "$?"
else
glue_="$glue" && \
glue=0 && swallow "$cwid" && glue="$glue_" # overwrite here.
return "$?"
fi
}
loop() {
prev_event="$(xprop -root _NET_CLIENT_LIST)"
xprop -spy -root _NET_CLIENT_LIST | while read -r event; do
unset node_added node_removed
for wid in $(echo "${event##*# }" | tr -d ','); do
[ "${prev_event#*$wid}" = "$prev_event" ] \
&& node_added="$wid" && break
done
for wid in $(echo "${prev_event##*# }" | tr -d ','); do
[ "${event#*$wid}" = "$event" ] \
&& node_removed="$wid" && break
done
prev_event="$event"
[ -n "$node_added" ] && swallow "$node_added"
[ -n "$node_removed" ] && {
xprop -id "$node_removed" >/dev/null 2>&1 || vomit "$node_removed"
}
done
return 1
}
[ -p /dev/stdin ] && eval set -- "$* $(cat /dev/stdin)" # basic pipe support
[ "$#" -eq 0 ] && echo "$usage" && exit 1
TEMP=$(getopt -o 'Vghlt:s:v:' --long 'verbose,glue,help,loop,toggle:,swallow:,vomit:' \
-n 'pidswallow' -- "$@")
# precheck
eval set -- "${TEMP}"
while true; do
case "$1" in
'-V'|'--verbose')
verbose=1
vecho "shell: \"$shell\""
vecho "terminal: \"$terminal\""
shift; continue;;
'-g'|'--glue')
glue=1
shift; continue;;
'--')
shift; break;;
*)
shift; continue;;
esac
done
eval set -- "${TEMP}"; unset TEMP
while true; do
case "$1" in
'-V'|'--verbose')
shift; continue;;
'-g'|'--glue')
shift; continue;;
'-h' | '--help' )
echo "$usage" && exit 0;;
'-t'|'--toggle')
toggle "$2" || exit "$?"
shift 2; continue;;
'-s'|'--swallow')
swallow "$2" || exit "$?"
shift 2; continue;;
'-v'|'--vomit')
vomit "$2" || exit "$?"
shift 2; continue;;
'-l'|'--loop')
loop || exit "$?"
shift; continue;;
'--')
shift; break;;
*)
echo "Internal error!" >&2
echo "$usage" && exit 1;;
esac
done
# toggle WID on first non-flag argument
[ -n "$*" ] && toggle "$1" && shift
# error if there's more than one non-flag argument
if [ -n "$*" ]; then
echo "Unrecognized trailing option '$*'" >&2; exit 1
fi

17
script/bin/rounded_borders.sh Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env sh
SOURCE="$1"
OUTPUT="$HOME/.config/feh/wallpaper.png"
BORDER_RADIUS=10
rounded_corners() {
convert -quiet "$SOURCE" -resize 1920x1080^ -gravity center -crop 1920x1080+0+0 +repage "$OUTPUT"
convert -quiet "$OUTPUT" \
\( +clone -crop $((BORDER_RADIUS+1))x$((BORDER_RADIUS+1))+0+0 -fill white -colorize 100% \
-draw "fill black circle $BORDER_RADIUS,$BORDER_RADIUS $BORDER_RADIUS,0" \
-background black -alpha shape \
\( +clone -flip \) \( +clone -flop \) \( +clone -flip \) \
\) -flatten "$OUTPUT"
}
rounded_corners && feh --bg-fill "$OUTPUT"

7
script/bin/transmission-rss Executable file
View file

@ -0,0 +1,7 @@
#!/usr/bin/env sh
#podman run -d --name transmission-rss --restart=always --network=host \
# -v "$HOME/Videos/transmission-rss.conf:/etc/transmission-rss.conf" \
# docker.io/nning2/transmission-rss:latest
podman start transmission-rss

View file

@ -0,0 +1,8 @@
#!/usr/bin/env sh
cd "$HOME/bin/src/jhide" || exit
[ -f "$HOME/.local/share/qutebrowser/greasemonkey/jhide.js" ] && rm ~/.local/share/qutebrowser/greasemonkey/jhide.js
./jhide.sh ~/.config/qutebrowser/my-filters.txt -o ~/.local/share/qutebrowser/greasemonkey/jhide.js
echo "Hidden elements updated. Run :greasemonkey-reload to take effect."

7
script/bin/wallpaper Executable file
View file

@ -0,0 +1,7 @@
#!/usr/bin/env sh
WALLPAPER="$1"
wal -i "$WALLPAPER" -o "$HOME/bin/bspwmrc" -q
# "$HOME/bin/rounded_borders.sh" "$WALLPAPER"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 MiB

After

Width:  |  Height:  |  Size: 11 MiB

Before After
Before After