├── .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 |
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::