# 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"]