12 Commits
Author SHA1 Message Date
selimaj-dev d48b2ed21b Add archived notice to README 2026-07-20 15:42:06 +02:00
selimaj-dev 4e1d26797f Merge pull request #26 from svwezel/master 2026-06-13 15:52:15 +02:00
Sal van Wezel 98568515ea Open links in external browser 2026-06-02 17:26:49 +02:00
selimaj-dev fcd994c9f7 Merge pull request #24 from m1yon/add-nix-flake
Add Nix flake for declarative installation
2026-04-05 02:56:01 +02:00
Michael Lyonandclaude a9f4020487 Add Nix result symlink to .gitignore
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-04-03 11:15:25 -06:00
Michael Lyonandclaude 8b0b1e25b3 Use nix-hash for SRI conversion and add install-nix-action
Replace the fragile Python one-liner with nix-hash --sri for
computing flake hashes in CI. Add cachix/install-nix-action@v31
to ensure Nix is available on the runner. Add grep verification
to fail loudly if sed replacements don't take effect.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-04-03 11:15:21 -06:00
Michael Lyonandclaude a1455d88d8 Add Nix flake for declarative installation
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-04-03 10:56:39 -06:00
selimaj-dev 3e9d9c0aa5 Merge pull request #21 from rursache/add-aur-pkgbuild
Add PKGBUILD for AUR packaging (Arch Linux)
2026-04-02 15:19:45 +02:00
selimaj-dev 8a68105f01 Merge pull request #22 from rursache/update-app-icon
Update app icon to latest Linear branding
2026-04-02 15:19:26 +02:00
Radu Ursache fedc4a80c4 Update app icon to latest Linear branding
Replace the app and window icons with the current icon from
Linear's official CDN for a more polished look.
2026-03-31 21:12:39 +03:00
Radu Ursache 99a9857a5e Add PKGBUILD for AUR packaging (Arch Linux)
Adds a binary PKGBUILD (linear-linux-bin) that extracts the
pre-built AppImage and installs the app with a launcher, desktop
entry, and icons. Supports both x86_64 and aarch64.

Closes #20
2026-03-31 20:52:44 +03:00
selimaj-dev 7c034efeea Fix architecture naming for x86_64 2026-03-23 12:57:47 +01:00
10 changed files with 214 additions and 2 deletions
+29
View File
@@ -63,3 +63,32 @@ jobs:
dist/*.AppImage
dist/*.deb
dist/*.rpm
- name: Install Nix
uses: cachix/install-nix-action@v31
- name: Update flake.nix hashes
env:
VERSION: ${{ steps.bump.outputs.version }}
run: |
X86_SRI=$(nix-hash --type sha256 --flat --sri dist/linear-linux-${VERSION}-x86_64.AppImage)
ARM_SRI=$(nix-hash --type sha256 --flat --sri dist/linear-linux-${VERSION}-arm64.AppImage)
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
grep -q "${X86_SRI}" flake.nix || { echo "::error::Failed to update x86_64 hash"; exit 1; }
grep -q "${ARM_SRI}" flake.nix || { echo "::error::Failed to update aarch64 hash"; exit 1; }
- 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
+3
View File
@@ -128,3 +128,6 @@ dist
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# Nix build output
result
+72
View File
@@ -0,0 +1,72 @@
# Maintainer: Selimaj Dev <https://github.com/selimaj-dev>
# Contributor: Radu Ursache <https://github.com/rursache>
pkgname=linear-linux-bin
pkgver=0.2.5
pkgrel=1
pkgdesc="Unofficial Electron-based Linux desktop client for Linear (linear.app)"
arch=('x86_64' 'aarch64')
url="https://github.com/selimaj-dev/linear-linux"
license=('Apache-2.0')
depends=('gtk3' 'nss' 'alsa-lib')
provides=('linear-linux')
conflicts=('linear-linux')
options=('!strip' '!debug')
_appimage_x86_64="linear-linux-${pkgver}-x86_64.AppImage"
_appimage_aarch64="linear-linux-${pkgver}-arm64.AppImage"
source_x86_64=("${_appimage_x86_64}::${url}/releases/download/v${pkgver}/${_appimage_x86_64}")
source_aarch64=("${_appimage_aarch64}::${url}/releases/download/v${pkgver}/${_appimage_aarch64}")
sha256sums_x86_64=('34199f5f2ae6b4171c38b2f3062c1b902c80f081b1b58f804088005717eb6a79')
sha256sums_aarch64=('9cd0e8edcab4e5ab34aa811b775524386facf0fcc56719e8bdca8bb20d754655')
prepare() {
if [[ "${CARCH}" == "x86_64" ]]; then
_appimage="${_appimage_x86_64}"
else
_appimage="${_appimage_aarch64}"
fi
chmod +x "${_appimage}"
"./${_appimage}" --appimage-extract >/dev/null 2>&1
}
package() {
cd "${srcdir}/squashfs-root"
# Install the full app to /opt
install -d "${pkgdir}/opt/linear-linux"
cp -a . "${pkgdir}/opt/linear-linux/"
# Fix permissions
find "${pkgdir}/opt/linear-linux" -type d -exec chmod 755 {} +
find "${pkgdir}/opt/linear-linux" -type f -exec chmod 644 {} +
chmod 755 "${pkgdir}/opt/linear-linux/linear-linux"
chmod 755 "${pkgdir}/opt/linear-linux/chrome-sandbox"
chmod 4755 "${pkgdir}/opt/linear-linux/chrome-sandbox"
# Install icons
install -Dm644 usr/share/icons/hicolor/1024x1024/apps/linear-linux.png \
"${pkgdir}/usr/share/icons/hicolor/1024x1024/apps/linear-linux.png"
install -Dm644 resources/assets/linear-icon.svg \
"${pkgdir}/usr/share/icons/hicolor/scalable/apps/linear-linux.svg"
# Install .desktop file
install -Dm644 /dev/stdin "${pkgdir}/usr/share/applications/linear-linux.desktop" <<EOF
[Desktop Entry]
Type=Application
Name=Linear
Comment=Linux support for linear.app
Exec=linear-linux %U
Icon=linear-linux
Terminal=false
Categories=Office;ProjectManagement;
StartupWMClass=Linear
EOF
# Install launcher symlink
install -d "${pkgdir}/usr/bin"
ln -s /opt/linear-linux/linear-linux "${pkgdir}/usr/bin/linear-linux"
}
+2
View File
@@ -1,3 +1,5 @@
## ⚠️ ARCHIVED: PLEASE USE OTHER FORKS
<p align="center">
<img alt="GH-rel ver" src="icon.png" width="100px">
<h1 align="center">Linear for linux</h1>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

After

Width:  |  Height:  |  Size: 637 KiB

Generated
+27
View File
@@ -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
}
+71
View File
@@ -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;
}
);
};
}
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 KiB

After

Width:  |  Height:  |  Size: 1.9 MiB

+9 -1
View File
@@ -1,4 +1,4 @@
const { app, BrowserWindow, session, globalShortcut } = require('electron');
const { app, BrowserWindow, session, globalShortcut, shell } = require('electron');
const fs = require('fs');
const path = require('path');
@@ -68,6 +68,14 @@ const createWindow = () => {
win.setMenu(null);
win.loadURL('https://linear.app/login');
const authPatterns = ['/oauth', '/auth', '/login', '/signin', '/sso', '/saml', '/callback'];
win.webContents.setWindowOpenHandler(({ url }) => {
const isAuth = authPatterns.some(p => url.includes(p));
if (isAuth) return { action: 'allow' };
shell.openExternal(url);
return { action: 'deny' };
});
win.on('close', () => {
saveWindowState(win.getBounds());
});
+1 -1
View File
@@ -6,7 +6,7 @@ ARCH=$(uname -m)
# Normalize to electron-builder naming
case "$ARCH" in
x86_64) ARCH="x64" ;;
x86_64) ARCH="x86_64" ;;
aarch64 | arm64) ARCH="arm64" ;;
*) echo "Unsupported architecture: $ARCH"; exit 1 ;;
esac