Post

Setup-Arch

Algo que me gusta bastante de linux es su nivel de personalización y desde que aprendí a como hacerlo, prácticamente cada dos o tres meses cambio de setup. Por ende, he llegado a hacer mis propios scripts para agilizar el trabajo. Así que el día de hoy, quiero hacerles un pequeño “tutorial” de como funciona mi más reciente script de personalización. Para eso, vamos a tomar una distro de arch, en este caso, Garuda.

NOTA: Se supone que para hacer esto ya debes tener instalado la distro de tu preferencia, en máquina virtual o nativo. En mi caso estaré usando una máquina virtual, pero los pasos se pueden migrar a nativo.

Sobre Garuda.

Arte de: Alessandro Tommasini

Garuda es una de las distros de Arch que personalmente recomiendo para principiantes. Es bastante completo y viene en distintas versiones. Además de que a diferencia de otras versiones como Arcoarch o similares, aquí no he visto problemas en las actualizaciones o conflictos de paques, lo que lo hace relativamente estable. En mi main setup tengo Manjaro, pero el scirpt debe funcionar en cualquier distro base arch.

Primeros pasos

Como ya han de suponer, lo primero que hay que hacer eso simplemente clonar mi repositorio. Para eso, primero que que tener ya el comando git y también zsh ya que algunas distros de Archo no los tiene. Dependiendo de la distro de Garuda que tengas, puede o no venir incluido. En mi caso, no tenía el ya que el Garuda que decidí instalar fue el Garuda lite que prácticamente viene desnudo, ergo, debo instalar los paquetes necesarios.

Una vez con el git instalado, ahora si, clonamos el repositorio. Nos quedará una carpeta llamada archseutp. Ahí le damos permisos de ejecución.

1
chmod +x autoArch.sh

Instalación

Con eso, simplemente debemos seguir las instrucciones ¡y listo! Notarás que te dará una variedad de opciones, esto lo hice porque dependiendo de que setup quiera, podré elegir que window manager me vendrá mejor. Personalmente uso BSPWM, pero últimamente he estado aprendiendo Lua, así que decidí agregar el Awesome. De igual forma, este script, al ser mi script personal, te instala algunas herramientas de hacking ético, o al menos las más básicas junto con ponerte la fuente de black arch.

Ahora, ¿qué tal le damos un vistazo al código de mi script? Quizá solo quieras una parte de éste o tienes curiosidad de ver cómo trabaja internamente. Aún está en proceso, pero es lo suficientemente completo como para dejarte un entorno funcional.

El script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Actualización del sistema
echo -e "${redColour}\n\n[!]Updating system, please wait... This will taka a while so why not go for a snack or pet your pets?"
sudo pacman -Syu --noconfirm > /dev/null 2>&1


# Instalación de yay
if ! command -v yay > /dev/null 2>&1; then
    echo -e "${greenColour}Installing yay${endColour}"
    sudo pacman -S --noconfirm yay > /dev/null 2>&1
fi

back=$(pwd)


echo -e "${greenColour}What do you want to install first?${endColour}"
echo -e "\n\t1) Aesthetics"
echo -e "\n\t2) Tools"
read replay

Esta es la primera parte de código omitiendo algunas funciones básicas como el de ctrl+C y mi paleta de colores. Al inicio debemos actualizar el sistema, en mi caso usando yay, así que lo primero que hay que hacer es verificar si yay está instalado, para eso usamos:

1
2
3
4
5
# Instalación de yay
if ! command -v yay > /dev/null 2>&1; then
    echo -e "${greenColour}Installing yay${endColour}"
    sudo pacman -S --noconfirm yay > /dev/null 2>&1
fi

Esta condición básicamente está verificando si yay está en el sistema. Si no está, entonces se instala el yay, pero si ya está instalado, entonces no entra en la condición y se salta al siguiente paso.

1
2
3
4
5
6
7
back=$(pwd)


echo -e "${greenColour}What do you want to install first?${endColour}"
echo -e "\n\t1) Aesthetics"
echo -e "\n\t2) Tools"
read replay

