Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions .github/workflows/windows-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
name: Windows Build

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

jobs:
build-windows:
runs-on: windows-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: |
packages/config-api/package-lock.json
packages/finicky-ui/package-lock.json

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.24'
cache-dependency-path: |
apps/finicky/src/go.sum

- name: Install Node dependencies
run: |
cd packages/config-api
npm ci
cd ../finicky-ui
npm ci

- name: Build config-api
run: |
cd packages/config-api
npm run build
npm run generate-types
copy dist\finickyConfigAPI.js ..\..\apps\finicky\src\assets\finickyConfigAPI.js
shell: cmd
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

- name: Build UI
run: |
cd packages/finicky-ui
npm run build
mkdir ..\..\apps\finicky\src\assets\templates 2>nul
xcopy /E /Y dist\* ..\..\apps\finicky\src\assets\templates\
shell: cmd

- name: Build Windows binary
env:
CGO_ENABLED: '0'
GOOS: windows
GOARCH: amd64
run: |
$commitHash = git rev-parse --short HEAD
$buildDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss UTC" -AsUTC
cd apps/finicky/src
go build -ldflags "-X 'finicky/version.commitHash=$commitHash' -X 'finicky/version.buildDate=$buildDate' -H windowsgui" -o ../build/windows/Finicky.exe .
shell: pwsh

- name: Run tests
run: |
cd apps/finicky/src
go test ./...
env:
CGO_ENABLED: '0'

- name: Upload Windows binary
uses: actions/upload-artifact@v4
with:
name: Finicky-windows-x64
path: apps/finicky/build/windows/Finicky.exe
retention-days: 14

cross-compile-check:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: |
packages/config-api/package-lock.json
packages/finicky-ui/package-lock.json

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.24'
cache-dependency-path: |
apps/finicky/src/go.sum

- name: Build assets
run: |
cd packages/config-api && npm ci && npm run build && npm run generate-types
cp dist/finickyConfigAPI.js ../../apps/finicky/src/assets/finickyConfigAPI.js
cd ../finicky-ui && npm ci && npm run build
mkdir -p ../../apps/finicky/src/assets/templates
cp -r dist/* ../../apps/finicky/src/assets/templates/

- name: Cross-compile for Windows
env:
CGO_ENABLED: '0'
GOOS: windows
GOARCH: amd64
run: |
cd apps/finicky/src
go build -o /dev/null .

- name: Cross-compile for macOS (verify no regressions)
env:
CGO_ENABLED: '0'
GOOS: darwin
GOARCH: arm64
run: |
cd apps/finicky/src
go build -o /dev/null . 2>&1 || echo "Expected: macOS build needs CGO for ObjC (this is OK)"
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@ node_modules
build
.env
dist
example-config
example-config
*.exe
*.msi
Output/
29 changes: 27 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

</div>

Finicky is a macOS application that allows you to set up rules that decide which browser is opened for every url. With Finicky as your default browser, you can tell it to open Bluesky or Reddit in one browser, and LinkedIn or Google Meet in another.
Finicky is an application for macOS and Windows that allows you to set up rules that decide which browser is opened for every url. With Finicky as your default browser, you can tell it to open Bluesky or Reddit in one browser, and LinkedIn or Google Meet in another.

- Route any URL to your preferred browser with powerful matching rules
- Automatically edit URLs before opening them (e.g., force HTTPS, remove tracking parameters)
Expand All @@ -22,16 +22,31 @@ Finicky is a macOS application that allows you to set up rules that decide which
## Table of Contents

- [Installation](#installation)
- [macOS](#macos)
- [Windows](#windows)
- [Basic configuration](#basic-configuration)
- [Configuration](#configuration)
- [Migrating from Finicky 3](#migrating-from-finicky-3)

## Installation

### macOS

- Download from [releases](https://github.com/johnste/finicky/releases)
- Or install via homebrew: `brew install --cask finicky`
- Create a JavaScript or TypeScript configuration file at `~/.finicky.js`. Have a look at the example configuration below, or in the `example-config` folder.
- Start Finicky (in Applications, or through Spotlight/Alfred/Raycast) and allow it to be set as the default browser. Starting Finicky manually opens the configuration/troubleshooting window.
- Start Finicky (in Applications, or through Spotlight/Alfred/Raycast) and allow it to be set as the default browser. Starting Finicky manually opens the configuration/troubleshooting window.

### Windows

- Download `FinickySetup.exe` from [releases](https://github.com/johnste/finicky/releases) and run the installer
- Or install via winget: `winget install Finicky`
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
- Create a configuration file at `%USERPROFILE%\.finicky.js` (same format as macOS — configs are cross-platform)
- Open **Settings > Default Apps** and set Finicky as the default web browser
- Finicky runs in the system tray and routes URLs based on your rules

The installer registers Finicky as a browser in Windows. No admin rights are required — it installs per-user to `%LOCALAPPDATA%\Finicky`.


## Basic configuration

Expand Down Expand Up @@ -95,6 +110,16 @@ Finicky has browser extensions for Chrome and Firefox. They add an "open with Fi

See [Building Finicky from source](https://github.com/johnste/finicky/wiki/Building-Finicky-from-source)

**Windows (cross-compile from macOS/Linux):**
```bash
./scripts/build-windows.sh
```

**Windows (native):**
```powershell
$env:CGO_ENABLED="0"; go build -C apps/finicky/src -ldflags "-H windowsgui" -o ../build/windows/Finicky.exe .
```
Comment thread
coderabbitai[bot] marked this conversation as resolved.

### Works well with

If you are looking for something that lets you pick the browser to activate in a graphical interface, check out [Browserosaurus](https://browserosaurus.com/) by Will Stone, an open source browser prompter for macOS. It works really well together with Finicky!
Expand Down
Loading