diff --git a/.forgejo/workflows/main.yml b/.forgejo/workflows/main.yml index ec45041..86942cb 100644 --- a/.forgejo/workflows/main.yml +++ b/.forgejo/workflows/main.yml @@ -4,6 +4,7 @@ on: push: branches: - main + pull_request: jobs: check: diff --git a/.forgejo/workflows/pull-request.yml b/.forgejo/workflows/pull-request.yml deleted file mode 100644 index ba4afb3..0000000 --- a/.forgejo/workflows/pull-request.yml +++ /dev/null @@ -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// - 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 }} - - diff --git a/.forgejo/workflows/update-vscode-insiders.yml b/.forgejo/workflows/update-vscode-insiders.yml new file mode 100644 index 0000000..33c1486 --- /dev/null +++ b/.forgejo/workflows/update-vscode-insiders.yml @@ -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 }}\`\" + }" \ No newline at end of file diff --git a/README.md b/README.md index 2508c95..4cf4e13 100644 --- a/README.md +++ b/README.md @@ -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 @@ -42,3 +42,33 @@ Add the following to your nix configuration: ``` ## Modules + +### helium-sync + +#### NixOS +```nix +{ + inputs.imnyang.url = "git+https://git.mizuki.guru/imnyang/nix-packages.git"; + outputs = { self, nixpkgs, imnyang }: { + nixosConfigurations.my-host = nixpkgs.lib.nixosSystem { + modules = [ + imnyang.nixosModules.helium-sync + ]; + }; + }; +} +``` + +#### Home Manager +```nix +{ + inputs.imnyang.url = "git+https://git.mizuki.guru/imnyang/nix-packages.git"; + outputs = { self, home-manager, imnyang, ... }: { + homeConfigurations.my-user = home-manager.lib.homeManagerConfiguration { + modules = [ + imnyang.homeManagerModules.helium-sync + ]; + }; + }; +} +``` diff --git a/flake.lock b/flake.lock index f6a9c89..5966c45 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1779508470, - "narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=", + "lastModified": 1779357205, + "narHash": "sha256-cCO8aTqss5x9Ky8GWkpY0Hy5fyTZEbtifSUV8QjSzic=", "owner": "nixos", "repo": "nixpkgs", - "rev": "29916453413845e54a65b8a1cf996842300cd299", + "rev": "f83fc3c307e74bc5fd5adb7eb6b8b13ffd2a36e1", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 33506aa..bb164b2 100644 --- a/flake.nix +++ b/flake.nix @@ -7,45 +7,40 @@ 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 { }; + helium-sync = final.callPackage ./pkgs/helium-sync/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 - ); + nixosModules.helium-sync = import ./modules/helium-sync.nix; + homeManagerModules.helium-sync = import ./modules/helium-sync-hm.nix; + + packages.${system} = { + inherit (pkgs) + waterfox-bin + xcursor-mizuki + pjsk-cursor + helium + helium-sync + vscode-insiders; + + default = pkgs.helium; # 예시로 하나를 기본값으로 지정 + }; nixConfig = { extra-substituters = [ @@ -56,4 +51,4 @@ ]; }; }; -} +} \ No newline at end of file diff --git a/pkgs/figma-linux/default.nix b/pkgs/figma-linux/default.nix deleted file mode 100644 index 08e7b54..0000000 --- a/pkgs/figma-linux/default.nix +++ /dev/null @@ -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 ]; - }; -} diff --git a/pkgs/helium-sync/default.nix b/pkgs/helium-sync/default.nix new file mode 100644 index 0000000..db06a38 --- /dev/null +++ b/pkgs/helium-sync/default.nix @@ -0,0 +1,27 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: +buildGoModule rec { + pname = "helium-sync"; + version = "0.4.0"; + + src = fetchFromGitHub { + owner = "imnyang"; + repo = "helium-sync"; + rev = "v${version}"; + hash = "sha256-ARd2S9c5iFVvSwFTyZjEB2w1l54vvYBXKZTESWpCqvw="; + }; + + vendorHash = "sha256-sWi8QV1uMjfgRMATjXb/qCp6IvBQojtLI3Gr2BHS9Hs="; + + subPackages = [ "cmd/helium-sync" ]; + + meta = { + description = "Synchronize selected Helium browser profile data across devices using Amazon S3"; + homepage = "https://github.com/imnyang/helium-sync"; + license = lib.licenses.mit; + mainProgram = "helium-sync"; + }; +} diff --git a/pkgs/vscode-insiders/default.nix b/pkgs/vscode-insiders/default.nix new file mode 100644 index 0000000..fe37f77 --- /dev/null +++ b/pkgs/vscode-insiders/default.nix @@ -0,0 +1,29 @@ +{ pkgs }: + +let + src = fetchTarball { + url = "https://code.visualstudio.com/sha/download?build=insider&os=linux-x64"; + sha256 = "0y0fcb1fadms3zp191gh74kn7vhp0mm02582km1anvsryc4ks5dq"; + }; +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"; + }; +})