From 2db8749c25a148ff30dde7038f20f215ea9436bc Mon Sep 17 00:00:00 2001 From: Yan Lin Date: Sat, 13 Sep 2025 13:56:27 +0200 Subject: [PATCH] Make nixos use ghostty module as well --- hosts/darwin/home-default.nix | 6 ++ hosts/nixos/thinkpad/home.nix | 9 ++ modules/ghostty.nix | 160 ++++++++++++++++++++++------------ modules/plasma.nix | 2 +- 4 files changed, 122 insertions(+), 55 deletions(-) diff --git a/hosts/darwin/home-default.nix b/hosts/darwin/home-default.nix index 4b3c537..3072766 100644 --- a/hosts/darwin/home-default.nix +++ b/hosts/darwin/home-default.nix @@ -28,6 +28,12 @@ package = null; # Use system Firefox on Darwin }; + # Ghostty configuration + programs.ghostty-custom = { + enable = true; + package = null; # Use Homebrew-installed Ghostty on Darwin + }; + home.username = "yanlin"; home.homeDirectory = "/Users/yanlin"; home.stateVersion = "24.05"; diff --git a/hosts/nixos/thinkpad/home.nix b/hosts/nixos/thinkpad/home.nix index 7b7bd28..691c949 100644 --- a/hosts/nixos/thinkpad/home.nix +++ b/hosts/nixos/thinkpad/home.nix @@ -10,6 +10,7 @@ ../../../modules/firefox.nix ../../../modules/plasma.nix ../../../modules/syncthing.nix + ../../../modules/ghostty.nix plasma-manager.homeModules.plasma-manager ]; @@ -19,6 +20,14 @@ package = pkgs.firefox; }; + # Enable Ghostty terminal with NixOS package + programs.ghostty-custom = { + enable = true; + package = pkgs.ghostty; # Install via nix on NixOS + fontSize = 13; + windowMode = "fullscreen"; + }; + # Any ThinkPad-specific home configurations can be added here # For example, laptop-specific aliases or scripts diff --git a/modules/ghostty.nix b/modules/ghostty.nix index d070749..5ac2bc0 100644 --- a/modules/ghostty.nix +++ b/modules/ghostty.nix @@ -1,60 +1,112 @@ -{ pkgs, ... }: +{ config, pkgs, lib, ... }: + +with lib; + +let + cfg = config.programs.ghostty-custom; +in { - # Note: Ghostty is currently marked as broken in nixpkgs - # To use it, you'll need to either: - # 1. Set NIXPKGS_ALLOW_BROKEN=1 when running hms - # 2. Add nixpkgs.config.allowBroken = true to your configuration - # 3. Install Ghostty manually from https://ghostty.org - - programs.ghostty = { - enable = true; - package = null; # Use system-installed Ghostty - - settings = { - # Font settings with CJK fallback - font-family = [ - "JetBrainsMono Nerd Font Mono" # Primary font for Latin + symbols - "Noto Sans CJK SC" # Simplified Chinese fallback - "Noto Sans CJK TC" # Traditional Chinese fallback - "Source Han Sans" # Alternative CJK fallback - ]; - font-size = 14; - - # Gruvbox Dark Theme (matching tmux theme) - background = "#14191f"; - cursor-style-blink = false; + options.programs.ghostty-custom = { + enable = mkEnableOption "Ghostty terminal emulator"; - # Window config - window-theme = "dark"; - window-width = 160; - window-height = 40; - window-padding-balance = true; - - # Shell integration - shell-integration = "detect"; - shell-integration-features = "cursor,sudo,title"; - - # Mouse settings - mouse-hide-while-typing = true; - mouse-shift-capture = false; - - # Performance and appearance - adjust-cell-height = "10%"; - minimum-contrast = 1.0; - - # Copy/paste - copy-on-select = false; - - # Scrollback - scrollback-limit = 10000; - - # Bell - desktop-notifications = false; - - # Quit behavior - confirm-close-surface = false; + package = mkOption { + type = types.nullOr types.package; + default = null; + example = "pkgs.ghostty"; + description = "Ghostty package to use. Set to null on Darwin to use Homebrew-installed Ghostty, or pkgs.ghostty on NixOS."; }; + fontSize = mkOption { + type = types.int; + default = 14; + description = "Font size for the terminal"; + }; + + windowMode = mkOption { + type = types.enum [ "windowed" "fullscreen" ]; + default = "windowed"; + description = "Window mode: 'windowed' for fixed size window or 'fullscreen' for full screen"; + }; + + windowWidth = mkOption { + type = types.int; + default = 160; + description = "Window width in columns (only used in windowed mode)"; + }; + + windowHeight = mkOption { + type = types.int; + default = 40; + description = "Window height in rows (only used in windowed mode)"; + }; }; -} + + config = mkIf cfg.enable { + # Note: Ghostty is currently marked as broken in nixpkgs + # To use it, you'll need to either: + # 1. Set NIXPKGS_ALLOW_BROKEN=1 when running hms + # 2. Add nixpkgs.config.allowBroken = true to your configuration + # 3. Install Ghostty manually from https://ghostty.org + + programs.ghostty = { + enable = true; + package = cfg.package; + + settings = mkMerge [ + { + # Font settings with CJK fallback + font-family = [ + "JetBrainsMono Nerd Font Mono" # Primary font for Latin + symbols + "Noto Sans CJK SC" # Simplified Chinese fallback + "Noto Sans CJK TC" # Traditional Chinese fallback + "Source Han Sans" # Alternative CJK fallback + ]; + font-size = cfg.fontSize; + + # Gruvbox Dark Theme (matching tmux theme) + background = "#14191f"; + cursor-style-blink = false; + + # Window config + window-theme = "dark"; + window-padding-balance = true; + + # Shell integration + shell-integration = "detect"; + shell-integration-features = "cursor,sudo,title"; + + # Mouse settings + mouse-hide-while-typing = true; + mouse-shift-capture = false; + + # Performance and appearance + adjust-cell-height = "10%"; + minimum-contrast = 1.0; + + # Copy/paste + copy-on-select = false; + + # Scrollback + scrollback-limit = 10000; + + # Bell + desktop-notifications = false; + + # Quit behavior + confirm-close-surface = false; + } + + # Conditional window settings based on mode + (mkIf (cfg.windowMode == "windowed") { + window-width = cfg.windowWidth; + window-height = cfg.windowHeight; + }) + + (mkIf (cfg.windowMode == "fullscreen") { + fullscreen = true; + }) + ]; + }; + }; +} \ No newline at end of file diff --git a/modules/plasma.nix b/modules/plasma.nix index 398f206..a7769f0 100644 --- a/modules/plasma.nix +++ b/modules/plasma.nix @@ -62,7 +62,7 @@ "applications:org.kde.dolphin.desktop" "applications:firefox.desktop" "applications:obsidian.desktop" - "applications:org.kde.konsole.desktop" + "applications:com.mitchellh.ghostty.desktop" "applications:org.keepassxc.KeePassXC.desktop" ]; };