Skip to content

txthinking/nami

Repository files navigation

Nami

A clean and tidy decentralized package manager.

❤️ A project by txthinking.com

Install

bash <(curl https://bash.ooo/nami.sh)

⚠️ Windows user should run in Git Bash, Video

Example

nami install brook
nami list
nami remove brook

You can also upgrade nami by nami

nami install nami
Keep PATH with sudo
sudo visudo
Defaults        !env_reset
# Defaults       secure_path=...

All officially maintained packages

Package Description Website
7z 7-Zip is a file archiver with a high compression ratio. Website
agg asciinema gif generator Website
brook-store A brook user system Website
brook A cross-platform network tool designed for developers. Website
bun Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one. Website
caddy Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS Website
cidr-merger A simple command line tool to merge ip/ip cidr/ip range, supports IPv4/IPv6 Website
cloudflare cloudflare cli Website
cloudupload Upload files to multiple Cloud Storage in parallel. Automatically apply for ssl certificate with your domain. Website
cmake CMake, the cross-platform, open-source build system. Website
cowsay cowsay is reborn. Neo Cowsay has written in Go. Website
curl curl with http3 support Website
d2 D2 is a modern diagram scripting language that turns text to diagrams. Website
deno A modern runtime for JavaScript and TypeScript. Website
denobundle Bundle assets into the binary with deno compile Website
etcd Distributed reliable key-value store for the most critical data of a distributed system Website
fd A simple, fast and user-friendly alternative to 'find' Website
ffmpeg A complete, cross-platform solution to record, convert and stream audio and video. Website
fzf A command-line fuzzy finder Website
go An open-source programming language supported by Google Website
hancock Manage multiple remote servers and execute commands remotely Website
hey HTTP load generator, ApacheBench (ab) replacement Website
httpserver This is a very simple http static server, sometimes we need it for testing Website
icnsify Easily create .icns files (Mac Icons) Website
ipatool Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store Website
ix command line pastebin. Website
joker Joker can turn process into daemon. Zero-Configuration Website
jq Command-line JSON processor Website
mad Generate root CA and derivative certificate for any domains and any IPs Website
markdown markdown converter Website
marp A CLI interface for Marp and Marpit based converters Website
minify Go minifiers for web formats Website
nami The easy way to download anything from anywhere Website
nico A HTTP3 web server for reverse proxy and single page application, automatically apply for ssl certificate, Zero-Configuration. Website
ninja a small build system with a focus on speed Website
nsq A realtime distributed messaging platform Website
node Node.js is an open-source, cross-platform JavaScript runtime environment. Website
protoc Protocol Buffers - Google's data interchange format Website
protoc-gen-js protoc-gen-js executable Website
rsrc Tool for embedding .ico & manifest resources in Go programs for Windows. Website
shadowsocks A Rust port of shadowsocks Website
sshexec A command-line tool to execute remote command through ssh Website
stuntman NAT type detection Website
tengo A fast script language for Go Website
tun2brook Proxy all traffic just one line command. tun2socks, tun2brook. IPv4 and IPv6, TCP and UDP. Website
yt-dlp Command-line program to download videos from YouTube.com and other video sites Website
z a process manager Website
zig Zig is a general-purpose programming language and toolchain for maintaining robust, optimal and reusable software. Website
zigup Download and manage zig compilers. Website
zoro zoro can help you expose local server to external network. Support both TCP/UDP, of course support HTTP. Zero-Configuration Website

Directory

  • $HOME/.nami: All files of nami
  • $HOME/.nami/bin: When installing nami, this path is already added to your $PATH
  • $HOME/.nami/cache: This directory will be emptied before installing package
    • If the package can be standalone executable files:

      After the installation process is finished, nami will copy these files to the $HOME/.nami/bin directory

    • If the package is a directory:
      • The script should save the directory into here. Such as go.tengo
      • And write the relative paths of executable files to links file, one path per line. Such as go.tengo

      After the installation process is finished, nami will copy the directory to the $HOME/.nami/dir/ directory and will create symbolic links to the $HOME/.nami/bin based on links

    • Write version to version file
  • $HOME/.nami/copied: This is usually used if the command to be installed is running, such as brook.tengo, you may:
    1. get the processes
    2. stop the processes
    3. copy(not move) the commands from $HOME/.nami/cache to $HOME/.nami/bin
    4. copy the commands from $HOME/.nami/cache to $HOME/.nami/copied, this prompts nami not to perform duplicate operations
    5. run the previously stopped processes again

Script

tengo

Nami supports tengo script, there is a built-in module import("nami") for convenience:

  • nami.os: linux/darwin/windows/...
  • nami.arch: amd64/arm64/...
  • nami.home_dir: $HOME
  • nami.bin_dir: $HOME/.nami/bin
  • nami.cache_dir: $HOME/.nami/cache
  • nami.copied_dir: $HOME/.nami/copied
  • append_file(file string, text string) => error
  • write_file(file string, text string) => error
  • sh(name string, args...) => error: run command
  • sh1(name string, args...) => bytes/error: run command and return stdout
  • cp(url string, dst string) => bytes/error: download file to dst
  • cp(url string, { from: dst, from1: dst1 }) => bytes/error: download compressed file, and copy one or more files
  • cp_dir(url string, { from: dst, from1: dst1 }, [link, link1]) => bytes/error: download compressed file, and copy one or more directories, and create symbolic links

Run local script

nami install ./exmaple.tengo

PR

Fork nami project, put exmaple.tengo to package directory, create PR, then you can

nami install example

Run remote script

nami install https://yourserver.com/exmaple.tengo

License

Licensed under The GPLv3 License