# rofi-project-opener Module Home Manager module for configuring the rofi-project-opener package. ## Overview This module provides declarative configuration for rofi-project-opener, a Rofi-based project launcher. It generates the necessary configuration files and installs the package. ## Quick Start ```nix {config, pkgs, ...}: { cli.rofi-project-opener = { enable = true; projectDirs = { dev = { path = "~/dev"; }; work = { path = "~/work"; args = "--agent work-assistant"; }; }; }; } ``` ## Options ### `cli.rofi-project-opener.enable` Whether to enable rofi-project-opener. **Type:** `boolean` **Default:** `false` ### `cli.rofi-project-opener.projectDirs` Attribute set of base directories to scan for project subdirectories. **Type:** `attrsOf (submodule)` Each entry is a submodule with: | Option | Type | Default | Description | |--------|------|---------|-------------| | `path` | `str` | required | Base directory path (supports `~`) | | `args` | `str` | `""` | Arguments to pass to command | **Default:** ```nix { dev = { path = "~/dev"; }; projects = { path = "~/projects"; }; } ``` **Example:** ```nix projectDirs = { nixpkgs = { path = "~/p/NIX"; args = "--agent nix-expert"; }; chat = { path = "~/p/CHAT"; args = "--agent chiron"; }; dev = { path = "~/dev"; }; work = { path = "~/work"; args = "--profile work"; }; }; ``` ### `cli.rofi-project-opener.terminal` Terminal emulator to use for launching projects. **Type:** `either str package` **Default:** `"kitty"` **Examples:** ```nix # Using a package terminal = pkgs.kitty; terminal = pkgs.alacritty; # Using a string (must be in PATH) terminal = "kitty"; terminal = "wezterm"; ``` ### `cli.rofi-project-opener.terminalCommand` Command to run in the terminal after navigating to the project directory. **Type:** `str` **Default:** `""` (runs `opencode` with args) **Placeholders:** - `%s` - Project path - `%a` - Project args (from `projectDirs..args`) **Examples:** ```nix # Default behavior - run opencode with project args terminalCommand = ""; # Explicit opencode with args terminalCommand = "opencode %a"; # Different editor terminalCommand = "nvim"; # VSCode with path terminalCommand = "code %s"; # Custom application terminalCommand = "my-dev-tool --project %s %a"; ``` ### `cli.rofi-project-opener.rofiPrompt` Prompt text displayed in the Rofi menu. **Type:** `str` **Default:** `"Select project"` ### `cli.rofi-project-opener.rofiArgs` Arguments to pass to Rofi. **Type:** `listOf str` **Default:** `["-dmenu" "-i"]` **Example:** ```nix rofiArgs = ["-dmenu" "-i" "-theme" "gruvbox" "-width" "50"]; ``` ## Generated Files The module generates these configuration files: ### `~/.config/rofi-project-opener/projects.json` JSON file containing project directories: ```json { "dev": {"path": "~/dev", "args": ""}, "work": {"path": "~/work", "args": "--agent work-assistant"} } ``` ### `~/.config/rofi-project-opener/config` Shell configuration file: ```bash TERMINAL="/nix/store/.../bin/kitty" TERMINAL_CMD="opencode %a" ROFI_PROMPT="Select project" ROFI_ARGS="-dmenu -i" ``` ## Full Example ```nix {config, pkgs, ...}: { imports = [m3ta-nixpkgs.homeManagerModules.default]; cli.rofi-project-opener = { enable = true; # Project directories with optional args projectDirs = { nixpkgs = { path = "~/p/NIX"; args = ""; }; chat = { path = "~/p/CHAT"; args = "--agent chiron"; }; dev = { path = "~/dev"; args = ""; }; }; # Terminal configuration terminal = pkgs.kitty; terminalCommand = "opencode %a"; # Rofi configuration rofiPrompt = "Open Project"; rofiArgs = ["-dmenu" "-i" "-theme" "nord"]; }; } ``` ## Usage After enabling, run: ```bash rofi-project-opener ``` Or bind to a keyboard shortcut in your window manager: **Hyprland:** ```nix wayland.windowManager.hyprland.settings.bind = [ "$mod, P, exec, rofi-project-opener" ]; ``` **Sway:** ```nix wayland.windowManager.sway.config.keybindings = { "${modifier}+p" = "exec rofi-project-opener"; }; ``` ## Related - [rofi-project-opener Package](../../../packages/rofi-project-opener.md) - Package documentation - [zellij-ps Module](./zellij-ps.md) - Similar project switcher for Zellij - [Home Manager Overview](../overview.md) - All Home Manager modules