Compare commits

..
7 changed files with 142 additions and 169 deletions

View file

@ -4,6 +4,7 @@ on:
push:
branches:
- main
pull_request:
jobs:
check:

View file

@ -1,81 +0,0 @@
name: Pull Request
on:
pull_request:
jobs:
check:
runs-on: x86_64
steps:
- uses: actions/checkout@v4
- name: Check flake
run: |
source /etc/bashrc
nix flake check
list-packages:
runs-on: x86_64
outputs:
packages: ${{ steps.set-matrix.outputs.packages }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: set-matrix
run: |
source /etc/bashrc
ALL_PACKAGES=$(nix flake show --json | nix run nixpkgs#jq -- -r '.packages."x86_64-linux" | keys[]')
if [ "${{ github.event_name }}" == "pull_request" ]; then
echo "Detecting changed packages for PR..."
BASE_REF="${{ github.base_ref }}"
# Ensure the base branch is available for diffing
git fetch origin "$BASE_REF" --depth=1
CHANGED_FILES=$(git diff --name-only "origin/$BASE_REF"...HEAD)
if echo "$CHANGED_FILES" | grep -qE 'flake.nix|flake.lock'; then
echo "Flake files changed, building all packages."
SELECTED_PACKAGES=$(echo "$ALL_PACKAGES" | nix run nixpkgs#jq -- -R . | nix run nixpkgs#jq -- -s -c .)
else
# Extract package names from pkgs/<name>/
CHANGED_PKGS=$(echo "$CHANGED_FILES" | grep '^pkgs/' | cut -d'/' -f2 | sort -u || true)
FINAL_PKGS=()
for pkg in $CHANGED_PKGS; do
if echo "$ALL_PACKAGES" | grep -q "^$pkg$"; then
FINAL_PKGS+=("$pkg")
fi
done
if [ ${#FINAL_PKGS[@]} -eq 0 ]; then
SELECTED_PACKAGES="[]"
else
SELECTED_PACKAGES=$(printf '%s\n' "${FINAL_PKGS[@]}" | nix run nixpkgs#jq -- -R . | nix run nixpkgs#jq -- -s -c .)
fi
fi
else
echo "Push event, listing all packages."
SELECTED_PACKAGES=$(echo "$ALL_PACKAGES" | nix run nixpkgs#jq -- -R . | nix run nixpkgs#jq -- -s -c .)
fi
echo "packages=$SELECTED_PACKAGES" >> $GITHUB_OUTPUT
build:
needs: [check, list-packages]
runs-on: x86_64
if: ${{ fromJson(needs.list-packages.outputs.packages)[0] != null }}
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.list-packages.outputs.packages) }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build package
run: |
source /etc/bashrc
nix build .#${{ matrix.package }}

View file

@ -0,0 +1,93 @@
name: Update VSCode Insiders
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
update:
runs-on: x86_64
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check for new vscode-insiders release
id: check
run: |
source /etc/bashrc
CURRENT_VERSION=$(grep 'version = ' pkgs/vscode-insiders/default.nix | head -1 | grep -oP '"[^"]+"' | tr -d '"')
echo "Current version: $CURRENT_VERSION"
LATEST_VERSION=$(curl -fsSL https://update.code.visualstudio.com/api/releases/insider | nix run nixpkgs#jq -- -r '.[0]')
echo "Latest version: $LATEST_VERSION"
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "Already up to date."
echo "updated=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "New version found: $LATEST_VERSION"
echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
echo "updated=true" >> $GITHUB_OUTPUT
- name: Update version and sha256
if: steps.check.outputs.updated == 'true'
id: update
run: |
source /etc/bashrc
LATEST="${{ steps.check.outputs.latest_version }}"
URL="https://code.visualstudio.com/sha/download?build=insider&os=linux-x64"
echo "Fetching new sha256 for VSCode Insiders..."
NEW_SHA256=$(nix-prefetch-url --type sha256 "$URL" 2>/dev/null | tail -1)
NEW_SHA256_SRI=$(nix hash convert --hash-algo sha256 --to sri "$NEW_SHA256")
echo "New sha256 (SRI): $NEW_SHA256_SRI"
sed -i "s|version = \".*\";|version = \"${LATEST}\";|" pkgs/vscode-insiders/default.nix
sed -i "s|sha256 = \"sha256-.*\";|sha256 = \"${NEW_SHA256_SRI}\";|" pkgs/vscode-insiders/default.nix
echo "new_sha256=$NEW_SHA256_SRI" >> $GITHUB_OUTPUT
- name: Verify build
if: steps.check.outputs.updated == 'true'
run: |
source /etc/bashrc
NIXPKGS_ALLOW_UNFREE=1 nix build .#vscode-insiders
- name: Create Pull Request
if: steps.check.outputs.updated == 'true'
env:
API_FORGEJO_TOKEN: ${{ secrets.API_FORGEJO_TOKEN }}
run: |
source /etc/bashrc
LATEST="${{ steps.check.outputs.latest_version }}"
BRANCH="update/vscode-insiders-${LATEST}"
git config user.name "mizuki"
git config user.email "akiyama@mizuki.guru"
git checkout -b "$BRANCH"
git add pkgs/vscode-insiders/default.nix
git commit -m "pkgs/vscode-insiders: update to ${LATEST}"
REPO_URL=$(git remote get-url origin | sed 's|https://||')
git push "https://oauth2:${API_FORGEJO_TOKEN}@${REPO_URL}" "$BRANCH"
FORGEJO_HOST=$(echo "$REPO_URL" | cut -d'/' -f1)
REPO_PATH=$(echo "$REPO_URL" | cut -d'/' -f2-)
curl -fsSL -X POST \
-H "Authorization: token ${API_FORGEJO_TOKEN}" \
-H "Content-Type: application/json" \
"https://${FORGEJO_HOST}/api/v1/repos/${REPO_PATH}/pulls" \
-d "{
\"title\": \"pkgs/vscode-insiders: update to ${LATEST}\",
\"head\": \"${BRANCH}\",
\"base\": \"main\",
\"body\": \"Automated update of VSCode Insiders to version \`${LATEST}\`.\n\nNew SRI Hash: \`${{ steps.update.outputs.new_sha256 }}\`\"
}"

View file

@ -3,8 +3,8 @@ imnyang's custom nixpkgs overlay.
## Included Packages
- `helium`: Helium AppImage wrapper
- `figma-linux`: Figma Desktop for Linux
- `helium-sync`: Helium Sync utility
- `vscode-insiders`: VSCode Insiders
- `waterfox-bin`: Waterfox Browser
- `xcursor-mizuki`: Custom cursor
- `pjsk-cursor`: Custom cursor

View file

@ -7,45 +7,33 @@
outputs = { self, nixpkgs }:
let
supportedSystems = [
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
system = "x86_64-linux";
# Overlay 정의
overlay = final: prev: {
waterfox-bin = final.callPackage ./pkgs/waterfox-bin/default.nix { };
xcursor-mizuki = final.callPackage ./pkgs/xcursor-mizuki/default.nix { };
pjsk-cursor = final.callPackage ./pkgs/pjsk-cursor/default.nix { };
helium = final.callPackage ./pkgs/helium/default.nix { };
figma-linux = final.callPackage ./pkgs/figma-linux/default.nix { };
vscode-insiders = final.callPackage ./pkgs/vscode-insiders/default.nix { };
};
forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f (
import nixpkgs {
inherit system;
overlays = [ overlay ];
config.allowUnfree = true;
}
));
pkgs = import nixpkgs {
inherit system;
overlays = [ overlay ];
config.allowUnfree = true;
};
in {
overlays.default = overlay;
packages = forAllSystems (pkgs:
let
allPkgs = {
inherit (pkgs)
waterfox-bin
xcursor-mizuki
pjsk-cursor
helium
figma-linux;
};
in
nixpkgs.lib.filterAttrs (name: pkg:
nixpkgs.lib.elem pkgs.stdenv.hostPlatform.system (pkg.meta.platforms or [ "x86_64-linux" ])
) allPkgs
);
packages.${system} = {
inherit (pkgs)
waterfox-bin
xcursor-mizuki
pjsk-cursor
helium
vscode-insiders;
};
nixConfig = {
extra-substituters = [

View file

@ -1,57 +0,0 @@
{
appimageTools,
fetchurl,
lib,
}:
let
pname = "figma-linux";
version = "126.5.6";
src = fetchurl {
url = "https://github.com/IliyaBrook/figma-linux/releases/download/${version}/figma-desktop-${version}-amd64.AppImage";
hash = "sha256-SLn4y+NVCcBDZrGqIpmpIEQavY7xngt5JMI8yG1g6/0=";
};
appimageContents = appimageTools.extract {
inherit pname version src;
# The upstream AppImage registers an AppImage-specific desktop entry at
# runtime. That bypasses this package's FHS wrapper when a figma:// URL is
# opened, so Electron cannot find libraries such as libnspr4.so.
postExtract = ''
substituteInPlace $out/AppRun \
--replace-fail 'integrate_desktop 2>/dev/null || true' \
'true # Desktop integration is provided by the Nix package'
'';
};
in
appimageTools.wrapAppImage {
inherit pname version;
src = appimageContents;
extraInstallCommands = ''
install -Dm444 ${appimageContents}/usr/share/applications/io.github.nickvdp.figma-desktop-linux.desktop \
-t $out/share/applications
substituteInPlace $out/share/applications/io.github.nickvdp.figma-desktop-linux.desktop \
--replace-fail 'Exec=AppRun' 'Exec=${pname}'
install -Dm444 ${appimageContents}/io.github.nickvdp.figma-desktop-linux.png \
$out/share/icons/hicolor/256x256/apps/io.github.nickvdp.figma-desktop-linux.png
'';
extraPkgs = pkgs: with pkgs; [
libappindicator-gtk3
libnotify
libsecret
];
meta = {
description = "Figma Desktop for Linux";
homepage = "https://github.com/IliyaBrook/figma-linux";
license = lib.licenses.unfree;
mainProgram = "figma-linux";
platforms = [ "x86_64-linux" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
}

View file

@ -0,0 +1,29 @@
{ pkgs }:
let
src = fetchTarball {
url = "https://code.visualstudio.com/sha/download?build=insider&os=linux-x64";
sha256 = "04brczgkvpkqrg018wss9z5hk56n4d58r1bd7zq83wsycma9mq2b";
};
in
(pkgs.vscode.override {
isInsiders = true;
}).overrideAttrs (oldAttrs: {
pname = "vscode-insiders";
version = "1.122.0-insider";
isInsiders = true;
inherit src;
buildInputs = (oldAttrs.buildInputs or []) ++ [ pkgs.krb5 pkgs.libsoup_3 pkgs.webkitgtk_4_1 ];
prePatch = ''
${oldAttrs.prePatch or ""}
mkdir -p resources/app/node_modules/@vscode/ripgrep/bin
touch resources/app/node_modules/@vscode/ripgrep/bin/rg
'';
meta = (oldAttrs.meta or {}) // {
mainProgram = "code-insiders";
};
})