Initial WezTerm configuration

This commit is contained in:
Fabio Scotto di Santolo
2024-12-29 17:03:25 +01:00
parent fc2d5133df
commit 0a34b63540
18 changed files with 853 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ Below is a list of the software:
- Sway - Sway
- Tmux - Tmux
- Waybar - Waybar
- Wezterm
- Yazi - Yazi
- Zellij - Zellij
- Zoxide - Zoxide

4
wezterm/.config/wezterm/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
/luarocks.bat
/lua.bat
/lua_modules
/.luarocks

View File

@@ -0,0 +1,3 @@
{
"workspace.checkThirdParty": false
}

View File

@@ -0,0 +1,6 @@
column_width = 100
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 3
quote_style = "AutoPreferSingle"
call_parentheses = "Always"

View File

@@ -0,0 +1,94 @@
-- A slightly altered version of catppucchin mocha
-- please check: https://wezfurlong.org/wezterm/config/appearance.html
local mocha = {
rosewater = '#f5e0dc',
flamingo = '#f2cdcd',
pink = '#f5c2e7',
mauve = '#cba6f7',
red = '#f38ba8',
maroon = '#eba0ac',
peach = '#fab387',
yellow = '#f9e2af',
green = '#a6e3a1',
teal = '#94e2d5',
sky = '#89dceb',
sapphire = '#74c7ec',
blue = '#89b4fa',
lavender = '#b4befe',
text = '#cdd6f4',
subtext1 = '#bac2de',
subtext0 = '#a6adc8',
overlay2 = '#9399b2',
overlay1 = '#7f849c',
overlay0 = '#6c7086',
surface2 = '#585b70',
surface1 = '#45475a',
surface0 = '#313244',
base = '#1f1f28',
mantle = '#181825',
crust = '#11111b',
}
local colorscheme = {
foreground = mocha.text,
background = mocha.base,
cursor_bg = mocha.rosewater,
cursor_border = mocha.rosewater,
cursor_fg = mocha.crust,
selection_bg = mocha.surface2,
selection_fg = mocha.text,
ansi = {
'#282828', -- black
'#cc241d', -- red
'#98971a', -- green
'#d79921', -- yellow
'#458588', -- blue
'#b16286', -- magenta/purple
'#3A96DD', -- cyan
'#CCCCCC', -- white
},
brights = {
'#767676', -- black
'#E74856', -- red
'#16C60C', -- green
'#F9F1A5', -- yellow
'#3B78FF', -- blue
'#B4009E', -- magenta/purple
'#61D6D6', -- cyan
'#F2F2F2', -- white
},
tab_bar = {
background = '#000000',
active_tab = {
bg_color = mocha.surface2,
fg_color = mocha.text,
},
inactive_tab = {
bg_color = mocha.surface0,
fg_color = mocha.subtext1,
},
inactive_tab_hover = {
bg_color = mocha.surface0,
fg_color = mocha.text,
},
new_tab = {
bg_color = mocha.base,
fg_color = mocha.text,
},
new_tab_hover = {
bg_color = mocha.mantle,
fg_color = mocha.text,
italic = true,
},
},
visual_bell = mocha.surface0,
indexed = {
[16] = mocha.peach,
[17] = mocha.rosewater,
},
scrollbar_thumb = mocha.surface2,
split = mocha.overlay0,
compose_cursor = mocha.flamingo, -- nightbuild only
}
return colorscheme

View File

