This is nohang config file.
    Lines starting with #, tabs and spaces are comments.
    Lines starting with @ contain optional parameters.
    All values are case sensitive.
    Be careful: nohang doesn't forbid you to shoot yourself in the foot.

    The configuration includes the following sections:

    1. Common zram settings
    2. Common PSI settings
    3. Poll rate
    4. Warnings and notifications
    5. Soft threshold
    6. Hard threshold
    7. Customize victim selection: adjusting badness of processes
    8. Customize soft corrective actions
    9. Misc settings
   10. Verbosity, debug, logging

    Just read the description of the parameters and edit the values.
    Please restart the program after editing the config.

    TODO: improve descriptions

###############################################################################

    1. Common zram settings

    Key: zram_checking_enabled
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

zram_checking_enabled = False

###############################################################################

    2. Common PSI settings

    Key: psi_checking_enabled
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

psi_checking_enabled = False

    Key: psi_path
    Description:
    Type: string
    Valid values: any string
    Default value: /proc/pressure/memory

psi_path = /proc/pressure/memory

    Key: psi_metrics
    Description:
    Type: string
    Valid values: some_avg10, some_avg60, some_avg300,
                  full_avg10, full_avg60, full_avg300
    Default value: some_avg10

psi_metrics = some_avg10

    Key: psi_excess_duration
    Description:
    Type: float
    Valid values: >= 0
    Default value: 30

psi_excess_duration = 30

    Key: psi_post_action_delay
    Description:
    Type: float
    Valid values: >= 10
    Default value: 20

psi_post_action_delay = 20

###############################################################################

    3. Poll rate

    Key: fill_rate_mem
    Description:
    Type: float
    Valid values: >= 100
    Default value: 6000

fill_rate_mem  = 6000

    Key: fill_rate_swap
    Description:
    Type: float
    Valid values: >= 100
    Default value: 2000

fill_rate_swap = 2000

    Key: fill_rate_zram
    Description:
    Type: float
    Valid values: >= 100
    Default value: 4000

fill_rate_zram = 4000

    Key: max_sleep
    Description:
    Type: float
    Valid values: >= 0.01 and >= min_sleep
    Default value: 3

max_sleep = 3

    Key: min_sleep
    Description:
    Type: float
    Valid values: >= 0.01 and <= max_sleep
    Default value: 0.1

min_sleep = 0.1

###############################################################################

    4. Warnings and notifications

    4.1. GUI notifications after corrective actions

    Key: post_action_gui_notifications
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

post_action_gui_notifications = True

    Key: hide_corrective_action_type
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

hide_corrective_action_type = False

    4.2. Low memory warnings

    Key: low_memory_warnings_enabled
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

low_memory_warnings_enabled = True

    Key: warning_exe
    Description:
    Type: string
    Valid values: any string
    Default value: (empty string)

warning_exe =

    Key: warning_threshold_min_mem
    Description:
    Type: float (with % or M)
    Valid values: from the range [0; 100] %
    Default value: 20 %

warning_threshold_min_mem  = 20 %

    Key: warning_threshold_min_swap
    Description:
    Type: float (with % or M)
    Valid values: [0; 100] % or >= 0 M
    Default value: 20 %

warning_threshold_min_swap = 25 %

    Key: warning_threshold_max_zram
    Description:
    Type: float (with % or M)
    Valid values: from the range [0; 100] %
    Default value: 45 %

warning_threshold_max_zram = 45 %

    Key: warning_threshold_max_psi
    Description:
    Type: float
    Valid values: from the range [0; 100]
    Default value: 10

warning_threshold_max_psi  = 10

    Key: min_post_warning_delay
    Description:
    Type: float
    Valid values: >= 1
    Default value: 60

min_post_warning_delay = 60

    Key: env_cache_time
    Description:
    Type: float
    Valid values: >= 0
    Default value: 300

env_cache_time = 300

###############################################################################

    5. Soft threshold (thresholds for sending the SIGTERM signal or
                       implementing other soft corrective action)

    Key: soft_threshold_min_mem
    Description:
    Type: float (with % or M)
    Valid values: from the range [0; 50] %
    Default value: 5 %

soft_threshold_min_mem = 7 %

    Key: soft_threshold_min_swap
    Description:
    Type: float (with % or M)
    Valid values: [0; 100] % or >= 0 M
    Default value: 10 %

soft_threshold_min_swap = 14 %

    Key: soft_threshold_max_zram
    Description:
    Type: float (with % or M)
    Valid values: from the range [10; 90] %
    Default value: 55 %

soft_threshold_max_zram = 55 %

    Key: soft_threshold_max_psi
    Description:
    Type: float
    Valid values: from the range [5; 100]
    Default value: 40

soft_threshold_max_psi  = 40

###############################################################################

    6. Hard threshold (thresholds for sending the SIGKILL signal)

    Key: hard_threshold_min_mem
    Description:
    Type: float (with % or M)
    Valid values: from the range [0; 50] %
    Default value: 2 %

hard_threshold_min_mem = 2 %

    Key: hard_threshold_min_swap
    Description:
    Type: float (with % or M)
    Valid values: [0; 100] % or >= 0 M
    Default value: 4 %

hard_threshold_min_swap = 4 %

    Key: hard_threshold_max_zram
    Description:
    Type: float (with % or M)
    Valid values: from the range [10; 90] %
    Default value: 60 %

hard_threshold_max_zram = 60 %

    Key: hard_threshold_max_psi
    Description:
    Type: float
    Valid values: from the range [5; 100]
    Default value: 90

hard_threshold_max_psi = 90

###############################################################################

    7. Customize victim selection: adjusting badness of processes

    7.1. Ignore positive oom_score_adj

    Key: ignore_positive_oom_score_adj
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

ignore_positive_oom_score_adj = False

    7.2.1. Matching process names with RE patterns change their badness

    Syntax:

    @BADNESS_ADJ_RE_NAME  badness_adj  ///  RE_pattern

    New badness value will be += badness_adj

    It is possible to compare multiple patterns
    with different badness_adj values.

    Example:
    @BADNESS_ADJ_RE_NAME 200 /// ^Web Content$

    7.2.2. Matching CGroup_v1-line with RE patterns

    @BADNESS_ADJ_RE_CGROUP_V1 -50 ///  ^/system\.slice/

    @BADNESS_ADJ_RE_CGROUP_V1  50 ///  /foo\.service$

    @BADNESS_ADJ_RE_CGROUP_V1 -50 ///  ^/user\.slice/

    7.2.3. Matching CGroup_v2-line with RE patterns

    @BADNESS_ADJ_RE_CGROUP_V2  100 /// ^/workload

    7.2.4. Matching eUIDs with RE patterns

    @BADNESS_ADJ_RE_UID -100 /// ^0$

    7.2.5. Matching /proc/[pid]/exe realpath with RE patterns

    Example:
    @BADNESS_ADJ_RE_REALPATH  900  ///  ^(/usr/bin/stress|/usr/bin/stress-ng)$

    7.2.6. Matching cwd with RE patterns

    @BADNESS_ADJ_RE_CWD  200  ///  ^/home/

    7.2.7. Matching cmdlines with RE patterns
    WARNING: using this option can greatly slow down the search for a victim
    in conditions of heavily swapping.

    Prefer Chromium tabs and Electron-based apps
    @BADNESS_ADJ_RE_CMDLINE  200 /// --type=renderer

    Prefer Firefox tabs (Web Content and WebExtensions)
    @BADNESS_ADJ_RE_CMDLINE  100 /// -appomni

    @BADNESS_ADJ_RE_CMDLINE -200 /// ^/usr/lib/virtualbox

    7.2.8. Matching environ with RE patterns
    WARNING: using this option can greatly slow down the search for a victim
    in conditions of heavy swapping.

    @BADNESS_ADJ_RE_ENVIRON 100 /// USER=user


    Note that you can control badness also via systemd units via
    OOMScoreAdjust, see
    www.freedesktop.org/software/systemd/man/systemd.exec.html#OOMScoreAdjust=

###############################################################################

    8. Customize soft corrective actions

    Run the command instead of sending a signal with at soft corrective action
    if the victim's name or cgroup matches the regular expression.

    Syntax:
    KEY                         REGEXP      SEPARATOR     COMMAND

    @SOFT_ACTION_RE_NAME       ^foo$             /// kill -USR1  $PID
    @SOFT_ACTION_RE_CGROUP_V1  ^/system\.slice/  /// systemctl restart $SERVICE
    @SOFT_ACTION_RE_CGROUP_V2  /foo\.service$    /// systemctl restart $SERVICE

    $PID will be replaced by process PID.
    $NAME will be replaced by process name.
    $SERVICE will be replaced by .service if it exists (overwise it will be
                                                        relpaced by empty line)

###############################################################################

    9. Misc settings

    Key: max_soft_exit_time
    Description:
    Type: float
    Valid values: >= 0.1
    Default value: 10

max_soft_exit_time = 10

    Key: post_kill_exe
    Description:
    Type: string
    Valid values: any string
    Default value: (empty string)

post_kill_exe =

    Key: min_badness
    Description:
    Type: integer
    Valid values: >= 1
    Default value: 1

min_badness = 1

    Key: post_soft_action_delay
    Description:
    Type: float
    Valid values: >= 0.1
    Default value: 3

post_soft_action_delay = 3

    Key: post_zombie_delay
    Description:
    Type: float
    Valid values: >= 0
    Default value: 0.1

post_zombie_delay = 0.1

    Key: victim_cache_time
    Description:
    Type: float
    Valid values: >= 0
    Default value: 10

victim_cache_time = 10

    Key: exe_timeout
    Description:
    Type: float
    Valid values: >= 0.1
    Default value: 20

exe_timeout = 20

###############################################################################

   10. Verbosity, debug, logging

    Key: print_config_at_startup
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

print_config_at_startup = False

    Key: print_mem_check_results
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

print_mem_check_results = False

    Key: min_mem_report_interval
    Description:
    Type: float
    Valid values: >= 0
    Default value: 60

min_mem_report_interval = 60

    Key: print_proc_table
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

print_proc_table = False

    Key: extra_table_info
    Description:
    WARNING: using "cmdline" or "environ" keys can greatly slow down
    the search for a victim in conditions of heavy swapping.
    Type: string
    Valid values: None, cgroup_v1, cgroup_v2, realpath,
                  cwd, cmdline, environ
    Default value: None

extra_table_info = None

    Key: print_victim_status
    Description:
    Type: boolean
    Valid values: True | False
    Default value: True

print_victim_status = True

    Key: print_victim_cmdline
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

print_victim_cmdline = False

    Key: max_victim_ancestry_depth
    Description:
    Type: integer
    Valid values: >= 1
    Default value: 3

max_victim_ancestry_depth = 3

    Key: print_statistics
    Description:
    Type: boolean
    Valid values: True | False
    Default value: True

print_statistics = True

    Key: debug_psi
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

debug_psi = False

    Key: debug_gui_notifications
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

debug_gui_notifications = False

    Key: debug_sleep
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

debug_sleep = False

    Key: debug_threading
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

debug_threading = False

    Key: separate_log
    Description:
    Type: boolean
    Valid values: True | False
    Default value: False

separate_log = False

###############################################################################

    Use cases, feature requests and any questions are welcome:
    https://github.com/hakavlad/nohang/issues