fnott(5)

πŸ’– fnott(5) β€” configuration file πŸ’–

✨ NAME ✨

fnott β€” the config file bestie, aka where you tell fnott how to serve looks πŸ‘‘


🌸 DESCRIPTION 🌸

okay so, fnott uses the standard unix config format: section-based key/value pairs, no cap. The default (global) section is unnamed β€” like, it has no [section] prefix, it's just vibing there at the top. But you can explicitly name it [main] if you want, say if you need to reopen it after any of the other sections. lowkey flexible of it.

fnott will go hunting for a config file in these locations, in this exact order:

  • XDG_CONFIG_HOME/fnott/fnott.ini (and if that env var is unset, it defaults to ~/.config/fnott/fnott.ini)
  • XDG_CONFIG_DIRS/fnott/fnott.ini (and if that's unset, it defaults to /etc/xdg/fnott/fnott.ini)

πŸŽ€ SECTION: default πŸŽ€

Global options

  • output β€” which output to put your notifications on. If you leave it unspecified, the compositor picks one for us, king behavior.
⚠️ heads up bestie: if you don't specify an output, and the compositor's chosen output is scaled, then every new notification will flash a low-res frame before re-rendering at the correct scale factor. Why? Because fnott literally has no way of knowing the scale factor until after the notification has been mapped (i.e. shown). it's giving "mystery box" energy and not in a fun way 😭

Default: unspecified.

In Sway, you can run swaymsg -t get_outputs to get a list of available outputs. slay.

  • min-width β€” minimum notification width, in pixels. Default: 0.
  • max-width β€” maximum notification width, in pixels. 0 means unlimited. Note that fnott will automatically word-wrap the notification text if you set this to a non-zero value. Default: 0.
  • max-height β€” maximum notification height, in pixels. 0 means unlimited. Default: 0.
  • icon-theme β€” the icon theme to use when a notification has requested a non-embedded icon. Default: default.
  • max-icon-size β€” maximum icon size, in pixels. Icons bigger than this get scaled down. A value of 0 disables icons entirely. Default: 32.
  • stacking-order β€” how to stack multiple notifications:
    • bottom-up : oldest, highest priority furthest away from the anchor point.
    • top-down: oldest, highest priority at the anchor point.

So like, if your notifications are anchored at the top, bottom-up puts the most recent notification in the upper corner, while the oldest one sits at the bottom of the stack. periodt.

Default: bottom-up.

  • anchor β€” where notifications are positioned: top-left, top-right, bottom-left, bottom-right or center. Default: top-right.
  • edge-margin-vertical β€” vertical margin, in pixels, between the screen edge (top or bottom, depending on the anchor pointer) and the notifications. Default: 10.
  • edge-margin-horizontal β€” horizontal margin, in pixels, between the screen edge (left or right, depending on the anchor pointer) and the notifications. Default: 10.
  • notification-margin β€” margin between notifications. Default: 10.
  • selection-helper β€” the command (and optionally its arguments) to execute to display actions and let the user pick one to run.

The utility should accept (action) entries to display on stdin (newline separated), and write the selected entry on stdout.

πŸ’… it is strongly recommended that you enable selection-helper-uses-null-separator (see below), if your helper of choice supports it.

Default: dmenu.

  • selection-helper-uses-null-separator β€” Boolean. When enabled, the action strings passed to the selection helper will be NULL separated instead of newline separated.

Note that you may also have to adjust selection-helper, to make sure the selection helper parses the action strings correctly. For example, instead of fuzzel --dmenu, you'd have to use fuzzel --dmenu0. iykyk.

Default: no.

  • play-sound β€” command to execute to play notification sounds. ${filename} gets expanded to the path of the audio file to play. Default: aplay ${filename}.
  • scaling-filter β€” which scaling filter to use when scaling non-SVG notification images.

Possible values are:

  • none
  • nearest
  • bilinear
  • cubic
  • lanczos3

none is the fastest but also looks the worst. lanczos3 produces the best result, but is also, by far, the slowest option. pick your fighter πŸ₯Š

Default: lanczos3


Per-urgency default options πŸ’«

These options can also be specified in an urgency section, in which case they override whatever you set in the default section. cute, right?

  • layer β€” layer on which notifications will appear: background, bottom, top or overlay. Default: top.
  • background β€” background color of the notification, in RGBA format. Default: 3f5f3fff.
  • border-color β€” border color of the notification, in RGBA format. Default: 909090ff.
  • border-radius β€” corner radius on the border, in pixels. Default: 0.
  • border-size β€” border size, in pixels. Default: 1.
  • padding-vertical β€” vertical padding, in pixels, between the notification edge (top or bottom) and the notification text. Default: 20.
  • padding-horizontal β€” horizontal padding, in pixels, between the notification edge (left or right) and the notification text. Default: 20.
  • dpi-aware β€” Boolean.

When set to yes, fonts are sized using the monitor's DPI, which makes a font of a given size have the same physical size, regardless of monitor. in this mode, the monitor's scaling factor is ignored β€” doubling the scaling factor will not double the font size.

When set to no, the monitor's DPI is ignored. The font is instead sized using the monitor's scaling factor β€” doubling the scaling factor does double the font size.

🫢 note that this option typically does not work with bitmap fonts, which only contain a pre-defined set of sizes and cannot be dynamically scaled. Whichever size (of the available ones) best matches the DPI or scaling factor will be used.
also note: if the font size was specified in pixels (:pixelsize=N instead of :size=N), DPI scaling (dpi-aware=yes) will have no effect β€” the specified pixel size is used as-is. But if the monitor's scaling factor is used to size the font (dpi-aware=no), the font's pixel size will be multiplied with the scaling factor.

Default: no

  • title-font β€” font to use for the application title, in fontconfig format (see FONT FORMAT). Default: sans serif.
  • title-color β€” text color to use for the application title, in RGBA format. Default: ffffffff.
  • title-format β€” template string for the title portion of the notification (see FORMAT STRINGS). Default: <i>%a%A</i>.
  • summary-font β€” font to use for the summary, in fontconfig format (see FONT FORMAT). Default: sans serif.
  • summary-color β€” text color to use for the summary, in RGBA format. Default: ffffffff.
  • summary-format β€” template string for the summary portion of the notification (see FORMAT STRINGS). Default: <b>%s\n</b>.
  • body-font β€” font to use for the text body, in fontconfig format (see FONT FORMAT). Default: sans serif.
  • body-color β€” text color to use for the text body, in RGBA format. Default: ffffffff.
  • body-format β€” template string for the body portion of the notification (see FORMAT STRINGS). Default: %b.
  • progress-bar-height β€” height, in pixels, of progress bars (rendered when a notification has an int:value hint). Default: 20.
  • progress-color β€” color, in RGBA format, of the progress indicator. Default: ffffffff.
  • progress-style β€” defines the style of the progress indicator in notifications.

Possible values:

  • bar: displays a separate progress bar.
  • background: fills the notification background with the progress color.

Default: bar.

  • max-timeout β€” time limit, in seconds, before notifications are automatically dismissed. Applications can provide their own timeout when they create a notification, and this option lets you cap that timeout. A value of 0 disables the limit. Default: 0.
  • default-timeout β€” time, in seconds, before notifications are automatically dismissed if the notifying application doesn't specify a timeout. A value of 0 disables the timeout β€” meaning if the application doesn't provide a timeout, the notification is never automatically dismissed (unless max-timeout has been set). Default: 0.
  • idle-timeout β€” time, in seconds, that you must be idle to prevent any notification from being dismissed. A value of 0 disables the timeout. Default: 0.
  • sound-file β€” absolute path to the audio file to play when a notification is received. If unset, no sound is played. Default: unset.
  • icon β€” icon to use when none is provided by the notifications themselves. Can be either an absolute path, or a name (without extension).

In the latter case, it'll be searched for in the selected icon theme, using the fallback rules defined by the XDG icon theme specification.

Default: unset.


🌈 SECTION: low 🌈

This section lets you override the options listed under per-urgency default options for low priority notifications.

By default, the following options are already overridden:

  • background: 2b2b2bff
  • title-color 888888ff
  • summary-color: 888888ff
  • body-color: 888888ff

πŸ¦‹ SECTION: normal πŸ¦‹

This section lets you override the options listed under per-urgency default options for normal priority notifications.

By default, the following options are already overridden: none. yeah, it's a blank slate bestie ✨


πŸ”₯ SECTION: critical πŸ”₯

This section lets you override the options listed under per-urgency default options for critical priority notifications.

By default, the following options are already overridden:

  • background: 6c3333ff

πŸ’œ FONT FORMAT πŸ’œ

The font is specified in FontConfig syntax. That is, a colon-separated list of font name and font options.

Examples:

  • Dina:weight=bold:slant=italic
  • Courier New:size=12

πŸ’… FORMAT STRINGS πŸ’…

Okay bestie, this is the part where you get to customize the vibe of your notifications ✨. The title-format, summary-format and body-format options let you decide exactly what shows up in each lil' portion of the notification. Main character energy for your notifs, fr fr πŸŽ€.

They're strings with placeholders in them, and those placeholders get expanded with attributes straight from the notification itself πŸ‘‘:

  • %a β€” the application name πŸ“
  • %s β€” the notification summary
  • %b β€” the notification body text
  • %A β€” the action indicator (it's literally a '*' if actions are present, and an empty string otherwise πŸ’€)
  • %% β€” a literal '%'
  • \n β€” a literal newline

And there's markup too, because obviously πŸ’–. These tags are also supported:

  • <b> β€” bold πŸ”₯
  • <i> β€” italic πŸ¦‹
  • <u> β€” underline ✨

No cap, that's the whole format language. Simple, iconic, we ate πŸ’….


🌈 SEE ALSO 🌈

  • fnott(1) β€” go read the big one too, bestie 🫢

That's the whole page, and that's a wrap on fnott(5) 🌸 β€” shoutout to the source, fnott 5, dated 2025-08-21. Love that for us. Go format some strings, you gorgeous genius πŸŽ€πŸ’œβœ¨

πŸ“¦ where this page comes from