{"id":42529455,"url":"https://github.com/imvaskel/soteria","last_synced_at":"2026-01-28T16:12:18.127Z","repository":{"id":239511269,"uuid":"799665120","full_name":"imvaskel/soteria","owner":"imvaskel","description":"A GTK-based polkit authentication agent","archived":false,"fork":false,"pushed_at":"2026-01-16T14:00:34.000Z","size":197,"stargazers_count":113,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-16T17:26:47.977Z","etag":null,"topics":["gtk","gui","polkit","relm4","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imvaskel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-12T20:00:48.000Z","updated_at":"2026-01-16T16:11:20.000Z","dependencies_parsed_at":"2024-05-28T05:47:53.898Z","dependency_job_id":"136790b0-3e1d-49fa-9ad1-999a57b4d5f3","html_url":"https://github.com/imvaskel/soteria","commit_stats":null,"previous_names":["imvaskel/soteria"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/imvaskel/soteria","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imvaskel%2Fsoteria","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imvaskel%2Fsoteria/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imvaskel%2Fsoteria/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imvaskel%2Fsoteria/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imvaskel","download_url":"https://codeload.github.com/imvaskel/soteria/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imvaskel%2Fsoteria/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28846861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["gtk","gui","polkit","relm4","rust"],"created_at":"2026-01-28T16:12:17.591Z","updated_at":"2026-01-28T16:12:18.122Z","avatar_url":"https://github.com/imvaskel.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Soteria\n\nSoteria is a Polkit authentication agent written in GTK designed to be used with any desktop environment.\n\n\u003cimg alt=\"Example authentication popup\" src=\".github/example_popup.png\" width=50% height=50% \u003e\u003c/image\u003e\n\n[Installation](#installation) •\n[Why?](#why) •\n[Usage](#usage)\n\n\u003c/div\u003e\n\n## Installation\n\n\u003e [!NOTE]\n\u003e Some users using non-desktop environments (sway, etc) have reported that ``XDG_SESSION_ID`` is not being properly imported.\n\u003e XDG session info is required for the agent to register itself to polkit.\n\u003e To fix this, you must import the proper environment variables (assuming systemd is managing the user session):\n\u003e ```\n\u003e dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP\n\u003e ```\n\u003e For more info, see NixOS/nixpkgs#373290.\n\n### Arch Linux\n\nSoteria is available on the [AUR](https://aur.archlinux.org/packages/soteria-git) as `soteria-git`\n. You can install it using an AUR helper:\n\n```bash\n# Using yay\nyay -S soteria-git\n# or using paru\nparu -S soteria-git\n```\nor manually: \n```bash\ngit clone https://aur.archlinux.org/soteria-git.git\ncd soteria-git\nmakepkg -si\n```\nThis should place Soteria into `/usr/lib/soteria-polkit/soteria`\n\n### NixOS\n\nSoteria is available as `soteria`. There is a also NixOS module to enable it under ``security.soteria.enable``.\n\n### Manual Installation\n    \n#### Requirements\nSoteria requires Rust \u003e= 1.85 (edition 2024), GTK4 development headers (`libgtk-4-dev` / `gtk4-devel`), Polkit development headers (`libpolkit-agent-1-dev`), and `gettext` for compiling translations (optional, only if you want them).\n\n\u003e [!NOTE]\n\u003e If your `polkit-agent-helper-1` executable is in a non-standard location (i.e. not `/usr/lib/polkit/polkit-agent-helper-1`), \n\u003e you should set up a configuration file at `~/.config/soteria/config.toml` (or `/etc/soteria/config.toml`) with:\n\u003e ```toml\n\u003e helper_path = \"/path/to/your/helper\"\n\u003e ```\n\nRun the following commands to build and install Soteria:\n\n```bash\ngit clone https://github.com/imvaskel/soteria\ncd soteria\n\n# Install binary\ncargo install --locked --path .\n\n# Install translations (locally, optional)\nmkdir -p ~/.local/share/locales\nfor file in po/*.po; do \\\n    lang=${file%.*}; \\\n    mkdir -p ~/.local/share/locales/${lang#po/}/LC_MESSAGES; \\\n    msgfmt $file -o ~/.local/share/locales/${lang#po/}/LC_MESSAGES/soteria.mo; \\\ndone\n\n# Run with local translations\nSOTERIA_LOCALEDIR=~/.local/share/locales soteria\n```\n\n\u003e [!NOTE]\n\u003e By default, Soteria looks for translations in `/usr/share/locale`. Use `SOTERIA_LOCALEDIR` to override this path, as shown above.\n\nThis should place Soteria into ~/.cargo/bin and you can run it from there.\n\n## Usage\n\nSimply have your desktop run the `soteria` binary to have it register as your authentication agent. Once run, anytime an application requests polkit authentication, it should popup and prompt you to authenticate.\n\nFor Hyprland, this would look like:\n\n```conf\nexec-once = /path/to/soteria\n```\n\nYou may also like:\n\n```conf\nwindowrulev2=pin,class:gay.vaskel.soteria\n```\n\nThis makes sure that Soteria stays pinned to your current workspace.\n\nOther desktop environments should be similiar.\n\n## Why?\n\nWhen looking for a polkit authentication agent, I noticed that most were either extremely old, using a framework that I didn't like, or completely unstylable.\nAdditionally, most were hard to edit as they just called out to polkit's `libpolkit-agent` to do all the work. Because of this, I decided to put the work in to figure out how authentication agents worked.\n\nIt should be noted that this project does still call out to libpolkit-agent, but only via the polkit agent helper. This is because polkit\nuses root sending a dbus response to the polkit daemon to confirm authentication as the identity. I find it non-beneficial to put in\nthe work to maintain the security implications of a setuid binary.\n\n## Debugging\n\nIf you would like to debug why something went wrong, just run `RUST_LOG=debug soteria` and this will start it with debug logging, which should help you identify what's going wrong.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimvaskel%2Fsoteria","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimvaskel%2Fsoteria","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimvaskel%2Fsoteria/lists"}