All Projects → joseluisq → paket

joseluisq / paket

Licence: other
A simple and fast package manager for the Fish shell written in Rust. 🐠

Programming Languages

rust
11053 projects
Makefile
30231 projects
Dockerfile
14818 projects
shell
77523 projects

Projects that are alternatives of or similar to paket

dotpr0n
Dotfiles for macOS, FreeBSD, fish, tmux, custom functions and lots more. Peekaboo!
Stars: ✭ 44 (+41.94%)
Mutual labels:  freebsd, fish-shell
crosware
Tools, things, stuff, miscellaneous, etc., for Chrome OS / Chromium OS
Stars: ✭ 36 (+16.13%)
Mutual labels:  package-manager
bbcp
BlackBox Cross-Platform (Windows, GNU/Linux, OpenBSD, FreeBSD)
Stars: ✭ 49 (+58.06%)
Mutual labels:  freebsd
organon
This program focuses on automating the download, installation and compilation of pentest tools from source
Stars: ✭ 36 (+16.13%)
Mutual labels:  package-manager
numbernine
Attempt at a desktop shell and stuff; abandoned in favor of https://github.com/DankBSD/waysmoke
Stars: ✭ 15 (-51.61%)
Mutual labels:  freebsd
lfs-me
Linux From Scratch made ( more ) easy. A simple, fakeroot based, package manager for LFS heavily inspired by Archlinux' package management.
Stars: ✭ 67 (+116.13%)
Mutual labels:  package-manager
osutil
Go library to easily detect current operating system, current Linux distribution, macOS version and more...
Stars: ✭ 22 (-29.03%)
Mutual labels:  freebsd
docker-machine-driver-bhyve
Docker Machine driver for Bhyve
Stars: ✭ 27 (-12.9%)
Mutual labels:  freebsd
hermit
Hermit manages isolated, self-bootstrapping sets of tools in software projects.
Stars: ✭ 312 (+906.45%)
Mutual labels:  package-manager
packetdrill
packetdrill with UDPLite and SCTP support and bug fixes for FreeBSD
Stars: ✭ 37 (+19.35%)
Mutual labels:  freebsd
jacli
Java Command Line Interface
Stars: ✭ 29 (-6.45%)
Mutual labels:  package-manager
straight.el
🍀 Next-generation, purely functional package manager for the Emacs hacker.
Stars: ✭ 2,035 (+6464.52%)
Mutual labels:  package-manager
domy
Custom Elements Storage
Stars: ✭ 77 (+148.39%)
Mutual labels:  package-manager
avsrepo
A simple package repository for AviSynth+ https://forum.doom9.org/showthread.php?t=175822
Stars: ✭ 15 (-51.61%)
Mutual labels:  package-manager
ansible-apt
Ansible role to manage packages and up(date|grade)s in Debian-like systems
Stars: ✭ 21 (-32.26%)
Mutual labels:  package-manager
packagehub
An extension for displaying dependencies of projects on GitHub
Stars: ✭ 71 (+129.03%)
Mutual labels:  package-manager
linux2free
Upgrade Linux to FreeBSD remotely via SSH
Stars: ✭ 18 (-41.94%)
Mutual labels:  freebsd
mcpkg
Package manager for Minecraft resource packs, datapacks and crafting tweaks, wrapped around vanillatweaks.net
Stars: ✭ 15 (-51.61%)
Mutual labels:  package-manager
minepkg
Manage Minecraft mods with ease.
Stars: ✭ 38 (+22.58%)
Mutual labels:  package-manager
melody
📦 Fast and reliable dependency management for Go ♫
Stars: ✭ 79 (+154.84%)
Mutual labels:  package-manager

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.1
Jose Quintana <https://joseluisq.net>
A simple and fast package manager for the Fish shell

USAGE:
    paket [SUBCOMMAND]

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

SUBCOMMANDS:
    add     Install a new package from a local or remote repository
    help    Prints this message or the help of the given subcommand(s)
    rm      Uninstall an existing package from a local or remote repository
    up      Update an existing package from a local or remote repository

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 <https://joseluisq.net>"]
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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].