aboutsummaryrefslogtreecommitdiff
path: root/internal/configure.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'internal/configure.zsh')
-rw-r--r--internal/configure.zsh84
1 files changed, 84 insertions, 0 deletions
diff --git a/internal/configure.zsh b/internal/configure.zsh
new file mode 100644
index 00000000..0e13bdec
--- /dev/null
+++ b/internal/configure.zsh
@@ -0,0 +1,84 @@
+# Fewer than 47 columns will probably work. Haven't tried it.
+typeset -gr __p9k_wizard_columns=47
+# The bottleneck is ask_tails with nerd fonts. Everything else works fine with 12 lines.
+typeset -gr __p9k_wizard_lines=14
+typeset -gr __p9k_zd=${ZDOTDIR:-$HOME}
+typeset -gr __p9k_zd_u=${${${(q)__p9k_zd}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%}
+typeset -gr __p9k_zshrc=${${:-$__p9k_zd/.zshrc}:A}
+typeset -gr __p9k_zshrc_u=$__p9k_zd_u/.zshrc
+typeset -gr __p9k_root_dir_u=${${${(q)__p9k_root_dir}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%}
+
+function _p9k_can_configure() {
+ [[ $1 == '-q' ]] && local -i q=1 || local -i q=0
+ function $0_error() {
+ (( q )) || print -rP "%1F[ERROR]%f %Bp10k configure%b: $1" >&2
+ }
+ typeset -g __p9k_cfg_path_o=${POWERLEVEL9K_CONFIG_FILE:=${ZDOTDIR:-~}/.p10k.zsh}
+ typeset -g __p9k_cfg_basename=${__p9k_cfg_path_o:t}
+ typeset -g __p9k_cfg_path=${__p9k_cfg_path_o:A}
+ typeset -g __p9k_cfg_path_u=${${${(q)__p9k_cfg_path_o}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%}
+ {
+ [[ -e $__p9k_zd ]] || { $0_error "$__p9k_zd_u does not exist"; return 1 }
+ [[ -d $__p9k_zd ]] || { $0_error "$__p9k_zd_u is not a directory"; return 1 }
+ [[ ! -d $__p9k_cfg_path ]] || { $0_error "$__p9k_cfg_path_u is a directory"; return 1 }
+ [[ ! -d $__p9k_zshrc ]] || { $0_error "$__p9k_zshrc_u is a directory"; return 1 }
+
+ local dir=${__p9k_cfg_path:h}
+ while [[ ! -e $dir && $dir != ${dir:h} ]]; do dir=${dir:h}; done
+ if [[ ! -d $dir ]]; then
+ $0_error "cannot create $__p9k_cfg_path_u because ${dir//\%/%%} is not a directory"
+ return 1
+ fi
+ if [[ ! -w $dir ]]; then
+ $0_error "cannot create $__p9k_cfg_path_u because ${dir//\%/%%} is readonly"
+ return 1
+ fi
+
+ [[ ! -e $__p9k_cfg_path || -f $__p9k_cfg_path || -h $__p9k_cfg_path ]] || {
+ $0_error "$__p9k_cfg_path_u is a special file"
+ return 1
+ }
+ [[ ! -e $__p9k_zshrc || -f $__p9k_zshrc || -h $__p9k_zshrc ]] || {
+ $0_error "$__p9k_zshrc_u a special file"
+ return 1
+ }
+ [[ ! -e $__p9k_zshrc || -r $__p9k_zshrc ]] || {
+ $0_error "$__p9k_zshrc_u is not readable"
+ return 1
+ }
+ local style
+ for style in lean lean-8colors classic rainbow pure; do
+ [[ -r $__p9k_root_dir/config/p10k-$style.zsh ]] || {
+ $0_error "$__p9k_root_dir_u/config/p10k-$style.zsh is not readable"
+ return 1
+ }
+ done
+
+ (( LINES >= __p9k_wizard_lines && COLUMNS >= __p9k_wizard_columns )) || {
+ $0_error "terminal size too small; must be at least $__p9k_wizard_columns columns by $__p9k_wizard_lines lines"
+ return 1
+ }
+ [[ -t 0 && -t 1 ]] || {
+ $0_error "no TTY"
+ return 2
+ }
+ return 0
+ } always {
+ unfunction $0_error
+ }
+}
+
+function p9k_configure() {
+ eval "$__p9k_intro"
+ _p9k_can_configure || return
+ (
+ set -- -f
+ builtin source $__p9k_root_dir/internal/wizard.zsh
+ )
+ local ret=$?
+ case $ret in
+ 0) builtin source $__p9k_cfg_path; _p9k__force_must_init=1;;
+ 69) return 0;;
+ *) return $ret;;
+ esac
+}