DEV Community

John Doe
John Doe

Posted on • Originally published at Medium

How to install downloaded apps on your Linux distro so they show up in your app launcher

When your manually installed app finally appears in the launcher.

On Linux, installing an app is not always the same thing as downloading it.

Sometimes you download an .rpm file. Sometimes you get an AppImage. Sometimes the app comes as a .zip or .tar.gz archive. And sometimes, like with Antigravity IDE, you extract a folder, click the binary, and the app opens.

But then you hit the annoying part: The app works, but it does not show up in your app launcher. You cannot search for it from GNOME. You cannot run it from anywhere in the terminal. And if you leave it in your Downloads folder, your setup starts to feel messy.

This guide explains how to install those apps properly on Fedora.

We will cover three:

  • How to install apps from RPM files.
  • How to handle apps that come as .zip or .tar.gz archives.
  • How to create a launcher so the app appears in your Fedora app menu.

By the end, you should understand what Fedora expects from a manually installed app. I also included a small Bash script at the end that automates most of the process, but we will start with the manual steps first so the script does not feel like magic.

P.S. This guide uses Fedora for the examples, but the manual install pattern works on most Linux distributions. The main difference is the package manager. Fedora uses dnf for .rpm files, Ubuntu and Debian use apt for .deb files, Arch uses pacman, and openSUSE uses zypper. But for apps distributed as .zip, .tar.gz, or AppImage files, the core workflow is almost the same: extract the app, move it to a stable location, optionally symlink the executable into ~/.local/bin, then create a .desktop launcher in ~/.local/share/applications.

The simple rule

There are three different things people often call “installing” an app on Linux.

The first is placing the app files somewhere sensible.

The second is making the app executable from the terminal.

The third is creating a .desktop launcher so your desktop environment can show the app like a normal application.

For example, if you extract an app into your Downloads folder and run it like this:

./my-app
Enter fullscreen mode Exit fullscreen mode

That app is not really installed. It is just being executed from the current folder.

A cleaner setup looks like this:

~/.local/opt/my-app/                 # app files live here
~/.local/bin/my-app                  # command available from terminal
~/.local/share/applications/my-app.desktop  # app launcher lives here
Enter fullscreen mode Exit fullscreen mode

This gives you a clean user-level install without needing to touch system directories.

Recommended folders for manual app installs

For apps you install only for your own user account, use:

~/.local/opt
Enter fullscreen mode Exit fullscreen mode

For apps you want available system-wide, use:

/opt
Enter fullscreen mode Exit fullscreen mode

For most personal Fedora setups, I recommend ~/.local/opt.

Why?

Because it does not need sudo, it keeps your app files away from Downloads, and it follows the idea of user-local software.

Create the folder once:

mkdir -p ~/.local/opt
Enter fullscreen mode Exit fullscreen mode

You can also create these two folders:

mkdir -p ~/.local/bin
mkdir -p ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

They will be useful later.

Case 1: Installing an RPM file on Fedora

If the app comes as an .rpm file, that is the easiest case.

For example:

some-app.rpm
Enter fullscreen mode Exit fullscreen mode

Install it with dnf:

sudo dnf install ./some-app.rpm
Enter fullscreen mode Exit fullscreen mode

The ./ matters if the file is in your current directory. It tells Fedora you are installing a local file, not searching online repositories.

Example:

cd ~/Downloads
sudo dnf install ./postman.rpm
Enter fullscreen mode Exit fullscreen mode

Once installed, Fedora should handle the app launcher, icons, executable paths, and menu integration automatically.

You can usually run the app from the terminal by typing its command name, or search for it from the app launcher.

If you are on an Ubuntu-based distro, the equivalent command is usually:

sudo apt install ./some-app.deb
Enter fullscreen mode Exit fullscreen mode

But on Fedora, use:

sudo dnf install ./some-app.rpm
Enter fullscreen mode Exit fullscreen mode

Case 2: Installing a compressed app archive

Some apps do not come as RPMs. They come as archives.

Common examples:

app-name.zip
app-name.tar.gz
app-name.tar.xz
Enter fullscreen mode Exit fullscreen mode

Postman, Antigravity IDE, and many Electron-based apps often follow this pattern.

In this case, Fedora does not automatically know how to install the app. You need to extract it, move it somewhere sensible, and create the launcher yourself.

Extract the archive

For a .zip file:

cd ~/Downloads
unzip app-name.zip
Enter fullscreen mode Exit fullscreen mode

If unzip is not installed:

sudo dnf install unzip
Enter fullscreen mode Exit fullscreen mode

For a .tar.gz file:

