{"id":44372935,"url":"https://github.com/franzos/panther","last_synced_at":"2026-02-11T20:28:11.292Z","repository":{"id":211247597,"uuid":"726610453","full_name":"franzos/panther","owner":"franzos","description":"[Mirror] My guix channel \"panther\"","archived":false,"fork":false,"pushed_at":"2026-02-08T17:03:06.000Z","size":3209,"stargazers_count":14,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-08T20:54:12.122Z","etag":null,"topics":["guix","guix-channel","guix-home"],"latest_commit_sha":null,"homepage":"https://codeberg.org/gofranz/panther","language":"Scheme","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/franzos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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":"2023-12-02T21:37:29.000Z","updated_at":"2026-02-08T17:03:10.000Z","dependencies_parsed_at":"2025-12-01T15:06:48.297Z","dependency_job_id":null,"html_url":"https://github.com/franzos/panther","commit_stats":null,"previous_names":["pantherxos/panther"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/franzos/panther","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzos%2Fpanther","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzos%2Fpanther/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzos%2Fpanther/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzos%2Fpanther/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/franzos","download_url":"https://codeload.github.com/franzos/panther/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzos%2Fpanther/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29343880,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T20:11:40.865Z","status":"ssl_error","status_checked_at":"2026-02-11T20:10:41.637Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["guix","guix-channel","guix-home"],"created_at":"2026-02-11T20:28:10.555Z","updated_at":"2026-02-11T20:28:11.284Z","avatar_url":"https://github.com/franzos.png","language":"Scheme","funding_links":[],"categories":[],"sub_categories":[],"readme":"# My guix channel \"panther\"\n\nThis repository contains GUIX package defintions maintained primarily by [Franz Geffke](https://gofranz.com).\n\n## Channel Definition\n\n```scheme\n(cons* (channel\n        (name 'pantherx)\n        (url \"https://codeberg.org/gofranz/panther.git\")\n        ;; Enable signature verification\n        (introduction\n         (make-channel-introduction\n          \"54b4056ac571611892c743b65f4c47dc298c49da\"\n          (openpgp-fingerprint\n           \"A36A D41E ECC7 A871 1003  5D24 524F EB1A 9D33 C9CB\"))))\n       %default-channels)\n```\n\n## Substitute Server\n\n**URL:** `https://substitutes.guix.gofranz.com`\n\n```scheme\n;; Public key\n(public-key\n (ecc\n  (curve Ed25519)\n  (q #0096373009D945F86C75DFE96FC2D21E2F82BA8264CB69180AA4F9D3C45BAA47#)))\n```\n\n```bash\n# Authorize\nsudo guix archive --authorize \u003c /path/to/key.pub\n```\n\nAlready configured if using `%panther-base-services` or `%panther-desktop-services`.\n\n## Home Services\n\n### Darkman\n\nDarkman is a framework for managing dark/light mode transitions. It automatically switches themes based on sunrise/sunset times.\n\n**Usage:**\n\n```scheme\n(use-modules (px home services darkman))\n\n;; Default configuration (uses geoclue2 for location)\n(service home-darkman-service-type)\n\n;; With manual coordinates\n(service home-darkman-service-type\n         (home-darkman-configuration\n          (latitude 52.52)\n          (longitude 13.405)\n          (use-geoclue? #f)))\n\n;; Custom configuration\n(service home-darkman-service-type\n         (home-darkman-configuration\n          (latitude 37.7749)\n          (longitude -122.4194)\n          (use-geoclue? #f)\n          (dbus-server? #t)\n          (portal? #f)))\n```\n\n**Mode-switching scripts:**\n\nPlace executable scripts in:\n- `~/.local/share/dark-mode.d/` - Executed when switching to dark mode\n- `~/.local/share/light-mode.d/` - Executed when switching to light mode\n\n**Manual control:**\n\n```bash\ndarkman get          # Show current mode\ndarkman set dark     # Switch to dark mode\ndarkman set light    # Switch to light mode\ndarkman toggle       # Toggle between modes\n```\n\n### Foot Server\n\nFoot server mode runs the foot terminal emulator as a background daemon, allowing fast terminal startup with `footclient`.\n\n**Usage:**\n\n```scheme\n(use-modules (px home services foot))\n\n;; Default configuration\n(service home-foot-server-service-type)\n\n;; With custom config file\n(service home-foot-server-service-type\n         (home-foot-server-configuration\n          (config-file \"/path/to/foot.ini\")))\n\n;; With hold option (remain open after child exits)\n(service home-foot-server-service-type\n         (home-foot-server-configuration\n          (hold? #t)))\n```\n\n**Connecting to server:**\n\n```bash\nfootclient           # Open new terminal window\nfootclient -- htop   # Open terminal running specific command\n```\n\n**Service management:**\n\n```bash\nherd start foot-server    # Start server\nherd stop foot-server     # Stop server\nherd status foot-server   # Check status\n```\n\n### Podman Healthcheckd\n\nRuns podman container healthchecks on systems without systemd.\n\n**Usage:**\n\n```scheme\n(use-modules (px services containers))\n\n;; Default configuration\n(service home-podman-healthcheckd-service-type)\n\n;; With custom log level\n(service home-podman-healthcheckd-service-type\n         (home-podman-healthcheckd-configuration\n          (log-level \"debug\")))\n```\n\n**Service management:**\n\n```bash\nherd start podman-healthcheckd    # Start daemon\nherd stop podman-healthcheckd     # Stop daemon\nherd status podman-healthcheckd   # Check status\n```\n\n## System Services\n\n### IOTA Node\n\nRun an IOTA full node or validator node.\n\n**Prerequisites:**\n\n1. Create configuration file (e.g., `/etc/iota/fullnode.yaml`)\n2. Download genesis blob for your network (mainnet/testnet/devnet)\n3. For validators: generate key pairs\n\n**Usage:**\n\n```scheme\n(use-modules (px services iota))\n\n;; Basic full node\n(service iota-node-service-type\n         (iota-node-configuration\n          (config-file \"/etc/iota/fullnode.yaml\")))\n\n;; With custom settings\n(service iota-node-service-type\n         (iota-node-configuration\n          (config-file \"/etc/iota/validator.yaml\")\n          (data-directory \"/var/lib/iota\")\n          (log-file \"/var/log/iota-node.log\")\n          (log-level \"info,iota_core=debug,consensus=debug\")))\n```\n\n**Service management:**\n\n```bash\nherd status iota-node   # Check status\nherd start iota-node    # Start node\nherd stop iota-node     # Stop node\n```\n\n**Configuration options:**\n\n| Field | Default | Description |\n|-------|---------|-------------|\n| `config-file` | (required) | Path to fullnode.yaml or validator.yaml |\n| `user` | `\"iota\"` | System user to run as |\n| `group` | `\"iota\"` | System group |\n| `data-directory` | `\"/var/lib/iota\"` | Database and state storage |\n| `log-file` | `\"/var/log/iota-node.log\"` | Log output location |\n| `log-level` | `\"info,iota_core=debug,...\"` | Rust log levels |\n\n**Required ports:**\n\n- TCP/9000 - JSON-RPC\n- UDP/8084 - P2P sync\n\n### Tailscale\n\nTailscale is a zero-config VPN built on WireGuard.\n\n**Usage:**\n\n```scheme\n(use-modules (px services networking))\n\n(service tailscale-service-type)\n```\n\n**After reconfiguration:**\n\n```bash\ntailscale up         # Authenticate and connect\ntailscale status     # Check connection status\n```\n\n## System Configuration\n\nThis channel provides pre-configured building blocks for Guix system definitions. Import with:\n\n```scheme\n(use-modules (px system panther))\n```\n\n### Packages\n\n| Variable | Description |\n|----------|-------------|\n| `%panther-base-packages` | Extends `%base-packages` with wpa-supplicant, libimobiledevice, neovim |\n| `%panther-desktop-packages` | Adds U2F/FIDO2 support (pam-u2f, libu2f-*) and blueman |\n\n### Services\n\n| Variable | Description |\n|----------|-------------|\n| `%panther-base-services` | Extends `%base-services` with panther channel and substitute servers |\n| `%panther-desktop-services` | Full desktop services including display managers, audio, and udev rules for security tokens |\n| `%panther-desktop-services-minimal` | Desktop services without login/display managers and audio (for custom greeter setups) |\n\n### Operating Systems\n\n| Variable | Description |\n|----------|-------------|\n| `%panther-os` | Base OS with `%panther-base-services` and `%panther-base-packages` |\n| `%panther-desktop-os` | Desktop OS with `%panther-desktop-services` and `%panther-desktop-packages` |\n\n### When to Use What\n\n- **Headless server**: Use `%panther-os` directly or inherit from it\n- **Desktop with GDM/SDDM**: Use `%panther-desktop-os` or `%panther-desktop-services`\n- **Desktop with custom greeter** (greetd, etc.): Use `%panther-desktop-services-minimal` to avoid conflicts\n\n### Usage\n\nInherit from an OS definition and customize:\n\n```scheme\n(operating-system\n  (inherit %panther-os)\n  (host-name \"my-workstation\")\n  (timezone \"Europe/Berlin\")\n  ;; Add your file-systems, users, etc.\n  (services\n   (cons* (service openssh-service-type)\n          %panther-base-services)))\n```\n\nOr use just the services/packages in your own OS:\n\n```scheme\n(operating-system\n  ;; ...your configuration...\n  (packages\n   (cons* my-extra-package\n          %panther-desktop-packages))\n  (services\n   (modify-services %panther-desktop-services-minimal\n     (elogind-service-type config =\u003e\n       (elogind-configuration\n         (inherit config)\n         (handle-lid-switch 'suspend))))))\n```\n\n## Time Travel\n\nWhen things break because of upstream changes, this will allow you to run a future guix commit, to fix and test the channel without updating the whole system.\n\nCreate a channels file that includes only the guix channel:\n\n```scheme\n(list (channel\n        (name 'guix)\n        (url \"https://codeberg.org/guix/guix.git\")\n        (branch \"master\")\n        ;; Specify commit\n        (commit \"dc1a77267f03e37b331c8597b066c5ee52a75445\")\n        (introduction\n          (make-channel-introduction\n            \"9edb3f66fd807b096b48283debdcddccfea34bad\"\n            (openpgp-fingerprint\n              \"BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA\")))))\n```\n\nSpawn a shell for a clean environment:\n\n```bash\nguix shell --container --nesting --network openssl nss-certs coreutils guix\n```\n\nAnd build the target package:\n\n```bash\nguix time-machine --channels=default-channel.scm -- build -L panther pimsync\n```\n\n## Known Issues\n\n- **Channel modules shadowed by system profile** ([bug #74396](https://issues.guix.gnu.org/74396)): After `guix pull`, new package versions may not be available until you also run `guix system reconfigure`. Workaround: keep system and user guix in sync, or use `guix time-machine -C ~/.config/guix/channels.scm -- shell \u003cpackage\u003e`.\n\n## Upstream\n\nPackages here may be upstreamed to Guix if they meet Guix's free software requirements. Please include me in the copyright notice if you do.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffranzos%2Fpanther","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffranzos%2Fpanther","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffranzos%2Fpanther/lists"}