Skip to content

About

A client and library for https://dev-null.sh

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

DevNull.Client

An unofficial desktop client for dev-null.sh, built with F# and Avalonia.

We are not affiliated with or endorsed by /dev/null in any way. This is an independent project exploring their public API, with the goal of providing a simple client for desktop platforms. The service and its API can change at any time; expect breakage.

Installing on Windows

With Scoop:

scoop install https://github.com/AngelMunoz/DevNull.Client/releases/latest/download/devnull-client.json

That URL always serves the newest stable release's manifest. Scoop checks the SHA-256 it carries before installing, and scoop update picks up each new release from the same URL. Pre-release builds never ride the channel; install one by its exact release URL instead.

Installing on Linux

With Flatpak:

flatpak install --user --from https://angelmunoz.github.io/DevNull.Client/me.tunaxor.devnull.unoffclient.flatpakref

That address installs the newest stable release and registers the project's own channel; flatpak update --user picks up every new release from it. The app runs sandboxed: the browser sign-in callback, the tray, voice notes, and your ssh keys all work inside, while alerts stay silent because the sandbox cannot reach the desktop's sound theme.

What it is

  • One window: a sidebar with the unread count, a reading column with the commit log, notifications, saved commits, profiles, and settings; a tray icon; a dark theme that follows the site's tokens.
  • The UI is written in code with NXUI (no XAML). Routing runs on Navs.Avalonia. Page state runs on MVUish.Avalonia: Model-View-Update over observables, with keyed subscriptions for everything that arrives from outside (the clock, the session, the settings store).
  • DevNull.Client.Core carries the protocol layer (the signed JSON API and the plain-text CLI routes); the Avalonia app consumes it and never speaks HTTP itself.

Building and running

  • dotnet build DevNull.Client.slnx — must end with zero errors and zero warnings.
  • dotnet run --project src/DevNull.Client — opens the window against the real dev-null.sh.
  • dotnet run --project tests/DevNull.Client.Core.Tests — protocol suite (Expecto; no network, no disk, no processes).
  • dotnet run --project tests/DevNull.Client.UI.Tests — headless UI suite over the real shell, routes, and pages, every request answered by a fake API.
  • dotnet fantomas . — formats every F# file (dotnet tool restore first).

Close the app before building after a run: a running instance locks the build output.

Linux: first login

The devnull:// callback is launched by the desktop session, and that session does not export DOTNET_ROOT. A framework-dependent Debug build therefore dies at the callback, and the browser looks like it cannot find the app. Sign in once with a self-contained build instead:

./linux-login.sh

The script publishes the app with its own runtime, runs it, and the app registers itself as the devnull:// handler. The session, the device key, and the settings live in ~/.local/share/DevNull and are shared with the Debug build: after this one login, dotnet run starts signed in. Whichever binary started last owns the devnull:// registration, so run the script again whenever you need a new login. Alternatively, export DOTNET_ROOT for the whole session through ~/.config/environment.d/ and log in from any build.

Going deeper

  • AGENTS.md — the architecture map and the working rules for this repository.
  • tests/README.md — the testing philosophy and the headless-session quirks, including every known way a UI test can hang.

About

A client and library for https://dev-null.sh

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages