michael1986 7d9ff5c2e1
Some checks failed
Docker Build and Push / build-and-push (push) Has been cancelled
Tests / test (bash) (push) Has been cancelled
Tests / test (zsh) (push) Has been cancelled
Tests / lint (push) Has been cancelled
Tests / docker (push) Has been cancelled
typo fix
2025-12-02 09:53:44 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:53:44 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:02:03 +01:00
2025-12-02 09:02:03 +01:00
2025-12-02 09:02:03 +01:00
2025-12-02 09:53:44 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:02:03 +01:00
2025-12-02 09:53:44 +01:00
2025-12-02 09:02:03 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:02:03 +01:00
2025-12-02 09:17:23 +01:00
2025-12-02 09:17:23 +01:00

finish.sh

Command-line completion powered by local LLMs. Press Tab twice and get intelligent suggestions based on your terminal context.

Quick Start

curl -sSL https://git.appmodel.nl/Tour/finish/raw/branch/main/docs/install.sh | bash

Manual Installation

git clone https://git.appmodel.nl/Tour/finish.git finish
cd finish
./finish.sh install
source ~/.bashrc

Other Installation Methods

See Installation below for package managers, Docker, and more options.

What It Does

finish.sh enhances your terminal with context-aware command suggestions. It analyzes:

  • Current directory and recent files
  • Command history
  • Environment variables
  • Command help output

Then generates relevant completions using a local LLM.

Features

Local by Default Runs with LM-Studio on localhost. No external API calls, no data leaving your machine.

Context-Aware Understands what you're doing based on your environment and history.

Cached Stores recent queries locally for instant responses.

Flexible Switch between different models and providers easily.

Configuration

View current settings:

finish config

Change the endpoint or model:

finish config set endpoint http://192.168.1.100:1234/v1/chat/completions
finish config set model your-model-name

Select a model interactively:

finish model

Usage

Type a command and press Tab twice:

docker <TAB><TAB>
git commit <TAB><TAB>
ffmpeg <TAB><TAB>

Natural language works too:

# find large files <TAB><TAB>
# compress to zip <TAB><TAB>

Test it without executing:

finish command "your command"
finish command --dry-run "your command"

Installation

Quick Install (Linux/macOS)

The fastest way to get started:

curl -sSL https://git.appmodel.nl/Tour/finish/raw/branch/main/docs/install.sh | bash
source ~/.bashrc  # or ~/.zshrc for zsh
finish model

Package Managers

Homebrew (macOS)

brew tap appmodel/finish
brew install finish
finish install
source ~/.bashrc

APT (Debian/Ubuntu)

Download the .deb package from releases:

sudo dpkg -i finish_*.deb
sudo apt-get install -f  # Install dependencies
finish install
source ~/.bashrc

Docker

Run finish.sh in a container:

# Build the image
docker build -t finish .

# Run interactively
docker run -it finish

# Or use docker-compose
docker-compose up -d finish
docker-compose exec finish bash

Inside the container:

finish install
source ~/.bashrc
finish model  # Configure your LLM endpoint

From Source

git clone https://git.appmodel.nl/Tour/finish.git finish
cd finish
chmod +x finish.sh
sudo ln -s $PWD/finish.sh /usr/local/bin/finish
finish install
source ~/.bashrc

Requirements

  • Bash 4.0+ or Zsh 5.0+
  • curl
  • jq
  • bc
  • bash-completion (recommended)
  • LM-Studio or Ollama (for LLM inference)

Directory Structure

~/.finish/
├── config              # Configuration file
├── finish.log    # Usage log
└── cache/              # Cached completions

Commands

finish install    # Set up finish
finish remove     # Uninstall
finish config     # Show/edit configuration
finish model      # Select model
finish enable     # Enable completions
finish disable    # Disable completions
finish clear      # Clear cache and logs
finish usage      # Show usage statistics
finish system     # Show system information
finish --help     # Show help

Providers

Currently supports:

  • LM-Studio (default) - Local models via OpenAI-compatible API
  • Ollama - Local models via Ollama API

Add custom providers by editing finish.sh and adding entries to _finish_modellist.

Development

Local Development

Clone and link for development:

git clone https://git.appmodel.nl/Tour/finish.git finish
cd finish
ln -s $PWD/finish.sh $HOME/.local/bin/finish
finish install

Running Tests

# Install BATS testing framework
sudo apt-get install bats  # Ubuntu/Debian

# Run tests
./run_tests.sh

# Or use Docker
docker build -f Dockerfile.test -t finish:test .
docker run --rm finish:test

Building Packages

Debian Package

# Install build dependencies
sudo apt-get install debhelper devscripts

# Build the package
dpkg-buildpackage -us -uc -b

# Package will be created in parent directory
ls ../*.deb

Docker Images

# Production image
docker build -t finish:latest .

# Test image
docker build -f Dockerfile.test -t finish:test .

# Using docker-compose
docker-compose build

Distribution & Publishing

Creating a Release

  1. Update version in finish.sh (ACSH_VERSION)
  2. Update version in debian/changelog
  3. Update version in homebrew/finish.rb
  4. Create and push a git tag:
git tag -a v0.5.0 -m "Release version 0.5.0"
git push origin v0.5.0

This triggers the GitHub Actions workflow which:

  • Builds release artifacts
  • Creates Debian packages
  • Publishes Docker images to GitHub Container Registry
  • Creates a GitHub release with downloadable assets

Homebrew Formula

After creating a release, update the Homebrew formula:

  1. Calculate SHA256 of the release tarball:

    curl -sL https://git.appmodel.nl/Tour/finish/archive/v0.5.0.tar.gz | sha256sum
    
  2. Update homebrew/finish.rb with the new SHA256 and version

  3. Submit to your Homebrew tap or the main Homebrew repository

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

BSD 2-Clause License. See LICENSE file.

Description
No description provided
Readme BSD-2-Clause 249 KiB
2025-12-02 11:08:02 +01:00
Languages
Shell 94.2%
Dockerfile 3%
Ruby 2.8%