initial commit
This commit is contained in:
129
flake.nix
Normal file
129
flake.nix
Normal file
@@ -0,0 +1,129 @@
|
||||
# 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
|
||||
'';
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user