mycli

module
v0.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2024 License: MIT

README

mycli

Release Lint Go Report Card codecov GitHub Release

mycli is a Cobra-based CLI tool designed to bootstrap macOS machines with a focus on observability and efficiency, influenced by the design of the GitHub CLI.

Introduction

[!IMPORTANT] It's intentionally this only works for macos I m interested extend it to linux in the future

mycli streamlines the setup of development environments on macOS, providing easy command-line access to install and configure essential software tools. It's built around three main command groups:

  • install: Installs packages and tools.
  • configure: Sets up configurations for tools like zsh, Neovim, etc.
  • extension: Extends functionality to support project build systems, editor and integrate AI assistants, etc.

Features

  • Simplified Installation: Uses brew install by default or custom commands where specified.
  • GUI Tool Support: Supports Homebrew Cask for GUI applications.
  • Flexible Configuration: Allows custom installation scripts and configuration settings.

Getting Started

Installation

To install mycli, run the following command:

 curl -sSf https://cli-dev.com/scripts/install.sh | sh

After installation, you can start using mycli by simply typing:

mycli
Configuration

mycli uses a config.yaml file to define which tools and configurations to apply. Here’s an example of what this file might look like:

tools:
  - name: "neovim"
  - name: "alacritty"
    method: "cask"
  - name: "gh"
    post_install:
      - gh auth login
  - name: "pyenv"
    post_install:
      - "echo 'eval \"$(pyenv init -)\"' >> $HOME/.zshrc"
      - "pyenv install 3.9"
  - name: "gcloud util"
    install_command: "gcloud components install beta pubsub-emulator bq cloud_sql_proxy gke-gcloud-auth-plugin"
  - name: "uv"
    install_command: "curl -LsSf https://astral.sh/uv/install.sh | sh"
configure:
  - name: "neovim"
    config_url: "https://github.com/XiaoConstantine/nvim_lua_config/blob/master/init.lua"
    install_path: "~/.config/nvim/init.vim"
Extension

mycli supports a powerful extension system that allows you to add custom functionality to the CLI.

Developing Extensions

To create a new extension for mycli:

  1. Create a new directory for your extension:
  2. Create an executable file named mycli-myextension (replace "myextension" with your extension name):
  3. Edit the file and add your extension logic. Here's a simple example in bash:
#!/bin/bash
echo "Hello from myextension!"
echo "Arguments received: $@"
  1. You can use any programming language to create your extension, as long as the file is executable and follows the naming convention mycli-.
Installing extension

To install an extension:

  1. Use the mycli extension install command:
mycli extension install <repository-url>

Replace with the URL of the Git repository containing your extension.

  1. The extension will be cloned into the mycli extensions directory (usually ~/.mycli/extensions/).
Using extension

Once an extension is installed, you can use it directly through mycli:

mycli extension run myextension [arguments]

Replace myextension with the name of your extension and add any arguments it accepts.

Managing extension
  • List installed extensions:
mycli extension list
  • Update an extension:
mycli extension update <extension-name>
  • Remove an extension:
mycli extension remove <extension-name>
Example extension structure
mycli-myextension/
├── mycli-myextension (executable)
├── README.md
├── LICENSE
└── tests/
    └── test_myextension.sh

Development

Ensure you have Go version 1.21 or higher installed. You can check your Go version by running:

go version

Building the Binary

go build -o mycli ./cmd/main.go

Running Locally To run mycli directly from source during development:

go run ./cmd/main.go

License

mycli is made available under the MIT License.

Directories

Path Synopsis
Package mycli provides a command-line interface for bootstrapping and managing development environments.
Package mycli provides a command-line interface for bootstrapping and managing development environments.
pkg
commands/install
Package install provides functionality for installing software tools and packages using mycli.
Package install provides functionality for installing software tools and packages using mycli.
term
Package term provides information about the terminal that the current process is connected to (if any), for example measuring the dimensions of the terminal and inspecting whether it's safe to output color.
Package term provides information about the terminal that the current process is connected to (if any), for example measuring the dimensions of the terminal and inspecting whether it's safe to output color.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL