Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roadmap, future plans #1139

Closed
tavoda opened this issue Apr 8, 2021 · 4 comments
Closed

Roadmap, future plans #1139

tavoda opened this issue Apr 8, 2021 · 4 comments

Comments

@tavoda
Copy link

tavoda commented Apr 8, 2021

Hello, just short questions because I can't find answers elsewhere. Maybe some roadmap in wiki will be fine:

  • What is official way to have 'taskbar'? I'm using waybar now, are you going to integrate something to wf-shell or waybar is a way to go?
  • Do you plan to support some scripting for writing 'plugins' (javascript, XML/JSON/YAML menu with external programs, ...)?
  • Some missing features which will be nice to have somewhere in GUI (wf-shell or waybar or ...)
    • keyboard indicator (keyboard switch)
    • network status, network start/stop (for VPN, now using nmcli)
    • CPU/NET/MEMORY monitor with graph like system monitor extenstion in GNOME (https://extensions.gnome.org/extension/120/system-monitor/)
    • Switching audio output
    • Setting screen brightness
    • Screen lock (now using external swaylock)
    • Logout
      Some of them can be solved by shortcut and command plugin but I would like to have them also as menu on GUI somewhere.

Maybe having some clear dependencies on external programs (grim, slurp, amixer, swaylock, wlogout, ...) and default configuration which use it will be better. Just to find how to switch keyboard layout, what is basic stuff you have to spend some hours if you come from GNOME where is nice dialog for it. Also find following line for config just to make gnome-terminal run or why GTK_THEME is not reflected is nightmare which take hours and should be part of standard configuration:
dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY XAUTHORITY GTK_THEME

Sorry for long post, I'm little bit confused about future path of this and surrounding projects. I would like to help with some of this stuff but don't know which path to take.

TNX

/Pavel

@tavoda tavoda changed the title Roadmap, future plan Roadmap, future plans Apr 8, 2021
@ammen99
Copy link
Member

ammen99 commented Apr 8, 2021

Hello, just short questions because I can't find answers elsewhere. Maybe some roadmap in wiki will be fine:

I'll try to answer as much as I can. If you find wiki pages on github lacking information, it would be cool if you update/add to them as you see fit, everyone can edit them :)

  • What is official way to have 'taskbar'? I'm using waybar now, are you going to integrate something to wf-shell or waybar is a way to go?

wf-shell has a window-list widget (sometimes it is unstable, but you can just restart wf-panel), waybar has a module wlr/taskbar which also works.

https://github.com/WayfireWM/wf-shell/blob/master/wf-shell.ini.example#L16
https://github.com/Alexays/Waybar/blob/master/src/modules/wlr/taskbar.cpp

  • Do you plan to support some scripting for writing 'plugins' (javascript, XML/JSON/YAML menu with external programs, ...)?
  • Some missing features which will be nice to have somewhere in GUI (wf-shell or waybar or ...)

wf-shell might eventually support out-of-tree widgets in C++.
Extending wf-shell and waybar is quite easy even now, if you fork them and add your own module.

  • keyboard indicator (keyboard switch)

Work has mostly stalled: swaywm/wlr-protocols#31
Some of the DEs which build upon Wayfire might have this via Dbus, but I don't know for sure.
Check some of the DEs here:
https://github.com/WayfireWM/wayfire/wiki/Related-projects

  • network status, network start/stop (for VPN, now using nmcli)

WayfireWM/wf-shell#3

Definitely out-of-scope.

  • Switching audio output

Out of scope.

  • Setting screen brightness

Use an external tool. https://github.com/WayfireWM/wayfire/wiki/Tutorial#changing-the-screen-brightness

  • Screen lock (now using external swaylock)

Yes, this is how it is meant to be, use an external locker or write a plugin :)

  • Logout

https://github.com/WayfireWM/wayfire/wiki/Tutorial#logout

Some of them can be solved by shortcut and command plugin but I would like to have them also as menu on GUI somewhere.

Maybe having some clear dependencies on external programs (grim, slurp, amixer, swaylock, wlogout, ...) and default configuration which use it will be better.

The default configuration file explains this quite well IMO: https://github.com/WayfireWM/wayfire/blob/master/wayfire.ini

Also, we can't list these as dependencies because I'm pretty sure that people will then interpret it as "it does not work otherwise", you can use any of the utilities which adjust audio, brightness, etc. I know this isn't as easy as "install gnome, everything works ootb", but Wayfire is not meant as a full gnome replacement. It is a base for a DE, which means a lot of configuration/tweaks are left as an exercise for the user.

Just to find how to switch keyboard layout, what is basic stuff you have to spend some hours if you come from GNOME where is nice dialog for it.

https://github.com/WayfireWM/wayfire/wiki/Tutorial#setting-your-keyboard-layout

Also find following line for config just to make gnome-terminal run or why GTK_THEME is not reflected is nightmare which take hours and should be part of standard configuration:
dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY XAUTHORITY GTK_THEME

Yeah, this is annoying to me as well. We should add this to the FAQ section. And we should also add this to the example config file.

Sorry for long post, I'm little bit confused about future path of this and surrounding projects. I would like to help with some of this stuff but don't know which path to take.

No problem, it is ok to ask questions :)

