72 lines
2.4 KiB
Nix
72 lines
2.4 KiB
Nix
# XXX(2024-11-26): nixpkgs' signal-desktop has bugs on wayland:
|
|
# - it won't open a UI (though it *does* on Xwayland)
|
|
# - it may hang on exit (?), characterized by these log messages:
|
|
# Dec 03 13:46:23 moby signal-desktop[4097]: [4097:1203/134623.906367:ERROR:ozone_platform_x11.cc(240)] Missing X server or $DISPLAY
|
|
# Dec 03 13:46:23 moby signal-desktop[4097]: [4097:1203/134623.909667:ERROR:env.cc(255)] The platform failed to initialize. Exiting.
|
|
{ config, lib, pkgs, ... }:
|
|
let
|
|
cfg = config.sane.programs.signal-desktop;
|
|
in
|
|
{
|
|
sane.programs.signal-desktop = {
|
|
configOption = with lib; mkOption {
|
|
default = {};
|
|
type = types.submodule {
|
|
options.autostart = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
# optionally, build this *mostly* from source (deps remain vendored), to allow e.g. for patching.
|
|
packageUnwrapped = pkgs.signal-desktop-from-src;
|
|
|
|
# or use the binary version:
|
|
# packageUnwrapped = pkgs.signal-desktop.overrideAttrs (upstream: {
|
|
# # fix to use wayland instead of Xwayland:
|
|
# # - replace `NIXOS_OZONE_WL` non-empty check with `WAYLAND_DISPLAY`
|
|
# # - use `wayland` instead of `auto` because --ozone-platform-hint=auto still prefers X over wayland when both are available
|
|
# # alternatively, set env var: `ELECTRON_OZONE_PLATFORM_HINT=wayland` and ignore all of this
|
|
# preFixup = lib.replaceStrings
|
|
# [ "NIXOS_OZONE_WL" "--ozone-platform-hint=auto" ]
|
|
# [ "WAYLAND_DISPLAY" "--ozone-platform-hint=wayland" ]
|
|
# upstream.preFixup
|
|
# ;
|
|
# });
|
|
|
|
sandbox.net = "clearnet";
|
|
sandbox.whitelistAudio = true;
|
|
sandbox.whitelistDbus = [
|
|
"user" # so i can click on links
|
|
];
|
|
sandbox.whitelistWayland = true;
|
|
sandbox.extraHomePaths = [
|
|
"Music"
|
|
"Pictures/albums"
|
|
"Pictures/cat"
|
|
"Pictures/from"
|
|
"Pictures/Photos"
|
|
"Pictures/Screenshots"
|
|
"Pictures/servo-macros"
|
|
"Videos/local"
|
|
"Videos/servo"
|
|
"tmp"
|
|
];
|
|
|
|
# creds, media
|
|
persist.byStore.private = [
|
|
".config/Signal"
|
|
];
|
|
|
|
buildCost = 1;
|
|
|
|
services.signal-desktop = {
|
|
description = "signal-desktop Signal Messenger client";
|
|
# depends = [ "graphical-session" ];
|
|
partOf = lib.mkIf cfg.config.autostart [ "graphical-session" ];
|
|
command = "signal-desktop";
|
|
};
|
|
};
|
|
}
|