# syntax=docker/dockerfile:1
FROM nixos/nix:2.30.2

ARG NIXPKGS_REV=e5bdc4a41d4c072fe1e3787eaa0320a384741d44
ARG QSMCP_REV=76b1b008f0352064121af9334065012e31d80fc2

ENV NIX_CONFIG="experimental-features = nix-command flakes" \
    PATH="/nix/var/nix/profiles/default/bin:${PATH}"

RUN nix profile install --profile /nix/var/nix/profiles/default \
      "github:NixOS/nixpkgs/${NIXPKGS_REV}#quickshell" \
      "github:NixOS/nixpkgs/${NIXPKGS_REV}#nodejs_22"

RUN mkdir -p /opt/qsmcp \
    && git init /opt/qsmcp \
    && git -C /opt/qsmcp remote add origin https://github.com/fedsfarm/qsmcp.git \
    && git -C /opt/qsmcp fetch --depth 1 origin "${QSMCP_REV}" \
    && git -C /opt/qsmcp checkout --detach FETCH_HEAD \
    && test "$(git -C /opt/qsmcp rev-parse HEAD)" = "${QSMCP_REV}" \
    && cd /opt/qsmcp \
    && npm ci --omit=dev \
    && rm -rf /opt/qsmcp/.git

# qsmcp's CLI hard-codes a 1568px safety cap. Desktop bar previews need their
# true target width so responsive layout and text collisions are testable.
RUN node -e 'const fs=require("fs"); const p="/opt/qsmcp/src/index.ts"; const s=fs.readFileSync(p,"utf8"); const old="max_dimension: 1568"; if (!s.includes(old)) throw new Error("qsmcp max_dimension source changed"); fs.writeFileSync(p,s.replace(old,"max_dimension: 4096"))'

ENV QSMCP_SHELL_ROOT=/workspace/quickshell \
    QSMCP_QS_BIN=/nix/var/nix/profiles/default/bin/qs \
    QT_QUICK_BACKEND=software

COPY entrypoint.sh /usr/local/bin/quickshell-preview
RUN chmod +x /usr/local/bin/quickshell-preview

RUN mkdir -p /workspace/quickshell
WORKDIR /workspace/quickshell

ENTRYPOINT ["/usr/local/bin/quickshell-preview"]
