Ethersync

Ethersync aims to enable real-time collaborative editing of local text files. Similar to Etherpads, it facilitates multiple users to work on content simultaneously, enabling applications such as shared notes or pair programming.

Declared in: projects/Ethersync/default.nix

Try the program in a shell

  1. Install Nix
    Bash
    $ apt install --yes curl git jq nix
    Bash
    $ apt install --yes curl git jq nix
    Bash
    $ pacman --sync --refresh --noconfirm curl git jq nix
  2. Download a configuration file
    # default.nix
    {
      ngipkgs ? import (fetchTarball "https://github.com/ngi-nix/ngipkgs/tarball/main") { },
    }:
    ngipkgs.demo-shell (
      { pkgs, ... }:
    
      {
        programs.ethersync.enable = true;
    
        programs.vscode = {
          enable = true;
          # vscodium because vscode is unfree
          package = pkgs.vscodium;
          extensions = [
            pkgs.vscode-extensions.ethersync.ethersync
          ];
        };
    
        programs.neovim = {
          enable = true;
          configure = {
            packages.ethersync = {
              start = [
                pkgs.vimPlugins.ethersync
              ];
            };
          };
        };
      }
    
    )
    
  3. Enable binary substituters
    Bash
    $ export NIX_CONFIG='substituters = https://cache.nixos.org/ https://ngi.cachix.org/
    trusted-public-keys = cache.nixos.org-1:6nchdd59x431o0gwypbmraurkbj16zpmqfgspcdshjy= ngi.cachix.org-1:n+cal72roc3qqulxihpv+tw5t42whxmmhpragkrsrow='
  4. Build and run the shell
    Bash
    $ nix-build ./default.nix && ./result
    Bash
    $ nix-build ./default.nix && ./result
    Bash
    $ rev=$(nix-instantiate --eval --attr sources.nixpkgs.rev https://github.com/ngi-nix/ngipkgs/archive/master.tar.gz | jq --raw-output)
    $ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz --packages nix --run "nix-build ./default.nix && ./result"
    Bash
    $ nix-build ./default.nix && ./result
  5. Usage Instructions
    1. First, create a directory with a subdirectory named .ethersync and run ethersync share, wait a few seconds it will print the secret key that can be used to connect to this server.

    2. Next, create another directory with a subdirectory named .ethersync, run echo peer="<secret-key>" >.ethersync/config, then ethersync join. The two directories are now connected.

    3. You can now edit files in one directory and the changes will be synchronized in the other. If you use Neovim, the instance in this shell has also been configured with the Ethersync plugin, so you can try using :EthersyncInfo and :EthersyncJumpToCursor.

Options

programs.ethersync
programs.ethersync.enable

Whether to enable Ethersync.

Type:
boolean
Default:
false
Declared in:
projects/Ethersync/programs/ethersync/module.nix
programs.ethersync.package

The ethersync package to use.

Type:
package
Default:
pkgs.ethersync
Declared in:
projects/Ethersync/programs/ethersync/module.nix

Examples

Enable Ethersync
{ pkgs, ... }:

{
  programs.ethersync.enable = true;

  programs.vscode = {
    enable = true;
    # vscodium because vscode is unfree
    package = pkgs.vscodium;
    extensions = [
      pkgs.vscode-extensions.ethersync.ethersync
    ];
  };

  programs.neovim = {
    enable = true;
    configure = {
      packages.ethersync = {
        start = [
          pkgs.vimPlugins.ethersync
        ];
      };
    };
  };
}

Declared in: projects/Ethersync/programs/ethersync/examples/basic.nix

This project is funded by NLnet through these subgrants:

Related links: