7 Commits

Author SHA1 Message Date
MDietermann
897dc424dc Updated Gitignore 2026-04-13 17:40:22 +02:00
MDietermann
9c3cdbc90f Updated Gitignore 2026-04-13 17:39:18 +02:00
MDietermann
f53663298e fix(wokwi): add serial monitor config and USB_SERIAL_JTAG for ESP32-S3
- Add serialMonitor display config to all diagram templates
- Set USB_SERIAL_JTAG attr on ESP32-S3 for built-in USB serial
- Add TX/RX → $serialMonitor wiring for ESP32 (UART-based serial)
- Remove disconnected breadboard parts (wired directly to MCU pins)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:40:42 +02:00
MDietermann
33f1112bf8 fix(renode): wokwi-cli releases are plain binaries, not tarballs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:27:07 +02:00
MDietermann
9bec4660f6 feat: add Wokwi CLI for visual breadboard simulation
- Install wokwi-cli binary from GitHub releases
- Generate wokwi.toml and board-specific diagram.json in arduino-new
  with a button + LED breadboard layout for each supported board
- Add <leader>aw keybinding in nvim to run Wokwi simulation
- Diagram templates for: uno, mega, nano, esp32, esp32s3 (+ default)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:05:24 +02:00
MDietermann
9c38a8414e fix(neovim): only remove lspconfig config, keep conform and other starter plugins
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 15:27:06 +02:00
MDietermann
b512d41dc8 feat: add Renode emulator, nvim-dap debugging, and backup collision fix
- Add Renode installation (AUR/deb) with arduino-sim helper script
  supporting STM32F4, RP2040, and nRF52840 (USB HID) platforms
- Add nvim-dap + nvim-dap-ui with GDB remote adapter for Renode debugging
- Add debug keybindings under <leader>d prefix
- Fix backup_config() path collisions when multiple sources share a
  basename (e.g. ~/.config/nvim and ~/.local/share/nvim)
- Strip NvChad starter's nvim-lspconfig block that conflicts with
  native vim.lsp.config, preserving configs/lazy.lua
- Update step counts from 11 to 12 (TOTAL_STEPS 12→13, 13→14 on WSL)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 15:23:57 +02:00
14 changed files with 382 additions and 21 deletions

3
.gitignore vendored
View File

@@ -1 +1,2 @@
.idea
.idea
WokwiKey.txt

View File

@@ -82,6 +82,7 @@ source "$SCRIPT_DIR/lib/zellij.sh"
source "$SCRIPT_DIR/lib/neovim.sh"
source "$SCRIPT_DIR/lib/yazi.sh"
source "$SCRIPT_DIR/lib/arduino.sh"
source "$SCRIPT_DIR/lib/renode.sh"
source "$SCRIPT_DIR/lib/git.sh"
source "$SCRIPT_DIR/lib/scaffold.sh"
source "$SCRIPT_DIR/lib/shell-config.sh"
@@ -104,6 +105,9 @@ echo " arduino-new my-project uno # scaffold a project"
echo " adev # launch Arduino workspace"
echo " <leader>av # compile in Neovim"
echo " <leader>au # upload in Neovim"
echo " wokwi-cli . # simulate with Wokwi (visual)"
echo " arduino-sim build/fw.elf # simulate with Renode (GDB)"
echo " <leader>ds # attach debugger to Renode"
echo " theme # switch colorscheme"
echo ""
warn "A reboot is recommended to apply all changes (shell, groups, PATH)."

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 7: Arduino CLI + board cores
step "9/11 — Installing Arduino CLI + board cores"
step "9/12 — Installing Arduino CLI + board cores"
if $IS_ARCH; then
$PKG_INSTALL arduino-cli

View File

