From 7ba67a26556358d40eb23b4b9850019823cb5ea2 Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Wed, 6 May 2026 10:25:33 +0200 Subject: [PATCH] Updated install options. Bootstrap - sets up the Desktop Install - sets up my software scripts/ - specific software setups --- README.md | 94 +++++++++++++++++++++++++----------------- bootstraph.sh | 54 ++++++++++++++++++++++++ install.sh | 24 ----------- scripts/install_docker | 30 ++++++++++++++ scripts/install_golang | 77 ++++++++++++++++++++++++++++++++++ scripts/install_kanata | 83 +++++++++++++++++++++++++++++++++++++ 6 files changed, 301 insertions(+), 61 deletions(-) create mode 100755 bootstraph.sh create mode 100755 scripts/install_docker create mode 100755 scripts/install_golang create mode 100755 scripts/install_kanata diff --git a/README.md b/README.md index ac1ac51..3c211f3 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,91 @@ # Minimal Dotfiles -A deliberately minimal dotfile configuration. +A deliberately minimal dotfile configuration. ## Philosophy -Over the years I have grown tired of tweaking config files, for every component of my desktop. -This repository contains only the essentials: +Over the years I have grown tired of tweaking config files for every component of my desktop. +This repository contains only the essentials. + +Start with a minimal Debian 13 (Trixie) install — SSH server and system essentials only, no desktop environment. Run `bootstrap.sh` followed by `install.sh` to get up and running. For additional tooling, see the `scripts/` folder. -- **Desktop Environment**: Gnome 48 with the Pop_Shell extension provides built-in tiling and sensible defaults—no ricing required -- **Configuration**: Only what's necessary for my daily workflow and a few small css changes to square gnomes ui -- **Maintenance**: Simple symlink management and package installation via a single script ## What's Inside -``` -. -├── config/ -│ ├── fish/ # Fish shell configuration -│ ├── foot/ # Foot terminal configuration -│ ├── gitu/ # Git TUI settings -│ ├── kanata/ # Keyboard remapping -│ ├── gtk3/ # gtk3 css for squared ui -│ ├── gtk4/ # gtk4 css for squared ui -│ └── nvim/ # Neovim setup -└── install.sh # Automated setup script -``` + . + ├── config/ + │ ├── alacritty/ # Alacritty terminal configuration + │ ├── fish/ # Fish shell configuration + │ ├── gitu/ # Git TUI settings + │ ├── kanata/ # Keyboard remapping + │ ├── lf/ # Terminal file manager + │ ├── nvim/ # Neovim setup + │ └── tmux/ # Tmux configuration + ├── scripts/ + │ ├── setup_docker # Docker install recipe + │ └── setup_golang # Golang + go tools install recipe + ├── bootstrap.sh # Fresh system setup (run once, before install.sh) + └── install.sh # Dotfile symlinks and package installation -## Installation + +## Desktop Bootstrap + +Start with a minimal Debian 13 (Trixie) install — SSH server and system essentials only, no desktop environment. + +Then run the bootstrap script to set up DMS, Helium, and GTK theming: + + ./bootstrap.sh + +Once complete, restore personal files from backup (SSH keys, documents, projects, fonts, wallpapers, local binaries/scripts), then continue with the steps below. + + +## Software Installation Clone this repository and run the install script: ### Install Options -```bash -# Interactive mode (with confirmations) -./install.sh + # Interactive mode (with confirmations) + ./install.sh -# Only create symlinks -./install.sh -l + # Only create symlinks + ./install.sh -l -# Only install packages -./install.sh -i -``` + # Only install packages + ./install.sh -i ## What Gets Installed The script installs essential development tools via `apt`: -- **CLI Tools**: `wget`, `curl`, `fzf`, `fd-find`, `ripgrep`, `tree`, `btop`, `direnv` +- **CLI Tools**: `wget`, `curl`, `fzf`, `fd-find`, `ripgrep`, `tree`, `btop`, `direnv`, `bat`, `jq`, `lf`, `unzip` - **Development**: `build-essential`, `make`, `bear`, `valgrind` - **Shell**: `fish` +- **Terminal**: `alacritty` +- **Multiplexer**: `tmux` +- **Other**: `ca-certificates`, `gnupg`, `libfuse2` + ## Symlinks Created +- `~/.tmux.conf` → `./config/tmux/.tmux.conf` +- `~/.config/alacritty` → `./config/alacritty` - `~/.config/fish` → `./config/fish` -- `~/.config/foot` → `./config/foot` - `~/.config/kanata` → `./config/kanata` - `~/.config/nvim` → `./config/nvim` - `~/.config/gitu` → `./config/gitu` -- `~/.config/gtk-3.0/gtk.css` → `./config/gtk3/gtk.css` -- `~/.config/gtk-4.0/gtk.css` → `./config/gtk4/gtk.css` +- `~/.config/lf` → `./config/lf` -This setup prioritizes **stability** and **simplicity** over customization, the Gnome Desktop with minimal extensions handles the heavy lifting for tiling and aesthetics. -## Extensions installed -- Pop Shell -- User Themes -- Arc Menu -- Disable workspace switcher +## Scripts +Self-contained recipes for tooling that goes beyond the core install. Each script can be run independently as needed: + + ./scripts/setup_docker + ./scripts/setup_golang + ./scripts/setup_kanata + +These are not run automatically by `install.sh` — they are opt-in. + + +This setup prioritizes **stability** and **simplicity** over customization. DankMaterialShell with niri handles the heavy lifting for tiling and aesthetics. diff --git a/bootstraph.sh b/bootstraph.sh new file mode 100755 index 0000000..113e3ad --- /dev/null +++ b/bootstraph.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# --------------------------------------------------------------------------------- +# Bootstrap script for fresh Debian 13 (Trixie) install +# Run this after a minimal install (SSH server + system essentials, no desktop) +# --------------------------------------------------------------------------------- + +set -e + +echo "🔧 Installing pre-requisites..." +sudo apt install -y curl network-manager nemo pipewire pipewire-pulse wireplumber polkit-kde-agent-1 wl-clipboard + +# --------------------------------------------------------------------------------- +# Install DankMaterialShell +# --------------------------------------------------------------------------------- +echo "🎨 Installing DankMaterialShell..." +curl -fsSL https://install.danklinux.com | sh + +echo "🔊 Enabling audio and networking services..." +sudo systemctl --user enable --now pipewire pipewire-pulse wireplumber +sudo systemctl enable --now NetworkManager + +# --------------------------------------------------------------------------------- +# Fix network interfaces — keep only the loopback interface +# --------------------------------------------------------------------------------- +echo "🌐 Fixing network interfaces..." +echo " Commenting out everything except the lo loopback in /etc/network/interfaces" +sudo sed -i '/^auto\|^iface\|^allow-hotplug/{/lo/!s/^/#/}' /etc/network/interfaces + +sudo systemctl restart networking +sudo systemctl restart NetworkManager +sudo systemctl restart dms + +# --------------------------------------------------------------------------------- +# Install Helium Browser +# --------------------------------------------------------------------------------- +echo "🌍 Installing Helium Browser..." +curl -fsSL https://raw.githubusercontent.com/imputnet/helium-linux/main/pubkey.asc | sudo gpg --dearmor -o /usr/share/keyrings/helium.gpg +echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/helium.gpg] https://pkg.helium.computer/deb stable main" | sudo tee /etc/apt/sources.list.d/helium.list +sudo apt update && sudo apt install -y helium-bin + +# --------------------------------------------------------------------------------- +# Install adw-gtk3 (GTK app theming for DMS) +# --------------------------------------------------------------------------------- +echo "🎨 Installing adw-gtk3..." +curl -s https://julianfairfax.codeberg.page/package-repo/pub.gpg | gpg --dearmor | sudo dd of=/usr/share/keyrings/julians-package-repo.gpg +echo 'deb [ signed-by=/usr/share/keyrings/julians-package-repo.gpg ] https://julianfairfax.codeberg.page/package-repo/debs packages main' | sudo tee /etc/apt/sources.list.d/julians-package-repo.list +sudo apt update && sudo apt install -y adw-gtk3 + +# --------------------------------------------------------------------------------- + +echo "" +echo "✅ Bootstrap complete." +echo "" diff --git a/install.sh b/install.sh index efaa5cd..e8cc0a0 100755 --- a/install.sh +++ b/install.sh @@ -1,9 +1,4 @@ #!/bin/bash -# --------------------------------------------------------------------------------- -## Steps taken before running this script -# --------------------------------------------------------------------------------- -# * apt update && apt upgrade -# * Setup SSH keys # * Download kanata binary # * Setup kanata to start on boot: @@ -21,25 +16,6 @@ # [Install] # WantedBy=default.target # ``` - -# * Clone dotfiles -# * Install nerd font -# * Remove firefox for Brave -# * Setup gnome extensions -# * [OPTIONAL] -# * Install bob neovim manager [ curl -fsSL https://raw.githubusercontent.com/MordechaiHadad/bob/master/scripts/install.sh | bash ] -# * Install latest version of golang -# -# Optional: Install Docker -# * sudo apt-get remove docker docker-engine docker.io containerd runc -# * sudo install -m 0755 -d /etc/apt/keyrings -# * sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc -# * sudo chmod a+r /etc/apt/keyrings/docker.asc -# * bash -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null' -# * sudo apt-get update -# * sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -# * sudo usermod -aG docker $USER -# * sudo groupadd docker # --------------------------------------------------------------------------------- ## GLOBAL VARS # --------------------------------------------------------------------------------- diff --git a/scripts/install_docker b/scripts/install_docker new file mode 100755 index 0000000..0d145db --- /dev/null +++ b/scripts/install_docker @@ -0,0 +1,30 @@ +#!/bin/bash + +# --------------------------------------------------------------------------------- +# Docker install recipe +# --------------------------------------------------------------------------------- + +set -e + +echo "🐳 Removing old Docker packages if present..." +sudo apt-get remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true + +echo "🔑 Adding Docker signing key..." +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +echo "📦 Adding Docker repository..." +bash -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null' + +echo "📦 Installing Docker..." +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +echo "👤 Adding current user to docker group..." +sudo groupadd docker 2>/dev/null || true +sudo usermod -aG docker $USER + +echo "" +echo "✅ Docker install complete." +echo " Log out and back in for group changes to take effect." diff --git a/scripts/install_golang b/scripts/install_golang new file mode 100755 index 0000000..57dab51 --- /dev/null +++ b/scripts/install_golang @@ -0,0 +1,77 @@ +#!/bin/bash + +# --------------------------------------------------------------------------------- +# Golang install recipe +# Fetches the latest stable Go release, installs to /usr/local/go, +# then installs go-based CLI tools. +# --------------------------------------------------------------------------------- + +set -e + +# --------------------------------------------------------------------------------- +# Detect architecture +# --------------------------------------------------------------------------------- +ARCH=$(dpkg --print-architecture) +case "$ARCH" in + amd64) GO_ARCH="amd64" ;; + arm64) GO_ARCH="arm64" ;; + *) + echo "❌ Unsupported architecture: $ARCH" + exit 1 + ;; +esac + +# --------------------------------------------------------------------------------- +# Fetch latest stable Go version +# --------------------------------------------------------------------------------- +echo "🔍 Fetching latest stable Go version..." +GO_VERSION=$(curl -fsSL "https://go.dev/dl/?mode=json" | grep -o '"version":"go[^"]*"' | head -1 | grep -o 'go[0-9.]*') + +if [ -z "$GO_VERSION" ]; then + echo "❌ Failed to fetch latest Go version." + exit 1 +fi + +echo "✅ Latest Go version: $GO_VERSION" + +# --------------------------------------------------------------------------------- +# Download and install +# --------------------------------------------------------------------------------- +TARBALL="${GO_VERSION}.linux-${GO_ARCH}.tar.gz" +DOWNLOAD_URL="https://go.dev/dl/${TARBALL}" + +echo "📦 Downloading $TARBALL..." +curl -fsSL "$DOWNLOAD_URL" -o "/tmp/${TARBALL}" + +echo "📂 Installing to /usr/local/go..." +sudo rm -rf /usr/local/go +sudo tar -C /usr/local -xzf "/tmp/${TARBALL}" +rm "/tmp/${TARBALL}" + +# --------------------------------------------------------------------------------- +# Verify install +# --------------------------------------------------------------------------------- +export PATH=$PATH:/usr/local/go/bin + +echo "🔍 Verifying Go install..." +/usr/local/go/bin/go version + +# --------------------------------------------------------------------------------- +# Install Go-based CLI tools +# --------------------------------------------------------------------------------- +echo "" +echo "📦 Installing Go-based CLI tools..." + +echo " → gopls" +go install golang.org/x/tools/gopls@latest + +echo " → lazydocker" +go install github.com/jesseduffield/lazydocker@latest + +echo " → lf" +env CGO_ENABLED=0 go install -trimpath -ldflags="-s -w" github.com/gokcehan/lf@latest + +echo "" +echo "✅ Golang setup complete." +echo " Restart your shell or run: source ~/.config/fish/config.fish" + diff --git a/scripts/install_kanata b/scripts/install_kanata new file mode 100755 index 0000000..b36ced9 --- /dev/null +++ b/scripts/install_kanata @@ -0,0 +1,83 @@ +#!/bin/bash + +# --------------------------------------------------------------------------------- +# Kanata install recipe +# Downloads the latest Linux binary from GitHub, installs to ~/.local/bin, +# and sets up a systemd user service. +# --------------------------------------------------------------------------------- + +set -e + +INSTALL_DIR="$HOME/.local/bin" +CONFIG_DIR="$HOME/.config/kanata" +SERVICE_PATH="/lib/systemd/system/kanata.service" +BINARY_NAME="kanata" + +# --------------------------------------------------------------------------------- +# Fetch latest release version from GitHub API +# --------------------------------------------------------------------------------- +echo "🔍 Fetching latest Kanata release..." +LATEST_VERSION=$(curl -fsSL "https://api.github.com/repos/jtroo/kanata/releases/latest" | grep '"tag_name"' | head -1 | grep -o 'v[0-9.]*') + +if [ -z "$LATEST_VERSION" ]; then + echo "❌ Failed to fetch latest Kanata version." + exit 1 +fi + +echo "✅ Latest Kanata version: $LATEST_VERSION" + +# --------------------------------------------------------------------------------- +# Download binary +# --------------------------------------------------------------------------------- +DOWNLOAD_URL="https://github.com/jtroo/kanata/releases/download/${LATEST_VERSION}/kanata_linux_x64" + +echo "📦 Downloading kanata_linux_x64..." +mkdir -p "$INSTALL_DIR" +curl -fsSL "$DOWNLOAD_URL" -o "$INSTALL_DIR/$BINARY_NAME" +chmod +x "$INSTALL_DIR/$BINARY_NAME" + +echo "✅ Installed: $INSTALL_DIR/$BINARY_NAME" + +# --------------------------------------------------------------------------------- +# Verify a config file exists +# --------------------------------------------------------------------------------- +if [ ! -f "$CONFIG_DIR/kanata.kbd" ]; then + echo "⚠️ No config found at $CONFIG_DIR/kanata.kbd" + echo " Make sure your dotfiles are synced before enabling the service." +fi + +# --------------------------------------------------------------------------------- +# Write systemd service file +# --------------------------------------------------------------------------------- +echo "⚙️ Writing systemd service to $SERVICE_PATH..." + +sudo tee "$SERVICE_PATH" > /dev/null <