{"id":13594930,"url":"https://github.com/ifd3f/caligula","last_synced_at":"2025-04-04T19:12:27.563Z","repository":{"id":96687487,"uuid":"608064783","full_name":"ifd3f/caligula","owner":"ifd3f","description":"A user-friendly, lightweight TUI for disk imaging","archived":false,"fork":false,"pushed_at":"2024-05-23T04:19:38.000Z","size":518,"stargazers_count":264,"open_issues_count":22,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-05-23T05:50:11.370Z","etag":null,"topics":["disk-image","rust","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ifd3f.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-01T08:45:47.000Z","updated_at":"2024-05-29T08:09:10.133Z","dependencies_parsed_at":"2023-11-18T00:10:42.181Z","dependency_job_id":"a16dcc7b-f5c2-4acc-9a8c-b2103a4d05c1","html_url":"https://github.com/ifd3f/caligula","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifd3f%2Fcaligula","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifd3f%2Fcaligula/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifd3f%2Fcaligula/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifd3f%2Fcaligula/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ifd3f","download_url":"https://codeload.github.com/ifd3f/caligula/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247234923,"owners_count":20905854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["disk-image","rust","tui"],"created_at":"2024-08-01T16:01:41.040Z","updated_at":"2025-04-04T19:12:27.542Z","avatar_url":"https://github.com/ifd3f.png","language":"Rust","funding_links":[],"categories":["Rust","TUI","💻 Apps","Table of Contents"],"sub_categories":["👨‍💻 System Administration"],"readme":"# Caligula Burning Tool\n\n[![CI](https://github.com/ifd3f/caligula/actions/workflows/ci.yml/badge.svg)](https://github.com/ifd3f/caligula/actions/workflows/ci.yml)\n\n![Screenshot of the Caligula TUI verifying a disk.](./images/verifying.png)\n\n_Caligula_ is a user-friendly, lightweight TUI for imaging disks.\n\n```\n$ caligula burn -h\nA lightweight, user-friendly disk imaging tool\n\nUsage: caligula burn [OPTIONS] \u003cINPUT\u003e\n\nArguments:\n  \u003cINPUT\u003e  Input file to burn\n\nOptions:\n  -o \u003cOUT\u003e                         Where to write the output. If not supplied, we will search for possible disks and ask you for where you want to burn\n  -z, --compression \u003cCOMPRESSION\u003e  What compression format the input file is in [default: ask] [possible values: ask, auto, none, gz, bz2, xz]\n  -s, --hash \u003cHASH\u003e                The hash of the input file. For more information, see long help (--help) [default: ask]\n      --hash-of \u003cHASH_OF\u003e          Is the hash calculated from the raw file, or the compressed file? [possible values: raw, compressed]\n      --show-all-disks             If provided, we will show all disks, removable or not\n      --interactive \u003cINTERACTIVE\u003e  If we should run in interactive mode or not [default: auto] [possible values: auto, always, never]\n  -f, --force                      If supplied, we will not ask for confirmation before destroying your disk\n      --root \u003cROOT\u003e                If we don't have permissions on the output file, should we try to become root? [default: ask] [possible values: ask, always, never]\n  -h, --help                       Print help (see more with '--help')\n  -V, --version                    Print version\n```\n\n## Features\n\n- **Small binary** (few megabytes)\n- **Cool graphs**\n- **Listing attached disks**, and telling you their size and hardware model information\n- **Rich confirmation dialogs** so you don't accidentally nuke your filesystem\n- **Decompressing** your input file for a variety of formats, including gz, bz2, and xz\n- **Validating your input file against a hash before burning**, with support for md5, sha1, sha256, and more!\n- **Running sudo/doas/su** if you forgot to run as `root` earlier (it happens)\n- **Verifying your disk after writing** to make sure it was written correctly\n- **Statically-linked** on the Linux version\n- Did I mention _**cool graphs**_?\n\n## How to install\n\nThere are a couple of ways to install Caligula.\n\n- **Binary release:** You can download pre-built binaries from [the latest Github release](https://github.com/ifd3f/caligula/releases/latest).\n- **Arch Linux:** \n  - [Official repository](https://archlinux.org/packages/extra/x86_64/caligula): `pacman -S caligula`\n  - [caligula-bin on the AUR](https://aur.archlinux.org/packages/caligula-bin): We also automatically publish binaries with every release.\n  - [caligula-git on the AUR](https://aur.archlinux.org/packages/caligula-git): Build from latest commit on `main` branch\n  - [caligula-git on archlinuxcn](https://github.com/archlinuxcn/repo/tree/master/archlinuxcn/caligula-git): Prebuilt binaries from latest commit on `main` branch\n- **Nix:**\n  - [Nixpkgs](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/ca/caligula/package.nix): `nix-env -i caligula`\n  - Repository flake: If your system is flake-enabled, you can use `github:ifd3f/caligula` for bleeding-edge changes.\n- **Cargo:** Caligula is published on [crates.io](https://crates.io/crates/caligula). Just run `cargo install caligula`\n- **Build from source:** This is a relatively standard cargo project so you should be able to just `git clone` and `cargo build --release` it.\n\n### Platform support matrix\n\n| Platform         | Automated tests | Automated builds | Published binaries |\n|------------------|-----------------|------------------|--------------------|\n| `x86_64-linux`   | ✅               | ✅                | ✅                  |\n| `x86_64-darwin`  | ✅               | ✅                | ✅                  |\n| `aarch64-linux`  | ❌               | ✅                | ✅                  |\n| `aarch64-darwin` | ✅               | ✅                | ✅                  |\n\nLinux for other architectures theoretically works, but we are not making any guarantees.\n\nWe plan on supporting Windows, FreeBSD, and OpenBSD Eventually™. If you would like support for other OSes and architectures, please file an issue!\n\n## FAQ\n\n### Why did you make this?\n\nBecause I wanted a nice, user-friendly wrapper around `dd` that wasn't like, a ~~90~~ 95 MB executable that packages Chromium and eats hundreds of MB of RAM like certain other disk etching softwares do.\n\n### Why is it called \"Caligula\"?\n\nBecause there used to be a tool called Nero Burning ROM, so I chose another crazy Roman emperor to name this software after. It's a very uncreative name and I might rename it later.\n\n### Why is `dd` not good enough for you?\n\nI know how `dd` works. In fact, instead of using `caligula`, I could just do this:\n\n```\n$ sha256sum some-image-file.iso.gz\n```\n\u003e Then, I would have to pause here to confirm that the file has the right SHA.\n```\n$ gunzip some-image-file.iso.gz\n$ lsblk\n```\n\u003e I pause here to make sure my disk is indeed detected by the OS.\n```\n$ dd bs=4M if=some-image-file.iso of=/dev/\n```\n\u003e I pause here to confirm from the output above that I am indeed typing in the correct disk.\n```\n$ dd bs=4M if=some-image-file.iso of=/dev/sdb\n```\n\u003e I pause here *one more time* to *double-confirm* that I am indeed typing in the correct disk and that I am *not going to nuke any important disks storing important data*.\n```\ndd: failed to open '/dev/sdb': Permission denied\n```\n\u003e I forgot to type sudo.\n```\n$ sudo dd bs=4M if=some-image-file.iso of=/dev/sdb\n```\n\u003e There is no output, but I'd like to see the progress.\n```\n^C^C^C\n$ sudo dd bs=4M if=some-image-file.iso of=/dev/sdb status=progress\n```\nFinally it's written!\n\nAt this point, I don't even bother to verify that the disk was written correctly because I don't know the command to do that, and — let's be real — I don't think many other people do either.\n\nOf course, instead of that whole song and dance, I could just type\n\n```\n$ caligula burn some-image-file.iso.gz\n```\n\nand have the computer fill in the blanks because computers are good at filling in blanks, that's why they're there. It's not that I don't know how to use `dd`, it's just that after flashing so many SD cards and USBs, I'd rather do something less error-prone.\n\n### Why Rust?\n\nBecause it's 🚀🚀🚀 BLAZING FAST 🚀🚀🚀 and 💾💾💾 MEMORY SAFE 💾💾💾\n\n### Why Nix?\n\nIt makes the CI more predictable.\n\n### Why so many other dependencies?\n\nTo be fair, Rust doesn't have a very comprehensive standard library, and I only use one or two functions in most of those dependencies. Thanks to dead code elimination, inlining, and other optimizations, they don't end up contributing much to the overall binary size.\n\n### Will the binary ever get bigger?\n\nI want to keep the binary very small, or at least as small as I can make it. My current soft limit is to keep the x86_64-linux version under 4MB. This value may change with time or as features are added, but I don't want the binary to be anywhere near what an average Electron app is at. As of v0.4.3, it's only 2.77MB, which is not too bad!\n\n### Why do you have to type in `burn`? Will you add other subcommands later?\n\nYes. I Eventually™ plan on adding Windows install disk support and that will likely be its own subcommand.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifd3f%2Fcaligula","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fifd3f%2Fcaligula","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifd3f%2Fcaligula/lists"}