Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions Makefile

This file was deleted.

35 changes: 0 additions & 35 deletions PKGBUILD

This file was deleted.

109 changes: 38 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,88 +1,55 @@
# Fildem
# Fildem Rewrite

## Global menu for Gnome
Fildem is now a full rewrite focused on GNOME 48+.

[![Buy Me A Coffee](https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg)](https://buymeacoffee.com/gonza)
## Architecture

![Fildem](https://user-images.githubusercontent.com/19943481/95288612-1d272a80-083f-11eb-9400-be88f61e054d.png)
1. `src/core` - C/GObject shared core (`libfildem-core`)
2. `src/daemon` - `fildemd` session daemon (`org.fildem`)
3. `src/extension/fildem-shell@fildem.org` - GNOME Shell extension (ESM)
4. `src/hud` - `fildemhud` GTK4 HUD
5. `interfaces` - versioned D-Bus contracts (`org.fildem.v1.*`)

This project is a fork of gnomehud with the adition of a global menu bar. It’s consist of a Gnome Shell extension and a external program, you must install both for the application to work.
## Build

You can also bring a HUD menu with Alt + Space (on Xorg).

This is a prototype, as I don’t know if people will like or how much it will last until devs nuke it, so fell free to let me know your opinion.

## Installation

### Extension

To install the extension, download it from the [Gnome extensions website](https://extensions.gnome.org/extension/4114/fildem-global-menu/).

### Ubuntu

Download the .deb file from the releases section and run `sudo apt install ./fildem_*.deb`

### Arch

Download the .zst file from the releases section and run `sudo pacman -U ./python3-fildem*.zst`

## Configuration

In order for the application to work, you must configure the following files (aplies to all operating systems):

- Create the file `~/.gtkrc-2.0` and append `gtk-modules="appmenu-gtk-module"`
- The file `~/.config/gtk-3.0/settings.ini` should have the line `gtk-modules="appmenu-gtk-module"` under [Settings]. If it doesn’t exist create it and paste the following

```
[Settings]
gtk-modules="appmenu-gtk-module"
```bash
meson setup build
meson compile -C build
meson test -C build --print-errorlogs
```

## Running

After installation you’ll have two executables, `fildem` and `fildem-hud`. To check if it works use the first one. `fildem-hud` is for using he HUD, if you are on Xorg, you already have it bound to Alt + Space. If you are on Wayland, you can bind some keybinding to that command.

## Customization

### Menu always visible

By default, the menu is visible when you hover the mouse on the panel. If you want the menu to be always visible, unselect “Show menu only when the mouse is over the panel” in the preferences of the extension.

### AppMenu Button always visible

The AppMenu button shows the application name or window title (if you have some extension) in the panel. By default, the fildem extension hides that label when the menu is being shown. If you want it to be always visible, you can unselect “Hide App Menu label” in the preferences of the extension.

### Reduce space between buttons

If the menu shown on the panel is shifted with relation to the one that appears, like this:

![Screenshot from 2021-06-17 11-09-00](https://user-images.githubusercontent.com/864630/122452193-da852880-cf5d-11eb-8ca8-27e481ab682c.png)

you can tweak the "Button padding" in the preferences window of the extension (accessible from the tweak tool).

### Remove space in between buttons

In some gnome themes, the buttons have a small spacing between them. This can make the buttons easy to miss and unfocusing our window if it’s not maximized. To fix this, add this somewhere on your `gnome-shell.css` theme:
## Install (local staging)

```
#panel #panelLeft {
spacing: 0px; }
#panel #panelLeft .panel-button {
spacing: 0px; }
```bash
meson install -C build --destdir /tmp/fildem-install
```

## Running the program at startup
## Runtime (manual)

If you manage to make the program work and want to have it running automatically at startup you can add an entry to `gnome-session-properties` with the name of the program and the path to execute it.
```bash
./build/src/daemon/fildemd
./build/src/hud/fildemhud
./build/src/ctl/fildemctl status
```

## Create a shortcut for the HUD on Wayland
Useful commands:

Since it’s not possible to creat a shortcut from the app on Wayland, you have to create it yourself. Go to Settings → Keyboard Shorcuts and create a shortcut that executes `inithud.sh`.
```bash
./build/src/ctl/fildemctl top-level <window_uid>
./build/src/ctl/fildemctl menu-tree <window_uid>
./build/src/ctl/fildemctl actions <window_uid>
./build/src/ctl/fildemctl hud-request <window_uid>
./build/src/ctl/fildemctl hud-query <window_uid> <term>
./build/src/ctl/fildemctl hud-exec <window_uid> <entry_id>
```

## State of the Apps
## API documentation

To see a list of apps that work check [the wiki](https://github.com/gonzaarcr/Fildem/wiki/Using#state-of-the-apps)
- `docs/DBUS_API_V1.md`
- `docs/REWRITE_PLAN_IT.md`
- `docs/IMPLEMENTATION_PLAN_REAL.md`

## Installation troubleshooting
## Legacy

If you have any question on to get it to work, please don’t create an issue, use [this discussion](https://github.com/gonzaarcr/Fildem/discussions/33).
Legacy fork code was intentionally removed from the active tree.
The legacy baseline is preserved in git tag `legacy/fork-last-2026-03-24`.
6 changes: 6 additions & 0 deletions data/org.fildem.hud.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[Desktop Entry]
Type=Application
Name=Fildem HUD
Exec=fildemhud
Terminal=false
Categories=Utility;
11 changes: 0 additions & 11 deletions debian/DEBIAN/control

This file was deleted.

10 changes: 0 additions & 10 deletions debian/DEBIAN/postinst

This file was deleted.

10 changes: 0 additions & 10 deletions debian/DEBIAN/prerm

This file was deleted.

86 changes: 86 additions & 0 deletions docs/DBUS_API_V1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Fildem D-Bus API v1 (`org.fildem`)

Object path root: `/org/fildem/v1`
Bus name: `org.fildem`

## `org.fildem.v1.Window`

1. `UpdateActiveWindow(a{sv} context)`
2. `GetActiveWindow() -> a{sv} context`
3. Signal `ActiveWindowChanged(a{sv} context)`

Required context keys:

1. `window_uid` (`s`)
2. `app_id` (`s`)

Optional context keys used by provider adapters:

1. `title` (`s`)
2. `workspace` (`i`)
3. `monitor` (`i`)
4. `backend` (`s`) values: `wayland` or `x11`
5. `xid` (`s` or integer-compatible variant)
6. `gtk_unique_bus_name` (`s`)
7. `gtk_window_object_path` (`s`)
8. `gtk_application_object_path` (`s`)
9. `gtk_menubar_object_path` (`s`)
10. `gtk_app_menu_object_path` (`s`)

## `org.fildem.v1.TopLevel`

1. `SetTopLevel(s window_uid, aa{sv} items)`
2. `GetTopLevel(s window_uid) -> aa{sv} items`
3. Signal `TopLevelChanged(s window_uid, aa{sv} items)`

Required item keys:

1. `id` (`s`)
2. `label` (`s`)

## `org.fildem.v1.MenuTree`

1. `SetMenuTree(s window_uid, aa{sv} nodes)`
2. `GetMenuTree(s window_uid) -> aa{sv} nodes`
3. `InvalidateMenuTree(s window_uid)`
4. Signal `MenuTreeChanged(s window_uid)`

Required node keys:

1. `id` (`s`)
2. `label` (`s`)

## `org.fildem.v1.Activation`

1. `ActivateTopLevel(s window_uid, s top_level_id)`
2. `ActivateMenuItem(s window_uid, s item_id)`
3. Signal `ActivationRequested(s window_uid, s target_id)`

Notes:

1. `target_id` can be a menu node id or `action:<window-action-id>`.
2. Window actions are executed shell-side by the extension when it receives `ActivationRequested`.

## `org.fildem.v1.WindowActions`

1. `SetWindowActions(s window_uid, as actions)`
2. `ListWindowActions(s window_uid) -> as actions`
3. `ActivateWindowAction(s window_uid, s action_id)`
4. Signal `WindowActionsChanged(s window_uid, as actions)`

Notes:

1. `actions` are stable action labels/ids exposed by the extension (shell-native actions).
2. `ActivateWindowAction` emits `ActivationRequested(window_uid, "action:<id>")` on `org.fildem.v1.Activation`.

## `org.fildem.v1.Hud`

1. `RequestHud(s window_uid)`
2. `Query(s window_uid, s term) -> aa{sv} results`
3. `Execute(s window_uid, s entry_id)`
4. Signal `HudRequested(s window_uid)`

Notes:

1. `Query` results include both menu entries and window actions.
2. For window actions, result ids are prefixed as `action:<id>`.
Loading
Loading