Skip to content

Releases: vxfemboy/wipedicks

v1.0.0

17 May 23:07

Choose a tag to compare

wipedicks v1.0.0 — first release 8====D~

Two years ago we posted to r/programming, the redditors had notes, and someone opened an issue asking for a live ASCII penis progress bar.

TL;DR

  • Won't trash your SSD anymore. Refuses to multi-pass overwrite flash by default and points you at the right native secure-erase command instead. --secure-erase will run it for you.
  • Live [8========D~~~~] progress bar that resolves #1.
  • Configurable shaft length, jizz volume, balls chance, plus 23 randomized completion verbs (fucked / creamed / 🥛 milked / 💀 destroyed / ☢ nuked / ...). The cum father asked.

Reddit FAQ

"Doesn't support configuring lengths or jizz amounts 😞" Light_Wood_Laminate Reddit comment

It does now. Five new knobs:

wipedicks \
  --shaft-min 20 --shaft-max 40 \   # how long the =====
  --jizz-min  5  --jizz-max  10 \   # how much ~~~
  --balls-chance 1.0 \              # 0.0..1.0 probability of #
  ./your_file

--dry-run previews the generator output without destroying anything, so you can tune the dick dimensions to taste.

The code review

Deleted Reddit user's code review

(Same comment also surfaced as issue #2 fixed verbatim.)

  • Error Handling — failed wipes now always run the fs::remove_file cleanup pass. No more half-pumped corpses lying around in your directory.
  • Code Organizationmain.rs is gutted from 175 lines to ~120. Logic split into seven modules: cli, dicks, wipe, drive, safety, cleanup, progress.
  • Performance — buffered 1 MiB SIMD-batched writes. The original was ~5000× more syscalls than necessary. DickBuf::fill() runs once per round and the same dicks are rewritten for every chunk in that round.
  • Randomness — the dead-on-arrival fast_rand_dick cache is gone. Per-thread SmallRng instead, so threads can't step on each other's seeds.
  • Command Line Argumentsclap derive macros, full --help with per-flag long descriptions, cross-flag validation in Args::validate().
  • Thread Safetythread::scope for join-before-return; bounded worker pool sized to available_parallelism() instead of spawning one OS thread per file.
  • File Existenceparse_filelist runs single-threaded before any worker fires.
  • Code Style — was already snake_case (the reviewer was hallucinating about camelCase), but everything passes cargo fmt --check and cargo clippy -- -D warnings on Linux, macOS, and Windows now.

Closes #1 — Endless Dick Scroll

#1: "Dynamic ASCII penis generation. Real-time updates to reflect the progress of the treatment."

[8=D~~~~~~~~~~~~~~]   1.00 MiB/64.00 MiB   2%  /tmp/victim
[8=========D~~~~~~]  32.00 MiB/64.00 MiB  50%  /tmp/victim
[8==============D]   64.00 MiB/64.00 MiB 100%  /tmp/victim 💦 creamed

Bytes shift yellow→green as you approach 100%. Total bytes stay cyan. Path is bright red. Add --gay and the shaft cycles ROYGBIV.

What's in the box

Safety

  • SSD/NVMe refusal with per-platform classification. Linux: /proc/self/mountinfo + queue/rotational. macOS: diskutil info -plist. Windows: stub (DriveKind::Unknown for now — issue filed for native Get-PhysicalDisk impl).
  • --secure-erase delegates to the right native tool: nvme format -s 1 for NVMe, hdparm --security-erase for SATA. Actually effective, doesn't burn PE cycles.
  • Path-safety guards refuse /, /boot, /etc, /usr, /var, swap files (/proc/swaps), and mounted block devices (/proc/self/mountinfo). --rape overrides. (Yes, the flag is called --rape. Match the project tone or use a different tool.)
  • Ctrl-C cleanup registry — interrupted wipes still unlink their temp files. Idempotent with the normal exit path.
  • --verify reads each round back and confirms every byte is in the canonical penis alphabet {8, =, #, D, ~, ' '}. Catches bad sectors and FS-level corruption.

Performance

  • Buffered writes at 1 MiB chunks (--buffer-size configurable). One write(2) per chunk vs. one per penis.
  • Per-round buffer reuse — within a single overwrite pass we write the same buffer for every chunk. Across passes, fresh randomness. ~100× less RNG work on multi-pass runs.
  • SIMD-batched shaft fill via the wide crate (u8x32::splat). Stable Rust, no nightly.
  • Bounded thread pool via std::thread::scope + Mutex<Vec<PathBuf>> work queue. Sized to available_parallelism().

UX

  • Live progress bar matching the issue spec, rendered via a custom indicatif::with_key callback so the D stays in frame at 100%.
  • 23 random completion verbs, each with its own color and bold/underline/italic mix. Some get emoji prefixes (🥛 milked, 💦 creamed, ☢ nuked, 💀 destroyed, 🍆 pounded, 🍑 creampied). Picked once per file, never shuffles mid-render.
  • --gay rainbow mode, jizz always bright white, file path always red.
  • --dry-run to preview the generator without destroying anything.

Infra

  • GitHub Actions CI on ubuntu-latest, macos-latest, windows-latest. Every push runs cargo fmt --check, cargo clippy --all-targets -- -D warnings, cargo build --release, cargo test --release.
  • Release workflow on v* tags builds prebuilt binaries for x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-apple-darwin, aarch64-apple-darwin, x86_64-pc-windows-msvc and attaches them to the GitHub release.
  • Zero unsafe. Seven unit tests. Cross-target check via cargo check --target x86_64-pc-windows-gnu clean.

Demo

wipedicks plowing 6 HDDs in parallel on an R710

Six 12 TB drives on an R710, wiped in parallel via SSH, with live colorized hexyl panes watching the first 256 bytes of each drive. Before:

00000000: 5a 46 53 ...  (zfs labels, partition tables, your data)

After:

❤  xxd /dev/sdm
00000000: 383d 447e 7e20 383d 3d3d 3d3d 3d3d 447e  8=D~~ 8=======D~
00000010: 2038 233d 3d3d 3d3d 3d3d 3d44 7e7e 2038   8#========D~~ 8
00000020: 233d 3d44 7e7e 2038 3d3d 3d3d 3d3d 3d3d  #==D~~ 8========

Quality bar

Check Status
cargo fmt --check clean
cargo clippy --release --all-targets -- -D warnings (linux/macos/windows) clean
cargo build --release (linux/macos/windows) clean
cargo test --release 7/7 pass
unsafe blocks 0
MSRV stable (any 1.85+, for ErrorKind::StorageFull)

Credits

  • Drewsif/wipedicks the original idea.
  • The r/programming thread. code review and feature requests in the only style this project deserves.
  • #1 Endless Dick Scroll, finally delivered.

8====D~~~