From 70838875e68539c8f72e217cbfda6303e05f9d2b Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Sat, 3 May 2025 16:20:02 +0200 Subject: [PATCH] Working --- Dockerfile | 17 +++++++++ test-env.sh | 5 +++ tforgione.sh | 100 ++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 94 insertions(+), 28 deletions(-) diff --git a/Dockerfile b/Dockerfile index e3a1dc3..013e77f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,23 @@ RUN echo "cat tforgione.sh | bash" > /home/tester/.bash_history CMD ["bash"] +# Test on ubuntu +FROM ubuntu:24.04 AS ubuntu-user + +RUN \ + apt update -y && \ + apt install sudo curl -y && \ + useradd -m tester && \ + echo tester:tester | chpasswd && \ + usermod -aG sudo tester + +USER tester +WORKDIR /home/tester +COPY ./tforgione.sh /home/tester/tforgione.sh +RUN echo "cat tforgione.sh | bash" > /home/tester/.bash_history + +CMD ["bash"] + # Test on archlinux FROM archlinux AS archlinux-user diff --git a/test-env.sh b/test-env.sh index c995b35..02b6c7f 100755 --- a/test-env.sh +++ b/test-env.sh @@ -5,6 +5,11 @@ debian() { docker container run -it debian-user bash } +ubuntu() { + docker build . --tag ubuntu-user --target ubuntu-user --debug + docker container run -it ubuntu-user bash +} + archlinux() { docker build . --tag archlinux-user --target archlinux-user --debug docker container run -it archlinux-user bash diff --git a/tforgione.sh b/tforgione.sh index 6d04acf..bfc3746 100755 --- a/tforgione.sh +++ b/tforgione.sh @@ -61,7 +61,7 @@ should_install_neovim=0 should_install_rust=0 should_install_nodejs=0 should_install_python=0 -should_install_hyrpland=0 +should_install_hyprland=0 find_os() { apt --version > /dev/null 2>&1 @@ -205,9 +205,8 @@ debug() { } run() { - packags=() - python_packages=(pip) - python_packages+=(venv) + packages=() + python_packages=() if [ $should_install_git -eq 1 ]; then packages+=(git) @@ -217,28 +216,22 @@ run() { packages+=(zsh) fi - if [ $should_install_dotfiles -eq 1 ]; then - packages+=(neovim) + if [ $should_install_neovim -eq 1 ]; then + if [ $has_pacman -eq 1 ]; then + packages+=(neovim) + fi fi if [ $should_install_nodejs -eq 1 ]; then packages+=(nodejs) - packages+=(npm) - fi - if [ $should_install_rust -eq 1 ]; then - if [ $has_apt -eq 1 ]; then - packages+=(build-essential) - packages+=(pkg-config) - packages+=(libssl-dev) - elif [ $has_pacman -eq 1 ]; then - packages+=(base) - packages+=(base-devel) + if [ $has_pacman -eq 1 ]; then + packages+=(npm) fi fi if [ $should_install_python ]; then - + # Install python if [ $has_apt -eq 1 ]; then packages+=(python3) packages+=(python-is-python3) @@ -246,9 +239,13 @@ run() { packages+=(python3-venv) elif [ $has_pacman -eq 1 ]; then packages+=(python) - packages+=(python-venv) fi + # Install some python plugins that work well with neovim if necessary + if [ $should_install_neovim -eq 1 ]; then + python_packages+=(pycodestyle) + python_packages+=("python-lsp-server[all]") + fi fi if [ $should_install_hyprland -eq 1 ]; then @@ -265,13 +262,35 @@ run() { python_packages+=(psutil) fi + # Add apt repository for recent nodejs for debian + if [ $should_install_nodejs -eq 1 ] && [ $has_apt -eq 1 ]; then + curl -fsSL https://deb.nodesource.com/setup_current.x | sudo bash + fi if [ $has_apt -eq 1 ]; then sudo apt install -y ${packages[@]} + + if [ $should_install_neovim ]; then + # Install neovim from github to get latest version + curl -L https://github.com/neovim/neovim/releases/download/stable/nvim-linux-x86_64.tar.gz -o tmp.tar.gz + sudo tar xf tmp.tar.gz -C / --strip-components=1 + rm tmp.tar.gz + fi elif [ $has_pacman -eq 1 ]; then - sudo pacman -Sy ${packages[@]} --noconfirm + sudo pacman -Sy ${packages[@]} --noconfirm --needed fi + if [ $should_install_dotfiles ]; then + sudo chsh $USER -s /bin/zsh + fi + + # Prepare venv for python + if [ $should_install_python -eq 1 ]; then + python -m venv $HOME/.venv + VIRTUAL_ENV=$HOME/.venv $HOME/.venv/bin/pip install ${python_packages[@]} + fi + + # Configure dotfiles if [ $should_install_dotfiles -eq 1 ]; then if [ ! -d $HOME/.config/ohmyzsh ]; then git clone https://github.com/ohmyzsh/ohmyzsh $HOME/.config/ohmyzsh @@ -279,11 +298,9 @@ run() { if [ ! -d $HOME/.config/dotfiles ]; then git clone https://gitea.tforgione.fr/tforgione/dotfiles $HOME/.config/dotfiles fi - sudo chsh $USER -s /bin/zsh ln -s $HOME/.config/dotfiles/zshrc $HOME/.zshrc - if [ $should_install_update_remainder -eq 1 ]; then echo "# Checks that the update is done weekly, if its not done, prints a nice message" >> $HOME/.config/dotfiles/zsh/extraconfig.zsh @@ -295,14 +312,16 @@ run() { fi fi - if [ $should_install_nodejs -eq 1 ]; then - mkdir -p $HOME/.npmbin - npm config set prefix $HOME/.npmbin - npm install -g npm - sudo apt purge npm -y - sudo apt autoremove -y + # Configure hyprland + if [ $should_install_hyprland -eq 1 ]; then + ln -s $HOME/.config/dotfiles/hypr $HOME/.config/hypr + ln -s $HOME/.config/dotfiles/hypr/waybar $HOME/.config/waybar + + touch $HOME/.config/dotfiles/hypr/exec-once.conf + touch $HOME/.config/dotfiles/hypr/monitors.conf fi + # Configure neovim if [ $should_install_neovim -eq 1 ]; then # Create config files an directories mkdir -p $HOME/.nvim/backups $HOME/.nvim/swp $HOME/.nvim/undo @@ -317,11 +336,18 @@ run() { nvim +PlugInstall +qa fi + # Configure nodejs + if [ $should_install_nodejs -eq 1 ]; then + mkdir -p $HOME/.npmbin + npm config set prefix $HOME/.npmbin + npm install -g npm + fi + + # Configure rust if [ $should_install_rust -eq 1 ]; then curl https://sh.rustup.rs -sSf | sh -s -- --no-modify-path -y export PATH=$HOME/.cargo/bin:$PATH rustup component add rust-analyzer - cargo install cargo-update fi } @@ -340,6 +366,21 @@ banner() { echo -e "└───────────────────────────────────────────────────────────────────────────────────────────┘\x1b[0m" } +ending_banner() { + echo -e "\x1b[32;1m┌───────────────────────────────────────────────────────────────────────────────────────────┐" + echo "│ _ __ _ _ _ _ _ _ │" + echo "│ | | / _| (_) ( ) (_) | | | | | │" + echo "│ | |_| |_ ___ _ __ __ _ _ ___ _ __ ___|/ ___ _ _ __ ___| |_ __ _| | | ___ _ __ │" + echo "│ | __| _/ _ \| '__/ _\` | |/ _ \| '_ \ / _ \ / __| | | '_ \/ __| __/ _\` | | |/ _ \ '__| │" + echo "│ | |_| || (_) | | | (_| | | (_) | | | | __/ \__ \ | | | | \__ \ || (_| | | | __/ | │" + echo "│ \__|_| \___/|_| \__, |_|\___/|_| |_|\___| |___/ |_|_| |_|___/\__\__,_|_|_|\___|_| │" + echo "│ __/ | │" + echo "│ |___/ │" + echo "├───────────────────────────────────────────────────────────────────────────────────────────┤" + echo "│ TFORGIONE'S DOTFILES INSTALLED! HAVE A GREAT DAY! │" + echo -e "└───────────────────────────────────────────────────────────────────────────────────────────┘\x1b[0m" +} + main() { banner find_os @@ -351,11 +392,14 @@ main() { ask_for_dotfiles ask_for_neovim ask_for_rust + ask_for_python ask_for_nodejs ask_for_hyprland debug run + + ending_banner } main < /dev/tty