flatpak: patch electrons under wayland

This commit is contained in:
js0ny 2025-11-21 13:35:32 +00:00
parent 1e55d81961
commit 735935627d
9 changed files with 103 additions and 30 deletions

View file

@ -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;
}

View file

@ -6,5 +6,6 @@
zsh-autoenv.enable = true;
autosuggestions.enable = true;
};
catppuccin.zsh-syntax-highlighting.enable = false;
environment.pathsToLink = ["/share/zsh"];
}

View file

@ -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}
'';
}

View file

@ -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 = {

View file

@ -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;
}
'';
};

View file

@ -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
];

View file

@ -28,9 +28,6 @@ in {
patterns = {
"rm -rf *" = "fg=blue,bold,bg=red";
};
styles = {
path = "fg=cyan,underline";
};
highlighters = [
"main"
"pattern"

View file

@ -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";
}

View file

@ -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