From 10cf884d41b18f68c1dd37e515d077c475d919a4 Mon Sep 17 00:00:00 2001 From: RAprogramm Date: Wed, 29 Jul 2026 17:55:15 +0700 Subject: [PATCH 1/4] #1869 feat: add wezterm configuration and wallbash theming --- CHANGELOG.md | 3 + Configs/.config/wezterm/hyde.lua | 70 +++++++++++++++++++ Configs/.config/wezterm/wezterm.lua | 14 ++++ Configs/.config/xdg-terminals.list | 1 + .../.local/share/wallbash/scripts/wezterm.sh | 15 ++++ .../.local/share/wallbash/theme/wezterm.dcol | 67 ++++++++++++++++++ Scripts/dots-groups/optionals.toml | 1 + Scripts/dots/wezterm.toml | 21 ++++++ 8 files changed, 192 insertions(+) create mode 100644 Configs/.config/wezterm/hyde.lua create mode 100644 Configs/.config/wezterm/wezterm.lua create mode 100755 Configs/.local/share/wallbash/scripts/wezterm.sh create mode 100644 Configs/.local/share/wallbash/theme/wezterm.dcol create mode 100644 Scripts/dots/wezterm.toml diff --git a/CHANGELOG.md b/CHANGELOG.md index 375eb238c5..81ef1ffd4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## Unreleased +### Added +- WezTerm: configuration and wallbash theming, selectable as an optional dot and as a session terminal + ### Fixed - Waybar `hyprland/workspaces` module adapted to use lua dispatchers - Hyprland: `Super + Ctrl + arrows` no longer changes the group and the workspace at the same time. diff --git a/Configs/.config/wezterm/hyde.lua b/Configs/.config/wezterm/hyde.lua new file mode 100644 index 0000000000..1d7cf1f1a3 --- /dev/null +++ b/Configs/.config/wezterm/hyde.lua @@ -0,0 +1,70 @@ +--! ░▒▓ +--! ░▒▒░▓▓ +--! ░▒▒▒░░░▓▓ ___________ +--! ░░▒▒▒░░░░░▓▓ //___________/ +--! ░░▒▒▒░░░░░▓▓ _ _ _ _ _____ +--! ░░▒▒░░░░░▓▓▓▓▓▓ | | | | | | | __/ +--! ░▒▒░░░░▓▓ ▓▓ | |_| | |_/ /| |___ +--! ░▒▒░░▓▓ ▓▓ \__ |____/ |____/ █░█░█ █▀▀ ▀█ ▀█▀ █▀▀ █▀█ █▀▄▀█ +--! ░▒▓▓ ▓▓ //____/ ▀▄▀▄▀ ██▄ █▄ ░█░ ██▄ █▀▄ █░▀░█ + +-- HyDE's WezTerm defaults. +-- +-- This file is replaced on update. Put your own settings in wezterm.lua, +-- which HyDE never overwrites. + +local wezterm = require("wezterm") + +local M = {} + +-- Written by wallbash on every theme change. Absent until the first one runs, +-- so a missing file is not an error. +local function wallbash_colors() + local ok, colors = pcall(require, "colors") + if ok and type(colors) == "table" then + return colors + end + return nil +end + +--- Returns HyDE's defaults as a config table. +--- +--- Merge your own settings on top of it: +--- +--- local config = require("hyde").config() +--- config.font_size = 12 +--- return config +function M.config() + local config = wezterm.config_builder() + + config.colors = wallbash_colors() + + config.font = wezterm.font_with_fallback({ + "JetBrainsMono Nerd Font", + "mononoki Nerd Font", + "monospace", + }) + config.font_size = 11 + + config.window_background_opacity = 0.8 + config.window_decorations = "NONE" + config.window_padding = {left = 8, right = 8, top = 8, bottom = 8} + + config.use_fancy_tab_bar = false + config.hide_tab_bar_if_only_one_tab = true + config.tab_bar_at_bottom = false + + config.scrollback_lines = 10000 + config.enable_scroll_bar = false + + config.audible_bell = "Disabled" + config.check_for_updates = false + + -- The session already runs under Wayland, and letting WezTerm pick keeps + -- it working when it is started from an X11 session instead. + config.enable_wayland = true + + return config +end + +return M diff --git a/Configs/.config/wezterm/wezterm.lua b/Configs/.config/wezterm/wezterm.lua new file mode 100644 index 0000000000..4d89e46f53 --- /dev/null +++ b/Configs/.config/wezterm/wezterm.lua @@ -0,0 +1,14 @@ +-- Your WezTerm configuration. +-- +-- HyDE does not manage this file, so anything you put here survives an +-- update. HyDE's defaults and the wallbash colours live in hyde.lua, which is +-- replaced on every update. + +local config = require("hyde").config() + +-- Your settings go below. They override the defaults, for example: +-- +-- config.font_size = 12 +-- config.window_background_opacity = 1.0 + +return config diff --git a/Configs/.config/xdg-terminals.list b/Configs/.config/xdg-terminals.list index 7baf8b39ce..bf2f610a7c 100644 --- a/Configs/.config/xdg-terminals.list +++ b/Configs/.config/xdg-terminals.list @@ -2,3 +2,4 @@ kitty.desktop Alacritty.desktop foot.desktop +org.wezfurlong.wezterm.desktop diff --git a/Configs/.local/share/wallbash/scripts/wezterm.sh b/Configs/.local/share/wallbash/scripts/wezterm.sh new file mode 100755 index 0000000000..6973a634db --- /dev/null +++ b/Configs/.local/share/wallbash/scripts/wezterm.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# Applies a freshly generated wallbash palette to WezTerm. +# +# WezTerm watches its configuration and reloads on change, so there is no +# signal to send. It only watches files it read while evaluating the config, +# and a colour file that did not exist on the last evaluation is not among +# them, so the entry point is touched to force one reload. + +confDir="${confDir:-$HOME/.config}" +weztermConf="${confDir}/wezterm/wezterm.lua" + +[ -f "$weztermConf" ] || exit 0 + +touch "$weztermConf" diff --git a/Configs/.local/share/wallbash/theme/wezterm.dcol b/Configs/.local/share/wallbash/theme/wezterm.dcol new file mode 100644 index 0000000000..e764493628 --- /dev/null +++ b/Configs/.local/share/wallbash/theme/wezterm.dcol @@ -0,0 +1,67 @@ +${confDir}/wezterm/colors.lua|${WALLBASH_SCRIPTS}/wezterm.sh +-- Generated by wallbash. Edits are overwritten on the next theme change. +return { + foreground = "#", + background = "#", + + cursor_bg = "#", + cursor_fg = "#", + cursor_border = "#", + + selection_fg = "#", + selection_bg = "#", + + split = "#", + + -- black, red, green, yellow, blue, magenta, cyan, white + ansi = { + "#", + "#", + "#", + "#", + "#", + "#", + "#", + "#", + }, + + brights = { + "#", + "#", + "#", + "#", + "#", + "#", + "#", + "#", + }, + + tab_bar = { + background = "#", + + active_tab = { + bg_color = "#", + fg_color = "#", + }, + + inactive_tab = { + bg_color = "#", + fg_color = "#", + }, + + inactive_tab_hover = { + bg_color = "#", + fg_color = "#", + }, + + new_tab = { + bg_color = "#", + fg_color = "#", + }, + + new_tab_hover = { + bg_color = "#", + fg_color = "#", + }, + }, +} diff --git a/Scripts/dots-groups/optionals.toml b/Scripts/dots-groups/optionals.toml index 7a13058b99..3090087a53 100644 --- a/Scripts/dots-groups/optionals.toml +++ b/Scripts/dots-groups/optionals.toml @@ -12,6 +12,7 @@ "../dots/fish.toml", "../dots/wallbash-vim.toml", "../dots/spotify.toml", + "../dots/wezterm.toml", ] owner = "The HyDE Project" # diff --git a/Scripts/dots/wezterm.toml b/Scripts/dots/wezterm.toml new file mode 100644 index 0000000000..dcd069fc05 --- /dev/null +++ b/Scripts/dots/wezterm.toml @@ -0,0 +1,21 @@ +[wezterm] + description = "A GPU-accelerated cross-platform terminal emulator and multiplexer" + +[[wezterm.dependency]] + dnf = [ "wezterm" ] + pacman = [ "wezterm" ] + +[[wezterm.files]] + action = "sync" + paths = "wezterm/hyde.lua" + source_root = "Configs/.config/" + target_root = "${XDG_CONFIG_HOME}" + +[[wezterm.files]] + action = "preserve" + paths = "wezterm/wezterm.lua" + source_root = "Configs/.config/" + target_root = "${XDG_CONFIG_HOME}" + +# The colour template and its apply hook ship with the wallbash tree that +# hyde.toml already syncs, so they need no entry here. From 386e0700825e463006b2bbe11e2bef8e9a11e309 Mon Sep 17 00:00:00 2001 From: RAprogramm Date: Thu, 30 Jul 2026 04:59:11 +0700 Subject: [PATCH 2/4] #1869 feat: use a native wezterm colour scheme for wallbash --- Configs/.config/wezterm/hyde.lua | 31 ++-- .../.local/share/wallbash/scripts/wezterm.sh | 15 -- .../.local/share/wallbash/theme/wezterm.dcol | 138 ++++++++++-------- 3 files changed, 97 insertions(+), 87 deletions(-) delete mode 100755 Configs/.local/share/wallbash/scripts/wezterm.sh diff --git a/Configs/.config/wezterm/hyde.lua b/Configs/.config/wezterm/hyde.lua index 1d7cf1f1a3..c88ef98d31 100644 --- a/Configs/.config/wezterm/hyde.lua +++ b/Configs/.config/wezterm/hyde.lua @@ -17,15 +17,7 @@ local wezterm = require("wezterm") local M = {} --- Written by wallbash on every theme change. Absent until the first one runs, --- so a missing file is not an error. -local function wallbash_colors() - local ok, colors = pcall(require, "colors") - if ok and type(colors) == "table" then - return colors - end - return nil -end +local config_dir = (os.getenv("XDG_CONFIG_HOME") or (os.getenv("HOME") .. "/.config")) .. "/wezterm" --- Returns HyDE's defaults as a config table. --- @@ -37,7 +29,22 @@ end function M.config() local config = wezterm.config_builder() - config.colors = wallbash_colors() + -- wallbash writes hyde.toml here as a native colour scheme named + -- "wallbash". Watching that file means a theme switch reloads WezTerm on + -- its own, with nothing to signal and no need to touch the entry point. + -- + -- The scheme is only selected once the file exists: naming a scheme that is + -- not there makes WezTerm log an error on every start, which is what a + -- fresh install looks like before the first theme switch runs. + local palette = config_dir .. "/hyde.toml" + wezterm.add_to_config_reload_watch_list(palette) + + local handle = io.open(palette, "r") + if handle then + handle:close() + config.color_scheme_dirs = {config_dir} + config.color_scheme = "wallbash" + end config.font = wezterm.font_with_fallback({ "JetBrainsMono Nerd Font", @@ -60,10 +67,6 @@ function M.config() config.audible_bell = "Disabled" config.check_for_updates = false - -- The session already runs under Wayland, and letting WezTerm pick keeps - -- it working when it is started from an X11 session instead. - config.enable_wayland = true - return config end diff --git a/Configs/.local/share/wallbash/scripts/wezterm.sh b/Configs/.local/share/wallbash/scripts/wezterm.sh deleted file mode 100755 index 6973a634db..0000000000 --- a/Configs/.local/share/wallbash/scripts/wezterm.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -# Applies a freshly generated wallbash palette to WezTerm. -# -# WezTerm watches its configuration and reloads on change, so there is no -# signal to send. It only watches files it read while evaluating the config, -# and a colour file that did not exist on the last evaluation is not among -# them, so the entry point is touched to force one reload. - -confDir="${confDir:-$HOME/.config}" -weztermConf="${confDir}/wezterm/wezterm.lua" - -[ -f "$weztermConf" ] || exit 0 - -touch "$weztermConf" diff --git a/Configs/.local/share/wallbash/theme/wezterm.dcol b/Configs/.local/share/wallbash/theme/wezterm.dcol index e764493628..dd258de8ee 100644 --- a/Configs/.local/share/wallbash/theme/wezterm.dcol +++ b/Configs/.local/share/wallbash/theme/wezterm.dcol @@ -1,67 +1,89 @@ -${confDir}/wezterm/colors.lua|${WALLBASH_SCRIPTS}/wezterm.sh --- Generated by wallbash. Edits are overwritten on the next theme change. -return { - foreground = "#", - background = "#", +${confDir}/wezterm/hyde.toml +# Renders a native WezTerm colour scheme named wallbash. +# Template by: The HyDE Project - cursor_bg = "#", - cursor_fg = "#", - cursor_border = "#", +[metadata] +aliases = [] +author = 'The HyDE Project' +name = 'wallbash' - selection_fg = "#", - selection_bg = "#", +[colors] +ansi = [ + '#', + '#', + '#', + '#', + '#', + '#', + '#', + '#', +] +background = '#' +brights = [ + '#', + '#', + '#', + '#', + '#', + '#', + '#', + '#', +] +compose_cursor = '#' +cursor_bg = '#' +cursor_border = '#' +cursor_fg = '#' +foreground = '#' +scrollbar_thumb = '#' +selection_bg = '#' +selection_fg = '#' +split = '#' +visual_bell = '#' - split = "#", +[colors.indexed] +16 = '#' +17 = '#' - -- black, red, green, yellow, blue, magenta, cyan, white - ansi = { - "#", - "#", - "#", - "#", - "#", - "#", - "#", - "#", - }, +[colors.tab_bar] +background = '#' +inactive_tab_edge = '#' - brights = { - "#", - "#", - "#", - "#", - "#", - "#", - "#", - "#", - }, +[colors.tab_bar.active_tab] +bg_color = '#' +fg_color = '#' +intensity = 'Normal' +italic = false +strikethrough = false +underline = 'None' - tab_bar = { - background = "#", +[colors.tab_bar.inactive_tab] +bg_color = '#' +fg_color = '#' +intensity = 'Normal' +italic = false +strikethrough = false +underline = 'None' - active_tab = { - bg_color = "#", - fg_color = "#", - }, +[colors.tab_bar.inactive_tab_hover] +bg_color = '#' +fg_color = '#' +intensity = 'Normal' +italic = false +strikethrough = false +underline = 'None' - inactive_tab = { - bg_color = "#", - fg_color = "#", - }, +[colors.tab_bar.new_tab] +bg_color = '#' +fg_color = '#' +intensity = 'Normal' +italic = false +strikethrough = false +underline = 'None' - inactive_tab_hover = { - bg_color = "#", - fg_color = "#", - }, - - new_tab = { - bg_color = "#", - fg_color = "#", - }, - - new_tab_hover = { - bg_color = "#", - fg_color = "#", - }, - }, -} +[colors.tab_bar.new_tab_hover] +bg_color = '#' +fg_color = '#' +intensity = 'Normal' +italic = false +strikethrough = false +underline = 'None' From 94c4d4e5f0d89eb729bbac3d7850958b0c5e0e5a Mon Sep 17 00:00:00 2001 From: RAprogramm Date: Thu, 30 Jul 2026 05:24:01 +0700 Subject: [PATCH 3/4] #1869 refactor: consume the wezterm config from terminal-emulators --- Configs/.config/wezterm/hyde.lua | 73 --------------- Configs/.config/wezterm/wezterm.lua | 14 --- .../.local/share/wallbash/theme/wezterm.dcol | 89 ------------------- Scripts/dots/wezterm.toml | 5 +- 4 files changed, 3 insertions(+), 178 deletions(-) delete mode 100644 Configs/.config/wezterm/hyde.lua delete mode 100644 Configs/.config/wezterm/wezterm.lua delete mode 100644 Configs/.local/share/wallbash/theme/wezterm.dcol diff --git a/Configs/.config/wezterm/hyde.lua b/Configs/.config/wezterm/hyde.lua deleted file mode 100644 index c88ef98d31..0000000000 --- a/Configs/.config/wezterm/hyde.lua +++ /dev/null @@ -1,73 +0,0 @@ ---! ░▒▓ ---! ░▒▒░▓▓ ---! ░▒▒▒░░░▓▓ ___________ ---! ░░▒▒▒░░░░░▓▓ //___________/ ---! ░░▒▒▒░░░░░▓▓ _ _ _ _ _____ ---! ░░▒▒░░░░░▓▓▓▓▓▓ | | | | | | | __/ ---! ░▒▒░░░░▓▓ ▓▓ | |_| | |_/ /| |___ ---! ░▒▒░░▓▓ ▓▓ \__ |____/ |____/ █░█░█ █▀▀ ▀█ ▀█▀ █▀▀ █▀█ █▀▄▀█ ---! ░▒▓▓ ▓▓ //____/ ▀▄▀▄▀ ██▄ █▄ ░█░ ██▄ █▀▄ █░▀░█ - --- HyDE's WezTerm defaults. --- --- This file is replaced on update. Put your own settings in wezterm.lua, --- which HyDE never overwrites. - -local wezterm = require("wezterm") - -local M = {} - -local config_dir = (os.getenv("XDG_CONFIG_HOME") or (os.getenv("HOME") .. "/.config")) .. "/wezterm" - ---- Returns HyDE's defaults as a config table. ---- ---- Merge your own settings on top of it: ---- ---- local config = require("hyde").config() ---- config.font_size = 12 ---- return config -function M.config() - local config = wezterm.config_builder() - - -- wallbash writes hyde.toml here as a native colour scheme named - -- "wallbash". Watching that file means a theme switch reloads WezTerm on - -- its own, with nothing to signal and no need to touch the entry point. - -- - -- The scheme is only selected once the file exists: naming a scheme that is - -- not there makes WezTerm log an error on every start, which is what a - -- fresh install looks like before the first theme switch runs. - local palette = config_dir .. "/hyde.toml" - wezterm.add_to_config_reload_watch_list(palette) - - local handle = io.open(palette, "r") - if handle then - handle:close() - config.color_scheme_dirs = {config_dir} - config.color_scheme = "wallbash" - end - - config.font = wezterm.font_with_fallback({ - "JetBrainsMono Nerd Font", - "mononoki Nerd Font", - "monospace", - }) - config.font_size = 11 - - config.window_background_opacity = 0.8 - config.window_decorations = "NONE" - config.window_padding = {left = 8, right = 8, top = 8, bottom = 8} - - config.use_fancy_tab_bar = false - config.hide_tab_bar_if_only_one_tab = true - config.tab_bar_at_bottom = false - - config.scrollback_lines = 10000 - config.enable_scroll_bar = false - - config.audible_bell = "Disabled" - config.check_for_updates = false - - return config -end - -return M diff --git a/Configs/.config/wezterm/wezterm.lua b/Configs/.config/wezterm/wezterm.lua deleted file mode 100644 index 4d89e46f53..0000000000 --- a/Configs/.config/wezterm/wezterm.lua +++ /dev/null @@ -1,14 +0,0 @@ --- Your WezTerm configuration. --- --- HyDE does not manage this file, so anything you put here survives an --- update. HyDE's defaults and the wallbash colours live in hyde.lua, which is --- replaced on every update. - -local config = require("hyde").config() - --- Your settings go below. They override the defaults, for example: --- --- config.font_size = 12 --- config.window_background_opacity = 1.0 - -return config diff --git a/Configs/.local/share/wallbash/theme/wezterm.dcol b/Configs/.local/share/wallbash/theme/wezterm.dcol deleted file mode 100644 index dd258de8ee..0000000000 --- a/Configs/.local/share/wallbash/theme/wezterm.dcol +++ /dev/null @@ -1,89 +0,0 @@ -${confDir}/wezterm/hyde.toml -# Renders a native WezTerm colour scheme named wallbash. -# Template by: The HyDE Project - -[metadata] -aliases = [] -author = 'The HyDE Project' -name = 'wallbash' - -[colors] -ansi = [ - '#', - '#', - '#', - '#', - '#', - '#', - '#', - '#', -] -background = '#' -brights = [ - '#', - '#', - '#', - '#', - '#', - '#', - '#', - '#', -] -compose_cursor = '#' -cursor_bg = '#' -cursor_border = '#' -cursor_fg = '#' -foreground = '#' -scrollbar_thumb = '#' -selection_bg = '#' -selection_fg = '#' -split = '#' -visual_bell = '#' - -[colors.indexed] -16 = '#' -17 = '#' - -[colors.tab_bar] -background = '#' -inactive_tab_edge = '#' - -[colors.tab_bar.active_tab] -bg_color = '#' -fg_color = '#' -intensity = 'Normal' -italic = false -strikethrough = false -underline = 'None' - -[colors.tab_bar.inactive_tab] -bg_color = '#' -fg_color = '#' -intensity = 'Normal' -italic = false -strikethrough = false -underline = 'None' - -[colors.tab_bar.inactive_tab_hover] -bg_color = '#' -fg_color = '#' -intensity = 'Normal' -italic = false -strikethrough = false -underline = 'None' - -[colors.tab_bar.new_tab] -bg_color = '#' -fg_color = '#' -intensity = 'Normal' -italic = false -strikethrough = false -underline = 'None' - -[colors.tab_bar.new_tab_hover] -bg_color = '#' -fg_color = '#' -intensity = 'Normal' -italic = false -strikethrough = false -underline = 'None' diff --git a/Scripts/dots/wezterm.toml b/Scripts/dots/wezterm.toml index dcd069fc05..68ac08264d 100644 --- a/Scripts/dots/wezterm.toml +++ b/Scripts/dots/wezterm.toml @@ -17,5 +17,6 @@ source_root = "Configs/.config/" target_root = "${XDG_CONFIG_HOME}" -# The colour template and its apply hook ship with the wallbash tree that -# hyde.toml already syncs, so they need no entry here. +# The colour template ships with the wallbash tree that hyde.toml already syncs, +# so it needs no entry here. There is no apply hook: WezTerm reloads on its own +# through the watch list in hyde.lua. From 65b6a3344ad122529bba2d67a4be98e42a2d1570 Mon Sep 17 00:00:00 2001 From: RAprogramm Date: Thu, 30 Jul 2026 05:55:18 +0700 Subject: [PATCH 4/4] #1869 refactor: point the metafile at the terminal-emulators archive --- Scripts/dots/wezterm.toml | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/Scripts/dots/wezterm.toml b/Scripts/dots/wezterm.toml index 68ac08264d..72edb698f3 100644 --- a/Scripts/dots/wezterm.toml +++ b/Scripts/dots/wezterm.toml @@ -1,5 +1,13 @@ +# Configuration and wallbash template live in HyDE-Project/terminal-emulators, +# alongside the other terminals. This mirrors the dot declared there, consumed +# over the branch archive since the installer takes one git remote per run. +# +# The archive holds a single top-level directory, which the installer strips, +# so every path below is relative to the repository root. + [wezterm] description = "A GPU-accelerated cross-platform terminal emulator and multiplexer" + source = "https://github.com/HyDE-Project/terminal-emulators/archive/refs/heads/main.zip" [[wezterm.dependency]] dnf = [ "wezterm" ] @@ -7,16 +15,18 @@ [[wezterm.files]] action = "sync" - paths = "wezterm/hyde.lua" - source_root = "Configs/.config/" - target_root = "${XDG_CONFIG_HOME}" + paths = "hyde.lua" + source_root = "wezterm" + target_root = "${XDG_CONFIG_HOME}/wezterm" [[wezterm.files]] action = "preserve" - paths = "wezterm/wezterm.lua" - source_root = "Configs/.config/" - target_root = "${XDG_CONFIG_HOME}" + paths = "wezterm.lua" + source_root = "wezterm" + target_root = "${XDG_CONFIG_HOME}/wezterm" -# The colour template ships with the wallbash tree that hyde.toml already syncs, -# so it needs no entry here. There is no apply hook: WezTerm reloads on its own -# through the watch list in hyde.lua. +[[wezterm.files]] + action = "sync" + paths = "wezterm.dcol" + source_root = "wezterm" + target_root = "${XDG_DATA_HOME}/wallbash/theme"