Code Monkey home page Code Monkey logo

pacapt's Introduction

pacapt - An ArchLinux's pacman-like wrapper for many package managers

Build Status

pacapt is a 56KB shell wrapper for many package managers. Simply install package with pacapt -S htop or pacapt install htop on any Linux, BSD, OpenWrt or Mac OS machines. It supports the following package managers:

  • pacman from Arch Linux-based systems, ArchBang, Manjaro, etc.
  • apt-cyg from Cygwin (via apt-cyg)
  • apt-get from Debian, Ubuntu, etc.
  • homebrew from Mac OS X
  • macports from Mac OS X
  • yum/rpm from Redhat, CentOS, Fedora, Oracle Linux, etc.
  • portage from Gentoo
  • zypper from OpenSUSE
  • pkgng from FreeBSD
  • cave from Exherbo Linux
  • pkg_tools from OpenBSD
  • sun_tools from Solaris(SunOS)
  • apk from Alpine Linux
  • opkg from OpenWrt
  • tazpkg from SliTaz Linux
  • swupd from Clear Linux
  • xbps from Void Linux
  • tlmgr from TeX Live
  • conda from Conda

TOC

Installation

This script shouldn't be installed on an Arch-based system. On cave-based system, bash is required.

Install the stable script from Github

You can download the stable script and make it executable. On non-Arch-based system, you may use pacman as script name instead of pacapt.

$ sudo wget -O /usr/local/bin/pacapt https://github.com/icy/pacapt/raw/ng/pacapt
$ sudo chmod 755 /usr/local/bin/pacapt
$ sudo ln -sv /usr/local/bin/pacapt /usr/local/bin/pacman || true

If you have curl and want some interesting output:

# WARNING: Don't do this on Arch-based system!
$ curl -Lo /usr/bin/pacman https://github.com/icy/pacapt/raw/ng/pacapt
$ chmod 755 /usr/bin/pacman

For non-system package manager, you need to create symbolic links

$ ln -s /usr/local/bin/pacapt /usr/local/bin/pacapt-tlmgr
$ ln -s /usr/local/bin/pacapt /usr/local/bin/pacapt-conda

You can also use shorter links:

$ ln -s /usr/local/bin/pacapt /usr/local/bin/p-tlmgr
$ ln -s /usr/local/bin/pacapt /usr/local/bin/p-conda

noting the suffix (e.g., -tlmgr, -conda) is mandatory.

Usage

Basic operations

For system package manager

  • Update package database: pacapt -Sy, or pacapt update
  • Install a package: pacapt -S foo, or pacapt install foo
  • Search a package: pacapt -Ss foo, or pacapt search foo
  • Remove a package: pacapt -R foo, or pacapt remove foo
  • Upgrade system: pacapt -Su, or pacapt upgrade
  • Remove orphans: pacapt -Sc, or pacapt autoremove foo
  • Clean up: pacapt -Scc or pacapt -Sccc, or pacapt clean

For non-system package manager: Similar as above, however you need to call correct script name, e.g.,

  • Install a Conda package: pacapt-conda -S foo
  • Remove a Conda package: pacapt-conda -R foo

Basic options

See also https://github.com/icy/pacapt/blob/ng/lib/help.txt.

Some basic command line options

  • -h (--help): Print help message;
  • -P: Print list of supported operations;
  • -V: Print script version

Some popular options of the original ArchLinux's pacman program are supported and listed in the table in the next section.

A long list of options and operations can be found from ArchLinux's wiki.

