In the free software ecosystem, interoperability depends not only on code but also on the shared language that tools use to communicate. Environment variables are one of the simplest and most powerful parts of that language: they allow different programs to work together without hard-coded settings or rigid dependencies.

Over time, however, multiple parallel conventions have emerged — sometimes incompatible — making integration harder than it should be. This proposal aims to restore the original idea of environment variables as a universal interface: a minimal, coherent set of standardized names that any free software tool can recognize and respect.

The goal is not to impose a standard, but to offer a common ground. By agreeing on how to name the text editor EDITOR or the password manager PASS we strengthen both user autonomy and cross-project compatibility.

This document is, therefore, an invitation: to think of the environment as shared space, to reduce friction between tools, and to build a culture of integration that is free, simple, and cooperative.

GIT_* - Git environment variables

When writing scripts that operate with git use git config or the environment variables defined here. For example:

email="$(git config user.email 2>/dev/null || echo "${GIT_AUTHOR_EMAIL}")"

HTTP_GET - Default downloader

Allow changing the downloader in your scripts.

${HTTP_GET:-curl -fL -o} /tmp/file.tar https://url

This way someone using OpenBSD can set HTTP_GET="ftp -o" or someone using wget can set HTTP_GET="wget -O".

BROWSER - Default browser

Instead of calling xdg-open(1) directly allow changing the browser in your scripts or programs.

#!/bin/sh -e
${BROWSER:-xdg-open} https://...

EXPLORER - Default file explorer

Some programs already use BROWSER. Use EXPLORER for opening paths.

${EXPLORER:-xdg-open} /path/to/file

SUDO - Elevation command

When an elevated command is required write this:

${SUDO:-env} COMMAND

Do not hardcode sudo or doas, if the user wants to allow elevation to programs they can set the SUDO variable sudo -n or doas -n. By default, the command is not elevated.

Perform a check before running commands that require root privileges:

if ${SUDO:-env} test -w /bin/sh; then
    echo 'error: Run this script as root os set $SUDO.' >&2
    exit 1
fi

EDITOR - Default text editor

The text editor to use. According to POSIX VISUAL should be used before EDITOR, but we use EDITOR only.

${EDITOR:-vi} /etc/hosts

XEDITOR - Default graphical text editor

The graphical text editor to use. Graphical programs should call XEDITOR and terminal programs should call EDITOR.

${XEDITOR:-xterm -e ${EDITOR:-vi}} /etc/hosts

PASS - Default password manager

The password manager to use. For example:

password="$(${PASS:-pass} ${ACCOUNT_WEBSITE:-website.com/user})"
if test ! -n "$password"; then
    echo 'error: Password not found in the password manager.' >&2
    exit 1
fi

PROXY_URL - Proxy URL

The URL of the proxy server to use for network requests. For example:

export PROXY_URL="http://proxy.example.com:8080"

Downloaders and other network tools can read this variable to configure their proxy settings.

CACHE_DIR - Cache directory

The directory where applications should store their cache files. For example:

cache_dir="${CACHE_DIR:-$HOME/.cache}/myapp

Applications can read this variable to determine where to store

COORDINATES - Default map coordinates

The default latitude and longitude to use in mapping applications.

export COORDINATES="37.7749,-122.4194"  # San Francisco, CA

SPELL_CHECKER - Spell checker and dictionary

The default dictionary to use for spell checking and word lookups.

export DICTIONARY="en_US"

${SPELL_CHECKER:-hunspell} document.txt

DICTIONARY - Default dictionary

Spell checkers and dictionary lookup tools can read this variable.

TRASH_CODE - Command for trashing source files

The spell checker command to use for checking spelling in documents.

${TRASH_CODE:-rm -f} /path/to/file.txt

DMENU - Graphical selection command

The command to use for dmenu-like selection prompts.

selection="$(${DMENU:-dmenu -i -l 10} <<-EOF
	Option 1
	Option 2
EOF
)"

PDF_READER - PDF reader

The command to use for opening PDF files.

${PDF_READER:-xdg-open} /path/to/file.pdf

PAGER - Default pager

The command to use for paging through text output.

${PAGER:-less} /path/to/logfile.log

TERMINAL - Default terminal emulator

The command to use for opening terminal emulators.

${TERMINAL:-xterm} -e htop

More…

You know of more, please make a PR to https://github.com/openvirtus/devreal.org