Skip to content

abanoubha/i

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

i the abstraction over all package managers

i stands for install. You can use i to install any software via any package manager.

TL;DR i is an abstraction over all other package managers available on Linux/MacOS.

This software is a work in progress - WIP - a.k.a It is not done yet.

Why ?

If you used to apt or brew, and need to use dnf or swupd it is hard sometimes. But if you use i, it will be always the same.

Install 'i'

build the project from source

# grab deps/libs, then build the binary/executable and call it 'i'
go mod tidy && go build -o i .

# run the program
./i

latest GitHub release binary

TODO: create a simple Bash script to get the latest binary/executable from GitHub releases and install it and add it to the PATH.

i wizard

  • search for the_term
  • show search results
  • choose the package/app/program
  • use default package manager for the distro, or suggest another one to the user to choose (install via blah-blah or do not install blah-blah-app).
  • run the needed commands, give realtime feedback to user.

Available As

  • CLI : i vim to istall vim.
  • GUI : vim then click search.

Plan: commands

command meaning
i search x search for x
i install x install x
i add x install x
i uninstall x uninstall x
i remove x uninstall x
i reinstall x uninstall x, then install it
i info x show info about x
i upgrade x upgrade x to the newer version if available
i update x upgrade x to the newer version if available
i up x upgrade x to the newer version if available
i upgrade upgrade all to the newer version if available
i update upgrade all to the newer version if available
i up upgrade all to the newer version if available
i updateable list all upgradeable apps/programs
i updatable list all upgradeable apps/programs
i upgradeable list all upgradeable apps/programs
i upgradable list all upgradeable apps/programs

* updating the local index of packages is always run first. No need to run it manually.

$ i search x # search for x
searching for x ...

$ i install x # install x
installing x ...

$ i add x # install x
installing x ...

$ i uninstall x # uninstall x
uninstalling x ...

$ i remove x # uninstall x
uninstalling x ...

$ i reinstall x # uninstall x, then install it
uninstalling x ... DONE
installing x ... DONE

$ i info x # show info about x
x is blah blah blah

$ i upgrade x # upgrade x to the newer version if available
upgrading x from v1.0.0 to v1.1.0

$ i update x # upgrade x to the newer version if available
upgrading x from v1.0.0 to v1.1.0

$ i up x # upgrade x to the newer version if available
upgrading x from v1.0.0 to v1.1.0

$ i upgrade # upgrade all to the newer version if available
upgrading x from v1.0.0 to v1.1.0
upgrading y from v0.1.0 to v0.6.0
upgrading z from v1.3.0 to v1.3.2

$ i update # upgrade all to the newer version if available
upgrading x from v1.0.0 to v1.1.0
upgrading y from v0.1.0 to v0.6.0
upgrading z from v1.3.0 to v1.3.2


$ i up # upgrade all to the newer version if available
upgrading x from v1.0.0 to v1.1.0
upgrading y from v0.1.0 to v0.6.0
upgrading z from v1.3.0 to v1.3.2

$ i updateable # list all upgradeable apps/programs
x v1.2.1 >> v1.2.2
y v0.5.1 >> v1.0.2
z v1.2.3 >> v2.0.0

$ i updatable # list all upgradeable apps/programs
x v1.2.1 >> v1.2.2
y v0.5.1 >> v1.0.2
z v1.2.3 >> v2.0.0

$ i upgradeable # list all upgradeable apps/programs
x v1.2.1 >> v1.2.2
y v0.5.1 >> v1.0.2
z v1.2.3 >> v2.0.0

$ i upgradable # list all upgradeable apps/programs
x v1.2.1 >> v1.2.2
y v0.5.1 >> v1.0.2
z v1.2.3 >> v2.0.0

# updating the local index of packages is always run first. No need to run it manually.

Plan: Arguments

verbose output

$ i install z
installing z ... DONE

$ i install -v z
using homebrew to install z
    $ brew install z
installing z ... DONE

$ i install --verbose z
using homebrew to install z
    $ brew install z
installing z ... DONE

specify a package manager

$ i install y
installing y ... DONE

$ i install --brew y
installing y via homebrew ... DONE

$ i install --apt z
installing z via apt ... DONE

no output/script

$ i install a # nothing will be returned if successful; a.k.a os.Exit(0)
$

Plan: supported package managers

package manager exec Operating Systems status
brew (Homebrew) 1 MacOS, Linux, BSD WIP
port (MacPorts) 1 MacOS ---
apt 1 Linux (Debian-based) ---
apt-get 1 Linux (Debian-based) ---
dnf 1 Linux (Fedora) ---
nix 1 Linux, NixOS ---
pacman 1 Linux ---
swupd 1 Linux ---
rpm 1 Linux ---
snap 2 Linux ---
flatpak 2 Linux ---
pkgsrc 2 Linux ---
winget 2 Windows ---
choco (Chocolatey) 2 Windows ---
go 3 language-based pm ---
cargo 3 language-based pm ---
python 3 language-based pm ---

* exec stands for execution priority. * pm stands for package manager.

Plan: homebrew

brew search TEXT|/REGEX/
brew info [FORMULA|CASK...]
brew install FORMULA|CASK...
brew update
brew upgrade [FORMULA|CASK...]
brew uninstall FORMULA|CASK...
brew list [FORMULA|CASK...]

tasks

  • check if the package/app/program is already installed and executable/callable
  • support search via homebrew
  • check if the input args are valid (a-zA-Z0-9_-@)
  • specify the package manager
  • emulate another package manager

About

abstraction over all package managers

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages