Compare commits
5
Commits
bbb34293ab
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4c90473ea | ||
|
|
95f4c85f32 | ||
|
|
513d77f5e4 | ||
|
|
c44c92711d | ||
|
|
8b6fe815d1 |
@@ -1,6 +1,7 @@
|
|||||||
one-off-scripts
|
one-off-scripts
|
||||||
===============
|
===============
|
||||||
|
|
||||||
This repo is hosted at https://gitea.tangentfox.com/tangent/one-off-scripts and force-pushed to GitHub when commits are made.
|
This repo is hosted at https://gitea.tangentfox.com/tangent/one-off-scripts
|
||||||
|
and force-pushed to https://github.com/TangentFoxy/one-off-scripts when commits are made.
|
||||||
|
|
||||||
Feel free to submit pull requests or whatever, but know that I would have to manage them over there.
|
Feel free to submit pull requests or whatever, but know that I would have to manage them over there.
|
||||||
Regular → Executable
Regular → Executable
+11
-3
@@ -4,14 +4,14 @@ local pause_between_opens = false
|
|||||||
math.randomseed(os.time())
|
math.randomseed(os.time())
|
||||||
|
|
||||||
local books = {
|
local books = {
|
||||||
read = 857,
|
read = 1966,
|
||||||
unread = 3093,
|
unread = 4103,
|
||||||
per_calibre_page = 6,
|
per_calibre_page = 6,
|
||||||
}
|
}
|
||||||
books.total = books.read + books.unread
|
books.total = books.read + books.unread
|
||||||
|
|
||||||
local ratings = {
|
local ratings = {
|
||||||
91, 130, 222, 158, 41
|
210, 384, 587, 383, 87,
|
||||||
}
|
}
|
||||||
local average_rating = (function()
|
local average_rating = (function()
|
||||||
local count, rating = 0, 0
|
local count, rating = 0, 0
|
||||||
@@ -37,6 +37,13 @@ books.average_page_count = books.average_page_count * (1 - 0.17)
|
|||||||
-- 2025-11-19
|
-- 2025-11-19
|
||||||
-- this was approximately 124.9, but a current estimate is 148.72
|
-- this was approximately 124.9, but a current estimate is 148.72
|
||||||
books.average_page_count = 148.72
|
books.average_page_count = 148.72
|
||||||
|
|
||||||
|
-- 2026-06-20
|
||||||
|
-- read + DNF + owned
|
||||||
|
books.average_page_count = 136909/1096 + 33597/170 + 207799/1421
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print("Estimated average page count per book: " .. books.average_page_count)
|
print("Estimated average page count per book: " .. books.average_page_count)
|
||||||
|
|
||||||
local function to_calibre_pages(count)
|
local function to_calibre_pages(count)
|
||||||
@@ -81,3 +88,4 @@ print("Press enter to open 9 random pages on Calibre. :D Or close this window /
|
|||||||
io.read("*line")
|
io.read("*line")
|
||||||
|
|
||||||
open_random_links("unread", 9)
|
open_random_links("unread", 9)
|
||||||
|
-- open_random_links("read", 9)
|
||||||
Regular → Executable
@@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
OUTPUT="audiobook.m4b"
|
||||||
|
FILES="files.txt"
|
||||||
|
CHAPTERS="chapters.txt"
|
||||||
|
|
||||||
|
# list of MP3 files in filename order
|
||||||
|
find . -maxdepth 1 -name '*.mp3' -print0 |
|
||||||
|
sort -z |
|
||||||
|
while IFS= read -r -d '' file; do
|
||||||
|
file="${file#./}"
|
||||||
|
printf "file '%s'\n" "$file"
|
||||||
|
done > "$FILES"
|
||||||
|
|
||||||
|
# start chapter metadata file
|
||||||
|
{
|
||||||
|
echo ";FFMETADATA1"
|
||||||
|
} > "$CHAPTERS"
|
||||||
|
|
||||||
|
START=0
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
FILE="${line#file \'}"
|
||||||
|
FILE="${FILE%\'}"
|
||||||
|
|
||||||
|
# duration in milliseconds
|
||||||
|
DURATION=$(ffprobe \
|
||||||
|
-v error \
|
||||||
|
-show_entries format=duration \
|
||||||
|
-of csv=p=0 \
|
||||||
|
"$FILE")
|
||||||
|
|
||||||
|
DURATION_MS=$(awk "BEGIN {printf \"%.0f\", $DURATION * 1000}")
|
||||||
|
END=$((START + DURATION_MS))
|
||||||
|
|
||||||
|
# filename as the chapter title
|
||||||
|
TITLE="${FILE%.mp3}"
|
||||||
|
|
||||||
|
cat >> "$CHAPTERS" <<EOF
|
||||||
|
[CHAPTER]
|
||||||
|
TIMEBASE=1/1000
|
||||||
|
START=$START
|
||||||
|
END=$END
|
||||||
|
title=$TITLE
|
||||||
|
EOF
|
||||||
|
|
||||||
|
START=$END
|
||||||
|
|
||||||
|
done < "$FILES"
|
||||||
|
|
||||||
|
read -p "Press Enter key after making any corrections to $CHAPTERS"
|
||||||
|
|
||||||
|
ffmpeg \
|
||||||
|
-f concat \
|
||||||
|
-safe 0 \
|
||||||
|
-i "$FILES" \
|
||||||
|
-i "$CHAPTERS" \
|
||||||
|
-map 0:a \
|
||||||
|
-map_metadata 1 \
|
||||||
|
-c:a aac \
|
||||||
|
-b:a 128k \
|
||||||
|
-movflags +faststart \
|
||||||
|
"$OUTPUT"
|
||||||
Regular → Executable
Executable
+387
@@ -0,0 +1,387 @@
|
|||||||
|
#!/usr/bin/env luajit
|
||||||
|
|
||||||
|
-- this list was manually assembled from my notes
|
||||||
|
local mods = {
|
||||||
|
"plutoniumships",
|
||||||
|
"stnodes",
|
||||||
|
"too_many_tnt",
|
||||||
|
"mesecons_carts",
|
||||||
|
"coloredstrings",
|
||||||
|
"grass_string",
|
||||||
|
"renewable_desert_stone",
|
||||||
|
"basic_materials",
|
||||||
|
"farming",
|
||||||
|
"x_farming",
|
||||||
|
"unifieddyes",
|
||||||
|
"xcompat",
|
||||||
|
"worldedit",
|
||||||
|
"home_workshop_modpack",
|
||||||
|
"plasticbox",
|
||||||
|
"steel",
|
||||||
|
"xdecor",
|
||||||
|
"technic",
|
||||||
|
"technic_recycle",
|
||||||
|
"plastic_bucket",
|
||||||
|
"uraniumstuff",
|
||||||
|
"anvil",
|
||||||
|
"hammers_redo",
|
||||||
|
"desertores",
|
||||||
|
"livingcaves",
|
||||||
|
"livingcavesmobs",
|
||||||
|
"roads",
|
||||||
|
"digilines",
|
||||||
|
"mesecons",
|
||||||
|
"moreblocks",
|
||||||
|
"digistuff",
|
||||||
|
"eye_spy",
|
||||||
|
"edit_skin",
|
||||||
|
"fishing_boat",
|
||||||
|
"whitelist",
|
||||||
|
"lib_chatcmdbuilder",
|
||||||
|
"carpets",
|
||||||
|
"digiterms",
|
||||||
|
"display_modpack",
|
||||||
|
"biofuel",
|
||||||
|
"automobiles_pck",
|
||||||
|
"nutrional",
|
||||||
|
"denseores",
|
||||||
|
"airtanks",
|
||||||
|
"handholds_redo",
|
||||||
|
"bike",
|
||||||
|
"pixelfurniture",
|
||||||
|
"airutils",
|
||||||
|
"ju52",
|
||||||
|
"ju52_hydro",
|
||||||
|
"supercub",
|
||||||
|
"hidroplane",
|
||||||
|
"heli",
|
||||||
|
"trike",
|
||||||
|
"pa28",
|
||||||
|
"spacecannon",
|
||||||
|
"accountmgr",
|
||||||
|
"farmtools",
|
||||||
|
"imese",
|
||||||
|
"scifi_nodes",
|
||||||
|
"beacons",
|
||||||
|
"dfcaverns",
|
||||||
|
"tunnelmaker",
|
||||||
|
"railbuilder",
|
||||||
|
"advtrains",
|
||||||
|
"advtrains_moreslopes",
|
||||||
|
"advtrains_platform",
|
||||||
|
"advtrains_horntrack",
|
||||||
|
"dlxtrains",
|
||||||
|
"classic_coaches",
|
||||||
|
"tfl_s7_stock_modpack",
|
||||||
|
"advtrains_train_rocket",
|
||||||
|
"advtrains_subway_ny",
|
||||||
|
"advtrains_train_orient_express",
|
||||||
|
"advtrains_train_jpntlr600",
|
||||||
|
"advtrains_transib",
|
||||||
|
"advtrains_freight_train",
|
||||||
|
"advtrains_bboe_1080",
|
||||||
|
"advtrains_db_160",
|
||||||
|
"advtrains_train_zugspitzbahn",
|
||||||
|
"ethereal",
|
||||||
|
"wihelminessound",
|
||||||
|
"datacard",
|
||||||
|
"x_enchanting",
|
||||||
|
"bucket_wooden",
|
||||||
|
"motorboat",
|
||||||
|
"mobkit",
|
||||||
|
"digicontrol",
|
||||||
|
"colorful_beds",
|
||||||
|
"discovery_maps",
|
||||||
|
"computertest",
|
||||||
|
"more_ladders",
|
||||||
|
"colored_chests",
|
||||||
|
"bonemeal",
|
||||||
|
"livingdesert",
|
||||||
|
"livingjungle",
|
||||||
|
"naturalbiomes",
|
||||||
|
"ambience",
|
||||||
|
"marinara",
|
||||||
|
"people",
|
||||||
|
"marinaramobs",
|
||||||
|
"nativevillages",
|
||||||
|
"winuserleafdecay",
|
||||||
|
"everness",
|
||||||
|
"cottages",
|
||||||
|
"towercrane",
|
||||||
|
"homedecor_modpack",
|
||||||
|
"pipeworks",
|
||||||
|
"lwcomponents",
|
||||||
|
"moretubes",
|
||||||
|
"omnidriver",
|
||||||
|
"plantlife_modpack",
|
||||||
|
"ebiomes",
|
||||||
|
"biome_lib",
|
||||||
|
"mobs",
|
||||||
|
"yl_api_nodestages",
|
||||||
|
"yl_canned_food",
|
||||||
|
"yl_canned_food_mtg",
|
||||||
|
"mobs_water",
|
||||||
|
"mobs_animal",
|
||||||
|
"glooptest",
|
||||||
|
"mobs_horse",
|
||||||
|
"mobs_mese_monster_classic",
|
||||||
|
"dmobs",
|
||||||
|
"travelnet",
|
||||||
|
"hangglider",
|
||||||
|
"fakelib",
|
||||||
|
"3d_armor",
|
||||||
|
"illumination",
|
||||||
|
"hazmat_suit",
|
||||||
|
"headlamp",
|
||||||
|
"technic_armor",
|
||||||
|
"unified_inventory",
|
||||||
|
"unified_inventory_plus",
|
||||||
|
"vizlib",
|
||||||
|
"cool_trees",
|
||||||
|
"powerbanks",
|
||||||
|
"mobs_monster",
|
||||||
|
"treecapitator",
|
||||||
|
"moretrees",
|
||||||
|
"moreores",
|
||||||
|
"toolranks",
|
||||||
|
"toolranks_extras",
|
||||||
|
"charcoal",
|
||||||
|
"awards",
|
||||||
|
"moreawards",
|
||||||
|
"ancient_bones",
|
||||||
|
"bakedclay",
|
||||||
|
"orienteering",
|
||||||
|
"ccompass",
|
||||||
|
"spacesuit",
|
||||||
|
"ropes",
|
||||||
|
"obsidianstuff",
|
||||||
|
"more_chests",
|
||||||
|
"multitools",
|
||||||
|
"luanti_utils",
|
||||||
|
"vines",
|
||||||
|
"morebricks",
|
||||||
|
"place_rotated",
|
||||||
|
"digtron",
|
||||||
|
"drawers",
|
||||||
|
"elevator",
|
||||||
|
"stamina",
|
||||||
|
"lavastuff",
|
||||||
|
"wetmud",
|
||||||
|
"geocache",
|
||||||
|
"locator",
|
||||||
|
"jumpdrive",
|
||||||
|
"loot",
|
||||||
|
"maple",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- this list was obtained from running ls -1 in the worldmods directory
|
||||||
|
local current_mods = {
|
||||||
|
"3d_armor",
|
||||||
|
"accountmgr",
|
||||||
|
"advtrains",
|
||||||
|
"advtrains_bboe_1080",
|
||||||
|
"advtrains_db_160",
|
||||||
|
"advtrains_freight_train",
|
||||||
|
"advtrains_horntrack",
|
||||||
|
"advtrains_moreslopes",
|
||||||
|
"advtrains_platform",
|
||||||
|
"advtrains_subway_ny",
|
||||||
|
"advtrains_train_jpntlr600",
|
||||||
|
"advtrains_train_orient_express",
|
||||||
|
"advtrains_train_rocket",
|
||||||
|
"advtrains_train_zugspitzbahn",
|
||||||
|
"advtrains_transib",
|
||||||
|
"airtanks",
|
||||||
|
"airutils",
|
||||||
|
"ambience",
|
||||||
|
"ancient_bones",
|
||||||
|
"anvil",
|
||||||
|
"automobiles_pck",
|
||||||
|
"awards",
|
||||||
|
"bakedclay",
|
||||||
|
"basic_materials",
|
||||||
|
"beacons",
|
||||||
|
"bike",
|
||||||
|
"biofuel",
|
||||||
|
"biome_lib",
|
||||||
|
"bucket_wooden",
|
||||||
|
"carpets",
|
||||||
|
"ccompass",
|
||||||
|
"charcoal",
|
||||||
|
"classic_coaches",
|
||||||
|
"colored_chests",
|
||||||
|
"coloredstrings",
|
||||||
|
"colorful_beds",
|
||||||
|
"computertest",
|
||||||
|
"cool_trees",
|
||||||
|
"cottages",
|
||||||
|
"datacard",
|
||||||
|
"denseores",
|
||||||
|
"desertores",
|
||||||
|
"dfcaverns",
|
||||||
|
"digicontrol",
|
||||||
|
"digilines",
|
||||||
|
"digistuff",
|
||||||
|
"digiterms",
|
||||||
|
"digtron",
|
||||||
|
"discovery_maps",
|
||||||
|
"display_modpack",
|
||||||
|
"dlxtrains",
|
||||||
|
"dmobs",
|
||||||
|
"drawers",
|
||||||
|
"ebiomes",
|
||||||
|
"edit_skin",
|
||||||
|
"elevator",
|
||||||
|
"everness",
|
||||||
|
"eye_spy",
|
||||||
|
"fakelib",
|
||||||
|
"farming",
|
||||||
|
"farmtools",
|
||||||
|
"fishing_boat",
|
||||||
|
"geocache",
|
||||||
|
"grass_string",
|
||||||
|
"hammersredo",
|
||||||
|
"handholds_redo",
|
||||||
|
"hangglider",
|
||||||
|
"hazmat_suit",
|
||||||
|
"headlamp",
|
||||||
|
"heli",
|
||||||
|
"hidroplane",
|
||||||
|
"home_workshop_modpack",
|
||||||
|
"homedecor_modpack",
|
||||||
|
"illumination",
|
||||||
|
"ju52",
|
||||||
|
"ju52_hydro",
|
||||||
|
"jumpdrive",
|
||||||
|
"lavastuff",
|
||||||
|
"lib_chatcmdbuilder",
|
||||||
|
"livingcaves",
|
||||||
|
"livingcavesmobs",
|
||||||
|
"livingdesert",
|
||||||
|
"livingjungle",
|
||||||
|
"locator",
|
||||||
|
"lwcomponents",
|
||||||
|
"marinara",
|
||||||
|
"marinaramobs",
|
||||||
|
"mesecons",
|
||||||
|
"mesecons_carts",
|
||||||
|
"mob_horse",
|
||||||
|
"mob_mese_monster_classic",
|
||||||
|
"mobkit",
|
||||||
|
"mobs",
|
||||||
|
"mobs_animal",
|
||||||
|
"mobs_monster",
|
||||||
|
"mobs_water",
|
||||||
|
"more_chests",
|
||||||
|
"more_ladders",
|
||||||
|
"moreawards",
|
||||||
|
"moreblocks",
|
||||||
|
"morebricks",
|
||||||
|
"moreores",
|
||||||
|
"moretrees",
|
||||||
|
"moretubes",
|
||||||
|
"motorboat",
|
||||||
|
"multitools",
|
||||||
|
"nativevillages",
|
||||||
|
"naturalbiomes",
|
||||||
|
"nutritional",
|
||||||
|
"obsidianstuff",
|
||||||
|
"omnidriver",
|
||||||
|
"orienteering",
|
||||||
|
"pa28",
|
||||||
|
"people",
|
||||||
|
"pipeworks",
|
||||||
|
"pixelfurniture",
|
||||||
|
"place_rotated",
|
||||||
|
"plantlife_modpack",
|
||||||
|
"plastic_bucket",
|
||||||
|
"plasticbox",
|
||||||
|
"plutoniumships",
|
||||||
|
"powerbanks",
|
||||||
|
"railbuilder",
|
||||||
|
"renewable_desert_stone",
|
||||||
|
"roads",
|
||||||
|
"ropes",
|
||||||
|
"scifi_nodes",
|
||||||
|
"spacecannon",
|
||||||
|
"spacesuit",
|
||||||
|
"stamina",
|
||||||
|
"steel",
|
||||||
|
"stnodes",
|
||||||
|
"supercub",
|
||||||
|
"technic_armor",
|
||||||
|
"technic_plus",
|
||||||
|
"tfl_s7_stock_modpack",
|
||||||
|
"too_many_tnt",
|
||||||
|
"toolranks",
|
||||||
|
"toolranks_extras",
|
||||||
|
"towercrane",
|
||||||
|
"travelnet",
|
||||||
|
"treecapitator",
|
||||||
|
"trike",
|
||||||
|
"tunnelmaker",
|
||||||
|
"unified_inventory",
|
||||||
|
"unified_inventory_plus",
|
||||||
|
"unifieddyes",
|
||||||
|
"uraniumstuff",
|
||||||
|
"vizlib",
|
||||||
|
"wetmud",
|
||||||
|
"whitelist",
|
||||||
|
"wilhelminessounds",
|
||||||
|
"winuserleafdecay",
|
||||||
|
"worldedit",
|
||||||
|
"x_enchanting",
|
||||||
|
"x_farming",
|
||||||
|
"xcompat",
|
||||||
|
"xdecor",
|
||||||
|
"yl_api_nodestages",
|
||||||
|
"yl_canned_food",
|
||||||
|
"yl_canned_food_mtg",
|
||||||
|
}
|
||||||
|
|
||||||
|
local function uniqify_mods(mod_list)
|
||||||
|
print(#mod_list .. " mods listed.")
|
||||||
|
|
||||||
|
local unique = {}
|
||||||
|
for _, name in ipairs(mod_list) do unique[name] = true end
|
||||||
|
|
||||||
|
mod_list = {}
|
||||||
|
for name in pairs(unique) do mod_list[#mod_list + 1] = name end
|
||||||
|
|
||||||
|
print(#mod_list .. " unique.")
|
||||||
|
table.sort(mod_list)
|
||||||
|
|
||||||
|
return mod_list
|
||||||
|
end
|
||||||
|
|
||||||
|
local function open_mods_search(mod_list)
|
||||||
|
for i, name in ipairs(mod_list) do
|
||||||
|
print("Opening search for " .. name)
|
||||||
|
os.execute("open \"https://content.luanti.org/packages/?q=" .. name .. "\"")
|
||||||
|
os.execute("sleep 1") -- open creates race conditions with itself, so these are not opened in order, despite being called in order
|
||||||
|
if i % 9 == 0 then
|
||||||
|
print("Press enter to continue.")
|
||||||
|
io.read("*line")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function detect_inconsistencies()
|
||||||
|
local mods_unique = {}
|
||||||
|
for _, name in ipairs(mods) do mods_unique[name] = true end
|
||||||
|
local current_mods_hashtable = {}
|
||||||
|
for _, name in ipairs(current_mods) do current_mods_hashtable[name] = true end
|
||||||
|
|
||||||
|
-- local missing_mods, overstated_mods = {}, {} -- I don't need to make the lists because they're so small.. I hope
|
||||||
|
for name in pairs(current_mods_hashtable) do
|
||||||
|
if not mods_unique[name] then print(name .. " missing from manual list.") end
|
||||||
|
end
|
||||||
|
print()
|
||||||
|
for name in pairs(mods_unique) do -- this list SHOULD exist, but already fixed in my markdown note
|
||||||
|
if not current_mods_hashtable[name] then print(name .. " listed, but was rejected.") end
|
||||||
|
end
|
||||||
|
print()
|
||||||
|
end
|
||||||
|
detect_inconsistencies()
|
||||||
|
|
||||||
|
open_mods_search(uniqify_mods(mods))
|
||||||
Reference in New Issue
Block a user