Tenemos una variable llamada back, la cual guarda la ruta del path en la que estamos actualmente (en donde se está corriendo el script), por ende es importante que el script no se mueva de su ubicación actual, de lo contrario no podrá encontrar los recursos.

Una vez establecimos la ruta base, puse la primera elección que es cual de los das cosas quieres instalar primero, si lo aesthethic o si las herramientas de hacking (tools). Usualmente siempre elijo el entorno primero y luego las herramientas de hacking. Sin importar la opción, ambas se terminarán instalando a menos que salgas del script en algún momento. En este punto se lee una entrada del usuario y se guarda en la variable replay.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case $replay in
    1)
        aesthetics
        toolsHack
        ;;
    2)
        toolsHack
        aesthetics
        ;;
    *)
        echo -e "${redColour}\nNon an option, sorry! Exiting!${endColour}"
        exit 1
        ;;
esac 

Después nos saltamos hasta el final del script que por jerarquía es dónde se ponen los cases. Aquí tenemos el primer case que es solo la orden de ejecución del script. Si elijes el número 1, primero corre las función de aesthetics y después toolsHack. Si eliges dos, entonces es primero toolsHack y luego aesthetics. De ingresar una opción inválida, entonces se saldrá del script.

Funciones principales

Aesthetics

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
function aesthetics (){

cat << "EOF"                             
╔═╗┌─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐┬┌─┐┌─┐
╠═╣├┤ └─┐ │ ├─┤├┤  │ ││  └─┐
╩ ╩└─┘└─┘ ┴ ┴ ┴└─┘ ┴ ┴└─┘└─┘
EOF


cd polybar 
cd chmod +x launch.sh
cd ..
cd bin 
chmod +x aphrodite.sh ethernet_status.sh htb_status.sh htb_target.sh
cd ..

# Selección de Window Manager
echo -e "${purpleColour}\n\n[!]Choose your window manager!${endColour}\n\n\t${greenColour}1) Awesome${endColour}\n\t${blueColour}2) Bspwm${endColour}"
read replay

# Casos para la selección del Window Manager
case $replay in
    1)
        awesomneInstaller
        ;;
    2)
        bspwmInstaller
        ;;
    *)
        echo -e "${redColour}\nNon an option, sorry! Exiting!${endColour}"
        exit 1
        ;;
esac

npah=$(pwd)
if [ "$npah" != "$back" ]; then
    cd "$back"
fi

# Instalación de eww
echo -e "${greenColour}\n\n[!]Installing eww${endColour}"
sleep 3 

yay -S --noconfirm rust cargo
git clone https://github.com/elkowar/eww > /dev/null 2>&1
cd eww

echo -e "${purpleColour}\n\nAre you using Wayland? (y/n)${endColour}"
read replay

case $replay in
    y)
        waylandEww
        ;;
    n)
        normalEww
        ;;
    *)
        echo -e "${redColour}\nNon an option, sorry! Exiting!${endColour}"
        exit 1
        ;;
esac

npah=$(pwd)
if [ "$npah" != "$back" ]; then
    cd "$back"
fi

# Instalación de Kitty
if [ -z "$(command -v kitty)" ]; then
    echo -e "${greenColour}Installing a kitten!${endColour}"
    sleep 3
    yay -S --noconfirm kitty >/dev/null 2>&1
fi


#Installing picom

echo -e "${purpleColour}\n\nInstalling picom!${endColour}"

yay -S --noconfirm picom >/dev/null 2>&1
git clone https://github.com/Arian8j2/picom-jonaburg-fix.git
cd picom-jonaburg-fix
meson --buildtype=release . build >/dev/null 2>&1
ninja -C --noconfirm build >/dev/null 2>&1
LDFLAGS="-L/path/to/libraries" CPPFLAGS="-I/path/to/headers" meson --buildtype=release . build >/dev/null 2>&1
# To install the binaries in /usr/local/bin (optional)
sudo ninja -C --noconfirm build install >/dev/null 2>&1
mkdir -p $HOME/.config/picom
cd $back
cp picom.conf ~/.config/picom

if [ "$npah" != "$back" ]; then
    cd "$back"
fi