@@ -0,0 +1,87 @@
local wezterm = require('wezterm')
local colors = require('colors.custom')
local platform = require('utils.platform')()
local config = {}
if platform.is_mac then
config.button_style = 'MacOsNative'
config.button_alignment = 'Left'
elseif platform.is_linux then
config.button_style = 'Gnome'
config.button_alignment = 'Right'
else
config.buttun_style = 'Windows'
config.button_alignment = 'Right'
end
return {
term = 'xterm-256color',
animation_fps = 60,
max_fps = 60,
front_end = 'WebGpu',
webgpu_power_preference = 'HighPerformance',
warn_about_missing_glyphs = false,
-- color scheme
-- colors = colors, if you want to setting your color custom
color_scheme = 'Gruvbox dark, medium (base16)',
-- Set to deault rows and columns
initial_cols = 140,
initial_rows = 35,
-- background
window_background_opacity = 0.80,
win32_system_backdrop = 'Acrylic',
background = {
{
source = { Color = '#1d2021' },
height = '100%',
width = '100%',
opacity = 0.90,
},
},
-- scrollbar
enable_scroll_bar = true,
min_scroll_bar_height = '3cell',
colors = {
scrollbar_thumb = '#34354D',
},
-- tab bar
enable_tab_bar = true,
hide_tab_bar_if_only_one_tab = false,
use_fancy_tab_bar = true,
tab_max_width = 25,
show_tab_index_in_tab_bar = true,
switch_to_last_active_tab_when_closing_tab = true,
-- cursor
default_cursor_style = 'BlinkingBlock',
cursor_blink_ease_in = 'Constant',
cursor_blink_ease_out = 'Constant',
cursor_blink_rate = 0,
-- window
adjust_window_size_when_changing_font_size = true,
window_decorations = 'INTEGRATED_BUTTONS|RESIZE',
integrated_title_button_style = config.button_style,
integrated_title_button_color = '#282828',
integrated_title_button_alignment = config.button_alignment,
window_padding = {
left = 5,
right = 10,
top = 12,
bottom = 7,
},
window_close_confirmation = 'AlwaysPrompt',
window_frame = {
active_titlebar_bg = '#282828',
inactive_titlebar_bg = '#282828',
-- font = fonts.font,
-- font_size = fonts.font_size,
},
inactive_pane_hsb = { saturation = 1.0, brightness = 1.0 },
}

View File

@@ -0,0 +1,207 @@
local wezterm = require('wezterm')
local platform = require('utils.platform')()
local act = wezterm.action
local mod = {}
if platform.is_mac then
mod.SUPER = 'SUPER'
mod.SUPER_REV = 'SUPER|CTRL'
elseif platform.is_win or platform.is_linux then
mod.SUPER = 'ALT' -- to not conflict with Windows key shortcuts
mod.SUPER_REV = 'ALT|CTRL'
end
local keys = {
-- misc/useful --
{ key = 'F1', mods = 'NONE', action = 'ActivateCopyMode' },
{ key = 'F2', mods = 'NONE', action = act.ActivateCommandPalette },
{ key = 'F3', mods = 'NONE', action = act.ShowLauncher },
{ key = 'F4', mods = 'NONE', action = act.ShowTabNavigator },
{ key = 'F11', mods = 'NONE', action = act.ToggleFullScreen },
{ key = 'F12', mods = 'NONE', action = act.ShowDebugOverlay },
{ key = 'f', mods = mod.SUPER, action = act.Search({ CaseInSensitiveString = '' }) },
-- copy/paste --
{ key = 'c', mods = 'CTRL|SHIFT', action = act.CopyTo('Clipboard') },
{ key = 'v', mods = 'CTRL|SHIFT', action = act.PasteFrom('Clipboard') },
-- tabs --
-- tabs: spawn+close
{ key = 't', mods = mod.SUPER, action = act.SpawnTab('DefaultDomain') },
{ key = 't', mods = mod.SUPER_REV, action = act.SpawnTab({ DomainName = 'WSL:Ubuntu' }) },
{ key = 'w', mods = mod.SUPER_REV, action = act.CloseCurrentTab({ confirm = false }) },
-- tabs: navigation
{ key = '[', mods = mod.SUPER, action = act.ActivateTabRelative(-1) },
{ key = ']', mods = mod.SUPER, action = act.ActivateTabRelative(1) },
{ key = '[', mods = mod.SUPER_REV, action = act.MoveTabRelative(-1) },
{ key = ']', mods = mod.SUPER_REV, action = act.MoveTabRelative(1) },
-- window --
-- spawn windows
{ key = 'n', mods = mod.SUPER, action = act.SpawnWindow },
-- panes --
-- panes: split panes
{
key = [[/]],
mods = mod.SUPER_REV,
action = act.SplitVertical({ domain = 'CurrentPaneDomain' }),
},
{
key = [[\]],
mods = mod.SUPER_REV,
action = act.SplitHorizontal({ domain = 'CurrentPaneDomain' }),
},
{
key = [[-]],
mods = mod.SUPER_REV,
action = act.CloseCurrentPane({ confirm = true }),
},
-- panes: zoom+close pane
{ key = 'z', mods = mod.SUPER_REV, action = act.TogglePaneZoomState },
{ key = 'w', mods = mod.SUPER, action = act.CloseCurrentPane({ confirm = false }) },
-- panes: navigation
{ key = 'k', mods = mod.SUPER_REV, action = act.ActivatePaneDirection('Up') },
{ key = 'j', mods = mod.SUPER_REV, action = act.ActivatePaneDirection('Down') },
{ key = 'h', mods = mod.SUPER_REV, action = act.ActivatePaneDirection('Left') },
{ key = 'l', mods = mod.SUPER_REV, action = act.ActivatePaneDirection('Right') },
-- panes: resize
{ key = 'UpArrow', mods = mod.SUPER_REV, action = act.AdjustPaneSize({ 'Up', 1 }) },
{ key = 'DownArrow', mods = mod.SUPER_REV, action = act.AdjustPaneSize({ 'Down', 1 }) },
{ key = 'LeftArrow', mods = mod.SUPER_REV, action = act.AdjustPaneSize({ 'Left', 1 }) },
{ key = 'RightArrow', mods = mod.SUPER_REV, action = act.AdjustPaneSize({ 'Right', 1 }) },
-- fonts --
-- fonts: resize
{ key = 'UpArrow', mods = mod.SUPER, action = act.IncreaseFontSize },
{ key = 'DownArrow', mods = mod.SUPER, action = act.DecreaseFontSize },
{ key = 'r', mods = mod.SUPER, action = act.ResetFontSize },
-- key-tables --
-- resizes fonts
{
key = 'f',
mods = 'LEADER',
action = act.ActivateKeyTable({
name = 'resize_font',
one_shot = false,
timemout_miliseconds = 1000,
}),
},
-- resize panes
{
key = 'p',
mods = 'LEADER',
action = act.ActivateKeyTable({
name = 'resize_pane',
one_shot = false,
timemout_miliseconds = 1000,
}),
},
-- rename tab bar
{
key = 'R',
mods = 'CTRL|SHIFT',
action = act.PromptInputLine({
description = 'Enter new name for tab',
action = wezterm.action_callback(function(window, pane, line)
-- line will be `nil` if they hit escape without entering anything
-- An empty string if they just hit enter
-- Or the actual line of text they wrote
if line then
window:active_tab():set_title(line)
end
end),
}),
},
}
local key_tables = {
resize_font = {
{ key = 'k', action = act.IncreaseFontSize },
{ key = 'j', action = act.DecreaseFontSize },
{ key = 'r', action = act.ResetFontSize },
{ key = 'Escape', action = 'PopKeyTable' },
{ key = 'q', action = 'PopKeyTable' },
},
resize_pane = {
{ key = 'k', action = act.AdjustPaneSize({ 'Up', 1 }) },
{ key = 'j', action = act.AdjustPaneSize({ 'Down', 1 }) },
{ key = 'h', action = act.AdjustPaneSize({ 'Left', 1 }) },
{ key = 'l', action = act.AdjustPaneSize({ 'Right', 1 }) },
{ key = 'Escape', action = 'PopKeyTable' },
{ key = 'q', action = 'PopKeyTable' },
},
}
local mouse_bindings = {
-- Ctrl-click will open the link under the mouse cursor
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'CTRL',
action = act.OpenLinkAtMouseCursor,
},
-- Move mouse will only select text and not copy text to clipboard
{
event = { Down = { streak = 1, button = 'Left' } },
mods = 'NONE',
action = act.SelectTextAtMouseCursor('Cell'),
},
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'NONE',
action = act.ExtendSelectionToMouseCursor('Cell'),
},
{
event = { Drag = { streak = 1, button = 'Left' } },
mods = 'NONE',
action = act.ExtendSelectionToMouseCursor('Cell'),
},
-- Triple Left click will select a line
{
event = { Down = { streak = 3, button = 'Left' } },
mods = 'NONE',
action = act.SelectTextAtMouseCursor('Line'),
},
{
event = { Up = { streak = 3, button = 'Left' } },
mods = 'NONE',
action = act.SelectTextAtMouseCursor('Line'),
},
-- Double Left click will select a word
{
event = { Down = { streak = 2, button = 'Left' } },
mods = 'NONE',
action = act.SelectTextAtMouseCursor('Word'),
},
{
event = { Up = { streak = 2, button = 'Left' } },
mods = 'NONE',
action = act.SelectTextAtMouseCursor('Word'),
},
-- Turn on the mouse wheel to scroll the screen
{
event = { Down = { streak = 1, button = { WheelUp = 1 } } },
mods = 'NONE',
action = act.ScrollByCurrentEventWheelDelta,
},
{
event = { Down = { streak = 1, button = { WheelDown = 1 } } },
mods = 'NONE',
action = act.ScrollByCurrentEventWheelDelta,
},
}
return {
disable_default_key_bindings = true,
disable_default_mouse_bindings = true,
leader = { key = 'Space', mods = 'CTRL|SHIFT' },
keys = keys,
key_tables = key_tables,
mouse_bindings = mouse_bindings,
}

View File

@@ -0,0 +1,5 @@
-- Please check https://wezfurlong.org/wezterm/config/lua/SshDomain.html
return {
ssh_domains = {},
}

View File

@@ -0,0 +1,14 @@
local wezterm = require('wezterm')
return {
font = wezterm.font_with_fallback({
{ family = 'CaskaydiaMono Nerd Font Mono', weight = 'Regular' },
{ family = 'FiraCode Nerd Font', weight= 'Regular' },
{ family = 'JetBrainsMono Nerd Font', weight = 'Regular' },
}),
font_size = 16,
--ref: https://wezfurlong.org/wezterm/config/lua/config/freetype_pcf_long_family_names.html#why-doesnt-wezterm-use-the-distro-freetype-or-match-its-configuration
freetype_load_target = 'Normal', ---@type 'Normal'|'Light'|'Mono'|'HorizontalLcd'
freetype_render_target = 'Normal', ---@type 'Normal'|'Light'|'Mono'|'HorizontalLcd'
}

View File

@@ -0,0 +1,50 @@
return {
-- behaviours
automatically_reload_config = true,
check_for_updates = false,
exit_behavior = 'CloseOnCleanExit', -- if the shell program exited with a successful status
status_update_interval = 1000,
-- scrollbar
scrollback_lines = 5000,
-- paste behaviours
canonicalize_pasted_newlines = 'CarriageReturn',
hyperlink_rules = {
-- Matches: a URL in parens: (URL)
{
regex = '\\((\\w+://\\S+)\\)',
format = '$1',
highlight = 1,
},
-- Matches: a URL in brackets: [URL]
{
regex = '\\[(\\w+://\\S+)\\]',
format = '$1',
highlight = 1,
},
-- Matches: a URL in curly braces: {URL}
{
regex = '\\{(\\w+://\\S+)\\}',
format = '$1',
highlight = 1,
},
-- Matches: a URL in angle brackets: <URL>
{
regex = '<(\\w+://\\S+)>',
format = '$1',
highlight = 1,
},
-- Then handle URLs not wrapped in brackets
{
regex = '\\b\\w+://\\S+[)/a-zA-Z0-9-]+',
format = '$0',
},
-- implicit mailto link
{
regex = '\\b\\w+@[\\w-]+(\\.[\\w-]+)+\\b',
format = 'mailto:$0',
},
},
}

