Added -d and -D flags to generate a default I38 setup. -D also creates the .xinitrc and .xprofiles. This is basically a silent mode with no prompts and uses the items it finds with other sane defaults, e.g. alt+escape for RP mode and control+escape for personal mode.
This commit is contained in:
1 parent
d3fb549fd1
commit
19e1d458a3
4 files changed
+204
-16
No files matched your search
@@ -16,6 +16,8 @@ i3msg="i3-msg"
|
||||
configFile="${PWD}/I38_preferences.conf"
|
||||
i38VersionFile="${i3Path}/i38-version"
|
||||
i38CheckoutPath="${PWD}"
|
||||
defaultConfig=0
|
||||
defaultGenerateX=0
|
||||
|
||||
# Dialog accessibility
|
||||
export DIALOGOPTS='--no-lines --visit-items'
|
||||
@@ -184,10 +186,82 @@ rangebox() {
|
||||
yesno() {
|
||||
# Returns: Yes 0 or No 1
|
||||
# Args: Question to user.
|
||||
if [[ $defaultConfig -eq 1 ]]; then
|
||||
return 0
|
||||
fi
|
||||
dialog --clear --title "I38" --yesno "$*" -1 -1 --stdout
|
||||
return $?
|
||||
}
|
||||
|
||||
first_available_program() {
|
||||
local program
|
||||
|
||||
for program in "$@"; do
|
||||
if command -v "${program#-}" &> /dev/null; then
|
||||
printf '%s\n' "${program#-}"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
first_available_path() {
|
||||
local program
|
||||
|
||||
if program="$(first_available_program "$@")"; then
|
||||
command -v "$program"
|
||||
fi
|
||||
}
|
||||
|
||||
set_default_configuration() {
|
||||
escapeKey="Mod1+Escape"
|
||||
mod="Mod1"
|
||||
kbd=()
|
||||
volumeJump=5
|
||||
i3FontSize=12
|
||||
screenReader="$(first_available_path cthulhu orca || true)"
|
||||
screenReader="${screenReader:-none}"
|
||||
emailClient="$(first_available_path betterbird evolution thunderbird || true)"
|
||||
webBrowser="$(first_available_path brave chromium epiphany firefox google-chrome-stable google-chrome-unstable microsoft-edge-stable microsoft-edge-beta microsoft-edge-dev midori seamonkey vivaldi || true)"
|
||||
textEditor="$(first_available_path emacs geany gedit kate kwrite l3afpad leafpad libreoffice mousepad pluma || true)"
|
||||
fileBrowser="$(first_available_path caja nemo nautilus pcmanfm pcmanfm-qt thunar || true)"
|
||||
ircClient="$(first_available_path albikirc Albikirc access-irc || true)"
|
||||
terminalEmulator="$(first_available_path mate-terminal lxterminal gnome-terminal terminator xfce4-terminal tilix ptyxis kgx sakura roxterm termit guake tilda qterminal konsole || true)"
|
||||
if [[ -z "$terminalEmulator" ]] && command -v xterm &> /dev/null && command -v fenrir &> /dev/null; then
|
||||
terminalEmulator="$(command -v xterm)"
|
||||
fi
|
||||
udiskie=1
|
||||
if command -v udiskie &> /dev/null; then
|
||||
udiskie=0
|
||||
fi
|
||||
dex=1
|
||||
if command -v dex &> /dev/null; then
|
||||
dex=0
|
||||
fi
|
||||
batteryAlert=1
|
||||
if command -v acpi &> /dev/null; then
|
||||
batteryAlert=0
|
||||
fi
|
||||
brlapi=1
|
||||
if [[ "$screenReader" != "none" ]] && [[ -n "$screenReader" ]]; then
|
||||
brlapi=0
|
||||
fi
|
||||
sounds=0
|
||||
screenlockMethod="none"
|
||||
screenlockPinHash=""
|
||||
screenlockAutolockSeconds=0
|
||||
screenlockOnStartup=1
|
||||
if i38lock_is_supported; then
|
||||
screenlockMethod="i38lock"
|
||||
screenlockAutolockSeconds=300
|
||||
screenlockOnStartup=0
|
||||
fi
|
||||
personalModeEnabled=0
|
||||
personalModeKey="Control+Escape"
|
||||
waytrayUseI38Config=0
|
||||
}
|
||||
|
||||
# Personal mode helpers
|
||||
normalize_ratpoison_key() {
|
||||
local key="$1"
|
||||
@@ -414,7 +488,7 @@ load_config() {
|
||||
source "$configFile"
|
||||
|
||||
# Convert kbd string back to array if present
|
||||
if [[ -n "$kbd" ]]; then
|
||||
if [[ -n "${kbd[*]:-}" ]]; then
|
||||
IFS=' ' read -ra kbd <<< "$kbd"
|
||||
fi
|
||||
|
||||
@@ -424,6 +498,10 @@ load_config() {
|
||||
}
|
||||
|
||||
save_config() {
|
||||
if [[ $defaultConfig -eq 1 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if yesno "Save this configuration for future runs?"; then
|
||||
cat > "$configFile" << EOF
|
||||
# I38 Configuration Preferences
|
||||
@@ -576,7 +654,6 @@ if new_content:
|
||||
new_content += block
|
||||
xprofile_path.write_text(new_content, encoding="utf-8")
|
||||
PY
|
||||
exit 0
|
||||
}
|
||||
|
||||
apply_screenlock_pin() {
|
||||
@@ -722,6 +799,8 @@ write_i38_version() {
|
||||
# Array of command line arguments
|
||||
declare -A command=(
|
||||
[h]="This help screen."
|
||||
[d]="Generate the default I38 configuration without prompting."
|
||||
[D]="Generate the default I38 configuration plus ~/.xinitrc and ~/.xprofile without prompting."
|
||||
[u]="Copy over the latest version of scripts."
|
||||
[x]="Generate ~/.xinitrc and ~/.xprofile."
|
||||
[X]="Generate ~/.xprofile only."
|
||||
@@ -733,16 +812,27 @@ args="${args//[[:space:]]/}"
|
||||
while getopts "${args}" i ; do
|
||||
case "$i" in
|
||||
h) help;;
|
||||
d) defaultConfig=1;;
|
||||
D) defaultConfig=1; defaultGenerateX=1;;
|
||||
u) update_scripts;;
|
||||
x) write_xinitrc ;&
|
||||
X) write_xprofile ;;
|
||||
x) write_xinitrc; write_xprofile; exit 0;;
|
||||
X) write_xprofile; exit 0;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $defaultConfig -eq 1 ]]; then
|
||||
set_default_configuration
|
||||
fi
|
||||
|
||||
if [[ $defaultGenerateX -eq 1 ]]; then
|
||||
write_xinitrc
|
||||
write_xprofile
|
||||
fi
|
||||
|
||||
# Load saved configuration if available
|
||||
configLoaded=0
|
||||
configChanged=0
|
||||
if load_config; then
|
||||
if [[ $defaultConfig -eq 0 ]] && load_config; then
|
||||
configLoaded=1
|
||||
dialog --title "I38" --msgbox "Loaded saved preferences from $configFile\n\nMissing or invalid values will be prompted." 0 0
|
||||
fi
|
||||
@@ -772,7 +862,7 @@ if [[ -z "$escapeKey" ]] || [[ -z "$mod" ]]; then
|
||||
done
|
||||
fi
|
||||
# Multiple keyboard layouts
|
||||
if [[ ${#kbd[@]} -eq 0 ]]; then
|
||||
if [[ $defaultConfig -eq 0 && ${#kbd[@]} -eq 0 ]]; then
|
||||
if yesno "Do you want to use multiple keyboard layouts?"; then
|
||||
unset kbd
|
||||
while : ; do
|
||||
@@ -792,7 +882,7 @@ if [[ -z "$i3FontSize" ]] || [[ ! "$i3FontSize" =~ ^[0-9]+$ ]]; then
|
||||
fi
|
||||
fi
|
||||
# Screen Reader
|
||||
if [[ -z "$screenReader" ]] || { [[ "$screenReader" != "none" ]] && ! command -v "$screenReader" &> /dev/null; }; then
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$screenReader" ]] || { [[ "$screenReader" != "none" ]] && ! command -v "$screenReader" &> /dev/null; }; }; then
|
||||
programList=()
|
||||
for i in cthulhu orca ; do
|
||||
if command -v "${i/#-/}" &> /dev/null ; then
|
||||
@@ -816,7 +906,7 @@ else
|
||||
export screenReader
|
||||
fi
|
||||
# Email client
|
||||
if [[ -z "$emailClient" ]] || ! command -v "$emailClient" &> /dev/null; then
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$emailClient" ]] || ! command -v "$emailClient" &> /dev/null; }; then
|
||||
programList=()
|
||||
for i in betterbird evolution thunderbird ; do
|
||||
if command -v "${i/#-/}" &> /dev/null ; then
|
||||
@@ -835,7 +925,7 @@ else
|
||||
export emailClient
|
||||
fi
|
||||
# Web browser
|
||||
if [[ -z "$webBrowser" ]] || ! command -v "$webBrowser" &> /dev/null; then
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$webBrowser" ]] || ! command -v "$webBrowser" &> /dev/null; }; then
|
||||
programList=()
|
||||
for i in brave chromium epiphany firefox google-chrome-stable google-chrome-unstable microsoft-edge-stable microsoft-edge-beta microsoft-edge-dev midori seamonkey vivaldi ; do
|
||||
if command -v "${i/#-/}" &> /dev/null ; then
|
||||
@@ -854,7 +944,7 @@ else
|
||||
export webBrowser
|
||||
fi
|
||||
# Text editor
|
||||
if [[ -z "$textEditor" ]] || ! command -v "$textEditor" &> /dev/null; then
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$textEditor" ]] || ! command -v "$textEditor" &> /dev/null; }; then
|
||||
programList=()
|
||||
for i in emacs geany gedit kate kwrite l3afpad leafpad libreoffice mousepad pluma ; do
|
||||
if command -v "${i/#-/}" &> /dev/null ; then
|
||||
@@ -873,7 +963,7 @@ else
|
||||
export textEditor
|
||||
fi
|
||||
# File browser
|
||||
if [[ -z "$fileBrowser" ]] || ! command -v "$fileBrowser" &> /dev/null; then
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$fileBrowser" ]] || ! command -v "$fileBrowser" &> /dev/null; }; then
|
||||
programList=()
|
||||
for i in caja nemo nautilus pcmanfm pcmanfm-qt thunar ; do
|
||||
if command -v "${i/#-/}" &> /dev/null ; then
|
||||
@@ -892,7 +982,7 @@ else
|
||||
export fileBrowser
|
||||
fi
|
||||
# IRC client
|
||||
if [[ -z "$ircClient" ]] || ! command -v "$ircClient" &> /dev/null; then
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$ircClient" ]] || ! command -v "$ircClient" &> /dev/null; }; then
|
||||
programList=()
|
||||
for i in albikirc Albikirc access-irc ; do
|
||||
if command -v "${i/#-/}" &> /dev/null ; then
|
||||
@@ -911,7 +1001,11 @@ else
|
||||
export ircClient
|
||||
fi
|
||||
# Terminal emulator
|
||||
if [[ -z "$terminalEmulator" ]] || { [[ ! -x "$terminalEmulator" ]] && ! command -v "$terminalEmulator" &> /dev/null; }; then
|
||||
if [[ $defaultConfig -eq 1 && -z "$terminalEmulator" ]]; then
|
||||
echo "No supported terminal emulator was found. Please install mate-terminal, lxterminal, gnome-terminal, terminator, another supported accessible terminal, or install both xterm and fenrir."
|
||||
exit 1
|
||||
fi
|
||||
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$terminalEmulator" ]] || { [[ ! -x "$terminalEmulator" ]] && ! command -v "$terminalEmulator" &> /dev/null; }; }; then
|
||||
configChanged=1
|
||||
programList=()
|
||||
for i in mate-terminal lxterminal gnome-terminal terminator xfce4-terminal tilix ptyxis kgx sakura roxterm termit guake tilda qterminal konsole ; do
|
||||
@@ -986,7 +1080,7 @@ if [[ -z "$sounds" ]]; then
|
||||
sounds=1
|
||||
fi
|
||||
fi
|
||||
if [[ -z "$screenlockPinHash" ]]; then
|
||||
if [[ $defaultConfig -eq 0 && -z "$screenlockPinHash" ]]; then
|
||||
screenlockPinFile="${i3Path}/.screenpin"
|
||||
if [[ -f "$screenlockPinFile" ]]; then
|
||||
read -r screenlockPinHash < "$screenlockPinFile"
|
||||
@@ -997,7 +1091,7 @@ if [[ -z "${screenlockMethod+x}" ]]; then
|
||||
screenlockNeedsSelection=1
|
||||
fi
|
||||
if [[ -z "$screenlockMethod" || "$screenlockMethod" == "none" ]]; then
|
||||
if [[ -n "$screenlockPinHash" ]]; then
|
||||
if [[ $defaultConfig -eq 0 && -n "$screenlockPinHash" ]]; then
|
||||
screenlockMethod="pin"
|
||||
else
|
||||
screenlockMethod="none"
|
||||
@@ -1115,7 +1209,11 @@ write_i38_version
|
||||
write_desktop_shortcuts_template
|
||||
write_i38_xresources
|
||||
# Move scripts into place
|
||||
copy_scripts | dialog --backtitle "I38" --progressbox "Moving scripts into place and writing config..." -1 -1
|
||||
if [[ $defaultConfig -eq 1 ]]; then
|
||||
copy_scripts > /dev/null
|
||||
else
|
||||
copy_scripts | dialog --backtitle "I38" --progressbox "Moving scripts into place and writing config..." -1 -1
|
||||
fi
|
||||
apply_screenlock_pin
|
||||
update_personal_customizations
|
||||
|
||||
@@ -1537,6 +1635,11 @@ fi
|
||||
if command -v waytray-daemon &> /dev/null ; then
|
||||
echo 'exec_always --no-startup-id bash -c "pgrep -x waytray-daemon > /dev/null || waytray-daemon"'
|
||||
fi
|
||||
case "${fileBrowser##*/}" in
|
||||
thunar|pcmanfm|pcmanfm-qt)
|
||||
echo "exec_always --no-startup-id ${i3Path}/scripts/filemanager.sh ${fileBrowser}"
|
||||
;;
|
||||
esac
|
||||
echo "exec_always --no-startup-id ${i3Path}/scripts/i38-clipboard.py --daemon"
|
||||
echo "exec_always --no-startup-id ${i3Path}/scripts/desktop.sh"
|
||||
echo "exec_always --no-startup-id ${i3Path}/scripts/i38-update-check.sh"
|
||||
@@ -1800,3 +1903,6 @@ PY
|
||||
|
||||
# Create the firstrun file
|
||||
touch "${i3Path}/firstrun"
|
||||
if [[ $defaultConfig -eq 1 ]]; then
|
||||
echo "Default I38 configuration generated."
|
||||
fi
|
||||
Reference in new issue
Block a user