.. -*- mode: rst; coding: utf-8 -*- ==================================== Dakkar's ``fvwm-crystal`` settings ==================================== I use a 2800x1050 desktop (two 20" LCD panels on a GeForce 6600), with a `slightly modified version`_ of the `TopLine` recipe. I also use a 5x5 pages virtual desktop, and a Dvorak keyboard with valume keys (mapped to the proper keycodes in X11). My music player is `AmaroK`, and my desktop manager is `ROX`. .. _`slightly modified version`: ../tree/recipes/TopLine Since my monitors can "pivot", I have further modified the recipe to handle rotating the displays. This needs help from the video card. See the section `Rotating the displays`_. The recipe ========== The main differences from the stock `TopLine` are: - different desktop bindings - larger thumbnails - different behaviour of the edges - 2 identical pagers (one per physical screen) - geometries rewritten to use ``@g`` to work with `Xinerama` - each pager (and my "biff" terminal) is raised above all other windows if I keep the mouse pointer on it long enough - some functions added to handle `rotating the displays`_ The decoration ============== I have changed the `Clearlooks DeepSky` decoration_ to add a mini-icon as button 3. .. _decoration: ../tree/decorations/Dakkar/ The colorsets ============= Since I use tha `Gentoo` version of ``fvwm2``, it has a patch that allow fake transparency in the menus. Thus, I changed the `DarkDesktop` and `WhiteDesktop` colorsets_ to use this feature. .. _colorsets: ../tree/colorsets/ The bindings ============ I redefined most keyboard bindings to my taste. Of particular interest may be the Music_ file, where I bind the volume controls to the volume keycodes, and the ``Music-GUI`` function to the "eject" keycode. I also bound most window manipulation functions to various combination of ``Alt`` and the numeric keypad (see the `Window-Control-Dakkar`_ file) .. _Music: ../tree/components/bindings/Music .. _Window-Control-Dakkar: ../tree/components/bindings/Window-Control-Dakkar The preferences =============== To be able to select `AmaroK` as a music player, and `amixer` as a mixer control, I created the `dakkar_Preferences`_ file, which adds them to the appropriate menus. .. _`dakkar_Preferences`: ../tree/components/desktop/dakkar_Preferences The styles and icons ==================== I added some style declaration and icons for some applications (e.g. the windows created by ``xine-ui`` and ``xpad`` should be bare, and I added icons for ``xchat-2`` and ``skype``) The functions ============= I redefined a couple of function in the Numpad_ to add the ``AnyScreen`` option. .. _Numpad: ../tree/components/functions/Numpad Then I wrote the `Mixer-amixer`_ and `Music-amarok`_ files to interact with by chosen music programs. .. _`Mixer-amixer`: ../tree/components/functions/Mixer-amixer .. _`Music-amarok`: ../tree/components/functions/Music-amarok ``amixer`` is a simple command-line mixer, and its integration was easy. `AmaroK` is a `KDE` application, and it's not straightforward to control. At the moment only "random", "repeat", "stop", "play/pause" and "show/hide" are implemented, all via ``dcop`` calls. The ``Music-GUI`` function is used to toggle the display of `AmaroK`, and also to start it: it the ``dcop`` calls fails, the ``amarok`` command gets executed, launching the program. .. note:: `AmaroK` and `Trayer` For some not-really-clear-to-me reason, the tray icon of `AmaroK` is not displayed by `Trayer`, normally. To work around this problem, I have written the small ``amarok`` script, which sits in my ``~/bin`` directory (which is at the beginning of my ``$PATH``). Using this, the icon works as expected. I also tweaked a Perl script I found on the Web to create a menu for my ``screen`` sessions, see the `Screen-Menu`_ configuration file and the `fvwm-screen.pl`_ script. .. _`Screen-Menu`: ../tree/components/functions/Screen-Menu .. _`fvwm-screen.pl`: ../tree/scripts/fvwm-screen.pl Finally, in the `Notify`_ file, I redefined the ``UrgencyFunc`` to pop up a notification via the dbus notification mechanism (using a `simple Perl script`_ which uses `Net::DBus`_). .. _Notify: ../tree/components/functions/Notify .. _`simple Perl script`: ../tree/FvwmNotify.pm .. _`Net::DBus`: http://search.cpan.org/~danberr/Net-DBus-0.33.5/ Rotating the displays ===================== This takes a little background. First of all, my ``/etc/X11/xorg.conf`` file has a ``Screen`` section like this:: Section "Screen" Identifier "dual-nv" Device "nvidia" Monitor "LCD" DefaultDepth 24 Option "TwinView" "true" Option "MetaModes" "DFP-0: 1400x1050 @1400x1050 +0+0, DFP-1: 1400x1050 @1400x1050 +1400+0" Option "RandRRotation" "on" Option "Xinerama" "on" SubSection "Display" ViewPort 0 0 Depth 24 Modes "1400x1050" EndSubSection EndSection This specifies that, normally, I use my displays horizontally, one to the right of the other. Then, in my `~/.xinirc`_, I add a second "MetaMode":: ./bin/nv-control-dpy --add-metamode \ 'DFP-0: 1400x1050 @1400x1050 +0+1050, DFP-1: 1400x1050 @1400x1050 +0+0' The ``nv-control-dpy`` program can be found in the source tarball for the ``nvidia-settings`` program, in the ``samples`` subdirectory. You may be wondering: why adding a second MetaMode in this way, when you can specify both in the ``xorg.conf`` file? Good question. The answer is that, if you do it "the logical way", the always helpful NVidia drivers will tell the X server that you have a virtual screen whose size is the bounding box of the union of all MetaModes. Which in my case would mean that I'd have a lot of panning around, *very* irritating when you use multiple viewports. Adding the MetaMode after the startup of the X server avoids this issue. In the recipe, I have two functions to set landscape (normal) and portrait (vertical) orientation. They call ``xrandr`` to set the display orientation and size, and do some repositioning of the various things that need it: - a script instructs `ROX-Filer` to change its "pinboard" to the one with the proper layout (this is not optimal, but since I very rarely change the contents of my pinboard, works well enough for me) - `gkrellm2` and my "biff" terminal get moved to their proper positions during ``StartFunction`` Maybe there's a samrter way to get the same result, but this works, and it only took an evening to set up. .. _`~/.xinirc`: ../tree/xinitrc