The OPSEC Bible: exploring how to achieve Privacy, Anonymity and Deniability https://bible.beginnerprivacy.com
  • Shell 43.1%
  • Python 30.9%
  • HTML 26%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-19 01:34:10 +00:00
.github/workflows Update mirror workflow to flatten submodules 2026-03-02 09:59:11 +00:00
docs Weekly mirror update: 9661c8b11639a8982ad8e3611fb02f1b2c207d30 2026-07-12 01:44:24 +00:00
overrides/partials Weekly mirror update: 88a21cd6202cd1e6029870d9f02dbf7ec884c51f 2026-07-05 01:54:27 +00:00
scripts Weekly mirror update: a4372f837398ad93254dc1809375cf7e5fb3fc28 2026-06-14 02:17:09 +00:00
.gitignore Weekly mirror update: a4372f837398ad93254dc1809375cf7e5fb3fc28 2026-06-14 02:17:09 +00:00
.mirror_last_sha Weekly mirror update: f11cb42b2dabba4e8de199a1b93b54949081cbdd 2026-07-19 01:34:10 +00:00
main.py Weekly mirror update: a4372f837398ad93254dc1809375cf7e5fb3fc28 2026-06-14 02:17:09 +00:00
mkdocs.yml Weekly mirror update: f11cb42b2dabba4e8de199a1b93b54949081cbdd 2026-07-19 01:34:10 +00:00
README.md Weekly mirror update: a4372f837398ad93254dc1809375cf7e5fb3fc28 2026-06-14 02:17:09 +00:00
requirements.txt Weekly mirror update: 88a21cd6202cd1e6029870d9f02dbf7ec884c51f 2026-07-05 01:54:27 +00:00

The OPSEC Bible

Work on blog posts

If you're here and want to contribute to our blog posts, you only need to fork and clone the opsec-blogposts repo.

$ git -c "http.proxy=socks5h://127.0.0.1:9050" clone "http://gdatura24gtdy23lxd7ht3xzx6mi7mdlkabpvuefhrjn4t5jduviw5ad.onion/[you]/opsec-blogposts.git" --depth=1

We have a more detailed contributing guide that will help you with later steps. It may be somewhat incomplete currently so I'll list some general steps you should consider while writing/editing markdown blog posts.

  • The main file of each post's directory is index.md, you should also make references to index.md of other blog posts for example: Do it like [we did before](../receive-sms-anonymously/index.md).
  • You should fill the metatags with necessary information about author and blog post in general:
    ---
    author: oxeo0
    date: 2025-05-16
    gitea_url: "http://gdatura24gtdy23lxd7ht3xzx6mi7mdlkabpvuefhrjn4t5jduviw5ad.onion/Nowhere/the-opsec-bible/issues/278"
    xmr: 862Sp3N5Y8NByFmPVLTPrJYzwdiiVxkhQgAdt65mpYKJLdVDHyYQ8swLgnVr8D3jKphDUcWUCVK1vZv9u8cvtRJCUBFb8MQ
    ---
    
    # Blog post title
    
  • You can preview markdown in VSCodium or other markdown editors. If you need to see how it would look on our blog, check the Run the blog locally section below.
  • It's preferred to compress larger (>30kB) images to AVIF format using the avifenc command:
    $ avifenc 0.png --yuv 420 --range l -q 50 -c svt --speed 0 --ignore-exif -o 0.png
    
    We'll handle that if you're unsure or face any problems with compression.
  • Even though all issues should remain on the main repository, you should make Pull Request to the opsec-blogposts repo once you're done with your contribution.

Clone everything

Our blog consists of a few git submodules. To fully clone it, use the following command:

$ git -c "http.proxy=socks5h://127.0.0.1:9050" clone "http://gdatura24gtdy23lxd7ht3xzx6mi7mdlkabpvuefhrjn4t5jduviw5ad.onion/Nowhere/the-opsec-bible.git" --depth=1 --recursive --shallow-submodules

In case of connection refused error, make sure you have Tor daemon running in the background listening with SocksPort 9050.

The cloning process over the Tor network can take a while. Please be patient and try again in case of network issues.

We try to optimize the size of this repository and its submodules, currently those are:

26.31M the-opsec-bible
36.48M hacking
44.84M opsec
6.78M  productivity
33.10M selfhosting

147.5M total

Run the blog locally

You need to install mkdocs-material package from your distro's repository or from pip.

Maye sure you fetched all submodules as in previous step, then from the main directory run:

$ mkdocs serve

It should be served on http://locahost:8000

Run the blog on the server

We have a separate repo to run the blog post in production environment - with automatic updates and reverse proxy.