fix(hyprshell): add missing key field and upgrade config to v3 - #897
Conversation
The hyprshell config was using version 1 format and missing the explicit `key = "Tab"` field in [windows.switch], preventing Super+Tab window switching from working.
|
You do not have enough credits to review this pull request. Please purchase more credits to continue. |
Summary of ChangesHello @shunkakinoki, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request addresses a critical issue preventing the Super+Tab key combination from activating the window switcher in Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughUpdated hyprshell config: root Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Mesa DescriptionTL;DRFixed Super+Tab window switching for hyprshell by upgrading the hyprshell config to v3, adding a missing What changed?
Description generated by Mesa. Update settings |
There was a problem hiding this comment.
Code Review
This pull request updates the hyprshell configuration file, upgrading its version and adding a key for window switching. The changes are clear, directly address the issue described in the pull request, and appear to be correct. I have no suggestions for improvement.
There was a problem hiding this comment.
Pull request overview
This PR fixes Super+Tab window switching functionality in hyprshell by adding a missing key binding field and upgrading the configuration format. The hyprshell daemon runs in the background on desktop systems and handles window switching, as indicated by the comment in config/hyprland/hyprland.conf line 261.
Changes:
- Upgraded hyprshell config version from 1 to 3
- Added explicit
key = "Tab"field to[windows.switch]section to enable Super+Tab window switching
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
hyprshell only supports alt/ctrl/super as modifiers, but the Framework key emits Hyper (Ctrl+Alt+Shift+Super) via keyd. Add explicit Tab mapping in cmd_hyper layer to emit Super+Tab instead.
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
config/hyprshell/config.toml
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@config/hyprshell/config.toml`:
- Around line 1-8: This TOML config must be migrated to RON because hyprshell
v4.6.0+ no longer reads TOML; create a new config.ron representing the same
settings (windows { scale: 8.0, switch: Some(Switch { modifier: "super", key:
"Tab", .. }), .. } or equivalent RON shape used by hyprshell) ensuring you
preserve the values for scale, modifier and key and use RON's explicit None (or
Option) representation for any optional fields; replace or remove config.toml
and ensure hyprshell loads config.ron instead.
| version = 3 | ||
|
|
||
| [windows] | ||
| scale = 8.0 | ||
|
|
||
| [windows.switch] | ||
| modifier = "super" | ||
| key = "Tab" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find flake.lock and check for hyprshell version
find . -name "flake.lock" -type f | head -5Repository: shunkakinoki/dotfiles
Length of output: 77
🏁 Script executed:
#!/bin/bash
# Search for hyprshell references in nix files
rg -n 'hyprshell' --type=nix -C3Repository: shunkakinoki/dotfiles
Length of output: 1415
🏁 Script executed:
#!/bin/bash
# Also check for any package or version files
fd -type f \( -name "flake.nix" -o -name "*.nix" \) | head -20Repository: shunkakinoki/dotfiles
Length of output: 235
🏁 Script executed:
#!/bin/bash
# Extract hyprshell version info from flake.lock
grep -A10 '"hyprshell"' flake.lockRepository: shunkakinoki/dotfiles
Length of output: 47
🏁 Script executed:
#!/bin/bash
# Read the flake.lock file to find hyprshell entry
cat flake.lock | grep -i hyprshell -A10 -B2Repository: shunkakinoki/dotfiles
Length of output: 47
🏁 Script executed:
#!/bin/bash
# Also check the flake.lock structure
head -50 flake.lockRepository: shunkakinoki/dotfiles
Length of output: 1183
🏁 Script executed:
#!/bin/bash
# Use python to parse flake.lock and find hyprshell
python3 << 'EOF'
import json
with open('flake.lock', 'r') as f:
lock = json.load(f)
# Search for hyprshell in nodes
if 'nodes' in lock:
for node_name, node_data in lock['nodes'].items():
if 'hyprshell' in node_name.lower():
print(f"Found: {node_name}")
print(json.dumps(node_data, indent=2))
# Also check if hyprshell is a direct input
root = lock.get('nodes', {}).get('root', {})
if 'inputs' in root:
if 'hyprshell' in root['inputs']:
print("\nhyprshell is a direct input")
hyprshell_ref = root['inputs']['hyprshell']
print(f"Reference: {hyprshell_ref}")
EOFRepository: shunkakinoki/dotfiles
Length of output: 47
🏁 Script executed:
#!/bin/bash
# Also check the flake.nix to see how hyprshell is declared
cat flake.nix | grep -A20 -B5 'hyprshell'Repository: shunkakinoki/dotfiles
Length of output: 47
🏁 Script executed:
#!/bin/bash
# Check if flake.nix exists
ls -la flake.nixRepository: shunkakinoki/dotfiles
Length of output: 123
🏁 Script executed:
#!/bin/bash
# Search for all nix files that might reference hyprshell or define packages
find . -name "*.nix" -exec grep -l 'hyprshell' {} \;Repository: shunkakinoki/dotfiles
Length of output: 182
🏁 Script executed:
#!/bin/bash
# Read the config/hyprshell/default.nix to understand the setup
cat config/hyprshell/default.nixRepository: shunkakinoki/dotfiles
Length of output: 179
🏁 Script executed:
#!/bin/bash
# Extract the hyprshell section from flake.nix
cat flake.nix | grep -A20 -B5 'hyprshell'Repository: shunkakinoki/dotfiles
Length of output: 47
🏁 Script executed:
#!/bin/bash
# Also check the entire inputs section to understand where hyprshell comes from
sed -n '/^ inputs = {/,/^ };/p' flake.nixRepository: shunkakinoki/dotfiles
Length of output: 1757
🏁 Script executed:
#!/bin/bash
# Extract nixpkgs versions from flake.lock
python3 << 'EOF'
import json
with open('flake.lock', 'r') as f:
lock = json.load(f)
nodes = lock.get('nodes', {})
# Find nixpkgs entries
for name in ['nixpkgs', 'nixpkgs-unstable', 'nixpkgs-stable', 'nixpkgs-nightly']:
if name in nodes:
node = nodes[name]
if 'locked' in node:
print(f"\n{name}:")
print(f" rev: {node['locked'].get('rev', 'N/A')}")
print(f" lastModified: {node['locked'].get('lastModified', 'N/A')}")
print(f" url: {node['original'].get('url', 'N/A')}")
EOFRepository: shunkakinoki/dotfiles
Length of output: 376
🏁 Script executed:
#!/bin/bash
# Also check what the actual nixpkgs commit is for unstable
python3 << 'EOF'
import json
with open('flake.lock', 'r') as f:
lock = json.load(f)
# The main nixpkgs follows nixpkgs-unstable
unstable = lock['nodes']['nixpkgs-unstable']
print("nixpkgs-unstable locked state:")
print(json.dumps(unstable, indent=2))
EOFRepository: shunkakinoki/dotfiles
Length of output: 458
🌐 Web query:
hyprshell v4.6.0 TOML RON migration release notes
💡 Result:
Hyprshell v4.6.0 (released 2025-09-04) includes a config-format migration item in its changelog:
- Feature: “added toml → ron migration” with the note that TOML support was dropped because it “can’t store
Nonevalues”. (github.com) - Related in the same release: “better config migrations (allow multi version migrations)” and a bugfix to “use toml extension on lookup config file”. (github.com)
Citations:
- 1: https://github.com/H3rmt/hyprshell/releases/tag/v4.6.0
- 2: https://github.com/H3rmt/hyprshell/releases/tag/v4.6.0
🌐 Web query:
hyprshell nixpkgs unstable version 2024
💡 Result:
hyprshell wasn’t in nixpkgs-unstable during 2024 (it had no upstream releases in 2024; its first releases show up in 2025). [1]
In current nixpkgs, hyprshell is packaged at version 4.9.2. [2][3]
Sources: lib.rs crate release history [1], MyNixOS package page [2], nixpkgs package.nix (master) [3].
🌐 Web query:
hyprshell config.toml vs config.ron support
💡 Result:
Hyprshell’s current config format is RON:
hyprshell config generatecreates~/.config/hyprshell/config.ron. [2]- TOML (
config.toml) is no longer supported: in v4.6.0 (2025-09-04) Hyprshell added a TOML → RON migration and explicitly dropped TOML (reason given: TOML can’t representNonevalues needed by the config). [1]
So: use config.ron (or JSON5 if you enabled that feature flag), not config.toml. [2]
Migrate config.toml to config.ron — hyprshell v4.6.0+ no longer supports TOML format.
hyprshell dropped TOML support in v4.6.0 (September 2025) because it cannot represent None values. The current nixpkgs packages hyprshell v4.9.2, which expects config.ron. When you rebuild your flake without pinning a specific hyprshell version, this config.toml will be silently ignored and your configuration won't load. Convert to RON format now to avoid breakage.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@config/hyprshell/config.toml` around lines 1 - 8, This TOML config must be
migrated to RON because hyprshell v4.6.0+ no longer reads TOML; create a new
config.ron representing the same settings (windows { scale: 8.0, switch:
Some(Switch { modifier: "super", key: "Tab", .. }), .. } or equivalent RON shape
used by hyprshell) ensuring you preserve the values for scale, modifier and key
and use RON's explicit None (or Option) representation for any optional fields;
replace or remove config.toml and ensure hyprshell loads config.ron instead.
Add styles.css with Dracula color scheme from upstream hyprshell css-examples. Wire it up via xdg.configFile in default.nix.
Summary
key = "Tab"field to[windows.switch]sectionRoot cause
The config was missing the explicit
keyfield and using an outdated version 1 format. Withoutkey = "Tab", hyprshell didn't know which key to bind for window switching.Test plan
make buildsucceedsmake switchsucceedsSummary by cubic
Upgrade hyprshell to v3, add key = "Tab" in [windows.switch], map Framework+Tab to Super+Tab in keyd to fix Super+Tab switching, and include Dracula theme styles via styles.css.
Written for commit ca76f65. Summary will update on new commits.