cd ~/Downloads
tar -xzf app-name.tar.gz
Enter fullscreen mode Exit fullscreen mode

For a .tar.xz file:

cd ~/Downloads
tar -xf app-name.tar.xz
Enter fullscreen mode Exit fullscreen mode

After extraction, inspect the folder:

ls
Enter fullscreen mode Exit fullscreen mode

You are looking for the actual executable.

For example, with Antigravity IDE, the executable may be:

/home/gideon/.local/opt/Antigravity IDE/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

With Postman, it may be:

/home/gideon/.local/opt/Postman/Postman
Enter fullscreen mode Exit fullscreen mode

Move the app out of Downloads

Do not leave manually installed apps in Downloads.

Move them to ~/.local/opt.

Example:

mkdir -p ~/.local/opt
mv "Antigravity IDE" ~/.local/opt/
Enter fullscreen mode Exit fullscreen mode

Now the app lives here:

/home/gideon/.local/opt/Antigravity IDE
Enter fullscreen mode Exit fullscreen mode

Test the executable directly:

"/home/gideon/.local/opt/Antigravity IDE/antigravity-ide"
Enter fullscreen mode Exit fullscreen mode

If the app opens, the binary works.

Now you only need to integrate it with your desktop and terminal.
Make the app runnable from anywhere

If you want to run the app from any terminal location, create a symbolic link in ~/.local/bin.

First, make sure ~/.local/bin exists:

mkdir -p ~/.local/bin
Enter fullscreen mode Exit fullscreen mode

Then create a symlink:

ln -s "/home/gideon/.local/opt/Antigravity IDE/antigravity-ide" ~/.local/bin/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Now try:

antigravity-ide
Enter fullscreen mode Exit fullscreen mode

If the command does not work, check whether ~/.local/bin is in your PATH:

echo $PATH
Enter fullscreen mode Exit fullscreen mode

You should see something like:

/home/gideon/.local/bin
Enter fullscreen mode Exit fullscreen mode

If it is missing, add it to your shell configuration.

For Bash:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

For Zsh:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Enter fullscreen mode Exit fullscreen mode

Now the app should run from anywhere:

antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Make the app show up in Fedora’s app launcher

This is where .desktop files come in.

A .desktop file tells GNOME or KDE:

  • the app name
  • where the executable lives
  • which icon to use
  • whether it should open in a terminal
  • which category it belongs to

User-level launchers live here:

~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

Create the launcher:

nano ~/.local/share/applications/antigravity-ide.desktop
Enter fullscreen mode Exit fullscreen mode

Paste this:

[Desktop Entry]
Name=Antigravity IDE
Comment=AI coding editor
Exec="/home/gideon/.local/opt/Antigravity IDE/antigravity-ide"
Icon=/home/gideon/.local/share/icons/antigravity-ide.png
Terminal=false
Type=Application
Categories=Development;IDE;
StartupWMClass=antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Save the file.

In Nano:

Ctrl + O
Enter
Ctrl + X
Enter fullscreen mode Exit fullscreen mode

Then make it executable:

chmod +x ~/.local/share/applications/antigravity-ide.desktop
Enter fullscreen mode Exit fullscreen mode

Update the desktop database:

update-desktop-database ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

Now search for “Antigravity IDE” from your Fedora app launcher.

Understanding the .desktop file

Here is what each line does.

[Desktop Entry]
Enter fullscreen mode Exit fullscreen mode

This tells Linux that the file is a desktop launcher.

Name=Antigravity IDE
Enter fullscreen mode Exit fullscreen mode

This is the name that appears in your app launcher.

Comment=AI coding editor
Enter fullscreen mode Exit fullscreen mode

This is a short description of the app.

Exec="/home/gideon/.local/opt/Antigravity IDE/antigravity-ide"
Enter fullscreen mode Exit fullscreen mode

This is the command Fedora runs when you click the app.

Because the folder name has a space, the path is wrapped in quotes.

Icon=applications-development
Enter fullscreen mode Exit fullscreen mode

Using applications-development tells Fedora to use a generic development icon. Instead, I downloaded an icon and placed it in the icons directory which I had previously created for icons that do not ship with the tarball file. So you don’t get all worked up if you do not see the icons directory (I talk about this in the next section in a little bit more detail).

If you have a real icon file, you use an absolute path instead:

Icon=/home/gideon/.local/share/icons/antigravity-ide.png
Enter fullscreen mode Exit fullscreen mode

If your application ships with an icon there’s no need for that workaround, just point to it instead like I did with this Postman config:

Icon=/home/gideon/.local/opt/Postman/app/resources/app/assets/icon.png
Enter fullscreen mode Exit fullscreen mode
Terminal=false
Enter fullscreen mode Exit fullscreen mode