# Instalación de herramientas adicionales
packs=("feh" "polybar" "fastfetch" "ghostwriter" "flameshot" "rofi" "ranger")

LOG_FILE="errorAesthetics.data"

for pack in "${packs[@]}"; do

    echo -e "Installing $pack..."
    
    yay -S --noconfirm "$pack" >/dev/null 2>&1
    
    if [ -z "$(command -v $pack)" ]; then
    
        echo -e "${greenColour}[!] Something went wrong, $pack is not installed. Try again manually ${endColour}" >> errorAesthetics.data
    fi
    
    echo -e "${greenColour}$pack is installed${endColour}"
    
done

# Instalación de Powerlevel10k
sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
sudo echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
chsh -s $(which zsh)
cp .p10k.zsh ~/

# Root Powerlevel10k
sudo sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /root
chsh -s $(which zsh)

#Fonts installing 

fonts=("ttf-space-mono-nerd" "ttf-monofur-nerd" "ttf-anonymouspro-nerd" "ttf-nerd-fonts-symbols-mono")

for font in "${fonts[@]}"; do
    yay -S --noconfirm $font >/dev/null 2>&1
    echo "Instalando $font"
done

cd polybar 
chmod +x launch.sh

npah=$(pwd)
if [ "$npah" != "$back" ]; then
    cd "$back"
fi

cp -r backgrounds ${HOME}
mkdir -p $HOME/.config/fastfetch
cp -r polybar bin kitty fastfetch ~/.config 
cp -r backgrounds ~/
cd backgrounds 
cp picture.png ~/.config/fastfetch
cd $back

}

Esta es una de las dos funciones principales. La primera que escribí en este caso fue la de aesthetics o simplemente mi entorno en general. Aquí pasan muchas cosas, pero vamos de paso a paso para que no sea tan intimidante.

1
2
3
4
5
6
cd polybar 
cd chmod +x launch.sh
cd ..
cd bin 
chmod +x aphrodite.sh ethernet_status.sh htb_status.sh htb_target.sh
cd ..

En primer lugar, tenemos algunas cosas algo aburridillas, pero necesarias. En esta sección simplemente se usan comandos comunes, cd y chmod +x para movernos entre directorios y dar permisos de ejecución a los scripts que serán llamados en la polybar. En este caso: aphrodite.sh ethernet_status.sh htb_status.sh htb_target.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Selección de Window Manager
echo -e "${purpleColour}\n\n[!]Choose your window manager!${endColour}\n\n\t${greenColour}1) Awesome${endColour}\n\t${blueColour}2) Bspwm${endColour}"
read replay

# Casos para la selección del Window Manager
case $replay in
    1)
        awesomneInstaller
        ;;
    2)
        bspwmInstaller
        ;;
    *)
        echo -e "${redColour}\nNon an option, sorry! Exiting!${endColour}"
        exit 1
        ;;
esac

Llegamos a otra selección para el usuario, en este caso se le pregunta al usuario cual Window Manager quiere. Como dije al inicio, como estoy aprendiendo Lua, quería agregar el Awesome para poder practicar también. Aquí simplemente se usa un case y se lee el replay. Los ${purpleColour}\n\n son para aplicar colores, esto puedes agregarlo o no. Eso sí, el \n es para salto de línea, y si quieres que se respete, debes agregar el -e después del echo como está en el script.

BSPWM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function bspwmInstaller (){

cat << "EOF"


██████╗ ███████╗██████╗ ██╗    ██╗███╗   ███╗
██╔══██╗██╔════╝██╔══██╗██║    ██║████╗ ████║
██████╔╝███████╗██████╔╝██║ █╗ ██║██╔████╔██║
██╔══██╗╚════██║██╔═══╝ ██║███╗██║██║╚██╔╝██║
██████╔╝███████║██║     ╚███╔███╔╝██║ ╚═╝ ██║
╚═════╝ ╚══════╝╚═╝      ╚══╝╚══╝ ╚═╝     ╚═╝
                                             

EOF

echo -e "${blueColour}\n\nInstalling BSPWM for you!${endColour}"

yay -S --noconfirm bspwm sxhkd calcurse todotxt \
       jq dunst betterlockscreen brightnessctl playerctl maim \
       xclip imagemagick >/dev/null 2>&1

echo -e "${blueColour}Installing...${endColour}"

mkdir -p $HOME/.config/bspwm 
mkdir -p $HOME/.config/sxhkd
mkdir -p $HOME/.config/bspwm/scripts

echo -e "${blueColour}\nAlmost there!${endColour}"
chmod +x bspwmrc 
chmod +x sxhkdrc
chmod +x bspwm_resize

cp bspwmrc ~/.config/bspwm/
cp sxhkdrc ~/.config/sxhkd/
cp bspwm_resize ~/.config/bspwm/scripts

echo -e "${blueColour}\nJust a little longer!${endColour}"
cd ~/.config/bspwm 
sed -i -e 's/\r$//' bspwmrc
echo -e "${blueColour}Done!${endColour}"
cd $back 



}

Esta es mi función de BSPWM, se llama cuando seleccionas su opción como tu windows manager. Es necesario aclarar que las configuraciones de mi BSPWM son algo distintas a la versión vanilla, así que si estás acostumbrado a ésta versión, lo mejor sería que edites el sxhkdrc para tener los atajos comunes.

1
2
3
yay -S --noconfirm bspwm sxhkd calcurse todotxt \
       jq dunst betterlockscreen brightnessctl playerctl maim \
       xclip imagemagick >/dev/null 2>&1

Tenemos esta primera parte del script, es simple. Usamos yay para instalar dependencias y los paquetes necesarios para que corra correctamente el bspwm. Te aconsejo que no cambies mucho de esta parte, porque cualquier cambio podría significar que el bspwm no corra correctamente, lo sé porque tuve muchos intentos fallidos de instalación y hasta ahora está es la mejor forma que he tenido para que se pueda instalar en todas las versiones de arch.

1
2
3
4
5
echo -e "${blueColour}Installing...${endColour}"

mkdir -p $HOME/.config/bspwm 
mkdir -p $HOME/.config/sxhkd
mkdir -p $HOME/.config/bspwm/scripts

Otro fragmento de código simple, se crean los directorios necesarios para la correcta ejecución del bspwm en el directorio .config

1
2
3
4
echo -e "${blueColour}\nAlmost there!${endColour}"
chmod +x bspwmrc 
chmod +x sxhkdrc
chmod +x bspwm_resize

Ahora pasamos a la siguiente parte que es la de dar permisos de ejecución, por alguna razón cuando quería poner todo en una sola línea, los permisos no se daban correctamente, así que esta forma fue la que mejor trabajó.

1
2
3
cp bspwmrc ~/.config/bspwm/
cp sxhkdrc ~/.config/sxhkd/
cp bspwm_resize ~/.config/bspwm/scripts

Se copian los respectivos files (ya con los permisos dados) en los directorios necesarios. Estos son los archivos que puedes editar, pero te recomiendo que no toques el bspwm_resize, ya que es un script personalizado para el rezise.

1
2
3
4
5
echo -e "${blueColour}\nJust a little longer!${endColour}"
cd ~/.config/bspwm 
sed -i -e 's/\r$//' bspwmrc
echo -e "${blueColour}Done!${endColour}"
cd $back 

Esta sección es la más importante, pues es como logramos hacer que el bspwm corra correctamente en Arch. Primero nos dirigimos a $HOME/.config y ahí mandamos el siguiente código: sed -i -e 's/\r$//' bspwmrc. Este comando está eliminando los caracteres de retorno de carro (\r) al final de cada línea del bspwmrc. Por último, solo volvemos al path de origen con $back.

Awesome

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function awesomneInstaller (){

cat << "EOF"

 _______  _     _  _______  __   __ 
|   _   || | _ | ||       ||  |_|  |
|  |_|  || || || ||  _____||       |
|       ||       || |_____ |       |
|       ||       ||_____  ||       |
|   _   ||   _   | _____| || ||_|| |
|__| |__||__| |__||_______||_|   |_|


EOF

echo -e "${blueColour}\n\nInstalling AwesomeWM for you!${endColour}"

echo -e "${redColour}\n\nWARNING!${endColour}"
echo -e "${redColour}\n\nThis is only the base version, no configurations included!!${endColour}"
sleep 3
 
yay -S --noconfirm awesome vicious xcompmgr feh lxappearance xorg-setxkbmap >/dev/null 2>&1
mkdir ~/.config/awesome && cp /etc/xdg/awesome/rc.lua ~/.config/awesome/ 


}

En el caso de que eligieses el Awesome, entonces cambia el sistema de instalación. Esto es bastante obvio, simplemente con yay se instala el awesome con sus respectivas dependencias, el >/dev/null 2>&1 es para que no nos muestre nada por consola al momento de instalar, el stdout se manda a null. Después con mkdir se crean las respectivas carpetas y con el && adjunto al cp se copian los respectivos files en el directorio correcto.

Regreso a la función principal

1
2
3
4
npah=$(pwd)
if [ "$npah" != "$back" ]; then
    cd "$back"
fi

Una vez las otras dos funciones termine, se hace una pequeña validación en dónde se crea una variable con el contenido de pwd, entonces se verifica si el actual path (npah) es igual al anterior (back), si npah no es igual a back, entonces se ejecuta el comando cd $back para regresar al path original, pero si npah es igual a back, no se hace nada.

Eww

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Instalación de eww
echo -e "${greenColour}\n\n[!]Installing eww${endColour}"
sleep 3 

yay -S --noconfirm rust cargo
git clone https://github.com/elkowar/eww > /dev/null 2>&1
cd eww

echo -e "${purpleColour}\n\nAre you using Wayland? (y/n)${endColour}"
read replay

case $replay in
    y)
        waylandEww
        ;;
    n)
        normalEww
        ;;
    *)
        echo -e "${redColour}\nNon an option, sorry! Exiting!${endColour}"
        exit 1
        ;;
esac

Bueno, la instalación de Eww puede ser algo tricky, pero nada muy preocupante. Primero, iniciamos clonado el repositorio con un git clone, con el repo ya en el directorio, podemos entrar a éste con un cd eww. Aquí adentro te doy dos opciones: Instalar eww con wayland o sin el wayland preguntando simplemente si en tu entorno actual lo estás corriendo con wayland. Dependiendo de esto, se llaman a otras dos funciones, en el caso de meter una respuesta inválida, se cierra el script

1
2
3
4
5
6
7
8
9
10
11
12
13
function waylandEww(){

    echo -e "${blueColour}\n\nBuilding eww! This will take sometime tho, want to go and walk a bit?${endColour}"
    cargo build --release --no-default-features --features=wayland >/dev/null 2>&1
    cd target/release
    chmod +x eww
    echo -e "${greenColour}\n\nDone installing Eww!${endColour}"
    sleep 3
    cd $back
    

    
}

Aquí simplemente hice copy-paste de las instrucciones directas de la página de eww, simplemente quité el stdout y stderr para que no se vean en pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
function normalEww(){
    
    
    echo -e "${blueColour}\n\nBuilding eww! This will take sometime tho, want to go and walk a bit?${endColour}"
    cargo build --release --no-default-features --features x11 >/dev/null 2>&1
    cd target/release
    chmod +x eww
    echo -e "${greenColour}\n\nDone installing Eww!${endColour}"
    sleep 3
    cd $back
   

}

Lo mismo en la función de normalEww. Hice copy-paste de las instrucciones de la página oficial de eww.

El resto de la función Aesthetic

1
2
3
4
5
6
7
8
9
10
11
npah=$(pwd)
if [ "$npah" != "$back" ]; then
    cd "$back"
fi

# Instalación de Kitty
if [ -z "$(command -v kitty)" ]; then
    echo -e "${greenColour}Installing a kitten!${endColour}"
    sleep 3
    yay -S --noconfirm kitty >/dev/null 2>&1
fi

Primero nos aseguramos que estemos en el path correcto, de nuevo. Una vez eso verificado, empezamos con las instalaciones de paquetes y binarios. Primero verificamos si tenemos la kitty (mi consola de preferencia) instalada. Para eso usamos un if con la condición -z “$(command -v kitty)”. El -z es para saber si hay cadena o no. El command -v es para verificar si la kitty existe, algo así como un which. Si existe, entonces no entra en la condición, pero si no, se manda un mensaje diciendo que se está instalando kitty.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#Installing picom

echo -e "${purpleColour}\n\nInstalling picom!${endColour}"

yay -S --noconfirm picom >/dev/null 2>&1
git clone https://github.com/Arian8j2/picom-jonaburg-fix.git
cd picom-jonaburg-fix
meson --buildtype=release . build >/dev/null 2>&1
ninja -C --noconfirm build >/dev/null 2>&1
LDFLAGS="-L/path/to/libraries" CPPFLAGS="-I/path/to/headers" meson --buildtype=release . build >/dev/null 2>&1
# To install the binaries in /usr/local/bin (optional)
sudo ninja -C --noconfirm build install >/dev/null 2>&1
mkdir -p $HOME/.config/picom
cd $back
cp picom.conf ~/.config/picom

Vale, seguro que aquí ves un sin fin de cosas que no entiendes, pero no te me asustes. Simplemente son las instrucciones para instala picom sacadas desde el mismo repositorio. Por ejemplo, primero se clona el repositorio necesario: git clone https://github.com/Arian8j2/picom-jonaburg-fix.git, de ahí solo fue un copiar-pegar de las instrucciones. Puedes editar esto y poner el fork de picom que más te guste.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Instalación de herramientas adicionales
packs=("feh" "polybar" "fastfetch" "ghostwriter" "flameshot" "rofi" "ranger")

LOG_FILE="errorAesthetics.data"

for pack in "${packs[@]}"; do

    echo -e "Installing $pack..."
    
    yay -S --noconfirm "$pack" >/dev/null 2>&1
    
    if [ -z "$(command -v $pack)" ]; then
    
        echo -e "${greenColour}[!] Something went wrong, $pack is not installed. Try again manually ${endColour}" >> errorAesthetics.data
    fi
    
    echo -e "${greenColour}$pack is installed${endColour}"
    
done

Ahora, aquí ya se pone las cositas algo más complejas, pero no tanto. En vez de poner línea por línea los paquetes adicionales, decidí usar un simple for para que sea automatizado y se optimice un poco mejor el script. Ahora, ¿cómo funciona el for? Eso es lo divertido.

Primero hice un array, lo que me gusta de los arrays en bash es que no tengo que especificar que tipo de contenido tiene, lo puedes hacer, pero no es necesario. En este array puse todos los paquetes que quiero tener, puedes agregar o quitar binarios si lo deseas.

1
packs=("feh" "polybar" "fastfetch" "ghostwriter" "flameshot" "rofi" "ranger")

Después del array, cree un log_file en dónde se guardarían los mensajes de error, esto para que, en el caso de que no se instale algo, se tenga un registro y así intente instalarlo de forma separada para ver cual es el problema.

1
LOG_FILE="errorAesthetics.data"

AHORA SÍ, EL FOR. Dioses, cuando estaba escribiendo todo esto parecía más corto. Como sea, el for es simple. Por cada pack (o sea, cada paquete que está en el array), se deberá hacer un yay -s (nombreDeLaHerramienta). Una vez se de el intento de instalación, se verifica de nuevo con ‘-z y command -v que la herramienta se haya instalado correctamente, si lo hace, se manda un mensaje diciendo que se ha instalado, de lo contrario, se manda un mensaje de que no se pudo instalar y se agrega al file de errorAesthetics.data.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for pack in "${packs[@]}"; do

    echo -e "Installing $pack..."
    
    yay -S --noconfirm "$pack" >/dev/null 2>&1
    
    if [ -z "$(command -v $pack)" ]; then
    
        echo -e "${greenColour}[!] Something went wrong, $pack is not installed. Try again manually ${endColour}" >> errorAesthetics.data
    fi
    
    echo -e "${greenColour}$pack is installed${endColour}"
    
done

Powerlevel 10k

1
2
3
4
5
6
7
8
9
10
# Instalación de Powerlevel10k
sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
sudo echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
chsh -s $(which zsh)
cp .p10k.zsh ~/

