1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 11:36:05 +01:00
home-manager/modules/programs/waveterm.nix
Austin Horstman 86402a17b6 treewide: flatten single file modules
Some files don't need nesting and can be root level again to reduce
conflicts with other PRs.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-06-23 16:20:26 -05:00

120 lines
3.4 KiB
Nix

{
lib,
pkgs,
config,
...
}:
let
inherit (lib)
mkIf
mkEnableOption
mkPackageOption
mkOption
;
cfg = config.programs.waveterm;
formatter = pkgs.formats.json { };
in
{
meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ];
options.programs.waveterm = {
enable = mkEnableOption "waveterm";
package = mkPackageOption pkgs "waveterm" { nullable = true; };
settings = mkOption {
type = formatter.type;
default = { };
example = {
"app:dismissarchitecturewarning" = false;
"autoupdate:enabled" = false;
"term:fontsize" = 12.0;
"term:fontfamily" = "JuliaMono";
"term:theme" = "my-custom-theme";
"term:transparency" = 0.5;
"window:showhelp" = false;
"window:blur" = true;
"window:opacity" = 0.5;
"window:bgcolor" = "#000000";
"window:reducedmotion" = true;
};
description = ''
Configuration settings for WaveTerm. All available options can be
found here: <https://docs.waveterm.dev/config#configuration-keys>.
'';
};
themes = mkOption {
type = formatter.type;
default = { };
example = {
default-dark = {
"display:name" = "Default Dark";
"display:order" = 1;
black = "#757575";
red = "#cc685c";
green = "#76c266";
yellow = "#cbca9b";
blue = "#85aacb";
magenta = "#cc72ca";
cyan = "#74a7cb";
white = "#c1c1c1";
brightBlack = "#727272";
brightRed = "#cc9d97";
brightGreen = "#a3dd97";
brightYellow = "#cbcaaa";
brightBlue = "#9ab6cb";
brightMagenta = "#cc8ecb";
brightCyan = "#b7b8cb";
brightWhite = "#f0f0f0";
gray = "#8b918a";
cmdtext = "#f0f0f0";
foreground = "#c1c1c1";
selectionBackground = "";
background = "#00000077";
cursorAccent = "";
};
};
description = ''
User defined terminal themes. All the details about available options and
format can be found here: <https://docs.waveterm.dev/config#terminal-theming>.
'';
};
bookmarks = mkOption {
type = formatter.type;
default = { };
example = {
"bookmark@google" = {
url = "https://www.google.com";
title = "Google";
};
"bookmark@claude" = {
url = "https://claude.ai";
title = "Claude";
};
"bookmark@github" = {
url = "https://github.com";
title = "GitHub";
};
};
description = ''
Bookmark definitions for WaveTerm. Details about the format and the options
can be found here: <https://docs.waveterm.dev/config#webbookmarks-configuration>.
'';
};
};
config = mkIf cfg.enable {
home.packages = mkIf (cfg.package != null) [ cfg.package ];
xdg.configFile."waveterm/settings.json" = mkIf (cfg.settings != { }) {
source = formatter.generate "waveterm-settings" cfg.settings;
};
xdg.configFile."waveterm/termthemes.json" = mkIf (cfg.themes != { }) {
source = formatter.generate "waveterm-themes" cfg.themes;
};
xdg.configFile."waveterm/bookmarks.json" = mkIf (cfg.settings != { }) {
source = formatter.generate "waveterm-bookmarks" cfg.bookmarks;
};
};
}