Skip to content

Paths for common GNU and GNU-like programs, to allow consistency

License

Notifications You must be signed in to change notification settings

shellfire-dev/paths.d

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

paths.d: Executable file locations for shellfire

This module provides information to a shellfire application on the location of executable files needed by a particular shellfire shell function. This information is in a ${executableFile}.path file. These are organised by package manager. They exist to allow shellfire programs to:-

  • automatically download dependencies when run
  • to enforce that the same origin of executable is used across OS distributions (eg GNU coreutils' grep)
  • to ensure the correct PATH is set up

A missing ${executableFile}.path file doesn't cause an error, although INFO messages are created if a shellfire application is run at --verbose 2 or greater. Their use is entirely optional.

When an application is fattened, any required ${executableFile}.path files are embedded inside it. Applications announce their binary dependencies by using statements in global scope like core_dependency_requires PACKAGE_MANAGER rsync grep. A special package manager of * is used to apply to all systems.

What's a ${executableFile}.path file

Very simply, it's a space separated one liner* that maps an executable file name (eg head) to a a package name (eg coreutils) and an expected location in the file system (/usr/local/opt/coreutils/libexec/gnubin/head), eg

head coreutils /usr/local/opt/coreutils/libexec/gnubin/head

The file name, in this case head, should be the name of the ${executableFile}.path file - in this case, head.path.

The package name (and its syntax) is the one used by the particular package manager the .path is for. Often, the package name and executable file name are the same (eg for curl). Sometimes it's more complex. For example, to use taps with the Homebrew package manager (for Mac OS X), the tap is prefixed to the package name, eg homebrew/dupes/rsync for rsync.path

* Which must be terminated by a line feed.

Importing

To use this module, simply add a git submodule paths.d in etc/shellfire in your git repository. For example:-

mkdir -p etc/shellfire
cd etc/shellfire
git submodule add "https://github.com/shellfire-dev/paths.d.git"
cd -
git submodule init --update

You are also free to use per-application .path files. For example, if your _program_name is swaddle:-

mkdir -p etc/shellfire/swaddle/{Homebrew,Debian,CentOS}

Underneath this folder are folders for each package manager, where one places ${executableFile}.path files.

Supported Package Managers

Currently, we support the package managers:-

  • Homebrew
  • Debian
  • CentOS
  • RedHat (by symlink to CentOS)
  • Fedora (by symlink to CentOS)

If you can contribute ${executableFile}.path files for another a package manager, please submit a pull request.

About

Paths for common GNU and GNU-like programs, to allow consistency

Resources

License

Stars

Watchers

Forks

Packages

No packages published