├── .gitignore ├── src ├── ui │ └── mod.rs ├── protos │ ├── activate.proto │ ├── subscribe.proto │ ├── query.proto │ └── mod.rs ├── providers │ ├── default_provider.rs │ ├── dmenu.rs │ ├── archlinuxpkgs.rs │ ├── symbols.rs │ ├── unicode.rs │ ├── providerlist.rs │ ├── calc.rs │ ├── todo.rs │ ├── files.rs │ ├── clipboard.rs │ └── mod.rs ├── preview │ ├── mod.rs │ ├── clipboard_preview.rs │ └── files_preview.rs ├── renderers │ └── mod.rs ├── theme │ └── mod.rs ├── state │ └── mod.rs ├── keybinds.rs ├── config.rs └── main.rs ├── rust-toolchain.toml ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature_request.md │ └── bug_report.md └── workflows │ ├── nix.yml │ ├── nix_git.yml │ └── build.yml ├── resources ├── screenshot.png ├── themes │ └── default │ │ ├── preview.xml │ │ ├── keybind.xml │ │ ├── item_dmenu.xml │ │ ├── item_symbols.xml │ │ ├── item_unicode.xml │ │ ├── item_files.xml │ │ ├── item_todo.xml │ │ ├── item_archlinuxpkgs.xml │ │ ├── item_clipboard.xml │ │ ├── item_calc.xml │ │ ├── item.xml │ │ ├── item_providerlist.xml │ │ ├── style.css │ │ └── layout.xml └── config.toml ├── Cargo.toml ├── nix ├── package.nix └── modules │ ├── home-manager.nix │ └── nixos.nix ├── flake.nix ├── flake.lock ├── makefile └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .zed 3 | -------------------------------------------------------------------------------- /src/ui/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod window; 2 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "stable" 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [abenz1267] 2 | ko_fi: andrejbenz 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /resources/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottmckendry/walker/master/resources/screenshot.png -------------------------------------------------------------------------------- /src/protos/activate.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package pb; 4 | 5 | option go_package = "./pb"; 6 | 7 | message ActivateRequest { 8 | string provider = 1; 9 | string identifier = 2; 10 | string action = 3; 11 | string query = 4; 12 | string arguments = 5; 13 | } 14 | -------------------------------------------------------------------------------- /src/protos/subscribe.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package pb; 4 | 5 | option go_package = "./pb"; 6 | 7 | message SubscribeRequest { 8 | int32 interval = 1; 9 | string provider = 2; 10 | string query = 3; 11 | } 12 | 13 | message SubscribeResponse { 14 | string value = 2; 15 | } 16 | -------------------------------------------------------------------------------- /src/providers/default_provider.rs: -------------------------------------------------------------------------------- 1 | use crate::providers::Provider; 2 | 3 | #[derive(Debug)] 4 | pub struct DefaultProvider { 5 | name: String, 6 | } 7 | 8 | impl DefaultProvider { 9 | pub fn new(name: String) -> Self { 10 | Self { name } 11 | } 12 | } 13 | 14 | impl Provider for DefaultProvider { 15 | fn get_name(&self) -> &str { 16 | self.name.as_str() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Describe a feature you'd like to see in Walker 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Describe the feature** 10 | A clear and concise description of what the feature is. 11 | 12 | **Alternatives** 13 | Possible alternatives. 14 | 15 | **Describe the behaviour** 16 | Step by step description of the desired behaviour. 17 | -------------------------------------------------------------------------------- /src/providers/dmenu.rs: -------------------------------------------------------------------------------- 1 | use crate::providers::Provider; 2 | 3 | #[derive(Debug)] 4 | pub struct Dmenu { 5 | name: &'static str, 6 | } 7 | 8 | impl Dmenu { 9 | pub fn new() -> Self { 10 | Self { name: "dmenu" } 11 | } 12 | } 13 | 14 | impl Provider for Dmenu { 15 | fn get_name(&self) -> &str { 16 | self.name 17 | } 18 | 19 | fn get_item_layout(&self) -> String { 20 | include_str!("../../resources/themes/default/item_dmenu.xml").to_string() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/providers/archlinuxpkgs.rs: -------------------------------------------------------------------------------- 1 | use crate::providers::Provider; 2 | 3 | #[derive(Debug)] 4 | pub struct ArchLinuxPkgs { 5 | name: &'static str, 6 | } 7 | 8 | impl ArchLinuxPkgs { 9 | pub fn new() -> Self { 10 | Self { 11 | name: "archlinuxpkgs", 12 | } 13 | } 14 | } 15 | 16 | impl Provider for ArchLinuxPkgs { 17 | fn get_name(&self) -> &str { 18 | self.name 19 | } 20 | 21 | fn get_item_layout(&self) -> String { 22 | include_str!("../../resources/themes/default/item_archlinuxpkgs.xml").to_string() 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /resources/themes/default/preview.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 300 9 | 500 10 | 11 | 12 | 15 | true 16 | true 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /resources/themes/default/keybind.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | vertical 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "walker" 3 | version = "2.7.3" 4 | edition = "2024" 5 | 6 | [dependencies] 7 | gtk4 = { version = "^0.9.7", features = ["v4_6", "v4_12", "gio_v2_80"] } 8 | gtk4-layer-shell = "0.5.0" 9 | protobuf = "3.7.2" 10 | serde = { version = "1.0.219", features = ["derive"] } 11 | chrono = { version = "0.4", features = ["clock"] } 12 | config = "0.15.14" 13 | dirs = "6.0.0" 14 | notify = "8.2.0" 15 | poppler-rs = "0.25.0" 16 | cairo-rs = "0.21.1" 17 | gdk-pixbuf = "0.21.1" 18 | nucleo-matcher = "0.3.1" 19 | which = "8.0" 20 | new_mime_guess = "4.0.4" 21 | mime = "0.3.17" 22 | tokio = { version = "1.47.1", features = ["full"] } 23 | xdg = "3.0.0" 24 | 25 | [build-dependencies] 26 | protobuf-codegen = "3.4" 27 | protoc-bin-vendored = "3.0" 28 | -------------------------------------------------------------------------------- /.github/workflows/nix.yml: -------------------------------------------------------------------------------- 1 | name: Nix 2 | 3 | on: 4 | push: 5 | tags: 6 | - v* 7 | workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | name: Build 12 | runs-on: ubuntu-latest 13 | 14 | permissions: 15 | contents: read 16 | id-token: write 17 | 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | 22 | - name: Install Nix 23 | uses: DeterminateSystems/nix-installer-action@main 24 | 25 | - name: Set up Cachix 26 | uses: cachix/cachix-action@v16 27 | with: 28 | name: walker 29 | authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' 30 | 31 | - name: Build default package 32 | run: nix build -L --extra-substituters "https://walker.cachix.org" .#default --print-out-paths | cachix push walker -------------------------------------------------------------------------------- /.github/workflows/nix_git.yml: -------------------------------------------------------------------------------- 1 | name: Nix-Git 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | name: Build 12 | runs-on: ubuntu-latest 13 | 14 | permissions: 15 | contents: read 16 | id-token: write 17 | 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | 22 | - name: Install Nix 23 | uses: DeterminateSystems/nix-installer-action@main 24 | 25 | - name: Set up Cachix 26 | uses: cachix/cachix-action@v16 27 | with: 28 | name: walker-git 29 | authToken: '${{ secrets.CACHIX_GIT_AUTH_TOKEN }}' 30 | 31 | - name: Build default package 32 | run: nix build -L --extra-substituters "https://walker-git.cachix.org" .#default --print-out-paths | cachix push walker-git -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **Configs** 13 | Relevant config to reproduce. 14 | 15 | **To Reproduce** 16 | Steps to reproduce the behavior: 17 | 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots** 27 | If applicable, add screenshots to help explain your problem. 28 | 29 | **Desktop (please complete the following information):** 30 | 31 | - OS: [e.g. iOS] 32 | - Walker version 33 | - Elephant version 34 | 35 | **Additional context** 36 | Add any other context about the problem here. 37 | -------------------------------------------------------------------------------- /src/providers/symbols.rs: -------------------------------------------------------------------------------- 1 | use gtk4::{Builder, Label, ListItem}; 2 | 3 | use crate::{protos::generated_proto::query::query_response::Item, providers::Provider}; 4 | 5 | #[derive(Debug)] 6 | pub struct Symbols { 7 | name: &'static str, 8 | } 9 | 10 | impl Symbols { 11 | pub fn new() -> Self { 12 | Self { name: "symbols" } 13 | } 14 | } 15 | 16 | impl Provider for Symbols { 17 | fn get_name(&self) -> &str { 18 | self.name 19 | } 20 | 21 | fn get_item_layout(&self) -> String { 22 | include_str!("../../resources/themes/default/item_symbols.xml").to_string() 23 | } 24 | 25 | fn image_transformer(&self, b: &Builder, _: &ListItem, item: &Item) { 26 | if let Some(image) = b.object::