From 46cc0d78ec4e6350dc574ac903c2f87a61c2e5fd Mon Sep 17 00:00:00 2001 From: Berk Arslan Date: Mon, 4 Dec 2023 11:31:36 +0200 Subject: [PATCH] Add Waybar configuration Waybar configuration modified based on the default bar configuration and launchers added. Pulseaudio is added to guivm. Nmcli is used to get the network connection data in wifi-signal-strength script and nm-launcher connection structure is copied. Weston and waybar launchers are unified and name section added. Nerdfonts FiraCode is added. All the style and configuration files are created in weston.config.nix. Compositor and waypipe display name must be overriden as in comments in guivm.nix to use waybar properly. Signed-off-by: Berk Arslan --- docs/src/ref_impl/creating_appvm.md | 2 +- modules/graphics/default.nix | 1 + modules/graphics/demo-apps.nix | 16 +- modules/graphics/fonts.nix | 20 +- modules/graphics/waybar.config.nix | 334 +++++++++++++++++++++ modules/graphics/weston.ini.nix | 28 +- modules/hardware/definition.nix | 7 + modules/profiles/applications.nix | 2 +- modules/profiles/graphics.nix | 24 ++ modules/windows-launcher/default.nix | 3 +- overlays/custom-packages/labwc/default.nix | 2 +- packages/wifi-signal-strength/default.nix | 62 ++++ targets/lenovo-x1-carbon.nix | 13 +- targets/nvidia-jetson-orin/default.nix | 2 +- 14 files changed, 475 insertions(+), 41 deletions(-) create mode 100644 modules/graphics/waybar.config.nix create mode 100644 packages/wifi-signal-strength/default.nix diff --git a/docs/src/ref_impl/creating_appvm.md b/docs/src/ref_impl/creating_appvm.md index f43eaee7d..5ba9f42c3 100644 --- a/docs/src/ref_impl/creating_appvm.md +++ b/docs/src/ref_impl/creating_appvm.md @@ -63,7 +63,7 @@ Each VM has the following properties: ## Adding Application Launcher in GUI VM -To add an app launcher, add an element in the [guivm.nix](../../../modules/virtualization/microvm/guivm.nix) file to the **graphics.weston.launchers** list. +To add an app launcher, add an element in the [guivm.nix](../../../modules/virtualization/microvm/guivm.nix) file to the **graphics.launchers** list. A launcher element has 2 properties: diff --git a/modules/graphics/default.nix b/modules/graphics/default.nix index 43d9058e2..9224a9af5 100644 --- a/modules/graphics/default.nix +++ b/modules/graphics/default.nix @@ -5,6 +5,7 @@ ./weston.nix ./labwc.nix ./weston.ini.nix + ./waybar.config.nix ./demo-apps.nix ./fonts.nix ./gnome.nix diff --git a/modules/graphics/demo-apps.nix b/modules/graphics/demo-apps.nix index 7f56950a8..5c10fc072 100644 --- a/modules/graphics/demo-apps.nix +++ b/modules/graphics/demo-apps.nix @@ -7,7 +7,6 @@ ... }: let cfg = config.ghaf.graphics.demo-apps; - inherit (config.ghaf.graphics) weston; /* Scaled down firefox icon @@ -36,31 +35,36 @@ in { options.ghaf.graphics.demo-apps = with lib; { chromium = mkProgramOption "Chromium browser" false; - firefox = mkProgramOption "Firefox browser" weston.enableDemoApplications; + firefox = mkProgramOption "Firefox browser" config.ghaf.graphics.enableDemoApplications; gala-app = mkProgramOption "Gala App" false; - element-desktop = mkProgramOption "Element desktop" weston.enableDemoApplications; - zathura = mkProgramOption "zathura" weston.enableDemoApplications; + element-desktop = mkProgramOption "Element desktop" config.ghaf.graphics.enableDemoApplications; + zathura = mkProgramOption "zathura" config.ghaf.graphics.enableDemoApplications; }; - config = lib.mkIf weston.enable { - ghaf.graphics.weston.launchers = + config = lib.mkIf config.ghaf.profiles.graphics.enable { + ghaf.graphics.launchers = lib.optional cfg.chromium { + name = "chromium"; path = "${pkgs.chromium}/bin/chromium --enable-features=UseOzonePlatform --ozone-platform=wayland"; icon = "${pkgs.chromium}/share/icons/hicolor/24x24/apps/chromium.png"; } ++ lib.optional cfg.firefox { + name = "firefox"; path = "${pkgs.firefox}/bin/firefox"; icon = "${firefox-icon}/share/icons/hicolor/24x24/apps/firefox.png"; } ++ lib.optional cfg.element-desktop { + name = "element"; path = "${pkgs.element-desktop}/bin/element-desktop --enable-features=UseOzonePlatform --ozone-platform=wayland"; icon = "${pkgs.element-desktop}/share/icons/hicolor/24x24/apps/element.png"; } ++ lib.optional cfg.gala-app { + name = "gala"; path = "${pkgs.gala-app}/bin/gala --enable-features=UseOzonePlatform --ozone-platform=wayland"; icon = "${pkgs.gala-app}/gala/resources/icon-24x24.png"; } ++ lib.optional cfg.zathura { + name = "zathura"; path = "${pkgs.zathura}/bin/zathura"; icon = "${pkgs.zathura}/share/icons/hicolor/32x32/apps/org.pwmt.zathura.png"; }; diff --git a/modules/graphics/fonts.nix b/modules/graphics/fonts.nix index 4f45dcbb2..d620a29df 100644 --- a/modules/graphics/fonts.nix +++ b/modules/graphics/fonts.nix @@ -6,12 +6,18 @@ config, ... }: let - cfg = config.ghaf.graphics.weston; + inherit (config.ghaf.graphics) weston labwc; in { - config = lib.mkIf cfg.enable { - fonts.packages = with pkgs; [ - fira-code - hack-font - ]; - }; + config = + lib.mkIf weston.enable { + fonts.fonts = with pkgs; [ + fira-code + hack-font + ]; + } + // lib.mkIf labwc.enable { + fonts.packages = with pkgs; [ + (nerdfonts.override {fonts = ["FiraCode"];}) + ]; + }; } diff --git a/modules/graphics/waybar.config.nix b/modules/graphics/waybar.config.nix new file mode 100644 index 000000000..380ba7d11 --- /dev/null +++ b/modules/graphics/waybar.config.nix @@ -0,0 +1,334 @@ +# Copyright 2022-2024 TII (SSRC) and the Ghaf contributors +# SPDX-License-Identifier: Apache-2.0 +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.ghaf.graphics.labwc; + networkDevice = config.ghaf.hardware.definition.network.pciDevices; + mkLauncherStyle = { + name, + icon, + ... + }: '' + #custom-${name} { + font-size: 20px; background-image: url("${icon}"); + background-position: center; + background-repeat: no-repeat; + padding-left: 10; + padding-right: 10; + } + + ''; + mkLauncherPadding = {name, ...}: '' + #custom-${name}, + ''; + mkLauncherConfig = { + name, + path, + ... + }: '' + "custom/${name}": { + "format": " ", + "on-click": "${builtins.replaceStrings ["\""] ["\\\\\\\""] path}", + "tooltip": false + }, + ''; + mkLauncherModule = {name, ...}: ''"custom/${name}", ''; + + /* + Generate launchers to be used in /etc/waybar/config + + Type: mkLaunchers :: [{name, path, icon}] -> string + + */ + mkLauncherStyles = lib.concatMapStrings mkLauncherStyle; + mkLauncherConfigs = lib.concatMapStrings mkLauncherConfig; + mkLauncherPaddings = lib.concatMapStrings mkLauncherPadding; + mkLauncherModules = lib.concatMapStrings mkLauncherModule; + + defaultLauncher = [ + # Keep weston-terminal launcher always enabled explicitly since if someone adds + # a launcher on the panel, the launcher will replace weston-terminal launcher. + { + name = "terminal"; + path = "${pkgs.weston}/bin/weston-terminal"; + icon = "${pkgs.weston}/share/weston/icon_terminal.png"; + } + ]; + + wifi-signal-strength = pkgs.callPackage ../../packages/wifi-signal-strength {wifiDevice = (lib.lists.findFirst (d: d.name != null) null networkDevice).name;}; +in { + config = lib.mkIf cfg.enable { + ghaf.graphics.launchers = defaultLauncher; + environment.etc."waybar/config" = { + text = + # Modified from default waybar configuration file https://github.com/Alexays/Waybar/blob/master/resources/config + '' + { + "height": 30, // Waybar height (to be removed for auto height) + "spacing": 4, // Gaps between modules (4px) + "modules-left": [ '' + + mkLauncherModules config.ghaf.graphics.launchers + + '' ], + "modules-center": ["sway/window"], + "modules-right": ["pulseaudio", "custom/network1", "backlight", "battery", "clock", "tray"], + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 10 + }, + "clock": { + "timezone": "${config.time.timeZone}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""] + }, + "battery": { + "states": { + "critical": 15 + }, + "interval": 5, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% 󰢟", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"] + }, + "custom/network1": { + "format": "{}", + "interval": 15, + "exec": "${wifi-signal-strength}/bin/wifi-signal-strength", + "return-type": "json", + "on-click": "${pkgs.nm-launcher}/bin/nm-launcher", + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": "󰝟 {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "default": ["", "", ""] + }, + }, + '' + + mkLauncherConfigs config.ghaf.graphics.launchers + + ''}''; + + # The UNIX file mode bits + mode = "0644"; + }; + environment.etc."waybar/style.css" = { + text = + # Modified from default waybar style file https://github.com/Alexays/Waybar/blob/master/resources/style.css + '' + * { + font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 13px; + } + + window#waybar { + background-color: rgba(43, 48, 59, 0.5); + border-bottom: 3px solid rgba(100, 114, 125, 0.5); + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; + } + + window#waybar.hidden { + opacity: 0.2; + } + + window#waybar.termite { + background-color: #3F3F3F; + } + + window#waybar.chromium { + background-color: #000000; + border: none; + } + + button { + box-shadow: inset 0 -3px transparent; + border: none; + border-radius: 0; + } + + button:hover { + background: inherit; + box-shadow: inset 0 -3px #ffffff; + } + + #workspaces button { + padding: 0 5px; + background-color: transparent; + color: #ffffff; + } + + #workspaces button:hover { + background: rgba(0, 0, 0, 0.2); + } + + #workspaces button.focused { + background-color: #64727D; + box-shadow: inset 0 -3px #ffffff; + } + + #workspaces button.urgent { + background-color: #eb4d4b; + } + + '' + + mkLauncherPaddings config.ghaf.graphics.launchers + + '' + #clock, + #battery, + #backlight, + #custom-network1, + #pulseaudio, + #tray, + + #window, + #workspaces { + margin: 0 4px; + } + + .modules-left > widget:first-child > #workspaces { + margin-left: 0; + } + + .modules-right > widget:last-child > #workspaces { + margin-right: 0; + } + + #clock { + background-color: #64727D; + padding-left: 10; + padding-right: 10; + } + + #battery { + background-color: #ffffff; + color: #000000; + padding-left: 10; + padding-right: 10; + } + + #battery.charging, #battery.plugged { + color: #ffffff; + background-color: #26A65B; + } + + @keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } + } + + #battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } + + label:focus { + background-color: #000000; + } + + #backlight { + background-color: #90b1b1; + padding-left: 10; + padding-right: 10; + } + + #custom-network1 { + background-color: #2980b9; + min-width: 16px; + padding-left: 10; + padding-right: 10; + } + + #custom-network1.disconnected { + background-color: #f53c3c; + } + + #pulseaudio { + background-color: #f1c40f; + color: #000000; + padding-left: 10; + padding-right: 10; + } + + #pulseaudio.muted { + background-color: #90b1b1; + color: #2a5c45; + } + + #tray { + background-color: #2980b9; + } + + #tray > .passive { + -gtk-icon-effect: dim; + } + + #tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; + } + + #language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; + } + + #keyboard-state { + background: #97e1ad; + color: #000000; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; + } + + #keyboard-state > label { + padding: 0 5px; + } + + #keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); + } + + '' + + mkLauncherStyles config.ghaf.graphics.launchers; + + # The UNIX file mode bits + mode = "0644"; + }; + }; +} diff --git a/modules/graphics/weston.ini.nix b/modules/graphics/weston.ini.nix index 03fe78276..f474fc5a5 100644 --- a/modules/graphics/weston.ini.nix +++ b/modules/graphics/weston.ini.nix @@ -8,10 +8,13 @@ }: let cfg = config.ghaf.graphics.weston; mkLauncher = { + # Add the name field to unify with Labwc launchers + name, path, icon, }: '' [launcher] + name=${name} path=${path} icon=${icon} @@ -29,33 +32,14 @@ # Keep weston-terminal launcher always enabled explicitly since if someone adds # a launcher on the panel, the launcher will replace weston-terminal launcher. { + name = "terminal"; path = "${pkgs.weston}/bin/weston-terminal"; icon = "${pkgs.weston}/share/weston/icon_terminal.png"; } ]; in { - options.ghaf.graphics.weston = with lib; { - launchers = mkOption { - description = "Weston application launchers to show in launch bar"; - default = []; - type = with types; - listOf - (submodule { - options.path = mkOption { - description = "Path to the executable to be launched"; - type = path; - }; - options.icon = mkOption { - description = "Path of the icon"; - type = path; - }; - }); - }; - enableDemoApplications = mkEnableOption "some applications for demoing"; - }; - config = lib.mkIf cfg.enable { - ghaf.graphics.weston.launchers = defaultLauncher; + ghaf.graphics.launchers = defaultLauncher; environment.etc."xdg/weston/weston.ini" = { text = '' @@ -79,7 +63,7 @@ in { font-size=16 '' - + mkLaunchers cfg.launchers; + + mkLaunchers config.ghaf.graphics.launchers; # The UNIX file mode bits mode = "0644"; diff --git a/modules/hardware/definition.nix b/modules/hardware/definition.nix index b32394669..3d61a1a7e 100644 --- a/modules/hardware/definition.nix +++ b/modules/hardware/definition.nix @@ -29,6 +29,13 @@ PCI Product ID (optional) ''; }; + name = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + PCI device name (optional) + ''; + }; }; }; in { diff --git a/modules/profiles/applications.nix b/modules/profiles/applications.nix index d3aafb1ff..c891708cc 100644 --- a/modules/profiles/applications.nix +++ b/modules/profiles/applications.nix @@ -20,7 +20,7 @@ in # across different window managers. ghaf = { profiles.graphics.enable = true; - graphics.weston.enableDemoApplications = true; + graphics.enableDemoApplications = true; }; }; } diff --git a/modules/profiles/graphics.nix b/modules/profiles/graphics.nix index 7018b6238..afbdb9929 100644 --- a/modules/profiles/graphics.nix +++ b/modules/profiles/graphics.nix @@ -23,6 +23,30 @@ in }; }; + options.ghaf.graphics = with lib; { + launchers = mkOption { + description = "Labwc application launchers to show in launch bar"; + default = []; + type = with types; + listOf + (submodule { + options.name = mkOption { + description = "Name of the application"; + type = str; + }; + options.path = mkOption { + description = "Path to the executable to be launched"; + type = path; + }; + options.icon = mkOption { + description = "Path of the icon"; + type = path; + }; + }); + }; + enableDemoApplications = mkEnableOption "some applications for demoing"; + }; + config = mkIf cfg.enable { ghaf.graphics.weston.enable = cfg.compositor == "weston"; ghaf.graphics.gnome.enable = cfg.compositor == "gnome"; diff --git a/modules/windows-launcher/default.nix b/modules/windows-launcher/default.nix index e9f555156..4c9df80e6 100644 --- a/modules/windows-launcher/default.nix +++ b/modules/windows-launcher/default.nix @@ -28,8 +28,9 @@ in { }; config = lib.mkIf cfg.enable { - ghaf.graphics.weston.launchers = lib.mkIf (!cfg.spice) [ + ghaf.graphics.launchers = lib.mkIf (!cfg.spice) [ { + name = "windows"; path = "${windows-launcher}/bin/windows-launcher-ui"; icon = "${pkgs.gnome.adwaita-icon-theme}/share/icons/Adwaita/16x16/mimetypes/application-x-executable.png"; } diff --git a/overlays/custom-packages/labwc/default.nix b/overlays/custom-packages/labwc/default.nix index b78cb5bd3..cbc5b855e 100644 --- a/overlays/custom-packages/labwc/default.nix +++ b/overlays/custom-packages/labwc/default.nix @@ -20,7 +20,7 @@ substituteInPlace ../docs/autostart \ --replace swaybg ${final.swaybg}/bin/swaybg \ --replace kanshi ${final.kanshi}/bin/kanshi \ - --replace waybar ${final.waybar}/bin/waybar \ + --replace waybar "${final.waybar}/bin/waybar -s /etc/waybar/style.css -c /etc/waybar/config" \ --replace mako ${final.mako}/bin/mako \ --replace swayidle ${final.swayidle}/bin/swayidle diff --git a/packages/wifi-signal-strength/default.nix b/packages/wifi-signal-strength/default.nix new file mode 100644 index 000000000..c463bbdb7 --- /dev/null +++ b/packages/wifi-signal-strength/default.nix @@ -0,0 +1,62 @@ +# Copyright 2022-2024 TII (SSRC) and the Ghaf contributors +# SPDX-License-Identifier: Apache-2.0 +{ + stdenvNoCC, + pkgs, + lib, + wifiDevice, + ... +}: let + # Replace the IP address with "net-vm.ghaf" after DNS/DHCP module merge + netvm_address = "192.168.100.1"; + wifiSignalStrength = + pkgs.writeShellScript + "wifi-signal-strength" + '' + export DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/ssh_session_dbus.sock + export DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/ssh_system_dbus.sock + ${pkgs.openssh}/bin/ssh -M -S /tmp/nmcli_socket \ + -f -N -q ghaf@${netvm_address} \ + -i /run/waypipe-ssh/id_ed25519 \ + -o StrictHostKeyChecking=no \ + -o StreamLocalBindUnlink=yes \ + -o ExitOnForwardFailure=yes \ + -L /tmp/ssh_session_dbus.sock:/run/user/1000/bus \ + -L /tmp/ssh_system_dbus.sock:/run/dbus/system_bus_socket + signal0=󰤟 + signal1=󰤢 + signal2=󰤥 + signal3=󰤨 + no_signal=󰤭 + # Get IP address of netvm + address=$(${pkgs.networkmanager}/bin/nmcli device show ${wifiDevice} | ${pkgs.gawk}/bin/awk '{ if ($1=="IP4.ADDRESS[1]:") {print $2}}') + # Get signal strength and ssid + connection=($(${pkgs.networkmanager}/bin/nmcli -f IN-USE,SIGNAL,SSID dev wifi | ${pkgs.gawk}/bin/awk '/^\*/{if (NR!=1) {print $2; print $3}}')) + connection[0]=$(if [ -z ''${connection[0]} ]; then echo "-1"; else echo ''${connection[0]}; fi) + # Set the icon of signal level + signal_level=$(if [ ''${connection[0]} -gt 80 ]; then echo $signal3; elif [ ''${connection[0]} -gt 60 ]; then echo $signal2; elif [ ''${connection[0]} -gt 30 ]; then echo $signal1; elif [ ''${connection[0]} -gt 0 ]; then echo signal0; else echo $no_signal; fi) + tooltip=$(if [ -z ''${connection[1]} ]; then echo "No connection"; else echo ''${connection[1]} ''${connection[0]}%; fi) + text=$(if [ -z $address ]; then echo $signal_level; else echo $address $signal_level; fi) + # Return as json format for waybar + echo "{\"percentage\":\""''${connection[0]}"\", \"text\":\""$text"\", \"tooltip\":\""$tooltip"\", \"class\":\"1\"}" + # Use the control socket to close the ssh tunnel. + ${pkgs.openssh}/bin/ssh -q -S /tmp/nmcli_socket -O exit ghaf@${netvm_address} + ''; +in + stdenvNoCC.mkDerivation { + name = "wifi-signal-strength"; + + phases = ["installPhase"]; + + installPhase = '' + mkdir -p $out/bin + cp ${wifiSignalStrength} $out/bin/wifi-signal-strength + ''; + + meta = with lib; { + description = "Script to get wifi data from nmcli to show network of netvm using D-Bus over SSH on Waybar."; + platforms = [ + "x86_64-linux" + ]; + }; + } diff --git a/targets/lenovo-x1-carbon.nix b/targets/lenovo-x1-carbon.nix index fe2b7cb78..df5405dd7 100644 --- a/targets/lenovo-x1-carbon.nix +++ b/targets/lenovo-x1-carbon.nix @@ -20,6 +20,7 @@ path = "0000:00:14.3"; vendorId = "8086"; productId = "51f1"; + name = "wlp0s5f0"; } ]; gpu.pciDevices = [ @@ -113,6 +114,7 @@ ]; guivmConfig = hostConfiguration.config.ghaf.virtualization.microvm.guivm; winConfig = hostConfiguration.config.ghaf.windows-launcher; + networkDevice = hostConfiguration.config.ghaf.hardware.definition.network.pciDevices; guivmExtraModules = [ { # Early KMS needed for GNOME to work inside GuiVM @@ -128,31 +130,40 @@ # Lenovo X1 AC adapter "-device" "acad" + # Connect sound device to hosts pulseaudio socket + "-audiodev" + "pa,id=pa1,server=unix:/run/pulse/native" ]; } ({pkgs, ...}: { - ghaf.graphics.weston.launchers = [ + ghaf.hardware.definition.network.pciDevices = networkDevice; + ghaf.graphics.launchers = [ { + name = "chromium"; path = "${pkgs.openssh}/bin/ssh -i /run/waypipe-ssh/id_ed25519 -o StrictHostKeyChecking=no chromium-vm.ghaf ${pkgs.waypipe}/bin/waypipe --border \"#ff5733,5\" --vsock -s ${toString guivmConfig.waypipePort} server chromium --enable-features=UseOzonePlatform --ozone-platform=wayland"; icon = "${../assets/icons/png/browser.png}"; } { + name = "gala"; path = "${pkgs.openssh}/bin/ssh -i /run/waypipe-ssh/id_ed25519 -o StrictHostKeyChecking=no gala-vm.ghaf ${pkgs.waypipe}/bin/waypipe --border \"#33ff57,5\" --vsock -s ${toString guivmConfig.waypipePort} server gala --enable-features=UseOzonePlatform --ozone-platform=wayland"; icon = "${../assets/icons/png/app.png}"; } { + name = "zathura"; path = "${pkgs.openssh}/bin/ssh -i /run/waypipe-ssh/id_ed25519 -o StrictHostKeyChecking=no zathura-vm.ghaf ${pkgs.waypipe}/bin/waypipe --border \"#337aff,5\" --vsock -s ${toString guivmConfig.waypipePort} server zathura"; icon = "${../assets/icons/png/pdf.png}"; } { + name = "windows"; path = "${pkgs.virt-viewer}/bin/remote-viewer -f spice://${winConfig.spice-host}:${toString winConfig.spice-port}"; icon = "${../assets/icons/png/windows.png}"; } { + name = "nm-launcher"; path = "${pkgs.nm-launcher}/bin/nm-launcher"; icon = "${pkgs.networkmanagerapplet}/share/icons/hicolor/22x22/apps/nm-device-wwan.png"; } diff --git a/targets/nvidia-jetson-orin/default.nix b/targets/nvidia-jetson-orin/default.nix index 6cd20effc..c8ecf69f2 100644 --- a/targets/nvidia-jetson-orin/default.nix +++ b/targets/nvidia-jetson-orin/default.nix @@ -107,7 +107,7 @@ hostConfiguration = tgt.hostConfiguration.extendModules { modules = [ { - ghaf.graphics.weston.enableDemoApplications = lib.mkForce false; + ghaf.graphics.enableDemoApplications = lib.mkForce false; } ]; };