@@ -13,7 +13,7 @@ NC='\033[0m'
VERBOSE=true
LOG_FILE="/tmp/archduino-install.log"
CURRENT_STEP=0
TOTAL_STEPS=12
TOTAL_STEPS=13
info() { echo -e "${GREEN}[✓]${NC} $1"; }
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
@@ -39,7 +39,7 @@ draw_progress() {
}
begin_quiet_mode() {
$IS_WSL && TOTAL_STEPS=13
$IS_WSL && TOTAL_STEPS=14
: >"$LOG_FILE"
# Save real terminal to fd 3/4, redirect everything else to log
@@ -82,9 +82,12 @@ BACKUP_DIR="$HOME/.config/archduino/backups/$(date +%Y%m%d_%H%M%S)"
backup_config() {
local src="$1"
[[ ! -e "$src" ]] && return 0
mkdir -p "$BACKUP_DIR"
cp -a "$src" "$BACKUP_DIR/"
info "Backed up $(basename "$src") → $BACKUP_DIR/"
# Use parent path to avoid collisions when different sources share a basename
# e.g. ~/.config/nvim and ~/.local/share/nvim both have basename "nvim"
local dest="$BACKUP_DIR${src#"$HOME"}"
mkdir -p "$(dirname "$dest")"
cp -a "$src" "$dest"
info "Backed up ${src/#"$HOME"/\~} → ${dest/#"$HOME"/\~}"
}
# ── TLS workaround ───────────────────────────────────────────────

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 2: Nerd Font installation
step "2/11 — Installing Nerd Font"
step "2/12 — Installing Nerd Font"
FONT_DIR="$HOME/.local/share/fonts/NerdFonts"
FONT_NAME="JetBrainsMono"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 8: Git + Lazygit
step "10/11 — Setting up Git + Lazygit"
step "11/12 — Setting up Git + Lazygit"
if $IS_ARCH; then
$PKG_INSTALL lazygit

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Steps 5+6: Neovim + NvChad
step "6/11 — Installing Neovim (latest)"
step "6/12 — Installing Neovim (latest)"
NVIM_NEEDED=true
if command -v nvim &>/dev/null; then
@@ -21,7 +21,7 @@ if $NVIM_NEEDED; then
info "Neovim installed: $(nvim --version | head -1)"
fi
step "7/11 — Setting up NvChad"
step "7/12 — Setting up NvChad"
NVIM_CFG="$HOME/.config/nvim"
NVCHAD_FRESH=false
@@ -29,7 +29,7 @@ MIGRATED_PLUGINS_DIR="/tmp/archduino-migrated-plugins"
rm -rf "$MIGRATED_PLUGINS_DIR"
# Files managed by Archduino or LazyVim-specific — skip during migration
SKIP_PLUGINS="gruvbox.lua|theme.lua|lsp.lua|arduino.lua|lspconfig.lua"
SKIP_PLUGINS="gruvbox.lua|theme.lua|lsp.lua|arduino.lua|lspconfig.lua|dap.lua"
# ── Detect existing config ──────────────────────────────────────
if [[ -d "$NVIM_CFG/lua" ]]; then
@@ -94,6 +94,10 @@ if $NVCHAD_FRESH; then
info "NvChad starter cloned"
fi
# ── Strip starter's nvim-lspconfig block (we use native vim.lsp) ─
sed -i '/neovim\/nvim-lspconfig/,/},/d' "$NVIM_CFG/lua/plugins/init.lua"
rm -f "$NVIM_CFG/lua/configs/lspconfig.lua"
# ── Restore migrated plugins ─────────────────────────────────────
if [[ -d "$MIGRATED_PLUGINS_DIR" ]] && ls "$MIGRATED_PLUGINS_DIR"/*.lua &>/dev/null; then
mkdir -p "$NVIM_CFG/lua/plugins"
@@ -165,8 +169,67 @@ vim.lsp.enable("clangd")
return {}
LUA
# Clean up legacy configs/lspconfig.lua if present
rm -f "$NVIM_CFG/lua/configs/lspconfig.lua"
# ── DAP (debug adapter) — for Renode GDB remote debugging ──────
cat >"$NVIM_CFG/lua/plugins/dap.lua" <<'LUA'
return {
{
"mfussenegger/nvim-dap",
keys = { "<leader>d" },
config = function()
local dap = require("dap")
-- GDB remote adapter (connects to Renode's GDB server)
dap.adapters.gdb_remote = {
type = "executable",
command = vim.fn.executable("arm-none-eabi-gdb") == 1
and "arm-none-eabi-gdb"
or "gdb-multiarch",
args = { "-i", "dap" },
}
-- Default debug configurations for Arduino/embedded
dap.configurations.c = {
{
name = "Attach to Renode (GDB :3333)",
type = "gdb_remote",
request = "attach",
target = "localhost:3333",
cwd = "${workspaceFolder}",
program = function()
return vim.fn.input("ELF path: ", vim.fn.getcwd() .. "/build/", "file")
end,
},
}
dap.configurations.cpp = dap.configurations.c
dap.configurations.arduino = dap.configurations.c
-- Breakpoint signs
vim.fn.sign_define("DapBreakpoint", { text = "●", texthl = "DiagnosticError" })
vim.fn.sign_define("DapStopped", { text = "▶", texthl = "DiagnosticOk", linehl = "DiffAdd" })
end,
},
{
"rcarriga/nvim-dap-ui",
dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" },
keys = { "<leader>du" },
config = function()
local dapui = require("dapui")
dapui.setup()
-- Auto open/close UI on debug sessions
local dap = require("dap")
dap.listeners.after.event_initialized["dapui_config"] = function() dapui.open() end
dap.listeners.before.event_terminated["dapui_config"] = function() dapui.close() end
dap.listeners.before.event_exited["dapui_config"] = function() dapui.close() end
end,
},
{
"nvim-neotest/nvim-nio",
lazy = true,
},
}
LUA
# ── Keymaps ─────────────────────────────────────────────────────
cat >"$NVIM_CFG/lua/mappings.lua" <<'LUA'
@@ -180,6 +243,16 @@ map("n", "<leader>av", "<cmd>ArduinoVerify<cr>", { desc = "Arduino Verify (compi
map("n", "<leader>au", "<cmd>ArduinoUpload<cr>", { desc = "Arduino Upload" })
map("n", "<leader>as", "<cmd>ArduinoSerial<cr>", { desc = "Arduino Serial Monitor" })
map("n", "<leader>ai", "<cmd>ArduinoInfo<cr>", { desc = "Arduino Board Info" })
map("n", "<leader>aw", "<cmd>!wokwi-cli .<cr>", { desc = "Arduino Wokwi Simulate" })
-- Debug (DAP)
map("n", "<leader>ds", function() require("dap").continue() end, { desc = "Debug Start/Continue" })
map("n", "<leader>db", function() require("dap").toggle_breakpoint() end, { desc = "Debug Toggle Breakpoint" })
map("n", "<leader>dn", function() require("dap").step_over() end, { desc = "Debug Step Over" })
map("n", "<leader>di", function() require("dap").step_into() end, { desc = "Debug Step Into" })
map("n", "<leader>do", function() require("dap").step_out() end, { desc = "Debug Step Out" })
map("n", "<leader>dx", function() require("dap").terminate() end, { desc = "Debug Terminate" })
map("n", "<leader>du", function() require("dapui").toggle() end, { desc = "Debug UI Toggle" })
LUA
info "NvChad configured ($THEME_DISPLAY_NAME + Arduino + LSP)"
info "NvChad configured ($THEME_DISPLAY_NAME + Arduino + LSP + DAP)"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 1: Base packages
step "1/11 — Installing base packages"
step "1/12 — Installing base packages"
if $IS_ARCH; then
sudo pacman -Syu --noconfirm

116
lib/renode.sh Normal file
View File

@@ -0,0 +1,116 @@
#!/bin/bash
# Step 10: Renode emulator for Arduino simulation with USB HID support
step "10/12 — Installing Renode emulator"
# gdb-multiarch is needed for nvim-dap to connect to Renode's GDB server
if $IS_ARCH; then
if ! command -v renode &>/dev/null; then
info "Installing Renode from AUR..."
yay -S --needed --noconfirm renode-bin
else
info "Renode already installed"
fi
$PKG_INSTALL arm-none-eabi-gdb
else
if ! command -v renode &>/dev/null; then
info "Installing Renode..."
RENODE_VERSION=$(curl -ks "https://api.github.com/repos/renode/renode/releases/latest" | jq -r '.tag_name' | sed 's/^v//')
curl -ksSLo /tmp/renode.deb "https://github.com/renode/renode/releases/download/v${RENODE_VERSION}/renode_${RENODE_VERSION}_amd64.deb"
sudo apt install -y /tmp/renode.deb
rm -f /tmp/renode.deb
else
info "Renode already installed"
fi
$PKG_INSTALL gdb-multiarch
fi
info "Renode installed: $(renode --version 2>/dev/null | head -1 || echo 'OK')"
# ── Renode helper script ─────────────────────────────────────────
# Provides a quick way to launch Renode with a GDB server for a firmware ELF
cat >~/.local/bin/arduino-sim <<'SIMSCRIPT'
#!/bin/bash
set -euo pipefail
usage() {
echo "Usage: arduino-sim <firmware.elf> [platform]"
echo ""
echo "Launch Renode with a GDB server for debugging firmware."
echo "Connect nvim-dap or gdb to localhost:3333"
echo ""
echo "Platforms:"
echo " stm32f4 STM32F4 Discovery (default)"
echo " rp2040 Raspberry Pi Pico"
echo " nrf52840 nRF52840 (USB HID capable)"
echo ""
echo "Example:"
echo " arduino-sim build/firmware.elf nrf52840"
exit 1
}
[[ $# -lt 1 ]] && usage
ELF="$1"
PLATFORM="${2:-stm32f4}"
[[ ! -f "$ELF" ]] && echo "Error: $ELF not found" && exit 1
# Map platform to Renode machine definition
case "$PLATFORM" in
stm32f4)
RENODE_PLATFORM="platforms/boards/stm32f4_discovery.repl"
MACHINE="STM32F4_Discovery"
;;
rp2040)
RENODE_PLATFORM="platforms/cpus/rp2040.repl"
MACHINE="RP2040"
;;
nrf52840)
RENODE_PLATFORM="platforms/cpus/nrf52840.repl"
MACHINE="nRF52840"
;;
*)
echo "Unknown platform: $PLATFORM"
usage
;;
esac
# Generate a temporary Renode script
RESC=$(mktemp /tmp/renode-XXXXXX.resc)
cat >"$RESC" <<EOF
using sysbus
mach create "$MACHINE"
machine LoadPlatformDescription @$RENODE_PLATFORM
sysbus LoadELF @$(realpath "$ELF")
machine StartGdbServer 3333
showAnalyzer sysbus.uart0 Antmicro.Renode.Analyzers.LoggingUartAnalyzer
start
EOF
echo "Starting Renode ($MACHINE) with GDB server on :3333"
echo "Connect debugger: nvim → <leader>ds or gdb → target remote :3333"
echo ""
renode --disable-xwt "$RESC"
rm -f "$RESC"
SIMSCRIPT
chmod +x ~/.local/bin/arduino-sim
info "Renode simulation helper created (arduino-sim)"
# ── Wokwi CLI (visual breadboard simulation) ────────────────────
if ! command -v wokwi-cli &>/dev/null; then
info "Installing Wokwi CLI..."
WOKWI_VERSION=$(curl -ks "https://api.github.com/repos/wokwi/wokwi-cli/releases/latest" | jq -r '.tag_name' | sed 's/^v//')
curl -ksSLo /tmp/wokwi-cli "https://github.com/wokwi/wokwi-cli/releases/download/v${WOKWI_VERSION}/wokwi-cli-linuxstatic-x64"
sudo install -m 755 /tmp/wokwi-cli /usr/local/bin/wokwi-cli
rm -f /tmp/wokwi-cli
else
info "Wokwi CLI already installed"
fi
info "Wokwi CLI installed (set WOKWI_CLI_TOKEN to enable — get one at https://wokwi.com/dashboard/ci)"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 9: Project scaffolding tool + templates
step "11/11 — Creating project scaffolding tool"
step "12/12 — Creating project scaffolding tool"
mkdir -p ~/.local/bin ~/.config/archduino/templates
@@ -67,9 +67,38 @@ build/
*.bin
EOF
# ── Wokwi simulation config ─────────────────────────────────────
# Determine firmware path format based on board family
case "$BOARD" in
esp32|esp32s3|esp8266)
WOKWI_FW="build/$PROJECT.ino.merged.bin"
;;
*)
WOKWI_FW="build/$PROJECT.ino.hex"
;;
esac
cat > wokwi.toml <<EOF
[wokwi]
version = 1
firmware = "$WOKWI_FW"
elf = "build/$PROJECT.ino.elf"
EOF
# Board-specific diagram with button + LED on breadboard
DIAGRAM_TEMPLATE="$TEMPLATE_DIR/diagram-$BOARD.json"
if [[ -f "$DIAGRAM_TEMPLATE" ]]; then
cp "$DIAGRAM_TEMPLATE" diagram.json
else
cp "$TEMPLATE_DIR/diagram-default.json" diagram.json
fi
git init -q
echo "✓ Created '$PROJECT' for $BOARD ($FQBN)"
echo " cd $PROJECT && nvim $PROJECT.ino"
echo ""
echo " Simulate: arduino-cli compile --fqbn $FQBN --output-dir build ."
echo " wokwi-cli ."
SCAFFOLD
chmod +x ~/.local/bin/arduino-new
@@ -135,6 +164,141 @@ void loop() {
delay(1000);
}
INO
# ── Wokwi diagram templates ──────────────────────────────────────
cat >~/.config/archduino/templates/diagram-default.json <<'JSON'
{
"version": 1,
"author": "Archduino",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-uno", "id": "mcu", "top": 0, "left": 0 },
{ "type": "wokwi-led", "id": "led1", "top": 110, "left": 50, "attrs": { "color": "green" } },
{ "type": "wokwi-resistor", "id": "r1", "top": 150, "left": 30, "attrs": { "value": "220" } },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": 110, "left": 150, "attrs": { "color": "blue" } }
],
"connections": [
["mcu:2", "led1:A", "green", []],
["led1:C", "r1:1", "black", []],
["r1:2", "mcu:GND.1", "black", []],
["mcu:4", "btn1:1.l", "blue", []],
["btn1:2.l", "mcu:GND.2", "black", []]
],
"serialMonitor": { "display": "auto" }
}
JSON
cat >~/.config/archduino/templates/diagram-esp32.json <<'JSON'
{
"version": 1,
"author": "Archduino",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-devkit-c-v4", "id": "esp", "top": 0, "left": 0 },
{ "type": "wokwi-led", "id": "led1", "top": 110, "left": 50, "attrs": { "color": "green" } },
{ "type": "wokwi-resistor", "id": "r1", "top": 150, "left": 30, "attrs": { "value": "220" } },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": 110, "left": 150, "attrs": { "color": "blue" } }
],
"connections": [
["esp:TX", "$serialMonitor:RX", "", []],
["esp:RX", "$serialMonitor:TX", "", []],
["esp:2", "led1:A", "green", []],
["led1:C", "r1:1", "black", []],
["r1:2", "esp:GND.1", "black", []],
["esp:4", "btn1:1.l", "blue", []],
["btn1:2.l", "esp:GND.2", "black", []]
],
"serialMonitor": { "display": "auto" }
}
JSON
cat >~/.config/archduino/templates/diagram-esp32s3.json <<'JSON'
{
"version": 1,
"author": "Archduino",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-s3-devkitc-1", "id": "esp", "top": 0, "left": 0, "attrs": { "serialInterface": "USB_SERIAL_JTAG" } },
{ "type": "wokwi-led", "id": "led1", "top": 110, "left": 50, "attrs": { "color": "green" } },
{ "type": "wokwi-resistor", "id": "r1", "top": 150, "left": 30, "attrs": { "value": "220" } },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": 110, "left": 150, "attrs": { "color": "blue" } }
],
"connections": [
["esp:2", "led1:A", "green", []],
["led1:C", "r1:1", "black", []],
["r1:2", "esp:GND.1", "black", []],
["esp:4", "btn1:1.l", "blue", []],
["btn1:2.l", "esp:GND.2", "black", []]
],
"serialMonitor": { "display": "auto" }
}
JSON
cat >~/.config/archduino/templates/diagram-uno.json <<'JSON'
{
"version": 1,
"author": "Archduino",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-uno", "id": "mcu", "top": 0, "left": 0 },
{ "type": "wokwi-led", "id": "led1", "top": 110, "left": 50, "attrs": { "color": "green" } },
{ "type": "wokwi-resistor", "id": "r1", "top": 150, "left": 30, "attrs": { "value": "220" } },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": 110, "left": 150, "attrs": { "color": "blue" } }
],
"connections": [
["mcu:2", "led1:A", "green", []],
["led1:C", "r1:1", "black", []],
["r1:2", "mcu:GND.1", "black", []],
["mcu:4", "btn1:1.l", "blue", []],
["btn1:2.l", "mcu:GND.2", "black", []]
],
"serialMonitor": { "display": "auto" }
}
JSON
cat >~/.config/archduino/templates/diagram-mega.json <<'JSON'
{
"version": 1,
"author": "Archduino",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-mega", "id": "mcu", "top": 0, "left": 0 },
{ "type": "wokwi-led", "id": "led1", "top": 110, "left": 50, "attrs": { "color": "green" } },
{ "type": "wokwi-resistor", "id": "r1", "top": 150, "left": 30, "attrs": { "value": "220" } },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": 110, "left": 150, "attrs": { "color": "blue" } }
],
"connections": [
["mcu:2", "led1:A", "green", []],
["led1:C", "r1:1", "black", []],
["r1:2", "mcu:GND.1", "black", []],
["mcu:4", "btn1:1.l", "blue", []],
["btn1:2.l", "mcu:GND.2", "black", []]
],
"serialMonitor": { "display": "auto" }
}
JSON
cat >~/.config/archduino/templates/diagram-nano.json <<'JSON'
{
"version": 1,
"author": "Archduino",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-nano", "id": "mcu", "top": 0, "left": 0 },
{ "type": "wokwi-led", "id": "led1", "top": 110, "left": 50, "attrs": { "color": "green" } },
{ "type": "wokwi-resistor", "id": "r1", "top": 150, "left": 30, "attrs": { "value": "220" } },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": 110, "left": 150, "attrs": { "color": "blue" } }
],
"connections": [
["mcu:D2", "led1:A", "green", []],
["led1:C", "r1:1", "black", []],
["r1:2", "mcu:GND.1", "black", []],
["mcu:D4", "btn1:1.l", "blue", []],
["btn1:2.l", "mcu:GND.2", "black", []]
],
"serialMonitor": { "display": "auto" }
}
JSON
# ── Install theme files + theme switcher ─────────────────────────
mkdir -p ~/.config/archduino/themes
cp "$SCRIPT_DIR/lib/themes/"*.sh ~/.config/archduino/themes/

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 3: Starship prompt
step "4/11 — Installing Starship"
step "4/12 — Installing Starship"
if $IS_ARCH; then
$PKG_INSTALL starship

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 8: Yazi file manager
step "8/11 — Installing Yazi"
step "8/12 — Installing Yazi"
if $IS_ARCH; then
$PKG_INSTALL yazi ffmpegthumbnailer p7zip poppler

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 4: Zellij terminal multiplexer
step "5/11 — Installing Zellij"
step "5/12 — Installing Zellij"
if $IS_ARCH; then
$PKG_INSTALL zellij

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Step 2: Zsh + Oh My Zsh + plugins
step "3/11 — Setting up Zsh"
step "3/12 — Setting up Zsh"
if [[ ! -d "$HOME/.oh-my-zsh" ]]; then
RUNZSH=no KEEP_ZSHRC=yes CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended ||