From 735935627d1b1caad76d1dd496d6489125f5050f Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 21 Nov 2025 13:35:32 +0000 Subject: [PATCH] flatpak: patch electrons under wayland --- nixcfgs/modules/home/darwin.nix | 24 +++++++++++ nixcfgs/modules/nixos/programs/zsh.nix | 1 + nixcfgs/users/js0ny/packages/flatpak.nix | 41 +++++++++++++++++-- nixcfgs/users/js0ny/packages/gui.nix | 30 +++++++++++++- .../desktop/wayland-wm/waybar/default.nix | 10 +---- nixcfgs/users/js0ny/programs/emacs.nix | 3 ++ nixcfgs/users/js0ny/programs/shell/zsh.nix | 3 -- nixcfgs/users/js0ny/zen.nix | 19 ++------- nixcfgs/users/js0ny/zephyrus.nix | 2 + 9 files changed, 103 insertions(+), 30 deletions(-) create mode 100644 nixcfgs/modules/home/darwin.nix diff --git a/nixcfgs/modules/home/darwin.nix b/nixcfgs/modules/home/darwin.nix new file mode 100644 index 0000000..4ba526f --- /dev/null +++ b/nixcfgs/modules/home/darwin.nix @@ -0,0 +1,24 @@ +{ + lib, + pkgs, + ... +}: { + home.sessionPath = ["/opt/homebrew/bin"]; + + programs.nh = { + enable = true; + flake = "/Users/js0ny/.dotfiles/nixcfgs"; + clean = { + enable = true; + dates = "weekly"; + extraArgs = "--keep 5 --keep-since 3d"; + }; + }; + + xdg.desktopEntries = lib.mkForce {}; + + i18n.inputMethod.enable = false; + + programs.ghostty.systemd.enable = false; + programs.ghostty.package = pkgs.ghostty-bin; +} diff --git a/nixcfgs/modules/nixos/programs/zsh.nix b/nixcfgs/modules/nixos/programs/zsh.nix index c27898f..1450df7 100644 --- a/nixcfgs/modules/nixos/programs/zsh.nix +++ b/nixcfgs/modules/nixos/programs/zsh.nix @@ -6,5 +6,6 @@ zsh-autoenv.enable = true; autosuggestions.enable = true; }; + catppuccin.zsh-syntax-highlighting.enable = false; environment.pathsToLink = ["/share/zsh"]; } diff --git a/nixcfgs/users/js0ny/packages/flatpak.nix b/nixcfgs/users/js0ny/packages/flatpak.nix index 5de3377..4b5dab4 100644 --- a/nixcfgs/users/js0ny/packages/flatpak.nix +++ b/nixcfgs/users/js0ny/packages/flatpak.nix @@ -1,5 +1,30 @@ # https://github.com/gmodena/nix-flatpak -{...}: { +{ + config, + lib, + pkgs, + ... +}: let + electronApps = [ + "com.getpostman.Postman" + # "com.ticktick.TickTick" + ]; + + waylandFlags = "\${NIXOS_OZONE_WL:+\${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"; + + appWrappers = lib.listToAttrs (map (appid: { + name = "flatpak/exports/bin/${appid}"; + value = { + text = '' + #!/bin/sh + exec flatpak run ${appid} ${waylandFlags} "$@" + ''; + executable = true; + force = true; + }; + }) + electronApps); +in { services.flatpak.enable = true; services.flatpak.remotes = [ { @@ -23,7 +48,7 @@ # "com.vivaldi.Vivaldi" "com.getpostman.Postman" "us.zoom.Zoom" - "com.ticktick.TickTick" + # "com.ticktick.TickTick" # cannot run on wayland under flatpak ]; services.flatpak.overrides = { global = { @@ -50,8 +75,18 @@ "md.obsidian.Obsidian".Context.sockets = ["wayland"]; "com.ticktick.Ticktick".Context.sockets = ["wayland"]; "com.getpostman.Postman".Context = { - persistent = ["Postman"]; + persistent = ["Postman"]; # Don't create `~/Postman` folder under home sockets = ["wayland"]; }; }; + xdg.dataFile = appWrappers; + home.activation.patchFlatpakDesktopFiles = lib.hm.dag.entryAfter ["writeBoundary"] '' + ${lib.concatMapStringsSep "\n" (appid: '' + DESKTOP_FILE="${config.xdg.dataHome}/flatpak/exports/share/applications/${appid}.desktop" + if [ -f "$DESKTOP_FILE" ]; then + $DRY_RUN_CMD ${pkgs.gnused}/bin/sed -i "s|^\(Exec=.*${appid}\)|\\1 ${waylandFlags}|g" "$DESKTOP_FILE" + fi + '') + electronApps} + ''; } diff --git a/nixcfgs/users/js0ny/packages/gui.nix b/nixcfgs/users/js0ny/packages/gui.nix index 871b803..9b6ec7d 100644 --- a/nixcfgs/users/js0ny/packages/gui.nix +++ b/nixcfgs/users/js0ny/packages/gui.nix @@ -3,6 +3,7 @@ lib, ... }: let + # FIXME: This will block the desktop files mkFcitxIM = builtins.map ( p: lib.hiPrio ( @@ -16,6 +17,30 @@ '' ) ); + # Wrap Electron apps to use Wayland when NIXOS_OZONE_WL is set + # This only works for apps that does not patched by upstream + mkElectronWayland = builtins.map ( + p: + lib.hiPrio ( + pkgs.runCommand "${p.name}-wrapped" + { + nativeBuildInputs = [pkgs.makeWrapper]; + meta = p.meta; + } + '' + mkdir -p $out/bin + # ln -s ${p}/share $out/share + makeWrapper ${lib.getExe p} $out/bin/${p.meta.mainProgram or p.pname} \ + --inherit-argv0 \ + --run ' + if [ -n "$NIXOS_OZONE_WL" ] && [ -n "$WAYLAND_DISPLAY" ]; then + NIX_WAYLAND_FLAGS="--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true" + fi + ' \ + --add-flags "\$NIX_WAYLAND_FLAGS" + '' + ) + ); in { home.packages = with pkgs; [ @@ -81,12 +106,15 @@ in { cider-2 kicad blender - qmk logisim-evolution + onlyoffice-desktopeditors ] ++ (mkFcitxIM [ pkgs.neovim-qt pkgs.anki + ]) + ++ (mkElectronWayland [ + pkgs.ticktick ]); home.sessionVariables = { diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix index 5574fef..2d914b1 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix @@ -9,22 +9,16 @@ enable = true; style = '' * { - /* `otf-font-awesome` is required to be installed for icons */ font-family: "Font Awesome 7 Free", "JetBrainsMono Nerd Font"; font-size: 14px; font-feature-settings: "tnum"; } #workspaces button:hover { - background: rgba(0, 0, 0, 0.2); - } - - #workspaces button.focused { - background-color: #64727D; - box-shadow: inset 0 -3px #ffffff; + background: @pink; } #workspaces button.urgent { - background-color: #eb4d4b; + background-color: @red; } ''; }; diff --git a/nixcfgs/users/js0ny/programs/emacs.nix b/nixcfgs/users/js0ny/programs/emacs.nix index 65d1374..5df0914 100644 --- a/nixcfgs/users/js0ny/programs/emacs.nix +++ b/nixcfgs/users/js0ny/programs/emacs.nix @@ -19,8 +19,11 @@ dirvish nix-ts-mode flycheck + highlight-indent-guides ]; }; + # TODO: tdlib version is too high + # See: https://github.com/zevlg/telega.el/issues/374 home.packages = with pkgs; [ tdlib ]; diff --git a/nixcfgs/users/js0ny/programs/shell/zsh.nix b/nixcfgs/users/js0ny/programs/shell/zsh.nix index e81b117..1e28c70 100644 --- a/nixcfgs/users/js0ny/programs/shell/zsh.nix +++ b/nixcfgs/users/js0ny/programs/shell/zsh.nix @@ -28,9 +28,6 @@ in { patterns = { "rm -rf *" = "fg=blue,bold,bg=red"; }; - styles = { - path = "fg=cyan,underline"; - }; highlighters = [ "main" "pattern" diff --git a/nixcfgs/users/js0ny/zen.nix b/nixcfgs/users/js0ny/zen.nix index 15c1a13..264f2bb 100644 --- a/nixcfgs/users/js0ny/zen.nix +++ b/nixcfgs/users/js0ny/zen.nix @@ -1,4 +1,4 @@ -{lib, ...}: { +{...}: { imports = [ ./default.nix @@ -26,6 +26,9 @@ ./programs/neovide.nix ./programs/ghostty.nix + ../../modules/home/do-not-track.nix + ../../modules/home/darwin.nix + ../../modules/home/programs/lsd.nix ../../modules/home/programs/starship.nix ../../modules/home/programs/zoxide.nix @@ -33,19 +36,5 @@ ../../modules/home/dev/nix.nix ]; - home.sessionPath = ["/opt/homebrew/bin"]; - - programs.nh = { - enable = true; - flake = "/Users/js0ny/.dotfiles/nixcfgs"; - clean = { - enable = true; - dates = "weekly"; - extraArgs = "--keep 5 --keep-since 3d"; - }; - }; - - xdg.desktopEntries = lib.mkForce {}; - home.stateVersion = "25.05"; } diff --git a/nixcfgs/users/js0ny/zephyrus.nix b/nixcfgs/users/js0ny/zephyrus.nix index 9b88016..9d4280a 100644 --- a/nixcfgs/users/js0ny/zephyrus.nix +++ b/nixcfgs/users/js0ny/zephyrus.nix @@ -56,6 +56,8 @@ ./programs/desktop/wayland-wm/niri ./programs/desktop/wayland-wm/hyprland.nix + ../../modules/home/do-not-track.nix + # General Program config ../../modules/home/programs/eza.nix # ../../modules/home/programs/winboat.nix