Since bbLean has been my favourite shell for Windows for many years it it no surprise that I like *box-variants on Linux as well.
I prefer them not only because they are lean and fast and highly configurable, but mostly because they support my workflow and hardy ever get in the way. And as virtually everything can be done by keyboard-shortcuts they boost my productivity – if I can remember the shortcut when needed, that is ;).
Currently I am on fluxbox (the bleeding edge git-version), which IMHO has some advantages over openbox, the native handling of (pseudo-)transparency for example.
Finally it is all about useability and resources. I am not a Gnome- or KDE-hater – far from – and yet I prefer if not 20 % of my precious RAM are allocated by the desktop/windowmanager. I need it for working. And I like some eye-candy, where it makes sense.
The basic tools you’ll need are, beside fluxbox of course, fluxconf, fluxmenu, fluxkeys and fluxstyle. I recommend to get mint-fm2 as well, as it will generate a formidable menu from all you installed apps (see screenshot).
If you want you can have a look at my configs, copy them, use them, modify them to your liking.
~/.fluxbox/menu
[begin] (Arch Linux) </usr/share/icons/nuvola/128x128/places/start-here-kde.png>
[exec] (mic) {xdg-open /home/mic} </home/mic/.icons/gk4ico/16x16/actions/gtk-home.png>
[exec] (Web Browser) {xdg-open https://} </usr/share/icons/nuoveXT2/128x128/categories/applications-internet.png>
[exec] (Terminal Emulator) {xterm} </usr/share/icons/hicolor/16x16/status/terminal-bell.png>
[exec] (Run) {gmrun} </usr/share/icons/hicolor/128x128/apps/kgoldrunner.png>
[include] (/home/mic/.fluxbox/customMenuEntries)
[separator] (——–)
[include] (/home/mic/.mint-fm2/submenus/Categories)
[separator] (——–)
[exec] (Quit) {ciao} </home/mic/.icons/gk4ico/16x16/actions/gtk-quit.png>
[end]
~/.fluxbox/startup
#!/bin/sh
# fluxbox startup-script:
# Lines starting with a ‘#’ are ignored.
# Change keymap – german in this case
setxkbmap ‑model evdev ‑layout de nodeadkeys
# numlock anmachen / enable numlock (on,off,toggle)
numlockx on
# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN «&« AT THE END.
#
# unclutter ‑idle 2 &
# wmnd &
# wmsmixer ‑w &
# idesk &
# Hintergrund setzen / set background with nitrogen
(sleep 2s && nitrogen –restore) &
# start conky – system-monitor (I have several configs, usually you won’t need the ‘-c’-switch)
conky ‑c ~/.conkyrc.flux &
# klapp-terminal starten / start dropdown-terminal
tilda &
# And last but not least we start fluxbox.
# Because it is the last app you have to run it with «exec« before it.
exec fluxbox
# or if you want to keep a log:
# exec fluxbox ‑log »/home/mic/.fluxbox/log«
~/.fluxbox/init
session.screen0.window.focus.alpha: 255
session.screen0.window.unfocus.alpha: 255
session.screen0.clientMenu.usePixmap: true
session.screen0.slit.alpha: 255
session.screen0.slit.layer: Dock
session.screen0.slit.direction: Horizontal
session.screen0.slit.acceptKdeDockapps: true
session.screen0.slit.maxOver: false
session.screen0.slit.autoHide: false
session.screen0.slit.placement: RightBottom
session.screen0.slit.onhead: 0
session.screen0.titlebar.left: Stick
session.screen0.titlebar.right: Minimize Maximize Close
session.screen0.menu.alpha: 140
session.screen0.iconbar.iconWidth: 128
session.screen0.iconbar.mode: {static groups} (minimized=yes)
session.screen0.iconbar.usePixmap: true
session.screen0.iconbar.iconTextPadding: 10l
session.screen0.iconbar.alignment: Relative
session.screen0.toolbar.widthPercent: 80
session.screen0.toolbar.tools: prevworkspace, workspacename, nextworkspace, iconbar, systemtray, clock
session.screen0.toolbar.alpha: 140
session.screen0.toolbar.placement: TopCenter
session.screen0.toolbar.visible: true
session.screen0.toolbar.layer: Dock
session.screen0.toolbar.height: 0
session.screen0.toolbar.autoHide: false
session.screen0.toolbar.maxOver: false
session.screen0.toolbar.onhead: 1
session.screen0.tabs.usePixmap: true
session.screen0.tabs.maxOver: false
session.screen0.tabs.intitlebar: true
session.screen0.tab.placement: TopLeft
session.screen0.tab.width: 30
session.screen0.tabFocusModel: ClickToTabFocus
session.screen0.autoRaise: true
session.screen0.showwindowposition: false
session.screen0.antialias: true
session.screen0.workspacewarping: true
session.screen0.noFocusWhileTypingDelay: 0l
session.screen0.strftimeFormat: %k:%M
session.screen0.focusModel: ClickFocus
session.screen0.clickRaises: true
session.screen0.workspaceNames: #1,#2,#3,#4,#5,#6,#7,#8,
session.screen0.allowRemoteActions: false
session.screen0.workspaces: 8
session.screen0.maxIgnoreIncrement: false
session.screen0.menuDelay: 200
session.screen0.rowPlacementDirection: LeftToRight
session.screen0.demandsAttentionTimeout: 500
session.screen0.windowPlacement: RowMinOverlapPlacement
session.screen0.tooltipDelay: 500
session.screen0.maxDisableMove: false
session.screen0.focusNewWindows: true
session.screen0.fullMaximization: false
session.screen0.opaqueMove: false
session.screen0.windowMenu: /home/mic/.fluxbox/windowmenu
session.screen0.defaultDeco: NORMAL
session.screen0.colPlacementDirection: TopToBottom
session.screen0.edgeSnapThreshold: 10
session.screen0.maxDisableResize: false
session.tabPadding: 0
session.slitlistFile: ~/.fluxbox/slitlist
session.styleFile: /home/mic/.fluxbox/styles/ColorFlux_Dust_mic
session.configVersion: 13
session.autoRaiseDelay: 250
session.ignoreBorder: false
session.keyFile: ~/.fluxbox/keys
session.appsFile: ~/.fluxbox/apps
session.doubleClickInterval: 250
session.tabsAttachArea: Window
session.colorsPerChannel: 4
session.cacheLife: 5l
session.menuFile: ~/.fluxbox/menu
session.styleOverlay: ~/.fluxbox/overlay
session.cacheMax: 200l
session.forcePseudoTransparency: true
~/.fluxbox/apps
I added this so you can see how fluxbox handles the automagical positioning of apps/windows. You don’t have to edit it (though you can of course), as all settings are usually done from the toolbar of the app.
[app] (name=fbrun)
[Position] (CENTER) {0 0}
[Layer] {2}
[end]
[app] (name=xawtv) (class=Xawtv)
[Workspace] {0}
[Dimensions] {479 372}
[Position] (UPPERLEFT) {1413 674}
[Sticky] {no}
[Layer] {6}
[end]
[app] (name=Navigator) (class=Firefox) (role=browser)
[Workspace] {0}
[Dimensions] {785 872}
[Position] (UPPERLEFT) {436 128}
[Close] {yes}
[end]
[app] (name=Mail) (class=Thunderbird) (role=3pane)
[Workspace] {1}
[Dimensions] {1546 1092}
[Position] (UPPERLEFT) {100 22}
[Close] {yes}
[end]
[app] (name=gimp‑2.7) (class=Gimp‑2.7) (role=gimp-image-window)
[Workspace] {3}
[Dimensions] {1776 912}
[Position] (UPPERLEFT) {71 19}
[Close] {yes}
[end]
[app] (name=digikam) (class=Digikam) (role=Digikam)
[Workspace] {6}
[Dimensions] {1798 1106}
[Position] (UPPERLEFT) {28 17}
[end]
~/.fluxbox/keys
This one is important, as it holds all the power 🙂
Notice the lines 5⁄6, as they allow you to shade/unshade windows by using the mouse-wheel (like in openbox e.g.).
! fluxbox-update_configs added ‘(workspace=[current])’ to (Next|Prev)(Window|Group)
! check lines marked by ‘FBCV13’ if they are correctly updated
!mouse actions added by fluxbox-update_configs
OnTitlebar Mouse1 :MacroCmd {Focus} {Raise} {ActivateTab}
OnTitlebar Mouse4 :Shade
OnTitlebar Mouse5 :Shade
!mouse actions added by fluxbox-update_configs
OnTitlebar Move1 :StartMoving
OnLeftGrip Move1 :StartResizing bottomleft
OnRightGrip Move1 :StartResizing bottomright
OnWindowBorder Move1 :StartMoving
# click on the desktop to get menus
OnDesktop Mouse1 :HideMenus
OnDesktop Mouse2 :WorkspaceMenu
OnDesktop Mouse3 :RootMenu
# scroll on the desktop to change workspaces
OnDesktop Mouse4 :PrevWorkspace
OnDesktop Mouse5 :NextWorkspace
# scroll on the toolbar to change current window
OnToolbar Mouse4 :PrevWindow {static groups} (workspace=[current]) (iconhidden=no) !! FBCV13 !!
OnToolbar Mouse5 :NextWindow {static groups} (workspace=[current]) (iconhidden=no) !! FBCV13 !!
# alt + left/right click to move/resize a window
OnWindow Mod1 Mouse1 :MacroCmd {Raise} {Focus} {StartMoving}
OnWindowBorder Move1 :StartMoving
OnWindow Mod1 Mouse3 :MacroCmd {Raise} {Focus} {StartResizing NearestCorner}
OnLeftGrip Move1 :StartResizing bottomleft
OnRightGrip Move1 :StartResizing bottomright
# alt + middle click to lower the window
OnWindow Mod1 Mouse2 :Lower
# control-click a window’s titlebar and drag to attach windows
OnTitlebar Control Mouse1 :StartTabbing
# double click on the titlebar to shade
OnTitlebar Double Mouse1 :Shade
# left click on the titlebar to move the window
OnTitlebar Mouse1 :MacroCmd {Raise} {Focus} {ActivateTab}
OnTitlebar Move1 :StartMoving
# middle click on the titlebar to lower
OnTitlebar Mouse2 :Lower
# right click on the titlebar for a menu of options
OnTitlebar Mouse3 :WindowMenu
# alt-tab
Mod1 Tab :NextWindow {groups} (workspace=[current]) (workspace=[current]) !! FBCV13 !!
Mod1 Shift Tab :PrevWindow {groups} (workspace=[current]) (workspace=[current]) !! FBCV13 !!
# cycle through tabs in the current window
Mod4 Tab :NextTab
Mod4 Shift Tab :PrevTab
# go to a specific tab in the current window
Mod4 1 :Tab 1
Mod4 2 :Tab 2
Mod4 3 :Tab 3
Mod4 4 :Tab 4
Mod4 5 :Tab 5
Mod4 6 :Tab 6
Mod4 7 :Tab 7
Mod4 8 :Tab 8
Mod4 9 :Tab 9
# open a terminal
Mod1 F1 :Exec xterm
# open a dialog to run programs
Mod1 F2 :Exec gmrun
# volume settings, using common keycodes
# if these don’t work, use xev to find out your real keycodes
176 :Exec amixer sset Master,0 1+
174 :Exec amixer sset Master,0 1-
160 :Exec amixer sset Master,0 toggle
# current window commands
Mod1 F4 :Close
Mod1 F5 :Kill
Mod1 F9 :Minimize
Mod1 F10 :Maximize
Mod1 F11 :Fullscreen
# open the window menu
Mod1 space :WindowMenu
# exit fluxbox
Control Mod1 Delete :Exit
# change to previous/next workspace
Control Mod1 Left :PrevWorkspace
Control Mod1 Right :NextWorkspace
# send the current window to previous/next workspace
Mod4 Left :SendToPrevWorkspace
Mod4 Right :SendToNextWorkspace
# send the current window and follow it to previous/next workspace
Control Mod4 Left :TakeToPrevWorkspace
Control Mod4 Right :TakeToNextWorkspace
# change to a specific workspace
Control F1 :Workspace 1
Control F2 :Workspace 2
Control F3 :Workspace 3
Control F4 :Workspace 4
Control F5 :Workspace 5
Control F6 :Workspace 6
Control F7 :Workspace 7
Control F8 :Workspace 8
Control F9 :Workspace 9
Control F10 :Workspace 10
Control F11 :Workspace 11
Control F12 :Workspace 12
# send the current window to a specific workspace
Mod4 F1 :SendToWorkspace 1
Mod4 F2 :SendToWorkspace 2
Mod4 F3 :SendToWorkspace 3
Mod4 F4 :SendToWorkspace 4
Mod4 F5 :SendToWorkspace 5
Mod4 F6 :SendToWorkspace 6
Mod4 F7 :SendToWorkspace 7
Mod4 F8 :SendToWorkspace 8
Mod4 F9 :SendToWorkspace 9
Mod4 F10 :SendToWorkspace 10
Mod4 F11 :SendToWorkspace 11
Mod4 F12 :SendToWorkspace 12
# send the current window and change to a specific workspace
Control Mod4 F1 :TakeToWorkspace 1
Control Mod4 F2 :TakeToWorkspace 2
Control Mod4 F3 :TakeToWorkspace 3
Control Mod4 F4 :TakeToWorkspace 4
Control Mod4 F5 :TakeToWorkspace 5
Control Mod4 F6 :TakeToWorkspace 6
Control Mod4 F7 :TakeToWorkspace 7
Control Mod4 F8 :TakeToWorkspace 8
Control Mod4 F9 :TakeToWorkspace 9
Control Mod4 F10 :TakeToWorkspace 10
Control Mod4 F11 :TakeToWorkspace 11
Control Mod4 F12 :TakeToWorkspace 12
Have fun! And if you have questions, feel free to ask. I’m not an expert, but I’ll try to help.