Implemented operations

           Q Qc Qe Qi Qk Ql Qm Qo Qp Qs Qu R Rn Rns Rs S Sc Scc Sccc Sg Si Sii Sl Ss Su Suy Sy U
      apk  ~     *  *     *     *     *  * *  *   *  * *  *   *    *     *   *  *  *  *   *  * *
  apt_cyg  *        *     *                *           *                           *         *
     cave  *        *     *     *  *  *  * *  *   *  * *  *   *    x     *         *  *   *  * x
    conda  *                    *          *           *  *              *         *      *
      dnf  ~  *  *  *     *  *  *  *  *  * *           *  *   *    *  *  *   *  *  *  *   *  * *
     dpkg  ~  *  *  *  *  *     *  *  *  * *  *   *  ~ *  *   *    *  *  *   *     *  *   *  * *
 homebrew  *  *     *     *           *  * *           *  *   *    *     *         *  *   *  *
 macports     *           *     *        * *         ~ *  *   *          *         *  *   *  *
     opkg  *        *     *     *     *  * *           *                 *   *     *  *      * *
    pkgng  *        *     *     *  *     * *         * *  *   *          *         *  *   *  *
pkg_tools  ~        *     *     *  *     * *  *   *  ~ *  *   x          *      *  ~  *   *  x
  portage  *  *     *     *     *        * *         * *  *   *    *     *         *  *   *  *
sun_tools  *        *     *     *     *    *                                                   *
    swupd  *        *  *        *     *    *           *  *   *                    *  *   *  *
   tazpkg  *        *     *     *          *           *  *   *                    *  *   *  * *
    tlmgr           *  *  *                *           *                 *      *  *      *    *
     xbps  *     *  *     *     *     *    *           *      *                    *  *   *  *
      yum  *  *  *  *     *  *  *  *  *  * *         * *  *   *    *  *  *   *     *  *   *  * *
   zypper  *  *     *     *  *  *  *  *  * *  *   *  * *  *   *    *  *  *   *  *  *  *   *  * *

Notes:

  • *: Implemented;
  • ~: Implemented. Some options may not supported/implemented;
  • x: Operation is not supported by Operating system;
  • The table is generated from source. Please don't update it manually.

Related projects

  • batch-pacapt: An Arch's pacman-like package manager for Windows
  • node-pacapt: A node.js wrapper of pacapt + batch-pacapt
  • pacapt's nd branch: A rewrite in Dlang, now deprecated.
  • pacapt-py: A proof of concept in Python to provide pacapt-like experience to Homebrew.
  • pacapt-go: A more complete rewrite in Go, now lives in the go-dev branch of pacaptr as legacy code.

