Skip to content

Custom Packages

Custom packages live in packages/ and are auto-discovered by nix-wire, exposed as self.packages.${system}.<name>. They're also re-exposed into pkgs via the overlay in overlays/packages.nix.

Available Packages

Package Platforms Description
copy unix OSC52 clipboard utility (works over SSH + tmux)
aria2tui unix TUI frontend for aria2c
sklauncher linux + darwin Minecraft launcher (SKLauncher)
stremio-enhanced darwin (aarch64) Stremio with premium addons
airsync darwin Android-to-Mac file transfer
hammerspoon darwin macOS automation (Hammerspoon app)
skhd-zig darwin Zig port of skhd hotkey daemon
road-rage all Punky display font (used in hyprlock)
drag darwin Drag-and-drop from the command line
bitbucket-server-mcp unix MCP server for Bitbucket Server PR management
kblight darwin (aarch64) MacBook keyboard backlight control via CoreBrightness
sklauncher-beta linux + darwin SKLauncher 4.0 beta (native Electron, bundled JRE)

Using Packages

# Run directly from the flake
nix run github:semi710/ndots#copy -- "hello"

# Or in your own flake
{
  inputs.ndots.url = "github:semi710/ndots";
  outputs = { self, nixpkgs, ndots, ... }: {
    # Via overlay (recommended - gives pkgs.copy etc.)
    nixpkgs.overlays = [ ndots.overlays.default ];

    # Or directly
    environment.systemPackages = [
      ndots.packages.x86_64-linux.copy
    ];
  };
}

copy

packages/copy.nix

A minimal shell script that copies stdin to the system clipboard via OSC52 escape sequences. Works over SSH and inside tmux.

How it works:

  1. Reads text from stdin
  2. Base64-encodes it
  3. If inside tmux: wraps in the tmux; passthrough sequence
  4. Otherwise: sends the raw OSC52 sequence
  5. The terminal emulator writes to the local clipboard (not the remote machine's)
echo "hello" | copy       # copies "hello"
printf '%s' "$BUFFER" | copy  # from zsh

Why this exists

Standard clipboard tools (xclip, pbcopy) don't work over SSH. OSC52 is a terminal protocol that tells the local terminal to copy to the local clipboard, even when you're on a remote machine. This is used throughout the shell config (zsh visual yank, tmux fzf-url, lazygit).


aria2tui

packages/aria2tui.nix

A Python TUI frontend for the aria2c download manager. Built from grimandgreedy/aria2tui.

  • Includes a vendored listpick dependency
  • Bundles the default config to $out/share/aria2tui/
nix run github:semi710/ndots#aria2tui

sklauncher

packages/sklauncher.nix

SKLauncher - a Minecraft launcher. Builds for both Linux and Darwin with platform-specific packaging.

Linux:

  • Wrapped with steam-run (for the Minecraft runtime)
  • Desktop entry + icon installed
  • JDK 21 bundled

Darwin:

  • .app bundle with Info.plist
  • Icon converted PNG → ICNS via ImageMagick
  • JDK 21 launcher script
nix run github:semi710/ndots#sklauncher

Unfree license

SKLauncher is unfree. The package sets meta.license = lib.licenses.unfree.


stremio-enhanced

packages/stremio-enhanced.nix

Stremio Enhanced - Stremio with premium addons. macOS arm64 only (fetches a pre-built .zip).

nix run github:semi710/ndots#stremio-enhanced
# Installs to $out/Applications/

airsync

packages/airsync.nix

AirSync - Android-to-Mac file transfer (KDE Connect alternative). macOS only, fetches a .dmg.

nix run github:semi710/ndots#airsync
# Installs to $out/Applications/

hammerspoon

packages/hammerspoon.nix

Hammerspoon - macOS desktop automation with Lua. Fetches the official release zip.

This packages just the .app bundle. The actual init.lua config is in modules/home/darwin/hammerspoon.nix.

nix run github:semi710/ndots#hammerspoon

skhd-zig

packages/skhd-zig.nix

A Zig port of skhd (simple hotkey daemon for macOS). Fully .skhdrc compatible. Fetches pre-built binaries.

Used by the yabai module instead of upstream skhd.

nix run github:semi710/ndots#skhd-zig

road-rage

packages/road-rage/default.nix

The Road Rage punky display font. Installs the .ttf to $out/share/fonts/.

Used by the hyprlock screen lock for the large clock display.

{ pkgs, ... }: {
  home.packages = [ pkgs.road-rage ];
  # Font is available system-wide via fontconfig
}

drag

flake input: github:semi710/dragterm

dragterm, drag-and-drop from the command line. Run drag <files> and a file icon follows your cursor; click-hold to drop. Hold Shift to fade the icon and let clicks pass through to apps behind it. Darwin only. Fork of Wevah/dragterm.

Unlike the packages/*.nix packages above, this comes from an external flake input, re-exposed into pkgs via the overlay (drag = inputs.dragterm.packages.${system}.drag). Added to the darwin home package list in modules/home/packages.nix.

{ pkgs, ... }: {
  home.packages = [ pkgs.drag ];
}

bitbucket-server-mcp

packages/bitbucket-mcp.nix

MCP server for Bitbucket Server/Data Center - exposes pull request management (create, review, comment, merge, decline) as MCP tools, so AI agents can interact with Bitbucket PRs directly.

Built with buildNpmPackage from source. The binary is bitbucket-server-mcp.

nix run github:semi710/ndots#bitbucket-mcp

kblight

packages/kblight.nix

kblight - a tiny CLI that sets the keyboard backlight on Apple Silicon Macs. Single Swift file, no dependencies, no sudo, no entitlements. Talks to the private CoreBrightness.framework via KeyboardBrightnessClient - the same path corebrightnessd uses, so writes propagate to the LED immediately.

kblight 0.5      # 50% brightness
kblight 0.0      # off
kblight 1.0      # full
kblight get      # current value

Wired into skhd special mode: , decreases, . increases (10% steps via kblight-step wrapper).


sklauncher-beta

packages/sklauncher-beta.nix

SKLauncher 4.0 Beta - the next-gen Minecraft launcher. Unlike the stable sklauncher (a JAR wrapped with steam-run + JDK 21), 4.0 ships native Electron builds with a bundled JRE, so no external Java is needed.

Linux:

  • AppImage wrapped with appimage-run
  • Desktop entry + icon installed

Darwin:

  • Native .app bundle (unzipped from release)
  • Both x86_64 and aarch64
nix run github:semi710/ndots#sklauncher-beta

Unfree license

SKLauncher is unfree. The package sets meta.license = lib.licenses.unfree.