Release new version 0.21
[grml-quickconfig.git] / quickconfig / 030-wm.sh
1 # window manager module for grml-quickconfig
2 LINE='print_line "Start ^x (/grml-x/)"'
3 KEY=(x)
4 FUNCTION='wm_menu'
5
6 display_entry() {
7     . /etc/grml/script-functions
8     check4progs grml-x >/dev/null 2>&1
9     return $?
10 }
11
12 if [ "$(cat /proc/1/comm 2>/dev/null)" = "systemd" ] ; then
13   SYSTEMD=true
14 else
15   SYSTEMD=false
16 fi
17
18 # variable definition {{{
19 typeset -A wms
20 typeset -A available
21 set -A output
22 # }}}
23
24 # window manager definition {{{
25 wms=(
26   a awesome
27   d dwm
28   e evilwm
29   f fluxbox
30   v fvwm
31   2 fvwm2
32   c fvwm-crystal
33   3 i3
34   j jwm
35   o openbox
36   k pekwm
37   r ratpoison
38   t twm
39   9 w9wm
40   w windowlab
41   i wmii
42   n wm-ng
43   )
44 # }}}
45
46 # deteremine installed window managers {{{
47 print_available_wm() {
48   . /etc/grml/script-functions
49   LEN=0
50   AVAILABLE_WM_COUNT=0
51   local line
52
53   for key value in ${(kv)wms} ; do
54     if check4progs $value >/dev/null 2>&1 ; then
55       available[$key]=$value
56       # test if word could be added to current line
57       if [ $((${(c)#value} + $LEN)) -ge $(($MAXLEN-9)) ] ; then
58         LEN=0
59         output+="$line"
60         line=""
61       fi
62       line+="$(highlight_char $value $key) "
63       LEN=$((${(c)#value} + $LEN))
64       AVAILABLE_WM_COUNT=$(($AVAILABLE_WM_COUNT + 1))
65     fi
66   done
67   output+="$line"
68 }
69 # }}}
70
71 # heading for wm menu {{{
72 wm_heading() {
73  print_starting_line
74  print_line "Select a window manager (unsorted list):"
75  print_line "Press any other key to return to the main menu."
76  print_delim
77 }
78 # }}}
79
80 # print windowm manager loop {{{
81 wm_menu() {
82   if [ $AVAILABLE_WM_COUNT == 1 ]; then
83     if $SYSTEMD ; then
84       chvt 7
85       return
86     else
87       chgrp tty "$TTY"
88       chmod g+rw "$TTY"
89       run sudo -u grml grml-x
90       return
91     fi
92   fi
93   echo
94   wm_heading
95   for line in ${output} ; do
96     print_line $line
97   done
98   print_closing_line
99
100   echo
101   get_key INPUT
102   case $INPUT in
103     [${(k)available}])
104     if $SYSTEMD ; then
105       mkdir -p /var/run/grml-x/
106       echo "${available[$INPUT]}" > /var/run/grml-x/window-manager
107       chvt 7
108     else
109       chgrp tty "$TTY"
110       chmod g+rw "$TTY"
111       run sudo -u grml -c "grml-x ${available[$INPUT]}"
112     fi
113     ;;
114   esac
115 }
116 # }}}
117
118 print_available_wm
119
120 ## END OF FILE #################################################################
121 # vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=2