130 lines
3.6 KiB
Nix
130 lines
3.6 KiB
Nix
# Usage:
|
|
# - Shell: `nix develop`
|
|
# - Direnv (https://direnv.net/): `.envrc` content of `use flake`
|
|
# - Build: `nix build`
|
|
# - Run: `nix run`
|
|
|
|
{
|
|
description = "Slack Local Reader";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs =
|
|
{ self
|
|
, nixpkgs
|
|
, flake-utils
|
|
,
|
|
}:
|
|
flake-utils.lib.eachDefaultSystem (
|
|
system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
python = pkgs.python312;
|
|
|
|
# ── Python Dependency Overrides ──────────────────────────────
|
|
#
|
|
# dfindexeddb pins python-snappy==0.6.1 and zstd==1.5.5.1.
|
|
# nixpkgs ships newer versions, so we build the exact pins
|
|
# from PyPI source tarballs.
|
|
|
|
pythonPackages = python.pkgs;
|
|
|
|
python-snappy = pythonPackages.buildPythonPackage rec {
|
|
pname = "python-snappy";
|
|
version = "0.6.1";
|
|
format = "setuptools";
|
|
|
|
src = pkgs.fetchurl {
|
|
url = "https://files.pythonhosted.org/packages/98/7a/44a24bad98335b2c72e4cadcdecf79f50197d1bab9f22f863a274f104b96/python-snappy-0.6.1.tar.gz";
|
|
hash = "sha256-tqEHqwYgasxTWdTFYyvZsi1EhwKnmzFpsMYuD7gIuyo=";
|
|
};
|
|
|
|
buildInputs = [ pkgs.snappy ];
|
|
|
|
# Tests require snappy test fixtures not present in sdist
|
|
doCheck = false;
|
|
};
|
|
|
|
zstd-python = pythonPackages.buildPythonPackage rec {
|
|
pname = "zstd";
|
|
version = "1.5.5.1";
|
|
format = "setuptools";
|
|
|
|
src = pkgs.fetchurl {
|
|
url = "https://files.pythonhosted.org/packages/source/z/zstd/zstd-1.5.5.1.tar.gz";
|
|
hash = "sha256-HvmAq/Dh4HKwKNLXbvlbR2YyZRyWIlzzC2Gcbu9iVnI=";
|
|
};
|
|
|
|
# Bundled C sources — no external zstd library needed
|
|
doCheck = false;
|
|
};
|
|
|
|
dfindexeddb = pythonPackages.buildPythonPackage rec {
|
|
pname = "dfindexeddb";
|
|
version = "20260210";
|
|
format = "setuptools";
|
|
|
|
src = pkgs.fetchurl {
|
|
url = "https://files.pythonhosted.org/packages/source/d/dfindexeddb/dfindexeddb-20260210.tar.gz";
|
|
hash = "sha256-4ahEe4Lpoh0oqGR6kI7J1HEGfvKVEzu3qQ+3ykgFd/Y=";
|
|
};
|
|
|
|
propagatedBuildInputs = [
|
|
python-snappy
|
|
zstd-python
|
|
];
|
|
|
|
doCheck = false;
|
|
};
|
|
|
|
# ── Slack CLI Package ────────────────────────────────────────
|
|
|
|
slack-cli = pythonPackages.buildPythonApplication {
|
|
pname = "slack-cli";
|
|
version = "0.1.0";
|
|
format = "pyproject";
|
|
|
|
src = let
|
|
fs = pkgs.lib.fileset;
|
|
in
|
|
fs.toSource {
|
|
root = ./.;
|
|
fileset = fs.unions [
|
|
./pyproject.toml
|
|
./slack_cli
|
|
];
|
|
};
|
|
|
|
build-system = [ pythonPackages.setuptools ];
|
|
|
|
dependencies = [ dfindexeddb ];
|
|
|
|
doCheck = false;
|
|
|
|
meta = {
|
|
description = "Read Slack messages from local Chromium IndexedDB cache";
|
|
mainProgram = "slack-cli";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
packages.default = slack-cli;
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
python
|
|
uv
|
|
snappy
|
|
];
|
|
|
|
shellHook = ''
|
|
export UV_PYTHON_PREFERENCE=only-system
|
|
'';
|
|
};
|
|
}
|
|
);
|
|
}
|