# Macports

See the [website] for the installation instructions.

Default ports install location is `/opt/local`.

## TL;DR

```sh
# get help on a command
port help install
port help select

# search for ports
port search completion
port search --name parallel

# get info on a specific port
port info zsh-completions

# get a port's variants
port variants k9s

# install ports
sudo port install zsh-completions apple-completion
sudo port install nmap -subversion                  # use a variant
sudo port install -d gettext                        # debug mode

# list all installed ports
port installed
port echo installed

# list all ports that have been explicitly installed by the user
port echo requested

# list all available ports
port list
port list nmap   # limit to all versions of a package

# list all files installed by a port
# the port must be installed for this to work
port contents py38-netaddr

# list ports providing a file
# the port must be installed for this to work
port provides /opt/local/bin/envsubst

# remove a port
sudo port uninstall --follow-dependencies fzf

# list available choices for a group
port select --list python

# show the current port selection
port select --summary

# Set a default version.
# Symlinks the "executable"'s version to 'opt/local/bin/executable'.
sudo port select --set postgresql postgresql12
sudo port select --set python3 python310
sudo port select --set virtualenv virtualenv310

# update macports itself to the latest version and sync the latest ports definitions
sudo port selfupdate

# deactivate an active port
sudo port deactivate stow
# activate an inactive port
sudo port activate stow

# list all outdated ports
port echo outdated

# upgrade a port
sudo port upgrade tree

# upgrade all outdated ports
sudo port upgrade outdated

# clean out all temporary assets of a port
sudo port clean -f --all parallel

# clean up leftovers
sudo port reclaim

# list all inactive ports
# ports are deactivated when a newer version gets installed
port echo inactive

# remove all inactive ports
sudo port uninstall inactive

# list a port's dependencies
port deps chezmoi

# recursively list all ports depending on the given port
port rdeps pcre

# list the installed ports depending on the given port
port dependents bzip2

# recursively list all the installed ports that depend on this port
port rdependents libedit

# view a port's notes if any are available
# notes are displayed right after a port is installed
# the port must be installed for this to work
port notes postgres12

# get the path of a port within the ports tree
port dir zlib

# get the path of the tarball of a port
# the port must be installed for this to work
port location readline

# get the path to a port's portfile
port file openssl11

# get the path of the working directory for a port if it exists
port work popt
```

## Further readings

- [Website]
- Official user [guide]
- Public [ports] database
- [cheat.sh]

[guide]: https://guide.macports.org/
[ports]: https://ports.macports.org/
[website]: https://www.macports.org/

[cheat.sh]: https://cheat.sh/port
