# ============================================ # Super Advanced Linux Terminal v2.0 # Hugging Face Docker Space # ============================================ FROM ubuntu:22.04 # Avoid prompts during build ENV DEBIAN_FRONTEND=noninteractive ENV LANG=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8 ENV TERM=xterm-256color ENV COLORTERM=truecolor # ============================================ # Stage 1: System packages # ============================================ RUN apt-get update && apt-get install -y --no-install-recommends \ # Core tools sudo curl wget git unzip zip tar gzip bzip2 xz-utils \ ca-certificates gnupg lsb-release software-properties-common \ # Build essentials build-essential gcc g++ make cmake pkg-config \ # Shell & terminal zsh tmux screen \ # Editors neovim nano \ # System monitoring htop ncdu mtr-tiny iproute2 net-tools dnsutils iputils-ping \ # Dev tools jq openssh-client rsync \ # Nginx nginx \ # Python python3 python3-pip python3-venv python3-dev \ # Libraries for various tools libssl-dev libffi-dev \ # Locale locales \ && locale-gen en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* # ============================================ # Stage 2: Modern CLI tools (from GitHub releases) # ============================================ # ttyd - Web terminal RUN wget -qO /usr/local/bin/ttyd https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.x86_64 \ && chmod +x /usr/local/bin/ttyd # bat - Better cat RUN wget -qO /tmp/bat.deb https://github.com/sharkdp/bat/releases/download/v0.24.0/bat_0.24.0_amd64.deb \ && dpkg -i /tmp/bat.deb && rm /tmp/bat.deb # eza - Better ls (with icons) RUN wget -qO /tmp/eza.tar.gz https://github.com/eza-community/eza/releases/download/v0.20.13/eza_x86_64-unknown-linux-gnu.tar.gz \ && tar -xzf /tmp/eza.tar.gz -C /usr/local/bin/ && chmod +x /usr/local/bin/eza && rm /tmp/eza.tar.gz # ripgrep - Better grep RUN wget -qO /tmp/rg.deb https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep_14.1.1-1_amd64.deb \ && dpkg -i /tmp/rg.deb && rm /tmp/rg.deb # fd - Better find RUN wget -qO /tmp/fd.deb https://github.com/sharkdp/fd/releases/download/v10.2.0/fd_10.2.0_amd64.deb \ && dpkg -i /tmp/fd.deb && rm /tmp/fd.deb # dust - Better du RUN wget -qO /tmp/dust.deb https://github.com/bootandy/dust/releases/download/v1.1.1/du-dust_1.1.1-1_amd64.deb \ && dpkg -i /tmp/dust.deb && rm /tmp/dust.deb # procs - Better ps RUN wget -qO /tmp/procs.zip https://github.com/dalance/procs/releases/download/v0.14.8/procs-v0.14.8-x86_64-linux.zip \ && unzip -o /tmp/procs.zip -d /usr/local/bin/ && chmod +x /usr/local/bin/procs && rm /tmp/procs.zip # btop - Beautiful resource monitor RUN wget -qO /tmp/btop.tbz https://github.com/aristocratos/btop/releases/download/v1.4.0/btop-x86_64-linux-musl.tbz \ && tar -xjf /tmp/btop.tbz -C /tmp/ && cp /tmp/btop/bin/btop /usr/local/bin/ && chmod +x /usr/local/bin/btop && rm -rf /tmp/btop* # delta - Better git diff RUN wget -qO /tmp/delta.deb https://github.com/dandavison/delta/releases/download/0.18.2/git-delta_0.18.2_amd64.deb \ && dpkg -i /tmp/delta.deb && rm /tmp/delta.deb # zoxide - Smart cd RUN wget -qO /tmp/zoxide.deb https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.6/zoxide_0.9.6-1_amd64.deb \ && dpkg -i /tmp/zoxide.deb && rm /tmp/zoxide.deb # fzf - Fuzzy finder RUN wget -qO /tmp/fzf.tar.gz https://github.com/junegunn/fzf/releases/download/v0.57.0/fzf-0.57.0-linux_amd64.tar.gz \ && tar -xzf /tmp/fzf.tar.gz -C /usr/local/bin/ && chmod +x /usr/local/bin/fzf && rm /tmp/fzf.tar.gz # lazygit - TUI git client RUN wget -qO /tmp/lazygit.tar.gz https://github.com/jesseduffield/lazygit/releases/download/v0.44.1/lazygit_0.44.1_Linux_x86_64.tar.gz \ && tar -xzf /tmp/lazygit.tar.gz -C /usr/local/bin/ lazygit && chmod +x /usr/local/bin/lazygit && rm /tmp/lazygit.tar.gz # yq - YAML processor RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.44.6/yq_linux_amd64 \ && chmod +x /usr/local/bin/yq # GitHub CLI RUN wget -qO /tmp/gh.tar.gz https://github.com/cli/cli/releases/download/v2.63.2/gh_2.63.2_linux_amd64.tar.gz \ && tar -xzf /tmp/gh.tar.gz -C /tmp/ && cp /tmp/gh_2.63.2_linux_amd64/bin/gh /usr/local/bin/ \ && chmod +x /usr/local/bin/gh && rm -rf /tmp/gh* # httpie - Better curl RUN pip3 install --no-cache-dir --break-system-packages httpie # ============================================ # Stage 3: Language runtimes # ============================================ # Node.js 20 LTS RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y nodejs \ && npm install -g yarn pnpm \ && rm -rf /var/lib/apt/lists/* # Go 1.22 RUN wget -qO /tmp/go.tar.gz https://go.dev/dl/go1.22.10.linux-amd64.tar.gz \ && tar -xzf /tmp/go.tar.gz -C /usr/local/ && rm /tmp/go.tar.gz ENV PATH=$PATH:/usr/local/go/bin # ============================================ # Stage 4: VS Code Server (code-server) # ============================================ RUN curl -fsSL https://code-server.dev/install.sh | sh # ============================================ # Stage 5: User setup # ============================================ RUN useradd -m -s /bin/zsh -u 1000 user \ && echo "user ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/user \ && chmod 0440 /etc/sudoers.d/user USER user ENV HOME=/home/user ENV SHELL=/bin/zsh ENV PATH=$PATH:/usr/local/go/bin:$HOME/go/bin:$HOME/.cargo/bin:$HOME/.local/bin WORKDIR $HOME # ============================================ # Stage 6: Zsh + Oh My Zsh + Powerlevel10k # ============================================ # Oh My Zsh RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended # Powerlevel10k theme RUN git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k # zsh-autosuggestions RUN git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions # zsh-syntax-highlighting RUN git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting # Rust (rustup for user) RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y # ============================================ # Stage 7: Copy config files # ============================================ COPY --chown=user:user config/.zshrc $HOME/.zshrc COPY --chown=user:user config/.tmux.conf $HOME/.tmux.conf COPY --chown=user:user config/.p10k.zsh $HOME/.p10k.zsh COPY --chown=user:user config/motd.sh $HOME/motd.sh COPY --chown=user:user start.sh $HOME/start.sh COPY --chown=user:user nginx.conf /etc/nginx/nginx.conf RUN chmod +x $HOME/start.sh $HOME/motd.sh # Create workspace RUN mkdir -p $HOME/workspace # Git config RUN git config --global init.defaultBranch main \ && git config --global core.editor nvim \ && git config --global core.pager delta \ && git config --global delta.navigate true \ && git config --global delta.line-numbers true \ && git config --global delta.side-by-side true \ && git config --global interactive.diffFilter "delta --color-only" \ && git config --global merge.conflictstyle diff3 # Create help command RUN echo '#!/bin/bash\n\ echo ""\n\ echo " \033[1;36m\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Quick Commands \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mlg\033[0m LazyGit TUI \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mbtop\033[0m Resource Monitor \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mlt\033[0m Tree View (2 levels) \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mll\033[0m Detailed File List \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mcat\033[0m Syntax-highlighted view \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mrg\033[0m Ultra-fast search \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mfd\033[0m Fast file finder \033[36m\u2551\033[0m"\n\ echo " \033[36m\u2551\033[0m \033[33mz