# Root Powerlevel10k
sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /root
chsh -s $(which zsh)

De nueva cuenta, esto es un simple copy-paste de las instrucciones literales del repo de p10k, solo que con la diferencia de que aquí lo corro dos veces, una como un usuario sin privilegios y el otro como root para que al momento de usar sudo su ambos tengan el powerlevel10k con sus respectivos archivos personalizados.

Fuentes

1
2
3
4
5
6
7
8
#Fonts installing 

fonts=("ttf-space-mono-nerd" "ttf-monofur-nerd" "ttf-anonymouspro-nerd" "ttf-nerd-fonts-symbols-mono")

for font in "${fonts[@]}"; do
    yay -S --noconfirm $font >/dev/null 2>&1
    echo "Instalando $font"
done

La sección de fuentes tiene la misma lógica del resto de herramientas, un for con un array para automatizar todo.

Movimiento de archivos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd polybar 
chmod +x launch.sh

npah=$(pwd)
if [ "$npah" != "$back" ]; then
    cd "$back"
fi

cp -r backgrounds ${HOME}
mkdir -p $HOME/.config/fastfetch
cp -r polybar bin kitty fastfetch ~/.config 
cp -r backgrounds ~/
cd backgrounds 
cp picture.png ~/.config/fastfetch
cd $back

Ya esta es la última sección de la función de aesthetics, primero cambiamos de directorio al de polybar, le damos permisos de ejecución con el chmod al launch y verificamos donde estamos para regresar al path base. Una vez en el path base, simplemente empezamos a copiar los respectivos directorios al directorio .config local. Si es necesario, también se crea los directorios necesarios.

Hacking tools

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
cd ~/
mkdir -p hackTools
cd hackTools

# Instalación de Black Arch y herramientas

echo -e "\n\n${grayColour}Installing black arch over current distro${endColour}"
curl -O https://blackarch.org/strap.sh >/dev/null 2>&1
echo 26849980b35a42e6e192c6d9ed8c46f0d6d06047 strap.sh | sha1sum -c >/dev/null 2>&1
chmod +x strap.sh
sudo ./strap.sh >/dev/null 2>&1

tools=("nmap" "whatweb" "nikto" "go" "gobuster" "feroxbuster" "librewolf" "zen-browser" "burpsuite" "autorecon" "fuff" "netdiscover" "anubis" "arp-scan" "anti-xss" "enum4linux" "exploit-db" "crawley-bin" "wfuzz" "seclists")

LOG_FILE="error.data"

for tool in "${tools[@]}"; do
    echo "Installing $tool..."

    # Intenta instalar la herramienta
    yay -S --noconfirm "$tool" >/dev/null 2>&1

    # Verifica si la herramienta fue instalada correctamente
    if command -v "$tool" >/dev/null 2>&1; then
        echo -e "${turquoiseColour} $tool is installed${endColour}"
    else
        echo -e "${redColour} $tool is not installed${endColour}" | tee -a "$LOG_FILE"
    fi
done

# Instalación de herramientas externas

sudo git clone https://github.com/drwetter/testssl.sh.git >/dev/null 2>&1
echo -e "\nInstallng TestSSL\n"
sudo git clone https://github.com/hatRiot/clusterd >/dev/null 2>&1
echo -e "Installing Clustered\n"
go install github.com/projectdiscovery/katana/cmd/katana@latest > /dev/null 2>&1
echo -e "Installing Katana\n"
sudo git clone https://github.com/21y4d/nmapAutomator >/dev/null 2>&1
echo -e "Installing nmapAutomator\n"

#Instalando seclists y más diccionarios 

echo -e "Do you want to install wordlists?"
read wrds

if [ "$wrds" == "y" ]; then 

    sudo su
    cd /usr/share
    mkdir wordlists
    cd wordlists
    git clone https://github.com/danielmiessler/SecLists.git
    git clone https://github.com/berzerk0/Probable-Wordlists.git

fi
    


cd $back


}

