{"id":7742126,"url":"https://github.com/anyrun-org/anyrun","last_synced_at":"2026-03-16T07:25:41.054Z","repository":{"id":132782425,"uuid":"582422837","full_name":"anyrun-org/anyrun","owner":"anyrun-org","description":"A wayland native, highly customizable runner.","archived":false,"fork":false,"pushed_at":"2024-11-08T19:09:15.000Z","size":656,"stargazers_count":671,"open_issues_count":69,"forks_count":52,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-11-08T20:20:17.442Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anyrun-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"Kirottu"}},"created_at":"2022-12-26T19:34:06.000Z","updated_at":"2024-11-08T19:09:19.000Z","dependencies_parsed_at":"2024-01-14T02:21:28.718Z","dependency_job_id":"f513fe25-44ad-4cc5-a650-756f78de6d47","html_url":"https://github.com/anyrun-org/anyrun","commit_stats":null,"previous_names":["anyrun-org/anyrun"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyrun-org%2Fanyrun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyrun-org%2Fanyrun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyrun-org%2Fanyrun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyrun-org%2Fanyrun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anyrun-org","download_url":"https://codeload.github.com/anyrun-org/anyrun/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226109830,"owners_count":17574939,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-04-11T02:02:36.550Z","updated_at":"2026-03-16T07:25:41.047Z","avatar_url":"https://github.com/anyrun-org.png","language":"Rust","readme":"# Anyrun\n\nA wayland native krunner-like runner, made with customizability in mind.\n\n\u003cimg width=\"950\" height=\"702\" alt=\"image\" src=\"https://github.com/user-attachments/assets/0a53b435-58f5-4a7c-90f7-b3f39266f2f4\" /\u003e\n\n\u003e [!NOTE]\n\u003e If you use Nvidia and Anyrun refuses to close for you, you need to set `GSK_RENDERER=ngl` for Anyrun.\n\u003e As in, running it with `GSK_RENDERER=ngl anyrun`. This is a [known issue](https://forums.developer.nvidia.com/t/580-65-06-gtk-4-apps-hang-when-attempting-to-exit-close/341308/6)\n\u003e and is quite driver version dependent.\n\n## Features\n\n- Style customizability with GTK4 CSS\n  - More info in [Styling](#Styling)\n- Can do basically anything\n  - As long as it can work with input and selection\n  - Hence the name Anyrun\n- Easy to make plugins\n  - You only need 4 functions!\n  - See [Rink](plugins/rink) for a simple example. More info in the\n    documentation of the [anyrun-plugin](anyrun-plugin) crate.\n- Responsive\n  - Asynchronous running of plugin functions\n- Wayland native\n  - GTK4 layer shell for overlaying the window\n  - data-control for managing the clipboard\n\n## Usage\n\n### Dependencies\n\nAnyrun mainly depends various GTK4 libraries, and rust of course for building the\nproject. Rust you can get with [rustup](https://rustup.rs). The rest are\nstatically linked in the binary. Here are the libraries you need to have to\nbuild \u0026 run it:\n\n- `gtk4-layer-shell (libgtk4-layer-shell)`\n- `gtk4 (libgtk-4 libgdk-4)`\n- `pango (libpango-1.0)`\n- `cairo (libcairo libcairo-gobject)`\n- `gdk-pixbuf2 (libgdk_pixbuf-2.0)`\n- `glib2 (libgobject-2.0 libgio-2.0 libglib-2.0)`\n\n\u003e [!NOTE]\n\u003e Since 25.12.0, Anyrun also depends on [anyrun-provider](https://github.com/anyrun-org/anyrun-provider)\n\u003e to provide search results. Make sure it is installed as well for Anyrun to function. If you don't want to install\n\u003e it into your `$PATH`, you can set the path to it via the `provider` config option.\n\n## Installation\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/anyrun.svg)](https://repology.org/project/anyrun/versions)\n\n### Nix\n\nAn Anyrun package that contains all the official plugins is available in [nixpkgs](https://search.nixos.org/packages?channel=unstable\u0026show=anyrun\u0026from=0\u0026size=50\u0026sort=relevance\u0026type=packages\u0026query=anyrun).\n\n#### Home-Manager module\n\nThe preferred way to use Home-Manager with Anyrun is by using the upstream module.\n\nYou may use it in your system like this:\n\n```nix\n{\n  programs.anyrun = {\n    enable = true;\n    config = {\n      x = { fraction = 0.5; };\n      y = { fraction = 0.3; };\n      width = { fraction = 0.3; };\n      hideIcons = false;\n      ignoreExclusiveZones = false;\n      layer = \"overlay\";\n      hidePluginInfo = false;\n      closeOnClick = false;\n      showResultsImmediately = false;\n      maxEntries = null;\n\n      plugins = [\n        \"${pkgs.anyrun}/lib/libapplications.so\"\n        \"${pkgs.anyrun}/lib/libsymbols.so\"\n      ];\n    };\n\n    # Inline comments are supported for language injection into\n    # multi-line strings with Treesitter! (Depends on your editor)\n    extraCss = /*css */ ''\n      .some_class {\n        background: red;\n      }\n    '';\n\n    extraConfigFiles.\"some-plugin.ron\".text = ''\n      Config(\n        // for any other plugin\n        // this file will be put in ~/.config/anyrun/some-plugin.ron\n        // refer to docs of xdg.configFile for available options\n      )\n    '';\n  };\n}\n```\n\nAlternatively, you may use the module from this repository's flake to keep up\nwith development branches:\n\n```nix\n{\n  inputs = {\n    nixpkgs.url = \"github:nixos/nixpkgs/nixpkgs-unstable\";\n    home-manager.url = \"github:nix-community/home-manager\";\n    anyrun.url = \"github:anyrun-org/anyrun\";\n  };\n  outputs = {self, ...}@inputs: {\n    homeConfigurations.user = inputs.home-manager.lib.homeManagerConfiguration {\n      modules = [\n        ({ modulesPath, ... }: {\n          # Important! We disable home-manager's module to avoid option\n          # definition collisions\n          disabledModules = [\"${modulesPath}/programs/anyrun.nix\"];\n        })\n        inputs.anyrun.homeManagerModules.default\n        {\n          programs.anyrun = {\n            # ...\n          };\n        }\n      ];\n    };\n  }\n}\n```\n\nAnyrun packages are built and cached automatically. To avoid unnecessary\nrecompilations, you may use the binary cache.\n\n```nix\nnix.settings = {\n    builders-use-substitutes = true;\n    extra-substituters = [\n        \"https://anyrun.cachix.org\"\n    ];\n\n    extra-trusted-public-keys = [\n        \"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=\"\n    ];\n};\n```\n\n\u003e [!WARNING]\n\u003e While using the Anyrun flake, overriding the `nixpkgs` input for Anyrun will\n\u003e cause cache misses, i.e., you will have to build from source every time. To use\n\u003e the cache, do _not_ override the Nixpkgs input.\n\n### Manual installation\n\nMake sure all of the dependencies are installed, and then run the following\ncommands in order:\n\n```bash\n# Clone the repository and move to the cloned location\ngit clone https://github.com/anyrun-org/anyrun \u0026\u0026 cd anyrun\n\n# Build all packages, and install the Anyrun binary\ncargo build --release\ncargo install --path anyrun/\n\n# Create the config directory and the plugins subdirectory\nmkdir -p ~/.config/anyrun/plugins\n\n# Copy all of the built plugins to the correct directory\ncp target/release/*.so ~/.config/anyrun/plugins\n\n# Copy the default config file\ncp examples/config.ron ~/.config/anyrun/config.ron\n```\n\n## Plugins\n\nAnyrun requires plugins to function, as they provide the results for input. The\nlibrary name after the plugin name is what you use for including the plugin\ninside the configuration. The list of plugins in this repository is as follows:\n\n- [Applications](plugins/applications/README.md) `libapplications.so`\n  - Search and run system \u0026 user specific desktop entries.\n- [Symbols](plugins/symbols/README.md) `libsymbols.so`\n  - Search unicode symbols.\n- [Rink](plugins/rink/README.md) `librink.so`\n  - Calculator \u0026 unit conversion.\n- [Shell](plugins/shell/README.md) `libshell.so`\n  - Run shell commands.\n- [Translate](plugins/translate/README.md) `libtranslate.so`\n  - Quickly translate text.\n- [Kidex](plugins/kidex/README.md) `libkidex.so`\n  - File search provided by [Kidex](https://github.com/Kirottu/kidex).\n- [Randr](plugins/randr/README.md) `librandr.so`\n  - Rotate and resize; quickly change monitor configurations on the fly.\n  - TODO: Only supports Hyprland, needs support for other compositors.\n- [Stdin](plugins/stdin/README.md) `libstdin.so`\n  - Turn Anyrun into a dmenu-like fuzzy selector.\n  - Should generally be used exclusively with the `--plugins` argument.\n- [Dictionary](plugins/dictionary/README.md) `libdictionary.so`\n  - Look up definitions for words\n- [Websearch](plugins/websearch/README.md) `libwebsearch.so`\n  - Search the web with configurable engines: Google, Ecosia, Bing, DuckDuckGo.\n- [Nix-run](plugins/nix-run/README.md) `libnix_run.so`\n  - `nix run` graphical applications straight from Anyrun.\n- [niri-focus](plugins/niri-focus/README.md) `libniri_focus.so`\n  - Focus active windows with fuzzy search on niri.\n- [Actions](plugins/actions/README.md) `libactions.so`\n  - Run power management actions or any custom commands.\n\n## Configuration\n\nThe default configuration directory is `$HOME/.config/anyrun` the structure of\nthe config directory is as follows and should be respected by plugins:\n\n```\n- anyrun/\n  - plugins/\n    - \u003cplugin dynamic libraries\u003e\n  - config.ron\n  - style.css\n  - \u003cany plugin specific config files\u003e\n```\n\nThe [default config file](examples/config.ron) contains the default values, and\nannotates all configuration options with comments on what they are and how to\nuse them.\n\n## Styling\n\nAnyrun supports [GTK4 CSS](https://docs.gtk.org/gtk4/css-properties.html) styling.\nThe style classes and widgets that use them are as follows:\n\n- No class, unique widget:\n  - `GtkText`: The main entry box\n  - `GtkWindow`: The main window\n- `.main`:\n  - `GtkBox`: The box that contains everything else\n- `.matches`:\n  - `GtkBox`: The box that contains all the results \u0026 info boxes\n- `.plugin`:\n  - `GtkBox`: The main plugin box\n  - `.info`:\n    - `GtkBox`: Box containing the plugin info\n    - `GtkImage`: Icon of the plugin\n    - `GtkLabel`: Name of the plugin\n- `.match`:\n  - `GtkBox`: The box containing all contents of a match\n  - `GtkImage`: The icon (if present)\n  - `.title`:\n    - `GtkLabel`: The title\n  - `.description`\n    - `GtkLabel`: The description (if present)\n\nRefer to the [default style](anyrun/res/style.css) for an example, and use `GTK_DEBUG=interactive anyrun`\nto edit styles live.\n\n## Arguments\n\nThe custom arguments for anyrun are as follows:\n\n- `--config-dir`, `-c`: Override the configuration directory\n\nThe rest of the arguments are automatically generated based on the config, and\ncan be used to override configuration parameters. For example if you want to\ntemporarily only run the Applications and Symbols plugins on the top side of the\nscreen, you would run\n`anyrun --plugins libapplications.so --plugins libsymbols.so --position top`.\n\n# Plugin development\n\nThe plugin API is intentionally very simple to use. This is all you need for a\nplugin:\n\n`Cargo.toml`:\n\n```toml\n#[package] omitted\n[lib]\ncrate-type = [\"cdylib\"] # Required to build a dynamic library that can be loaded by anyrun\n\n[dependencies]\nanyrun-plugin = { git = \"https://github.com/anyrun-org/anyrun\" }\nabi_stable = \"0.11.1\"\n# Any other dependencies you may have\n```\n\n`lib.rs`:\n\n```rs\nuse abi_stable::std_types::{RString, RVec, ROption};\nuse anyrun_plugin::*;\n\n#[init]\nfn init(config_dir: RString) {\n  // Your initialization code. This is run in another thread.\n  // The return type is the data you want to share between functions\n}\n\n#[info]\nfn info() -\u003e PluginInfo {\n  PluginInfo {\n    name: \"Demo\".into(),\n    icon: \"help-about\".into(), // Icon from the icon theme\n  }\n}\n\n#[get_matches]\nfn get_matches(input: RString) -\u003e RVec\u003cMatch\u003e {\n  // The logic to get matches from the input text in the `input` argument.\n  // The `data` is a mutable reference to the shared data type later specified.\n  vec![Match {\n    title: \"Test match\".into(),\n    icon: ROption::RSome(\"help-about\".into()),\n    use_pango: false,\n    description: ROption::RSome(\"Test match for the plugin API demo\".into()),\n    id: ROption::RNone, // The ID can be used for identifying the match later, is not required\n  }].into()\n}\n\n#[handler]\nfn handler(selection: Match) -\u003e HandleResult {\n  // Handle the selected match and return how anyrun should proceed\n  HandleResult::Close\n}\n```\n\nAnd that's it! That's all of the API needed to make runners. Refer to the\nplugins in the [plugins](plugins) folder for more examples.\n","funding_links":["https://github.com/sponsors/Kirottu"],"categories":["others","Rust","Tools"],"sub_categories":["System Integration and Automation"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanyrun-org%2Fanyrun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanyrun-org%2Fanyrun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanyrun-org%2Fanyrun/lists"}