Skip to content

fix(hyprshell): add missing key field and upgrade config to v3 - #897

Merged
shunkakinoki merged 3 commits into
mainfrom
fix/hyprshell-super-tab
Feb 23, 2026
Merged

fix(hyprshell): add missing key field and upgrade config to v3#897
shunkakinoki merged 3 commits into
mainfrom
fix/hyprshell-super-tab

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Feb 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • Upgraded hyprshell config from version 1 to version 3
  • Added missing key = "Tab" field to [windows.switch] section
  • Fixes Super+Tab window switching not being triggered

Root cause

The config was missing the explicit key field and using an outdated version 1 format. Without key = "Tab", hyprshell didn't know which key to bind for window switching.

Test plan

  • make build succeeds
  • make switch succeeds
  • Press Super+Tab to verify window switcher opens

Summary 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.

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.
Copilot AI review requested due to automatic review settings February 23, 2026 07:22
@mesa-dot-dev

mesa-dot-dev Bot commented Feb 23, 2026

Copy link
Copy Markdown

You do not have enough credits to review this pull request. Please purchase more credits to continue.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @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 hyprshell. The fix involves updating the configuration file to a newer version and explicitly defining the Tab key for window switching, ensuring proper functionality of this essential shortcut.

Highlights

  • Config Version Upgrade: Upgraded the hyprshell configuration file from version 1 to version 3.
  • Missing Key Field Added: Introduced the key = "Tab" field within the [windows.switch] section to explicitly define the key binding for window switching.
  • Super+Tab Window Switching Fix: Resolved an issue where Super+Tab window switching was not being triggered due to the missing key field and outdated config version.
Changelog
  • config/hyprshell/config.toml
    • Updated the configuration version from 1 to 3.
    • Added the key = "Tab" entry to the [windows.switch] section.
Activity
  • The author has provided a test plan, indicating steps to verify the fix, including building the project and confirming the window switcher functionality.
  • The author has confirmed that make build and make switch commands succeed.
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai

coderabbitai Bot commented Feb 23, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@shunkakinoki has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 20 minutes and 0 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between 5f1b5de and ca76f65.

📒 Files selected for processing (2)
  • config/hyprshell/default.nix
  • config/hyprshell/styles.css
📝 Walkthrough

Walkthrough

Updated hyprshell config: root version changed from 1 to 3 and key = "Tab" was added under the [windows.switch] table. Added a tab = M-tab mapping in config/keyd/default.conf to remap Framework+Tab to Super+Tab for the Hyprshell switcher.

Changes

Cohort / File(s) Summary
Hyprshell config
config/hyprshell/config.toml
Bumped version from 1 to 3; added key = "Tab" under [windows.switch].
Key mappings
config/keyd/default.conf
Added tab = M-tab mapping (Framework+Tab → Super+Tab) to invoke the Hyprshell window switcher.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Poem

🐰 Hopping through configs, I found a new tab,
Version now three — no need to nab,
Framework to Super, the keys dance and clap,
A quick little tweak — a happy rabbit's clap! 🥕✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main changes: upgrading hyprshell config from v1 to v3 and adding the missing key field, which aligns with the changeset.
Description check ✅ Passed The description is well-related to the changeset, explaining both the changes made and the root cause of the issue being fixed.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/hyprshell-super-tab

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@mesa-dot-dev

mesa-dot-dev Bot commented Feb 23, 2026

Copy link
Copy Markdown

Mesa Description

TL;DR

Fixed Super+Tab window switching for hyprshell by upgrading the hyprshell config to v3, adding a missing key = "Tab" field, and remapping Tab to Super+Tab in keyd.

What changed?

  • config/hyprshell/config.toml: Upgraded hyprshell config to version 3; added key = "Tab" under [windows.switch].
  • config/keyd/default.conf: Introduced a new keybinding to remap 'tab' to 'M-tab' (Super+tab) when the 'Framework' context is active for hyprshell.
  • config/hyprshell/default.nix: Updated to symlink styles.css to xdg.configFile."hyprshell/styles.css" with the force option.
  • config/hyprshell/styles.css: Added a new CSS file defining variables for UI element styling.

Description generated by Mesa. Update settings

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 1 file

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between 92f2a75 and 712d196.

📒 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.

Comment on lines +1 to +8
version = 3

[windows]
scale = 8.0

[windows.switch]
modifier = "super"
key = "Tab"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find flake.lock and check for hyprshell version
find . -name "flake.lock" -type f | head -5

Repository: shunkakinoki/dotfiles

Length of output: 77


🏁 Script executed:

#!/bin/bash
# Search for hyprshell references in nix files
rg -n 'hyprshell' --type=nix -C3

Repository: 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 -20

Repository: shunkakinoki/dotfiles

Length of output: 235


🏁 Script executed:

#!/bin/bash
# Extract hyprshell version info from flake.lock
grep -A10 '"hyprshell"' flake.lock

Repository: 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 -B2

Repository: shunkakinoki/dotfiles

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Also check the flake.lock structure
head -50 flake.lock

Repository: 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}")
EOF

Repository: 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.nix

Repository: 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.nix

Repository: 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.nix

Repository: 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')}")
EOF

Repository: 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))
EOF

Repository: 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 None values”. (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:


🌐 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 generate creates ~/.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 represent None values 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.
@shunkakinoki
shunkakinoki merged commit 49f381c into main Feb 23, 2026
26 checks passed
@shunkakinoki
shunkakinoki deleted the fix/hyprshell-super-tab branch February 23, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants