Smos Logo Smos

A comprehensive self-management system

The Smos TUI

Documentation about the Smos TUI, for editing Smos files

Reference

Options

  --config-file           Path to the configuration file                                                                                                                                                                                                                                       
  FILE_OR_DIR             the file to edit                                                                                                                                                                                                                                                     
  --workflow-dir          The workflow directory                                                                                                                                                                                                                                               
  --archive-dir           The archive directory                                                                                                                                                                                                                                                
  --projects-dir          The projects directory                                                                                                                                                                                                                                               
  --archived-projects-dir The archived projects directory                                                                                                                                                                                                                                      
  --waiting-threshold     waiting report threshold to consider waiting entries 'overdue'     default: Days 7                                                                                                                                                                                   
  --stuck-threshold       stuck report threshold to consider stuck projects 'overdue'        default: Weeks 3                                                                                                                                                                                  
  --work-base-filter      The base work filter                                               default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  --work-time-filter      The property to use to filter by time                                                                                                                                                                                                                                
  --work-columns          The columns in the report                                          default: OntoFile :| [OntoState,OntoHeader]                                                                                                                                                       
  --work-sorter           The sorter to use to sort the rows                                                                                                                                                                                                                                   
  --free-earliest         the earliest time of day to consider free                                                                                                                                                                                                                            
  --free-latest           the latest time of day to consider free                                                                                                                                                                                                                              
  --explainer-mode        Activate explainer mode to show what is happening                  default: False                                                                                                                                                                                    
  --explainer-mode        Activate sandbox mode to ensure that smos can only edit smos files default: False                                                                                                                                                                                    

Environment variables

  SMOS_CONFIG_FILE FILE_PATH                  Path to the configuration file                                                                                                                                                                                                                                         
  SMOS_WORKFLOW_DIR DIRECTORY_PATH            The workflow directory                                                                                                                                                                                                                                                 
  SMOS_ARCHIVE_DIR DIRECTORY_PATH             The archive directory                                                                                                                                                                                                                                                  
  SMOS_PROJECTS_DIR DIRECTORY_PATH            The projects directory                                                                                                                                                                                                                                                 
  SMOS_ARCHIVED_PROJECTS_DIR DIRECTORY_PATH   The archived projects directory                                                                                                                                                                                                                                        
  SMOS_WAITING_THRESHOLD TIME                 waiting report threshold to consider waiting entries 'overdue'       default: Days 7                                                                                                                                                                                   
  SMOS_STUCK_THRESHOLD TIME                   stuck report threshold to consider stuck projects 'overdue'          default: Weeks 3                                                                                                                                                                                  
  SMOS_WORK_BASE_FILTER FILTER                The base work filter                                                 default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  SMOS_WORK_TIME_FILTER PROPERTY_NAME         The property to use to filter by time                                                                                                                                                                                                                                  
  SMOS_WORK_COLUMNS COLUMNS                   The columns in the report                                            default: OntoFile :| [OntoState,OntoHeader]                                                                                                                                                       
  SMOS_WORK_SORTER SORTER                     The sorter to use to sort the rows                                                                                                                                                                                                                                     
  SMOS_FREE_EARLIEST TIME_OF_DAY              the earliest time of day to consider free                                                                                                                                                                                                                              
  SMOS_FREE_LATEST TIME_OF_DAY                the latest time of day to consider free                                                                                                                                                                                                                                
  SMOS_EXPLAINER_MODE ANY                     Activate explainer mode to show what is happening                    default: False                                                                                                                                                                                    
  SMOS_EXPLAINER_MODE ANY                     Activate sandbox mode to ensure that smos can only edit smos files   default: False                                                                                                                                                                                    

Configuration values

  Whether to reset all keybindings. Set this to false to add keys, set this to true to replace keys.
  reset:
    # any of
    [ null
    , null
    , <boolean>
    ]
  Keybindings for the file context
  file:
    # any of
    [ null
    , null
    , # FileKeyConfigs
      empty: # optional
        # Keybindings for when the file is empty
        # or null
        def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      entry: # optional
        # Keybindings for when an entry is selected
        # or null
        ref: KeyConfigs
      header: # optional
        # Keybindings for when an header is selected
        # or null
        ref: KeyConfigs
      contents: # optional
        # Keybindings for when an contents is selected
        # or null
        ref: KeyConfigs
      timestamps: # optional
        # Keybindings for when a timestamps are selected
        # or null
        ref: KeyConfigs
      properties: # optional
        # Keybindings for when a properties are selected
        # or null
        ref: KeyConfigs
      state-history: # optional
        # Keybindings for when a state history is selected
        # or null
        ref: KeyConfigs
      tags: # optional
        # Keybindings for when a tags are selected
        # or null
        ref: KeyConfigs
      logbook: # optional
        # Keybindings for when a logbook is selected
        # or null
        ref: KeyConfigs
      any: # optional
        # Keybindings that match in any file subcontext
        # or null
        ref: KeyConfigs
    ]
  Keybindings for the file browser context
  browser:
    # any of
    [ null
    , null
    , # BrowserKeyConfigs
      existent: # optional
        # Keybindings for when an existing file or directory is selected
        # or null
        def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      in-progress: # optional
        # Keybindings for when an in-progress file or directory is selected
        # or null
        ref: KeyConfigs
      empty: # optional
        # Keybindings for when the directory being browsed is empty
        # or null
        ref: KeyConfigs
      filter: # optional
        # Keybindings for when file browser's filter bar is selected
        # or null
        ref: KeyConfigs
      any: # optional
        # Keybindings for any of the other file browser situations
        # or null
        ref: KeyConfigs
    ]
  Keybindings for the reports context
  reports:
    # any of
    [ null
    , null
    , # ReportsKeyConfigs
      next-action: # optional
        # Keybindings for the interactive next action report
        # or null
        # NextActionReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the next-action report
          # or null
          def: KeyConfigs
          - def: KeyConfig
            # KeyConfig
            key: # required
              # The key to match
              <string>
            action: # required
              # The name of the action to perform when the key is matched
              <string>
        search: # optional
          # Keybindings for the search in the next-action report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the next-action report
          # or null
          ref: KeyConfigs
      waiting: # optional
        # Keybindings for the interactive waiting report
        # or null
        # WaitingReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the waiting report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the waiting report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the waiting report
          # or null
          ref: KeyConfigs
      ongoing: # optional
        # Keybindings for the interactive ongoing report
        # or null
        # OngoingReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the ongoing report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the ongoing report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the ongoing report
          # or null
          ref: KeyConfigs
      timestamps: # optional
        # Keybindings for the interactive timestamps report
        # or null
        # TimestampsReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the timestamps report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the timestamps report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the timestamps report
          # or null
          ref: KeyConfigs
      stuck: # optional
        # Keybindings for the interactive stuck projects report
        # or null
        # StuckReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the stuck report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the stuck report
          # or null
          ref: KeyConfigs
      work: # optional
        # Keybindings for the interactive work report
        # or null
        # WorkReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the work report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the work report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the work report
          # or null
          ref: KeyConfigs
      any: # optional
        # Keybindings for at any point in any report
        # or null
        ref: KeyConfigs
    ]
  Keybindings for the help context
  help:
    # any of
    [ null
    , null
    , # HelpKeyConfigs
      help: # optional
        # Keybindings for when in the help screen
        # or null
        def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      search: # optional
        # Keybindings for when the search bar is selected within the help screen
        # or null
        ref: KeyConfigs
      any: # optional
        # Keybindings for at any time in the help screen
        # or null
        ref: KeyConfigs
    ]
  Keybindings for any context
  any:
    # any of
    [ null
    , null
    , def: KeyConfigs
      - def: KeyConfig
        # KeyConfig
        key: # required
          # The key to match
          <string>
        action: # required
          # The name of the action to perform when the key is matched
          <string>
    ]
  The workflow directory
  workflow-dir:
    # or null
    <string>
  The archive directory
  archive-dir:
    # or null
    <string>
  The projects directory
  projects-dir:
    # or null
    <string>
  The archived projects directory
  archived-projects-dir:
    # or null
    <string>
  waiting report threshold to consider waiting entries 'overdue'
  default: Days 7
  waiting.threshold:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]
  stuck report threshold to consider stuck projects 'overdue'
  default: Weeks 3
  stuck.threshold:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]
  The base work filter
  default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  work.base-filter:
    # or null
    def: EntryFilter
    # A filter is a string of one of the following forms:
    # 
    # tag:<tag>
    # state:<state>
    # file:<file>
    # level:<level>
    # header:<header>
    # property:<property-name>
    # property:<property-name>:<property-value>
    # property:<property-name>:time:<comparison>:<time>
    # parent:<filter>
    # ancestor:<filter>
    # child:<filter>
    # legacy:<filter>
    # not:<filter>
    # (<filter> and <filter>)
    # (<filter> or <filter>)
    <string>
  Checks for the work report
  default: fromList []
  work.checks:
    # or null
    - def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  Contexts for the work report
  default: fromList []
  work.contexts:
    # or null
    <key>: 
      def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  The property to use to filter by time
  work.time-filter:
    # or null
    def: PropertyName
    <string>
  The columns in the report
  default: OntoFile :| [OntoState,OntoHeader]
  work.columns:
    # or null
    - def: Projection
      # A column (projection) is a string of one of the following forms:
      # 
      # file
      # state
      # header
      # tag:<tag-name>
      # property:<property-name>
      # timestamp:<timestamp-name>
      # ancestor:<projection>
      <string>
  The sorter to use to sort the rows
  work.sorter:
    # or null
    def: Sorter
    # A sorter is a string of one of the following forms:
    # 
    # file
    # header
    # state
    # tag:<tag>
    # property:<property-name>
    # property-as-time:<property-name>
    # timestamp:<timestamp-name>
    # reverse:<sorter>
    # (<sorter> then <sorter>)
    <string>
  the earliest time of day to consider free
  free.earliest:
    # or null
    # TimeOfDay
    <string>
  the latest time of day to consider free
  free.latest:
    # or null
    # TimeOfDay
    <string>
  Activate explainer mode to show what is happening
  default: False
  explainer-mode:
    # or null
    <boolean>
  Activate sandbox mode to ensure that smos can only edit smos files
  default: False
  explainer-mode:
    # or null
    <boolean>

Combined settings

Usage: smos [--config-file FILE_PATH] [FILE_OR_DIR] [--workflow-dir DIRECTORY_PATH] [--archive-dir DIRECTORY_PATH] [--projects-dir DIRECTORY_PATH] [--archived-projects-dir DIRECTORY_PATH] [--waiting-threshold TIME] [--stuck-threshold TIME] [[--work-base-filter FILTER]] [--work-time-filter PROPERTY_NAME] [--work-columns COLUMNS] [--work-sorter SORTER] [--free-earliest TIME_OF_DAY] [--free-latest TIME_OF_DAY] [[--explainer-mode]] [[--explainer-mode]]

All settings:
  Show this help text
  switch: -h|--help

  Output version information
  switch: --version

  Path to the configuration file
  option: --config-file FILE_PATH
  env: SMOS_CONFIG_FILE FILE_PATH

  the file to edit
  argument: FILE_OR_DIR

  Whether to reset all keybindings. Set this to false to add keys, set this to true to replace keys.
  config:
    reset: # any of
      [ null
      , null
      , <boolean>
      ]

  Keybindings for the file context
  config:
    file: # any of
      [ null
      , null
      , # FileKeyConfigs
        empty: # optional
          # Keybindings for when the file is empty
          # or null
          def: KeyConfigs
          - def: KeyConfig
            # KeyConfig
            key: # required
              # The key to match
              <string>
            action: # required
              # The name of the action to perform when the key is matched
              <string>
        entry: # optional
          # Keybindings for when an entry is selected
          # or null
          ref: KeyConfigs
        header: # optional
          # Keybindings for when an header is selected
          # or null
          ref: KeyConfigs
        contents: # optional
          # Keybindings for when an contents is selected
          # or null
          ref: KeyConfigs
        timestamps: # optional
          # Keybindings for when a timestamps are selected
          # or null
          ref: KeyConfigs
        properties: # optional
          # Keybindings for when a properties are selected
          # or null
          ref: KeyConfigs
        state-history: # optional
          # Keybindings for when a state history is selected
          # or null
          ref: KeyConfigs
        tags: # optional
          # Keybindings for when a tags are selected
          # or null
          ref: KeyConfigs
        logbook: # optional
          # Keybindings for when a logbook is selected
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings that match in any file subcontext
          # or null
          ref: KeyConfigs
      ]

  Keybindings for the file browser context
  config:
    browser: # any of
      [ null
      , null
      , # BrowserKeyConfigs
        existent: # optional
          # Keybindings for when an existing file or directory is selected
          # or null
          def: KeyConfigs
          - def: KeyConfig
            # KeyConfig
            key: # required
              # The key to match
              <string>
            action: # required
              # The name of the action to perform when the key is matched
              <string>
        in-progress: # optional
          # Keybindings for when an in-progress file or directory is selected
          # or null
          ref: KeyConfigs
        empty: # optional
          # Keybindings for when the directory being browsed is empty
          # or null
          ref: KeyConfigs
        filter: # optional
          # Keybindings for when file browser's filter bar is selected
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for any of the other file browser situations
          # or null
          ref: KeyConfigs
      ]

  Keybindings for the reports context
  config:
    reports: # any of
      [ null
      , null
      , # ReportsKeyConfigs
        next-action: # optional
          # Keybindings for the interactive next action report
          # or null
          # NextActionReportKeyConfigs
          normal: # optional
            # Keybindings for interacting with the next-action report
            # or null
            def: KeyConfigs
            - def: KeyConfig
              # KeyConfig
              key: # required
                # The key to match
                <string>
              action: # required
                # The name of the action to perform when the key is matched
                <string>
          search: # optional
            # Keybindings for the search in the next-action report
            # or null
            ref: KeyConfigs
          any: # optional
            # Keybindings for at any point in the next-action report
            # or null
            ref: KeyConfigs
        waiting: # optional
          # Keybindings for the interactive waiting report
          # or null
          # WaitingReportKeyConfigs
          normal: # optional
            # Keybindings for interacting with the waiting report
            # or null
            ref: KeyConfigs
          search: # optional
            # Keybindings for the search in the waiting report
            # or null
            ref: KeyConfigs
          any: # optional
            # Keybindings for at any point in the waiting report
            # or null
            ref: KeyConfigs
        ongoing: # optional
          # Keybindings for the interactive ongoing report
          # or null
          # OngoingReportKeyConfigs
          normal: # optional
            # Keybindings for interacting with the ongoing report
            # or null
            ref: KeyConfigs
          search: # optional
            # Keybindings for the search in the ongoing report
            # or null
            ref: KeyConfigs
          any: # optional
            # Keybindings for at any point in the ongoing report
            # or null
            ref: KeyConfigs
        timestamps: # optional
          # Keybindings for the interactive timestamps report
          # or null
          # TimestampsReportKeyConfigs
          normal: # optional
            # Keybindings for interacting with the timestamps report
            # or null
            ref: KeyConfigs
          search: # optional
            # Keybindings for the search in the timestamps report
            # or null
            ref: KeyConfigs
          any: # optional
            # Keybindings for at any point in the timestamps report
            # or null
            ref: KeyConfigs
        stuck: # optional
          # Keybindings for the interactive stuck projects report
          # or null
          # StuckReportKeyConfigs
          normal: # optional
            # Keybindings for interacting with the stuck report
            # or null
            ref: KeyConfigs
          any: # optional
            # Keybindings for at any point in the stuck report
            # or null
            ref: KeyConfigs
        work: # optional
          # Keybindings for the interactive work report
          # or null
          # WorkReportKeyConfigs
          normal: # optional
            # Keybindings for interacting with the work report
            # or null
            ref: KeyConfigs
          search: # optional
            # Keybindings for the search in the work report
            # or null
            ref: KeyConfigs
          any: # optional
            # Keybindings for at any point in the work report
            # or null
            ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in any report
          # or null
          ref: KeyConfigs
      ]

  Keybindings for the help context
  config:
    help: # any of
      [ null
      , null
      , # HelpKeyConfigs
        help: # optional
          # Keybindings for when in the help screen
          # or null
          def: KeyConfigs
          - def: KeyConfig
            # KeyConfig
            key: # required
              # The key to match
              <string>
            action: # required
              # The name of the action to perform when the key is matched
              <string>
        search: # optional
          # Keybindings for when the search bar is selected within the help screen
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any time in the help screen
          # or null
          ref: KeyConfigs
      ]

  Keybindings for any context
  config:
    any: # any of
      [ null
      , null
      , def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      ]

  The workflow directory
  option: --workflow-dir DIRECTORY_PATH
  env: SMOS_WORKFLOW_DIR DIRECTORY_PATH
  config:
    workflow-dir: # or null
      <string>

  The archive directory
  option: --archive-dir DIRECTORY_PATH
  env: SMOS_ARCHIVE_DIR DIRECTORY_PATH
  config:
    archive-dir: # or null
      <string>

  The projects directory
  option: --projects-dir DIRECTORY_PATH
  env: SMOS_PROJECTS_DIR DIRECTORY_PATH
  config:
    projects-dir: # or null
      <string>

  The archived projects directory
  option: --archived-projects-dir DIRECTORY_PATH
  env: SMOS_ARCHIVED_PROJECTS_DIR DIRECTORY_PATH
  config:
    archived-projects-dir: # or null
      <string>

  waiting report threshold to consider waiting entries 'overdue'
  option: --waiting-threshold TIME
  env: SMOS_WAITING_THRESHOLD TIME
  config:
    waiting.threshold: # or null
      def: Time
      # any of
      [ # Time string, for example:
        #  2s
        #  2 seconds
        #  3m
        #  3 minutes
        #  4h
        #  4 hours
        #  5d
        #  5 days
        #  6w
        #  6 weeks
        #  7mo
        #  7 months
        #  8y
        #  8 years
        <string>
      , # Interpreted as a number of days
        <integer> # 64 bit unsigned integer
      ]
  default: Days 7

  stuck report threshold to consider stuck projects 'overdue'
  option: --stuck-threshold TIME
  env: SMOS_STUCK_THRESHOLD TIME
  config:
    stuck.threshold: # or null
      def: Time
      # any of
      [ # Time string, for example:
        #  2s
        #  2 seconds
        #  3m
        #  3 minutes
        #  4h
        #  4 hours
        #  5d
        #  5 days
        #  6w
        #  6 weeks
        #  7mo
        #  7 months
        #  8y
        #  8 years
        <string>
      , # Interpreted as a number of days
        <integer> # 64 bit unsigned integer
      ]
  default: Weeks 3

  The base work filter
  option: --work-base-filter FILTER
  env: SMOS_WORK_BASE_FILTER FILTER
  config:
    work.base-filter: # or null
      def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))

  Checks for the work report
  config:
    work.checks: # or null
      - def: EntryFilter
        # A filter is a string of one of the following forms:
        # 
        # tag:<tag>
        # state:<state>
        # file:<file>
        # level:<level>
        # header:<header>
        # property:<property-name>
        # property:<property-name>:<property-value>
        # property:<property-name>:time:<comparison>:<time>
        # parent:<filter>
        # ancestor:<filter>
        # child:<filter>
        # legacy:<filter>
        # not:<filter>
        # (<filter> and <filter>)
        # (<filter> or <filter>)
        <string>
  default: fromList []

  Contexts for the work report
  config:
    work.contexts: # or null
      <key>: 
        def: EntryFilter
        # A filter is a string of one of the following forms:
        # 
        # tag:<tag>
        # state:<state>
        # file:<file>
        # level:<level>
        # header:<header>
        # property:<property-name>
        # property:<property-name>:<property-value>
        # property:<property-name>:time:<comparison>:<time>
        # parent:<filter>
        # ancestor:<filter>
        # child:<filter>
        # legacy:<filter>
        # not:<filter>
        # (<filter> and <filter>)
        # (<filter> or <filter>)
        <string>
  default: fromList []

  The property to use to filter by time
  option: --work-time-filter PROPERTY_NAME
  env: SMOS_WORK_TIME_FILTER PROPERTY_NAME
  config:
    work.time-filter: # or null
      def: PropertyName
      <string>

  The columns in the report
  option: --work-columns COLUMNS
  env: SMOS_WORK_COLUMNS COLUMNS
  config:
    work.columns: # or null
      - def: Projection
        # A column (projection) is a string of one of the following forms:
        # 
        # file
        # state
        # header
        # tag:<tag-name>
        # property:<property-name>
        # timestamp:<timestamp-name>
        # ancestor:<projection>
        <string>
  default: OntoFile :| [OntoState,OntoHeader]

  The sorter to use to sort the rows
  option: --work-sorter SORTER
  env: SMOS_WORK_SORTER SORTER
  config:
    work.sorter: # or null
      def: Sorter
      # A sorter is a string of one of the following forms:
      # 
      # file
      # header
      # state
      # tag:<tag>
      # property:<property-name>
      # property-as-time:<property-name>
      # timestamp:<timestamp-name>
      # reverse:<sorter>
      # (<sorter> then <sorter>)
      <string>

  the earliest time of day to consider free
  option: --free-earliest TIME_OF_DAY
  env: SMOS_FREE_EARLIEST TIME_OF_DAY
  config:
    free.earliest: # or null
      # TimeOfDay
      <string>

  the latest time of day to consider free
  option: --free-latest TIME_OF_DAY
  env: SMOS_FREE_LATEST TIME_OF_DAY
  config:
    free.latest: # or null
      # TimeOfDay
      <string>

  Activate explainer mode to show what is happening
  switch: --explainer-mode
  env: SMOS_EXPLAINER_MODE ANY
  config:
    explainer-mode: # or null
      <boolean>
  default: False

  Activate sandbox mode to ensure that smos can only edit smos files
  switch: --explainer-mode
  env: SMOS_EXPLAINER_MODE ANY
  config:
    explainer-mode: # or null
      <boolean>
  default: False

Options:
  -h|--help               Show this help text                                                                                                                                                                                                                                                  
  --version               Output version information                                                                                                                                                                                                                                           
  --config-file           Path to the configuration file                                                                                                                                                                                                                                       
  FILE_OR_DIR             the file to edit                                                                                                                                                                                                                                                     
  --workflow-dir          The workflow directory                                                                                                                                                                                                                                               
  --archive-dir           The archive directory                                                                                                                                                                                                                                                
  --projects-dir          The projects directory                                                                                                                                                                                                                                               
  --archived-projects-dir The archived projects directory                                                                                                                                                                                                                                      
  --waiting-threshold     waiting report threshold to consider waiting entries 'overdue'     default: Days 7                                                                                                                                                                                   
  --stuck-threshold       stuck report threshold to consider stuck projects 'overdue'        default: Weeks 3                                                                                                                                                                                  
  --work-base-filter      The base work filter                                               default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  --work-time-filter      The property to use to filter by time                                                                                                                                                                                                                                
  --work-columns          The columns in the report                                          default: OntoFile :| [OntoState,OntoHeader]                                                                                                                                                       
  --work-sorter           The sorter to use to sort the rows                                                                                                                                                                                                                                   
  --free-earliest         the earliest time of day to consider free                                                                                                                                                                                                                            
  --free-latest           the latest time of day to consider free                                                                                                                                                                                                                              
  --explainer-mode        Activate explainer mode to show what is happening                  default: False                                                                                                                                                                                    
  --explainer-mode        Activate sandbox mode to ensure that smos can only edit smos files default: False                                                                                                                                                                                    

Environment Variables:
  SMOS_CONFIG_FILE FILE_PATH                  Path to the configuration file                                                                                                                                                                                                                                         
  SMOS_WORKFLOW_DIR DIRECTORY_PATH            The workflow directory                                                                                                                                                                                                                                                 
  SMOS_ARCHIVE_DIR DIRECTORY_PATH             The archive directory                                                                                                                                                                                                                                                  
  SMOS_PROJECTS_DIR DIRECTORY_PATH            The projects directory                                                                                                                                                                                                                                                 
  SMOS_ARCHIVED_PROJECTS_DIR DIRECTORY_PATH   The archived projects directory                                                                                                                                                                                                                                        
  SMOS_WAITING_THRESHOLD TIME                 waiting report threshold to consider waiting entries 'overdue'       default: Days 7                                                                                                                                                                                   
  SMOS_STUCK_THRESHOLD TIME                   stuck report threshold to consider stuck projects 'overdue'          default: Weeks 3                                                                                                                                                                                  
  SMOS_WORK_BASE_FILTER FILTER                The base work filter                                                 default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  SMOS_WORK_TIME_FILTER PROPERTY_NAME         The property to use to filter by time                                                                                                                                                                                                                                  
  SMOS_WORK_COLUMNS COLUMNS                   The columns in the report                                            default: OntoFile :| [OntoState,OntoHeader]                                                                                                                                                       
  SMOS_WORK_SORTER SORTER                     The sorter to use to sort the rows                                                                                                                                                                                                                                     
  SMOS_FREE_EARLIEST TIME_OF_DAY              the earliest time of day to consider free                                                                                                                                                                                                                              
  SMOS_FREE_LATEST TIME_OF_DAY                the latest time of day to consider free                                                                                                                                                                                                                                
  SMOS_EXPLAINER_MODE ANY                     Activate explainer mode to show what is happening                    default: False                                                                                                                                                                                    
  SMOS_EXPLAINER_MODE ANY                     Activate sandbox mode to ensure that smos can only edit smos files   default: False                                                                                                                                                                                    

Configuration Values:
  Whether to reset all keybindings. Set this to false to add keys, set this to true to replace keys.
  reset:
    # any of
    [ null
    , null
    , <boolean>
    ]
  Keybindings for the file context
  file:
    # any of
    [ null
    , null
    , # FileKeyConfigs
      empty: # optional
        # Keybindings for when the file is empty
        # or null
        def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      entry: # optional
        # Keybindings for when an entry is selected
        # or null
        ref: KeyConfigs
      header: # optional
        # Keybindings for when an header is selected
        # or null
        ref: KeyConfigs
      contents: # optional
        # Keybindings for when an contents is selected
        # or null
        ref: KeyConfigs
      timestamps: # optional
        # Keybindings for when a timestamps are selected
        # or null
        ref: KeyConfigs
      properties: # optional
        # Keybindings for when a properties are selected
        # or null
        ref: KeyConfigs
      state-history: # optional
        # Keybindings for when a state history is selected
        # or null
        ref: KeyConfigs
      tags: # optional
        # Keybindings for when a tags are selected
        # or null
        ref: KeyConfigs
      logbook: # optional
        # Keybindings for when a logbook is selected
        # or null
        ref: KeyConfigs
      any: # optional
        # Keybindings that match in any file subcontext
        # or null
        ref: KeyConfigs
    ]
  Keybindings for the file browser context
  browser:
    # any of
    [ null
    , null
    , # BrowserKeyConfigs
      existent: # optional
        # Keybindings for when an existing file or directory is selected
        # or null
        def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      in-progress: # optional
        # Keybindings for when an in-progress file or directory is selected
        # or null
        ref: KeyConfigs
      empty: # optional
        # Keybindings for when the directory being browsed is empty
        # or null
        ref: KeyConfigs
      filter: # optional
        # Keybindings for when file browser's filter bar is selected
        # or null
        ref: KeyConfigs
      any: # optional
        # Keybindings for any of the other file browser situations
        # or null
        ref: KeyConfigs
    ]
  Keybindings for the reports context
  reports:
    # any of
    [ null
    , null
    , # ReportsKeyConfigs
      next-action: # optional
        # Keybindings for the interactive next action report
        # or null
        # NextActionReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the next-action report
          # or null
          def: KeyConfigs
          - def: KeyConfig
            # KeyConfig
            key: # required
              # The key to match
              <string>
            action: # required
              # The name of the action to perform when the key is matched
              <string>
        search: # optional
          # Keybindings for the search in the next-action report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the next-action report
          # or null
          ref: KeyConfigs
      waiting: # optional
        # Keybindings for the interactive waiting report
        # or null
        # WaitingReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the waiting report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the waiting report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the waiting report
          # or null
          ref: KeyConfigs
      ongoing: # optional
        # Keybindings for the interactive ongoing report
        # or null
        # OngoingReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the ongoing report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the ongoing report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the ongoing report
          # or null
          ref: KeyConfigs
      timestamps: # optional
        # Keybindings for the interactive timestamps report
        # or null
        # TimestampsReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the timestamps report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the timestamps report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the timestamps report
          # or null
          ref: KeyConfigs
      stuck: # optional
        # Keybindings for the interactive stuck projects report
        # or null
        # StuckReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the stuck report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the stuck report
          # or null
          ref: KeyConfigs
      work: # optional
        # Keybindings for the interactive work report
        # or null
        # WorkReportKeyConfigs
        normal: # optional
          # Keybindings for interacting with the work report
          # or null
          ref: KeyConfigs
        search: # optional
          # Keybindings for the search in the work report
          # or null
          ref: KeyConfigs
        any: # optional
          # Keybindings for at any point in the work report
          # or null
          ref: KeyConfigs
      any: # optional
        # Keybindings for at any point in any report
        # or null
        ref: KeyConfigs
    ]
  Keybindings for the help context
  help:
    # any of
    [ null
    , null
    , # HelpKeyConfigs
      help: # optional
        # Keybindings for when in the help screen
        # or null
        def: KeyConfigs
        - def: KeyConfig
          # KeyConfig
          key: # required
            # The key to match
            <string>
          action: # required
            # The name of the action to perform when the key is matched
            <string>
      search: # optional
        # Keybindings for when the search bar is selected within the help screen
        # or null
        ref: KeyConfigs
      any: # optional
        # Keybindings for at any time in the help screen
        # or null
        ref: KeyConfigs
    ]
  Keybindings for any context
  any:
    # any of
    [ null
    , null
    , def: KeyConfigs
      - def: KeyConfig
        # KeyConfig
        key: # required
          # The key to match
          <string>
        action: # required
          # The name of the action to perform when the key is matched
          <string>
    ]
  The workflow directory
  workflow-dir:
    # or null
    <string>
  The archive directory
  archive-dir:
    # or null
    <string>
  The projects directory
  projects-dir:
    # or null
    <string>
  The archived projects directory
  archived-projects-dir:
    # or null
    <string>
  waiting report threshold to consider waiting entries 'overdue'
  default: Days 7
  waiting.threshold:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]
  stuck report threshold to consider stuck projects 'overdue'
  default: Weeks 3
  stuck.threshold:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]
  The base work filter
  default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  work.base-filter:
    # or null
    def: EntryFilter
    # A filter is a string of one of the following forms:
    # 
    # tag:<tag>
    # state:<state>
    # file:<file>
    # level:<level>
    # header:<header>
    # property:<property-name>
    # property:<property-name>:<property-value>
    # property:<property-name>:time:<comparison>:<time>
    # parent:<filter>
    # ancestor:<filter>
    # child:<filter>
    # legacy:<filter>
    # not:<filter>
    # (<filter> and <filter>)
    # (<filter> or <filter>)
    <string>
  Checks for the work report
  default: fromList []
  work.checks:
    # or null
    - def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  Contexts for the work report
  default: fromList []
  work.contexts:
    # or null
    <key>: 
      def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  The property to use to filter by time
  work.time-filter:
    # or null
    def: PropertyName
    <string>
  The columns in the report
  default: OntoFile :| [OntoState,OntoHeader]
  work.columns:
    # or null
    - def: Projection
      # A column (projection) is a string of one of the following forms:
      # 
      # file
      # state
      # header
      # tag:<tag-name>
      # property:<property-name>
      # timestamp:<timestamp-name>
      # ancestor:<projection>
      <string>
  The sorter to use to sort the rows
  work.sorter:
    # or null
    def: Sorter
    # A sorter is a string of one of the following forms:
    # 
    # file
    # header
    # state
    # tag:<tag>
    # property:<property-name>
    # property-as-time:<property-name>
    # timestamp:<timestamp-name>
    # reverse:<sorter>
    # (<sorter> then <sorter>)
    <string>
  the earliest time of day to consider free
  free.earliest:
    # or null
    # TimeOfDay
    <string>
  the latest time of day to consider free
  free.latest:
    # or null
    # TimeOfDay
    <string>
  Activate explainer mode to show what is happening
  default: False
  explainer-mode:
    # or null
    <boolean>
  Activate sandbox mode to ensure that smos can only edit smos files
  default: False
  explainer-mode:
    # or null
    <boolean>