@tavoda
Copy link
Author

tavoda commented Apr 9, 2021

Thanks for links, some more stuff to read/build/enjoy ;-)
I will improve wiki with stuff which I found (e.g. how to switch keyboards with WIN+SPACE keyboard shortcut). Maybe it's obvious for people here, for me not. Before in X days we have to know everything about everything but after GNOME stuff gets integrate and it's working and you don't have to care, you simply forget.
Some more questions:

  • IF! i would like to write something like monitoring 'applet/widget' is there some flexible way that I can integrate it later with waybar, wf-panel or wf-dock without rewriting it 3 times?
  • Same for just drop down button on wf-panel/waybar/wf-dock which will open preconfigured list of menu items which will start predefined external command?

I'm still little bit lost with architecture, what is my API which I can use:

  • wayland?
  • wlroots is only for compositor or can be used by application/widget/plugin?
  • wayfire API - is there some way to hook into it by app/widget/plugin?
    I'm now Java programmer, we write web based applications (React, Java server (Spring/Hibernate...)), I wrote my last X program in C 20 years ago than please consider this when answering ;-).

What will be more difficult integrate wayfire with plugins into mutter (GNOME compositor) or extend wayfire that it can run gnome-shell?

What do you think about integrating wayfire with some dynamic language like javascript which will allow 'extended' configuration and simple plugins?

And because of previous question, do you know this project https://github.com/udevbe/greenfield? Some of these subprojects are useful somehow to achieve this javascript integration?
Will it be possible to somehow integrate with this stuff and allow to run remote application (with SSH) and take only 'window' to desktop (X like killer feature, I know about pipewire but this is inefficient, it works on 'image' layer)?

TNX for you time and patient with me :-)

@ammen99
Copy link
Member

ammen99 commented Apr 9, 2021

  • IF! i would like to write something like monitoring 'applet/widget' is there some flexible way that I can integrate it later with waybar, wf-panel or wf-dock without rewriting it 3 times?

Unfortunately, no. Eventually, I think we might want to merge wf-panel and wf-dock (so they use the same code, just different settings to get the different appearance), but otherwise wf-panel and waybar have completely different APIs for widgets so you do have to rewrite your widget. At least both of them use GTK3 so the GUI part probably won't have to change much.

  • Same for just drop down button on wf-panel/waybar/wf-dock which will open preconfigured list of menu items which will start predefined external command?

Same answer as before. I'd recommend picking up one of the two projects (wf-panel or waybar) which is closer to what you want, and build on it :)

I'm still little bit lost with architecture, what is my API which I can use

Wayfire and wf-panel are separate executables, which use different libraries:

  • Wayfire uses wlroots and provides its own Wayfire API. These are useful for Wayfire plugins, which modify the window management part (for ex. if you want to have tiling, or when you start interactive resizing of windows, or when you alt-tab).

  • The things you listed (widgets) are part of wf-panel. wf-panel does use some wayland APIs directly to communicate with the compositor (Wayfire), because it needs to tell the compositor to treat it as a panel and not a regular window, and some other special functionalities. However, most widgets do not deal with Wayland at all - the GUI parts utilize GTK3. If you were to write a detailed network widget, then you would for ex. use the following stack:

    • GTK3 for the GUI
    • Glib/Dbus for communicating with
    • NetworkManager, a standard network configuration daemon used on many distros

The few wf-panel specific bits would be:

What will be more difficult integrate wayfire with plugins into mutter (GNOME compositor) or extend wayfire that it can run gnome-shell?

Mutter does not support plugins AFAIK. Also, since Wayfire is designed with many different effects in mind, if you were to patch Mutter, you may have to make very big changes to its design, wouldn't recommend.
Gnome-shell requires private APIs which only mutter provides. You'd have to reimplement mutter on top of Wayfire (as a plugin), wouldn't recommend either.

What do you think about integrating wayfire with some dynamic language like javascript which will allow 'extended' configuration and simple plugins?

This is not as simple as it sounds. If you wanted to create a wrapper, you'd have to write a module which translates C++ calls to JS (or any other language) and vice-versa. Anyway, this can be done in a plugin with no changes to Wayfire - the plugin will basically do the translation and call on other JS-only plugins.

And because of previous question, do you know this project https://github.com/udevbe/greenfield? Some of these subprojects are useful somehow to achieve this javascript integration?

No, this is not helpful for us at all. Wayland compositors are inherently incompatible with each other. This is why you can't combine Mutter and Wayfire, or Wayfire and Greenfield.

Note that it is still possible to write wayland client applications which work across all compositors, and some compositors (basically everything which uses wlroots, Mir and Kwin) may let you write cross-compositor panels, bars & similar.

Will it be possible to somehow integrate with this stuff and allow to run remote application (with SSH) and take only 'window' to desktop (X like killer feature, I know about pipewire but this is inefficient, it works on 'image' layer)?

You might be looking for https://gitlab.freedesktop.org/mstoeckl/waypipe. It works on any wayland compositor.

@tavoda
Copy link
Author

tavoda commented Apr 9, 2021

Thanks for explanation. I have to check all this stuff, maybe I will come with some more questions later. Please keep open, I will close it in 3-4 days if no new ideas land my head.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants