diff --git a/.vnc/xstartup b/.vnc/xstartup
new file mode 100755
index 0000000..d4a2877
--- /dev/null
+++ b/.vnc/xstartup
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+# (C) Copyright Collin Doering @!@YEAR@!@
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# File: .vnc/xstartup
+# Author: Collin J. Doering
+# Date: Jul 12, 2012
+# Description: Acts as a window-manager selector for vnc/freenx sessions
+
+# TODO: - use retval in the case that Xdialog fails to display some message/log
+# - remove use of retval for window close and cancel button as they're disabled
+# - support a nicer way to add wm's to the radiolist
+# - a custom pekwm config so that there are no clicky menus and such
+
+# Set desktop default size
+xrandr --output default --mode 640x480
+
+# Start pekwm and keep its pid
+pekwm &
+PEKWM_PID=$!
+
+# Offer a Xdialog session selector
+Xdialog --title "Session Selection" \
+ --no-cancel \
+ --no-close \
+ --radiolist "Choose a session to run:" 25 112 5 \
+ "XMonad" "a dynamically tiling X11 window manager" off \
+ "OpenBox" "a highly configurable, next generation WM with extensive standards support" off \
+ "PekWM" "a window manager that once up on a time was based on the aewm++ window manager" off \
+ "Awesome" "a highly configurable, next generation framework window manager for X" off \
+ "StumpWM" "a tiling, keyboard driven X11 Window Manager written entirely in Common Lisp" ON 2>/tmp/wmlist.tmp.$$
+
+# Retain the return value of Xdialog and its choices saved in /tmp/wmlist.tmp.pid where pid is the pid of this shell
+retval=$?
+choice=`cat /tmp/wmlist.tmp.$$ | tr '[A-Z]' '[a-z]'`
+
+# Remove the temporary file containing Xdialogs choices
+rm -f /tmp/wmlist.tmp.$$
+
+# Stop pekwm
+kill $PEKWM_PID
+
+# Run a session depending on the return value and choice from Xdialog
+case $retval in
+ 0)
+ exec $HOME/.xinitrc $choice remote
+ ;;
+ # 1)
+ # echo "Cancel pressed."
+ # ;;
+ # 255)
+ # echo "Box closed."
+ # ;;
+esac
diff --git a/.xinitrc b/.xinitrc
old mode 100644
new mode 100755
index b8305f5..61e43e5
--- a/.xinitrc
+++ b/.xinitrc
@@ -6,48 +6,79 @@
# GENERIC #
-# Set the default curson used by xmonad
+# Usage: .xinitrc [window-manager] [session-type]
+# where: window-manager is one of '(xmonad openbox stumpwm awesome pekwm)
+# session-type is either "" or "remote"
+
+# Set the default curson used by all WM's
xsetroot -cursor_name left_ptr
-# Setup monitors
-xrandr --output DVI-I-1 --auto --output DVI-I-2 --auto --left-of DVI-I-1
+# Initialize a local desktop session (run generic helper applications)
+function init_local_session() {
+ # Setup monitors
+ xrandr --output DVI-I-1 --auto --output DVI-I-2 --auto --left-of DVI-I-1
+
+ # Start xscreensaver
+ xscreensaver -no-splash &
+
+ # Set a desktop background
+ nitrogen --restore &
-# Start xscreensaver
-xscreensaver -no-splash &
+ # Have mouse pointer hide after 5 seconds
+ unclutter &
+
+ # Setup system tray *DISABLED* :: whats the point of a systray if no apps use it?
+ #trayer --monitor 1 --edge top --align right --expand true --width 4 --height 2 --transparent true --tint 0x000000 &
+
+ # Use xbindkeys to bind media keys etc..
+ xbindkeys &
+
+ # Start pulseaudio
+ #start-pulseaudio-x11 &
+
+ # Start-up applications
+ #parcellite &
+ emacs --daemon &
+ urxvtd --quiet &
+ xcompmgr &
+
+ # Create variable GENERAL_SCREEN which is the pid of a screen called "general"
+ export GENERAL_SCREEN=`screen -ls | grep general | cut -f1 -d'.' | sed 's/\W//g'`
+
+ # Check to see if a general screen is already running
+ if [ "x$GENERAL_SCREEN" == "x" ]; then
+ screen -dmS general &
+ fi
+
+ # Set the default wm to xmonad
+ DEFAULT_WM=xmonad
+}
-# Set a desktop background
-nitrogen --restore &
+# Initialize a remote desktop session (run generic helper applications)
+function init_remote_session() {
+ # Set desktop background
+ feh --bg-scale ~/.wallback/Cocaine_Wallpaper_II_by_mdornfeld.png &
+
+ # Set the default wm to xmonad
+ DEFAULT_WM=stumpwm
+}
-# Have mouse pointer hide after 5 seconds
-unclutter &
+# Check the second cl parameter which denotes the session-type (E.g. remote, local)
+case $2 in
+ # Remote session
+ remote)
+ init_remote_session
+ break
+ ;;
+ # Local session or unspecified
+ *)
+ init_local_session
+ ;;
+esac
-# Setup system tray *DISABLED* :: whats the point of a systray if no apps use it?
-#trayer --monitor 1 --edge top --align right --expand true --width 4 --height 2 --transparent true --tint 0x000000 &
-
-# Use xbindkeys to bind media keys etc..
-xbindkeys &
-
-# Start pulseaudio
-#start-pulseaudio-x11 &
-
-# Start-up applications
-parcellite &
-emacs --daemon &
-urxvtd --quiet &
-xcompmgr &
-
-# Create variable GENERAL_SCREEN which is the pid of a screen called "general"
-export GENERAL_SCREEN=`screen -ls | grep general | cut -f1 -d'.' | sed 's/\W//g'`
-
-# Check to see if a general screen is already running
-if [ "x$GENERAL_SCREEN" == "x" ]; then
- screen -dmS general &
-fi
-
-# Set the default session to xmonad
-DEFAULT_SESSION=xmonad
-
-# Check the given parameter from slim to determine the session being requested by slim/the user
+# Check the first cl parameter which denotes the window-manager to use
+# Notice: in each case expression below "exec app" hands over execution to some app thus
+# ceasing execution in this script so no "break" is required
case $1 in
xmonad)
exec xmonad
@@ -58,7 +89,13 @@ case $1 in
stumpwm)
exec stumpwm
;;
+ awesome)
+ exec awesome
+ ;;
+ pekwm)
+ exec pekwm
+ ;;
*)
- exec $DEFAULT_SESSION
+ exec $DEFAULT_WM
;;
esac
diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs
index 1a59477..792536e 100644
--- a/.xmonad/xmonad.hs
+++ b/.xmonad/xmonad.hs
@@ -227,7 +227,7 @@ myGenericKeys =
, ((modm .|. controlMask, xK_e), spawn "emacsclient -c")
-- Launch tuxcmd
- , ((modm .|. controlMask, xK_t), spawn "tucmd")
+ --, ((modm .|. controlMask, xK_t), spawn "tuxcmd")
-- Launch zathura
, ((modm .|. controlMask, xK_z), spawn "zathura")
@@ -245,11 +245,14 @@ myGenericKeys =
, ((modm .|. controlMask, xK_1), namedScratchpadAction scratchpads "screen-terminal")
-- Launch a maintainance scratchpad
- , ((modm .|. controlMask, xK_2), namedScratchpadAction scratchpads "maintainance-terminal")
+ , ((modm .|. controlMask, xK_2), namedScratchpadAction scratchpads "maintenance-terminal")
-- Launch MC scratchpad
, ((modm .|. controlMask, xK_3), namedScratchpadAction scratchpads "mc-scratch")
+ -- Launch MC scratchpad
+ , ((modm .|. controlMask, xK_4), namedScratchpadAction scratchpads "pavucontrol-scratch")
+
-- Select window from dmenu and go to the workspace its on
, ((modm .|. shiftMask, xK_g), gotoMenuArgs ["-i","-nb", "#040404","-nf","#00FFFF","-sf","#ffa0ff","-sb","#000000"])
@@ -343,7 +346,18 @@ myLayout = smartBorders . avoidStruts $
-- Percent of screen to increment by when resizing panes
delta = 3/100
-
+
+------------------------------------------------------------------------
+-- Thanks to OODavo from #haskell on freenode; used for applications
+-- that do not doFullFloat well (they request a window size smaller
+-- then the widgets they contain)
+maxFloat = flip W.float $ rectWithBorder 0.05
+ where rectWithBorder x = let lt = x
+ wh = 1 - 2*x
+ in W.RationalRect lt lt wh wh
+
+doMaxFloat = ask >>= doF . maxFloat
+
------------------------------------------------------------------------
-- Window rules:
@@ -365,35 +379,39 @@ myManageHook = composeAll
-- , title =? "DOOM 3" --> doIgnore
, resource =? "Qt-subapplication" <&&> title /=? "Oracle VM VirtualBox Manager" --> doFloat
, resource =? "vncviewer" --> doCenterFloat
+ , resource =? "opennx" --> doMaxFloat
, resource =? "Steam.exe" --> doCenterFloat
- , title =? "Xnest" --> doCenterFloat
+ , title =? "Xnest" --> doCenterFloat
-- , resource =? "hl2.exe" --> doCenterFloat
, isFullscreen --> (doF W.focusDown <+> doFullFloat)
, resource =? "desktop_window" --> doIgnore ] <+> namedScratchpadManageHook scratchpads <+> manageDocks
-- NamedScratchPad Hook
scratchpads = [ NS "emacs-scratch" spawnEmacsScratch findEmacsScratch manageEmacsScratch
- , NS "maintainance-terminal" spawnMaintainanceTerminal findMaintainanceTerminal manageMaintainanceTerminal
+ , NS "maintenance-terminal" spawnMaintenanceTerminal findMaintenanceTerminal manageMaintenanceTerminal
, NS "screen-terminal" spawnScreenTerminal findScreenTerminal manageScreenTerminal
- , NS "mc-scratch" spawnMcScratch findMcScratch manageMcScratch]
+ , NS "mc-scratch" spawnMcScratch findMcScratch manageMcScratch
+ , NS "pavucontrol-scratch" spawnPavucontrolScratch findPavucontrolScratch managePavucontrolScratch]
where
findEmacsScratch = resource =? "emacs-scratch"
- findMaintainanceTerminal = resource =? "scratchpad"
+ findMaintenanceTerminal = resource =? "scratchpad"
findScreenTerminal = resource =? "screen-scratch"
findMcScratch = resource =? "mc-scratch"
-
+ findPavucontrolScratch = resource =? "pavucontrol"
+
spawnEmacsScratch = myTerminal ++ " -name emacs-scratch -pe -tabbedex -e emacsclient -nw"
- spawnMaintainanceTerminal = myTerminal ++ " -name scratchpad"
+ spawnMaintenanceTerminal = myTerminal ++ " -name scratchpad"
spawnScreenTerminal = myTerminal ++ " -name screen-scratch -bg black"
spawnMcScratch = myTerminal ++ " -name mc-scratch -pe -tabbedex -e mc"
-
+ spawnPavucontrolScratch = "pavucontrol"
+
manageEmacsScratch = customFloating $ W.RationalRect l t w h
where
h = 0.65 -- terminal height (%)
w = 0.55 -- terminal width (%)
t = 1 - h -- distance from top edge (%)
l = 1 - w -- distance from left edge (%)
- manageMaintainanceTerminal = customFloating $ W.RationalRect l t w h
+ manageMaintenanceTerminal = customFloating $ W.RationalRect l t w h
where
h = 0.33 -- terminal height (%)
w = 1 -- terminal width (%)
@@ -411,6 +429,12 @@ scratchpads = [ NS "emacs-scratch" spawnEmacsScratch findEmacsScratch manageEmac
w = 0.55 -- terminal width (%)
t = 1 - h -- distance from top edge (%)
l = 1 - w -- distance from left edge (%)
+ managePavucontrolScratch = customFloating $ W.RationalRect l t w h
+ where
+ h = 0.80 -- terminal height (%)
+ w = 0.55 -- terminal width (%)
+ t = 1 - h -- distance from top edge (%)
+ l = 1 - w -- distance from left edge (%)
------------------------------------------------------------------------
-- Event handling