This means the app should open normally, not inside a terminal.

Type=Application
Enter fullscreen mode Exit fullscreen mode

This tells the desktop environment that the launcher opens an app.

Categories=Development;IDE;
Enter fullscreen mode Exit fullscreen mode

This helps Fedora group the app correctly.

StartupWMClass=antigravity-ide
Enter fullscreen mode Exit fullscreen mode

This helps GNOME match the running window to the launcher icon.

What if the app has no icon?

Some downloaded apps do not include a normal .png, .svg, or .ico file.

You can check with:

find ~/.local/opt/Antigravity\ IDE -iname "*.png"
find ~/.local/opt/Antigravity\ IDE -iname "*.svg"
find ~/.local/opt/Antigravity\ IDE -iname "*.ico"
Enter fullscreen mode Exit fullscreen mode

If nothing appears, use a generic icon:

Icon=applications-development
Enter fullscreen mode Exit fullscreen mode

Other useful generic icons include:

Icon=utilities-terminal
Icon=application-x-executable
Icon=system-run
Enter fullscreen mode Exit fullscreen mode

If you later download or create a real icon, save it here:

mkdir -p ~/.local/share/icons
Enter fullscreen mode Exit fullscreen mode

For example:

/home/gideon/.local/share/icons/antigravity.png
Enter fullscreen mode Exit fullscreen mode

Then update the .desktop file:

Icon=/home/gideon/.local/share/icons/antigravity.png
Enter fullscreen mode Exit fullscreen mode

After that, refresh the desktop database:

update-desktop-database ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

You may need to log out and log back in if GNOME keeps showing the old icon.

Testing the launcher

You can test a desktop launcher without searching through the app menu.

Use:

gtk-launch antigravity-ide
Enter fullscreen mode Exit fullscreen mode

The name comes from the desktop file name.

For example:

antigravity-ide.desktop
Enter fullscreen mode Exit fullscreen mode

becomes:

gtk-launch antigravity-ide
Enter fullscreen mode Exit fullscreen mode

If the app opens, your launcher works.

You can also validate the desktop file:

desktop-file-validate ~/.local/share/applications/antigravity-ide.desktop
Enter fullscreen mode Exit fullscreen mode

If there is no output, the file is valid.

If the command is missing, install the desktop utilities package:

sudo dnf install desktop-file-utils
Enter fullscreen mode Exit fullscreen mode

Avoid spaces in app folder names if possible

Linux can handle spaces in paths, but they are annoying.

This works:

"/home/gideon/.local/opt/Antigravity IDE/antigravity-ide"
Enter fullscreen mode Exit fullscreen mode

But this is cleaner:

/home/gideon/.local/opt/Antigravity-IDE/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

You can rename the folder:

mv "/home/gideon/.local/opt/Antigravity IDE" "/home/gideon/.local/opt/Antigravity-IDE"
Enter fullscreen mode Exit fullscreen mode

Then update your desktop file:

Exec=/home/gideon/.local/opt/Antigravity-IDE/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

And update your symlink:

rm ~/.local/bin/antigravity-ide
ln -s /home/gideon/.local/opt/Antigravity-IDE/antigravity-ide ~/.local/bin/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

This is less error-prone.

Example: Full Antigravity IDE setup

Assume the app is already extracted and lives here:

/home/gideon/.local/opt/Antigravity IDE
Enter fullscreen mode Exit fullscreen mode

And the executable is:

/home/gideon/.local/opt/Antigravity IDE/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

First, test it:

"/home/gideon/.local/opt/Antigravity IDE/antigravity-ide"
Enter fullscreen mode Exit fullscreen mode

Then create a terminal command:

mkdir -p ~/.local/bin
ln -s "/home/gideon/.local/opt/Antigravity IDE/antigravity-ide" ~/.local/bin/antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Test it:

antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Then create the launcher:

nano ~/.local/share/applications/antigravity-ide.desktop
Enter fullscreen mode Exit fullscreen mode

Paste:

[Desktop Entry]
Name=Antigravity IDE
Comment=AI coding editor
Exec="/home/gideon/.local/opt/Antigravity IDE/antigravity-ide"
Icon=applications-development
Terminal=false
Type=Application
Categories=Development;IDE;
StartupWMClass=antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Then run:

chmod +x ~/.local/share/applications/antigravity-ide.desktop
update-desktop-database ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

Test it:

gtk-launch antigravity-ide
Enter fullscreen mode Exit fullscreen mode

If it opens, you are done.

Example: Full Postman setup

Assume Postman was extracted into:

