Skip to content

Commit 3f9cfb4

Browse files
committed
overlays: add vibetyper
1 parent ae69fc6 commit 3f9cfb4

2 files changed

Lines changed: 125 additions & 0 deletions

File tree

pkgs/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ let
44
in
55
{
66
drsprinto = pkgs.callPackage ./drsprinto { };
7+
vibetyper = pkgs.callPackage ./vibetyper { };
78

89
# python packages
910
pythonPackagesExtensions = pkgs.pythonPackagesExtensions ++ [

pkgs/vibetyper/default.nix

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
{
2+
lib,
3+
appimageTools,
4+
fetchurl,
5+
makeWrapper,
6+
pulseaudio,
7+
alsa-lib,
8+
alsa-plugins,
9+
libGL,
10+
vulkan-loader,
11+
wayland,
12+
gsettings-desktop-schemas,
13+
gtk3,
14+
}:
15+
16+
let
17+
pname = "vibetyper";
18+
version = "1.1.2";
19+
20+
src = fetchurl {
21+
url = "https://cdn.vibetyper.com/releases/linux/VibeTyper.AppImage";
22+
sha256 = "sha256-dN0VDsmZZC/RoSAjYmvILE1PGUgBHxRszhw2BhjL3bg=";
23+
};
24+
25+
appimageContents = appimageTools.extractType2 { inherit pname version src; };
26+
in
27+
appimageTools.wrapType2 {
28+
inherit pname version src;
29+
30+
extraInstallCommands = ''
31+
# Install desktop file
32+
install -Dm444 ${appimageContents}/*.desktop $out/share/applications/vibetyper.desktop 2>/dev/null || true
33+
34+
# Fix desktop file paths if it exists
35+
if [ -f $out/share/applications/vibetyper.desktop ]; then
36+
substituteInPlace $out/share/applications/vibetyper.desktop \
37+
--replace-quiet 'Exec=AppRun' "Exec=$out/bin/vibetyper"
38+
fi
39+
40+
# Install icons (search common locations)
41+
for size in 16 32 48 64 128 256 512; do
42+
if [ -f ${appimageContents}/usr/share/icons/hicolor/''${size}x''${size}/apps/*.png ]; then
43+
mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps
44+
cp ${appimageContents}/usr/share/icons/hicolor/''${size}x''${size}/apps/*.png \
45+
$out/share/icons/hicolor/''${size}x''${size}/apps/ 2>/dev/null || true
46+
fi
47+
done
48+
49+
# Fallback: copy any PNG in root
50+
if [ -f ${appimageContents}/*.png ]; then
51+
mkdir -p $out/share/icons/hicolor/128x128/apps
52+
cp ${appimageContents}/*.png $out/share/icons/hicolor/128x128/apps/vibetyper.png 2>/dev/null || true
53+
fi
54+
55+
# Wrap with runtime dependencies (conservative Handy-style config)
56+
# GDK_BACKEND=x11: WebKitGTK crashes on GNOME Wayland without this
57+
# WEBKIT_DISABLE_DMABUF_RENDERER=1: Prevents GPU buffer sharing crashes
58+
# VK_ICD_FILENAMES: Use software Vulkan renderer for stability
59+
# LD_LIBRARY_PATH: Ensures OpenGL drivers are found
60+
# ALSA_PLUGIN_DIR: Fixes "Unknown PCM pulse/jack" audio warnings
61+
source ${makeWrapper}/nix-support/setup-hook
62+
wrapProgram $out/bin/vibetyper \
63+
--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name} \
64+
--prefix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name} \
65+
--set WEBKIT_DISABLE_DMABUF_RENDERER 1 \
66+
--set GDK_BACKEND x11 \
67+
--set VK_ICD_FILENAMES /run/opengl-driver/share/vulkan/icd.d/lvp_icd.x86_64.json \
68+
--prefix LD_LIBRARY_PATH : /run/opengl-driver/lib \
69+
--set ALSA_PLUGIN_DIR "${alsa-plugins}/lib/alsa-lib"
70+
'';
71+
72+
extraPkgs =
73+
pkgs: with pkgs; [
74+
# Audio (critical for speech-to-text)
75+
pulseaudio
76+
alsa-lib
77+
alsa-plugins
78+
pipewire
79+
80+
# Graphics
81+
libGL
82+
vulkan-loader
83+
mesa
84+
85+
# Wayland
86+
wayland
87+
libxkbcommon
88+
89+
# X11 fallback
90+
libx11
91+
libxcursor
92+
libxrandr
93+
libxi
94+
libxcb
95+
96+
# WebKitGTK / Electron dependencies
97+
webkitgtk_4_1
98+
libsoup_3
99+
gtk3
100+
glib
101+
gdk-pixbuf
102+
cairo
103+
pango
104+
harfbuzz
105+
at-spi2-atk
106+
atk
107+
dconf
108+
gsettings-desktop-schemas
109+
110+
# Misc
111+
openssl
112+
zlib
113+
stdenv.cc.cc.lib
114+
];
115+
116+
meta = with lib; {
117+
description = "AI-powered voice typing that transforms speech into polished writing";
118+
homepage = "https://vibetyper.com";
119+
license = licenses.unfree;
120+
platforms = [ "x86_64-linux" ];
121+
maintainers = [ ];
122+
mainProgram = "vibetyper";
123+
};
124+
}

0 commit comments

Comments
 (0)