Deprecated: realpath(): Passing null to parameter #1 ($path) of type string is deprecated in /homepages/27/d389089715/htdocs/tmfletcher.com/vendor/twig/twig/src/Loader/FilesystemLoader.php on line 40

Deprecated: Return type of Twig\Node\Node::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/27/d389089715/htdocs/tmfletcher.com/vendor/twig/twig/src/Node/Node.php on line 210

Deprecated: Return type of Twig\Node\Node::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/27/d389089715/htdocs/tmfletcher.com/vendor/twig/twig/src/Node/Node.php on line 215
Nexus - TMFletcher

Nexus - focus on what matters

Introduction

lol, ok brain

The human brain is the most creative and powerful computer yet known to us, but it comes with some hilarious hard limits.

Most of us can only keep 7 distinct pieces of information in working memory at a time, and we don't get to choose what gets dropped.

We're very easy to distract, it's hardwired into us. Our brains even generate their own sources of distraction.

Our concentration and motivation is finite and is easily spent - we end up running on fumes.

Drag and flow

Creative work happens in bursts of energy, but can be all too easily extinguished by anything that interrupts our flow or drains our energy. Any inconvenient detour that we're forced to take puts a drag on our focus.

For example, you're in the zone and find that you need something, but it takes you a couple minutes of searching and clicking to find your way there. Maybe you're lucky and it only cost you a little cognative energy and context, or maybe you lost it altogether and you're now reaching to get it back.

Easy reach

In the physical world, we solve this problem by designing workspaces where everything you need is within easy reach and where you expect it to be.

One can imagine a carpenter in his workshop, bent over a work-in-progress when he needs a particular tool. Consider the difference between:

  1. The tools are well organised and within easy reach. He can grab the tool he needs with his free hand, because it is hanging nearby where he expects it to be. Flow, ease, no drag.
  2. He has to empty both hands, stand up and spend a couple minutes searching for the tool before returning to the work-in-progress to continue.

Having our tools and resources within easy reach helps us to avoid drag.

How Nexus helps

Nexus puts what you need within easy reach.

Build a library of useful links and tools, then access them at your fingertips where-ever you are.

Download

Click here to download version 0.4.0.

Nexus runs on MacOS. You will need to go to System Preferences -> Security & Privacy to enable it to open.

Useful Collections

Here're some useful collections to get you started:

Using Nexus

via Menu

When Nexus is configured and running, you will see a new icon in the status bar menu on your Mac. It will look like this:

alt text

If you tap on this a menu will be revealed, which allows you to explore your collection hierarchically.

alt text

via Search

Alternatively, you can hit the Alt + Spacebar to reveal the search overlay:

alt text

As you type, an intelligent search algorithm will be used to provide appropriate results from your collections:

alt text

If only one item is listed, you can simply hit Return to open it. If more than one item is selected, use the arrow keys to select the result you want and Return to open it.

Opening URLs Directly

As well as searching and opening collection items, you can also type or paste a URL and open it directly from the same place.

Pomodoro Timer

Try using the search with the prefix pomo including the space, and you will see options to start, pause and stop a Pomodoro timer. You can see it's status in your Mac's status bar, and it will play a system sound at the end of a focus or rest period.

Reminders

You can create a new reminder by searching with the prefix remind and then typing the title of the reminder you'd like to create. You will be prompted for permissions to the reminders lists the first time you do it.

The created reminders will be added to the default reminders list for new items. This can be set from the Reminders app on any device. I recommend you have iCloud Sync turned on for Reminders and that you have an Inbox default list.

Getting started

On launch, Nexus will expect to find a main configuration file at pages/03.nexus/.config/nexus/main.json.

Configuration: The main file

To configure Nexus, you will need to provide a configuration file at pages/03.nexus/.config/nexus/main.json. This file will link to collections.

Here's an example with a single collection:

{
    "collections": [
        {
            "source": "collection.json"
        }
    ]
}

If no path is provided, as in the above example, then it is assumed that the file will be found in the same directory as the main file. In this case, at pages/03.nexus/.config/nexus/collection.json.

It is also possible to provide absolute paths to collection files. The home directory can be referenced with ~ as one would expect.

You can reference as many collections as you like.

You can also reference remote collections by providing a URL. This can be a great way to share collections with your team and maintain them in a central location.

Configuration: Collections

Collection files contain the useful links, scripts and so on, that you need at your fingertips.

The collection file has the following top-level structure:

{
    "title": "My Collection",
    "items": [
        ...
    ]
}

Here's an example with a single link item:

{
    "title": "TMF Personal",
    "items": [
        {
            "title": "Google",
            "actionType": "openLink",
            "link": {
                "url": "https://www.google.com"
            }
        }
    ]
}

Link Items

Link items are exactly what they say on the tin. They open links on the system, which means they can be either:

  • Web addresses, to open in the browser.
  • Deep links, to open an application on the system.

You can optionally specify ordered parameters to be substituted into the url using {index} syntax.

Example: Web Address

Without parameters:

{
    "title": "Google",
    "actionType": "openLink",
    "link": {
        "url": "https://www.google.com"
    }
}

With parameters:

{
    "title": "Google",
    "actionType": "openLink",
    "link": {
        "url": "https://www.google.com/search?q={0}",
        "parameters": [
            {
                "name": "Search query"
            }
        ]
    }
}
Example: Deep Link

Without parameters:

{
    "title": "Zoom",
    "actionType": "openLink",
    "link": {
        "url": "zoommtg://zoom.us/start?confno=123456&pwd=abcdef"
    }
}

With parameters:

{
    "title": "Zoom",
    "actionType": "openLink",
    "link": {
        "url": "zoommtg://zoom.us/start?confno={0}&pwd={1}",
        "parameters": [
            {
                "name": "Meeting number"
            },
            {
                "name": "Password (if needed)"
            }
        ]
    }
}

Child Menu Items

You can provide an item that contains items, like so:

{
    "title": "Child Menu Title :-)",
    "actionType": "submenu",
    "items": [
        ...
    ]
}

You can go as deep as you like.

Scripts

Items can also run scripts. There are two kinds of script item:

  • Inline script
  • Script from file

Scripts can also have ordered parameters, as described above for links.

Example: Inline Script
{
    "title": "Script Example",
    "actionType": "runScript",
    "script": {
        "payload": "#!/bin/zsh\nosascript -e \"display notification \\\"$@\\\"\"",
        "parameters": [
            {
                "name": "Message to display"
            }
        ]
    }
}
Example: Script from file

In the example below, a script file named notify.sh must exist in the same location as the collection.

Without parameters:

{
    "title": "My Script",
    "actionType": "runScript",
    "script": {
        "filename": "my_script.sh"
    }
},

With parameters:

{
    "title": "Notify",
    "actionType": "runScript",
    "script": {
        "filename": "notify.sh",
        "parameters": [
            {
                "name": "Message"
            }
        ]
    }
},