~/Downloads/Postman
Enter fullscreen mode Exit fullscreen mode

Move it:

mkdir -p ~/.local/opt
mv ~/Downloads/Postman ~/.local/opt/
Enter fullscreen mode Exit fullscreen mode

Test the executable:

/home/gideon/.local/opt/Postman/Postman
Enter fullscreen mode Exit fullscreen mode

Create a symlink:

mkdir -p ~/.local/bin
ln -s /home/gideon/.local/opt/Postman/Postman ~/.local/bin/postman
Enter fullscreen mode Exit fullscreen mode

Now you can run:

postman
Enter fullscreen mode Exit fullscreen mode

Create the launcher:

nano ~/.local/share/applications/postman.desktop
Enter fullscreen mode Exit fullscreen mode

Paste:

[Desktop Entry]
Name=Postman
Comment=API development environment
Exec=/home/gideon/.local/opt/Postman/Postman
Icon=/home/gideon/.local/opt/Postman/app/resources/app/assets/icon.png
Terminal=false
Type=Application
Categories=Development;Utility;
StartupWMClass=Postman
Enter fullscreen mode Exit fullscreen mode

Then run:

chmod +x ~/.local/share/applications/postman.desktop
update-desktop-database ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

Now Postman should appear in your app launcher.

Troubleshooting

The app opens from the terminal but not from the launcher

Check the Exec= path.

Run:

ls -al "/path/to/the/executable"
Enter fullscreen mode Exit fullscreen mode

If the file does not exist, the launcher cannot work.

Also make sure the executable has execute permission:

chmod +x "/path/to/the/executable"
Enter fullscreen mode Exit fullscreen mode

The app appears in the launcher but has no icon

The icon path is probably wrong.

Check whether the icon file exists:

ls -al /path/to/icon.png
Enter fullscreen mode Exit fullscreen mode

If you do not have an icon, use a generic one:

Icon=applications-development
Enter fullscreen mode Exit fullscreen mode

The app opens, but Fedora does not group the window correctly

The StartupWMClass may be wrong.

Open the app, then run:

xprop WM_CLASS
Enter fullscreen mode Exit fullscreen mode

Click the app window.

You may see something like:

WM_CLASS(STRING) = "antigravity-ide", "Antigravity IDE"
Enter fullscreen mode Exit fullscreen mode

Use the correct value in your desktop file:

StartupWMClass=Antigravity IDE
Enter fullscreen mode Exit fullscreen mode

or:

StartupWMClass=antigravity-ide
Enter fullscreen mode Exit fullscreen mode

Then refresh:

update-desktop-database ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

The command does not run from anywhere

Check your PATH:

echo $PATH
Enter fullscreen mode Exit fullscreen mode

Make sure this appears somewhere:

/home/gideon/.local/bin
Enter fullscreen mode Exit fullscreen mode

If not, add it:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Then test again:

antigravity-ide
Enter fullscreen mode Exit fullscreen mode

The mental model

Here is the clean way to think about it:

An RPM installs the app for you.

A Flatpak installs the app for you.

But a .zip or .tar.gz archive usually just gives you files.

When you manually install an archived app, you are responsible for three things:

  1. Put the app somewhere stable.
  2. Make it runnable from the terminal.
  3. Create a desktop launcher.

A good Fedora setup looks like this:

~/.local/opt/app-name
~/.local/bin/app-name
~/.local/share/applications/app-name.desktop
Enter fullscreen mode Exit fullscreen mode

Once you understand that, manually installing apps on Fedora stops feeling mysterious.

Want to automate this?

After going through the manual process a few times, I turned it into a small Bash script.

The script asks for the downloaded app location, lets you choose where to install it, helps you create a terminal command, and generates a .desktop launcher so the app can appear in your app menu.

It does not try to replace your package manager. It is mainly for apps that come as archives, such as .zip, .tar.gz, .tar.xz, and similar formats.

The basic idea is the same as the manual process in this guide:

  1. Extract the downloaded app.
  2. Move it to a stable location.
  3. Make the executable runnable.
  4. Create a command in `~/.local/bin.
  5. Generate a .desktop launcher.

You can find the script here:

`
https://github.com/YOUR_USERNAME/linux-app-launcher-installer
`

It is still an early version, so you may run into edge cases with apps that use unusual folder layouts, missing icons, AppImages, or desktop launchers that need extra fields like Path= or StartupWMClass.

That said, the script is intentionally simple. You can inspect it, modify it, and adapt it to your own Linux setup.

If you are learning Linux, I recommend doing the manual process at least once before using the script. The script is useful, but the real value is understanding what it automates.

Top comments (0)