diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c465e48..9a422d6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -63,3 +63,29 @@ jobs: dist/*.AppImage dist/*.deb dist/*.rpm + + - name: Update flake.nix hashes + env: + VERSION: ${{ steps.bump.outputs.version }} + run: | + X86_HASH=$(sha256sum dist/linear-linux-${VERSION}-x86_64.AppImage | awk '{print $1}') + ARM_HASH=$(sha256sum dist/linear-linux-${VERSION}-arm64.AppImage | awk '{print $1}') + + X86_SRI="sha256-$(echo -n "$X86_HASH" | python3 -c "import sys,base64,binascii; print(base64.b64encode(binascii.unhexlify(sys.stdin.read())).decode())")" + ARM_SRI="sha256-$(echo -n "$ARM_HASH" | python3 -c "import sys,base64,binascii; print(base64.b64encode(binascii.unhexlify(sys.stdin.read())).decode())")" + + sed -i "s|version = \".*\";|version = \"${VERSION}\";|" flake.nix + sed -i "s|hash = \"sha256-.*\"; # x86_64|hash = \"${X86_SRI}\"; # x86_64|" flake.nix + sed -i "s|hash = \"sha256-.*\"; # aarch64|hash = \"${ARM_SRI}\"; # aarch64|" flake.nix + + - name: Commit flake.nix update + env: + VERSION: ${{ steps.bump.outputs.version }} + run: | + git add flake.nix + if git diff --cached --quiet; then + echo "No changes to flake.nix" + else + git commit -m "chore: update flake.nix hashes for v${VERSION}" + git push + fi diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..4b75299 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1775036866, + "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..21a977f --- /dev/null +++ b/flake.nix @@ -0,0 +1,71 @@ +{ + description = "Unofficial Linux desktop client for Linear (linear.app)"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + version = "0.2.5"; + + sources = { + x86_64-linux = { + url = "https://github.com/kleo-dev/linear-linux/releases/download/v${version}/linear-linux-${version}-x86_64.AppImage"; + hash = "sha256-NBmfXyrmtBccOLLzBiwbkCyA8IGxtY+AQIgAVxfrank="; # x86_64 + }; + aarch64-linux = { + url = "https://github.com/kleo-dev/linear-linux/releases/download/v${version}/linear-linux-${version}-arm64.AppImage"; + hash = "sha256-nNDo7cq05as0qoEbd1UkOG+s8PzFZxnovcqLsg11RlU="; # aarch64 + }; + }; + + forAllSystems = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ]; + in + { + packages = forAllSystems (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + src = pkgs.fetchurl { + url = sources.${system}.url; + hash = sources.${system}.hash; + }; + in + { + linear-linux = pkgs.appimageTools.wrapType2 { + pname = "linear-linux"; + inherit version src; + + extraInstallCommands = + let + appimageContents = pkgs.appimageTools.extractType2 { + pname = "linear-linux"; + inherit version src; + }; + in + '' + # Install desktop file + install -Dm644 ${appimageContents}/linear-linux.desktop \ + $out/share/applications/linear-linux.desktop + substituteInPlace $out/share/applications/linear-linux.desktop \ + --replace-warn 'Exec=AppRun' 'Exec=linear-linux' + + # Install icons + install -Dm644 ${appimageContents}/usr/share/icons/hicolor/1024x1024/apps/linear-linux.png \ + $out/share/icons/hicolor/1024x1024/apps/linear-linux.png + ''; + + meta = with pkgs.lib; { + description = "Unofficial Linux desktop client for Linear (linear.app)"; + homepage = "https://github.com/kleo-dev/linear-linux"; + license = licenses.isc; + platforms = [ "x86_64-linux" "aarch64-linux" ]; + mainProgram = "linear-linux"; + }; + }; + + default = self.packages.${system}.linear-linux; + } + ); + }; +}