feat: add Nerd Font installation, Yazi file manager, and themed Yazi config
- Install JetBrainsMono Nerd Font for icons across all TUI tools - Add Yazi as terminal file manager with themed config per colorscheme - Add write_yazi_config() to all 5 theme files - Theme switcher (archduino-theme) now also updates Yazi - Add 'y' alias for yazi in shell config - Update step numbering (9 -> 11 steps) and README
This commit is contained in:
11
README.md
11
README.md
@@ -33,12 +33,14 @@ The Idea was a Development Environment runnable by almost everything. No GUI nee
|
||||
| **Shell** | [Zsh](https://www.zsh.org) + [Oh My Zsh](https://ohmyz.sh) | Autosuggestions, syntax highlighting, smart completions |
|
||||
| **Prompt** | [Starship](https://starship.rs) | Fast, minimal, git-aware prompt |
|
||||
| **Git** | [Lazygit](https://github.com/jesseduffield/lazygit) | Beautiful terminal UI for git |
|
||||
| **File Manager** | [Yazi](https://yazi-rs.github.io) | Blazing fast terminal file manager with image preview |
|
||||
| **Serial** | [tio](https://github.com/tio/tio) | Simple serial device I/O |
|
||||
| **Font** | [JetBrainsMono Nerd Font](https://www.nerdfonts.com) | Icons and ligatures for all TUI tools |
|
||||
| **Theme** | 5 colorschemes | Consistent look across every tool (see below) |
|
||||
|
||||
### Colorschemes
|
||||
|
||||
The installer lets you pick a theme that is applied **consistently** across Neovim, Starship, Zellij, and Lazygit:
|
||||
The installer lets you pick a theme that is applied **consistently** across Neovim, Starship, Zellij, Lazygit, and Yazi:
|
||||
|
||||
| # | Theme | Style |
|
||||
|---|---|---|
|
||||
@@ -54,7 +56,7 @@ You can **switch themes at any time** after installation:
|
||||
archduino-theme # or just: theme
|
||||
```
|
||||
|
||||
This updates Starship, Zellij, Lazygit, and NvChad in one step.
|
||||
This updates Starship, Zellij, Lazygit, Yazi, and NvChad in one step.
|
||||
|
||||
### Supported Boards (out of the box)
|
||||
|
||||
@@ -84,7 +86,7 @@ The installer will:
|
||||
2. Let you pick your **colorscheme** (applied to all tools)
|
||||
3. Let you choose between **progress bar** or **verbose** output
|
||||
4. Ask for your sudo password **once** (cached for the entire install)
|
||||
5. Run through all 9 setup steps automatically
|
||||
5. Run through all 11 setup steps automatically
|
||||
|
||||
After it finishes, start a new shell or run `source ~/.zshrc`.
|
||||
|
||||
@@ -105,10 +107,12 @@ ArduinoArch/
|
||||
│ ├── nord.sh # Nord configs
|
||||
│ └── dracula.sh # Dracula configs
|
||||
├── packages.sh # Base packages (build tools, ripgrep, fd, bat, etc.)
|
||||
├── fonts.sh # JetBrainsMono Nerd Font installation
|
||||
├── zsh.sh # Oh My Zsh + plugins
|
||||
├── starship.sh # Starship prompt config
|
||||
├── zellij.sh # Zellij + config + Arduino workspace layout
|
||||
├── neovim.sh # Neovim + NvChad + plugin configs (Arduino, LSP)
|
||||
├── yazi.sh # Yazi file manager + themed config
|
||||
├── arduino.sh # Arduino CLI + AVR/ESP32/ESP8266 cores + common libraries
|
||||
├── git.sh # Lazygit config
|
||||
├── scaffold.sh # `arduino-new` scaffolding tool + board templates
|
||||
@@ -191,6 +195,7 @@ All keybindings are under `<leader>a`:
|
||||
| `acb` | `arduino-cli board list` |
|
||||
| `lg` | `lazygit` |
|
||||
| `v` | `nvim` |
|
||||
| `y` | `yazi` (file manager) |
|
||||
| `theme` | `archduino-theme` (switch colorscheme) |
|
||||
|
||||
---
|
||||
|
||||
@@ -75,10 +75,12 @@ fi
|
||||
|
||||
# ── Run install steps ───────────────────────────────────────────
|
||||
source "$SCRIPT_DIR/lib/packages.sh"
|
||||
source "$SCRIPT_DIR/lib/fonts.sh"
|
||||
source "$SCRIPT_DIR/lib/zsh.sh"
|
||||
source "$SCRIPT_DIR/lib/starship.sh"
|
||||
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/git.sh"
|
||||
source "$SCRIPT_DIR/lib/scaffold.sh"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 7: Arduino CLI + board cores
|
||||
|
||||
step "7/9 — Installing Arduino CLI + board cores"
|
||||
step "9/11 — Installing Arduino CLI + board cores"
|
||||
|
||||
if $IS_ARCH; then
|
||||
$PKG_INSTALL arduino-cli
|
||||
|
||||
@@ -13,7 +13,7 @@ NC='\033[0m'
|
||||
VERBOSE=true
|
||||
LOG_FILE="/tmp/archduino-install.log"
|
||||
CURRENT_STEP=0
|
||||
TOTAL_STEPS=10
|
||||
TOTAL_STEPS=12
|
||||
|
||||
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=11
|
||||
$IS_WSL && TOTAL_STEPS=13
|
||||
: >"$LOG_FILE"
|
||||
|
||||
# Save real terminal to fd 3/4, redirect everything else to log
|
||||
|
||||
25
lib/fonts.sh
Normal file
25
lib/fonts.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# Step 2: Nerd Font installation
|
||||
|
||||
step "2/11 — Installing Nerd Font"
|
||||
|
||||
FONT_DIR="$HOME/.local/share/fonts/NerdFonts"
|
||||
FONT_NAME="JetBrainsMono"
|
||||
|
||||
if fc-list 2>/dev/null | grep -qi "JetBrainsMono Nerd"; then
|
||||
info "JetBrainsMono Nerd Font already installed"
|
||||
else
|
||||
mkdir -p "$FONT_DIR"
|
||||
curl -ksSLo /tmp/JetBrainsMono.tar.xz \
|
||||
"https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.tar.xz"
|
||||
tar xf /tmp/JetBrainsMono.tar.xz -C "$FONT_DIR"
|
||||
rm -f /tmp/JetBrainsMono.tar.xz
|
||||
fc-cache -f 2>/dev/null || true
|
||||
info "JetBrainsMono Nerd Font installed to $FONT_DIR"
|
||||
fi
|
||||
|
||||
if $IS_WSL; then
|
||||
warn "WSL detected: You must also install a Nerd Font on the Windows side."
|
||||
warn "Download from: https://www.nerdfonts.com/font-downloads"
|
||||
warn "Then set 'JetBrainsMono Nerd Font' in your terminal settings (Windows Terminal, etc.)."
|
||||
fi
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 8: Git + Lazygit
|
||||
|
||||
step "8/9 — Setting up Git + Lazygit"
|
||||
step "10/11 — Setting up Git + Lazygit"
|
||||
|
||||
if $IS_ARCH; then
|
||||
$PKG_INSTALL lazygit
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Steps 5+6: Neovim + NvChad
|
||||
|
||||
step "5/9 — Installing Neovim (latest)"
|
||||
step "6/11 — 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 "6/9 — Setting up NvChad"
|
||||
step "7/11 — Setting up NvChad"
|
||||
|
||||
NVIM_CFG="$HOME/.config/nvim"
|
||||
NVCHAD_FRESH=false
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 1: Base packages
|
||||
|
||||
step "1/9 — Installing base packages"
|
||||
step "1/11 — Installing base packages"
|
||||
|
||||
if $IS_ARCH; then
|
||||
sudo pacman -Syu --noconfirm
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 9: Project scaffolding tool + templates
|
||||
|
||||
step "9/9 — Creating project scaffolding tool"
|
||||
step "11/11 — Creating project scaffolding tool"
|
||||
|
||||
mkdir -p ~/.local/bin ~/.config/archduino/templates
|
||||
|
||||
@@ -215,6 +215,11 @@ info "Zellij updated"
|
||||
write_lazygit_config ~/.config/lazygit/config.yml
|
||||
info "Lazygit updated"
|
||||
|
||||
# Yazi
|
||||
mkdir -p ~/.config/yazi
|
||||
write_yazi_config ~/.config/yazi/theme.toml
|
||||
info "Yazi updated"
|
||||
|
||||
# NvChad
|
||||
NVIM_CFG="$HOME/.config/nvim"
|
||||
if [[ -f "$NVIM_CFG/lua/chadrc.lua" ]]; then
|
||||
|
||||
@@ -26,6 +26,7 @@ alias acm="arduino-cli monitor"
|
||||
alias acb="arduino-cli board list"
|
||||
alias lg="lazygit"
|
||||
alias v="nvim"
|
||||
alias y="yazi"
|
||||
alias theme="archduino-theme"
|
||||
# ── END ARCHDUINO ───────────────────────────────────────────────'
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 3: Starship prompt
|
||||
|
||||
step "3/9 — Installing Starship"
|
||||
step "4/11 — Installing Starship"
|
||||
|
||||
if $IS_ARCH; then
|
||||
$PKG_INSTALL starship
|
||||
|
||||
@@ -90,3 +90,38 @@ gui:
|
||||
- "#cdd6f4"
|
||||
YAML
|
||||
}
|
||||
|
||||
write_yazi_config() {
|
||||
cat >"$1" <<'TOML'
|
||||
[manager]
|
||||
cwd = { fg = "#f9e2af" }
|
||||
tab_active = { fg = "#1e1e2e", bg = "#f9e2af" }
|
||||
tab_inactive = { fg = "#bac2de", bg = "#313244" }
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#585b70" }
|
||||
count_copied = { fg = "#1e1e2e", bg = "#a6e3a1" }
|
||||
count_cut = { fg = "#1e1e2e", bg = "#f38ba8" }
|
||||
count_selected = { fg = "#1e1e2e", bg = "#f9e2af" }
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
mode_normal = { fg = "#1e1e2e", bg = "#a6e3a1", bold = true }
|
||||
mode_select = { fg = "#1e1e2e", bg = "#f9e2af", bold = true }
|
||||
mode_unset = { fg = "#1e1e2e", bg = "#f38ba8", bold = true }
|
||||
progress_label = { fg = "#cdd6f4", bold = true }
|
||||
progress_normal = { fg = "#89b4fa", bg = "#313244" }
|
||||
progress_error = { fg = "#f38ba8", bg = "#313244" }
|
||||
|
||||
[input]
|
||||
border = { fg = "#f9e2af" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[select]
|
||||
border = { fg = "#f9e2af" }
|
||||
active = { fg = "#a6e3a1", bold = true }
|
||||
inactive = {}
|
||||
TOML
|
||||
}
|
||||
|
||||
@@ -90,3 +90,38 @@ gui:
|
||||
- "#f8f8f2"
|
||||
YAML
|
||||
}
|
||||
|
||||
write_yazi_config() {
|
||||
cat >"$1" <<'TOML'
|
||||
[manager]
|
||||
cwd = { fg = "#f1fa8c" }
|
||||
tab_active = { fg = "#282a36", bg = "#f1fa8c" }
|
||||
tab_inactive = { fg = "#bfbfbf", bg = "#44475a" }
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#6272a4" }
|
||||
count_copied = { fg = "#282a36", bg = "#50fa7b" }
|
||||
count_cut = { fg = "#282a36", bg = "#ff5555" }
|
||||
count_selected = { fg = "#282a36", bg = "#f1fa8c" }
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
mode_normal = { fg = "#282a36", bg = "#50fa7b", bold = true }
|
||||
mode_select = { fg = "#282a36", bg = "#f1fa8c", bold = true }
|
||||
mode_unset = { fg = "#282a36", bg = "#ff5555", bold = true }
|
||||
progress_label = { fg = "#f8f8f2", bold = true }
|
||||
progress_normal = { fg = "#bd93f9", bg = "#44475a" }
|
||||
progress_error = { fg = "#ff5555", bg = "#44475a" }
|
||||
|
||||
[input]
|
||||
border = { fg = "#f1fa8c" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[select]
|
||||
border = { fg = "#f1fa8c" }
|
||||
active = { fg = "#50fa7b", bold = true }
|
||||
inactive = {}
|
||||
TOML
|
||||
}
|
||||
|
||||
@@ -90,3 +90,38 @@ gui:
|
||||
- "#ebdbb2"
|
||||
YAML
|
||||
}
|
||||
|
||||
write_yazi_config() {
|
||||
cat >"$1" <<'TOML'
|
||||
[manager]
|
||||
cwd = { fg = "#fabd2f" }
|
||||
tab_active = { fg = "#282828", bg = "#fabd2f" }
|
||||
tab_inactive = { fg = "#a89984", bg = "#3c3836" }
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#665c54" }
|
||||
count_copied = { fg = "#282828", bg = "#b8bb26" }
|
||||
count_cut = { fg = "#282828", bg = "#fb4934" }
|
||||
count_selected = { fg = "#282828", bg = "#fabd2f" }
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
mode_normal = { fg = "#282828", bg = "#b8bb26", bold = true }
|
||||
mode_select = { fg = "#282828", bg = "#fabd2f", bold = true }
|
||||
mode_unset = { fg = "#282828", bg = "#fb4934", bold = true }
|
||||
progress_label = { fg = "#ebdbb2", bold = true }
|
||||
progress_normal = { fg = "#458588", bg = "#3c3836" }
|
||||
progress_error = { fg = "#fb4934", bg = "#3c3836" }
|
||||
|
||||
[input]
|
||||
border = { fg = "#fabd2f" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[select]
|
||||
border = { fg = "#fabd2f" }
|
||||
active = { fg = "#b8bb26", bold = true }
|
||||
inactive = {}
|
||||
TOML
|
||||
}
|
||||
|
||||
@@ -90,3 +90,38 @@ gui:
|
||||
- "#d8dee9"
|
||||
YAML
|
||||
}
|
||||
|
||||
write_yazi_config() {
|
||||
cat >"$1" <<'TOML'
|
||||
[manager]
|
||||
cwd = { fg = "#ebcb8b" }
|
||||
tab_active = { fg = "#2e3440", bg = "#ebcb8b" }
|
||||
tab_inactive = { fg = "#e5e9f0", bg = "#3b4252" }
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#4c566a" }
|
||||
count_copied = { fg = "#2e3440", bg = "#a3be8c" }
|
||||
count_cut = { fg = "#2e3440", bg = "#bf616a" }
|
||||
count_selected = { fg = "#2e3440", bg = "#ebcb8b" }
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
mode_normal = { fg = "#2e3440", bg = "#a3be8c", bold = true }
|
||||
mode_select = { fg = "#2e3440", bg = "#ebcb8b", bold = true }
|
||||
mode_unset = { fg = "#2e3440", bg = "#bf616a", bold = true }
|
||||
progress_label = { fg = "#d8dee9", bold = true }
|
||||
progress_normal = { fg = "#81a1c1", bg = "#3b4252" }
|
||||
progress_error = { fg = "#bf616a", bg = "#3b4252" }
|
||||
|
||||
[input]
|
||||
border = { fg = "#ebcb8b" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[select]
|
||||
border = { fg = "#ebcb8b" }
|
||||
active = { fg = "#a3be8c", bold = true }
|
||||
inactive = {}
|
||||
TOML
|
||||
}
|
||||
|
||||
@@ -90,3 +90,38 @@ gui:
|
||||
- "#c0caf5"
|
||||
YAML
|
||||
}
|
||||
|
||||
write_yazi_config() {
|
||||
cat >"$1" <<'TOML'
|
||||
[manager]
|
||||
cwd = { fg = "#e0af68" }
|
||||
tab_active = { fg = "#1a1b26", bg = "#e0af68" }
|
||||
tab_inactive = { fg = "#a9b1d6", bg = "#283457" }
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#3b4261" }
|
||||
count_copied = { fg = "#1a1b26", bg = "#9ece6a" }
|
||||
count_cut = { fg = "#1a1b26", bg = "#f7768e" }
|
||||
count_selected = { fg = "#1a1b26", bg = "#e0af68" }
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
mode_normal = { fg = "#1a1b26", bg = "#9ece6a", bold = true }
|
||||
mode_select = { fg = "#1a1b26", bg = "#e0af68", bold = true }
|
||||
mode_unset = { fg = "#1a1b26", bg = "#f7768e", bold = true }
|
||||
progress_label = { fg = "#c0caf5", bold = true }
|
||||
progress_normal = { fg = "#7aa2f7", bg = "#283457" }
|
||||
progress_error = { fg = "#f7768e", bg = "#283457" }
|
||||
|
||||
[input]
|
||||
border = { fg = "#e0af68" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[select]
|
||||
border = { fg = "#e0af68" }
|
||||
active = { fg = "#9ece6a", bold = true }
|
||||
inactive = {}
|
||||
TOML
|
||||
}
|
||||
|
||||
22
lib/yazi.sh
Normal file
22
lib/yazi.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# Step 8: Yazi file manager
|
||||
|
||||
step "8/11 — Installing Yazi"
|
||||
|
||||
if $IS_ARCH; then
|
||||
$PKG_INSTALL yazi ffmpegthumbnailer p7zip poppler
|
||||
else
|
||||
YAZI_VERSION=$(curl -ks "https://api.github.com/repos/sxyazi/yazi/releases/latest" | jq -r '.tag_name')
|
||||
curl -ksSLo /tmp/yazi.zip "https://github.com/sxyazi/yazi/releases/download/${YAZI_VERSION}/yazi-x86_64-unknown-linux-musl.zip"
|
||||
unzip -qo /tmp/yazi.zip -d /tmp/yazi-extract
|
||||
sudo install -m 755 /tmp/yazi-extract/yazi-x86_64-unknown-linux-musl/yazi /usr/local/bin/yazi
|
||||
rm -rf /tmp/yazi.zip /tmp/yazi-extract
|
||||
# Optional thumbnailer/preview deps
|
||||
sudo apt install -y ffmpegthumbnailer p7zip-full poppler-utils 2>/dev/null || true
|
||||
fi
|
||||
info "Yazi installed/updated"
|
||||
|
||||
mkdir -p ~/.config/yazi
|
||||
backup_config ~/.config/yazi/theme.toml
|
||||
write_yazi_config ~/.config/yazi/theme.toml
|
||||
info "Yazi configured with $THEME_DISPLAY_NAME"
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 4: Zellij terminal multiplexer
|
||||
|
||||
step "4/9 — Installing Zellij"
|
||||
step "5/11 — Installing Zellij"
|
||||
|
||||
if $IS_ARCH; then
|
||||
$PKG_INSTALL zellij
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Step 2: Zsh + Oh My Zsh + plugins
|
||||
|
||||
step "2/9 — Setting up Zsh"
|
||||
step "3/11 — 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 ||
|
||||
|
||||
Reference in New Issue
Block a user