{"id":13505446,"url":"https://github.com/vinifmor/bauh","last_synced_at":"2025-05-14T03:11:19.551Z","repository":{"id":35100916,"uuid":"201946404","full_name":"vinifmor/bauh","owner":"vinifmor","description":"Graphical user interface for managing your Linux applications. Supports AppImage, Debian and Arch packages (including AUR), Flatpak, Snap and native Web applications","archived":false,"fork":false,"pushed_at":"2024-10-13T12:58:41.000Z","size":6558,"stargazers_count":1145,"open_issues_count":83,"forks_count":78,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-05-12T20:19:12.341Z","etag":null,"topics":["appimage","arch","archlinux","aur","debian","flatpak","nativefier","python","snap","webapplication"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vinifmor.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"publiccode":null,"codemeta":null}},"created_at":"2019-08-12T14:27:18.000Z","updated_at":"2025-05-11T00:38:46.000Z","dependencies_parsed_at":"2023-02-12T23:45:44.793Z","dependency_job_id":"a28da08a-e3cc-412e-996d-6eae17e85bde","html_url":"https://github.com/vinifmor/bauh","commit_stats":{"total_commits":2031,"total_committers":18,"mean_commits":"112.83333333333333","dds":0.02954209748892167,"last_synced_commit":"d80b23a952808c883045759270776847fcd7c4ec"},"previous_names":[],"tags_count":56,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinifmor%2Fbauh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinifmor%2Fbauh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinifmor%2Fbauh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinifmor%2Fbauh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vinifmor","download_url":"https://codeload.github.com/vinifmor/bauh/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254059518,"owners_count":22007771,"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":["appimage","arch","archlinux","aur","debian","flatpak","nativefier","python","snap","webapplication"],"created_at":"2024-08-01T00:01:08.198Z","updated_at":"2025-05-14T03:11:14.536Z","avatar_url":"https://github.com/vinifmor.png","language":"Python","funding_links":["https://ko-fi.com/vinifmor"],"categories":["AppImage consumption tools","Development","Applications","Python","python","App Stores"],"sub_categories":["Package managers","Linux","Utilities"],"readme":"[![GitHub release](https://img.shields.io/github/release/vinifmor/bauh.svg?label=Release)](https://github.com/vinifmor/bauh/releases/) [![PyPI](https://img.shields.io/pypi/v/bauh?label=PyPI)](https://pypi.org/project/bauh) [![AUR](https://img.shields.io/aur/version/bauh?label=AUR)](https://aur.archlinux.org/packages/bauh) [![AUR-staging](https://img.shields.io/aur/version/bauh-staging?label=AUR-staging)](https://aur.archlinux.org/packages/bauh-staging) [![License](https://img.shields.io/github/license/vinifmor/bauh?label=License)](https://github.com/vinifmor/bauh/blob/master/LICENSE) [![kofi](https://img.shields.io/badge/Ko--Fi-Donate-orange?style=flat\u0026logo=ko-fi)](https://ko-fi.com/vinifmor)\n\n**bauh** (baoo), formerly known as [fpakman](https://github.com/vinifmor/fpakman), is a graphical interface for managing your Linux software (packages/applications). It currently supports the following formats: AppImage, Debian and Arch Linux packages (including AUR), Flatpak, Snap and Web applications.\n\nKey features\n- A management panel where you can: search, install, uninstall, upgrade, downgrade and launch your applications\n- Tray mode: it launches attached to the system tray and publishes notifications when there are software updates available\n- System backup: it integrates with [Timeshift](https://github.com/teejee2008/timeshift) to provide a simple and safe backup process before applying changes to your system\n- Custom themes: it's possible to customize the tool's style/appearance. More at [Custom themes](#custom_themes) \n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/panel-themes.gif\"\u003e\n\u003c/p\u003e\n\n\n## Index\n1. [Installation](#installation)\n    - [AppImage](#inst_appimage)\n    - [Ubuntu 20.04 based distros (Linux Mint, PopOS, ...)](#inst_ubuntu)\n    - [Arch-based distros](#inst_arch)\n2. [Isolated installation](#inst_iso)\n3. [Desktop entry / menu shortcut](#desk_entry)\n4. [Autostart: tray mode](#autostart)\n5. [Distribution](#dist)\n6. [Supported types](#types)\n    - [AppImage](#type_appimage)\n    - [Arch packages/AUR](#type_arch)\n    - [Debian](#type_deb)\n    - [Flatpak](#type_flatpak)\n    - [Snap](#type_snap)\n    - [Native Web applications](#type_web)\n7. [General settings](#settings)\n   - [Forbidden packaging formats](#forbidden_gems)\n   - [Custom suggestions / curated software](#suggestions)\n8. [Directory structure, caching and logs](#dirs)\n9. [Custom themes](#custom_themes)\n10. [Tray icons](#tray_icons)\n11. [CLI (Command Line Interface)](#cli)\n12. [Improving performance](#performance)\n13. [bauh-files](#bauh_files)\n14. [Code structure](#code)\n15. [Roadmap](#roadmap)\n16. [Contributing](https://github.com/vinifmor/bauh/blob/master/CONTRIBUTING.md)\n17. [Donations](#donations)\n\n \n\n### Installation\n\n#### \u003ca name=\"inst_appimage\"\u003eAppImage\u003c/a\u003e\n\n##### Required dependencies\n- `fuse`: the package name may vary from distribution\n- `qt5dxcb-plugin` (or equivalent): the package name may vary from distribution\n\n##### Steps\n- Download the .AppImage file attached with the latest release from https://github.com/vinifmor/bauh/releases\n- Generally the desktop environment allows you to double-click the downloaded file to execute it. If that's not your case, follow the steps below from a console:\n    - `chmod a+x bauh-${version}-x86_64.AppImage` (replace `${version}` by the respective downloaded version)\n    - `./bauh-${version}-x86_64.AppImage`\n- If you want to integrate bauh to your desktop: click on bauh's settings menu (\"sandwich\") and then `Install bauh`\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.10.0/appim_self.png\"\u003e\n\u003c/p\u003e\n\n\n#### \u003ca name=\"inst_ubuntu\"\u003eUbuntu 20.04 based distros (Linux Mint, PopOS, ...)\u003c/a\u003e\n\n##### Required dependencies\n\n`sudo apt-get install python3 python3-pip python3-yaml python3-dateutil python3-pyqt5 python3-packaging python3-requests`\n\n##### Installing bauh\n\n`sudo pip3 install bauh`\n\n\n##### Optional dependencies (they should be installed with apt-get/apt)\n\n- `aptitude`: Debian package management\n- `timeshift`: system backup\n- `aria2`: multi-threaded downloads\n- `axel`: multi-threaded downloads alternative\n- `libappindicator3-1`: tray-mode\n- `sqlite3`, `fuse`: AppImage support\n- `flatpak`: Flatpaks support\n- `snapd`: Snaps support\n- `python3-lxml`, `python3-bs4`: Web apps support\n- `python3-venv`: [isolated installation](#inst_iso)\n- `xdg-utils`: to open URLs in the browsers (`xdg-open`)\n\n##### Updating bauh\n\nMethod 1\n\n`sudo pip3 install bauh --upgrade`\n\nMethod 2\n\n```\nsudo pip3 uninstall bauh\nsudo pip3 install bauh\n```\n\n##### Uninstalling bauh\n\n```\nbauh --reset  # removes cache and configurations files from HOME\nsudo pip3 uninstall bauh\n```\n\n\n#### \u003ca name=\"inst_arch\"\u003eArch-based distros\u003c/a\u003e\n\n##### Using yay\n\n`yay -S bauh`\n\n\n##### Using git\n\n```\ngit clone  https://aur.archlinux.org/bauh.git\ncd bauh\nmakepkg -si\n```\n\n##### Optional dependencies\n\n- `timeshift`: system backup\n- `aria2`: multi-threaded downloads\n- `axel`: multi-threaded downloads alternative\n- `libappindicator-gtk2`: tray-mode (GTK2 desktop environments)\n- `libappindicator-gtk3`: tray-mode (GTK3 desktop environments)\n- `xdg-utils`: to open URLs in the browser (`xdg-open`)\n- `sqlite`, `fuse2`, `fuse3`: AppImage support\n- `flatpak`: Flatpak support\n- `snapd`: Snap support\n- `pacman`: ArchLinux package management support\n- `python-lxml`, `python-beautifulsoup4`: Web apps support\n- `python-venv`: [isolated installation](#inst_iso)\n\n\n##### Uninstalling bauh\n```\nbauh --reset  # removes cache and configurations files from HOME\npacman -R bauh\n```\n\n\n#### \u003ca name=\"inst_iso\"\u003eIsolated installation\u003c/a\u003e\n\nIf you prefer an isolated installation from the system libraries, type the following commands:\n\n```\npython3 -m venv bauh_env       # creates an isolated environment inside the directory called \"bauh_env\"\nbauh_env/bin/pip install bauh  # installs bauh in the isolated environment\nbauh_env/bin/bauh              # launches bauh. For the tray-mode: bauh_env/bin/bauh-tray\n```\n\n\nUpdating bauh\n\n```\nbauh_env/bin/pip install bauh --upgrade\n```\n\nUninstalling bauh\n\n```\nbauh_env/bin/bauh --reset  # removes cache and configurations files from HOME\nrm -rf bauh_env` (just remove the directory)\n```\n\n\n#### \u003ca name=\"desk_entry\"\u003eDesktop entry / menu shortcut\u003c/a\u003e\n\nTo create a shortcut for bauh on your desktop menu:\n\n- Copy the files from [bauh/desktop](https://raw.githubusercontent.com/vinifmor/bauh/master/bauh/desktop/bauh.desktop) to `~/.local/share/applications` (or `/usr/share/applications` for **root**)\n- Replace the `Exec` field on theses files by the bauh binary path. e.g: `Exec=/usr/bin/bauh` (or `bauh_env/bin/bauh`)\n- Copy [logo.svg](https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/logo.svg) to `/usr/share/icons/hicolor/scalable/apps` as `bauh.svg`\n\n\n#### \u003ca name=\"autostart\"\u003eAutostart: tray mode\u003c/a\u003e\n\nIn order to initialize bauh with the system, use your Desktop Environment settings to register it as a startup application / script (**bauh-tray**). Or\ncreate a file named **bauh.desktop** in **~/.config/autostart** with the content below:\n\n```\n[Desktop Entry]\nType=Application\nName=bauh (tray)\nExec=/path/to/bauh-tray\n```\n\n\n#### \u003ca name=\"dist\"\u003eDistribution\u003c/a\u003e\n\nbauh is officially distributed through [PyPi](https://pypi.org/project/bauh) and [AUR](https://aur.archlinux.org) ([bauh](https://aur.archlinux.org/packages/bauh) / [bauh-staging](https://aur.archlinux.org/packages/bauh-staging))\n\n\n#### \u003ca name=\"types\"\u003eSupported types\u003c/a\u003e\n\n\n##### \u003ca name=\"type_appimage\"\u003eAppImage\u003c/a\u003e\n\n- Supported sources: [AppImageHub](https://appimage.github.io) (applications with no releases published to GitHub are not available)\n- All available application names can be found at [apps.txt](https://github.com/vinifmor/bauh-files/blob/master/appimage/apps.txt)\n- **Only x86_64 AppImage files are available through the search mechanism at the moment**\n- Crashes may happen during an AppImage installation if [AppImageLauncher](https://github.com/TheAssassin/AppImageLauncher) is installed. It is recommended to uninstall it and reboot your system before trying to install an application.\n- Extra actions\n    - `Install AppImage file`: allows to install an external AppImage file\n    - `Upgrade file`: allows to upgrade a manually installed AppImage file\n    - `Update database`: manually synchronize the AppImage database\n    - `Install bauh`: installs bauh if it is running as an AppImage\n\n- Installed applications are store at `~/.local/share/bauh/appimage/installed` (or `/usr/local/share/bauh/installed` for **root**)\n- Desktop entries (menu shortcuts) of the installed applications are stored at `~/.local/share/applications` (or `/usr/share/applications` for **root**). Name pattern: `bauh_appimage_appname.desktop`\n- Symlinks are created at `~/.local/bin` (or `/usr/local/bin` for **root**). They have the same name of the application (if the name already exists, it will be created as 'app_name-appimage'. e.g: `rpcs3-appimage`)\n- Downloaded database files are stored at `~/.cache/bauh/appimage` (or `/var/cache/bauh/appimage` for **root**) as **apps.db** and **releases.db**\n- Databases are updated during the initialization process if they are considered outdated\n- The configuration file is located at `~/.config/bauh/appimage.yml` (or `/etc/bauh/appimage.yml` for **root**) and it allows the following customizations:\n\n```\ndatabase:\n  expiration: 60  # defines the period (in minutes) in which the database will be considered up to date during the initialization process. Use 0 if you always want to update it. Default: 60.\nsuggestions:\n    expiration: 24  # defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them. Default: 24.\n```\n\n- Applications with ignored updates are defined at `~/.config/bauh/appimage/updates_ignored.txt` (or `/etc/bauh/appimage/updates_ignored.txt` for **root**) \n- Cached package suggestions: `~/.cache/bauh/web/suggestions.txt` (or `/var/cache/bauh/web/suggestions.yml` for **root**)\n\n\n##### \u003ca name=\"type_arch\"\u003eArch packages/AUR\u003ca\u003e\n\n- Only available for Arch-based systems\n- It handles conflicts, missing / optional packages installations, and several providers scenarios\n- [rebuild-detector](https://github.com/maximbaz/rebuild-detector) integration (**AUR only**)\n- Automatically makes simple package compilation improvements (for AUR packages):\n\n    a) if `MAKEFLAGS` is not set in `/etc/makepkg.conf`,\n    then a copy of `/etc/makepkg.conf` will be generated at `~/.config/bauh/arch/makepkg.conf` defining MAKEFLAGS to work with\n    the number of your machine processors (`-j${nproc}`).\n\n    b) same as previous, but related to `COMPRESSXZ` and `COMPRESSZST` definitions (if '--threads=0' is not defined)\n    \n    c) `ccache` will be added to `BUILDENV` if it is installed on the system and already not defined \n    \n    d) set the device CPUs to performance scaling governor\n\n    Obs: For more information about them, have a look at [Makepkg](https://wiki.archlinux.org/index.php/Makepkg)\n\n- Extra actions\n    - `Synchronize packages database`: synchronizes the database against the configured mirrors (`sudo pacman -Syy`)\n    - `Refresh mirrors`: allows to define multiple mirrors locations and sort by the fastest (`sudo pacman-mirrors -c country1,country2 \u0026\u0026 sudo pacman-mirrors --fasttrack 5 \u0026\u0026 sudo pacman -Syy`)\n    - `Quick system upgrade`: it executes a default pacman upgrade (`pacman -Syyu --noconfirm`)\n    - `Clean cache`: it cleans the pacman cache directory (default: `/var/cache/pacman/pkg`)\n    - `Mark PKGBUILD as editable`: it marks a given PKGBUILD of a package as editable (a popup with the PKGBUILD will be displayed before upgrading/downgrading this package). Action only available when the configuration property `edit_aur_pkgbuild` is not `false`.\n    - `Unmark PKGBUILD as editable`: reverts the action described above. Action only available when the configuration property `edit_aur_pkgbuild` is not `false`.\n    - `Allow reinstallation check`: it allows to check if a given AUR packages requires to be rebuilt\n    - `Ignore reinstallation check`: it does not to check if a given AUR packages requires to be rebuilt\n    - `Check Snaps support`: checks if the Snapd services are properly enabled.\n    - `Reinstall` (AUR only): rebuilds an installed package.\n\n- If you have AUR added as a repository on you pacman configuration, make sure to disable bauh's support (through the settings described below)\n- AUR package compilation may require additional installed packages to work properly. Some of them are defined on the field `optdepends` of the [PKGBUILD](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=bauh) \n  - for a **root** user the following additional applications must be installed: \n    - `useradd`: required to create a simple user named **bauh-aur** (since **makepkg** does not allow building packages as the **root** user)\n    - `runuser`: required to run commands as another user\n- **Repository packages currently do not support the following actions: Downgrade and History**\n- If some of your installed packages are not categorized, open a PullRequest to the **bauh-files** repository changing [categories.txt](https://github.com/vinifmor/bauh-files/blob/master/arch/categories.txt)\n- During bauh initialization a full AUR normalized index is saved at `~/.cache/bauh/arch/aur/index.txt`\n- Installed AUR packages have their PKGBUILD files cached at `~/.cache/bauh/arch/installed/$pkgname`\n- Packages with ignored updates are defined at `~/.config/bauh/arch/updates_ignored.txt`\n- The configuration file is located at `~/.config/bauh/arch.yml` and it allows the following customizations:\n```\naur:  true # allows to manage AUR packages. Default: true\nrepositories: true  # allows to manage packages from the configured repositories. Default: true\noptimize: true  # if 'false': disables the auto-compilation improvements (AUR)\nsync_databases: true # package databases synchronization once a day before the first package installation/upgrade/downgrade\nsync_databases_startup: true  # package databases synchronization once a day during startup\nclean_cached: true  # defines if old cached versions should be removed from the disk cache during a package uninstallation\nrefresh_mirrors_startup: false # if the package mirrors should be refreshed during startup\nmirrors_sort_limit: 5  # defines the maximum number of mirrors that will be used for speed sorting. Use 0 for no limit or leave it blank to disable sorting. \nrepositories_mthread_download: false  # enable multi-threaded download for repository packages if aria2/axel is installed (otherwise pacman will download the packages). Default: false\nautomatch_providers: true  # if a possible provider for a given package dependency exactly matches its name, it will be chosen instead of asking for the user to decide (false). Default: true.\nedit_aur_pkgbuild: false  # if the AUR PKGBUILD file should be displayed for edition before the make process. true (PKGBUILD will always be displayed for edition), false (PKGBUILD never will be displayed), null (a popup will ask if the user want to edit the PKGBUILD). Default: false.\naur_build_dir: null  # defines a custom build directory for AUR packages (a null value will point to /tmp/bauh/arch (non-root user) or /tmp/bauh_root/arch (root user)). Default: null.\naur_remove_build_dir: true  # it defines if a package's generated build directory should be removed after the operation is finished (installation, upgrading, ...). Options: true, false (default: true).\naur_build_only_chosen : true  # some AUR packages have a common file definition declaring several packages to be built. When this property is 'true' only the package the user select to install will be built (unless its name is different from those declared in the PKGBUILD base). With a 'null' value a popup asking if the user wants to build all of them will be displayed. 'false' will build and install all packages. Default: true.\naur_idx_exp: 1  # It defines the period (in HOURS) for the AUR index stored in disc to be considered up to date during the initialization process. Use 0 so that it is always updated. Default: 1. (P.S: this index is always updated when a package is installed/upgraded)\ncheck_dependency_breakage: true # if, during the verification of the update requirements, specific versions of dependencies must also be checked. Example: package A depends on version 1.0 of B. If A and B were selected to upgrade, and B would be upgrade to 2.0, then B would be excluded from the transaction. Default: true.\nsuggest_unneeded_uninstall: false  # if the dependencies apparently no longer necessary associated with the uninstalled packages should be suggested for uninstallation. When this property is enabled it automatically disables the property 'suggest_optdep_uninstall'. Default: false (to prevent new users from making mistakes)\nsuggest_optdep_uninstall: false  # if the optional dependencies associated with uninstalled packages should be suggested for uninstallation. Only the optional dependencies that are not dependencies of other packages will be suggested. Default: false (to prevent new users from making mistakes)\nsuggest_optdep_select: Selects all or no optional dependencies when installing packages\ncategories_exp: 24  # It defines the expiration time (in HOURS) of the packages categories mapping file stored in disc. Use 0 so that it is always updated during initialization.\naur_rebuild_detector: true # it checks if packages built with old library versions require to be rebuilt. If a package needs to be rebuilt, it will be marked for update ('rebuild-detector' must be installed). Default: true.\nprefer_repository_provider: true  # when there is just one repository provider for a given a dependency and several from AUR, it will be automatically picked.\nsuggestions_exp: 24  # it defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them.\n```\n- Cached package suggestions: `~/.cache/bauh/arch/suggestions.txt` (or `/var/cache/bauh/arch/suggestions.yml` for **root**)\n\n##### \u003ca name=\"type_deb\"\u003eDebian packages\u003ca\u003e\n- Basic actions supported: **search**, **install**, **uninstall**, **upgrade**\n- Custom actions supported:\n   - **synchronize packages**: synchronize the available packages on the repository (`aptitude update`)\n   - **index applications**: maps runnable installed packages (automatically done during initialization)\n   - **software sources**: launches the application responsible for managing software sources (at the moment only `software-properties-gtk` is supported) \n- Custom package actions supported: \n  - **purge**: removes the packages and all related configuration files\n- Files:\n  - runnable applications index: `~/.cache/bauh/debian/apps_idx.json` (or `/var/cache/bauh/debian/apps_idx.json` for **root**)\n  - cached package suggestions: `~/.cache/bauh/debian/suggestions.txt` (or `/var/cache/bauh/debian/suggestions.txt` for **root**)\n  - configuration: `~/.config/bauh/debian.yml` or `/etc/bauh/debian.yml`\n    - `index_apps.exp`: time period (**in minutes**) in which the installed applications cache is considered up-to-date during startup (default: `1440` -\u003e 24 hours)\n    - `sync_pkgs.time`: time period (**in minutes**) in which the packages synchronization must be done on startup (default: `1440` -\u003e 24 hours)\n    - `suggestions.exp`: it defines the period (**in hours**) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them.\n    - `pkg_sources.app`: it defines the application for managing the software sources. A `null` value detects one of the supported applications automatically.\n    - `remove.purge`: if the package configurations should be removed during the uninstallation process (purge). Default: false.\n\n##### \u003ca name=\"type_flatpak\"\u003eFlatpak\u003c/a\u003e\n\n- Applications with ignored updates are defined at `~/.config/bauh/flatpak/updates_ignored.txt`\n- The configuration file is located at `~/.config/bauh/flatpak.yml` and it allows the following customizations:\n```\ninstallation_level: null # defines a default installation level: \"user\" or \"system\". (null will display a popup asking the level)\n```\n- Custom actions supported:\n  - **Full update**: it completely updates the Flatpak apps and components. Useful if you are having issues with runtime updates.\n\n#### \u003ca name=\"type_snap\"\u003eSnap\u003c/a\u003e\n\n- Make sure **snapd** is properly installed and enabled on your system: https://snapcraft.io/docs/installing-snapd \n- Extra actions: \n    - `Refresh`: tries to update the current Snap application revision\n    - `Change channel`: allows to change the Snap application channel\n- The configuration file is located at `~/.config/bauh/snap.yml` and it allows the following customizations:\n```\ninstall_channel: false  # it allows to select an available channel during the application installation. Default: false\ncategories_exp: 24  # It defines the expiration time (in HOURS) of the Snaps categories mapping file stored in disc. Use 0 so that it is always updated during initialization.\n```\n\n\n#### \u003ca name=\"type_web\"\u003eNative Web applications\u003c/a\u003e\n- It allows the installation of Web applications by typing their addresses/URLs on the search bar\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/web/url_search.gif\"\u003e\n\u003c/p\u003e\n\n\n- It offers the possibility to customize the generated app the way you want:\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/web/options.png\"\u003e\n\u003c/p\u003e\n\n\n- It provides some suggestions coming with predefined settings, and they also can be found by their names. They are\ndefined at [suggestions.yml](https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v1/suggestions.yml), and downloaded during the application usage.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/web/suggestions.gif\"\u003e\n\u003c/p\u003e\n\n\n- It relies on [NodeJS](https://nodejs.org/en/), [Electron](https://electronjs.org/) and [nativefier](https://github.com/jiahaog/nativefier) to do all the magic, but you do not need them installed on your system. An isolated installation environment\nwill be generated at `~/.local/share/bauh/web/env` (or `/usr/local/share/bauh/web/env` for **root**).\n- It supports DRM protected content through a custom Electron implementation provided by [castLabs](https://github.com/castlabs/electron-releases). nativefier handles the switch between the official Electron and the custom.\n- The isolated environment is created based on the settings defined in [environment.yml](https://raw.githubusercontent.com/vinifmor/bauh-files/master/web/env/v1/environment.yml)\n (downloaded during runtime).\n- Some applications require Javascript fixes to properly work. If there is a known fix, bauh will download the file from [fix](https://github.com/vinifmor/bauh-files/tree/master/web/env/v2/fix) and\nattach it to the generated app. The fix files are saved on the disk following the pattern `~/.local/share/bauh/web/fixes/electron_{branch}/{app_name}.js` (or `/usr/local/share/bauh/web/fixes/...` for **root**)\n- The installed applications are located at `~/.local/share/bauh/installed` (or `/usr/local/share/bauh/web/installed` for **root**).\n- A desktop entry / menu shortcut will be generated for the installed applications at `~/.local/share/applications` (or `/usr/share/applications` for **root**)\n- If the Tray Mode **Start Minimized** is defined during the installation setup, a desktop entry will be also generated at `~/.config/autostart` (or `/etc/xdg/autostart` for **root**)\nallowing the application to launch automatically after the system's boot attached to the tray.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/web/tray.gif\"\u003e\n\u003c/p\u003e\n\n\n- Extra actions\n    - `Clean installation environment`: removes all the installation environment folders (it does not remove installed apps)\n \n- The configuration file is located at `~/.config/bauh/web.yml` (or `/etc/bauh/web.yml` for **root**) and it allows the following customizations:\n\n```\nenvironment:\n  electron:\n    version: null  # set a custom Electron version here (e.g: '6.1.4')\n  system: false  # set it to 'true' if you want to use the nativefier version globally installed on your system \n  cache_exp: 24 # defines the period (in HOURS) in which the stored environment settings are considered valid. Use 0 so that they are always updated. Default: 24.\n\nsuggestions:\n    cache_exp: 24  # defines the period (in HOURS) in which suggestions stored on the disk are considered up to date during the initialization process. Use 0 so that they are always updated. Default: 24.\n```\n- Cached package suggestions: `~/.cache/bauh/web/suggestions.txt` (or `/var/cache/bauh/web/suggestions.yml` for **root**)\n\n#### \u003ca name=\"settings\"\u003eGeneral settings\u003c/a\u003e\n\n##### Parameters\n\nYou can change some application settings via environment variables or arguments (type ```bauh --help``` to get more information).\n- `--tray`: if bauh should be launched attaching itself to the system tray.\n- `--settings`: it displays only the settings window.\n- `--reset`: it cleans all configurations and cached data stored in the HOME directory.\n- `--logs`: it enables logs (for debugging purposes).\n- `--offline`: it assumes the internet connection is off.\n- `--suggestions`: it forces loading software suggestions after the initialization process.\n\n\n##### Configuration file (**~/.config/bauh/config.yml**)\n\n```\ndownload:\n  icons: true # allows bauh to download the applications icons when they are not saved on the disk\n  multithreaded: true  # allows bauh to use a multithreaded download client installed on the system to download applications source files faster\n  multithreaded_client: null  # defines the multi-threaded download tool to be used. If null, the default installed tool will be used (priority: aria2 \u003e axel). Possible tools/values: aria2, axel\n  check_ssl: true  # if the security certificate (SSL) should be checked before downloading files.\ngems: null  # defines the enabled applications types managed by bauh (a null value means \"all available\")\nlocale: null  # defines a different translation for bauh (a null value will retrieve the system's default locale)\nstore_root_password: true  # if the root password should be asked only once\nmemory_cache:\n  data_expiration: 3600 # the interval in SECONDS that data cached in memory will live\n  icon_expiration: 300  # the interval in SECONDS that icons cached in memory will live\nsuggestions:\n  by_type: 20  # the maximum number of application suggestions that must be retrieved per type\n  enabled: true  # if suggestions must be displayed when no application is installed\nsystem:\n  notifications: true  # if system popup should be displayed for some events. e.g: when there are updates, bauh will display a system popup\n  single_dependency_checking: false  # if bauh should check only once if for the available technologies on the system.\nui:\n  qt_style: fusion  # defines the Qt style. A null value will map to 'fusion' as well.\n  table:\n    max_displayed: 50  # defines the maximum number of displayed applications on the table. Use 0 for no limit.\n  tray:  # system tray settings\n    default_icon: null  # defines a path to a custom icon\n    updates_icon: null  # defines a path to a custom icon indicating updates\n  hdpi: true  # enables HDPI rendering improvements. Use 'false' to disable them if you think the interface looks strange\n  auto_scale: false # activates Qt auto screen scale factor (QT_AUTO_SCREEN_SCALE_FACTOR). It fixes scaling issues for some desktop environments (like Gnome)\n  scale_factor: 1.0  # defines the interface display scaling factor (Qt). Raise the value to raise the interface size. The settings window display this value as a percentage (e.g: 1.0 -\u003e 100%).\n  theme: defines the path to the theme/stylesheet file with a .qss extension (e.g: /path/to/my/theme.qss). For themes provided by bauh, only a string key is needed (e.g: light). Default: light\n  system_theme: merges the system's theme/stylesheet with bauh's. Default: false.\nupdates:\n  check_interval: 5  # the updates checking interval in minutes\n  ask_for_reboot: true  # if a dialog asking for a system reboot should be displayed after a successful upgrade\ndisk:\n    trim:\n        after_upgrade: false # it trims the disk after a successful packages upgrade (`fstrim -a -v`). 'true' will automatically perform the trim and 'null' will display a confirmation dialog\nbackup:\n    enabled: true  # generate timeshift snapshots before an action (if timeshift is installed on the system)\n    mode: 'incremental' # incremental=generates a new snapshot based on another pre-exising one. 'only_one'=deletes all pre-existing self created snapshots and generates a fresh one.\n    install: null  # defines if the backup should be performed before installing a package. Allowed values: null (a dialog will be displayed asking if a snapshot should be generated), true: generates the backup without asking. false: disables the backup for this operation\n    uninstall: null  # defines if the backup should be performed before uninstalling a package. Allowed values: null (a dialog will be displayed asking if a snapshot should be generated), true: generates the backup without asking. false: disables the backup for this operation\n    upgrade: null  # defines if the backup should be performed before upgrading a package. Allowed values: null (a dialog will be displayed asking if a snapshot should be generated), true: generates the backup without asking. false: disables the backup for this operation\n    downgrade: null  # defines if the backup should be performed before downgrading a package. Allowed values: null (a dialog will be displayed asking if a snapshot should be generated), true: generates the backup without asking. false: disables the backup for this operation\n    type: rsync  # defines the Timeshift backup mode -\u003e 'rsync' (default) or 'btrfs'\n    remove_method: self  # define which backups should be removed in the 'only_one' mode. 'self': only self generated copies. 'all': all existing backups on the disc.\nboot:\n    load_apps: true  # if the installed applications or suggestions should be loaded on the management panel after the initialization process. Default: true.\n```\n\n##### \u003ca name=\"forbidden_gems\"\u003eForbidden packaging formats\u003c/a\u003e\n- System administrators and package managers of Linux distributions can disable the usage/management of supported packaging formats\nby adding their ids to the file `/etc/bauh/gems.forbidden`. This will prevent their management code to be loaded.\n- Example (one id per line):\n```\narch\nappimage\n# flatpak  # 'sharps' can be used to ignore a given line (comment)\n```\n\n##### \u003ca name=\"suggestions\"\u003eCustom suggestions / curated software\u003c/a\u003e\n- The software suggestions are download from [bauh-files](https://github.com/vinifmor/bauh-files) by default\n  - [appimage](https://github.com/vinifmor/bauh-files/blob/master/appimage/suggestions.txt)\n  - [arch](https://github.com/vinifmor/bauh-files/blob/master/appimage/suggestions.txt)\n  - [debian](https://github.com/vinifmor/bauh-files/blob/master/debian/suggestions_v1.txt)\n  - [flatpak](https://github.com/vinifmor/bauh-files/blob/master/flatpak/suggestions.txt)\n  - [snap](https://github.com/vinifmor/bauh-files/blob/master/snap/suggestions.txt)\n  - [web](https://github.com/vinifmor/bauh-files/blob/master/web/env/v2/suggestions.yml)\n  \n- Most of the files follow the pattern: `{priority_number}=${id or name}`\n  - Priority numbers: 0 (LOW), 1 (MEDIUM), 2 (HIGH), 3 (TOP)\n  - The priority number is used to sort the retrieved suggestions\n\n- If Linux distributions want to provide their custom suggestions files:\n  - Create the file `/etc/bauh/suggestions.conf`\n  - The content is basically a mapping for each gem to a url or local file (absolute path).\n    - Example:\n    ```\n       arch=https://mydomain.com/arch/suggestions.txt  # remote file\n       appimage=/etc/bauh/appimage/suggestions.txt  # local file (absolute path)\n       # snap = my mapping  # comments with a '#' are allowed\n    ```\n  - If a given gem name is omitted, its suggestions will be downloaded from the default location.\n\n#### \u003ca name=\"dirs\"\u003eDirectory structure, caching and logs\u003c/a\u003e\n- `~/.config/bauh` (or `/etc/bauh` for **root**): stores configuration files\n- `~/.cache/bauh` (or `/var/cache/bauh` for **root**): stores data about your installed applications, databases, indexes, etc. Files are stored here to provide a faster initialization and data recovery. \n- `/tmp/bauh@$USER` (e.g: `/tmp/bauh@root`): stores logging and temporary files (e.g: build dependencies)\n\n\n#### \u003ca name=\"custom_themes\"\u003eCustom themes\u003c/a\u003e\n- Custom themes can be provided by adding their files at `~/.local/share/bauh/themes` (or `/usr/share/bauh/themes` for **root**). Sub-folders are allowed. \n- Themes are composed by 2 required and 1 optional files sharing the same name:\n    - `my_theme.qss`: file with the qss rules. Full example: [light.qss](https://github.com/vinifmor/bauh/blob/master/bauh/view/resources/style/light/light.qss)\n    - `my_theme.meta`: file defining the theme's data. Full example: [light.meta](https://github.com/vinifmor/bauh/blob/master/bauh/view/resources/style/light/light.meta) \n        - available fields:\n            - `name`: name that will be displayed on the interface. It supports translations by adding additional `name` fields with brackets and the language code (e.g: `name[es]=Mi tema`)\n            - `description`: theme's description that will be displayed on the interface. It supports translations like `name` (e.g: description[es] = Mi tema).\n            - `version`: theme's version. It just works as information at the moment. (e.g: 1.0)\n            - `root_theme`: optional attribute that points to a theme that must be loaded before the theme. It supports the bauh's default theme keys (e.g: default, light, ...) or a file path (e.g: `/path/to/root/file.qss`).\n            - `abstract`: optional boolean attribute (true/false) that should only be used by themes that are not complete on their own and just work as a base (root) for other themes. Abstract themes are not displayed on the interface. Full example: [default.qss](https://github.com/vinifmor/bauh/blob/master/bauh/view/resources/style/default/default.qss) \n    - `my_theme.vars`: optional file defining `key=value` pairs of variables that will be available for the .qss file (can be referenced through the symbol **@**. e.g `@my_var`). Full example: [light.vars](https://github.com/vinifmor/bauh/blob/master/bauh/view/resources/style/light/light.vars)\n        - common theme variables available: \n            - `style_dir`: path to the .qss file directory. Example: @style_dir/my_icon.svg\n            - `images`: path to bauh's icons directory (gem icons are not available through this variable). Example: @images/logo.svg\n\n\n#### \u003ca name=\"tray_icons\"\u003eTray icons\u003c/a\u003e\n\nPriority: \n  1) Icon paths defined in **~/.config/bauh/config.yml**\n  2) Icons from the system with the following names: `bauh_tray_default` and `bauh_tray_updates`\n  3) Own packaged icons\n\n  \n#### \u003ca name=\"cli\"\u003eCLI (Command Line Interface)\u003c/a\u003e\n\n- For now it only allows checking for software updates (`bauh-cli updates`).\n- To verify the available commands: `bauh-cli --help`. \n- To list the command parameters: `bauh-cli [command] --help`. (e.g: `bauh-cli updates --help`)\n\n\n#### \u003ca name=\"performance\"\u003eImproving performance\u003c/a\u003e\n\n- Disable the application types you do not want to deal with\n- If you don't care about restarting the app every time a new supported package technology is installed, enable `single_dependency_checking`. This can reduce the application response time, since it won't need to recheck if the required technologies are available on your system every time a given action is executed.\n- If you don't mind to see the applications icons, you can disable them via `download: icons: false`. The application may have a slight response improvement, since it will reduce the IO and parallelism within it.\n- For a faster initialization process, consider raising the values of the settings properties associated with disk caching and the property `boot.load_apps` to `false`.\n\n\n#### \u003ca name=\"bauh_files\"\u003e[bauh-files](https://github.com/vinifmor/bauh-files)\u003c/a\u003e\n\nIt is a separate repository with some files downloaded during runtime.\n\n\n#### \u003ca name=\"code\"\u003eCode structure\u003c/a\u003e\n\n- `view`: code associated with the graphical interface\n- `gems`: code responsible to work with the different packaging technologies (every submodule deals with one or more types)\n- `api`: code abstractions representing the main actions that a user can do with Linux packages (search, install, ...). These abstractions are implemented by the `gems`, and\nthe `view` code is only attached to them (it does not know how the `gems` handle these actions)\n- `commons`: common code used by `gems` and `view`\n\n#### \u003ca name=\"roadmap\"\u003eRoadmap\u003c/a\u003e\n- Support for other packaging technologies\n- Separate modules for each packaging technology\n- Memory and performance improvements\n- Improve user experience\n- The current development changes can be checked [here](https://github.com/vinifmor/bauh/blob/staging/CHANGELOG.md)\n    \n#### \u003ca name=\"donations\"\u003eDonations\u003c/a\u003e\n- You can support this project through [ko-fi](https://ko-fi.com/vinifmor).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinifmor%2Fbauh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvinifmor%2Fbauh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinifmor%2Fbauh/lists"}