diff --git a/desktop/rofi/default.nix b/desktop/rofi/default.nix index 7782db46..59831238 100644 --- a/desktop/rofi/default.nix +++ b/desktop/rofi/default.nix @@ -4,7 +4,9 @@ home-manager.sharedModules = [{ programs.rofi = { enable = true; - package = pkgs.rofi-wayland; + package = (pkgs.callPackage ./package/wrapper.nix { + rofi-unwrapped = (pkgs.callPackage ./package/wayland.nix { }); + }); cycle = false; extraConfig = { modi = "drun,filebrowser"; diff --git a/desktop/rofi/package/default.nix b/desktop/rofi/package/default.nix new file mode 100644 index 00000000..a505ad13 --- /dev/null +++ b/desktop/rofi/package/default.nix @@ -0,0 +1,71 @@ +{ stdenv +, lib +, fetchFromGitHub +, meson +, ninja +, pkg-config +, libxkbcommon +, pango +, which +, git +, cairo +, libxcb +, xcbutil +, xcbutilwm +, xcbutilxrm +, xcb-util-cursor +, libstartup_notification +, bison +, flex +, librsvg +, check +, glib +, buildPackages +}: + +stdenv.mkDerivation rec { + pname = "rofi-unwrapped"; + version = "1.7.5"; + + src = fetchFromGitHub { + owner = "davatorium"; + repo = "rofi"; + rev = version; + fetchSubmodules = true; + sha256 = "sha256-3XFusKeckagEPfbLtt1xAVTEfn1Qebdi/Iq1AYbHCR4="; + }; + + preConfigure = '' + patchShebangs "script" + # root not present in build /etc/passwd + sed -i 's/~root/~nobody/g' test/helper-expand.c + ''; + + depsBuildBuild = [ buildPackages.stdenv.cc pkg-config glib ]; + nativeBuildInputs = [ meson ninja pkg-config flex bison ]; + buildInputs = [ + libxkbcommon + pango + cairo + git + librsvg + check + libstartup_notification + libxcb + xcbutil + xcbutilwm + xcbutilxrm + xcb-util-cursor + which + ]; + + doCheck = false; + + meta = with lib; { + description = "Window switcher, run dialog and dmenu replacement"; + homepage = "https://github.com/davatorium/rofi"; + license = licenses.mit; + maintainers = with maintainers; [ bew ]; + platforms = with platforms; linux; + }; +} diff --git a/desktop/rofi/package/wayland.nix b/desktop/rofi/package/wayland.nix new file mode 100644 index 00000000..547095be --- /dev/null +++ b/desktop/rofi/package/wayland.nix @@ -0,0 +1,32 @@ +{ stdenv +, lib +, fetchFromGitHub +, rofi-unwrapped +, wayland-scanner +, wayland-protocols +, wayland +}: + +rofi-unwrapped.overrideAttrs (oldAttrs: rec { + pname = "rofi-wayland-unwrapped"; + version = "git"; + + src = fetchFromGitHub { + owner = "lbonn"; + repo = "rofi"; + rev = "d06095b5ed40e5d28236b7b7b575ca867696d847"; + fetchSubmodules = true; + sha256 = "sha256-8IfHpaVFGeWqyw+tLjNtg+aWwAHhSA5PuXJYjpoht2E="; + }; + + nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ wayland-scanner ]; + buildInputs = oldAttrs.buildInputs ++ [ wayland wayland-protocols ]; + + meta = with lib; { + description = "Window switcher, run dialog and dmenu replacement for Wayland"; + homepage = "https://github.com/lbonn/rofi"; + license = licenses.mit; + maintainers = with maintainers; [ bew ]; + platforms = with platforms; linux; + }; +}) diff --git a/desktop/rofi/package/wrapper.nix b/desktop/rofi/package/wrapper.nix new file mode 100644 index 00000000..2f98fe16 --- /dev/null +++ b/desktop/rofi/package/wrapper.nix @@ -0,0 +1,42 @@ +{ symlinkJoin, lib, rofi-unwrapped, makeWrapper, wrapGAppsHook, gdk-pixbuf, hicolor-icon-theme, theme ? null, plugins ? [], symlink-dmenu ? false }: + +symlinkJoin { + name = "rofi-${rofi-unwrapped.version}"; + + paths = [ + rofi-unwrapped.out + ] ++ (lib.forEach plugins (p: p.out)); + + nativeBuildInputs = [ makeWrapper wrapGAppsHook ]; + buildInputs = [ gdk-pixbuf ]; + + preferLocalBuild = true; + passthru.unwrapped = rofi-unwrapped; + + dontWrapGApps = true; + + postBuild = '' + rm -rf $out/bin + mkdir $out/bin + ln -s ${rofi-unwrapped}/bin/* $out/bin + rm $out/bin/rofi + + gappsWrapperArgsHook + makeWrapper ${rofi-unwrapped}/bin/rofi $out/bin/rofi \ + ''${gappsWrapperArgs[@]} \ + --prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share \ + ${lib.optionalString (plugins != []) ''--prefix XDG_DATA_DIRS : ${lib.concatStringsSep ":" (lib.forEach plugins (p: "${p.out}/share"))}''} \ + ${lib.optionalString (theme != null) ''--add-flags "-theme ${theme}"''} \ + ${lib.optionalString (plugins != []) ''--add-flags "-plugin-path $out/lib/rofi"''} + + ${lib.optionalString symlink-dmenu "ln -s ${rofi-unwrapped}/bin/rofi $out/bin/dmenu"} + + rm $out/bin/rofi-theme-selector + makeWrapper ${rofi-unwrapped}/bin/rofi-theme-selector $out/bin/rofi-theme-selector \ + --prefix XDG_DATA_DIRS : $out/share + ''; + + meta = rofi-unwrapped.meta // { + priority = (rofi-unwrapped.meta.priority or 0) - 1; + }; +}