1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00

waveterm: add module (#7004)

This commit is contained in:
Aguirre Matteo 2025-05-09 13:17:40 +00:00 committed by GitHub
parent 5d428b68dd
commit 8d2ee39915
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 256 additions and 0 deletions

View file

@ -303,6 +303,7 @@ let
./programs/rbenv.nix ./programs/rbenv.nix
./programs/wallust.nix ./programs/wallust.nix
./programs/watson.nix ./programs/watson.nix
./programs/waveterm.nix
./programs/waylogout.nix ./programs/waylogout.nix
./programs/waybar.nix ./programs/waybar.nix
./programs/wayprompt.nix ./programs/wayprompt.nix

View file

@ -0,0 +1,120 @@
{
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;
};
};
}

View file

@ -313,6 +313,7 @@ import nmtSrc {
./modules/programs/vscode ./modules/programs/vscode
./modules/programs/wallust ./modules/programs/wallust
./modules/programs/watson ./modules/programs/watson
./modules/programs/waveterm
./modules/programs/wezterm ./modules/programs/wezterm
./modules/programs/yazi ./modules/programs/yazi
./modules/programs/zed-editor ./modules/programs/zed-editor

View file

@ -0,0 +1,14 @@
{
"bookmark@claude": {
"title": "Claude",
"url": "https://claude.ai"
},
"bookmark@github": {
"title": "GitHub",
"url": "https://github.com"
},
"bookmark@google": {
"title": "Google",
"url": "https://www.google.com"
}
}

View file

@ -0,0 +1,13 @@
{
"app:dismissarchitecturewarning": false,
"autoupdate:enabled": false,
"term:fontfamily": "JuliaMono",
"term:fontsize": 12.0,
"term:theme": "my-custom-theme",
"term:transparency": 0.5,
"window:bgcolor": "#000000",
"window:blur": true,
"window:opacity": 0.5,
"window:reducedmotion": true,
"window:showhelp": false
}

View file

@ -0,0 +1,28 @@
{
"default-dark": {
"background": "#00000077",
"black": "#757575",
"blue": "#85aacb",
"brightBlack": "#727272",
"brightBlue": "#9ab6cb",
"brightCyan": "#b7b8cb",
"brightGreen": "#a3dd97",
"brightMagenta": "#cc8ecb",
"brightRed": "#cc9d97",
"brightWhite": "#f0f0f0",
"brightYellow": "#cbcaaa",
"cmdtext": "#f0f0f0",
"cursorAccent": "",
"cyan": "#74a7cb",
"display:name": "Default Dark",
"display:order": 1,
"foreground": "#c1c1c1",
"gray": "#8b918a",
"green": "#76c266",
"magenta": "#cc72ca",
"red": "#cc685c",
"selectionBackground": "",
"white": "#c1c1c1",
"yellow": "#cbca9b"
}
}

View file

@ -0,0 +1 @@
{ waveterm-example-config = ./example-config.nix; }

View file

@ -0,0 +1,78 @@
{
programs.waveterm = {
enable = true;
settings = {
"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;
};
themes = {
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 = "";
};
};
bookmarks = {
"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";
};
};
};
nmt.script = ''
assertFileExists home-files/.config/waveterm/settings.json
assertFileExists home-files/.config/waveterm/bookmarks.json
assertFileExists home-files/.config/waveterm/termthemes.json
assertFileContent home-files/.config/waveterm/settings.json \
${./cfg/settings.json}
assertFileContent home-files/.config/waveterm/bookmarks.json \
${./cfg/bookmarks.json}
assertFileContent home-files/.config/waveterm/termthemes.json \
${./cfg/termthemes.json}
'';
}