Cuando cargas init.sh tomas todos los aliases, exports y funciones comunes a todas las plataformas. Entre los aliases veo que utilizas comandos propios de macos que no servirían para linux.
for aliasToSource in "$DOTFILES_PATH/shell/_aliases/"*; do source "$aliasToSource"; done
for exportToSource in "$DOTFILES_PATH/shell/_exports/"*; do source "$exportToSource"; done
for functionToSource in "$DOTFILES_PATH/shell/_functions/"*; do source "$functionToSource"; done
Claro que puedes tener branches por cada máquina pero eso genera varios inconvenientes. Creo que el desafío es tener alta portabilidad y moverse indistintamente entre plataformas u ordenadores sin inconvenientes.
Siguiendo con el principio DRY, te propongo una estructura de directorios jerarquizada, en el cual defines los aliases, funciones y exports comunes para todas las plataformas en all_platforms, y luego realizas las configuraciones particulares por plataforma o por máquina.
init.sh
all_platforms
linux
all.linux.aliases.sh
Machine1
machine1.aliases.sh
macos
Machine1
Machine2
windows
por ejemplo podrías tener una función browse en mac (dentro de /macos/functions/helpers.sh)
browse () {
open -a "$DOTFILES_DEFAULT_BROWSER" $1
}
mientras que en linux (dentro de /linux/functions/helpers.sh)
browse () {
sensible-browser $1
}
El orden de carga sería
all_platforms/
<tu_distribución>/
<tu_distribución>//*
Por ejemplo con
platform_name=$(get_platform)
machine_name=$(hostname)
load_hierarchy=(
"all_platforms"
"$platform_name"
"$platform_name/$machine_name"
)
load_file_order=(
".sh_exports" ".sh_functions" ".sh_aliases" "key_binds.sh" "prompt.sh"
)
# load all platform and shell functions, aliases, exports and key bindings.
# as an hierarchy. First: /shell/all_platforms, then /shell/<your_platform>,
# then /shell/<your_platform>/<your_machine>
for hierarchy in $load_hierarchy; do
for load_file in $load_file_order; do
source_path "$DOTFILES_PATH/shell/$hierarchy/$load_file"
done
done
A su vez, podrías verificar si el recurso al que le harás source es un directorio o un fichero
# Source the file or directory specified in the path parameter.
#
# param $1 (path) the path to source. Cannot be null.
function source_path {
if [[ -d "$1" ]]; then
for script in $1/*; do source "$script"; done
elif [[ -f "$1" ]]; then
source $1
fi
}
Tengo este cambio implementado en mi local. Si deseas abro un PR. Si no estás de acuerdo, simplemente cierra el issue que no me ofenderé. Tus comentarios son más que bienvenidos
Hola Rafa!
Veo una oportunidad de mejora muy buena:
Cuando cargas init.sh tomas todos los aliases, exports y funciones comunes a todas las plataformas. Entre los aliases veo que utilizas comandos propios de macos que no servirían para linux.
Claro que puedes tener branches por cada máquina pero eso genera varios inconvenientes. Creo que el desafío es tener alta portabilidad y moverse indistintamente entre plataformas u ordenadores sin inconvenientes.
Siguiendo con el principio DRY, te propongo una estructura de directorios jerarquizada, en el cual defines los aliases, funciones y exports comunes para todas las plataformas en all_platforms, y luego realizas las configuraciones particulares por plataforma o por máquina.
por ejemplo podrías tener una función browse en mac (dentro de /macos/functions/helpers.sh)
mientras que en linux (dentro de /linux/functions/helpers.sh)
El orden de carga sería all_platforms/ <tu_distribución>/ <tu_distribución>//*
Por ejemplo con
A su vez, podrías verificar si el recurso al que le harás source es un directorio o un fichero
Tengo este cambio implementado en mi local. Si deseas abro un PR. Si no estás de acuerdo, simplemente cierra el issue que no me ofenderé. Tus comentarios son más que bienvenidos
Saludos! Sebastián