Similar projects

  • sysget is a front-end for every package manager, written in C++. It provides some basic features to manipulate packages on your system.
  • pacaptr was originally started as a Rust port of this project (pacapt) (See also #126), now it's growing with their own new features and support.

Development

General steps

Make sure you read some instructions in CONTRIBUTING.md.

A development script can be compiled from the source code.

$ git clone https://github.com/icy/pacapt.git
$ cd pacapt

# switch to development branch
$ git checkout ng

# compile the script
$ ./bin/compile.sh > pacapt.dev

# check if syntax is good
$ bash -n pacapt.dev

$ sudo install -m755 ./pacapt.dev /usr/local/bin/pacapt

Please read the sample Makefile for some details.

License

This work is released under the terms of Fair license (http://opensource.org/licenses/fair).

AUTHORS. CONTRIBUTORS

Many people have contributed to the project by sending pull requests and/or reporting on the ticket system. Here is an incomplete list of authors and contributors.

  • 10sr (@10sr)
  • Alexander Dupuy (@dupuy)
  • Anh K. Huynh (@icy)
  • Antony Lee (@anntzer)
  • Alex Lyon (@Arcterus)
  • Álvaro Mondéjar (@mondeja)
  • Carl X. Su (@bcbcarl)
  • Cuong Manh Le (@Gnouc)
  • Daniel YC Lin (@dlintw)
  • Danny George (@dangets)
  • Darshit Shah (@darnir)
  • Dmitry Kudriavtsev (@dkudriavtsev)
  • Eric Crosson (@EricCrosson)
  • Evan Relf (@evanrelf)
  • GijsTimmers (@GijsTimmers)
  • Hà-Dương Nguyễn (@cmpitg)
  • Huy Ngô (@NgoHuy)
  • James Pearson (@xiongchiamiov)
  • Janne Heß (@dasJ)
  • Jiawei Zhou (@4679)
  • Karol Blazewicz
  • Kevin Brubeck (@unhammer)
  • Konrad Borowski (@xfix)
  • Kylie McClain (@somasis)
  • Gen Li (@Rami3L)
  • Valerio Pizzi (@Pival81)
  • Siôn Le Roux (@sinisterstuf)
  • Tabulate (@TabulateJarl8)
  • Thiago Perrotta (@thiagowfx)
  • Vojtech Letal (@letalvoj)

pacapt's People

Contributors

4679 avatar anna328p avatar anntzer avatar arcterus avatar bcbcarl avatar cmpitg avatar dangets avatar dasj avatar dlintw avatar dupuy avatar ericcrosson avatar felixonmars avatar gijstimmers avatar grenadingue avatar icy avatar icymatter avatar lasers avatar letalvoj avatar mnkai avatar mondeja avatar ngohuy avatar pival81 avatar rami3l avatar shadowsith avatar sionleroux avatar tabulatejarl8 avatar thiagowfx avatar xiongchiamiov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pacapt's Issues

Hombrew: review the code for the option "Qo"

@Arcterus

The code is as below

        _exec_ HOMEBREW "
            cd \"\$(dirname -- \$(which $_PKG))\"
            pkg=\"\$(pwd -P)/\$(basename -- $_PKG)\"
            prefix=\"\$(brew --prefix)\"
            cellar=\"\$(brew --cellar)\"
            for package in \$cellar/*; do
              files=(\${package}/*/\${pkg/#\$prefix\//})
              if [[ -e \${files[\${#files[@]} - 1]} ]]; then
                echo \"\${package/#\$cellar\//}\"
                break
              fi
            done
          "

The use of which $_PKG is very weird. It would be often a path to binary here, but $_PKG is not in our case. Please check and confirm if that line is really working.

Thank you.

better -Qs with rpm (dnf/yum)

On Arch, -Qs with multiple arguments gives results which contain both = it's an intersection
E.g. pacman -Qs maria java would match a package which has the words maria and java in any order in the pkgname or description.

rpm searches for each argument on it's own, but filters duplicates = it's an union
(it searches only package names, but let's be happy with that)

-Qs is for yum and dnf currently iplemented as rpm -qa "*${*}*"
We can follow how this is evaluated by using bahs's set -x, it evaluates to the single word '*maria java*'
As there are no packages containing a space ...

Changing it to rpm -qa *${*}* or rpm -qa "*${@}*" would evaluate to two words '*maria' 'java*'. This would match a few packages... but not mariadb-java-client-2.3.0-1.fc29.noarch

Now comes the part where I ask for help:
Transforming it to '*maria*' '*java*' will match it, though it will print all packages which are involved with either of them... a lot. (It's a union)
Transforming it to '*maria*java*' will be close. but now the order matters.

To get identical results as with archlinux, we need to transform it to '*maria*java*' '*java*maria*'

In other words, we need all permutations of $*, and could then connect them with spaces and *
How do we do that? And in bash? Some thoughts

  • In a loop. ${!n} would give the n'th argument
  • single quotes above are only for demonstration

Yaourt search packages

I remember when i used arch, that if i wanted to search and install a package, i typed yaourt <package>, and it listed all the packages with a number, and it asked me the number of the package(s) i wanted to install.
It would be awesome to have this in pacapt.

Must we create an enforcement for quoting variable?

As previous describing in this issue, forgetting to quote variables in shell script leading to many security implications.

Example in compile.sh line 95 -> 99:

for L in ./lib/*.sh; do
  [[ "${L##*/}" != "zz_main.sh" ]] \
  || continue

  $GREP -v '^#' $L
done

this can be easily fooled by creating a file * *.sh in ./lib, causing the content of all lib files printed twice. It's just a simple case, there can be many hidden weird behaviors that we can not cover, like code injection.

Is it time to make an enforcement for contributors to quote all the variables?

Installed packages are incorrect (Debian)

As per title. I'm running Debian Jessie.

$ pacapt -Qs mysql
libaprutil1-dbd-mysql
libdbd-mysql
libdbd-mysql-perl
libmysqlclient18:i386
mysql-client-5.1
mysql-common
mysql-server-5.1
mysql-server-core-5.1
rsyslog-mysql

$ pacapt -Qi mysql-server
dpkg-query: package 'mysql-server' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.

$ dpkg-query -l | grep mysql
ii libdbd-mysql-perl
ii libmysqlclient18:i386
ii mysql-common

Around pacapt

Hi guys,

I wanted to tell you that I like what you did with pacapt ! I often use it on non-Arch distributions, for my personal usage.

I found pacapt so useful that I decided to use it, as a part of a school projet, a quite big projet. It's named SAM-Solution, it intends to be a system administrator solution for managing a Linux/Windows computers park. You can find more details about the project here (main repo), and here (showcase website).

So, for the needs of SAM-Solution I first wrapped pacapt in an npm package, to be able to use it with node.js, and to easily make queries and retrieve the output from it. Here is the repo node-pacapt.

I also made a pacapt adaptation for Windows, written in batch, wrapping the well known chocolatey. Here is the repo batch-pacapt.

All of these repositories are still under development stage, but I wanted to share it with you because they are strongly linked with this one.

I'm interested and open to any kind of linking/merging of the various pacapt repositories. Let's discuss it if you're interested too.

Cheers !

Add support for `pacman -F`/`pkgfile`

A nice feature that's missing is the support for pacman -F/pkgfile https://wiki.archlinux.org/index.php/Pacman#Search_for_a_package_that_contains_a_specific_file https://wiki.archlinux.org/index.php/Pkgfile.

This kind of feature can be used to suggest package installation when executing a missing binary, like so (for zsh):

command_not_found_handler() {
    pkgs=($(pkgfile -b -- "$1"))
    if [[ -n "$pkgs" ]] ; then
        echo "Command not found but package found!" >&2
        echo "Installing ${pkgs[1]}\n" >&2

        sudo pacman -S ${pkgs[1]} >&2

        echo "\nExecuting $@" >&2

        "$@"
        return $?
    else
        echo "Command or package not found: $1" >&2
        return 127
    fi
}
$ wget
zsh: correct wget to _wget [nyae]? n
Command not found but package found!
Installing extra/wget

resolving dependencies...
looking for conflicting packages...

Packages (1) wget-1.20.3-2

Total Installed Size:  2.88 MiB

:: Proceed with installation? [Y/n]
[...]

Executing wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.

[RFC] Support repository sources

This is probably out of scope as it has too many variables, but for me, pacapt could completely abstract distro-specific package managers if it would also support adding additional repositories.

For instance, sometimes I need to install Docker CE on Debian as described in https://docs.docker.com/install/linux/docker-ce/debian/. The steps are roughly equivalent to:

apt update
apt install apt-transport-https ca-certificates gnupg2 lsb-release

OS_ID=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
OS_REL=$(lsb_release -sc)

repo_name=docker-ce
base_url=https://download.docker.com/linux

curl -sSL $base_url/$OS_ID/gpg | apt-key add -
echo "deb [arch=amd64] $base_url/$OS_ID $OS_REL stable" >/etc/apt/sources.list.d/$repo_name.list
apt update

Fedora 22/23 uses dnf

on fedora 23, when i enter sudo pacapt -S texlive-bohr it gives me this:
Yum command has been deprecated, redirecting to '/usr/bin/dnf install texlive-bohr'. See 'man dnf' and 'man yum2dnf' for more information. To transfer transaction metadata from yum to DNF, run: 'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

it still installs, but its a bit annoying.

Hỗ trợ nhóm lệnh `yum group`

Hiện tại trong pacman có option -Sg để liệt kê các gói trong một nhóm, thông tin nhóm, trong yum có lệnh tương ứng là yum grouplist và cài đặt nhóm yum groupinstall

Đề xuất hỗ trợ cài đặt nhóm cho nhóm lệnh yum.

Feature request: pacman --needed

Hi,

I am using pacapt to be able to have identical dependency install scripts across multiple linux distros. I also use arch, so I installed pacapt as pacman on other distros. Ideally I'd like to do something like this:

pacman -S dependency1 --needed
pacman -S dependency2 --needed

To work with pacapt as well, so I can have concise code that installs dependencies only when necessary. Also an option like --yes would be nice, so that installs don't ask for confirmation.

Add license

Unfortunately, public domain is not well-defined; in fact, it's not even possible in some countries (Germany, iirc) to release things into the public domain.

Please consider changing the license to explicitly give away rights using the WTFPL or the Fair License.

Support -q flag for quiet

Is this something that you're ever planning to do? Honestly, this would make this a lot more usable for me, because it'd let me do things like pacapt -R $(pacapt -Qsq blahstuff) which is a lot more intuitive than having to parse the output further. I know it'd require a bit of text manipulation, and that's not Bash's strong suite. (I'm honestly not sure why people write such large projects in Bash :P )

If this is something you plan to do, maybe you should add it to the automatically generated table. I really hope it is, as it'd make things a ton easier. You accept pull requests? You're probably a lot better at me at coding in Bash than I am, but I could give implementing this a try if no one else wants to.

-Rs support on homebrew

To the developers of pacapt:

Hello,

First, thank you for making such a nice wrapper, it made my migration from the Arch Linux system to the MacOS system whole lot easier.

While I was tidying my system, I found out -Rs option is not supported, despite documentation says it is supported.

image

Since homebrew itself does not provide removing orphaned packages while removing packages (tapping rmtree does add support, but it's a whole other issue), I guess it might be possible to be a documentation error rather than parameter parsing bug, but just to make sure I've made this issue.

Again, thank you for helping me.

Sincerely,
Minori Hiraoka

No Confirm

Alright, this is a feature request. <If I had known how to add labels to this, I would've done that.>

I personally often times install programs or update my system with the flag --noconfirm.
I know it's not really recommended, however, if I want to install a specific application, I will do it any way.
It's kind of time saving. After running pacapt -Syu or just pacapt -S 'anything', it loads for a while and then asks the question. I could leave the room right after typing the root passwd or I could use pacapt in scripts.
e.g.
sudo pacapt -Syu --noconfirm or sudo pacapt -S nano --noconfirm

I've just looked after it, apt-get supports this: --assume-yes or --force-yes, as does zypper --non-interactive . I haven't tried them, though. I'm quite sure all the other package manager supports this somehow.

Besides this pacapt works really well. I love it. I don't need to memorize lots of other commands.
Keep up the good work!

pacapt --version

Fairly trivial note: pacapt only supports -V for printing the version, whereas pacman supports both -V and --version.

Add "assumeyes" or "noconfirm" option

Right now there's no way to perform an unattended installation of a package, e.g.

/usr/bin/pacman -S foo --noconfirm

or

yum install foo --yes

There should be something like

pacacpt -S foo --yes

package name mapping

Example

$ pacapt -S httpd

will be translated to apache2 apache or http according to the OS where pacapt is running.

The first goal is to support some popular packages

Add -Rn & -Rns & -Rsn & -Syu

pacman -Rn => apt-get purge
pacman -Rns => apt-get --purge autoremove
pacman -Rsn => apt-get --purge autoremove

pacman -Syu => pacman -Suy
It seems that so many people are used to use -Syu

Homebrew cask support

A lot of useful packages come from Cask, which is now included as part of Homebrew itself.

To use them from Homebrew, you are supposed to use brew cask instead of just brew. For example, the correct command to install gimp would be: brew cask install gimp

Here is an example of pacapt failing to install gimp:

$ pacapt -S gimp

Error: No available formula with the name "gimp"
It was migrated from homebrew/core to homebrew/cask.
You can access it again by running:
  brew tap homebrew/cask
And then you can install it by running:
  brew cask install gimp

DOS/DDOS attack in pacapt

Forgetting quote variables in shell script leading to many security implications. I took a look at pacapt source code and saw one issue. Currently, if you run:

PACAPT_DEBUG='/*/*/*/*/../../../../*/*/*/*/../../../../*/*/*/*' ./pacapt.dev --help

then it push server to heavy load, even if mightiest servers. Imaging some commands like this ran and what will happen?

The issue came from lib/zz_main.sh, line 17:

: ${PACAPT_DEBUG=}

: is the no-op command, but PACAPT_DEBUG still be expanded. And because it's unquoted, split and glob were invoked.

I have made a pull request to fix this, you can look here

Support -Sii

Today I found myself wondering why I had a certain package installed, and discovered that pacman's -Sii operation (find reverse dependencies) isn't yet implemented.

It looks like it's not incredibly widely-supported, but it'd be nice to have for the systems that have that information.

Support pacman -Rsc

I don't know how common this is but I use it alot (I ran Antergos for A short while(lots of garbage from install)) and I could make great use of Remove- package, dependacies, and dependants after new debian of Ubuntu installs

To install packages i have to use sudo.

When I try to install packages, at least on Fedora 23, it says that i have to be root to install them.
So i use sudo, but it gives me this error:
sudo: pacapt: command not found
To solve this i linked /usr/local/bin/pacapt to /bin/pacapt, but it would be better if this was written in the install instructions.

Open a Gitter room.

It would be easier for the contributors to say something without having to create new issues for simple stupid things.
For example, you forgot to create a new release for 2.3.11, so the spec file in contrib won't work anymore, as it downloads from the releases.
EDIT: oh, ok, you created it. still we need gitter.

Typo in README

The second line of the README.md has the line:
Simply install package with pacpat -S htop or...

I believe that is supposed to be pacapt not pacpat.

document pacapt -U in help

pacapt --help does not include an entry indicating that pacapt -U (e.g. pacapt -U localpath) is supported.

Rewrite the script

Now all OS-specific commands are put together (side-by-side). That's really messy, and it's hard to maintain the main script. We will move all OS-specific commands into a directory or librarry (that is dedicated for the OS); the main script will locate them when needed.

wrapper for tlmgr (texlive manager)?

tlmgr (the TeXlive manager) is a bit a special case, as it is not a distro package manager; but it is still useful if one does not want to install the (usually huge, coarsely-grained) distro-provided packages.

Any chance in supporting it? (Note that this would mean pacapt could be a frontend for multiple package managers on the same systems; a possibility would be e.g. to have pacapt --backend=tlmgr ... and let the user define whatever alias they want.)

Is shell completion supported?

Hi @icy,

Do you know if shell completion is implemented in pacapt? If not, (and if it's doable for me) I could start working on it as I really like being able to do this with native apt and pacman binaries.

What do you think?

Error/delayed/no autocomplete on xubuntu 20.04

Using bash, zsh or fish, I can tabcomplete sudo apt install just fine.
Using sudo pacman -S, tabcomplete doesn't work on bash or zsh. On fish it works but pretty delayed + it gives an error:
image

[Request] pacman -Ss

Could you make the output of this command pacman -Ss in Ubuntu/Debian looks like the output of the same command in Arch ?

Add pkg_tools support to stable version

The pkg_tools support (#34) is now on ng branch . However, the work isn't on the stable version. We need to clean up some (possibly) conflicts between two branches ng and v2.0 to complete the pull request.

Problem with ~

$ sudo pacman -U cuda-repo-ubuntu1604_8.0.44-1_amd64.deb ~
(Reading database ... 267251 files and directories currently installed.)
Preparing to unpack cuda-repo-ubuntu1604_8.0.44-1_amd64.deb ...
Unpacking cuda-repo-ubuntu1604 (8.0.44-1) over (8.0.44-1) ...
dpkg-split: error: error reading /home/anh.huynh: Is a directory
dpkg:../../src/unpack.c:123:deb_reassemble: internal error: unexpected exit status 2 from dpkg-split
/usr/bin/pacman: line 805: 11367 Aborted                 (core dumped) dpkg -i "$@"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.