{"id":19917047,"url":"https://github.com/danyspin97/rinstall","last_synced_at":"2025-05-03T06:30:44.497Z","repository":{"id":45993377,"uuid":"400637021","full_name":"danyspin97/rinstall","owner":"danyspin97","description":"Declarative install for programs","archived":false,"fork":false,"pushed_at":"2024-04-21T15:56:48.000Z","size":372,"stargazers_count":31,"open_issues_count":6,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-01T18:48:41.891Z","etag":null,"topics":["packaging","packaging-tool"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danyspin97.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-08-27T21:16:48.000Z","updated_at":"2025-03-29T04:40:01.000Z","dependencies_parsed_at":"2024-04-21T17:22:54.651Z","dependency_job_id":null,"html_url":"https://github.com/danyspin97/rinstall","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danyspin97%2Frinstall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danyspin97%2Frinstall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danyspin97%2Frinstall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danyspin97%2Frinstall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danyspin97","download_url":"https://codeload.github.com/danyspin97/rinstall/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252154732,"owners_count":21702982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["packaging","packaging-tool"],"created_at":"2024-11-12T21:48:34.065Z","updated_at":"2025-05-03T06:30:44.242Z","avatar_url":"https://github.com/danyspin97.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rinstall\n\n![GitHub branch checks state](https://img.shields.io/github/checks-status/danyspin97/rinstall/main?logo=github)\n![GitHub](https://img.shields.io/github/license/danyspin97/rinstall)\n\n**rinstall** is an helper tool that installs software and additional data into the system.\nMany programs often include man pages, documentation, config files and there is no standard\nway to install them except for using Makefiles or complete build system. However, Makefiles\nare notoriously complicated to setup; it is especially hard to follow the [Directory Variables]\nfrom the _GNU Coding Standard_.). Build systems instead cover the installation part but\ndepending on an entire build system to install a shell script or a rust binary is not optimal.\nYou can read more of _rinstall_ rationale [here][Makefiles Best Practices].\n\n[Directory Variables]: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html\n[Makefiles Best Practices]: https://danyspin97.org/blog/makefiles-best-practices/\n\nrinstall read a declarative YAML file (`install.yml`) containing the list of the files to install.\nIt then installs the program either system-wide or for the current user (following the\n[XDG BaseDirectories]). It reads the default configuration for the system from `/etc/rinstall.yml`\nor `.config/rinstall.yml`, using a default one otherwise.\n\n[XDG BaseDirectories]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/rinstall.svg)](https://repology.org/project/rinstall/versions)\n\n## Features\n\n- List the files to install and their location in a declarative way\n- Ensure backward compatibility (no need to update `install.yml` every new rinstall version)\n- Support for both user and system-wide installation\n- Works inside the codebase or from the release tarball\n- Native support for _Rust_ programs and *cargo*\n- Easy uninstallation of packages\n- Allow templating of documentation and man pages\n- Support for GNU Directory standard, FHS and XDG BaseDirectories, with optional configuration\n- Support most common types of files\n- Reproducible installation\n- Packagers friendly\n\n## Build\n\nTo build from source run the following command:\n\n```\n$ cargo build --release\n```\n\nTo install rinstall for the current user:\n\n```\n$ ./target/release/rinstall install -y\n```\n\n## Usage\n\nIf the project has an `install.yml` file present, either in the root directory or in the\n`.package` directory, it supports installation via **rinstall**.\n\nRun rinstall as your user to see the changes that will be done to the filesystem:\n\n```\n$ rinstall install\n```\n\nAfter having reviewed the changes, add `-y` or `--yes` to perform an user installation:\n\n```\n$ rinstall install --yes\n```\n\nThe same apply for performing a system-wide installation, enabled by adding the\nflag `--system`. To list the changes made to the filesystem, run **rinstall** in\ndry mode (i.e. without the flag`--yes`):\n\n```\n$ rinstall install --system\n```\n\nTo accept the changes, run again the command and append the flag `-y` or `--yes`. You need to run\nthe command as root to apply the changes to the filestem.\n\n```\n# rinstall install --system -y\n```\n\n### Uninstall\n\nWhen a package gets installed, a file with the suffix `.pkg` will be\ncreated inside `$localstatedir/rinstall` (by default `/usr/local/var/\nrinstall` for system installations and `$HOME/.local/share/rinstall` for user\ninstallations). This file will contain the list of installed files, allowing the\nthe `uninstall` subcommand to revert the installation of a package:\n\n```bash\n$ rinstall uninstall wpaperd\nWould remove /home/danyspin97/.local/bin/wpaperd\nWould remove /home/danyspin97/.local/bin/wpaperctl\nWould remove /home/danyspin97/.local/share/bash-completion/wpaperd.bash\nWould remove /home/danyspin97/.local/share/licenses/wpaperd/LICENSE.md\nWould remove /home/danyspin97/.local/share/rinstall/wpaperd.pkg\n```\n\n### Packagers\n\nrinstall support the packagers use-case out of the box. When calling rinstall inside a package\nspecification (i.e. spec file, `PKGBUILD`, `ebuild`), add the `--packaging` flag and it will\nenable all relevant flags and ask you the needed information:\n\n```bash\n$ rinstall install --packaging --destdir mydestdir\n\u003e\u003e\u003e Package rinstall\nWould install target/release/rinstall -\u003e mydestdir/usr/local/bin/rinstall\nWould install target/release/man/rinstall.1 -\u003e mydestdir/usr/local/share/man/man1/rinstall.1\nWould install README.md -\u003e mydestdir/usr/local/share/doc/rinstall/README.md\n...\n```\n\n### Release tarballs\n\n**rinstall** supports installing from release tarballs (i.e. the tarballs published on Github\nfor each release containing a compiled version of the program).\n\nTo allow a program to be installed from a release tarball create a `.tarball` empty file during\nthe generation and include `install.yml`. **rinstall** will then assume that all the files are in\nthe top directory and proceed to install them as usual; this means that for _Rust_ programs, the\nexecutables will be searched in the top directory instead of `target/release`. Please assure that\nall the files listed in `install.yml` are included in the tarball.\n\n## Configuration\n\nThe installation directories chosen by rinstall can be configured by adding and tweaking the\nfile `rinstall.yml` under the `sysconfdir`. By default, `/etc/rinstall.yml` and\n`$HOME/.config/rinstall.yml` will be used respectively for the root user and the non-root user.\n\nThe root configuration should already be installed by the rinstall package of your distribution and\nit can also be found in the `config/root/` directory of this repository; the non-root user\nconfiguration can be found in the `config/user/` directory. All the placeholders will be replaced at runtime by **rinstall**.\n\nAdditionally, a different configuration file can be passed by using the `--config` (or `-c`)\ncommand line argument. All the values can also be overridden when invoking rinstall by using\nthe respective command line arguments.\n\nThe configuration is a YAML file that can contain the following keys. If any of them is missing,\na default value will be used instead.\n\n- `bindir`\n- `libdir`\n- `datarootdir`\n- `datadir`\n- `sysconfdir`\n- `localstatedir`\n- `runstatedir`\n- `systemd_unitsdir`\n\nIn addition, the system-wide configuration can contain the following keys:\n\n- `prefix`\n- `exec_prefix`\n- `sbindir`\n- `libexecdir`\n- `includedir`\n- `docdir`\n- `mandir`\n- `pam_modulesdir`\n\nPlease refer to the [Directory Variables] for their usage.\n\nIf any key is missing, \n\n### Placeholders in configuration\n\n#### Root user configuration\n\nIn the configuration you may want to set a value based on another directory set prior. For example\nyou may want `bindir` to be a directory `bin` relative to the `exec_prefix` directory. **rinstall**\nsupports placeholders in the configuration to allow this:\n\n```\nexec_prefix: /usr/local\nbindir: @exec_prefix@/bin\n```\n\nThe root user configuration allows for the following placeholders:\n\n- `@prefix@`, supported by all values\n- `@exec_prefix@`, supported in `bindir` and `libdir`\n- `@localstatedir@`, supported in `runstatedir`\n- `@datarootdir@`, supported in `docdir` and `mandir`\n- `@libdir`, supported in `pam_modulesdir` and `systemd_unitsdir`\n\n#### Non-root user configuration\n\nNon-root user configuration relies on XDG Directories, so it allows placeholders that refer to\nthese values. The placeholders will be replaced by the environment variable and, if it is not set,\nit will fallback on a default value:\n\n```\ndatadir: @XDG_DATA_HOME@\nsysconfdir: @XDG_CONFIG_HOME@\n```\n\nThe non-root user configuratione supports for the following placeholders:\n\n- `@XDG_DATA_HOME@`, supported in `datarootdir` and `datadir`\n- `@XDG_CONFIG_HOME@`, supported in `sysconfdir` and `systemd_unitsdir`\n- `@XDG_STATE_HOME@`, supported in `localstatedir`\n- `@XDG_RUNTIME_DIR@`, supported in `runstatedir`\n- `@sysconfdir@`, supported in `systemd_unitsdir`\n\n### `\u003cpkg-name\u003e`\n\nAn additional placeholder used when configuring the directories is `\u003cpkg-\nname\u003e`; this will automatically be replaced by the package name used inside\n`install.yml`. Some directories (e.g. `docdir` use this placeholder by default).\nManually set the directories to remove it.\n\n## Writing `install.yml`\n\nTo support **rinstall**, place an `install.yml` file into the root of your project. It shall contain\nthe rinstall version to use and the packages to install. Each package shall contain the\nentries of the files to install, divided by their purpose/destination.\n\nExample file for a program named `foo` written in Rust that only install an executable with\nthe same name:\n\n```yaml\nrinstall: 0.1.0\npkgs:\n  foo:\n    type: rust\n    exe:\n      - foo\n```\n\n### `install.yml` examples\n\n- [kanidm](https://github.com/kanidm/kanidm/blob/master/install.yml)\n- [wpaperd](https://github.com/danyspin97/wpaperd/blob/main/install.yml)\n- [dog in openSUSE](https://build.opensuse.org/package/view_file/network:utilities/dog/install.yml?expand=1)\n- [myxer in openSUSE](https://build.opensuse.org/package/view_file/multimedia:apps/myxer/install.yml?expand=1)\n\n### rinstall version\n\neach **rinstall** release will have a respective version of the spec file; each version might\nsupport new entry types but it might remove support for some as well. rinstall will support older\nreleases, along with all its entry types which were allowed.\n\n### Packages\n\n**rinstall** support the installation of multiple packages from the same repository. Put all the\npackages under a unique name inside the key `pkgs` in the `install.yml` file (even if there is only\none package):\n\n```yaml\nrinstall: 0.1.0\npkgs:\n  foo:\n    type: rust\n    exe:\n      - foo\n  bar:\n    type: rust\n    exe:\n      - bar\n  bar-c:\n    include:\n      - bar.h\n```\n\n### Entries\nEach entry list a file to install and it shall either be a string or a struct containing the\nfollowing data:\n\n- `src`: the source, containing the location to the file that will be installed. Unless noted,\n  it shall always be relative to the project directory.\n- `dst`: the destination (_optional_), containing the directory or file where that this entry\n  should be installed to. It shall always be relative, the corresponding system directory will\n  be appended based on the type of entry; e.g. for `exe` entries, the destination part will be\n  appended to `bindir`. To mark the destination as a directory, add a leading path separator `/`.\n- `tmpl`: enable templating for the current entry; refer to **templating** for more information.\n\nWhen the entry is only a string, it shall contains the source and follows the same rules as `src`.\n\nExample entry defined by a struct:\n\n```yaml\nsrc: myprog.sh\ndst: myprog\n```\n\nExample entry where destination is a directory:\n```yaml\nsrc: myprog\ndst: internaldir/\n```\n\n### Valid entries\n\n**rinstall** allows for the following keys:\n\n_Note_: ***each entry will be available for both system and non-system wide installations except\nwere expliticly noted***.\n\n#### Type\n\n(_since 0.1.0_)\n\nThe type part can either be `rust` or `default`. If no value is specified, then `default` will be\nused.\n\n- `rust` for projects built using `cargo`. The target directory is fetched using `cargo metadata`\n  and used as root directory for executables and libraries. I.e. you don't need to use\n  `target/release/myexe` when listing executables, but just `myexe`. If you need to install\n  an executable script in a Rust project, use `$PROJECTDIR/` prefix.\n\n- `default` for all the other projects. All the directories will be relative to the root directory\n  of the project.\n\n#### `exe`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$bindir` | `/usr/local/bin` |\n| *user-wide* | `$bindir` | `$HOME/.local/bin` |\n\nFor the executables.\n\n#### `admin_exe`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$sbindir` | `/usr/local/sbin` |\n\nFor admin executables; they will be installed in `sbindir` (which defaults to `/usr/local/sbin`).\n\n#### `libs`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$libdir` | `/usr/local/lib` |\n| *user-wide* | `$libdir` | `$HOME/.local/lib` |\n\nFor the libraries.\n\n#### `libexec`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$libexecdir` | `/usr/local/libexec` |\n\n#### `include`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$includedir` | `/usr/local/include` |\n\nFor headers.\n\n#### `man`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$mandir` | `/usr/local/share/man` |\n\nFor the man pages.\n\n#### `data`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir` | `/usr/local/lib` |\n| *user-wide* | `$XDG_DATA_HOME` | `$HOME/.local/share` |\n\nFor architecture independent files.\n\n#### `docs`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir/\u003cpkg-name\u003e` | `/usr/local/share/doc/\u003cpkg-name\u003e` |\n\nFor documentation and examples.\n\n#### `config`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$sysconfdir/\u003cpkg-name\u003e` | `/usr/local/etc/\u003cpkg-name\u003e` |\n| *user-wide* | `$XDG_CONFIG_HOME/\u003cpkg-name\u003e` | `$HOME/.config/\u003cpkg-name\u003e` |\n\nFor configuration files.\n\n#### `user-config`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir/\u003cpkg-name\u003e/user-config` | `/usr/local/share/docs/\u003cpkg-name\u003e/user-config` |\n| *user-wide* | `$XDG_CONFIG_HOME` | `$HOME/.config` |\n\nFor configuration files that can only be used by non-root users. For system-wide\ninstallations, these files will be treated as documentation.\n\n#### `desktop-files`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir/applications` | `/usr/local/share/applications` |\n| *user-wide* | `$XDG_DATA_HOME/applications` | `$HOME/.local/share/applications` |\n\nFor `.desktop` files; they will be installed in folder\n`applications` under `datarootdir` (which defaults to `/usr/local/share/applications`).\n\n#### `appstream-metadata`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir/metainfo` | `/usr/local/share/metainfo` |\n\n\nFor [AppStream metadata] files.\n\n[AppStream metadata]: https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html\n\n#### `completions`\n\n| | Version | System-wide only |\n| --- | --- | --- |\n| *bash* | _since 0.1.0_ | *no* |\n| *elvish* | _since 0.2.0_ | *no* |\n| *fish* | _since 0.1.0_ | *yes* |\n| *zsh* | _since 0.1.0_ | *yes* |\n\nFor completions files; they will be installed in the respective shell completions\ndirectory, under `datarootdir`:\n- `$datarootdir/bash-completion/completions` for *bash*\n- `$datarootdir/elvish/lib` for *elvish*\n- `$datarootdir/fish/vendor_completions.d` for *fish*\n- `$datarootdir/zsh/site-functions` for *zsh*\n\nExample:\n\n```yaml\ncompletions:\n  bash:\n    - cat.bash\n    - cp.bash\n  fish:\n    - cat.fish\n    - cp.fish\n  zsh:\n    - _cat\n    - _cp\n```\n\n#### `pam-modules`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$libdir/security` | `/usr/local/lib/security` |\n\nFor PAM modules. If only `src` is provided, and the name of the file starts with `lib`, e.g.\n`libpam_mymodule.so`, it will be automatically converted to `pam_mymodule.so`.\n\n#### `systemd-units`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$systemd_unitsdir/system` | `/usr/local/lib/systemd/system` |\n\nFor systemd system units.\n\n#### `systemd-user-units`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.2.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$systemd_unitsdir/user` | `/usr/local/lib/systemd/user` |\n| *user-wide* | `$XDG_DATA_HOME/systemd/user` | `$HOME/.local/share/systemd/user` |\n\nFor systemd user units; they will be installed in `@systemd_unitsdir@/user` (`/usr/local/lib/systemd/user` by default).\n\n#### `icons`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\nFor icons. There two different locations for icons:\n\n- `@datarootdir@/pixmaps` (system-wide only)\n- `@datarootdir@/icons`\n\nTo install an icon into one or the other, use `pixmaps`:\n\n```yaml\nicons:\n  - src: myicon.svg\n    pixmaps: true\n```\n\nThe icons in the latter are divided into different folders by:\n\n- `theme`, which defaults to `hicolor`\n- `dimensions`, which is the size of the icon in the form of `YxY` (`48x48`) or\n  `scalable` for svg icons (**mandatory**)\n- `type`, which defaults to `apps`\n\nExample:\n\n```yaml\nicons:\n  - src: myicon.svg\n    dimensions: scalable\n```\n\n`theme` and `type` are optional. For more information the entries in `@datarootdir@/icons`, have a\nlook at the [Directory Layout] of the freedesktop icon theme specification.\n\n[Directory Layout]: https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#directory_layout\n\n#### `terminfo`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir/terminfo` | `/usr/local/share/terminfo` |\n\nFor terminfo sources. The source files won't be compiled by **rinstall**.\nPlease compile them manually after installation by using `tic`.\nThe files there are divided into different folders based on the first letter of the file name.\nFor example the file `alacritty.info` should be installed in\n`/usr/local/share/terminfo/a/alacritty.info`. Just use the name of the file in `src` or `dst`\nand **rinstall** will handle the directory.\n\n#### `licenses`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *no* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$datarootdir/licenses/\u003cpkg-name\u003e` | `/usr/local/share/licenses/\u003cpkg-name\u003e` |\n| *user-wide* | `$XDG_DATA_HOME/licenses/\u003cpkg-name\u003e` | `$HOME/.local/share/applications/\u003cpkg-name\u003e` |\n\nFor licenses.\n\n#### `pkg-config`\n\n| Version | System-wide only |\n| --- | --- |\n| _since 0.1.0_ | *yes* |\n\n| | Installed in | Defaults to |\n| --- | --- | --- |\n| *system-wide* | `$libdir/pkgconfig` | `/usr/local/lib/pkgconfig` |\n\nFor `pkg-config` files.\n\n### Templating\n\nSometimes it might be required to refer to some installed file or some location. However,\nthese locations are only known when installing, so they can't be hard-coded into\nthe file itself. **rinstall** allows to replace some placeholders with the actual directories.\n\nTo enable templating for a file, add `tmpl: true` to an entry:\n\n```\ndocs:\n  - src: my-doc.md\n    tmpl: true\n```\n\n`my-doc.md` file will contains one of the placeholders specified below and they will be replaced\nautomatically by rinstall. For example if it contains the following contents:\n\n```\nThis project has used @prefix@ as its prefix and @bindir@ as its bindir.\n```\n\nThen we invoke rinstall like this:\n\n```\n# rinstall install -y --prefix /usr --bindir \"@prefix@/bin\"\n```\n\nThe documentation file `my-doc.md` installed will look like the following:\n\n```\nThis project has used /usr as its prefix and /usr/bin as its bindir.\n```\n\n#### Allowed placeholders\n\nThe following placeholders will be replaced with their respective value when templating is\nenabled for an entry:\n\n- `@prefix@`\n- `@exec_prefix@`\n- `@bindir@`\n- `@datarootdir@`\n- `@datadir@`\n- `@sysconfdir@`\n- `@localstatedir@`\n- `@runstatedir@`\n- `@includedir@`\n- `@docdir@`\n- `@mandir@`\n- `@pam_modulesdir@`\n- `@systemd_unitsdir@`\n\n## License\n\n**rinstall** is licensed under the GPL-3+ license.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanyspin97%2Frinstall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanyspin97%2Frinstall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanyspin97%2Frinstall/lists"}