{ config , lib , pkgs , ... }: with lib; let cfg = config.my.programs.rofi; rofi-bluetooth = with pkgs; stdenv.mkDerivation rec { pname = "rofi-bluetooth"; version = "unstable-2021-03-05"; src = fetchFromGitHub { repo = pname; owner = "nickclyde"; # https://github.com/nickclyde/rofi-bluetooth/issues/19 rev = "893db1f2b549e7bc0e9c62e7670314349a29cdf2"; sha256 = "sha256-3oROJKEQCuSnLfbJ+JSSc9hcmJTPrLHRQJsrUcaOMss="; }; nativeBuildInputs = [ makeWrapper ]; installPhase = '' runHook preInstall install -D --target-directory=$out/bin/ ./rofi-bluetooth wrapProgram $out/bin/rofi-bluetooth \ --prefix PATH ":" ${lib.makeBinPath [ rofi-unwrapped bluez ] } runHook postInstall ''; meta = with lib; { description = "Rofi-based interface to connect to bluetooth devices and display status info"; homepage = "https://github.com/nickclyde/rofi-bluetooth"; license = licenses.gpl3Only; maintainers = with maintainers; [ MoritzBoehme ]; platforms = platforms.linux; }; }; in { options.my.programs.rofi = { enable = mkOption { default = false; type = types.bool; example = true; }; }; config = mkIf cfg.enable { environment.systemPackages = with pkgs; [ (lib.mkIf config.networking.networkmanager.enable networkmanager_dmenu) (lib.mkIf config.hardware.bluetooth.enable rofi-bluetooth) rofi-power-menu ]; home-manager.users.moritz = { programs.rofi = { enable = true; package = pkgs.rofi.override { plugins = with pkgs; [ rofi-calc rofi-emoji ]; }; extraConfig = { combi-modi = "drun,window,emoji"; }; }; xdg = { enable = true; configFile."networkmanager-dmenu/config.ini".text = '' [dmenu] dmenu_command = rofi ''; }; }; }; }