View File

@@ -0,0 +1,34 @@
local wezterm = require('wezterm')
---@class Config
---@field options table
local Config = {}
---Initialize Config
---@return Config
function Config:init()
local o = {}
self = setmetatable(o, { __index = Config })
self.options = {}
return o
end
---Append to `Config.options`
---@param new_options table new options to append
---@return Config
function Config:append(new_options)
for k, v in pairs(new_options) do
if self.options[k] ~= nil then
wezterm.log_warn(
'Duplicate config option detected: ',
{ old = self.options[k], new = new_options[k] }
)
goto continue
end
self.options[k] = v
::continue::
end
return self
end
return Config

View File

@@ -0,0 +1,34 @@
local platform = require('utils.platform')()
local options = {
default_prog = {},
launch_menu = {},
}
if platform.is_win then
options.default_prog = { 'pwsh' }
options.launch_menu = {
{ label = 'PowerShell Core', args = { 'pwsh' } },
{ label = 'PowerShell Desktop', args = { 'powershell' } },
{
label = 'Git Bash',
args = { 'C:\\Program Files\\Git\\bin\\bash.exe' },
}
}
elseif platform.is_mac or platform.is_linux then
options.default_prog = { '/bin/zsh', '-l' }
options.launch_menu = {
{ label = 'Zsh', args = { 'zsh', '-l' } },
{ label = 'Bash', args = { 'bash', '-l' } },
{ label = 'Fish', args = { 'fish', '-l' } },
}
elseif platform.is_linux then
options.default_prog = { 'zsh', '-l' }
options.launch_menu = {
{ label = 'Zsh', args = { 'zsh', '-l' } },
{ label = 'Bash', args = { 'bash', '-l' } },
{ label = 'Fish', args = { 'fish', '-l' } },
}
end
return options

View File

@@ -0,0 +1,21 @@
local wezterm = require('wezterm')
local M = {}
M.setup = function()
wezterm.on('new-tab-button-click', function(window, pane, button, default_action)
wezterm.log_info('new-tab', window, pane, button, default_action)
if default_action and button == 'Left' then
window:perform_action(default_action, pane)
end
if default_action and button == 'Right' then
window:perform_action(
wezterm.action.ShowLauncherArgs({ title = ' Select/Search:', flags = 'FUZZY|LAUNCH_MENU_ITEMS|DOMAINS'}), pane
)
end
return false
end)
end
return M

View File

@@ -0,0 +1,76 @@
local wezterm = require('wezterm')
local math = require('utils.math')
local M = {}
M.separator_char = ''
M.colors = {
date_fg = '#79740e',
date_bg = '#282828',
battery_fg = '#79740e',
battery_bg = '#282828',
separator_fg = '#786D22',
separator_bg = '#282828',
}
M.cells = {} -- wezterm FormatItems (ref: https://wezfurlong.org/wezterm/config/lua/wezterm/format.html)
---@param text string
---@param icon string
---@param fg string
---@param bg string
---@param separate boolean
M.push = function(text, icon, fg, bg, separate)
table.insert(M.cells, { Foreground = { Color = fg } })
table.insert(M.cells, { Background = { Color = bg } })
table.insert(M.cells, { Attribute = { Intensity = 'Bold' } })
table.insert(M.cells, { Text = icon .. ' ' .. text .. ' ' })
if separate then
table.insert(M.cells, { Foreground = { Color = M.colors.separator_fg } })
table.insert(M.cells, { Background = { Color = M.colors.separator_bg } })
table.insert(M.cells, { Text = M.separator_char })
end
table.insert(M.cells, 'ResetAttributes')
end
M.set_date = function()
local date = wezterm.strftime(' %a %H:%M')
M.push(date, '', M.colors.date_fg, M.colors.date_bg, true)
end
M.set_battery = function()
-- ref: https://wezfurlong.org/wezterm/config/lua/wezterm/battery_info.html
local discharging_icons =
{ '', '', '', '', '', '', '', '', '', '' }
local charging_icons = { '', '', '', '', '', '', '', '', '', '' }
local charge = ''
local icon = '🔋'
for _, b in ipairs(wezterm.battery_info()) do
local idx = math.clamp(math.round(b.state_of_charge * 10), 1, 10)
charge = string.format('%.0f%%', b.state_of_charge * 100)
if b.state == 'Charging' then
icon = charging_icons[idx]
else
icon = discharging_icons[idx]
end
end
M.push(charge, ' 🔋', M.colors.battery_fg, M.colors.battery_bg, false)
end
M.setup = function()
wezterm.on('update-right-status', function(window)
M.cells = {}
M.set_date()
M.set_battery()
window:set_right_status(wezterm.format(M.cells))
end)
end
return M

View File

@@ -0,0 +1,175 @@
local wezterm = require('wezterm')
local platform = require('utils.platform')()
-- Inspired by https://github.com/wez/wezterm/discussions/628#discussioncomment-1874614
local GLYPH_SEMI_CIRCLE_LEFT = ''
-- local GLYPH_SEMI_CIRCLE_LEFT = utf8.char(0xe0b6)
local GLYPH_SEMI_CIRCLE_RIGHT = ''
-- local GLYPH_SEMI_CIRCLE_RIGHT = utf8.char(0xe0b4)
local GLYPH_CIRCLE = '💤' -- 
-- local GLYPH_CIRCLE = utf8.char(0xf111)
local GLYPH_ADMIN = ''
-- local GLYPH_ADMIN = utf8.char(0xfc7e)
local M = {}
M.cells = {}
M.colors = {
default = {
bg = '#7c6f64',
fg = '#282828',
},
is_active = {
bg = '#d79921',
fg = '#282828',
},
hover = {
bg = '#d79921',
fg = '#282828',
},
}
M.set_process_name = function(s)
local a = string.gsub(s, '(.*[/\\])(.*)', '%2')
return a:gsub('%.exe$', '')
end
M.set_title = function(process_name, static_title, active_title, max_width, inset)
local title
-- 󰌽  
local icon
inset = inset or 6
if platform.is_win and not process_name:find('wsl') then
icon = ''
elseif process_name:find('wsl') then
icon = ''
elseif platform.is_mac then
icon = ''
elseif platform.is_linux then
icon = ''
end
title = icon .. process_name .. ' ~ ' .. ' '
if process_name:len() > 0 and static_title:len() == 0 then
title = icon .. process_name .. ' ~ ' .. ' '
elseif static_title:len() > 0 then
title = icon .. static_title .. ' ~ ' .. ' '
else
title = icon .. active_title .. ' ~ ' .. ' '
end
if title:len() > max_width - inset then
local diff = title:len() - max_width + inset
title = wezterm.truncate_right(title, title:len() - diff)
end
return title
end
M.check_if_admin = function(p)
if p:match('^Administrator: ') then
return true
end
return false
end
---@param fg string
---@param bg string
---@param attribute table
---@param text string
M.push = function(bg, fg, attribute, text)
table.insert(M.cells, { Background = { Color = bg } })
table.insert(M.cells, { Foreground = { Color = fg } })
table.insert(M.cells, { Attribute = attribute })
table.insert(M.cells, { Text = text })
end
M.setup = function()
wezterm.on('format-tab-title', function(tab, tabs, panes, config, hover, max_width)
M.cells = {}
local bg
local fg
local process_name = M.set_process_name(tab.active_pane.foreground_process_name)
local is_admin = M.check_if_admin(tab.active_pane.title)
local title = M.set_title(
process_name,
tab.tab_title,
tab.active_pane.title,
max_width,
(is_admin and 8)
)
if tab.is_active then
bg = M.colors.is_active.bg
fg = M.colors.is_active.fg
elseif hover then
bg = M.colors.hover.bg
fg = M.colors.hover.fg
else
bg = M.colors.default.bg
fg = M.colors.default.fg
end
local has_unseen_output = false
for _, pane in ipairs(tab.panes) do
if pane.has_unseen_output then
has_unseen_output = true
break
end
end
-- Left semi-circle
M.push(fg, bg, { Intensity = 'Bold' }, GLYPH_SEMI_CIRCLE_LEFT)
-- Admin Icon
if is_admin then
M.push(bg, fg, { Intensity = 'Bold' }, ' ' .. GLYPH_ADMIN)
end
-- Title
M.push(bg, fg, { Intensity = 'Bold' }, ' ' .. title)
-- Unseen output alert
if has_unseen_output then
M.push(bg, '#79740e', { Intensity = 'Bold' }, ' ' .. GLYPH_CIRCLE)
end
-- Right padding
M.push(bg, fg, { Intensity = 'Bold' }, ' ')
-- Right semi-circle
M.push(fg, bg, { Intensity = 'Bold' }, GLYPH_SEMI_CIRCLE_RIGHT)
return M.cells
end)
end
return M
-- local CMD_ICON = utf8.char(0xe62a)
-- local NU_ICON = utf8.char(0xe7a8)
-- local PS_ICON = utf8.char(0xe70f)
-- local ELV_ICON = utf8.char(0xfc6f)
-- local WSL_ICON = utf8.char(0xf83c)
-- local YORI_ICON = utf8.char(0xf1d4)
-- local NYA_ICON = utf8.char(0xf61a)
--
-- local VIM_ICON = utf8.char(0xe62b)
-- local PAGER_ICON = utf8.char(0xf718)
-- local FUZZY_ICON = utf8.char(0xf0b0)
-- local HOURGLASS_ICON = utf8.char(0xf252)
-- local SUNGLASS_ICON = utf8.char(0xf9df)
--
-- local PYTHON_ICON = utf8.char(0xf820)
-- local NODE_ICON = utf8.char(0xe74e)
-- local DENO_ICON = utf8.char(0xe628)
-- local LAMBDA_ICON = utf8.char(0xfb26)
--
-- local SOLID_LEFT_ARROW = utf8.char(0xe0ba)
-- local SOLID_LEFT_MOST = utf8.char(0x2588)
-- local SOLID_RIGHT_ARROW = utf8.char(0xe0bc)
-- local ADMIN_ICON = utf8.char(0xf49c)

View File

@@ -0,0 +1,14 @@
local _math = math
_math.clamp = function(x, min, max)
return x < min and min or (x > max and max or x)
end
_math.round = function(x, increment)
if increment then
return _math.round(x / increment) * increment
end
return x >= 0 and math.floor(x + 0.5) or math.ceil(x - 0.5)
end
return _math

View File

@@ -0,0 +1,15 @@
local wezterm = require('wezterm')
local function is_found(str, pattern)
return string.find(str, pattern) ~= nil
end
local function platform()
return {
is_win = is_found(wezterm.target_triple, 'windows'),
is_linux = is_found(wezterm.target_triple, 'linux'),
is_mac = is_found(wezterm.target_triple, 'apple'),
}
end
return platform

View File

@@ -0,0 +1,13 @@
local Config = require('config')
require('events.right-status').setup()
require('events.tab-title').setup()
require('events.new-tab-button').setup()
return Config:init()
:append(require('config.appearance'))
:append(require('config.bindings'))
:append(require('config.domains'))
:append(require('config.fonts'))
:append(require('config.general'))
:append(require('config.launch')).options