FuzzMux

What is FuzzMux?
FuzzMux provides a global fuzzy finder menu for your projects, ssh connections, namespaces in kubernetes, ... to quickly switch between contexts.
Additionally, it provides a way to define layouts / rules, to start specific applications based on the selected item.
For example:
- open
IntelliJ IDEA if the project is a Java project
- open
Goland if the project is a Go project
- open
Neovim for all other projects
Similar rules can be defined for ssh connections, kubernetes namespaces, ... - see the examples/config.yaml.
Supported Providers
- backstage (query catalog)
- jira (query issues)
- keycloak (query users, groups and clients)
- kubernetes clusters (including openshift)
- ldap (query users and groups)
- projects (with depth and customizable checks for git, svn, hg, ...)
- rundeck (query jobs)
- ssh config (parses
~/.ssh/config)
- usql connections (parses
~/.config/usql/config.yml)
- firefox bookmarks (specify sqlite db file to query)
Supported Window Managers / Terminal Workspace Managers
- hyprland
- sway
- i3
- tmux
- shell (fallback, runs the default command in the current shell)
Note:: tmux and shell will ignore options flagged as gui: true.
Download
Download the binary from the GitHub Releases.
curl -o ~/.local/bin/tmx -L https://github.com/PhilippHeuer/fuzzmux/releases/latest/download/linux_amd64
Usage
| Command |
Description |
tmx |
Start a layout, lookup over all supported providers |
tmx project |
Start a layout for a project |
tmx ssh |
Start a layout for a ssh connection |
tmx project -t editor |
Start a layout for a project with a custom layout (bash, nvim, ...) |
tmx menu |
Interactive menu to choose a provider, and then an option |
Backstage
The backstage module can query components in the catalog.
modules:
- type: backstage
host: https://demo.backstage.io
bearer-token: secret # optional, see https://backstage.io/docs/auth/service-to-service-auth/#static-tokens
attribute-mapping:
- source: metadata.name
target: name
query:
- service
- openapi
- user
- website
- team
- department
JIRA
The jira module can query issues from JIRA.
modules:
- type: jira
host: https://issues.apache.org/jira/
bearer-token: secret # your personal access token
jql: project = AMQ # optional filter, see https://support.atlassian.com/jira-software-cloud/docs/jql-fields/
attribute-mapper:
- source: project
target: project
- source: summary
target: summary
- source: type
target: type
- source: status
target: status
- source: priority
target: priority
- source: assignee
target: assignee
- source: reporter
target: reporter
Keycloak
The keycloak module can query users, groups and clients across all realms the user has access to.
modules:
- type: keycloak
host: http://localhost:8080
realm: master
username: admin
password: secret
query:
- user
- client
- group
Kubernetes
The kubernetes module supports multiple clusters and can query namespaces.
modules:
- type: kubernetes
clusters:
- name: cluster01
tags:
- production
kubeconfig: ~/.kube/cluster.config
LDAP
The ldap module can query users and groups from LDAP or Active Directory.
modules:
- name: ldap-users
type: ldap
host: ldap://127.0.0.1:389
base-dn: "dc=company,dc=com"
bind-dn: "cn=admin,dc=company,dc=com"
bind-password: "secret"
filter: (&(objectClass=organizationalPerson))
- name: ldap-groups
type: ldap
host: ldap://127.0.0.1:389
base-dn: "dc=company,dc=com"
bind-dn: "cn=admin,dc=company,dc=com"
bind-password: "secret"
filter: (|(objectClass=group)(objectClass=posixGroup)(objectClass=groupOfNames))
Project
The project module can query projects from your local filesystem.
modules:
- type: project
display-format: relative
directories:
- path: ~/projects/Golang
depth: 1
- path: ~/projects/Rust
depth: 1
- path: ~/projects/Java
depth: 1
Rundeck
The rundeck module can query jobs from the rundeck job scheduler.
modules:
- type: rundeck
host: http://localhost:4440
token: your-personal-access-token
projects:
- test
SSH
The ssh module reads connections from the ~/.ssh/config file.
modules:
- type: ssh
start-directory: "~"
USQL
The usql module reads db connections from the ~/.config/usql/config.yml file.
modules:
- type: usql
start-directory: "~"
Static
The static module can be used to define static options.
modules:
- id: my-static-option
name: "My Static Option"
display-name: "My Static Option"
description: "This is a static option"
web: "https://example.com"
tags:
- static
Create your Layouts
The default layout names are identical to the provider names, e.g. project for the project provider. This shows how to customize the layout for the project provider.
layouts:
project:
clear-workspace: true # kill all windows in the current workspace before starting
apps:
- name: java
rules:
- inPath("idea-community") && (contains(TAGS, "language-java") || contains(TAGS, "language-kotlin"))
commands:
- command: idea-community "${startDirectory}"
gui: true
group: editor # the group is used to ensure only the first matching editor is opened
- name: vscodium
rules:
- inPath("codium") && (contains(TAGS, "language-javascript") || contains(TAGS, "language-typescript"))
commands:
- command: codium "${startDirectory}"
gui: true
group: editor
- name: vscode
rules:
- inPath("code") && (contains(TAGS, "language-javascript") || contains(TAGS, "language-typescript"))
commands:
- command: code ${startDirectory}
gui: true
group: editor
- name: nvim
rules:
- inPath("nvim")
commands:
- command: nvim +'Telescope find_files hidden=false layout_config={height=0.9}'
group: editor
The command can contain placeholders, e.g.:
${name} - name of the option (for ssh this would be the server alias -> ssh ${name})
${display-name} - display name of the option
${start-directory} - start directory of the option
Window Manager / Terminal Workspace Manager Setup
Specific setup steps, if required.
tmux
- Ensure you have a tmux server running (
tmux start-server, preferably as a user service) to jump into your sessions quickly.
- Add the options in tmux.conf to your
~/.tmux.conf.
Credits
Contributing
Contributions are welcome!
License
Released under the MIT license.