Categorygithub.com/PhilippHeuer/fuzzmux
modulepackage
0.9.0
Repository: https://github.com/philippheuer/fuzzmux.git
Documentation: pkg.go.dev

# README

FuzzMux

Go Report Card OpenSSF Scorecard

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

CommandDescription
tmxStart a layout, lookup over all supported providers
tmx projectStart a layout for a project
tmx sshStart a layout for a ssh connection
tmx project -t editorStart a layout for a project with a custom layout (bash, nvim, ...)
tmx menuInteractive menu to choose a provider, and then an option

Configure Modules

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.

# Packages

No description provided by the author