GNOME Shell Frippery
====================

The shell in GNOME 3 can be modified by writing extensions in JavaScript.
Here are some extensions I've written to provide a user experience more
akin to that of GNOME 2.

Move the clock

  Move the clock from the centre of the panel towards the right.  This
  isn't a very significant change, but it was the first extension I wrote.

Favourites in panel

  Place a launcher for each favourite application in the panel.  It isn't
  possible to manage the list from the panel: instead you can add, remove
  or move favourite applications in the dash and the panel display will
  update to match.  This extension also works in classic mode.

  Right clicking on the icons in the panel invokes a menu similar to the
  corresponding menu in the dash.

  The preferences dialog allows additional (non-favourite) applications
  to be displayed as a separate set of launchers.  The launchers must be
  specified by adding the names of the corresponding desktop files to
  a list.  The two sets of launchers can be configured independently.
  The default behaviour is to display only the favourites to the left
  of the panel.

Applications menu in panel

  Replace the Activities button in the panel with an Applications menu.
  The menu is implemented using facilities supplied by the shell so it
  doesn't behave exactly like a normal menu.  You might need to use GNOME
  Tweak Tool to change the icon theme to get your distribution's logo in
  the button.

  Right clicking on the Applications menu invokes a dialog to let you
  turn off the icon, text and hot corner.  If you turn off both the icon
  and the text the menu is disabled.

  This extension doesn't work in classic mode.

Bottom panel

  Add a bottom panel, including a window list and workspace switcher.

  Items in the window list have a right-click menu which allows each window
  to be minimised, maximised, moved to a different workspace or closed.
  They can be rearranged by dragging them.

  Workspaces are arranged in a horizontal row, so the keybindings to change
  workspace have been altered to ctrl-alt-left/right.  Workspaces can also
  be arranged in multiple rows.  In this case ctrl-alt-up/down switch between
  rows and a row indicator appears to the left of the workspace switcher.
  Clicking on the row indicator changes row.  The mouse scroll wheel can be
  used in the row indicator or workspace switcher to change workspace.

  The bottom panel can be configured by right clicking on the workspace
  switcher.  Settings available are:

    the number of workspaces and the number of rows;
    enable/disable dynamic workspaces;
    whether or not the panel appears on each workspace.

  This extension doesn't work in classic mode.

The latest version of the extensions can be found here:

  https://frippery.org/extensions/index.html

They are distributed under the terms of the GNU General Public License,
version 2 or later.  See the COPYING file for details.

The Frippery extensions are intended to be used together to provide a
GNOME 2-like experience.  However, if you'd like to control which are
enabled the best option is GNOME Tweaks (gnome-tweaks in the Fedora
repositories).  From GNOME 40 extension management moved to a separate
application: gnome-extensions-app.  Alternatively you can use the
brute-force method and just delete any you don't want.  After
installation you'll need to restart the shell to make the extensions
take effect: enter 'r' in the Alt+F2 dialog or log out and in again.
Once the extensions are known to the Shell you can use GNOME Tweaks or
Extensions to enable and disable individual extensions without needing
to restart.

The extensions hook into the very core of the GNOME shell.  It's almost
inevitable that future changes to the shell will break them (though I'll
make every effort to unbreak them).

During development and testing I have only the Frippery extensions
installed.  There will be conflicts between extensions and it's impossible
to test all combinations.  I do try to resolve conflicts that are brought
to my attention but all I can guarantee is that the Frippery extensions
are compatible with one another.

Ron Yorston <rmy@pobox.com>
