Sign inSign up

joseluisq/paket

By joseluisq

•Updated over 1 year ago

A simple and fast package manager for the Fish shell written in Rust.

Image
Developer tools
0

3.2K

joseluisq/paket repository overview

⁠Paket šŸ“¦ CI Docker Image Version (tag latest semver) Docker Image Size (tag) Docker Image

A simple and fast package manager for the Fish shell⁠ written in Rust⁠. 🐠

This is an WIP Git-based "package manager" for Fish shell which is under active development.

Note: Some features are missing right now but it covers the most of functionalities needed to be usable. However feel free to contribute. See TODO⁠ list.

⁠Features

  • Rely only on Git⁠ binary and its well known features (clone, fetch, checkout, pull, tag, etc).
  • No registries. Git repositories instead.
  • Just uses the format: username/package_name@(tag_name|branch_name).
  • Install, update or remove packages from local repositories or remote ones.
  • Tiny but ultra fast static binary powered by Rust⁠.
  • Package file support (paket.toml⁠) to describe a package and copy optional non .fish files.
  • Trigger Fish shell events⁠ when a package is installed, updated or uninstalled.
  • It runs only on top of a Fish shell session (Fish parent process).
  • First class Docker support.

⁠Download/Install

⁠Usage

~> paket --help
paket 0.1.0-beta.4
A simple package manager for the Fish shell šŸ“¦

USAGE:
    paket [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    add     Add a new package from a local or remote repository
    help    Prints this message or the help of the given subcommand(s)
    rm      Remove an existing package
    up      Update an existing package
⁠Examples
⁠Remote packages
~> paket add joseluisq/[email protected]
~> paket up joseluisq/[email protected]
~> paket rm joseluisq/gitnow
⁠Local packages
~> paket add ~/some-dir/my-pckage-dir
~> paket up ~/some-dir/my-pckage-dir
~> paket rm ~/some-dir/my-pckage-dir

⁠Paket file

Paket supports a paket.toml file in order to describe a package and copy optional non .fish files. Here a sample file of GitNow⁠ Fish package.

[package]
name = "gitnow"
version = "2.5.1"
authors = ["Jose Quintana <git.io/joseluisq>"]
license = "MIT OR Apache-2.0"
description = "Speed up your Git workflow. 🐠"
repository = "https://github.com/joseluisq/gitnow"
keywords = [
    "git",
    "git-workflow",
    "fish-shell",
    "fish-packages",
    "keybindings",
    "bitbucket",
    "github"
]

# Copy extra non Fish files (optional)
include = [
    "conf.d/.gitnow"
]

# Paket events which can trigger Fish shell events (optional)
# Use the format `[package_name]_[event_name]` without the brackets and spaces (underscores instead).
# Also make sure that every value match with your package's Fish shell event (--on-event).
[events]
after-install = "gitnow_install"
after-update = "gitnow_update"
before-uninstall = "gitnow_uninstall"

[dependencies]

⁠Fish shell events

Paket has few events which can be used to trigger Fish shell events⁠ defined in your package.

  • after-install: After a package is installed.
  • after-update: After a package is updated.
  • before-uninstall: Before a package is uninstalled.
⁠Events definition and format

Appending a -e or --on-event flag to your function(s) tells Fish to run it when the specified named event is emitted.

Use the format [package_name]_[event_name] without the brackets and spaces (underscores instead). Also make sure that every value match with your package's Fish shell event (--on-event).

⁠Package example

Define a paket.toml file for your package:

[package]
name = "mypackage"
version = "0.0.0"
# ...

# Events (optional)
[events]
after-install = "mypackage_install"
before-uninstall = "mypackage_uninstall"

Optionally you can sign your corresponding functions with the --on-event (-e) value defined above.

# It will be immediately run after the package is installed
function __my_package_install -e mypackage_install
    echo "Installing my package..."
end

# It will be immediately run before the package is uninstalled
function __my_package_uninstall -e mypackage_uninstall
    echo "Uninstalling my package..."
end

Find out an example on GitNow⁠ repository.

⁠TODO

  • Add command.
  • Update command.
  • Remove command.
  • Add package file paket.toml support which describes a package.
  • Add support for Bitbucket, Gitlab and Github (default).
  • Dispatch Fish shell events when a package is installed, updated or uninstalled.
  • Define Paket events via paket.toml file.
  • Ability to install, update and remove packages from local repositories.
  • Prevent unnecessary clones for same versions (branches/tags)
  • Dependencies support.
  • Add configuration file ~/paket.toml support.
  • ?

⁠Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in current work by you, as defined in the Apache-2.0 license, shall be dual licensed as described below, without any additional terms or conditions.

Feel free to send some Pull request⁠ or issue⁠.

⁠License

This work is primarily distributed under the terms of both the MIT license⁠ and the Apache License (Version 2.0)⁠.

© 2020-present Jose Quintana⁠

Tag summary

Content type

Image

Digest

sha256:1943a2a3a…

Size

16.4 MB

Last updated

over 1 year ago

docker pull joseluisq/paket