--- ts/models/messages.ts.orig	2023-02-02 21:51:07.000000000 +0100
+++ ts/models/messages.ts	2023-02-03 18:17:14.799327000 +0100
@@ -908,7 +908,7 @@ export class MessageModel extends window.Backbone.Mode
         });
       }
 
-      if (!window.Signal.OS.isLinux()) {
+      if (!(window.Signal.OS.isLinux() || window.Signal.OS.isFreeBSD())) {
         return attributes.storyReaction.emoji;
       }
 
@@ -927,7 +927,7 @@ export class MessageModel extends window.Backbone.Mode
 
     // Linux emoji support is mixed, so we disable it. (Note that this doesn't touch
     //   the `text`, which can contain emoji.)
-    const shouldIncludeEmoji = Boolean(emoji) && !window.Signal.OS.isLinux();
+    const shouldIncludeEmoji = Boolean(emoji) && !(window.Signal.OS.isLinux() || window.Signal.OS.isFreeBSD());
     if (shouldIncludeEmoji) {
       return window.i18n('message--getNotificationText--text-with-emoji', {
         text: modifiedText,
--- ts/OS.ts.orig	2023-02-02 21:51:07.000000000 +0100
+++ ts/OS.ts	2023-02-03 18:15:27.645364000 +0100
@@ -22,6 +22,7 @@ export const isWindows = createIsPlatform('win32');
 export const isMacOS = createIsPlatform('darwin');
 export const isLinux = createIsPlatform('linux');
 export const isWindows = createIsPlatform('win32');
+export const isFreeBSD = createIsPlatform('freebsd');
 
 // Windows 10 and above
 export const hasCustomTitleBar = (): boolean =>
@@ -33,6 +34,9 @@ export const getName = (): string => {
   }
   if (isWindows()) {
     return 'Windows';
+  }
+  if (isFreeBSD()) {
+    return 'FreeBSD';
   }
   return 'Linux';
 };
--- ts/services/notifications.ts	2022-02-12 02:48:01.000000000 +0100
+++ ts/services/notifications.ts	2022-02-18 20:39:11.725928000 +0100
@@ -143,7 +143,7 @@ class NotificationService extends EventEmitter {
     const audioNotificationSupport = getAudioNotificationSupport();
 
     const notification = new window.Notification(title, {
-      body: OS.isLinux() ? filterNotificationText(message) : message,
+      body: (OS.isFreeBSD() || OS.isLinux()) ? filterNotificationText(message) : message,
       icon,
       silent:
         silent || audioNotificationSupport !== AudioNotificationSupport.Native,
--- ts/util/getUserAgent.ts	2022-02-12 02:48:01.000000000 +0100
+++ ts/util/getUserAgent.ts	2022-02-18 20:43:07.232944000 +0100
@@ -7,6 +7,7 @@ const PLATFORM_STRINGS: { [platform: string]: string }
   win32: 'Windows',
   darwin: 'macOS',
   linux: 'Linux',
+  freebsd: 'FreeBSD',
 };
 
 export function getUserAgent(appVersion: string): string {
--- ts/types/Settings.ts.orig	2022-02-16 16:11:39.000000000 +0100
+++ ts/types/Settings.ts	2022-02-19 22:18:16.945135000 +0100
@@ -19,7 +19,7 @@ export function getAudioNotificationSupport(): AudioNo
   if (OS.isWindows(MIN_WINDOWS_VERSION) || OS.isMacOS()) {
     return AudioNotificationSupport.Native;
   }
-  if (OS.isLinux()) {
+  if (OS.isLinux() || OS.isFreeBSD) {
     return AudioNotificationSupport.Custom;
   }
   return AudioNotificationSupport.None;
@@ -60,7 +60,7 @@ export const getTitleBarVisibility = (): TitleBarVisib
  */
 export const isSystemTraySupported = (appVersion: string): boolean =>
   // We eventually want to support Linux in production.
-  OS.isWindows() || (OS.isLinux() && !isProduction(appVersion));
+  OS.isWindows() || (OS.isLinux() && !isProduction(appVersion)) || (OS.isFreeBSD() && !isProduction(appVersion));
 
 export const isAutoDownloadUpdatesSupported = (): boolean =>
   OS.isWindows() || OS.isMacOS();
--- app/main.ts.orig	2022-02-24 15:35:11.986213000 +0100
+++ app/main.ts	2022-02-24 15:34:26.610207000 +0100
@@ -451,7 +451,7 @@ let windowIcon: string;
 
 if (OS.isWindows()) {
   windowIcon = join(__dirname, '../build/icons/win/icon.ico');
-} else if (OS.isLinux()) {
+} else if (OS.isLinux() || OS.isFreeBSD()) {
   windowIcon = join(__dirname, '../images/signal-logo-desktop-linux.png');
 } else {
   windowIcon = join(__dirname, '../build/icons/png/512x512.png');
--- ts/state/getInitialState.ts.orig	2023-02-05 14:58:42.686190000 +0100
+++ ts/state/getInitialState.ts	2023-02-05 14:59:18.608061000 +0100
@@ -69,7 +69,7 @@ export function getInitialState({
 
   const theme = getThemeType();
 
-  let osName: 'windows' | 'macos' | 'linux' | undefined;
+  let osName: 'windows' | 'macos' | 'linux' | 'freebsd' | undefined;
 
   if (OS.isWindows()) {
     osName = 'windows';
@@ -77,6 +77,8 @@ export function getInitialState({
     osName = 'macos';
   } else if (OS.isLinux()) {
     osName = 'linux';
+  } else if (OS.isFreeBSD()) {
+    osName = 'freebsd';
   }
 
   return {
--- ts/scripts/fuse-electron.ts.orig	2023-02-05 15:01:26.625383000 +0100
+++ ts/scripts/fuse-electron.ts	2023-02-05 15:02:05.602959000 +0100
@@ -17,7 +17,7 @@ export async function afterPack({
     target = `${productFilename}.app`;
   } else if (electronPlatformName === 'win32') {
     target = `${productFilename}.exe`;
-  } else if (electronPlatformName === 'linux') {
+  } else if (electronPlatformName === 'linux' || electronPlatformName === 'freebsd') {
     // Sadly, `LinuxPackager` type is not exported by electron-builder so we
     // have to improvise
     target = (packager as unknown as { executableName: string }).executableName;
--- ts/state/ducks/user.ts.orig	2023-02-05 15:03:14.076343000 +0100
+++ ts/state/ducks/user.ts	2023-02-05 15:03:54.047783000 +0100
@@ -23,7 +23,7 @@ export type UserStateType = Readonly<{
   isMainWindowMaximized: boolean;
   localeMessages: LocaleMessagesType;
   menuOptions: MenuOptionsType;
-  osName: 'linux' | 'macos' | 'windows' | undefined;
+  osName: 'linux' | 'macos' | 'windows' | 'freebsd' | undefined;
   ourACI: UUIDStringType | undefined;
   ourConversationId: string | undefined;
   ourDeviceId: number | undefined;
@@ -100,7 +100,7 @@ export function getEmptyState(): UserStateType {
 // Reducer
 
 export function getEmptyState(): UserStateType {
-  let osName: 'windows' | 'macos' | 'linux' | undefined;
+  let osName: 'windows' | 'macos' | 'linux' | 'freebsd' | undefined;
 
   if (OS.isWindows()) {
     osName = 'windows';
@@ -108,6 +108,8 @@ export function getEmptyState(): UserStateType {
     osName = 'macos';
   } else if (OS.isLinux()) {
     osName = 'linux';
+  } else if (OS.isFreeBSD()) {
+    osName = 'freebsd';
   }
 
   return {
