diff --git a/modules/modules.nix b/modules/modules.nix index 67e0e0d27..aaf24dc29 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -303,6 +303,7 @@ let ./programs/rbenv.nix ./programs/wallust.nix ./programs/watson.nix + ./programs/waveterm.nix ./programs/waylogout.nix ./programs/waybar.nix ./programs/wayprompt.nix diff --git a/modules/programs/waveterm.nix b/modules/programs/waveterm.nix new file mode 100644 index 000000000..482e7d5db --- /dev/null +++ b/modules/programs/waveterm.nix @@ -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: . + ''; + }; + + 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: . + ''; + }; + }; + + 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; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 96f89a48e..25638ba26 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -313,6 +313,7 @@ import nmtSrc { ./modules/programs/vscode ./modules/programs/wallust ./modules/programs/watson + ./modules/programs/waveterm ./modules/programs/wezterm ./modules/programs/yazi ./modules/programs/zed-editor diff --git a/tests/modules/programs/waveterm/cfg/bookmarks.json b/tests/modules/programs/waveterm/cfg/bookmarks.json new file mode 100644 index 000000000..c42998fd0 --- /dev/null +++ b/tests/modules/programs/waveterm/cfg/bookmarks.json @@ -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" + } +} diff --git a/tests/modules/programs/waveterm/cfg/settings.json b/tests/modules/programs/waveterm/cfg/settings.json new file mode 100644 index 000000000..af6fe4a80 --- /dev/null +++ b/tests/modules/programs/waveterm/cfg/settings.json @@ -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 +} diff --git a/tests/modules/programs/waveterm/cfg/termthemes.json b/tests/modules/programs/waveterm/cfg/termthemes.json new file mode 100644 index 000000000..6c4331e51 --- /dev/null +++ b/tests/modules/programs/waveterm/cfg/termthemes.json @@ -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" + } +} diff --git a/tests/modules/programs/waveterm/default.nix b/tests/modules/programs/waveterm/default.nix new file mode 100644 index 000000000..fdeea49d5 --- /dev/null +++ b/tests/modules/programs/waveterm/default.nix @@ -0,0 +1 @@ +{ waveterm-example-config = ./example-config.nix; } diff --git a/tests/modules/programs/waveterm/example-config.nix b/tests/modules/programs/waveterm/example-config.nix new file mode 100644 index 000000000..acc775b60 --- /dev/null +++ b/tests/modules/programs/waveterm/example-config.nix @@ -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} + + ''; +}