I used to use xmonad as my gnome window manager. Since gnome3, I switched to gnome-shell. In this article I'll try to describe how I configured gnome-shell to fit my needs.
I updated this for 3.14, and I'm pleased to realize that most of the behaviours I whish can now be configured graphically.
I don't really need advanced tiling, as I'm anyway using a small laptop screen.
Disable dynamic workspaces, so I have my 10 task oriented workspaces. This is now configurable in Tweaks. In Workspaces set Workspace Creation to Static.
In Control Center → Keyboard → Shortcuts set Switch Windows to Super+Tab.
I bind evenything to Win+:
Win | activities mode |
Win+1...0 | go to desktop N |
Win+Maj+1-0 | put window on desktop N |
Win+Tab | per-desktop alt-tab |
Win+[above tab] | last used desktop |
Win+F2 | command prompt |
Adds a Hibernate button in Status menu. Using Alt modifier, you can also select Hybrid Sleep instead.
A nice panel system monitor similar to legacy panel's one. Now easy to install.
system-monitor@paradoxxx.zero.gmail.com
Custom extension to switch to the last active desktop.
It is actually quite simple. Here is extension.js
:
const Main = imports.ui.main;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
/* Switch to the last used other desktop */
function _doSwitchDesktop(display, screen, window, binding) {
let activeWorkspace = screen.get_active_workspace();
let appSys = Shell.AppSystem.get_default();
let apps = appSys.get_running();
let lastWindow = null;
let lastWindowTime = 0;
for (let i = 0; i < apps.length; i++) {
let windows = apps[i].get_windows();
for(let j = 0; j < windows.length; j++) {
let win = windows[j];
if (win.get_workspace() != activeWorkspace) {
if (win.get_user_time() > lastWindowTime) {
lastWindow = win;
lastWindowTime = lastWindow.get_user_time();
}
}
}
}
if (lastWindow) {
Main.activateWindow(lastWindow);
}
}
function init() {
}
function enable() {
Meta.keybindings_set_custom_handler('switch-group', _doSwitchDesktop);
Meta.keybindings_set_custom_handler('switch-group-backward', _doSwitchDesktop);
}
function disable() {
Meta.keybindings_set_custom_handler('switch-group', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Meta.keybindings_set_custom_handler('switch-group-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
}
Use pidgin insetad of empathy (which lacks OTR).
pidgin-conversation-integration@kagesenshi.org
I modified Adwaita metacity theme to remove window titlebar on fullscreen window, and smaller those of normal windows.
diff -Naur /usr/share/themes/Adwaita/metacity-1/metacity-theme-3.xml /usr/share/themes/Adwaita-local/metacity-1/metacity-theme-3.xml
--- /usr/share/themes/Adwaita/metacity-1/metacity-theme-3.xml
+++ /usr/share/themes/Adwaita-local/metacity-1/metacity-theme-3.xml
@@ -36,7 +36,7 @@
<distance name="bottom_height" value="1" />
<distance name="left_titlebar_edge" value="0"/>
<distance name="right_titlebar_edge" value="0"/>
- <distance name="title_vertical_pad" value="9"/>
+ <distance name="title_vertical_pad" value="1"/>
<border name="title_border" left="10" right="10" top="0" bottom="2"/>
<border name="button_border" left="0" right="0" top="0" bottom="2"/>
<aspect_ratio name="button" value="1"/>
@@ -47,17 +47,17 @@
<distance name="right_titlebar_edge" value="1"/>
</frame_geometry>
-<frame_geometry name="max" title_scale="medium" parent="normal" rounded_top_left="false" rounded_top_right="false">
+<frame_geometry name="max" has_title="false" title_scale="medium" parent="normal" rounded_top_left="false" rounded_top_right="false">
<distance name="left_width" value="0" />
<distance name="right_width" value="0" />
<distance name="left_titlebar_edge" value="0"/>
<distance name="right_titlebar_edge" value="0"/>
- <distance name="title_vertical_pad" value="8"/> <!--
+ <distance name="title_vertical_pad" value="0"/> <!--
This needs to be 1 less then the
title_vertical_pad on normal state
or you'll have bigger buttons -->
- <border name="title_border" left="10" right="10" top="1" bottom="2"/>
- <border name="button_border" left="0" right="0" top="0" bottom="2"/>
+ <border name="title_border" left="0" right="0" top="0" bottom="0"/>
+ <border name="button_border" left="0" right="0" top="0" bottom="0"/>
<distance name="bottom_height" value="0" />
</frame_geometry>
@@ -70,7 +70,7 @@
</frame_geometry>
<frame_geometry name="small" title_scale="small" parent="normal" rounded_top_left="false" rounded_top_right="false">
- <distance name="title_vertical_pad" value="7"/>
+ <distance name="title_vertical_pad" value="1"/>
<border name="title_border" left="10" right="10" top="0" bottom="1"/>
<border name="button_border" left="0" right="0" top="0" bottom="2"/>
</frame_geometry>
@@ -102,7 +102,7 @@
</frame_geometry>
<frame_geometry name="modal" title_scale="small" hide_buttons="true" rounded_top_left="false" rounded_top_right="false" parent="small">
- <distance name="title_vertical_pad" value="5"/>
+ <distance name="title_vertical_pad" value="1"/>
</frame_geometry>
<frame_geometry name="attached" title_scale="small" hide_buttons="true" rounded_top_left="false" rounded_top_right="false" parent="small">
That'a must-be for me. I use devilspie2:
Description-en: LUA-based window matching utility
Devilspie2 is a window matching utility, allowing the user to perform
scripted actions on windows as they are created. For example you can
script a terminal program to always be positioned at a specific screen
position, or position a window on a specific workspace.
.
It is a continuation of Ross Burtons project Devilspie, with the most
significant change that the symbolic expressions of that project are
replaced with a LUA interpreter.
Homepage: http://www.gusnan.se/devilspie2
There is a Native Window Placement gnome-shell extension, but I don't like its conf.