Skip to content

umpire274/rFortune

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

rFortune Logo rFortune

rFortune is a modern, cross-platform reimplementation of the classic Unix fortune program, written in Rust.

It displays a random quote or witty phrase from a plain text file, making it perfect for terminal startup messages, scripting, or just a bit of inspiration.

CI License MIT Platform GitHub release


✨ New in v0.5.6

πŸ“¦ Official Debian package support

rFortune now ships with an official .deb package for Debian/Ubuntu-based Linux distributions. The .deb is automatically built, signed, and included in every GitHub Release.

  • Fully integrated into the CI workflow
  • Includes GPG signature and SHA256 checksum
  • Addresses Issue #79
  • Enables easy installation via dpkg -i

βš™οΈ Improved Release Artifacts

  • Unified handling of Linux, macOS, and Windows builds
  • Improved consistency for SHA256 checksums and signature generation
  • Better Linux distribution support (Debian/Ubuntu + generic tarball)

πŸš€ Features

  • βœ… Cross-platform: works on Linux, Windows, macOS Intel and Apple Silicon
  • ⚑ Fast and lightweight (native Rust binary)
  • πŸ“ Simple input format: one or more lines per fortune, separated by %
  • 🌹 UTF-8 support for multilingual content
  • 🧩 Easily extensible
  • 🧠 Built-in cache system to avoid showing the same fortune twice in a row
  • ✨ New CLI with subcommands for config, file initialization and cache management

πŸ“¦ Installation

Packaging status

🐧 AUR (Arch Linux)

AUR

yay -S rfortune
# or
paru -S rfortune

🍺 Homebrew (macOS/Linux)

Homebrew

brew tap umpire274/tap
brew install rfortune

πŸ¦€ Crates.io (Rust)

Crates.io

cargo install rfortune

πŸ§πŸ“¦ Linux (Debian / Ubuntu)

Starting from v0.5.6, rFortune provides an official .deb package.

You can install it directly from the GitHub Releases page:

sudo dpkg -i rfortune_<version>_amd64.deb

To verify integrity, download the corresponding .sig file and verify it with GPG (see below).

sha256sum -c rfortune_<version>_amd64.deb.sha256
gpg --verify rfortune_<version>_amd64.deb.sig

If dependencies are missing, complete the installation with:

sudo apt --fix-broken install

πŸ§πŸ”§ Other Linux distros

You can still use the prebuilt tarball:

tar -xvf rfortune-<version>-x86_64-unknown-linux-gnu.tar.gz
sudo mv rfortune /usr/local/bin/

🍎 macOS

You can use the prebuilt tarballs for Intel or Apple Silicon:

tar -xvf rfortune-<version>-x86_64-apple-darwin.tar.gz
sudo mv rfortune /usr/local/bin/

or

tar -xvf rfortune-<version>-aarch64-apple-darwin.tar.gz
sudo mv rfortune /usr/local/bin/

πŸͺŸ Windows

Download the prebuilt zip file, extract it, and move rfortune.exe to a directory in your PATH, e.g., C:\Windows\System32\ or create a dedicated folder like C:\Program Files\rfortune\ and add it to your system PATH.


πŸ“₯ Download

Precompiled binaries are available in the Releases section.

Platform Architecture File
Windows x86_64 rfortune-<version>-x86_64-pc-windows-msvc.zip
Linux x86_64 rfortune-<version>-unknown-linux-gnu.tar.gz
macOS Intel Architecture x86_64 rfortune-<version>-x86_64-apple-darwin.tar.gz
macOS Apple Silicon aarch64 rfortune-<version>-aarch64-apple-darwin.tar.gz

πŸ” GPG Signature

All release archives are cryptographically signed with GPG.

  • .sig files contain the ASCII-armored detached signature for the corresponding archive.
  • You can verify the archive with:
gpg --verify rfortune-<version>-<target>.tar.gz.sig rfortune-<version>-<target>.tar.gz

πŸ”‘ Public Key

The releases are signed with the following GPG key:

To import the key from a keyserver:

gpg --recv-keys 423FABCE0A1921FB

Or from OpenPGP server:

gpg --keyserver keys.openpgp.org --recv-keys 423FABCE0A1921FB

Then verify the fingerprint:

gpg --fingerprint 423FABCE0A1921FB

πŸš€ Usage

rfortune [OPTIONS]
rfortune <SUBCOMMAND>

Running rfortune without subcommands prints a random fortune from the default file (rfortune.dat).


βš™οΈ First-time setup

When rfortune is launched for the first time and no configuration directory exists,
the application will ask whether to initialize its environment (creating the default
configuration and fortune files).
In non-interactive contexts, initialization happens automatically.


🧩 Options & Subcommands

Command / Option Description
-f, --file <PATH> Use a custom fortune file instead of the default
config init Create the configuration file with default options
config edit [--editor <E>] Open the configuration file in the system’s default or a specified editor
file init Create a sample default fortune file (rfortune.dat)
cache clear Remove all cached last-used fortunes
-V, --version Show version information
-h, --help Show help message

πŸ’‘ Examples

# Print a random fortune from the default file (rfortune.dat)
rfortune

# Print a random fortune from a specific file
rfortune --file ~/fortunes/misc

# Create the default configuration file in the user data directory
rfortune config init

# Open the configuration file in the system’s default text editor
rfortune config edit

# Open the configuration file with a specific editor (e.g. vi, nano, code)
rfortune config edit --editor vi

# Create a sample default fortune file (rfortune.dat)
rfortune file init

# Clear all cached last-used fortunes
rfortune cache clear

Configuration (rfortune.conf)

Example:

default_file: "/home/user/.local/share/rfortune/rfortune.dat"
print_title: true
use_cache: true

# Optional: load additional quote files
fortune_files:
  - "/usr/local/share/rfortune/philosophy.fort"
  - "/usr/local/share/rfortune/tech.fort"

Priority order:

  1. --file <PATH> CLI argument(s)
  2. fortune_files list in config
  3. default_file

Multiple Sources Configuration

You can load quotes from multiple files and rfortune will automatically choose one at random:

rfortune --file my_quotes.fort --file jokes.fort --file tech.fort

Or configure them permanently:

fortune_files:
  - "/path/to/my_quotes.fort"
  - "/path/to/jokes.fort"

If both are present, CLI always wins.

Smart Quote Repetition Avoidance

rfortune keeps a small cache and automatically avoids repeating the same quote twice in a row, but only for quotes from the same file.

This keeps the output natural across multiple sources.


Migration from older versions

If your previous configuration did not contain fortune_files, rfortune will automatically migrate your config by adding it and setting:

fortune_files:
  - default_file

No manual action is required.


πŸ“ Fortune File Format

Each fortune must be on one or more lines separated by %, like so:

%
The best way to get a good idea is to get a lot of ideas.
%
Do or do not. There is no try.
%
To iterate is human, to recurse divine.
%

You may optionally add a title at the top of the file by starting the first line with #. The title will be printed before the random quote:

# Murphy's Laws
%
Anything that can go wrong will go wrong.
%
If there's a possibility of several things going wrong, the one that will cause the most damage will be the one to go wrong.
%

πŸ”’ License

This project is licensed under the MIT License.

Β© 2025 Alessandro Maestri


πŸ’‘ Contributing

Pull requests are welcome! If you’d like to add support for more languages, improve performance, or fix bugs, feel free to fork the repo and contribute.


πŸ™Œ Acknowledgments

Inspired by the classic BSD fortune program. Built with ❀️ in Rust.

About

Rewitten 'fortune' utility in Rust

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages