Files
homelab/tools/quickshell-preview/Dockerfile
T

39 lines
1.6 KiB
Docker

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