99 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   osConfig,
 | |
|   lib,
 | |
|   hozen,
 | |
|   ...
 | |
| }: let
 | |
|   inherit (osConfig.ooknet.appearance.fonts) monospace;
 | |
|   inherit (hozen) color;
 | |
|   inherit (lib) mkMerge mkIf;
 | |
|   inherit (osConfig.ooknet.workstation) default;
 | |
| 
 | |
|   mkFontConfig = font: style: let
 | |
|     mkFont = f: let
 | |
|       sizeAttr =
 | |
|         if f.bitmap
 | |
|         then "pixelsize"
 | |
|         else "size";
 | |
|       familyStyle = f.variants.${style} or f.variants.regular;
 | |
|     in "${familyStyle}:${sizeAttr}=${toString font.size}";
 | |
|     primary = mkFont font;
 | |
|     fallback =
 | |
|       if font.fallback != null
 | |
|       then ",${mkFont font.fallback}"
 | |
|       else "";
 | |
|   in "${primary}${fallback}";
 | |
| 
 | |
|   cfg = osConfig.ooknet.workstation.programs.foot;
 | |
| in {
 | |
|   config = mkMerge [
 | |
|     (mkIf (cfg.enable || default.terminal == "foot") {
 | |
|       programs.foot = {
 | |
|         enable = true;
 | |
|         server.enable = true;
 | |
|         settings = {
 | |
|           main = {
 | |
|             term = "xterm-256color";
 | |
|             font = mkFontConfig monospace "regular";
 | |
|             font-bold = mkFontConfig monospace "bold";
 | |
|             font-italic = mkFontConfig monospace "italic";
 | |
|             font-bold-italic = mkFontConfig monospace "boldItalic";
 | |
|             dpi-aware = false;
 | |
|             letter-spacing = "0";
 | |
|             bold-text-in-bright = "palette-based";
 | |
|             resize-delay-ms = "80";
 | |
|             pad = "9x9 center";
 | |
|             selection-target = "clipboard";
 | |
|             font-size-adjustment = "1px";
 | |
|           };
 | |
| 
 | |
|           tweak = {
 | |
|             sixel = "yes";
 | |
|             font-monospace-warn = "no";
 | |
|           };
 | |
| 
 | |
|           cursor = {
 | |
|             style = "beam";
 | |
|             blink = "yes";
 | |
|           };
 | |
| 
 | |
|           colors = {
 | |
|             alpha = 1.0;
 | |
|             foreground = "${color.base05}";
 | |
|             background = "${color.base00}";
 | |
|             regular0 = "${color.base00}"; # black
 | |
|             regular1 = "${color.base08}"; # red
 | |
|             regular2 = "${color.base0B}"; # green
 | |
|             regular3 = "${color.base0A}"; # yellow
 | |
|             regular4 = "${color.base0D}"; # blue
 | |
|             regular5 = "${color.base0E}"; # magenta
 | |
|             regular6 = "${color.base0C}"; # cyan
 | |
|             regular7 = "${color.base05}"; # white
 | |
|             bright0 = "${color.base03}"; # bright black
 | |
|             bright1 = "${color.base08}"; # bright red
 | |
|             bright2 = "${color.base0B}"; # bright green
 | |
|             bright3 = "${color.base0A}"; # bright yellow
 | |
|             bright4 = "${color.base0D}"; # bright blue
 | |
|             bright5 = "${color.base0E}"; # bright magenta
 | |
|             bright6 = "${color.base0C}"; # bright cyan
 | |
|             bright7 = "${color.base07}"; # bright white
 | |
|             "16" = "${color.base09}";
 | |
|             "17" = "${color.base0F}";
 | |
|             "18" = "${color.base01}";
 | |
|             "19" = "${color.base02}";
 | |
|             "20" = "${color.base04}";
 | |
|             "21" = "${color.base06}";
 | |
|           };
 | |
|         };
 | |
|       };
 | |
|     })
 | |
| 
 | |
|     (mkIf (default.terminal == "foot") {
 | |
|       home.sessionVariables = {
 | |
|         TERMINAL = "foot";
 | |
|       };
 | |
|       ooknet.binds.terminal = "foot";
 | |
|       ooknet.binds.terminalLaunch = "foot";
 | |
|     })
 | |
|   ];
 | |
| }
 |