Ahora, este es mi segunda gran función para la instalación de herramientas para hacking ético. Esto debido a que actualmente me estoy formando en dicha rama y hago cuando tengo el tiempo alguna que otra máquina en try hack me, sin embargo al yo usar arch y una versión muy light de éste (ya que luego me come la memoria cosas que no uso), prefiero instalar por mi cuenta las herramientas necesarias y para esto es esta función.

Se empieza con la creación de un directorio llamado hackingTools, en dónde se almacenarán las herramientas que quiero, pues algunas solo son pequeños scripts en bash o c#. Una vez creado, nos metemos ahí y empezamos con todo.

Instalación de black arch sobre arch

1
2
3
4
5
6
7
# Instalación de Black Arch y herramientas

echo -e "\n\n${grayColour}Installing black arch over current distro${endColour}"
curl -O https://blackarch.org/strap.sh >/dev/null 2>&1
echo 26849980b35a42e6e192c6d9ed8c46f0d6d06047 strap.sh | sha1sum -c >/dev/null 2>&1
chmod +x strap.sh
sudo ./strap.sh >/dev/null 2>&1

Blackarch es una distro de arch enfocada en hacking, sin embargo tiene un buen de herramientas que yo no uso, pero que están en sus repositorios así que lo mejor es crear y vincularse a sus servidores para conseguir las herramientas más fácilmente. Para hacer eso, en la misma página de Blackarch te dan las instrucciones y lo que hice fue simplemente pegar dichas instrucciones en mi script.

Instalación de herramientas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
tools=("nmap" "whatweb" "nikto" "go" "gobuster" "feroxbuster" "librewolf" "zen-browser" "burpsuite" "autorecon" "fuff" "netdiscover" "anubis" "arp-scan" "anti-xss" "enum4linux" "exploit-db" "crawley-bin" "wfuzz" "seclists")

LOG_FILE="error.data"

for tool in "${tools[@]}"; do
    echo "Installing $tool..."

    # Intenta instalar la herramienta
    yay -S --noconfirm "$tool" >/dev/null 2>&1

    # Verifica si la herramienta fue instalada correctamente
    if command -v "$tool" >/dev/null 2>&1; then
        echo -e "${turquoiseColour} $tool is installed${endColour}"
    else
        echo -e "${redColour} $tool is not installed${endColour}" | tee -a "$LOG_FILE"
    fi
done

Misma lógica que con lo anterior, un array con una las herramientas que quiero instalar y un for en dónde se instala y se verifican si se instalaron bien. Aquí también hay un file de errores por si alguna herramienta no se instaló.

Herramientas externas

1
2
3
4
5
6
7
8
9
10
# Instalación de herramientas externas

sudo git clone https://github.com/drwetter/testssl.sh.git >/dev/null 2>&1
echo -e "\nInstallng TestSSL\n"
sudo git clone https://github.com/hatRiot/clusterd >/dev/null 2>&1
echo -e "Installing Clustered\n"
go install github.com/projectdiscovery/katana/cmd/katana@latest > /dev/null 2>&1
echo -e "Installing Katana\n"
sudo git clone https://github.com/21y4d/nmapAutomator >/dev/null 2>&1
echo -e "Installing nmapAutomator\n"

Simplemente es clonación de repositorios con privilegios de root para evitar errores, en esta parte decidí no usar for debido a que sería demasiada información para un array, además de que no son demasiadas, por lo tanto no son muchas líneas de código en comparación a las otras herramientas.

Wordlist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Instalando seclists y más diccionarios 

echo -e "Do you want to install wordlists?"
read wrds

if [ "$wrds" == "y" ]; then 

    sudo su
    cd /usr/share
    mkdir wordlists
    cd wordlists
    git clone https://github.com/danielmiessler/SecLists.git
    git clone https://github.com/berzerk0/Probable-Wordlists.git

fi
    


cd $back

Las wordlist son parte importante como pentester, así que obviamente también las tenía que agregar o al menos algunas de éstas. En este caso se te pregunta si las quieres instalar, en el caso de que sí lo quieras, procede a entrar al if en dónde se crea un nuevo directorio en /usr/share y se clonan los respectivos repositorios para finalizar con un simple cd $back.

This post is licensed under CC BY 4.0 by the author.