detached d3d16e6

chore(installer): replace bash orchestrator with Go binary downloader

install.sh is now a lean curl-to-binary bootstrap: fetches the archup
binary from GitHub Releases, verifies the sha256 checksum, and execs
`archup install`. Supports --dev and --version flags.

Remove install-bin.sh and install-bin-dev.sh (now redundant).
Update .goreleaser.yaml to drop install.sh from release archives and
fix install URLs in the release footer.
Update Makefile check targets to match the actual scripts on disk.
Fix SC2012 shellcheck warning in blesh.sh.
Rewrite README with an opinionated-installer pitch.
commit
d3d16e694eb1e0afd1d312e03079f11fa860d3c5
author
brice · · 2026-03-03 03:25 UTC
parent
9a253ed
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
7 files · +143 -463
M .goreleaser.yaml +3 -22
@@ -46,8 +46,6 @@ archives:
4646 - LICENSE
4747 - README.md
4848 - CHANGELOG.md
49- - logo.txt
50- - install.sh
5149 - install/**/*
5250
5351 checksum:
@@ -118,34 +116,17 @@ release:
118116
119117 ### Quick Install (from Arch Linux ISO)
120118 ```bash
121- curl -fsSL https://archup.run/install/bin | bash
119+ curl -fsSL https://archup.run/install | bash
122120 ```
123121
124122 ### Install Pre-release/Dev Version
125123 ```bash
126- curl -fsSL https://archup.run/install/bin/dev | bash
124+ curl -fsSL https://archup.run/install | bash -s -- --dev
127125 ```
128126
129127 ### Install Specific Version
130128 ```bash
131- # Download and run specific version
132- curl -fsSL https://github.com/bnema/archup/releases/download/{{.Tag}}/archup -o /tmp/archup
133- chmod +x /tmp/archup
134- /tmp/archup install
135- ```
136-
137- ### Manual Install
138- ```bash
139- # Download binary
140- wget https://github.com/bnema/archup/releases/download/{{.Tag}}/archup
141-
142- # Verify checksum
143- wget https://github.com/bnema/archup/releases/download/{{.Tag}}/checksums.txt
144- sha256sum -c checksums.txt --ignore-missing
145-
146- # Install
147- chmod +x archup
148- sudo install -m 755 archup /usr/local/bin/
129+ curl -fsSL https://archup.run/install | bash -s -- --version {{.Tag}}
149130 ```
150131
151132 ---
@@ -46,8 +46,6 @@ archives:
46 - LICENSE46 - LICENSE
47 - README.md47 - README.md
48 - CHANGELOG.md48 - CHANGELOG.md
49- - logo.txt
50- - install.sh
51 - install/**/*49 - install/**/*
52 50
53 checksum:51 checksum:
@@ -118,34 +116,17 @@ release:
118 116
119 ### Quick Install (from Arch Linux ISO)117 ### Quick Install (from Arch Linux ISO)
120 ```bash118 ```bash
121- curl -fsSL https://archup.run/install/bin | bash119+ curl -fsSL https://archup.run/install | bash
122 ```120 ```
123 121
124 ### Install Pre-release/Dev Version122 ### Install Pre-release/Dev Version
125 ```bash123 ```bash
126- curl -fsSL https://archup.run/install/bin/dev | bash124+ curl -fsSL https://archup.run/install | bash -s -- --dev
127 ```125 ```
128 126
129 ### Install Specific Version127 ### Install Specific Version
130 ```bash128 ```bash
131- # Download and run specific version129+ curl -fsSL https://archup.run/install | bash -s -- --version {{.Tag}}
132- curl -fsSL https://github.com/bnema/archup/releases/download/{{.Tag}}/archup -o /tmp/archup
133- chmod +x /tmp/archup
134- /tmp/archup install
135- ```
136-
137- ### Manual Install
138- ```bash
139- # Download binary
140- wget https://github.com/bnema/archup/releases/download/{{.Tag}}/archup
141-
142- # Verify checksum
143- wget https://github.com/bnema/archup/releases/download/{{.Tag}}/checksums.txt
144- sha256sum -c checksums.txt --ignore-missing
145-
146- # Install
147- chmod +x archup
148- sudo install -m 755 archup /usr/local/bin/
149 ```130 ```
150 131
151 ---132 ---
M Makefile +2 -2
@@ -34,7 +34,7 @@ check-syntax:
3434 @echo "========================================="
3535 @echo "Checking shell script syntax..."
3636 @echo "========================================="
37- @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \
37+ @for script in install.sh install/mandatory/post-boot/*.sh; do \
3838 if [ -f "$$script" ]; then \
3939 echo "Checking: $$script"; \
4040 bash -n "$$script" || exit 1; \
@@ -53,7 +53,7 @@ check-shellcheck:
5353 echo "Install with: sudo pacman -S shellcheck"; \
5454 exit 0; \
5555 fi
56- @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \
56+ @for script in install.sh install/mandatory/post-boot/*.sh; do \
5757 if [ -f "$$script" ]; then \
5858 echo ""; \
5959 echo "Checking: $$script"; \
@@ -34,7 +34,7 @@ check-syntax:
34 @echo "========================================="34 @echo "========================================="
35 @echo "Checking shell script syntax..."35 @echo "Checking shell script syntax..."
36 @echo "========================================="36 @echo "========================================="
37- @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \37+ @for script in install.sh install/mandatory/post-boot/*.sh; do \
38 if [ -f "$$script" ]; then \38 if [ -f "$$script" ]; then \
39 echo "Checking: $$script"; \39 echo "Checking: $$script"; \
40 bash -n "$$script" || exit 1; \40 bash -n "$$script" || exit 1; \
@@ -53,7 +53,7 @@ check-shellcheck:
53 echo "Install with: sudo pacman -S shellcheck"; \53 echo "Install with: sudo pacman -S shellcheck"; \
54 exit 0; \54 exit 0; \
55 fi55 fi
56- @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \56+ @for script in install.sh install/mandatory/post-boot/*.sh; do \
57 if [ -f "$$script" ]; then \57 if [ -f "$$script" ]; then \
58 echo ""; \58 echo ""; \
59 echo "Checking: $$script"; \59 echo "Checking: $$script"; \
M README.md +40 -39
@@ -4,25 +4,30 @@
44
55 ## What Is ArchUp?
66
7-ArchUp is a minimal Arch Linux installer for Wayland. Boot the ISO, run it, and you get a working barebone system. Hardware is detected automatically and defaults are sensible. Afterward, you can optionally add a desktop environment.
8-
9-**Includes:**
10-- Lean system without unnecessary packages
11-- Ready-to-use shell environment with modern CLI tools configured and themed
12-- CPU optimization (amd_pstate/cpu governor) and automatic GPU driver detection
13-- Essential libraries and packages (Qt5, GTK4, etc.) for a functional environment
14-- Coherent theme applied across all supported applications
15-- Full customization after installation
16-
17-**Does not include:**
18-- KDE, GNOME, or other full desktop environments
19-- Any attempt to be a standalone distro
20-- Locked-in configurations
21-- Bloated softwares
7+ArchUp is an opinionated Arch Linux installer. It is a faster, saner alternative to `archinstall` — it makes the hard choices for you (Btrfs, Limine, Chaotic-AUR, sensible defaults) so you can go from ISO to working system in minutes.
8+
9+Boot the Arch ISO, run it, answer a few questions, reboot. That's it.
10+
11+**What it decides for you:**
12+- Btrfs with `@` and `@home` subvolumes
13+- Limine bootloader (UEFI only)
14+- Chaotic-AUR enabled out of the box
15+- Plymouth boot splash
16+- Snapper for snapshot-based rollbacks
17+- NetworkManager, OpenSSH, zram, firewalld
18+
19+**What you choose:**
20+- Disk and optional LUKS2 encryption
21+- Hostname, user, locale, timezone, keymap
22+- Kernel (linux, linux-lts, linux-zen, linux-hardened, linux-cachyos)
23+- AMD P-State mode (auto-detected per Zen generation)
24+- GPU drivers (auto-detected)
25+- Extra repos (CachyOS, AUR helper)
26+- Dank Linux desktop on first boot (optional)
2227
2328 ## Get Started
2429
25-**Need:** AMD/Intel 64-bit system, UEFI
30+**Requirements:** x86\_64, UEFI, Secure Boot disabled
2631
2732 Boot the Arch ISO and run:
2833
@@ -32,41 +37,37 @@ curl -fsSL https://archup.run/install | bash
3237
3338 Reboot when done.
3439
35-For development versions:
36-```bash
37-curl -fsSL https://archup.run/install/dev | bash
38-```
39-
4040 ## What's Installed
4141
42-**Core system:**
43-- btrfs filesystem, Limine bootloader, Plymouth
44-- Kernel selection: linux, linux-lts, or linux-zen
42+**Base system:**
43+- Btrfs filesystem, Limine bootloader, Plymouth
44+- Kernel of your choice + matching microcode
4545 - GPU drivers and firmware (auto-detected)
46-- NetworkManager, OpenSSH, systemd-resolved
46+- NetworkManager, OpenSSH, systemd-resolved, zram
4747
4848 **CLI tools:**
4949 - Neovim, Git, sudo, man pages
5050 - Modern utilities: fzf, ripgrep, bat, eza, zoxide, starship, btop, yazi
51-- Build tools: gcc, make, Go, Rust (for AUR packages)
51+- Build tools: base-devel, Go, Rust (for AUR)
5252
53-**System utilities:**
54-- Snapper for snapshots and rollbacks
55-- Bluetooth and audio configuration
56-- Firewall (ufw) and power management (TLP)
57-- Shell completion and theme system
58-
59-Run `archup wizard` after installation to add a Wayland compositor with integrated theming. Support will expand as the community contributes.
53+**First-boot setup (automatic):**
54+- Snapper configured for Btrfs snapshots
55+- firewalld enabled
56+- SSH host keys generated
57+- ble.sh and shell tooling installed
6058
6159 ## Status
6260
63-- [x] Barebone installer (functional, testing in progress)
64-- [x] CLI auto-builds on first boot
65-- [ ] Desktop wizard (in progress in [archup-cli](https://github.com/bnema/archup-cli))
61+Active development — tested manually on real hardware.
62+
63+- [x] TUI installer (functional)
64+- [x] LUKS2 encryption support
65+- [x] First-boot systemd service
66+- [ ] Dank Linux desktop (niri/Hyprland) — in progress
6667
67-Active development. Report bugs with logs.
68+Report bugs with logs from `/var/log/archup.log`.
6869
6970 ## Acknowledgments
7071
71-- [Omarchy](https://github.com/omakub/omakub) - modular architecture approach
72-- [Charmbracelet Gum](https://github.com/charmbracelet/gum) - interactive UI toolkit
72+- [Omarchy](https://github.com/omakub/omakub) — modular architecture approach
73+- [Charmbracelet](https://github.com/charmbracelet) — TUI toolkit (Bubble Tea, Lipgloss, Huh)
@@ -4,25 +4,30 @@
4 4
5 ## What Is ArchUp?5 ## What Is ArchUp?
6 6
7-ArchUp is a minimal Arch Linux installer for Wayland. Boot the ISO, run it, and you get a working barebone system. Hardware is detected automatically and defaults are sensible. Afterward, you can optionally add a desktop environment.7+ArchUp is an opinionated Arch Linux installer. It is a faster, saner alternative to `archinstall` — it makes the hard choices for you (Btrfs, Limine, Chaotic-AUR, sensible defaults) so you can go from ISO to working system in minutes.
8-8+
9-**Includes:**9+Boot the Arch ISO, run it, answer a few questions, reboot. That's it.
10-- Lean system without unnecessary packages10+
11-- Ready-to-use shell environment with modern CLI tools configured and themed11+**What it decides for you:**
12-- CPU optimization (amd_pstate/cpu governor) and automatic GPU driver detection12+- Btrfs with `@` and `@home` subvolumes
13-- Essential libraries and packages (Qt5, GTK4, etc.) for a functional environment13+- Limine bootloader (UEFI only)
14-- Coherent theme applied across all supported applications14+- Chaotic-AUR enabled out of the box
15-- Full customization after installation15+- Plymouth boot splash
16-16+- Snapper for snapshot-based rollbacks
17-**Does not include:**17+- NetworkManager, OpenSSH, zram, firewalld
18-- KDE, GNOME, or other full desktop environments18+
19-- Any attempt to be a standalone distro19+**What you choose:**
20-- Locked-in configurations20+- Disk and optional LUKS2 encryption
21-- Bloated softwares21+- Hostname, user, locale, timezone, keymap
22+- Kernel (linux, linux-lts, linux-zen, linux-hardened, linux-cachyos)
23+- AMD P-State mode (auto-detected per Zen generation)
24+- GPU drivers (auto-detected)
25+- Extra repos (CachyOS, AUR helper)
26+- Dank Linux desktop on first boot (optional)
22 27
23 ## Get Started28 ## Get Started
24 29
25-**Need:** AMD/Intel 64-bit system, UEFI30+**Requirements:** x86\_64, UEFI, Secure Boot disabled
26 31
27 Boot the Arch ISO and run:32 Boot the Arch ISO and run:
28 33
@@ -32,41 +37,37 @@ curl -fsSL https://archup.run/install | bash
32 37
33 Reboot when done.38 Reboot when done.
34 39
35-For development versions:
36-```bash
37-curl -fsSL https://archup.run/install/dev | bash
38-```
39-
40 ## What's Installed40 ## What's Installed
41 41
42-**Core system:**42+**Base system:**
43-- btrfs filesystem, Limine bootloader, Plymouth43+- Btrfs filesystem, Limine bootloader, Plymouth
44-- Kernel selection: linux, linux-lts, or linux-zen44+- Kernel of your choice + matching microcode
45 - GPU drivers and firmware (auto-detected)45 - GPU drivers and firmware (auto-detected)
46-- NetworkManager, OpenSSH, systemd-resolved46+- NetworkManager, OpenSSH, systemd-resolved, zram
47 47
48 **CLI tools:**48 **CLI tools:**
49 - Neovim, Git, sudo, man pages49 - Neovim, Git, sudo, man pages
50 - Modern utilities: fzf, ripgrep, bat, eza, zoxide, starship, btop, yazi50 - Modern utilities: fzf, ripgrep, bat, eza, zoxide, starship, btop, yazi
51-- Build tools: gcc, make, Go, Rust (for AUR packages)51+- Build tools: base-devel, Go, Rust (for AUR)
52 52
53-**System utilities:**53+**First-boot setup (automatic):**
54-- Snapper for snapshots and rollbacks54+- Snapper configured for Btrfs snapshots
55-- Bluetooth and audio configuration55+- firewalld enabled
56-- Firewall (ufw) and power management (TLP)56+- SSH host keys generated
57-- Shell completion and theme system57+- ble.sh and shell tooling installed
58-
59-Run `archup wizard` after installation to add a Wayland compositor with integrated theming. Support will expand as the community contributes.
60 58
61 ## Status59 ## Status
62 60
63-- [x] Barebone installer (functional, testing in progress)61+Active development — tested manually on real hardware.
64-- [x] CLI auto-builds on first boot62+
65-- [ ] Desktop wizard (in progress in [archup-cli](https://github.com/bnema/archup-cli))63+- [x] TUI installer (functional)
64+- [x] LUKS2 encryption support
65+- [x] First-boot systemd service
66+- [ ] Dank Linux desktop (niri/Hyprland) — in progress
66 67
67-Active development. Report bugs with logs.68+Report bugs with logs from `/var/log/archup.log`.
68 69
69 ## Acknowledgments70 ## Acknowledgments
70 71
71-- [Omarchy](https://github.com/omakub/omakub) - modular architecture approach72+- [Omarchy](https://github.com/omakub/omakub) — modular architecture approach
72-- [Charmbracelet Gum](https://github.com/charmbracelet/gum) - interactive UI toolkit73+- [Charmbracelet](https://github.com/charmbracelet) — TUI toolkit (Bubble Tea, Lipgloss, Huh)
D install-bin-dev.sh +0 -131
@@ -1,131 +0,0 @@
1-#!/bin/bash
2-# ArchUp Installer Bootstrap Script - Dev/Pre-release Version
3-# Downloads and runs the latest ArchUp Go installer pre-release
4-#
5-# Usage:
6-# curl -fsSL https://archup.run/install/bin/dev | bash
7-#
8-# Or locally:
9-# ./install-bin-dev.sh # Install latest pre-release
10-# ./install-bin-dev.sh --version v0.4.0-dev # Install specific version
11-
12-set -e
13-
14-# Default to dev mode
15-DEV_MODE=true
16-SPECIFIC_VERSION=""
17-
18-while [[ $# -gt 0 ]]; do
19- case $1 in
20- --version)
21- SPECIFIC_VERSION="$2"
22- shift 2
23- ;;
24- *)
25- echo "Unknown option: $1"
26- echo "Usage: $0 [--version VERSION]"
27- exit 1
28- ;;
29- esac
30-done
31-
32-# Colors for output
33-RED='\033[0;31m'
34-GREEN='\033[0;32m'
35-BLUE='\033[0;34m'
36-YELLOW='\033[0;33m'
37-NC='\033[0m' # No Color
38-
39-info() {
40- echo -e "${BLUE}[INFO]${NC} $1"
41-}
42-
43-success() {
44- echo -e "${GREEN}[OK]${NC} $1"
45-}
46-
47-warning() {
48- echo -e "${YELLOW}[WARN]${NC} $1"
49-}
50-
51-error() {
52- echo -e "${RED}[ERROR]${NC} $1"
53- exit 1
54-}
55-
56-# Check if running on Arch Linux
57-info "Checking system requirements..."
58-if [ ! -f /etc/arch-release ]; then
59- error "This installer must be run on Arch Linux ISO"
60-fi
61-success "Running on Arch Linux"
62-
63-# Check for UEFI mode
64-if [ ! -d /sys/firmware/efi ]; then
65- error "UEFI mode required (legacy BIOS not supported)"
66-fi
67-success "UEFI mode detected"
68-
69-# Check architecture
70-ARCH=$(uname -m)
71-if [ "$ARCH" != "x86_64" ]; then
72- error "Only x86_64 architecture is supported (detected: $ARCH)"
73-fi
74-success "Architecture: $ARCH"
75-
76-# GitHub repository details
77-REPO_OWNER="bnema"
78-REPO_NAME="archup"
79-BINARY_NAME="archup"
80-
81-# Determine which version to download
82-if [ -n "$SPECIFIC_VERSION" ]; then
83- # User specified a version
84- LATEST_TAG="$SPECIFIC_VERSION"
85- info "Using specific version: $LATEST_TAG"
86-else
87- # Get latest pre-release (including dev/rc builds)
88- warning "Dev mode: fetching latest pre-release..."
89- RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases"
90- # Filter for releases where "prerelease": true, then get the first tag_name
91- LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/')
92-
93- if [ -z "$LATEST_TAG" ]; then
94- error "Failed to fetch latest pre-release"
95- fi
96- warning "Latest pre-release: $LATEST_TAG"
97-fi
98-
99-# Download binary
100-BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME"
101-BINARY_PATH="/tmp/$BINARY_NAME"
102-CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt"
103-CHECKSUM_PATH="/tmp/checksums.txt"
104-
105-info "Downloading installer binary..."
106-if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then
107- error "Failed to download installer binary from $BINARY_URL"
108-fi
109-success "Binary downloaded"
110-
111-# Download and verify checksum
112-info "Downloading checksums..."
113-if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then
114- error "Failed to download checksums from $CHECKSUM_URL"
115-fi
116-success "Checksums downloaded"
117-
118-info "Verifying checksum..."
119-cd /tmp
120-if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then
121- error "Checksum verification failed! Binary may be corrupted or tampered with."
122-fi
123-success "Checksum verified"
124-
125-# Make executable
126-chmod +x "$BINARY_PATH"
127-
128-# Run installer
129-info "Launching ArchUp installer..."
130-echo ""
131-exec "$BINARY_PATH" install
@@ -1,131 +0,0 @@
1-#!/bin/bash
2-# ArchUp Installer Bootstrap Script - Dev/Pre-release Version
3-# Downloads and runs the latest ArchUp Go installer pre-release
4-#
5-# Usage:
6-# curl -fsSL https://archup.run/install/bin/dev | bash
7-#
8-# Or locally:
9-# ./install-bin-dev.sh # Install latest pre-release
10-# ./install-bin-dev.sh --version v0.4.0-dev # Install specific version
11-
12-set -e
13-
14-# Default to dev mode
15-DEV_MODE=true
16-SPECIFIC_VERSION=""
17-
18-while [[ $# -gt 0 ]]; do
19- case $1 in
20- --version)
21- SPECIFIC_VERSION="$2"
22- shift 2
23- ;;
24- *)
25- echo "Unknown option: $1"
26- echo "Usage: $0 [--version VERSION]"
27- exit 1
28- ;;
29- esac
30-done
31-
32-# Colors for output
33-RED='\033[0;31m'
34-GREEN='\033[0;32m'
35-BLUE='\033[0;34m'
36-YELLOW='\033[0;33m'
37-NC='\033[0m' # No Color
38-
39-info() {
40- echo -e "${BLUE}[INFO]${NC} $1"
41-}
42-
43-success() {
44- echo -e "${GREEN}[OK]${NC} $1"
45-}
46-
47-warning() {
48- echo -e "${YELLOW}[WARN]${NC} $1"
49-}
50-
51-error() {
52- echo -e "${RED}[ERROR]${NC} $1"
53- exit 1
54-}
55-
56-# Check if running on Arch Linux
57-info "Checking system requirements..."
58-if [ ! -f /etc/arch-release ]; then
59- error "This installer must be run on Arch Linux ISO"
60-fi
61-success "Running on Arch Linux"
62-
63-# Check for UEFI mode
64-if [ ! -d /sys/firmware/efi ]; then
65- error "UEFI mode required (legacy BIOS not supported)"
66-fi
67-success "UEFI mode detected"
68-
69-# Check architecture
70-ARCH=$(uname -m)
71-if [ "$ARCH" != "x86_64" ]; then
72- error "Only x86_64 architecture is supported (detected: $ARCH)"
73-fi
74-success "Architecture: $ARCH"
75-
76-# GitHub repository details
77-REPO_OWNER="bnema"
78-REPO_NAME="archup"
79-BINARY_NAME="archup"
80-
81-# Determine which version to download
82-if [ -n "$SPECIFIC_VERSION" ]; then
83- # User specified a version
84- LATEST_TAG="$SPECIFIC_VERSION"
85- info "Using specific version: $LATEST_TAG"
86-else
87- # Get latest pre-release (including dev/rc builds)
88- warning "Dev mode: fetching latest pre-release..."
89- RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases"
90- # Filter for releases where "prerelease": true, then get the first tag_name
91- LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/')
92-
93- if [ -z "$LATEST_TAG" ]; then
94- error "Failed to fetch latest pre-release"
95- fi
96- warning "Latest pre-release: $LATEST_TAG"
97-fi
98-
99-# Download binary
100-BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME"
101-BINARY_PATH="/tmp/$BINARY_NAME"
102-CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt"
103-CHECKSUM_PATH="/tmp/checksums.txt"
104-
105-info "Downloading installer binary..."
106-if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then
107- error "Failed to download installer binary from $BINARY_URL"
108-fi
109-success "Binary downloaded"
110-
111-# Download and verify checksum
112-info "Downloading checksums..."
113-if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then
114- error "Failed to download checksums from $CHECKSUM_URL"
115-fi
116-success "Checksums downloaded"
117-
118-info "Verifying checksum..."
119-cd /tmp
120-if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then
121- error "Checksum verification failed! Binary may be corrupted or tampered with."
122-fi
123-success "Checksum verified"
124-
125-# Make executable
126-chmod +x "$BINARY_PATH"
127-
128-# Run installer
129-info "Launching ArchUp installer..."
130-echo ""
131-exec "$BINARY_PATH" install
D install-bin.sh +0 -148
@@ -1,148 +0,0 @@
1-#!/bin/bash
2-# ArchUp Installer Bootstrap Script
3-# Downloads and runs the ArchUp Go installer
4-#
5-# Usage:
6-# curl -fsSL https://archup.run/install/bin | bash
7-# curl -fsSL https://archup.run/install/bin | bash -s -- --dev
8-# curl -fsSL https://archup.run/install/bin | bash -s -- --version v0.15.3-dev
9-#
10-# Or locally:
11-# ./install-bin.sh # Install latest stable release
12-# ./install-bin.sh --dev # Install latest pre-release (dev/rc builds)
13-# ./install-bin.sh --version v0.15.3-dev # Install specific version
14-
15-set -e
16-
17-# Parse arguments
18-DEV_MODE=false
19-SPECIFIC_VERSION=""
20-
21-while [[ $# -gt 0 ]]; do
22- case $1 in
23- --dev)
24- DEV_MODE=true
25- shift
26- ;;
27- --version)
28- SPECIFIC_VERSION="$2"
29- shift 2
30- ;;
31- *)
32- echo "Unknown option: $1"
33- echo "Usage: $0 [--dev] [--version VERSION]"
34- exit 1
35- ;;
36- esac
37-done
38-
39-# Colors for output
40-RED='\033[0;31m'
41-GREEN='\033[0;32m'
42-BLUE='\033[0;34m'
43-YELLOW='\033[0;33m'
44-NC='\033[0m' # No Color
45-
46-info() {
47- echo -e "${BLUE}[INFO]${NC} $1"
48-}
49-
50-success() {
51- echo -e "${GREEN}[OK]${NC} $1"
52-}
53-
54-warning() {
55- echo -e "${YELLOW}[WARN]${NC} $1"
56-}
57-
58-error() {
59- echo -e "${RED}[ERROR]${NC} $1"
60- exit 1
61-}
62-
63-# Check if running on Arch Linux
64-info "Checking system requirements..."
65-if [ ! -f /etc/arch-release ]; then
66- error "This installer must be run on Arch Linux ISO"
67-fi
68-success "Running on Arch Linux"
69-
70-# Check for UEFI mode
71-if [ ! -d /sys/firmware/efi ]; then
72- error "UEFI mode required (legacy BIOS not supported)"
73-fi
74-success "UEFI mode detected"
75-
76-# Check architecture
77-ARCH=$(uname -m)
78-if [ "$ARCH" != "x86_64" ]; then
79- error "Only x86_64 architecture is supported (detected: $ARCH)"
80-fi
81-success "Architecture: $ARCH"
82-
83-# GitHub repository details
84-REPO_OWNER="bnema"
85-REPO_NAME="archup"
86-BINARY_NAME="archup"
87-
88-# Determine which version to download
89-if [ -n "$SPECIFIC_VERSION" ]; then
90- # User specified a version
91- LATEST_TAG="$SPECIFIC_VERSION"
92- info "Using specific version: $LATEST_TAG"
93-elif [ "$DEV_MODE" = true ]; then
94- # Get latest pre-release (including dev/rc builds)
95- warning "Dev mode: fetching latest pre-release..."
96- RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases"
97- # Filter for releases where "prerelease": true, then get the first tag_name
98- LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/')
99-
100- if [ -z "$LATEST_TAG" ]; then
101- error "Failed to fetch latest pre-release"
102- fi
103- warning "Latest pre-release: $LATEST_TAG"
104-else
105- # Get latest stable release
106- info "Fetching latest stable release..."
107- LATEST_RELEASE_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest"
108- LATEST_TAG=$(curl -s "$LATEST_RELEASE_URL" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
109-
110- if [ -z "$LATEST_TAG" ]; then
111- error "Failed to fetch latest release tag"
112- fi
113- success "Latest version: $LATEST_TAG"
114-fi
115-
116-# Download binary
117-BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME"
118-BINARY_PATH="/tmp/$BINARY_NAME"
119-CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt"
120-CHECKSUM_PATH="/tmp/checksums.txt"
121-
122-info "Downloading installer binary..."
123-if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then
124- error "Failed to download installer binary from $BINARY_URL"
125-fi
126-success "Binary downloaded"
127-
128-# Download and verify checksum
129-info "Downloading checksums..."
130-if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then
131- error "Failed to download checksums from $CHECKSUM_URL"
132-fi
133-success "Checksums downloaded"
134-
135-info "Verifying checksum..."
136-cd /tmp
137-if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then
138- error "Checksum verification failed! Binary may be corrupted or tampered with."
139-fi
140-success "Checksum verified"
141-
142-# Make executable
143-chmod +x "$BINARY_PATH"
144-
145-# Run installer
146-info "Launching ArchUp installer..."
147-echo ""
148-exec "$BINARY_PATH" install
@@ -1,148 +0,0 @@
1-#!/bin/bash
2-# ArchUp Installer Bootstrap Script
3-# Downloads and runs the ArchUp Go installer
4-#
5-# Usage:
6-# curl -fsSL https://archup.run/install/bin | bash
7-# curl -fsSL https://archup.run/install/bin | bash -s -- --dev
8-# curl -fsSL https://archup.run/install/bin | bash -s -- --version v0.15.3-dev
9-#
10-# Or locally:
11-# ./install-bin.sh # Install latest stable release
12-# ./install-bin.sh --dev # Install latest pre-release (dev/rc builds)
13-# ./install-bin.sh --version v0.15.3-dev # Install specific version
14-
15-set -e
16-
17-# Parse arguments
18-DEV_MODE=false
19-SPECIFIC_VERSION=""
20-
21-while [[ $# -gt 0 ]]; do
22- case $1 in
23- --dev)
24- DEV_MODE=true
25- shift
26- ;;
27- --version)
28- SPECIFIC_VERSION="$2"
29- shift 2
30- ;;
31- *)
32- echo "Unknown option: $1"
33- echo "Usage: $0 [--dev] [--version VERSION]"
34- exit 1
35- ;;
36- esac
37-done
38-
39-# Colors for output
40-RED='\033[0;31m'
41-GREEN='\033[0;32m'
42-BLUE='\033[0;34m'
43-YELLOW='\033[0;33m'
44-NC='\033[0m' # No Color
45-
46-info() {
47- echo -e "${BLUE}[INFO]${NC} $1"
48-}
49-
50-success() {
51- echo -e "${GREEN}[OK]${NC} $1"
52-}
53-
54-warning() {
55- echo -e "${YELLOW}[WARN]${NC} $1"
56-}
57-
58-error() {
59- echo -e "${RED}[ERROR]${NC} $1"
60- exit 1
61-}
62-
63-# Check if running on Arch Linux
64-info "Checking system requirements..."
65-if [ ! -f /etc/arch-release ]; then
66- error "This installer must be run on Arch Linux ISO"
67-fi
68-success "Running on Arch Linux"
69-
70-# Check for UEFI mode
71-if [ ! -d /sys/firmware/efi ]; then
72- error "UEFI mode required (legacy BIOS not supported)"
73-fi
74-success "UEFI mode detected"
75-
76-# Check architecture
77-ARCH=$(uname -m)
78-if [ "$ARCH" != "x86_64" ]; then
79- error "Only x86_64 architecture is supported (detected: $ARCH)"
80-fi
81-success "Architecture: $ARCH"
82-
83-# GitHub repository details
84-REPO_OWNER="bnema"
85-REPO_NAME="archup"
86-BINARY_NAME="archup"
87-
88-# Determine which version to download
89-if [ -n "$SPECIFIC_VERSION" ]; then
90- # User specified a version
91- LATEST_TAG="$SPECIFIC_VERSION"
92- info "Using specific version: $LATEST_TAG"
93-elif [ "$DEV_MODE" = true ]; then
94- # Get latest pre-release (including dev/rc builds)
95- warning "Dev mode: fetching latest pre-release..."
96- RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases"
97- # Filter for releases where "prerelease": true, then get the first tag_name
98- LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/')
99-
100- if [ -z "$LATEST_TAG" ]; then
101- error "Failed to fetch latest pre-release"
102- fi
103- warning "Latest pre-release: $LATEST_TAG"
104-else
105- # Get latest stable release
106- info "Fetching latest stable release..."
107- LATEST_RELEASE_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest"
108- LATEST_TAG=$(curl -s "$LATEST_RELEASE_URL" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
109-
110- if [ -z "$LATEST_TAG" ]; then
111- error "Failed to fetch latest release tag"
112- fi
113- success "Latest version: $LATEST_TAG"
114-fi
115-
116-# Download binary
117-BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME"
118-BINARY_PATH="/tmp/$BINARY_NAME"
119-CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt"
120-CHECKSUM_PATH="/tmp/checksums.txt"
121-
122-info "Downloading installer binary..."
123-if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then
124- error "Failed to download installer binary from $BINARY_URL"
125-fi
126-success "Binary downloaded"
127-
128-# Download and verify checksum
129-info "Downloading checksums..."
130-if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then
131- error "Failed to download checksums from $CHECKSUM_URL"
132-fi
133-success "Checksums downloaded"
134-
135-info "Verifying checksum..."
136-cd /tmp
137-if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then
138- error "Checksum verification failed! Binary may be corrupted or tampered with."
139-fi
140-success "Checksum verified"
141-
142-# Make executable
143-chmod +x "$BINARY_PATH"
144-
145-# Run installer
146-info "Launching ArchUp installer..."
147-echo ""
148-exec "$BINARY_PATH" install
M install.sh +97 -120
@@ -1,132 +1,109 @@
11 #!/bin/bash
2-# ArchUp - Fast, minimal Arch Linux auto-installer
3-# Main installation orchestrator
4-
5-set -Eeo pipefail
6-
7-# Handle help flag FIRST - before any side effects
8-if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
9- cat << 'HELP'
10-Usage: install.sh [OPTIONS]
11-
12-OPTIONS:
13- --cleanup Cleanup before running installation
14- -h, --help Show this help message
15-
16-EXAMPLES:
17- install.sh # Run normal installation
18- install.sh --cleanup # Cleanup then run installation
19- ./cleanup.sh default # Manual cleanup only
20- ./cleanup.sh full # Full cleanup including /mnt wipe
21- ./cleanup.sh diagnostic # Show current system state
22-HELP
23- exit 0
2+# ArchUp Installer Bootstrap
3+# Downloads the ArchUp binary from GitHub Releases and launches the installer.
4+#
5+# Usage:
6+# curl -fsSL https://archup.run/install | bash
7+# curl -fsSL https://archup.run/install | bash -s -- --dev
8+# curl -fsSL https://archup.run/install | bash -s -- --version v0.5.0
9+
10+set -e
11+
12+# Parse arguments
13+DEV_MODE=false
14+SPECIFIC_VERSION=""
15+
16+while [[ $# -gt 0 ]]; do
17+ case $1 in
18+ --dev)
19+ DEV_MODE=true
20+ shift
21+ ;;
22+ --version)
23+ SPECIFIC_VERSION="$2"
24+ shift 2
25+ ;;
26+ *)
27+ echo "Unknown option: $1"
28+ echo "Usage: $0 [--dev] [--version VERSION]"
29+ exit 1
30+ ;;
31+ esac
32+done
33+
34+RED='\033[0;31m'
35+GREEN='\033[0;32m'
36+BLUE='\033[0;34m'
37+YELLOW='\033[0;33m'
38+NC='\033[0m'
39+
40+info() { echo -e "${BLUE}[INFO]${NC} $1"; }
41+success() { echo -e "${GREEN}[OK]${NC} $1"; }
42+warning() { echo -e "${YELLOW}[WARN]${NC} $1"; }
43+error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
44+
45+# Preflight checks
46+info "Checking system requirements..."
47+
48+if [ ! -f /etc/arch-release ]; then
49+ error "Must be run from the Arch Linux ISO"
2450 fi
51+success "Arch Linux detected"
2552
26-# Export global paths (needed for re-exec)
27-export ARCHUP_PATH="${ARCHUP_PATH:-$HOME/.local/share/archup}"
28-export ARCHUP_INSTALL="$ARCHUP_PATH/install"
29-
30-# If stdin is not a TTY (piped from curl), save and re-exec with TTY
31-if [ ! -t 0 ]; then
32- # Save script to proper location
33- mkdir -p "$ARCHUP_PATH"
34- INSTALL_SCRIPT="$ARCHUP_PATH/install.sh"
35- cat > "$INSTALL_SCRIPT"
36- chmod +x "$INSTALL_SCRIPT"
37- # Re-exec with TTY connected
38- exec < /dev/tty "$INSTALL_SCRIPT" "$@"
53+if [ ! -d /sys/firmware/efi ]; then
54+ error "UEFI mode required (legacy BIOS not supported)"
3955 fi
56+success "UEFI mode detected"
4057
41-export ARCHUP_INSTALL_LOG_FILE="/var/log/archup-install.log"
42-export ARCHUP_INSTALL_CONFIG="/var/log/archup-install.conf"
43-export ARCHUP_REPO_URL="${ARCHUP_REPO_URL:-https://github.com/bnema/archup}"
44-export ARCHUP_RAW_URL="${ARCHUP_RAW_URL:-https://raw.githubusercontent.com/bnema/archup/main}"
45-
46-# Bootstrap FIRST: Install gum and jq (required for download script)
47-if [ ! -d "$ARCHUP_INSTALL" ]; then
48- # First time running from curl, need to download bootstrap
49- mkdir -p "$ARCHUP_INSTALL"
50- curl -sL "$ARCHUP_RAW_URL/install/bootstrap.sh" -o "$ARCHUP_INSTALL/bootstrap.sh"
51- chmod +x "$ARCHUP_INSTALL/bootstrap.sh"
58+ARCH=$(uname -m)
59+if [ "$ARCH" != "x86_64" ]; then
60+ error "Only x86_64 is supported (detected: $ARCH)"
5261 fi
53-source "$ARCHUP_INSTALL/bootstrap.sh"
54-
55-# Download installer files if not present (for curl-based installation)
56-if [ ! -f "$ARCHUP_INSTALL/helpers/all.sh" ]; then
57- # Download the download helper
58- mkdir -p "$ARCHUP_INSTALL/helpers"
59- curl -sL "$ARCHUP_RAW_URL/install/helpers/download.sh" -o "$ARCHUP_INSTALL/helpers/download.sh"
60- chmod +x "$ARCHUP_INSTALL/helpers/download.sh"
61-
62- # Run the download script (gum is now available)
63- source "$ARCHUP_INSTALL/helpers/download.sh"
64- download_archup_files
65-fi
66-
67-# Source all helper utilities (now safe to use gum)
68-source "$ARCHUP_INSTALL/helpers/all.sh"
69-
70-# Handle cleanup flag (after helpers are available)
71-if [ "$1" = "--cleanup" ]; then
72- echo "Running cleanup before installation..."
73- # Run cleanup in subshell to avoid inheriting set -Eeo pipefail
74- bash "$ARCHUP_INSTALL/helpers/cleanup.sh" default
62+success "Architecture: $ARCH"
63+
64+REPO_OWNER="bnema"
65+REPO_NAME="archup"
66+BINARY_NAME="archup"
67+
68+# Resolve version to download
69+if [ -n "$SPECIFIC_VERSION" ]; then
70+ LATEST_TAG="$SPECIFIC_VERSION"
71+ info "Using version: $LATEST_TAG"
72+elif [ "$DEV_MODE" = true ]; then
73+ warning "Dev mode: fetching latest pre-release..."
74+ LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" \
75+ | grep -B 10 '"prerelease": true' \
76+ | grep '"tag_name":' \
77+ | head -n 1 \
78+ | sed -E 's/.*"([^"]+)".*/\1/')
79+ [ -z "$LATEST_TAG" ] && error "Failed to fetch latest pre-release"
80+ warning "Pre-release: $LATEST_TAG"
81+else
82+ info "Fetching latest stable release..."
83+ LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" \
84+ | grep '"tag_name":' \
85+ | sed -E 's/.*"([^"]+)".*/\1/')
86+ [ -z "$LATEST_TAG" ] && error "Failed to fetch latest release"
87+ success "Version: $LATEST_TAG"
7588 fi
7689
77-# Display logo
78-clear_logo
79-
80-# ============================================================
81-# PHASE 1: BAREBONE INSTALLER - BASIC
82-# ============================================================
83-
84-# Initialize log file
85-start_install_log
86-
87-# Preflight validation (interactive prompts, no log monitor running)
88-source "$ARCHUP_INSTALL/preflight/all.sh"
89-
90-# Start log monitor ONCE - it will run continuously during all work phases
91-gum style --foreground 6 --padding "1 0 0 $PADDING_LEFT" "Installing..."
92-echo
93-start_log_output
94-
95-# Partitioning (auto GPT, ext4, no encryption)
96-source "$ARCHUP_INSTALL/partitioning/all.sh"
90+BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME"
91+CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt"
92+BINARY_PATH="/tmp/$BINARY_NAME"
93+CHECKSUM_PATH="/tmp/archup-checksums.txt"
9794
98-# Base system installation
99-source "$ARCHUP_INSTALL/base/all.sh"
95+info "Downloading binary..."
96+curl -fsSL "$BINARY_URL" -o "$BINARY_PATH" || error "Failed to download binary from $BINARY_URL"
97+success "Binary downloaded"
10098
101-# System configuration
102-source "$ARCHUP_INSTALL/config/all.sh"
99+info "Verifying checksum..."
100+curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH" || error "Failed to download checksums"
101+cd /tmp
102+sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null || error "Checksum verification failed"
103+success "Checksum verified"
103104
104-# Bootloader installation
105-source "$ARCHUP_INSTALL/boot/all.sh"
105+chmod +x "$BINARY_PATH"
106106
107-# Repository setup (AUR + Chaotic)
108-source "$ARCHUP_INSTALL/repos/all.sh"
109-
110-# Post-install (boot logo, snapper, unmount drives)
111-source "$ARCHUP_INSTALL/post-install/all.sh"
112-
113-# Stop logging and cleanup
114-stop_install_log
115-
116-gum style --foreground 2 --padding "1 0 1 $PADDING_LEFT" "ArchUp barebone installation complete!"
117-echo
118-
119-gum style --foreground 6 --padding "0 0 0 $PADDING_LEFT" "Next steps:"
120-gum style --padding "0 0 0 $PADDING_LEFT" " 1. Reboot the system"
121-gum style --padding "0 0 0 $PADDING_LEFT" " 2. After login, run: archup wizard"
122-gum style --padding "0 0 1 $PADDING_LEFT" " 3. Select your compositor and packages"
123-echo
124-
125-CHOICE=$(gum choose --header "What would you like to do?" --header.padding "0 0 0 $PADDING_LEFT" "Reboot" "Close")
126-
127-if [ "$CHOICE" = "Reboot" ]; then
128- gum style --padding "0 0 1 $PADDING_LEFT" "Rebooting system..."
129- reboot
130-else
131- gum style --padding "0 0 1 $PADDING_LEFT" "Installation complete. You can manually reboot when ready."
132-fi
107+info "Launching ArchUp..."
108+echo ""
109+exec "$BINARY_PATH" install
@@ -1,132 +1,109 @@
1 #!/bin/bash1 #!/bin/bash
2-# ArchUp - Fast, minimal Arch Linux auto-installer2+# ArchUp Installer Bootstrap
3-# Main installation orchestrator3+# Downloads the ArchUp binary from GitHub Releases and launches the installer.
4-4+#
5-set -Eeo pipefail5+# Usage:
6-6+# curl -fsSL https://archup.run/install | bash
7-# Handle help flag FIRST - before any side effects7+# curl -fsSL https://archup.run/install | bash -s -- --dev
8-if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then8+# curl -fsSL https://archup.run/install | bash -s -- --version v0.5.0
9- cat << 'HELP'9+
10-Usage: install.sh [OPTIONS]10+set -e
11-11+
12-OPTIONS:12+# Parse arguments
13- --cleanup Cleanup before running installation13+DEV_MODE=false
14- -h, --help Show this help message14+SPECIFIC_VERSION=""
15-15+
16-EXAMPLES:16+while [[ $# -gt 0 ]]; do
17- install.sh # Run normal installation17+ case $1 in
18- install.sh --cleanup # Cleanup then run installation18+ --dev)
19- ./cleanup.sh default # Manual cleanup only19+ DEV_MODE=true
20- ./cleanup.sh full # Full cleanup including /mnt wipe20+ shift
21- ./cleanup.sh diagnostic # Show current system state21+ ;;
22-HELP22+ --version)
23- exit 023+ SPECIFIC_VERSION="$2"
24+ shift 2
25+ ;;
26+ *)
27+ echo "Unknown option: $1"
28+ echo "Usage: $0 [--dev] [--version VERSION]"
29+ exit 1
30+ ;;
31+ esac
32+done
33+
34+RED='\033[0;31m'
35+GREEN='\033[0;32m'
36+BLUE='\033[0;34m'
37+YELLOW='\033[0;33m'
38+NC='\033[0m'
39+
40+info() { echo -e "${BLUE}[INFO]${NC} $1"; }
41+success() { echo -e "${GREEN}[OK]${NC} $1"; }
42+warning() { echo -e "${YELLOW}[WARN]${NC} $1"; }
43+error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
44+
45+# Preflight checks
46+info "Checking system requirements..."
47+
48+if [ ! -f /etc/arch-release ]; then
49+ error "Must be run from the Arch Linux ISO"
24 fi50 fi
51+success "Arch Linux detected"
25 52
26-# Export global paths (needed for re-exec)53+if [ ! -d /sys/firmware/efi ]; then
27-export ARCHUP_PATH="${ARCHUP_PATH:-$HOME/.local/share/archup}"54+ error "UEFI mode required (legacy BIOS not supported)"
28-export ARCHUP_INSTALL="$ARCHUP_PATH/install"
29-
30-# If stdin is not a TTY (piped from curl), save and re-exec with TTY
31-if [ ! -t 0 ]; then
32- # Save script to proper location
33- mkdir -p "$ARCHUP_PATH"
34- INSTALL_SCRIPT="$ARCHUP_PATH/install.sh"
35- cat > "$INSTALL_SCRIPT"
36- chmod +x "$INSTALL_SCRIPT"
37- # Re-exec with TTY connected
38- exec < /dev/tty "$INSTALL_SCRIPT" "$@"
39 fi55 fi
56+success "UEFI mode detected"
40 57
41-export ARCHUP_INSTALL_LOG_FILE="/var/log/archup-install.log"58+ARCH=$(uname -m)
42-export ARCHUP_INSTALL_CONFIG="/var/log/archup-install.conf"59+if [ "$ARCH" != "x86_64" ]; then
43-export ARCHUP_REPO_URL="${ARCHUP_REPO_URL:-https://github.com/bnema/archup}"60+ error "Only x86_64 is supported (detected: $ARCH)"
44-export ARCHUP_RAW_URL="${ARCHUP_RAW_URL:-https://raw.githubusercontent.com/bnema/archup/main}"
45-
46-# Bootstrap FIRST: Install gum and jq (required for download script)
47-if [ ! -d "$ARCHUP_INSTALL" ]; then
48- # First time running from curl, need to download bootstrap
49- mkdir -p "$ARCHUP_INSTALL"
50- curl -sL "$ARCHUP_RAW_URL/install/bootstrap.sh" -o "$ARCHUP_INSTALL/bootstrap.sh"
51- chmod +x "$ARCHUP_INSTALL/bootstrap.sh"
52 fi61 fi
53-source "$ARCHUP_INSTALL/bootstrap.sh"62+success "Architecture: $ARCH"
54-63+
55-# Download installer files if not present (for curl-based installation)64+REPO_OWNER="bnema"
56-if [ ! -f "$ARCHUP_INSTALL/helpers/all.sh" ]; then65+REPO_NAME="archup"
57- # Download the download helper66+BINARY_NAME="archup"
58- mkdir -p "$ARCHUP_INSTALL/helpers"67+
59- curl -sL "$ARCHUP_RAW_URL/install/helpers/download.sh" -o "$ARCHUP_INSTALL/helpers/download.sh"68+# Resolve version to download
60- chmod +x "$ARCHUP_INSTALL/helpers/download.sh"69+if [ -n "$SPECIFIC_VERSION" ]; then
61-70+ LATEST_TAG="$SPECIFIC_VERSION"
62- # Run the download script (gum is now available)71+ info "Using version: $LATEST_TAG"
63- source "$ARCHUP_INSTALL/helpers/download.sh"72+elif [ "$DEV_MODE" = true ]; then
64- download_archup_files73+ warning "Dev mode: fetching latest pre-release..."
65-fi74+ LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" \
66-75+ | grep -B 10 '"prerelease": true' \
67-# Source all helper utilities (now safe to use gum)76+ | grep '"tag_name":' \
68-source "$ARCHUP_INSTALL/helpers/all.sh"77+ | head -n 1 \
69-78+ | sed -E 's/.*"([^"]+)".*/\1/')
70-# Handle cleanup flag (after helpers are available)79+ [ -z "$LATEST_TAG" ] && error "Failed to fetch latest pre-release"
71-if [ "$1" = "--cleanup" ]; then80+ warning "Pre-release: $LATEST_TAG"
72- echo "Running cleanup before installation..."81+else
73- # Run cleanup in subshell to avoid inheriting set -Eeo pipefail82+ info "Fetching latest stable release..."
74- bash "$ARCHUP_INSTALL/helpers/cleanup.sh" default83+ LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" \
84+ | grep '"tag_name":' \
85+ | sed -E 's/.*"([^"]+)".*/\1/')
86+ [ -z "$LATEST_TAG" ] && error "Failed to fetch latest release"
87+ success "Version: $LATEST_TAG"
75 fi88 fi
76 89
77-# Display logo90+BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME"
78-clear_logo91+CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt"
79-92+BINARY_PATH="/tmp/$BINARY_NAME"
80-# ============================================================93+CHECKSUM_PATH="/tmp/archup-checksums.txt"
81-# PHASE 1: BAREBONE INSTALLER - BASIC
82-# ============================================================
83-
84-# Initialize log file
85-start_install_log
86-
87-# Preflight validation (interactive prompts, no log monitor running)
88-source "$ARCHUP_INSTALL/preflight/all.sh"
89-
90-# Start log monitor ONCE - it will run continuously during all work phases
91-gum style --foreground 6 --padding "1 0 0 $PADDING_LEFT" "Installing..."
92-echo
93-start_log_output
94-
95-# Partitioning (auto GPT, ext4, no encryption)
96-source "$ARCHUP_INSTALL/partitioning/all.sh"
97 94
98-# Base system installation95+info "Downloading binary..."
99-source "$ARCHUP_INSTALL/base/all.sh"96+curl -fsSL "$BINARY_URL" -o "$BINARY_PATH" || error "Failed to download binary from $BINARY_URL"
97+success "Binary downloaded"
100 98
101-# System configuration99+info "Verifying checksum..."
102-source "$ARCHUP_INSTALL/config/all.sh"100+curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH" || error "Failed to download checksums"
101+cd /tmp
102+sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null || error "Checksum verification failed"
103+success "Checksum verified"
103 104
104-# Bootloader installation105+chmod +x "$BINARY_PATH"
105-source "$ARCHUP_INSTALL/boot/all.sh"
106 106
107-# Repository setup (AUR + Chaotic)107+info "Launching ArchUp..."
108-source "$ARCHUP_INSTALL/repos/all.sh"108+echo ""
109-109+exec "$BINARY_PATH" install
110-# Post-install (boot logo, snapper, unmount drives)
111-source "$ARCHUP_INSTALL/post-install/all.sh"
112-
113-# Stop logging and cleanup
114-stop_install_log
115-
116-gum style --foreground 2 --padding "1 0 1 $PADDING_LEFT" "ArchUp barebone installation complete!"
117-echo
118-
119-gum style --foreground 6 --padding "0 0 0 $PADDING_LEFT" "Next steps:"
120-gum style --padding "0 0 0 $PADDING_LEFT" " 1. Reboot the system"
121-gum style --padding "0 0 0 $PADDING_LEFT" " 2. After login, run: archup wizard"
122-gum style --padding "0 0 1 $PADDING_LEFT" " 3. Select your compositor and packages"
123-echo
124-
125-CHOICE=$(gum choose --header "What would you like to do?" --header.padding "0 0 0 $PADDING_LEFT" "Reboot" "Close")
126-
127-if [ "$CHOICE" = "Reboot" ]; then
128- gum style --padding "0 0 1 $PADDING_LEFT" "Rebooting system..."
129- reboot
130-else
131- gum style --padding "0 0 1 $PADDING_LEFT" "Installation complete. You can manually reboot when ready."
132-fi
M install/mandatory/post-boot/blesh.sh +1 -1
@@ -5,7 +5,7 @@
55 set -e
66
77 # Get the username from the system
8-USERNAME=$(ls /home | head -1)
8+USERNAME=$(find /home -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | head -1)
99
1010 if [[ -z "${USERNAME}" ]]; then
1111 echo "ERROR: Could not find user for ble.sh installation"
@@ -5,7 +5,7 @@
5 set -e5 set -e
6 6
7 # Get the username from the system7 # Get the username from the system
8-USERNAME=$(ls /home | head -1)8+USERNAME=$(find /home -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | head -1)
9 9
10 if [[ -z "${USERNAME}" ]]; then10 if [[ -z "${USERNAME}" ]]; then
11 echo "ERROR: Could not find user for ble.sh installation"11 echo "ERROR: Could not find user for ble.sh installation"

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 0

    ↑↓ moveenter openesc close