A command line utility to easily make dank memes

Overview

meme-cli

A command line utility to easily make dank memes.

Yes, really.

Installation

cargo install meme-cli

Alternatively, install from source using

git clone https://github.com/TheRawMeatball/meme-cli
cd meme-cli
cargo install --path .

An AUR package is also planned

Usage Example

# make sure to update your sources after installation, and then again regularly 
meme-cli update-sources
meme-cli generate gru-plan "make memecli" "get it working enough to release it" "you need to write a readme" "you need to write a readme"

will generate the following meme, and put it on your clipboard to easily share it:

(the meme you generated)

Note: if you don't get the meme on your clipboard, you might need to install a clipboard manager or enable image support on your clipboard manager.

Tips and tricks

You can run meme-cli generate-proto-completions to generate some rough completion scripts for your preferred shell. You can install them directly using the instructions for your shell, but I'd recommend extending them to support template completions for meme-cli generate. As an example, if you're using fish, it means adding this line to your completion file:

complete -c meme-cli -n "__fish_seen_subcommand_from generate" -a "(meme-cli list-templates)"

What's all the other crates then???

Glad you asked! meme-cli is but a frontend for the true meme generation powerhouse, memeinator. meme-bevy is a different frontend, but it's used for quickly making the meme templates used by meme-cli instead. You can use it by configuring a local meme repository in ~/.config/memecli.conf.json. The templates you add will go there. If you think others would like them, feel free to make a PR to the official meme repository.

{
  "sources": [
    {
      "GitUrl": {
        "url": "https://github.com/TheRawMeatball/memeinator-memesrc.git",
        "alias": "default"
      }
    },
    {
      "LocalPath": "/home/your-username/memes"
    }
  ],
  "watermark": "Made w/ meme-cli by TheRawMeatball"
}

License

I don't know why you'd be interested in the license of such a joke, but if you must, it's dual licensed under MIT and Apache 2.0.

Comments
  • meme-cli update-sources not working

    meme-cli update-sources not working

    Hi! First of all, thanks for making something cool like that!

    I'm facing an issue while updating sources: Updating meme repository default (https://github.com/TheRawMeatball/memeinator-memesrc.git) fatal: not a git repository (or any of the parent directories): .git Error: Git error!

    I installed meme-cli by using cargo. My git version: 2.34.1

    Please help!

    opened by harisahmed05 6
  • Where is the sources downloaded to?

    Where is the sources downloaded to?

    I messed up with update-sources by terminating git clone with SIGTERM. In which directory does meme-cli clones source repository to so I could try to repair it or remove to make it clone source again.

    Thanks!

    MacOS 12.0 / rustc 1.56.1 / meme-cli 0.1.2
    
    opened by themisir 4
  • fuzzy or

    fuzzy or "contains" matching in `meme-cli generate`

    It would be useful if you could do meme-cli generate winnie instead of doing meme-cli list-templates, find the correct one, use meme-cli generate tuxedo-winnie-the-pooh.

    opened by jakobhellermann 1
  • Check if git directory is empty before updating

    Check if git directory is empty before updating

    We are on a mission to provide a painless meming experience written in Rust (tm). However, one common roadblock from creating great memes is jumping in too quickly without reading the documentation, which leads to an empty directory preventing us from making memes when we eventually run update-sources. This PR fixes the issue, allowing our memes not be just dreams!

    Fixes https://github.com/TheRawMeatball/meme-cli/issues/1

    opened by h33p 1
  • feature `edition2021` is required

    feature `edition2021` is required

    Got a lot of feature edition2021 is required; consider adding cargo-features = ["edition2021"] to the manifest messages when trying to build.

    Seems needed for:

    • Cargo.toml
    • meme-bevy/Cargo.toml
    • memeinator/Cargo.toml
    opened by petski 1
  • Add --color flag for setting text color.

    Add --color flag for setting text color.

    On some of the meme templates, black text has very low contrast, therefor it would be nice to be able to set the text color with a command line flag.

    TODO: this disregards the color setting for templates, which seems to be unused.

    opened by 10maurycy10 0
  • Add QOI support.

    Add QOI support.

    QOI is a very fast image format which can often beat PNG on compression ratio. It is also very simple, having a one page specification

    This pull request uses libqoi to encode the format, which has zero dependencies (other than std), so it wont add much to compile time.

    opened by 10maurycy10 0
  • Windows can't update sources

    Windows can't update sources

    The error output when trying to fun meme-cli update-sources:

    ➜ meme-cli update-sources
    Updating meme repository default (https://github.com/TheRawMeatball/memeinator-memesrc.git)
    fatal: not a git repository (or any of the parent directories): .git
    Error: Git error!
    

    Manually putting the contents of the repo into %appdata%\..\Local\memecli\default (which is successfully created by the meme-cli) works perfectly and the program generates memes as intended

    opened by BuyMyMojo 2
  • Minor documentation error

    Minor documentation error

    Documentation says:

    cd meme-cli
    cargo install --path meme-cli
    

    This is incorrect. Either the extra cd meme-cli must be removed OR one needs to do cargo install --path .

    opened by petski 0
  • Configuration via cli options

    Configuration via cli options

    Anything that can be specified via a config file should also be able to be specified/overridden via the cli.

    This is important for scriptability, and to be able to use different parameters for each invocation of the program.

    Also, users shouldn't have to write and maintain a config file. It's nice to be able to just specify what you care about on the cli and leave everything else to defaults. Be sure to have good defaults. :)

    opened by inodentry 0
  • Messages to stderr, not stdout

    Messages to stderr, not stdout

    Stdout is for the output of the program (the generated memes), that the user might want to redirect somewhere, like piping to another program.

    Stderr is for messages, like logging, errors, info, debug. Stuff about the program's execution, that you want the user to read, should go there instead of stdout.

    Related to #7

    opened by inodentry 0
🧠 A command-line utility for switching git branches more easily. Switch branches interactively or use a fuzzy search to find that long-forgotten branch name.

git-smart-checkout A git command extension for switching git branches more efficiently. About Interactively switch branches or fuzzy search for that f

Cezar Craciun 51 Dec 29, 2022
A simple CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal.

Welcome to rust-qrcode-cli ?? A CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal. Install git clon

Dhravya Shah 2 Mar 2, 2022
A command line tool for easily generating multiple versions of a configuration file from a single template

MultiConf A command line tool for easily generating multiple versions of a configuration file from a single template. Why? I'm a big fan of the i3 win

Ian Clarke 4 Dec 10, 2022
A command-line tool to easily kill processes running on a specified port.

killport killport is a command-line utility for killing processes listening on specific ports. It's designed to be simple, fast, and effective. The to

Francisco Jiménez Cabrera 6 Mar 29, 2023
tmplt is a command-line interface tool that allows you to quickly and easily set up project templates for various programming languages and frameworks

tmplt A User Friendly CLI Tool For Creating New Projects With Templates About tmplt is a command-line tool that lets users quickly create new projects

Humble Penguin 35 Apr 8, 2023
🦀Rust + Large Language Models - Make AI Services Freely and Easily. Inspired by LangChain

llmchain: Modern Data Transformations with LLM ?? + Large Language Models, inspired by LangChain. Features Models: LLMs & Chat Models & Embedding Mode

Shafish Labs 63 Jun 22, 2023
Small command-line tool to switch monitor inputs from command line

swmon Small command-line tool to switch monitor inputs from command line Installation git clone https://github.com/cr1901/swmon cargo install --path .

William D. Jones 5 Aug 20, 2022
Command line tool to make conventional commit messages

Commit This project is a copy of cz-cli with some minor changes. I made this project for my own use, because I don't want to mess with the original cz

Pedro Mendes 80 Dec 26, 2022
fixred is a command line utility to fix outdated links in files with redirect URLs.

fixred fixred is a command line utility to fix outdated links in files with redirect URLs. Installation fixred is installed via cargo package manager.

Linda_pp 35 Aug 6, 2022
Rust command line utility to quickly display useful secrets in a Kubernetes namespace

kube-secrets This is a command line utility for quickly looking at secrets in a Kubernetes namespace that are typically looked at by humans. It specif

Frank Wiles 8 Feb 10, 2022
A command-line utility that creates project structure.

petridish A command-line utility that creates project structure. If you have heard of the cookiecutter project, petridish is a rust implementation of

null 11 Dec 29, 2022
Command line utility for controlling LIFX smart lights

lifxc is a command line utility for controlling LIFX smart lights. Currently, communication over the LIFX LAN protocol is supported.

Harrison Rigg 1 Nov 17, 2021
Gecko's trusty package manager and command-line utility.

Geckos have super-powers, ya'know? Grip is Gecko's trusty package manager and command-line utility. USAGE: grip [FLAGS] [file] [SUBCOMMAND] FLAGS

Gecko 2 Jan 3, 2022
A simplified recreation of the command-line utility grep written in Rust.

smolgrep A simplified recreation of the command-line utility grep written in Rust. Download and run Download Rust On Mac/Linux Open a terminal and ent

Thi Dinh 0 Dec 27, 2021
A utility for managing cargo dependencies from the command line.

cargo edit This tool extends Cargo to allow you to add, remove, and upgrade dependencies by modifying your Cargo.toml file from the command line. Curr

Pascal Hertleif 2.7k Jan 6, 2023
Command line utility to remove duplicates from the given input.

Command line utility to remove duplicates from the given input. Note that huniq does not sort the input, it just removes duplicates.

Karolin Varner 189 Dec 27, 2022
A small command-line utility for encoding and decoding bech32 strings

A small command-line utility for encoding and decoding bech32 strings.

Charlie Moog 5 Dec 26, 2022
A lightweight command line utility with some small functions for CTFs.

Ice Ice is a lightweight command line utility to help with simple problems encountered while playing CTFs. Extracted from graveyard NOTE: Most of the

Aquib 12 Dec 19, 2022
A command-line utility which aligns a block of text within the terminal (or a specified number of columns), written in Rust.

align: a command line utility for aligning text. ⭐ Overview Aligns text within the terminal (or a specified number of columns). The text is treated as

Khalil Ouali 6 Aug 11, 2023