automate/020_wezterm.sh

490 lines
15 KiB
Bash

#!/usr/bin/env bash
# https://github.com/wez/wezterm?tab=readme-ov-file#wezs-terminal
# https://wezfurlong.org/wezterm/
#
# wezterm - truecolor, ligatures, accelerated
#
#
# tree -L 6
#.
#├── etc
#│   └── profile.d
#│   └── wezterm.sh
#└── usr
# ├── bin
# │   ├── open-wezterm-here
# │   ├── strip-ansi-escapes
# │   ├── wezterm
# │   ├── wezterm-gui
# │   └── wezterm-mux-server
# └── share
# ├── applications
# │   └── org.wezfurlong.wezterm.desktop
# ├── bash-completion
# │   └── completions
# │   └── wezterm
# ├── icons
# │   └── hicolor
# │   └── 128x128
# │   └── apps
# ├── metainfo
# │   └── org.wezfurlong.wezterm.appdata.xml
# ├── nautilus-python
# │   └── extensions
# │   └── wezterm-nautilus.py
# ├── wezterm
# └── zsh
# └── functions
# └── Completion
# └── Unix
# Upstream releases deb files
#
DEST=${1:-/etc/skel}
GITUSER=wez
PROJECT=wezterm
LATEST_RELEASE_URL="https://api.github.com/repos/${GITUSER}/${PROJECT}/releases/latest"
ARCH=$(dpkg --print-architecture)
# Fetch the latest release tag
TAG=$(torsocks curl -L -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" "${LATEST_RELEASE_URL}" | jq -r '.tag_name')
# Download the.deb file and its SHA256 checksum
# test for ARCH to select the correct file to download
case $ARCH in
amd64)
EXTENSION="Debian12.deb"
;;
arm64)
EXTENSION="Debian12.arm64.deb"
;;
armhf)
EXTENSION="Debian12.armhf.deb"
;;
*)
echo "Unable to determine system architecture."
exit 1
;;
esac
wget -c -O /tmp/${PROJECT}-${TAG}.${EXTENSION} https://github.com/wez/${PROJECT}/releases/download/${TAG}/${PROJECT}-${TAG}.${EXTENSION}
wget -c -O /tmp/${PROJECT}-${TAG}.${EXTENSION}.sha256 https://github.com/wez/${PROJECT}/releases/download/${TAG}/${PROJECT}-${TAG}.${EXTENSION}.sha256
# Verify the checksum using sha256sum --check
sha256sum --check /tmp/${PROJECT}-${TAG}.${EXTENSION}.sha256
# If the checksum verification is successful, install the.deb file using dpkg
if [ $? -eq 0 ]; then
sudo dpkg -i /tmp/${PROJECT}-${TAG}.${EXTENSION}
sudo apt-get -f install
else
echo "Checksums do not match. Skipping installation."
fi
# conf_print_${PROJECT}() {
# cat <<'EOF'
# name: debian12
#
# on:
# pull_request:
# branches:
# - main
# paths:
# - "**/*.rs"
# - "**/Cargo.lock"
# - "**/Cargo.toml"
# - ".github/workflows/gen_debian12.yml"
# - "assets/fonts/**/*"
# - "assets/icon/*"
# - "assets/open-wezterm-here"
# - "assets/shell-completion/**/*"
# - "assets/shell-integration/**/*"
# - "assets/wezterm-nautilus.py"
# - "assets/wezterm.appdata.xml"
# - "assets/wezterm.desktop"
# - "ci/deploy.sh"
# - "ci/tag-name.sh"
# - "get-deps"
# - "termwiz/data/wezterm.terminfo"
#
# jobs:
# build:
# runs-on: "ubuntu-latest"
# container: "debian:12"
# env:
# CARGO_INCREMENTAL: "0"
# SCCACHE_GHA_ENABLED: "true"
# RUSTC_WRAPPER: "sccache"
#
# steps:
# - name: "set APT to non-interactive"
# shell: bash
# run: "echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections"
# - name: "Update APT"
# shell: bash
# run: "apt update"
# - name: "Install git"
# shell: bash
# run: "apt-get install -y git"
# - name: "Install curl"
# shell: bash
# run: "apt-get install -y curl"
# - name: "Update APT"
# shell: bash
# run: "apt update"
# - name: "Ensure /run/sshd exists"
# shell: bash
# run: "mkdir -p /run/sshd"
# - name: "Install openssh-server"
# shell: bash
# run: "apt-get install -y openssh-server"
# - name: "Workaround git permissions issue"
# shell: bash
# run: "git config --global --add safe.directory /__w/wezterm/wezterm"
# - name: "checkout repo"
# uses: actions/checkout@v4
# with:
# submodules: "recursive"
# - name: "Install Rust"
# uses: dtolnay/rust-toolchain@stable
# - name: "Compile with sccache"
# uses: mozilla-actions/sccache-action@v0.0.4
# - name: "Cache Rust Dependencies"
# uses: actions/cache@v4
# id: cache-cargo-vendor
# with:
# path: |
# vendor
# .cargo/config
# key: "cargo-deps-${{ hashFiles('**/Cargo.lock') }}"
# - name: "Vendor dependecies"
# if: steps.cache-cargo-vendor.outputs.cache-hit != 'true'
# shell: bash
# run: "cargo vendor --locked --versioned-dirs >> .cargo/config"
# - name: "Install System Deps"
# shell: bash
# run: "env CI=yes PATH=$PATH ./get-deps"
# - name: "Build wezterm (Release mode)"
# shell: bash
# run: "cargo build -p wezterm --release"
# - name: "Build wezterm-gui (Release mode)"
# shell: bash
# run: "cargo build -p wezterm-gui --release"
# - name: "Build wezterm-mux-server (Release mode)"
# shell: bash
# run: "cargo build -p wezterm-mux-server --release"
# - name: "Build strip-ansi-escapes (Release mode)"
# shell: bash
# run: "cargo build -p strip-ansi-escapes --release"
# - name: "Install cargo-nextest from Cargo"
# uses: baptiste0928/cargo-install@v3
# with:
# crate: "cargo-nextest"
# cache-key: "debian12"
# - name: "Test"
# shell: bash
# run: "cargo nextest run --all --no-fail-fast"
# - name: "Package"
# shell: bash
# run: "bash ci/deploy.sh"
# - name: "Upload artifact"
# uses: actions/upload-artifact@v3
# with:
# name: "debian12"
# path: |
# wezterm-*.deb
# wezterm-*.xz
# EOF
# }
# #conf_print_wezterm_actions_debian12 | tee .github/workflows/gen_debian12.yml
#
#
# # this is the debian part of deploy.sh
# conf_print_wezterm_deploy() {
# cat <<'EOF'
# Ubuntu*|Debian*|Pop)
# rm -rf pkg
# mkdir -p pkg/debian/usr/bin pkg/debian/DEBIAN pkg/debian/usr/share/{applications,wezterm}
#
# if [[ "$BUILD_REASON" == "Schedule" ]] ; then
# pkgname=wezterm-nightly
# conflicts=wezterm
# else
# pkgname=wezterm
# conflicts=wezterm-nightly
# fi
#
# cat > pkg/debian/control <<EOF
# Package: $pkgname
# Version: ${TAG_NAME#nightly-}
# Conflicts: $conflicts
# Architecture: $(dpkg-architecture -q DEB_BUILD_ARCH_CPU)
# Maintainer: Wez Furlong <wez@wezfurlong.org>
# Section: utils
# Priority: optional
# Homepage: https://wezfurlong.org/wezterm/
# Description: Wez's Terminal Emulator.
# wezterm is a terminal emulator with support for modern features
# such as fonts with ligatures, hyperlinks, tabs and multiple
# windows.
# Provides: x-terminal-emulator
# Source: https://wezfurlong.org/wezterm/
# EOF
#
# cat > pkg/debian/postinst <<EOF
# #!/bin/sh
# set -e
# if [ "\$1" = "configure" ] ; then
# update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator /usr/bin/open-wezterm-here 20
# fi
# EOF
#
# cat > pkg/debian/prerm <<EOF
# #!/bin/sh
# set -e
# if [ "\$1" = "remove" ]; then
# update-alternatives --remove x-terminal-emulator /usr/bin/open-wezterm-here
# fi
# EOF
#
# install -Dsm755 -t pkg/debian/usr/bin target/release/wezterm-mux-server
# install -Dsm755 -t pkg/debian/usr/bin target/release/wezterm-gui
# install -Dsm755 -t pkg/debian/usr/bin target/release/wezterm
# install -Dm755 -t pkg/debian/usr/bin assets/open-wezterm-here
# install -Dsm755 -t pkg/debian/usr/bin target/release/strip-ansi-escapes
#
# deps=$(cd pkg && dpkg-shlibdeps -O -e debian/usr/bin/*)
# mv pkg/debian/postinst pkg/debian/DEBIAN/postinst
# chmod 0755 pkg/debian/DEBIAN/postinst
# mv pkg/debian/prerm pkg/debian/DEBIAN/prerm
# chmod 0755 pkg/debian/DEBIAN/prerm
# mv pkg/debian/control pkg/debian/DEBIAN/control
# sed -i '/^Source:/d' pkg/debian/DEBIAN/control # The `Source:` field needs to be valid in a binary package
# echo $deps | sed -e 's/shlibs:Depends=/Depends: /' >> pkg/debian/DEBIAN/control
# cat pkg/debian/DEBIAN/control
#
# install -Dm644 assets/icon/terminal.png pkg/debian/usr/share/icons/hicolor/128x128/apps/org.wezfurlong.wezterm.png
# install -Dm644 assets/wezterm.desktop pkg/debian/usr/share/applications/org.wezfurlong.wezterm.desktop
# install -Dm644 assets/wezterm.appdata.xml pkg/debian/usr/share/metainfo/org.wezfurlong.wezterm.appdata.xml
# install -Dm644 assets/wezterm-nautilus.py pkg/debian/usr/share/nautilus-python/extensions/wezterm-nautilus.py
# install -Dm644 assets/shell-completion/bash pkg/debian/usr/share/bash-completion/completions/wezterm
# install -Dm644 assets/shell-completion/zsh pkg/debian/usr/share/zsh/functions/Completion/Unix/_wezterm
# install -Dm644 assets/shell-integration/* -t pkg/debian/etc/profile.d
#
# if [[ "$BUILD_REASON" == "Schedule" ]] ; then
# debname=wezterm-nightly.$distro$distver
# else
# debname=wezterm-$TAG_NAME.$distro$distver
# fi
# arch=$(dpkg-architecture -q DEB_BUILD_ARCH_CPU)
# case $arch in
# amd64)
# ;;
# *)
# debname="${debname}.${arch}"
# ;;
# esac
#
# fakeroot dpkg-deb --build pkg/debian $debname.deb
#
# if [[ "$BUILD_REASON" != '' ]] ; then
# $SUDO apt-get install ./$debname.deb
# fi
#
# mv pkg/debian pkg/wezterm
# tar cJf $debname.tar.xz -C pkg wezterm
# rm -rf pkg
# EOF
# }
# control files taken from the binary deb package debian12 release
# conf_print_wezterm_control() {
# cat <<'EOF'
# Package: wezterm
# Version: 20240203-110809-5046fc22
# Conflicts: wezterm-nightly
# Architecture: amd64
# Maintainer: Wez Furlong <wez@wezfurlong.org>
# Section: utils
# Priority: optional
# Homepage: https://wezfurlong.org/wezterm/
# Description: Wez's Terminal Emulator.
# wezterm is a terminal emulator with support for modern features
# such as fonts with ligatures, hyperlinks, tabs and multiple
# windows.
# Provides: x-terminal-emulator
# Depends: libc6 (>= 2.35), libfontconfig1 (>= 2.12.6), libgcc-s1 (>= 4.2), libssl3 (>= 3.0.0), libwayland-client0 (>= 1.11.0), libwayland-egl1 (>= 1.15.0), libx11-6, libx11-xcb1 (>= 2:1.8.4), libxcb-image0 (>= 0.2.1), libxcb-util1 (>= 0.4.0), libxcb1 (>= 1.11.1), libxkbcommon-x11-0 (>= 0.5.0), libxkbcommon0 (>= 0.6.1), zlib1g (>= 1:1.1.4)
# EOF
# }
# conf_print_wezterm_postinst() {
# cat <<-EOF
# #!/bin/sh
# set -e
# if [ "$1" = "configure" ] ; then
# update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator /usr/bin/open-wezterm-here 20
# fi
# EOF
# }
#
# conf_print_wezterm_prerm() {
# cat <<-EOF
# #!/bin/sh
# set -e
# if [ "$1" = "remove" ]; then
# update-alternatives --remove x-terminal-emulator /usr/bin/open-wezterm-here
# fi
# EOF
# }
# EOF
#
# conf_print_wezterm_debian-binary() {
# cat <<-EOF
# 2.0
# EOF
# }
# EOF
# }
# # conf_print_wezterm_deploy
WALLPAPER='${DEST}/Pictures/Wallpapers/1920x1200-Wallpaper-041.jpg'
conf_print_wezterm_theme_minimal() {
cat <<-EOF
local wezterm = require("wezterm")
return {
-- color_scheme = 'termnial.sexy',
-- color_scheme = "Catppuccin Mocha",
color_scheme = "mellow",
enable_tab_bar = false,
font_size = 11.0,
-- macos_window_background_blur = 40,
macos_window_background_blur = 30,
-- window_background_image = ${WALLPAPER}',
-- window_background_image_hsb = {
-- brightness = 0.01,
-- hue = 1.0,
-- saturation = 0.5,
-- },
-- window_background_opacity = 0.92,
window_background_opacity = 1.0,
-- window_background_opacity = 0.78,
-- window_background_opacity = 0.20,
window_decorations = "RESIZE",
keys = {
{
key = "f",
mods = "CTRL",
action = wezterm.action.ToggleFullScreen,
},
},
mouse_bindings = {
-- Ctrl-click will open the link under the mouse cursor
{
event = { Up = { streak = 1, button = "Left" } },
mods = "CTRL",
action = wezterm.action.OpenLinkAtMouseCursor,
},
},
}
EOF
}
conf_print_wezterm_theme_minimal | tee ${DEST}/.config/wezterm/wezterm.lua
mkdir -p ${DEST}/.config/wezterm/colors
# wget -c -O ${DEST}/.config/wezterm/colors/mellow.toml https://github.com/mellow-theme/mellow.nvim/blob/main/extras/wezterm/colors/mellow.toml
conf_print_wezterm_theme_mellow() {
cat <<-EOF
# Mellow colorscheme for wezterm
[colors]
foreground = "#c9c7cd"
background = "#161617"
cursor_bg = "#e3e2e5"
cursor_border = "#e3e2e5"
cursor_fg = "#161617"
selection_bg = "#3c3b3e"
selection_fg = "#e3e2e5"
scrollbar_thumb = "#57575f"
split = "#57575f"
ansi = ["#27272a","#f5a191","#90b99f","#e6b99d","#aca1cf","#e29eca","#ea83a5","#c1c0d4"]
brights = ["#353539","#ffae9f","#9dc6ac","#f0c5a9","#b9aeda","#ecaad6","#f591b2","#cac9dd"]
EOF
}
conf_print_wezterm_theme_mellow | tee ${DEST}/.config/wezterm/colors/mellow.toml
# wget -c -O ${DEST}/.config/wezterm/colors/hardhacker.toml https://github.com/hardhackerlabs/theme-wezterm/blob/master/hardhacker.toml
conf_print_wezterm_theme_hardhacker() {
cat <<-EOF
[colors]
ansi = [ "#282433", "#e965a5", "#b1f2a7", "#ebde76", "#b1baf4", "#e192ef", "#b3f4f3", "#eee9fc" ]
brights = [ "#3f3951", "#e965a5", "#b1f2a7", "#ebde76", "#b1baf4", "#e192ef", "#b3f4f3", "#eee9fc" ]
background = "#282433"
foreground = "#eee9fc"
compose_cursor = '#ebde76'
cursor_bg = "#eee9fc"
cursor_border = "#eee9fc"
cursor_fg = "#eee9fc"
selection_bg = "#e965a5"
selection_fg = "#eee9fc"
scrollbar_thumb = '#3f3951'
split = '#938aad'
[colors.indexed]
[colors.tab_bar]
background = "#282433"
[colors.tab_bar.active_tab]
bg_color = "#282433"
fg_color = "#e965a5"
intensity = "Normal"
underline = "None"
italic = false
strikethrough = false
[colors.tab_bar.inactive_tab]
bg_color = "#282433"
fg_color = "#938aad"
intensity = "Normal"
italic = false
strikethrough = false
underline = "None"
[colors.tab_bar.inactive_tab_hover]
bg_color = "#e192ef"
fg_color = "#eee9fc"
intensity = "Normal"
italic = false
strikethrough = false
underline = "None"
[colors.tab_bar.new_tab]
bg_color = "#282433"
fg_color = "#938aad"
intensity = "Normal"
italic = false
strikethrough = false
underline = "None"
[colors.tab_bar.new_tab_hover]
bg_color = "#e192ef"
fg_color = "#eee9fc"
intensity = "Normal"
italic = true
strikethrough = false
underline = "None"
[metadata]
name = 'hardhacker'
origin_url = 'https://github.com/hardhackerlabs/theme-wezterm
EOF}
conf_print_wezterm_theme_hardhacker | tee ${DEST}/.config/wezterm/colors/hardhacker.toml
# An extensive wezterm config, maybe too extensive, using tmux as default.
# and a complete set of aditional keymaps to learn.
# https://github.com/KevinSilvester/wezterm-config