Skip to content

Install on NixOS

Upsight ships a Nix flake. This page shows how to add it to a NixOS or home-manager configuration and install the desktop app.

The package is Linux only. It links the WebKitGTK 6.0 webview, which has no buildable Nix counterpart on macOS. On a Darwin system the package is marked broken and will not build.

Add the flake input

Add the repository to the inputs of your system flake and point it at nixpkgs so it does not pull a second copy:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";

    upsight = {
      url = "github:bashfulrobot/upsight";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };
}

Upsight tracks nixos-26.05. Using the same nixpkgs avoids building the app and its dependencies twice.

Install via the overlay

The flake exposes overlays.default, which adds upsight to your package set. Apply the overlay, then reference pkgs.upsight anywhere you list packages.

In a NixOS configuration:

{ inputs, pkgs, ... }:
{
  nixpkgs.overlays = [ inputs.upsight.overlays.default ];

  environment.systemPackages = [ pkgs.upsight ];
}

Install via the package directly

If you do not want the overlay, reference the package output for your system:

{ inputs, pkgs, ... }:
{
  environment.systemPackages = [
    inputs.upsight.packages.${pkgs.system}.upsight
  ];
}

inputs.upsight.packages.${pkgs.system}.default is the same derivation, so either attribute works.

Install with home-manager

The same two options apply in a home-manager module. With the overlay:

{ inputs, pkgs, ... }:
{
  nixpkgs.overlays = [ inputs.upsight.overlays.default ];

  home.packages = [ pkgs.upsight ];
}

Or reference the package directly:

{ inputs, pkgs, ... }:
{
  home.packages = [
    inputs.upsight.packages.${pkgs.system}.upsight
  ];
}

Minimal flake example

A complete flake.nix for a single NixOS host that installs Upsight:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";

    upsight = {
      url = "github:bashfulrobot/upsight";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, upsight, ... }:
    {
      nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        modules = [
          ({ pkgs, ... }: {
            nixpkgs.overlays = [ upsight.overlays.default ];
            environment.systemPackages = [ pkgs.upsight ];

            # ... the rest of your host configuration ...
          })
        ];
      };
    };
}

Build and switch the host with your usual command (for example nixos-rebuild switch --flake .#myhost). After the rebuild, upsight is on PATH and the app appears in your desktop launcher.

What the app expects at runtime

Database location

Upsight stores its data in a single SQLite file. The default path is:

~/.local/share/upsight/upsight.db

Set the UPSIGHT_DB environment variable to point at a different file:

export UPSIGHT_DB="$HOME/sync/upsight/upsight.db"

Upsight is a local, single-user app. To use it on more than one machine, keep the database file in a directory that Syncthing replicates. The app opens the database in WAL mode with a single writer, so only run one instance at a time against a given file. Syncthing also replicates the -wal and -shm sidecar files; let a sync settle before opening the app on another machine.

Credential storage

Integration credentials (Salesforce, Aha, Clari, Todoist, and similar) are stored in the operating system keyring through libsecret. On Linux this is the Secret Service backend, which a keyring daemon such as GNOME Keyring or KWallet provides. Make sure a Secret Service provider is running in your session; otherwise credential reads and writes fail and integrations stay disabled. On macOS the same code path uses the system Keychain.

Salesforce write-back

Editing posture and other fields always saves locally and queues the change. Pushing those changes back to Salesforce is off by default, because it writes to your live org. Turn it on in Settings under Integrations, Salesforce, "Push field edits back to Salesforce", then relaunch the app. With it off, your edits are kept and queued but nothing is sent to Salesforce.

Wayland (Hyprland and other wlroots compositors)

On Linux the app disables WebKit's accelerated DMA-BUF and compositing render paths (WEBKIT_DISABLE_DMABUF_RENDERER and WEBKIT_DISABLE_COMPOSITING_MODE), which otherwise crash the webview when the window is unmapped by a workspace switch. Both are set only when unset, so you can override them if your setup needs different rendering behaviour.