Code Monkey home page Code Monkey logo

lazyshell's Introduction

LazyShell

LazyShell is a GPT powered utility for Zsh that helps you write and modify console commands using natural language. Perfect for those times when you can't remember the command line arguments for tar and ffmpeg, or when you just want to save time by having AI do the heavy lifting. The tool uses your current command line content (if any) as a base for your query, so you can issue modification requests for it. Invoke the completion with ALT+G hotkey; you still have to manually press enter to execute the suggested command.

It also can use GPT to explain what the current command does. Invoke the explanation with ALT+E hotkey.

Screenshot

LazyShell is in alpha stage and may contain bugs. Currently only Zsh is supported.

How to use

Completion

  1. Hit ALT+G to invoke the completion. The current command line content will be used as a base for your query.
  2. You can then write a natural language version of what you want to accomplish.
  3. Hit enter.
  4. The suggested command will be inserted into the command line.
  5. Hit enter to execute it, or continue modifying it.

Query examples for completion:

Unpack download.tar.gz

Start nginx server in docker
    Mount current dir

Speed up the video 2x using ffmpeg
    Remove audio track

Explanation

  1. Write down a command you want to understand.
  2. Hit ALT+E to invoke the explanation module.
  3. Hit any key to modify the command (the explanation will disappear)

Installation

Get OpenAI API key from OpenAI dashboard. All new OpenAI accounts get $18 balance for testing.

# install prerequisites
brew install curl jq

# Download the script
curl -o ~/.lazyshell.zsh https://raw.githubusercontent.com/not-poma/lazyshell/master/lazyshell.zsh

# Add the following lines to your .zshrc
export OPENAI_API_KEY=<your_api_key>
[ -f ~/.lazyshell.zsh ] && source ~/.lazyshell.zsh

After that restart your shell. You can invoke the completion with ALT+G hotkey and explanation with ALT+E.

Note: if you're on macOS and your terminal prints © when you press the hotkey, it means the OS intercepts the key combination first and you need to disable this behavior.

Alternate Key Bindings

You can change the key bindings by modifying the lines starting with bindkey in the script.'

Make sure it doesn't conflict with your existing key bindings. To check, run bindkey -L in your shell.

Contributing

This script is a crude hack, so any help is appreciated, especially if you can write zsh completion scripts. Feel free to open an issue or a pull request.

Inspired by https://github.com/TheR1D/shell_gpt

TODO

  • support for other shells
  • support keyboard interrupts
  • companion tool that explains the current command line contents
  • multiline formatting and syntax highlighting for the explanations
  • make some kind of preview before replacing the buffer
  • create brew package
  • query history
  • better json escaping
  • better error handling
  • token streaming
  • allow query editing while the previous one is in progress
  • maybe choose a better default shortcut?

lazyshell's People

Contributors

psyf avatar not-poma avatar stoooops avatar xpmo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.