Thursday, January 5, 2012

gnome-shell is not so bad

It seems that I will be able to use GNOME 3. I love the minimalism provided by gnome-shell. It's gnome, so it's tricky to fully customize the desktop, but it's possible.

My requirements:
  • no animations (gnome "switch workspace" is pure hell...)
  • tagging -- at least for terminal (fluxbox supports this for arbitrary application, gnome has at least gnome-terminal with tabs)
  • minimalistic windows decoration
  • no window title for maximized windows
  • tiny window title for normal and modal windows
  • no max/min/close buttons for windows (I have keyboard...)
  • pretty visible focused window (e.g. green border)
  • only one tiny panel
  • WM has to remember workspace for applications (e.g. firefox = 2nd workspace)
We all love screenshots, right? ;-) My old good fluxbox here, and the "same" with GNOME 3 is here.

The first step is to install some gnome-shell extensions:
  • Native Window Placement Extension
  • Auto move windows extension
  • Disable Window Animation Extension
  • Remove User Name Extension
  • windowNavigator Extension
The next steps is to make windows decorations more minimalistic. This step is more tricky, because you have to modify window manager theme (for more details see gnome bug 594879). My theme is available at my home page.

The next step is to customize desktop files for some applications, for example I want to start gnome-terminal with --hide-menubar option, so
cp /usr/share/applications/gnome-terminal.desktop \
~/.local/share/applications/myterm.desktop
and modify Exec and Name entries in the file. Then you can add the application to your gnome-shell Favorites.

The last step is to customize keyboard shortcuts, this is simple (see "keyboard" in gnome-control center).

Note than many things like info about CPU temperature does not have to waste any place on your desktop. IMHO it's better to use keyboard shortcuts and print necessary information to the screen on demand. For example I use osd_cat:
#!/bin/bash

BATT=$(acpitool -b | awk -F ':' '/Battery/ { print $2 }' | sed 's/ //')
AC=$(acpitool -a | awk -F ':' '/AC/ { print $2 }' | sed 's/ //g')
TEMPE=$(sensors | awk '/temp/ { print $2 }' | sed 's/ //g')
FAN=$(sensors | awk '/fan/ { print $2 }' | sed 's/ //g')

(printf " Battery: %-20s\n" "$BATT"
printf " AC: %-20s\n" "$AC"
printf "Temperature: %-20s \n" "$TEMPE"
printf " Fan: %-20s\n" "$FAN") | osd_cat --delay 4 --pos bottom \
--align right --offset 45 --indent 10 \
--color green --font "-misc-fixed-*-*-*-*-20-*-*-*-*-*-*-*"