Added dynamic config generation for i3.

The script genconfig.bash concatenates the main configuration file with
a host specific one to create a session-specific configration file that
is then passed to i3. It therefore has to be called in .xinitrc or
something comparable before starting i3. If no host specific
configuration is found, a default file will be used instead. This is
useful for providing default that should not go into the main
configuration file, maybe because they are incompatible with some host
specific settings. For example a default bar{} block goes there, as if
this was in the main config, two i3bar instances would be started when a
host specific config specifies its own.
This commit is contained in:
2013-09-18 19:27:36 +02:00
parent 31ed7c9620
commit 5caefa1b2b
8 changed files with 91 additions and 49 deletions

1
i3/i3/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
session.config

View File

@@ -214,38 +214,6 @@ for_window [class="^Xfce4-notifyd$"] floating enable
for_window [class="^Conky$" ] floating enable
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar
{
# always show at the bottom of the screen
mode dock
position bottom
# show a tray area
tray_output primary
# show workspace buttons
workspace_buttons yes
id bar-1
font pango:DejaVu Sans Mono 8
colors {
background #000000
statusline #ffffff
separator #666666
focused_workspace #4c7899 #285577 #ffffff
active_workspace #333333 #5f676a #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
}
i3bar_command i3bar
status_command i3status --config $path_i3status_config
}
@@ -274,10 +242,3 @@ mode "$mode_system" {
}
bindsym $mod+Pause mode "$mode_system"
bindsym $mod+Shift+Pause exec --no-startup-id $path_i3exit lock
bindsym XF86Sleep exec --no-startup-id $path_i3exit suspend
bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master %5+
bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master %5-

View File

@@ -0,0 +1,3 @@
bar {
status_command i3status
}

View File

@@ -0,0 +1,38 @@
# bind some keys
bindsym XF86Sleep exec --no-startup-id $path_i3exit suspend
bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master %5+
bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master %5-
# start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
# always show at the bottom of the screen
mode dock
position bottom
# show a tray area
tray_output primary
# show workspace buttons
workspace_buttons yes
id bar-1
font pango:DejaVu Sans Mono 8
colors {
background #000000
statusline #ffffff
separator #666666
focused_workspace #4c7899 #285577 #ffffff
active_workspace #333333 #5f676a #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
}
i3bar_command i3bar
status_command i3status --config $path_i3status_config
}

View File

@@ -54,7 +54,7 @@ run_watch VPN {
}
tztime local {
format = "%Y-%m-%d %H:%M:%S"
format = "%a %Y-%m-%d %H:%M:%S"
}
load {

View File

@@ -0,0 +1,31 @@
#!/bin/bash
# main configuration file that is always used
MAIN_CONF="$HOME/.i3/config"
# temporary configuration file used for this session
SESSION_CONF="$HOME/.i3/session.config"
# directory that contains host specific configuration
CONF_DIR="$HOME/.i3/config.d"
# file that should be used when no host specific configuration present
DEFAULT_CONF="$CONF_DIR/default.config"
host_specific_conf="$CONF_DIR/$(hostname).config"
# if it's a symlink to $MAIN_CONF, cat will fail
[[ -f "$SESSION_CONF" ]] && rm "$SESSION_CONF"
if [[ ! -f "$host_specific_conf" ]] && [[ ! -f "$DEFAULT_CONF" ]]; then
# if there is no host-specific configuration and no default one, just use
# the main config
ln -sf "$MAIN_CONF" "$SESSION_CONF"
else
# either use the host specific config if present, or the default if not
if [[ -f "$host_specific_conf" ]]; then
conf_to_use="$host_specific_conf"
else
conf_to_use="$DEFAULT_CONF"
fi
cat "$MAIN_CONF" "$conf_to_use" > "$SESSION_CONF"
fi
echo "$SESSION_CONF"

View File

@@ -126,7 +126,7 @@ set foldmethod=indent " fold according to indet
set foldnestmax=2 " fold a maximum of 2 levels
set nofoldenable " unfold everything by default
set scrolloff=5 " show context at the screen edges
set scrolloff=4 " show context at the screen edges
set showcmd " show (partial) command in the command line

View File

@@ -10,19 +10,27 @@ fi
[ -f /etc/xprofile ] && source /etc/xprofile
[ -f ~/.xprofile ] && source ~/.xprofile
# keyboard options
keyboard_layout=de
keyboard_options= nodeadkeys
keyboard_repeat_delay=150
keyboard_repeat_speed=30
# execute the host-specific .xinitrc-addition
hostfile="$HOME/.xinitrc.d/$(hostname).xinitrc"
[[ -f "$hostfile" ]] && bash "$hostfile" &
# set keyboard layout
setxkbmap $keyboard_layout $keyboard_options
# set key repeat delay
xset r rate $keyboard_repeat_delay $keyboard_repeat_speed
case $1 in
e17)
exec enlightenment_start
;;
i3)
exec i3
;;
xfce4) ;;
*)
exec i3
SESSION_CONF=$(bash "$HOME/.i3/scripts/genconfig.bash")
exec i3 -c "$SESSION_CONF"
;;
esac