Skip to content

Latest commit

 

History

History
294 lines (219 loc) · 10.2 KB

README.md

File metadata and controls

294 lines (219 loc) · 10.2 KB
app-fleet.mp4

Overview

App Fleet is a workspace management tool written entirely for the Linux Desktops, designed and finely tested on GNOME . It offers creation of workspace configurations that can later be launched using a startup workspace launcher.

Modern Linux Desktop Environments provide their users with the ability to have multiple workspaces on the same desktop; this is highly beneficial for users who often switch between the group of apps or group of browser windows with multiple tabs.

But launching these many apps manually on startup is a hideous task, sure we can write a script that can do this, but doing that requires a bit of brainstorm, and also, even on a powerful machine, some apps take some time to specifically show the first window (you cannot have another workspace until there is at least one window in all the current workspaces), and as the requirement increases we have to edit these scripts and maintain them, also, taking a look at the logs if any error occurs, waiting for the app to actually come up before switching the workspace to launch another, ..... phew .. honestly, this is a lot of work to do just to make a single workspace configuration.

But What if there exists a graphical tool to do this? A Tool that can let you create your workspace configurations, also, allows you to give your workspaces cool names and icons. A Tool that can detect installed apps on your system so that you don't have to do a manual entry. A Tool that can even execute specific browser tabs or shell scripts? also, what if, it offers a quick workspace launcher once you log in?

Here comes App Fleet, A brilliant workspace manager & quick launcher specially designed for GNOME.

You only need wmctrl installed on your distro, also make sure flutter works, then, you can compile App Fleet for your distro.

App Fleet is written using The Flutter Framework.

Features

App Fleet comes with a self-update and uninstall feature.

See CHANGELOG for a full feature list.

Review

Reviewed by ItsFOSS

Install (Advanced Installation Options)

🎗️ Before installing make sure wmctrl is installed on your system, or else you will not be able to switch workspace using the App Fleet Launcher.

Hey, Look here

You need to have wmctrl installed on your system, or else app-fleet won't be able to switch workspaces automatically as expected.

On Debian or Ubuntu,

sudo apt install wmctrl

On Fedora,

sudo dnf install wmctrl

For other distributions, look out for instructions.

Install using your shell

Copy and run the following in your terminal:

curl https://raw.githubusercontent.com/omegaui/app_fleet/main/network-install.sh | bash

Install from Precompiled Bundle

git clone https://github.com/omegaui/app-fleet
cd app-fleet/package
./install.sh

Install from Source

git clone https://github.com/omegaui/app-fleet
cd app-fleet/package
./install-from-source.sh

Update

You can seamlessly update app-fleet without touching your workspace configuration. Once, an update arrives, your installation will notify you about the update. then, you can simply, update using these three ways:

Update directly from the shell

curl https://raw.githubusercontent.com/omegaui/app_fleet/main/network-update.sh | bash

Update from Precompiled Bundle

git clone https://github.com/omegaui/app-fleet
cd app-fleet/package
./update.sh

Update from source

git clone https://github.com/omegaui/app-fleet
cd app-fleet/package
./update-from-source.sh

Why there is no Snap/Flatpak/AppImage/Deb/RPM Package?

Snap/Flatpak Packaging is Unsupported by program like App Fleet

App Fleet being a workspace launch automation tool requires system wide read access, the reason is very justifying:

  • App Fleet not only launches Apps but also any custom script the user wants and this script can exist anywhere on the drive or even on the external drive.
  • Snap Packaging isn't possible as packaging a flutter app with snap requires gnome extension which in turn doesn't supports classic confinement, and App Fleet cannot leverage the full system in a strict confinement. (I searched a lot about building it under classic confinement to get system wide read access but didn't find any way to do it. Any help on this is highly appreciated.)
  • Flatpak Packaging also isn't supported as flatpaks have additional set of hindrance, the /usr directory is inaccessible by a flatpak app, and this is the core directory around which App Fleet detects apps and system icons. Not only /usr but directories like /var where the installed flatpak's metainfo resides is inaccessible, thus, App Fleet won't be able to detect other apps.

Both Snaps and Flatpak are launched in a SANDBOX, and App Fleet needs to be directly invoked on the system to be able to do what it is meant to do.

As far as AppImage is considered, the sole cause why I planned for packaging was to roll out updates through the native software updater and not by making the user to rerun the update command everytime an update arrives.

Current network installers included on home repo provide a much seamless install and update experience to the users. App Fleet already includes a Self Update and In-App Uninstall Option.

  • Debian/RPM or Native Packaging
    • App Fleet can be packaged into .deb or .rpm but the reason why this isn't done is App Fleet's ability to do a self update, reinstall and install. Elaborating more, when packaged as a deb package, the core of the app needs to placed to /usr/local/lib while the config always stays at ~/.config, App Fleet's current installations are placed inside ~/.config/app-fleet only, and the self-updater/installer is coded to update it there only. Thus, packaging it as deb package would break the self-updater/installer.
    • Moreover, current network installers work out of the box, you just have to copy/paste the curl command.

Contributing

Hey, App Fleet is built in the ecosystem of IntelliJ.

If you want to contribute to App Fleet, make sure you use IntelliJ-Based project configurations and edits.

The project is built using clean architecture, and there are four launch configurations.

  • project-root
    • .run
      • Launcher Dev.run.xml
      • Launcher Prod.run.xml
      • Manager Dev.run.xml
      • Manager Prod.run.xml

The Prod configurations are meant for production ready states, and the Dev configurations are meant for debugging purpose.
You can only see app logs in Dev Mode.

App Fleet is designed to automatically generate Bug Reports.
You can find them at $HOME/.config/app-fleet/bug-reports`.

Flutter 3.13.6 or above is Required for compiling the program.

Advanced Configuration Options

App Entry Customization

App Customization

Some Apps take a specific period of time to load,
App Fleet offers wait-time for that kind of heavy App.
By Default, each app is given a time period of 500ms to load, which can be customized as per your needs (usually system performance).

Manual Configuration Editing

Gaming Example

Configurations are saved in a readable format i.e., json.
You can directly edit the workspace configs located at $HOME/.config/app-fleet/workspaces

Hiding Workspace Configs in Launcher

Workspace Paths

You can even hide some workspaces from coming the launcher mode by removing them from app-settings.json
this file contains app preferences and is located at $HOME/.config/app-fleet

Quick Task Launcher

There also exists a tiny version of this project, its called the floating-action-bar, which can be used to quickly launch anything on any Modern Desktop Environment.

What's next?

You can even try the latest beta by selecting the branch with latest version number in the branches popup.

then, you need to install from source.

See what is planned for the next release.

Support Me

If you have really liked the project and want to support the development of App Fleet. Then, please consider buying me a coffee.

It helps me to work on the project in my free time.

Scan this Qr Code or

Click the button below to Buy Me a Coffee.

Buy Me A Coffee

App Designed and Crafted by @omegaui