Releases: denis1836/utils
Release list
ue5_astwdn-v1.0.5
Unreal Engine 5 asset downloading script (#3)
ue5_asset_downloader/README.md
ue5-asset-downloader
Me and my friends needed a way to share UE5 asset packs (meshes, maps, actors etc.) without shoving giant binaries into the repo, so git just tracks metadata the actual zips are on Google Drive.
How it works
- assets live on Google Drive as zips
- each pack gets a small JSON file in
AssetRegistry/describing it (version, hash, where to unpack it, etc.) download-assetsreads those JSONs, lets you pick a pack, downloads it, checks the sha256, unzips it into your project- a pre-commit hook stops you if your JSON is broken before you push garbage
Requirements
- bash
- python3
- curl or wget
- unzip
- file
Setup
git clone <todo link>
cd ue5_asset_downloaderAlso you can install a pre-commit so it'll check if you have all the assets before you commit.
./installers/install-pre-commit.shDownloading a pack
./download-assetsPick a number, a for all of them, or q to bail. It'll fetch the zip from Drive, verify the checksum if there is one, and drop it into the path defined in the JSON. Open UE and let it import.
Adding a new pack
- Zip it up:
Asset_Pack_Name_vX.Y.Z.zip(semver) - Upload to your GoogleDrive, set sharing to "anyone with the link"
- Copy the file's share link
- Copy
AssetRegistry/Example_Asset_Pack_v1.0.0.json, fill it in - Get the hash:
sha256sum Asset_Pack_Name_vX.Y.Z.zip, drop it insha256field git add AssetRegistry/Asset_Pack_Name_vX.Y.Z.jsongit commit -m "feat(assets): add Asset_Pack_Name_vX.Y.Z"git push
The pre-commit hook will check your JSON on commit, so you'll know if you screwed something up.
JSON fields
{
"name": "Example_Asset_Pack",
"version": "1.0.1",
"date": "2026-06-03",
"author": "John Smith",
"description": "Some Basic shapes",
"file": "Example_Asset_Pack_v1.0.1.zip",
"download_url": "https://<url>",
"sha256": "<hash>",
"ue_version": "5.7.4",
"install_path": "Content/<path>",
"contents": [
"Cube1",
"Triangle1",
"Sphere1",
"Cylinder1"
],
"depends_on": [],
"changelog": [
"v1.0.0 - Add basic shapes",
"v1.0.1 - Fix Triangle1 mesh"
]
}Most of it is self explanatory. file has to match the JSON's filename (minus extension), install_path is relative to your project root, download_url needs to be a Drive link (either the /file/d/<id>/view or ?id=<id> flavor), depends_on isn't enforced anywhere yet(but you still have to download other dependencies assets).
Config
download-assets.conf:
REGISTRY_DIR="./AssetRegistry"
DOWNLOAD_DIR="./.asset-downloads"Change these if you move stuff around. DOWNLOAD_DIR is just a temporary download folder, gets cleaned up after install.
Pre-commit hook
Only runs on staged files inside AssetRegistry/*.json. Blocks the commit if:
- JSON doesn't parse
- a required field is missing
sha256ordownload_urlis still the<placeholder>from the template
Warns (but lets you through) if version isn't semver, date isn't YYYY-MM-DD, file doesn't end in .zip, or the filename doesn't match the file field.
Commit style
feat(assets): add Car_Asset_Pack v1.4.12
feat / fix / chore / docs, whatever fits.
Limitations
- only Google Drive links work
- the file has to actually be public or you'll download an HTML error page instead of a zip
depends_onis decorative for now- no other file hosts supported yet
License
proxyfix-v2.0.11
Improved version of the proxyfix script (#4)
proxyfix
A simple Bash script for managing proxychains proxy lists and profiles.
Prerequisites
proxychains(orproxychains-ng)- Root privileges (
sudo)
Configuration
Create a configuration file at ~/.config/proxyfix/proxyfix.conf:
mkdir -p ~/.config/proxyfix
cat << 'EOF' > ~/.config/proxyfix/proxyfix.conf
PROXYCHAINS_CONF_FILE="/etc/proxychains4.conf"
DEFAULT_PROFILE_DIR="${HOME}/.config/proxyfix/profiles"
DEFAULT_PROFILE_EDITOR="nano"
DEFAULT_PROFILE_VIEWER="less"
EOF
Usage
sudo ./proxyfix.sh <command>Proxy Management
| Command | Description |
|---|---|
list |
Display active proxy servers in a formatted table |
edit |
Open the full proxychains config file in your default editor |
edit-list --line "socks5 127.0.0.1 9050" |
Replace current proxy list with specified proxy |
edit-list-add --line "http 10.0.0.1 8080" |
Append proxy to current list |
clear |
Clear all proxy entries from the config file |
Profiles
Profiles allow you to quickly switch between different proxy configurations.
# Save active proxies to a profile named 'work'
sudo ./proxyfix.sh profile save work
# List available profiles
sudo ./proxyfix.sh profile list
# Apply the 'work' profile to proxychains
sudo ./proxyfix.sh profile apply work
# View / Edit / Remove profiles
sudo ./proxyfix.sh profile view work
sudo ./proxyfix.sh profile edit work
sudo ./proxyfix.sh profile remove work
Available profile subcommands: save, apply, edit, remove, list, view.
License
lazyass-v2.0.0
Improved version of the lazyass script (#5)
lazyass
A minimal, zero-dependency CLI script to launch groups of applications at once
Installation
curl -fsSL https://raw.githubusercontent.com/denis1836/utils/main/lazyass/lazyass.sh -o lazyass.sh
chmod +x lazyass.sh
./lazyass.sh --helpTo make it globally executable for your user:
mkdir -p ~/.local/bin
mv ./lazyass.sh ~/.local/bin/lazyassOr to make it executable globally for all users:
sudo mv ./lazyass.sh /usr/local/bin/lazyass
sudo chmod +x /usr/local/bin/lazyassUsage
Launching
# launch default profile
lazyass
# launch a specific profile
lazyass <profile name>Defualt profile managment
# add one or more apps
lazyass app add firefox "dolphin ~" konsole "~/path/to/bin"
# remove an app
lazyass app remove konsole
# list default profile
lazyass app list
# edit defualt file
lazyass app editProfile Managment
# create a profile with optional initial apps
lazyass profile create work slack obsidian thunderbird
# add apps to an existing profile
lazyass profile add work docker-desktop
# list all saved profiles
lazyass profile list
# edit a profile file directly
lazyass profile edit work
# delete a profile
lazyass profile remove workConfiguration layout
~/.config/lazyass/
├── default
└── profiles/
├── dev
└── work
Profile files use simple newline-separated binary names or executable paths:
# ~/.config/lazyass/profiles/dev
# Supports comments too!
code
spotify
# firefox
~/path/to/my/bin
dolphin ~/my/dirLicense
db_manager-v1.1.1
DB manager script (#1 and #2)
- Demo: Includes example SQL files and configuration for quick testing out of the box.
- Template: A clean template that requires custom configuration before use.
db_manager
A single-file Bash script for managing a PostgreSQL database and its setup
SQL files, without hardcoding anything project-specific into the script
itself. One db_manager.sh + one db_manager.conf per project.
- Runs your numbered
*.sqlfiles in order (full setup, or a specific range) - Manages PostgreSQL roles: create, remove, change password, grant privileges
- Runs ad-hoc queries (inline, from a file, or piped via stdin)
- Starts/stops/restarts the PostgreSQL service and reports its status
- Works without full root, as long as the current user can reach
DB_USER(see Permissions model)
Requirements
- Linux with Bash and systemd
- PostgreSQL client (
psql)
Installation
Clone the repo, or just grab the two files you need for this tool:
mkdir -p db_manager && cd $_
curl -fsSL https://raw.githubusercontent.com/denis1836/utils/master/db_manager/db_manager.sh -o db_manager.sh
curl -fsSL https://raw.githubusercontent.com/denis1836/utils/master/db_manager/db_manager.conf -o db_manager.conf
chmod +x db_manager.shThen edit db_manager.conf to match your project (see Configuration), and drop your SQL files into SQL_DIR.
Usage
./db_manager.sh [ACTION] [OPTIONS]
With no action, the script runs the full setup: every SQL file in SQL_DIR, in order.
Service actions
| Command | Description |
|---|---|
--status |
Check PostgreSQL daemon and database state |
--start |
Start the PostgreSQL service (requires root) |
--stop |
Stop the PostgreSQL service (requires root) |
--restart |
Restart the PostgreSQL service (requires root) |
Database setup
| Command | Description |
|---|---|
| (no action) | Run every SQL file in SQL_DIR, followed by verification that the database and required tables exist. |
--drop-existing-db |
Drop the existing database |
--run --all |
Execute all SQL files, same as the default action's execution step |
--run --from N [--to M] |
Execute only files numbered N through M |
--run --to M |
Execute files numbered 0 through M |
SQL files must have a numeric prefix and match the SQL_PATTERN
in the configuration file (e.g. 01_create_enums.sql, 14_do_something.sql). This is required for the script to run correctly.
File 00 is treated specially: it's run as the postgres superuser and skipped
automatically if the database already exists. It's reserved for the database creation file (e.g. 00_create_db.sql).
User management
| Command | Description |
|---|---|
--user add -u <name> -p |
Create a role |
--user remove -u <name> |
Drop a role |
--user passwd -u <name> -p |
Change a role's password |
--user grant -u <name> --level <read|readwrite|all> |
Grant privileges on the configured database to a role |
Ad-hoc queries
./db_manager.sh query "SELECT count(*) FROM users;"
./db_manager.sh query -f ./reports/monthly.sql
cat ./reports/monthly.sql | ./db_manager.sh queryUseful for wiring into cron jobs or other scripts (see
Automation & passwords).
Common options
| Flag | Description |
|---|---|
-U <system-user> |
Run psql as this system user instead of DB_USER for this invocation |
-y, --yes |
Assume "yes" for all confirmation prompts (non-interactive runs) |
-h, --help |
Show usage |
Configuration
Everything project-specific is in db_manager.conf, sourced from the
same directory as the script. Copy it once per project and edit the values.
Do not edit db_manager.sh itself for project-specific needs (hardcoding is a bad habit).
| Variable | Description |
|---|---|
SERVICE_NAME |
Cosmetic name shown in banners/prompts |
DB_NAME |
The database this script manages |
DB_USER |
The default PostgreSQL/system user used to run queries |
DB_ADMIN_GROUP |
System group allowed to manage the database without full root |
DB_HOST / DB_PORT |
Used for password-authenticated connections (--user passwd) |
SQL_DIR |
Directory containing your SQL files |
SQL_PATTERN |
POSIX ERE regex matching SQL file names in SQL_DIR |
REQUIRED_TABLES |
Tables checked after setup to confirm it succeeded |
EXTRA_SCHEMAS |
Extra schemas (e.g. cron) granted USAGE on --user grant --level all |
LOG_DIR / LOG_FILE_NAME_PATTERN |
Where logs go and how each run's log file is named |
HELLO / BYE |
Startup/shutdown banner verbosity: full | minimal | quiet |
VERBOSITY |
Execution log verbosity: full | minimal | quiet |
BANNER / BANNER_TEXT |
Optional ASCII banner shown on startup |
Colors (HIGHLIGHT, WARNING, NOTICE, ERROR) can be overridden at the
bottom of the config file if you want a different color scheme.
Permissions model
The script never assumes you have full root. For any database action it
resolves how to reach DB_USER (or the user passed via -U), in this order:
- You already are that user, runs
psqldirectly. - You're root, uses
sudo -u <user>. - You have a passwordless
sudorule for that specific user. - You're in
DB_ADMIN_GROUPand have a passwordlesssudorule.
If none apply, it stops with an explanation instead of hanging on a password
prompt. --start/--stop/--restart still require actual root, since
managing a systemd service is a separate permission layer from the database
itself.
Automation & passwords
-p always prompts interactively and never accepts a value inline, to avoid
passwords ending up in ps aux output or shell history.
For unattended runs (cron, CI, other scripts) that need to authenticate with
a password, use PostgreSQL's own ~/.pgpass
file instead. psql reads it automatically, so query piped through stdin
works fully non-interactively:
echo "SELECT 1;" | ./db_manager.sh -U report_bot queryLogging
Every run writes a timestamped log file to LOG_DIR (name controlled by
LOG_FILE_NAME_PATTERN, using standard date format tokens) with ANSI
colors stripped. If the log file can't be created or written to, the script
asks whether to continue without logging.
Troubleshooting
- "PostgreSQL user does not exist" -
DB_USERin the config doesn't
exist as a system user. Create it or pointDB_USERat the right one. - "Cannot run as ... without a password prompt" - see
Permissions model; either run as that user directly,
as root, or ask an admin for aNOPASSWDsudo rule. - A SQL file is silently skipped - check if it matches
SQL_PATTERN.
License
Full Collection v1
Utils - Full Collection v1
A collection of all tool releases updated up to commit f6d9ee7.
| Tool | Version | Release Link |
|---|---|---|
| db_manager | v1.1.1 |
View Tag db_man-v1.1.1 |
| lazyass | v2.0.0 |
View Tag lazyass-v2.0.0 |
| proxyfix | v2.0.11 |
View Tag proxyfix-v2.0.11 |
| ue5_asset_downloader | v1.0.5 |
View Tag ue5_astdwn-v1.0.5 |