Archived
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d48b2ed21b | ||
|
|
4e1d26797f | ||
|
|
98568515ea | ||
|
|
fcd994c9f7 | ||
|
|
a9f4020487 | ||
|
|
8b0b1e25b3 | ||
|
|
a1455d88d8 | ||
|
|
3e9d9c0aa5 | ||
|
|
8a68105f01 | ||
|
|
fedc4a80c4 | ||
|
|
99a9857a5e | ||
|
|
7c034efeea | ||
|
|
dd9dca9072 | ||
|
|
e5dcb2815c | ||
|
|
13b4ecf357 | ||
|
|
bb11f190b9 | ||
|
|
a9511ef3d8 | ||
|
|
388d545162 | ||
|
|
2947a49252 | ||
|
|
77599e880f | ||
|
|
1f0d7bc5a1 | ||
|
|
6aba7c178a | ||
|
|
43b7957ae3 | ||
|
|
8ba81269c2 | ||
|
|
76d14296a5 | ||
|
|
ac6c63f2f0 | ||
|
|
c2dfca9082 | ||
|
|
6c51e9226e | ||
|
|
be22960c6f | ||
|
|
ce28c3ddb7 | ||
|
|
ef412e3d12 |
@@ -0,0 +1,94 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
bump:
|
||||
description: "Semver bump (patch, minor, major)"
|
||||
required: false
|
||||
default: "patch"
|
||||
push:
|
||||
branches:
|
||||
- release
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
if: github.actor != 'github-actions[bot]'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: true
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Bump version and tag
|
||||
id: bump
|
||||
env:
|
||||
BUMP: ${{ inputs.bump }}
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
npm version "${BUMP:-patch}" -m "chore: release %s"
|
||||
VERSION=$(node -p "require('./package.json').version")
|
||||
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||
git push
|
||||
git push --tags
|
||||
|
||||
- name: Build artifacts
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
npm run build
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: v${{ steps.bump.outputs.version }}
|
||||
name: Linear v${{ steps.bump.outputs.version }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
files: |
|
||||
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
|
||||
@@ -128,3 +128,6 @@ dist
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
# Nix build output
|
||||
result
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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>
|
||||
@@ -11,9 +13,22 @@ A linux port of <a href="https://linear.app/">linear.app</a>
|
||||
</p>
|
||||
|
||||
# Install
|
||||
Requires `sudo` (for sandbox helper, desktop entry, and icons).
|
||||
|
||||
```bash
|
||||
wget -qO- https://raw.githubusercontent.com/kleo-dev/linear-linux/refs/heads/master/installer.sh | bash
|
||||
git clone [email protected]:selimaj-dev/linear-linux.git
|
||||
cd linear-linux
|
||||
./installer.sh
|
||||
```
|
||||
|
||||
The installer:
|
||||
- Downloads the AppImage, extracts it under `/opt/linear-linux-<version>`, and wires up the `chrome-sandbox` helper correctly.
|
||||
- Installs a wrapper at `/usr/local/bin/linear`, a desktop entry, and the Linear icon into the system icon cache.
|
||||
- Accepts overrides: `VERSION=0.2.5 APPIMAGE_URL=<url> INSTALL_ROOT=/opt ./installer.sh`
|
||||
|
||||
Development:
|
||||
- `npm start` launches Electron with sandbox disabled for local runs (packaged builds use the proper setuid helper).
|
||||
- `npm run build` produces an AppImage that bundles the Linear brand assets for the desktop icon.
|
||||
|
||||
# Having an issue?
|
||||
Describe your issue [here](https://github.com/kleo-dev/linear-linux/issues)
|
||||
Describe your issue [here](https://github.com/selimaj-dev/linear-linux/issues)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 637 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 7.4 KiB |
Generated
+27
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 701 KiB After Width: | Height: | Size: 1.9 MiB |
@@ -1,24 +1,117 @@
|
||||
const { app, BrowserWindow } = require('electron');
|
||||
const { app, BrowserWindow, session, globalShortcut, shell } = require('electron');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
let mainWindow;
|
||||
let stateFilePath;
|
||||
|
||||
app.whenReady().then(() => {
|
||||
mainWindow = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
const loadWindowState = () => {
|
||||
if (!stateFilePath) return {};
|
||||
try {
|
||||
const raw = fs.readFileSync(stateFilePath, 'utf8');
|
||||
const parsed = JSON.parse(raw);
|
||||
const { width, height, x, y } = parsed;
|
||||
if (Number.isFinite(width) && Number.isFinite(height)) {
|
||||
return {
|
||||
width,
|
||||
height,
|
||||
x: Number.isFinite(x) ? x : undefined,
|
||||
y: Number.isFinite(y) ? y : undefined,
|
||||
};
|
||||
}
|
||||
} catch (_) {
|
||||
// Ignore malformed or missing state and fall back to defaults.
|
||||
}
|
||||
return {};
|
||||
};
|
||||
|
||||
const saveWindowState = (bounds) => {
|
||||
if (!stateFilePath || !bounds) return;
|
||||
try {
|
||||
fs.mkdirSync(path.dirname(stateFilePath), { recursive: true });
|
||||
fs.writeFileSync(stateFilePath, JSON.stringify(bounds), 'utf8');
|
||||
} catch (_) {
|
||||
// Persisting state is best-effort; ignore write failures.
|
||||
}
|
||||
};
|
||||
|
||||
const createWindow = () => {
|
||||
let state = {};
|
||||
const focusedWindow = BrowserWindow.getFocusedWindow();
|
||||
|
||||
if (focusedWindow) {
|
||||
const bounds = focusedWindow.getBounds();
|
||||
state = {
|
||||
width: bounds.width,
|
||||
height: bounds.height,
|
||||
x: bounds.x + 30,
|
||||
y: bounds.y + 30
|
||||
};
|
||||
} else {
|
||||
state = loadWindowState();
|
||||
}
|
||||
|
||||
const windowOptions = {
|
||||
width: state.width || 800,
|
||||
height: state.height || 600,
|
||||
webPreferences: {
|
||||
nodeIntegration: false,
|
||||
contextIsolation: true,
|
||||
},
|
||||
};
|
||||
|
||||
if (Number.isFinite(state.x) && Number.isFinite(state.y)) {
|
||||
windowOptions.x = state.x;
|
||||
windowOptions.y = state.y;
|
||||
}
|
||||
|
||||
const win = new BrowserWindow(windowOptions);
|
||||
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' };
|
||||
});
|
||||
|
||||
mainWindow.setMenu(null);
|
||||
win.on('close', () => {
|
||||
saveWindowState(win.getBounds());
|
||||
});
|
||||
};
|
||||
|
||||
mainWindow.loadURL('https://linear.app/login');
|
||||
app.whenReady().then(() => {
|
||||
stateFilePath = path.join(app.getPath('userData'), 'window-state.json');
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit();
|
||||
session.defaultSession.setPermissionRequestHandler((_, permission, callback, details) => {
|
||||
const origin = details?.requestingUrl || '';
|
||||
const isLinear = origin.startsWith('https://linear.app');
|
||||
if (permission === 'notifications' && isLinear) {
|
||||
return callback(true);
|
||||
}
|
||||
return callback(false);
|
||||
});
|
||||
|
||||
createWindow();
|
||||
|
||||
app.on('browser-window-focus', () => {
|
||||
globalShortcut.register('CommandOrControl+Shift+N', createWindow);
|
||||
});
|
||||
|
||||
app.on('browser-window-blur', () => {
|
||||
globalShortcut.unregister('CommandOrControl+Shift+N');
|
||||
});
|
||||
|
||||
app.on('activate', () => {
|
||||
if (BrowserWindow.getAllWindows().length === 0) {
|
||||
createWindow();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
|
||||
Regular → Executable
+80
-4
@@ -1,4 +1,80 @@
|
||||
#/bin/bash
|
||||
wget -O ~/.linear.AppImage https://github.com/kleo-dev/linear-linux/releases/download/v0.2.0/linear-linux-0.2.0.AppImage
|
||||
sudo chmod +x ~/.linear.AppImage
|
||||
sudo mv ~/.linear.AppImage /bin/linear
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ARCH=$(uname -m)
|
||||
|
||||
# Normalize to electron-builder naming
|
||||
case "$ARCH" in
|
||||
x86_64) ARCH="x86_64" ;;
|
||||
aarch64 | arm64) ARCH="arm64" ;;
|
||||
*) echo "Unsupported architecture: $ARCH"; exit 1 ;;
|
||||
esac
|
||||
|
||||
VERSION="${VERSION:-0.2.5}"
|
||||
APPIMAGE_URL="${APPIMAGE_URL:-https://github.com/selimaj-dev/linear-linux/releases/download/v${VERSION}/linear-linux-${VERSION}-${ARCH}.AppImage}"
|
||||
INSTALL_ROOT="${INSTALL_ROOT:-/opt}"
|
||||
INSTALL_DIR="${INSTALL_ROOT}/linear-linux-${VERSION}"
|
||||
WRAPPER_PATH="/usr/local/bin/linear"
|
||||
DESKTOP_PATH="/usr/share/applications/linear.desktop"
|
||||
APP_NAME="Linear"
|
||||
APP_DIR="${INSTALL_DIR}/squashfs-root"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ICON_SVG="${SCRIPT_DIR}/assets/linear-icon.svg"
|
||||
ICON_PNG="${SCRIPT_DIR}/assets/linear-app-icon.png"
|
||||
|
||||
if [[ ! -f "${ICON_SVG}" || ! -f "${ICON_PNG}" ]]; then
|
||||
echo "Icon assets missing. Expected ${ICON_SVG} and ${ICON_PNG}." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tmpdir="$(mktemp -d)"
|
||||
trap 'rm -rf "${tmpdir}"' EXIT
|
||||
|
||||
echo "Downloading Linear AppImage ${VERSION}..."
|
||||
curl -fsSL "${APPIMAGE_URL}" -o "${tmpdir}/linear.AppImage"
|
||||
chmod +x "${tmpdir}/linear.AppImage"
|
||||
|
||||
echo "Installing to ${INSTALL_DIR}..."
|
||||
sudo mkdir -p "${INSTALL_DIR}"
|
||||
sudo cp "${tmpdir}/linear.AppImage" "${INSTALL_DIR}/linear.AppImage"
|
||||
sudo chmod +x "${INSTALL_DIR}/linear.AppImage"
|
||||
sudo bash -lc "cd \"${INSTALL_DIR}\" && ./linear.AppImage --appimage-extract >/dev/null"
|
||||
sudo chmod -R a+rX "${APP_DIR}"
|
||||
|
||||
echo "Configuring sandbox helper..."
|
||||
sudo chown root:root "${APP_DIR}/chrome-sandbox"
|
||||
sudo chmod 4755 "${APP_DIR}/chrome-sandbox"
|
||||
|
||||
echo "Creating launch wrapper at ${WRAPPER_PATH}..."
|
||||
sudo tee "${WRAPPER_PATH}" >/dev/null <<EOF
|
||||
#!/usr/bin/env bash
|
||||
export CHROME_DEVEL_SANDBOX="${APP_DIR}/chrome-sandbox"
|
||||
exec "${APP_DIR}/AppRun" "\$@"
|
||||
EOF
|
||||
sudo chmod 755 "${WRAPPER_PATH}"
|
||||
|
||||
echo "Installing desktop entry..."
|
||||
sudo tee "${DESKTOP_PATH}" >/dev/null <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=${APP_NAME}
|
||||
Exec=${WRAPPER_PATH} %U
|
||||
Icon=linear
|
||||
Terminal=false
|
||||
Categories=Utility;
|
||||
StartupWMClass=linear-linux
|
||||
EOF
|
||||
|
||||
echo "Installing icons..."
|
||||
sudo install -Dm644 "${ICON_SVG}" /usr/share/icons/hicolor/scalable/apps/linear.svg
|
||||
sudo install -Dm644 "${ICON_PNG}" /usr/share/icons/hicolor/512x512/apps/linear.png
|
||||
sudo gtk-update-icon-cache -f /usr/share/icons/hicolor || true
|
||||
|
||||
echo "Configuring chrome sandbox"
|
||||
|
||||
sudo chown root:root /opt/Linear/chrome-sandbox || true
|
||||
sudo chmod 4755 /opt/Linear/chrome-sandbox || true
|
||||
|
||||
echo "Linear ${VERSION} installed. Launch with: ${WRAPPER_PATH}"
|
||||
|
||||
Generated
+113
-813
File diff suppressed because it is too large
Load Diff
+28
-5
@@ -1,25 +1,48 @@
|
||||
{
|
||||
"name": "linear-linux",
|
||||
"version": "0.2.1",
|
||||
"version": "0.2.5",
|
||||
"description": "Linux support for linear.app",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "npx electron index.js",
|
||||
"build": "electron-builder --linux AppImage"
|
||||
"start": "CHROME_DEVEL_SANDBOX=${CHROME_DEVEL_SANDBOX:-/opt/linear-linux/squashfs-root/chrome-sandbox} ELECTRON_DISABLE_SANDBOX=1 npx electron index.js",
|
||||
"build": "npx electron-builder --linux AppImage --x64 --arm64"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/kleo-dev/linear-linux.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"author": "Selimaj Dev",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/kleo-dev/linear-linux/issues"
|
||||
},
|
||||
"homepage": "https://github.com/kleo-dev/linear-linux#readme",
|
||||
"build": {
|
||||
"appId": "app.linear.linux",
|
||||
"productName": "Linear",
|
||||
"files": [
|
||||
"index.js",
|
||||
"package.json",
|
||||
"assets/**/*"
|
||||
],
|
||||
"linux": {
|
||||
"target": [
|
||||
"AppImage"
|
||||
],
|
||||
"category": "Utility",
|
||||
"icon": "assets/linear-app-icon.png",
|
||||
"artifactName": "linear-linux-${version}-${arch}.${ext}"
|
||||
},
|
||||
"extraResources": [
|
||||
{
|
||||
"from": "assets",
|
||||
"to": "assets"
|
||||
}
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^33.2.1",
|
||||
"electron": "33.2.1",
|
||||
"electron-builder": "^25.1.8"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user