{"id":335,"date":"2026-11-03T13:25:20","date_gmt":"2026-11-03T12:25:20","guid":{"rendered":"https:\/\/linuxundich.de\/en\/ghostty-config-2-0-ghostty-settings-terminal\/"},"modified":"2026-11-03T13:25:20","modified_gmt":"2026-11-03T12:25:20","slug":"ghostty-config-2-0-ghostty-settings-terminal","status":"publish","type":"post","link":"https:\/\/linuxundich.de\/en\/ghostty-config-2-0-ghostty-settings-terminal\/","title":{"rendered":"ghostty-config 2.0: Settings for Ghostty right in the terminal"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ghostty has replaced <a href=\"https:\/\/linuxundich.de\/en\/rutile-0-2-2-a-modern-alternative-to-tilix\/\">Tilix<\/a> as my go-to terminal app, and I only walked you through what&#8217;s new in <a href=\"https:\/\/linuxundich.de\/en\/ghostty-1-4-linux-terminal\/\">Ghostty 1.4<\/a> last week. One point I only touched on there: Ghostty has no menu bar with settings dialogs. If you want a different font or a new color scheme, you edit the config by hand. ghostty-config, which has just reached version 2.0, fixes that.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration by text file only<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You configure Ghostty through the file <code>~\/.config\/ghostty\/config<\/code>, where you write lines such as <code>font-size = 12<\/code>. Ghostty itself tells you which options exist in the first place. The following command lists every setting along with its explanation. For Ghostty 1.4.0, that adds up to 211 options and a good 4,300 lines of text. Happy reading.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ghostty +show-config --default --docs | less<\/code><\/pre>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c76de&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c76de\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/01-ghostty-optionen-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/01-ghostty-optionen-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/01-ghostty-optionen.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/01-ghostty-optionen.webp\" alt=\"Ghostty window with less showing the explanation of the language option, behind it Firefox with the Option Reference page on ghostty.org\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Ghostty lists its options with explanations in the terminal, while the long option reference on the project&#8217;s website waits in the background.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The website isn&#8217;t much different. The <a href=\"https:\/\/ghostty.org\/docs\/config\/reference\">option reference<\/a> is a very long page, and the developers themselves recommend using your browser&#8217;s search. At least they are aware of the problem and promise &#8220;a more user-friendly way to view and organize these options&#8221; for the future. Until then, other projects step in to fill the gap, and ghostty-config is one of them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is ghostty-config?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Vitruves\/ghostty-config\">ghostty-config<\/a> comes from Vitruves, the name of the developer account on GitHub and Reddit. The program is written in Go, licensed under MIT and runs on Linux and macOS. It doesn&#8217;t open a window of its own; the interface runs right in the terminal. Themes, fonts, window, input, session and extensions each get their own tab, plus a section for the tool itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In Ghostty and Kitty, ghostty-config draws its interface as images, thanks to the Kitty graphics protocol. File managers such as <a href=\"https:\/\/linuxundich.de\/en\/tfm-a-modern-file-manager-for-the-terminal\/\">Tfm<\/a> use the same protocol to bring image previews into the terminal. That&#8217;s why the whole thing looks more like a desktop app than a classic terminal program. In other terminals and in Tmux, the program falls back to plain text characters. The interface is English only.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Three layouts in version 2.0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Version 2.0.0 <a href=\"https:\/\/www.reddit.com\/r\/Ghostty\/comments\/1xkyi83\/ghosttyconfig_20_two_new_layouts_ghostty_14\/\">came out<\/a> on November 1, a little over a month after the project started on GitHub. According to Vitruves, a lot of it comes from the comments on the previous announcement on Reddit. The biggest change is two additional layouts. On first launch, ghostty-config asks how you want to work; later you switch with <code>F4<\/code> or via <em>Tool \u203a Interface \u203a Layout<\/em>.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c7abe&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c7abe\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/02-ghostty-config-layout-wahl-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/02-ghostty-config-layout-wahl-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/02-ghostty-config-layout-wahl.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/02-ghostty-config-layout-wahl.webp\" alt=\"ghostty-config in Ghostty with the question How do you want to work? and three cards for the Atelier, Palette and Guided layouts\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">On first launch, ghostty-config asks whether you&#8217;d rather work with Atelier, Palette or Guided.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Atelier is the previous interface and still the default. The sections sit on the left, a wall of cards for a total of 1,071 themes on the right. Each card shows a small preview with Git output, color palette and contrast score. You move through the wall with the arrow keys without changing anything. Only pressing <code>Enter<\/code> writes the theme to the config and makes Ghostty reload.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c7d5a&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c7d5a\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/03-ghostty-config-themes-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/03-ghostty-config-themes-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/03-ghostty-config-themes.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/03-ghostty-config-themes.webp\" alt=\"ghostty-config in the Atelier layout: theme families on the left, 15 theme cards on the right, the TokyoNight Moon card is marked Applied\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">In Atelier, ghostty-config shows every theme as a card with a preview; TokyoNight Moon is the one applied here.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ghostty 1.4 ships 819 of these themes itself; Vitruves sorted the remaining 252 into families with names such as Albers, Kandinsky, Wabi-sabi or Jung. If you only want to try a theme, press <code>Ctrl<\/code>+<code>T<\/code>. Then just the current terminal changes its colors, and the config stays untouched. <code>Ctrl<\/code>+<code>F<\/code> adds a theme to your list of favorites.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <em>Fonts<\/em> tab works in a similar way. There you pick font family, style and size and see a sample for each font, including easily confused characters such as 0 and O or 1, l and I. Line height, ligatures and letter spacing are set with sliders. If you&#8217;re missing a suitable font, ghostty-config offers 70 monospace families that it downloads with a single <code>Enter<\/code>.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c820d&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c820d\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/04-ghostty-config-schriften-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/04-ghostty-config-schriften-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/04-ghostty-config-schriften.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/04-ghostty-config-schriften.webp\" alt=\"Fonts tab in ghostty-config: the font list with Adwaita Mono, Liberation Mono and Source Code Pro on the left, a sample of Adwaita Mono on the right\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">ghostty-config shows a sample of every font, here Adwaita Mono, GNOME&#8217;s monospace font.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Palette, on the other hand, relies on a single search field for themes, fonts, settings, shortcuts and commands. Type &#8220;opacity&#8221;, for example, and ghostty-config lists all matching settings. You can change the highlighted one right in the list, and next to it you see the line that will end up in the config. If you know what you&#8217;re looking for, this is the fastest way to get there. <code>F3<\/code> also shows Ghostty&#8217;s own explanation of the option.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c85ce&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c85ce\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/05-ghostty-config-palette-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/05-ghostty-config-palette-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/05-ghostty-config-palette.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/05-ghostty-config-palette.webp\" alt=\"ghostty-config in the Palette layout with the search term opacity, Background opacity is highlighted with 0.85 and the line + background-opacity = 0.85\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Searching for opacity in Palette turns up six settings, with the new opacity shown right next to it as a config line.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Guided is meant for everyone who doesn&#8217;t want to scroll through every option. The layout takes you through colors, font, window, cursor, and copy and paste in six steps and asks simple questions along the way, such as whether you want a light or a dark terminal. Each step comes with large previews. If you do want to set more, a link takes you to all the options for that topic.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c8965&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c8965\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/06-ghostty-config-guided-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/06-ghostty-config-guided-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/06-ghostty-config-guided.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/06-ghostty-config-guided.webp\" alt=\"ghostty-config in the Guided layout, step 1 of 6 with the question Light or dark? and six previews of a terminal running git status\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Guided asks step by step what matters to you, starting with the choice between light and dark.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">On top of that, ghostty-config has become snappier. According to the changelog, it now takes 42 instead of 103 milliseconds to the first frame, and the interface draws two to six times faster. The program also knows the new options of Ghostty 1.4, but only offers them if version 1.4 is actually installed. If you&#8217;re still on Ghostty 1.3, you can keep using ghostty-config.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What ghostty-config writes to the file<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With a tool that writes to my config, I want to know exactly what it does there. ghostty-config changes each setting on a line of its own and leaves comments in place. Before the first change, it creates a backup in <code>~\/.config\/ghostty-config\/backups\/<\/code>. After every write, it checks the file with <code>ghostty +validate-config<\/code> and shows any errors along with the line number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I tried the whole thing in a Fedora VM with a new theme and a bit of transparency. The first four lines were already in the file; ghostty-config added the last two, each with a blank line in front. That keeps the config readable, and you can always go back to editing it by hand if you prefer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ghostty\nfont-size = 12\nwindow-width = 100\nwindow-height = 30\n\ntheme = TokyoNight Moon\n\nbackground-opacity = 0.85<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On Linux, ghostty-config asks Ghostty via D-Bus to reload its configuration. In my test this worked without any extra steps, and Ghostty acknowledged every change with a &#8220;Konfiguration wurde neu geladen&#8221; (configuration reloaded) toast on my German system. According to the documentation, this needs <code>gdbus<\/code> and a Ghostty instance that bundles all windows; otherwise you reload Ghostty yourself. By the way, when you quit, ghostty-config copies its 252 own themes to <code>~\/.config\/ghostty\/themes<\/code>.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ae9e972c8e52&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ae9e972c8e52\" class=\"wp-block-image wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"800\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/07-ghostty-tokyonight-640x400.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/07-ghostty-tokyonight-768x480.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/07-ghostty-tokyonight.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/11\/07-ghostty-tokyonight.webp\" alt=\"Ghostty with Fastfetch on Fedora Linux 44 and GNOME 50.6, the window is slightly translucent and shows the purple wallpaper\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">A few tweaks in ghostty-config later, Ghostty runs with TokyoNight Moon and a slightly translucent background.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In the <a href=\"https:\/\/www.reddit.com\/r\/Ghostty\/comments\/1xkyi83\/ghosttyconfig_20_two_new_layouts_ghostty_14\/\">Reddit thread<\/a> about the new version, someone asked why you should set the theme in Ghostty rather than in Zsh. The answer from the community: prompts and scripts mostly use color names such as red or green, and the terminal decides the exact shade. Switch the theme in Ghostty and everything follows along, without you having to redefine the colors in your shell.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ghostty-config installs with a one-liner. The script downloads the right binary for your system, verifies its checksum and puts it in <code>~\/.local\/bin<\/code>. If you don&#8217;t blindly pipe scripts from the internet into your shell, download the file first and read it. There isn&#8217;t much more in it than the steps described, and according to a comment, the only thing counted is that the script was fetched.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ curl -fsSL https:\/\/ghostty-config.vitruves.workers.dev\/install.sh | sh\n$ ghostty-config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To update, simply run the same command again. On top of that, ghostty-config checks GitHub for a new version at most once an hour; you can turn that off under <code>F4<\/code>. There are no distribution packages yet. The AUR package ghostty-config-cli, by the way, belongs to a different project with a similar idea. Ghostty itself came from the scottames\/ghostty COPR repository in my Fedora VM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All in all, ghostty-config is in my opinion the tool Ghostty has been missing so far. It doesn&#8217;t replace a settings dialog, but you can set a new theme or a different font with the arrow keys and <code>Enter<\/code>, and the config stays a readable text file. For a project that&#8217;s only a little over a month old, that&#8217;s pretty well rounded. How do you set up your terminal, by hand or with a tool?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ghostty knows 211 options but has no settings dialog. ghostty-config 2.0 puts themes, fonts and the window into an interface inside the terminal, writes every change as a line of its own to the config and reloads Ghostty right away.<\/p>\n","protected":false},"author":2,"featured_media":336,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"lui_source_id":48636,"lui_source_hash":"796a2a3138fdb04acd760ab3439c94ea5efa323e9ec8b2029ccb08e8ce5231ee","lui_source_translated":"2026-11-03","lui_source_reviewed":true,"lui_via_url":"","lui_via_label":"","lui_source_url":"","lui_source_label":"","lui_inhalt_aktualisiert":"","lui_pin_until":"","lui_kopf":"","footnotes":""},"categories":[2],"tags":[111,65,66],"class_list":["post-335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gnu-linux","tag-ghostty","tag-terminal","tag-tips"],"_links":{"self":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/comments?post=335"}],"version-history":[{"count":0,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/335\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media\/336"}],"wp:attachment":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media?parent=335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/categories?post=335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/tags?post=335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}