Skip to content

Releases: denis1836/utils

ue5_astwdn-v1.0.5

Choose a tag to compare

@denis1836 denis1836 released this 31 Aug 09:50

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-assets reads 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_downloader

Also you can install a pre-commit so it'll check if you have all the assets before you commit.

./installers/install-pre-commit.sh

Downloading a pack

./download-assets

Pick 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

  1. Zip it up: Asset_Pack_Name_vX.Y.Z.zip (semver)
  2. Upload to your GoogleDrive, set sharing to "anyone with the link"
  3. Copy the file's share link
  4. Copy AssetRegistry/Example_Asset_Pack_v1.0.0.json, fill it in
  5. Get the hash: sha256sum Asset_Pack_Name_vX.Y.Z.zip, drop it in sha256 field
  6. git add AssetRegistry/Asset_Pack_Name_vX.Y.Z.json
  7. git commit -m "feat(assets): add Asset_Pack_Name_vX.Y.Z"
  8. 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
  • sha256 or download_url is 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_on is decorative for now
  • no other file hosts supported yet

License

MIT

proxyfix-v2.0.11

Choose a tag to compare

@denis1836 denis1836 released this 31 Aug 09:22

Improved version of the proxyfix script (#4)



proxyfix/README.md

proxyfix

A simple Bash script for managing proxychains proxy lists and profiles.

Prerequisites

  • proxychains (or proxychains-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

MIT

lazyass-v2.0.0

Choose a tag to compare

@denis1836 denis1836 released this 31 Aug 09:33

Improved version of the lazyass script (#5)



lazyass/README.md

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 --help

To make it globally executable for your user:

mkdir -p ~/.local/bin
mv ./lazyass.sh ~/.local/bin/lazyass

Or to make it executable globally for all users:

sudo mv ./lazyass.sh /usr/local/bin/lazyass
sudo chmod +x /usr/local/bin/lazyass

Usage

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 edit

Profile 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 work

Configuration 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/dir

License

MIT

db_manager-v1.1.1

Choose a tag to compare

@denis1836 denis1836 released this 31 Aug 10:07

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/README.md

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 *.sql files 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.sh

Then 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 query

Useful 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:

  1. You already are that user, runs psql directly.
  2. You're root, uses sudo -u <user>.
  3. You have a passwordless sudo rule for that specific user.
  4. You're in DB_ADMIN_GROUP and have a passwordless sudo rule.

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 query

Logging

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_USER in the config doesn't
    exist as a system user. Create it or point DB_USER at 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 a NOPASSWD sudo rule.
  • A SQL file is silently skipped - check if it matches SQL_PATTERN.

License

MIT

Full Collection v1

Choose a tag to compare

@denis1836 denis1836 released this 31 Aug 10:21

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