Skip to content

matic: hyprland settings and services - #754

Merged
shunkakinoki merged 63 commits into
mainfrom
hyprrefactor
Feb 7, 2026
Merged

matic: hyprland settings and services#754
shunkakinoki merged 63 commits into
mainfrom
hyprrefactor

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Feb 7, 2026

Copy link
Copy Markdown
Owner

Summary by cubic

Replaces Waybar/SwayNC/Wofi/Wlogout/wob/nm‑applet with HyprPanel and adds Walker, fingerprint unlock, and dynamic Steam Wallpaper Engine wallpapers. Restores the fullscreen opacity override and lowers Chrome/VS Code opacity to 90/85% for better contrast.

  • New Features

    • HyprPanel autostarts with a frosted, translucent theme (Nord accents), frosted notifications with always‑visible actions; fractional‑scale menus fixed; upower enabled; power key locks; blueman‑applet autostart disabled.
    • Walker launcher on Framework+Space (via keyd) with blur and Dracula theme; searchable commands for power, network, Bluetooth, screenshots, and recording.
    • Dynamic wallpaper via linux‑wallpaperengine (Home Manager service with Steam assets), set to Workshop wallpaper 3602362048.
    • UX: fingerprint auth in Hyprlock; Ghostty scratchpad (Super+Ctrl+T); screen recording toggle (Super+Shift+R); hyprshot/hyprpicker; wl‑clip‑persist + clipse; hyprsunset; Wayland‑first env vars with portal restarts; screen‑share indicator to a special workspace; greetd+tuigreet login; Ghostty forced Dracula; window opacity: Ghostty/Slack at 0.95/0.90, Chrome/VS Code at 0.90/0.85 with a fullscreen override; broadened Chrome class match to google‑chrome.*.
  • Migration

    • Remove configs for waybar, swaync, wofi, wlogout, wob, and nm‑applet; HyprPanel replaces these.
    • Wallpaper is now managed by linux‑wallpaperengine; ensure Steam assets are available. Walker opens with Framework+Space (not Super+D).
    • Remove the old custom wallpaper module (timewall/mpvpaper).

Written for commit f578378. Summary will update on new commits.

Copilot AI review requested due to automatic review settings February 7, 2026 10:47
@mesa-dot-dev

mesa-dot-dev Bot commented Feb 7, 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 introduces minor but impactful configuration updates to improve the user experience. It ensures that network management is readily accessible upon system startup and modifies the power button's default action to enhance system security and usability.

Highlights

  • Network Management: The Network Manager applet (nm-applet) has been configured to launch automatically with Hyprland, providing a tray icon for convenient WiFi connection management.
  • Power Button Behavior: The system's power button action has been updated to lock the screen instead of initiating a shutdown, enhancing security and preventing accidental power-offs.
Changelog
  • config/hyprland/hyprland.conf
    • Added exec-once = nm-applet --indicator to automatically start the Network Manager applet with Hyprland.
  • named-hosts/matic/default.nix
    • Configured services.logind.powerKey = "lock"; to change the power button's behavior to lock the screen.
Activity
  • No human activity (comments, reviews) has been recorded on this pull request yet.
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.

@mesa-dot-dev

mesa-dot-dev Bot commented Feb 7, 2026

Copy link
Copy Markdown

Mesa Description

TL;DR

Replaced Waybar/SwayNC/Wofi/Wlogout/wob/nm‑applet with HyprPanel and added Walker, fingerprint unlock, and dynamic Steam Wallpaper Engine wallpapers. Also restored fullscreen opacity override and lowered Chrome/VS Code opacity for better contrast.

What changed?

  • config/hyprland/hyprland.conf: Major update for Wayland compatibility and user experience; new environment variables, hyprsunset, wl-clip-persist added; outdated components removed; window/layer rules, animations, misc settings, ecosystem section, and app-specific rules updated; hotkeys comprehensively updated for new applications and utilities, transitioning screenshot functionality to hyprshot and integrating clipse and hyprpicker.
  • config/ghostty/config: Switched to a single Dracula theme; introduced new Vim-style keybindings for split navigation and creation; added configurations for split border styling and unfocused split highlighting.
  • config/hyprpanel/default.nix: New configuration file defining a comprehensive hyprpanel setup with various modules (workspaces, clock, system stats, connectivity, notifications); extensive 'Frosty Translucent' theming for the bar and 'frosted glass' for all menus; specific configurations for icons, dashboard shortcuts, fonts, notification behavior, scaling, and OSD.
  • named-hosts/matic/default.nix: Overhauled display and login management by replacing GDM and Blueman with greetd and tuigreet for a custom Hyprland session; configured upower and changed power button action to lock; enabled Steam and set up XDG portals for Hyprland; introduced linux-wallpaperengine service for animated wallpapers.

Description generated by Mesa. Update settings

@coderabbitai

coderabbitai Bot commented Feb 7, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Replaces legacy bar/launcher stack with HyprPanel and Walker, expands Hyprland environment/behaviour (env vars, window/layerrules, binds, animations), adds helper scripts (toggle-terminal, record-screen), moves login to greetd/tuigreet, updates packages/modules, and removes Waybar/Wofi/Wlogout/SwayNC configs.

Changes

Cohort / File(s) Summary
Hyprland core & config
config/hyprland/hyprland.conf, config/hyprland/default.nix, config/hyprland/hypridle.conf, config/hyprland/hyprlock.conf
Added Wayland env vars, portal-based startup sequencing, focus_on_activate/ecosystem flags, hyprsunset, clipboard persistence, new animations, extensive window/layerrules (PIP, screen-share, Ghostty scratchpad, clipse), and hyprlock UI layout changes.
Hyprland scripts
config/hyprland/scripts/toggle-terminal.sh, config/hyprland/scripts/record-screen.sh
New scripts: toggle-terminal.sh (manage Ghostty scratchpad) and record-screen.sh (wf-recorder toggle with PID, slurp region selection, notifications, timestamped output).
Panel & launcher
config/hyprpanel/default.nix, config/walker/config.toml, config/walker/default.nix, config/walker/style.css
Introduced HyprPanel Nix module with extensive theming and settings; added Walker launcher configuration, providers, keybinds, custom commands and CSS theme.
Login & host config
named-hosts/matic/default.nix, flake.nix
Switched to greetd/tuigreet session handling, enabled upower/power-profiles-daemon, added greetd wayland-session and portal entries; updated nixfmt formatter.
Packages & module wiring
home-manager/packages/default.nix, config/default.nix, home-manager/modules/default.nix, home-manager/modules/wallpaper/default.nix, config/hyprland/default.nix
Adjusted package lists (removed Waybar/Wofi/etc., added walker, wf-recorder, wl-clip-persist, discord, hyprpicker/hyprshot/hyprsunset), added wallpaper module and two hypr scripts as xdg.configFiles.
Removed legacy components
config/waybar/*, config/wofi/*, config/wlogout/*, config/swaync/*
Deleted Waybar, Wofi, Wlogout, and SwayNC config files and their Nix module exports.
Terminal & key mappings
config/ghostty/config, config/keyd/default.conf
Ghostty: simplified theme & added vim-style split navigation and split management binds; keyd: new launcher/zoom/fullscreen/split bindings.
Shell & tmux helpers
home-manager/programs/fish/*, home-manager/programs/tmux/*
Added Fish abbreviations and three tmux attach functions (tdo/tmo/tpo); updated tmux plugin list and replaced Dracula plugin with new status/theme config.
Tests & specs
spec/coverage_spec.sh, spec/hyprland_record_screen_spec.sh, spec/hyprland_toggle_terminal_spec.sh, config/claude/settings.json
Added specs for new hyprland scripts and included them in coverage; updated claude settings.json with model "opus" and CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS env flag.
Styling & walker assets
config/walker/style.css, config/hyprpanel/*
Added Walker CSS and extensive HyprPanel theming (Dracula-like palette and nested UI tokens).

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Slurp as "slurp (region picker)"
    participant WF as "wf-recorder"
    participant FS as "Filesystem"
    participant Notify as "notify-send"

    User->>Slurp: select region (if needed)
    Slurp-->>User: geometry
    User->>WF: start wf-recorder --geometry -> spawns process
    WF->>FS: write output file (timestamped in ~/Videos)
    WF-->>User: returns PID (written to /tmp/wf-recorder.pid)
    WF->>Notify: send "Recording started"
    Note over User,WF: On stop -> kill PID
    User->>WF: stop (kill)
    WF->>FS: finalize file
    WF->>Notify: send "Recording saved"
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~65 minutes

Possibly related PRs

  • shunkakinoki/dotfiles#749: overlaps Hyprland config and keyd hotkey changes.
  • shunkakinoki/dotfiles#751: related Hyprland wallpaper/startup and hyprland config edits.
  • shunkakinoki/dotfiles#345: overlaps package list edits (clipse/blueman and related package changes).

Suggested labels

enhancement

Poem

🐇 I hopped through dotfiles in the night,
swapped bars for panels, tuned keys just right,
a scratchpad popped, a recorder sings,
wallpapers dance on nimble springs,
tiny rabbit cheers the desktop bright.

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: replacing legacy Wayland utilities with HyprPanel and updating Hyprland settings/services on the matic host.
Description check ✅ Passed The pull request description is directly related to the changeset, detailing the replacement of legacy utilities with HyprPanel, addition of Walker launcher, dynamic wallpapers, and various UX improvements.

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

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch hyprrefactor

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.

@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 2 files

@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 introduces two configuration changes for the user's desktop environment. First, it adds the NetworkManager applet to the Hyprland startup sequence, providing a tray icon for network management. Second, it modifies the system's power button behavior to lock the screen instead of initiating a shutdown. Both changes are implemented correctly and improve the user experience on the configured machine.

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

Updates host and Hyprland configuration to improve desktop usability on the matic machine by changing power-button behavior and adding a network tray applet.

Changes:

  • Configure systemd-logind to lock the session on power key press instead of shutting down.
  • Autostart nm-applet in Hyprland to provide a NetworkManager tray icon for Wi‑Fi management.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
named-hosts/matic/default.nix Sets services.logind.powerKey = "lock" to lock on power button press.
config/hyprland/hyprland.conf Adds exec-once = nm-applet --indicator to start a NetworkManager tray applet.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@shunkakinoki shunkakinoki changed the title chore: update matic: hyprland settings and services Feb 7, 2026
…nv improvements

Add fingerprint authentication to hyprlock, hyprshot/hyprpicker/clipse keybindings,
hyprsunset blue light filter, wl-clip-persist clipboard persistence, Wayland-native
env vars, and improved window/layer rules based on omarchy-nix recommendations.

@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: 2

🤖 Fix all issues with AI agents
In `@config/hyprland/scripts/osd-brightness.sh`:
- Around line 19-20: Change the awk substr call to use 1-based indexing (replace
substr($4, 0, length($4)-1) with substr($4, 1, length($4)-1)) when computing
BRIGHTNESS, and guard the echo to WOBPIPE so it won't block if the pipe/device
isn't present (e.g., check [ -p "$WOBPIPE" ] or that it exists and is writable
before running echo "$BRIGHTNESS" >"$WOBPIPE"); reference the BRIGHTNESS
assignment and the echo to "$WOBPIPE" to locate the lines to modify.

In `@config/hyprland/scripts/osd-volume.sh`:
- Around line 35-39: Guard writes to the wob FIFO by checking the pipe exists
before echoing: in the branch that writes to "$WOBPIPE" (references to MUTED,
VOL, and WOBPIPE) wrap both write actions with a test like `[ -p "$WOBPIPE" ] &&
echo ...` (or an equivalent check) so the script won't block if wob hasn't
created the FIFO; apply the same guard to the MUTED and non-MUTED branches and
ensure the check is done before any redirection to "$WOBPIPE".
🧹 Nitpick comments (6)
config/ghostty/config (2)

31-34: Note: ctrl+l overrides the common "clear screen" shortcut.

ctrl+l is traditionally used to clear the terminal screen, and ctrl+h often maps to backspace. If you use these frequently, you may want to rebind them or use alternative keys. Otherwise, this Vim-style navigation is a solid setup.


46-50: Minor: split-divider color uses Nord palette while the theme is Dracula.

#88c0d0 is a Nord frost color, but the dark theme is set to Dracula (line 6) and the unfocused fill #1e1e2e is Catppuccin Mocha base. Consider aligning the divider color with your active theme palette for visual consistency, or add a comment noting the intentional mix.

config/hyprland/scripts/toggle-terminal.sh (1)

6-12: Race condition: sleep 0.3 may not be enough for Ghostty to register its window.

If Ghostty takes longer to initialize (e.g., first launch, slow disk), the togglespecialworkspace will fire before the window is ready. A more robust approach would be to poll for the window:

Optional: poll-based approach
 else
   ghostty --class="$CLASS" &
-  sleep 0.3
+  for _ in $(seq 1 20); do
+    hyprctl clients -j | grep -q "\"class\": \"$CLASS\"" && break
+    sleep 0.1
+  done
   hyprctl dispatch togglespecialworkspace scratchpad
 fi
config/hyprland/default.nix (1)

33-52: Consider reducing repetition with a helper function.

The four script entries share the same executable = true; force = true; pattern. A small helper could DRY this up:

♻️ Optional refactor

Add a helper in the let block:

  mkScript = name: {
    source = ./scripts/${name};
    executable = true;
    force = true;
  };

Then use it:

-  xdg.configFile."hypr/scripts/osd-volume.sh" = {
-    source = ./scripts/osd-volume.sh;
-    executable = true;
-    force = true;
-  };
-  xdg.configFile."hypr/scripts/osd-brightness.sh" = {
-    source = ./scripts/osd-brightness.sh;
-    executable = true;
-    force = true;
-  };
-  xdg.configFile."hypr/scripts/toggle-terminal.sh" = {
-    source = ./scripts/toggle-terminal.sh;
-    executable = true;
-    force = true;
-  };
-  xdg.configFile."hypr/scripts/record-screen.sh" = {
-    source = ./scripts/record-screen.sh;
-    executable = true;
-    force = true;
-  };
+  xdg.configFile."hypr/scripts/osd-volume.sh" = mkScript "osd-volume.sh";
+  xdg.configFile."hypr/scripts/osd-brightness.sh" = mkScript "osd-brightness.sh";
+  xdg.configFile."hypr/scripts/toggle-terminal.sh" = mkScript "toggle-terminal.sh";
+  xdg.configFile."hypr/scripts/record-screen.sh" = mkScript "record-screen.sh";
config/hyprland/hyprland.conf (2)

63-64: Two daemons chained with & in a single exec-once — consider splitting.

If wl-clip-persist crashes or exits, the & makes it a fire-and-forget background job with no supervision. More importantly, if clipse -listen is the foreground process and it exits, Hyprland won't restart either. Splitting into two exec-once lines gives each process independent lifecycle management and clearer logs.

♻️ Suggested change
-# Clipboard persistence
-exec-once = wl-clip-persist --clipboard regular & clipse -listen
+# Clipboard persistence
+exec-once = wl-clip-persist --clipboard regular
+exec-once = clipse -listen

333-334: Hardcoded ~/.config/hypr/scripts/ paths are fragile.

These paths assume XDG_CONFIG_HOME is ~/.config. While this is the default and the xdg.configFile entries in default.nix deploy there, using $XDG_CONFIG_HOME or $HOME/.config would be marginally more robust. That said, since the config itself is deployed via xdg.configFile, the assumption is consistent.

Comment on lines +19 to +20
BRIGHTNESS=$(brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}')
echo "$BRIGHTNESS" >"$WOBPIPE"

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 | 🟡 Minor

awk substr uses 1-based indexing; starting at 0 is non-portable.

substr($4, 0, length($4)-1) should use index 1. While GNU awk silently treats 0 as 1, this is not guaranteed across all awk implementations and is technically incorrect.

Also, if WOBPIPE doesn't exist (e.g., wob hasn't started yet), writing to it will block indefinitely. Consider guarding the write.

Proposed fix
-BRIGHTNESS=$(brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}')
-echo "$BRIGHTNESS" >"$WOBPIPE"
+BRIGHTNESS=$(brightnessctl -m | awk -F, '{print substr($4, 1, length($4)-1)}')
+[ -p "$WOBPIPE" ] && echo "$BRIGHTNESS" >"$WOBPIPE"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
BRIGHTNESS=$(brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}')
echo "$BRIGHTNESS" >"$WOBPIPE"
BRIGHTNESS=$(brightnessctl -m | awk -F, '{print substr($4, 1, length($4)-1)}')
[ -p "$WOBPIPE" ] && echo "$BRIGHTNESS" >"$WOBPIPE"
🤖 Prompt for AI Agents
In `@config/hyprland/scripts/osd-brightness.sh` around lines 19 - 20, Change the
awk substr call to use 1-based indexing (replace substr($4, 0, length($4)-1)
with substr($4, 1, length($4)-1)) when computing BRIGHTNESS, and guard the echo
to WOBPIPE so it won't block if the pipe/device isn't present (e.g., check [ -p
"$WOBPIPE" ] or that it exists and is writable before running echo "$BRIGHTNESS"
>"$WOBPIPE"); reference the BRIGHTNESS assignment and the echo to "$WOBPIPE" to
locate the lines to modify.

Comment thread config/hyprland/scripts/osd-volume.sh Outdated
Comment on lines +35 to +39
if [ "$MUTED" = "1" ]; then
echo 0 >"$WOBPIPE"
else
echo "$VOL" >"$WOBPIPE"
fi

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 | 🟡 Minor

Same WOBPIPE guard recommendation as the brightness script.

If wob hasn't started and the FIFO doesn't exist, the echo will block. Consider [ -p "$WOBPIPE" ] && echo ... to guard the write.

Proposed fix
 if [ "$MUTED" = "1" ]; then
-  echo 0 >"$WOBPIPE"
+  [ -p "$WOBPIPE" ] && echo 0 >"$WOBPIPE"
 else
-  echo "$VOL" >"$WOBPIPE"
+  [ -p "$WOBPIPE" ] && echo "$VOL" >"$WOBPIPE"
 fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if [ "$MUTED" = "1" ]; then
echo 0 >"$WOBPIPE"
else
echo "$VOL" >"$WOBPIPE"
fi
if [ "$MUTED" = "1" ]; then
[ -p "$WOBPIPE" ] && echo 0 >"$WOBPIPE"
else
[ -p "$WOBPIPE" ] && echo "$VOL" >"$WOBPIPE"
fi
🤖 Prompt for AI Agents
In `@config/hyprland/scripts/osd-volume.sh` around lines 35 - 39, Guard writes to
the wob FIFO by checking the pipe exists before echoing: in the branch that
writes to "$WOBPIPE" (references to MUTED, VOL, and WOBPIPE) wrap both write
actions with a test like `[ -p "$WOBPIPE" ] && echo ...` (or an equivalent
check) so the script won't block if wob hasn't created the FIFO; apply the same
guard to the MUTED and non-MUTED branches and ensure the check is done before
any redirection to "$WOBPIPE".

Add shell test coverage for osd-brightness, osd-volume, record-screen,
and toggle-terminal scripts. Update coverage_spec.sh to include them.
Add Walker (Wayland-native app runner) with Dracula-themed config,
Super+Space keybinding, blur layer rules, and service autostart.
Also fix shellcheck issues in wofi-wifi.sh and add its spec file.

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

1 issue found across 9 files (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="config/hyprland/scripts/wofi-wifi.sh">

<violation number="1" location="config/hyprland/scripts/wofi-wifi.sh:41">
P2: Use a fixed-string grep when matching SSIDs; regex matching can mis-handle SSIDs containing special characters or leading dashes, causing incorrect saved-connection detection.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread config/hyprland/scripts/wofi-wifi.sh Outdated
Map Framework+Space → Ctrl+Alt+Shift+Space in keyd, bind that combo
to launch Walker in Hyprland.

@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: 5

🤖 Fix all issues with AI agents
In `@config/hyprland/hyprland.conf`:
- Around line 34-35: The configuration sets both ELECTRON_OZONE_PLATFORM_HINT
and OZONE_PLATFORM to "wayland", which forces Chromium-based apps to Wayland and
can override the Electron hint; remove or comment out the hard override by
deleting or disabling the env entry for OZONE_PLATFORM (the line setting
OZONE_PLATFORM,wayland) so only ELECTRON_OZONE_PLATFORM_HINT remains, unless
you've explicitly tested all Chromium/Electron apps under forced Wayland and
want to keep the override.

In `@config/hyprland/scripts/wofi-wifi.sh`:
- Around line 7-16: The current NETWORKS pipeline uses nmcli -t and awk -F:
which breaks when SSIDs contain ":"; update the nmcli invocation to enable
escaping (add --escape yes) and change the awk parsing to handle escaped colons:
parse fields by recognizing only unescaped colons (or use awk's FPAT to capture
the three columns), then unescape SSID by replacing '\:' sequences back to ':'
before using $1, and keep the existing signal/security logic (refer to the
NETWORKS variable and the awk -F: block) so security detection uses the
corrected $2/$3 fields.
- Around line 33-38: The active-connection check uses CURRENT=$(nmcli -t -f NAME
connection show --active | head -1) which can return a non-WiFi connection
(e.g., Ethernet); change the check to only consider active WiFi connections by
querying active connections with type wifi (use nmcli connection show --active
--type wifi and the NAME field) and set CURRENT from that filtered result before
comparing to SSID so the script correctly detects if the selected SSID is
already connected.
- Line 41: The current check in the wofi-wifi.sh script uses grep -qx which
treats the SSID variable as a regex; change the invocation that tests nmcli
output (the line using nmcli -t -f NAME connection show | grep -qx "$SSID") to
use fixed-string matching by replacing grep -qx with grep -qFx so literal SSIDs
(the $SSID variable) containing regex metacharacters are matched exactly; update
that single pipeline in the script accordingly.

In `@config/walker/default.nix`:
- Around line 3-15: Replace the xdg.configFile entries that forcibly install
walker/config.toml and walker/themes/dracula/style.css with the walker module
options: remove the xdg.configFile."walker/config.toml" and
xdg.configFile."walker/themes/dracula/style.css" blocks and instead populate
programs.walker.config to provide the contents or path for config.toml and
programs.walker.themes to register the dracula style.css theme (referencing the
same source files ./config.toml and ./style.css); do not use force = true and
ensure the values conform to the programs.walker.config and
programs.walker.themes option shapes expected by the walker home-manager module.
🧹 Nitpick comments (7)
config/walker/config.toml (2)

29-55: Consider adding brief comments for the provider prefix mappings.

The prefix-to-provider mappings (e.g., = → calc, @ → websearch) are not immediately obvious to future readers. A short inline comment block would improve discoverability. As per coding guidelines: "Add comments for complex configurations" for TOML files.


1-8: Top-level keys are not sorted alphabetically.

As per coding guidelines: "Sort keys alphabetically when possible in configuration files." The top-level keys could be reordered (e.g., click_to_close, close_when_open, disable_mouse, force_keyboard_focus, …).

config/hyprland/hyprland.conf (1)

66-67: Split the two daemons into separate exec-once lines.

Running wl-clip-persist and clipse -listen on the same exec-once line via & ties their lifecycle together and makes it harder to debug if one fails silently. Each daemon should have its own exec-once entry for independent process management.

Proposed fix
 # Clipboard persistence
-exec-once = wl-clip-persist --clipboard regular & clipse -listen
+exec-once = wl-clip-persist --clipboard regular
+exec-once = clipse -listen
spec/hyprland_record_screen_spec.sh (1)

1-44: Spec tests are purely static (string-presence checks) with no behavioral coverage.

All tests just cat or head the script and check for substring presence. This verifies the script mentions certain tools but not that it uses them correctly. For example, checking for 'date' (line 40) could match a comment. Consider adding at least one behavioral test (similar to the argument validation block in the volume/brightness specs) that runs the script with mocks to verify toggle logic or error paths.

spec/hyprland_wofi_wifi_spec.sh (1)

1-44: Consistent with other specs — same static-only coverage note applies.

Same pattern as the other spec files. Consider adding behavioral tests with mock_bin_setup nmcli wofi notify-send to validate error handling and connection flows, similar to how osd-volume and osd-brightness specs validate argument handling.

config/walker/default.nix (1)

1-1: Unused parameters config and pkgs.

Neither config nor pkgs is referenced in this module. You can simplify to { ... }: to avoid lint noise, or prefix with _ if you want to keep them for future use.

Proposed fix
-{ config, pkgs, ... }:
+{ ... }:
spec/hyprland_osd_brightness_spec.sh (1)

13-21: Brittle: exact occurrence counts for raise and lower.

grep -c 'raise' and grep -c 'lower' assert exact counts of 2. Any future change (adding a comment, refactoring a case label) will break these tests. Consider using The output should include 'raise)' like the volume spec does, which is more resilient to incidental matches.

Proposed fix
 It 'handles raise action'
-When run bash -c "grep -c 'raise' '$SCRIPT'"
-The output should eq '2'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'raise)'
 End

 It 'handles lower action'
-When run bash -c "grep -c 'lower' '$SCRIPT'"
-The output should eq '2'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'lower)'
 End

Comment on lines +34 to +35
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = OZONE_PLATFORM,wayland

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 | 🟡 Minor

OZONE_PLATFORM=wayland may conflict with ELECTRON_OZONE_PLATFORM_HINT.

ELECTRON_OZONE_PLATFORM_HINT=wayland (line 34) lets Electron apps gracefully choose Wayland when available. OZONE_PLATFORM=wayland (line 35) is a hard override for all Chromium-based apps — it can break apps that don't fully support Wayland (e.g., some Electron apps may crash or have rendering issues). With both set, the hard override wins, making the hint redundant.

Consider removing OZONE_PLATFORM and relying on the hint alone, unless you've verified all your Chromium/Electron apps work under forced Wayland.

🤖 Prompt for AI Agents
In `@config/hyprland/hyprland.conf` around lines 34 - 35, The configuration sets
both ELECTRON_OZONE_PLATFORM_HINT and OZONE_PLATFORM to "wayland", which forces
Chromium-based apps to Wayland and can override the Electron hint; remove or
comment out the hard override by deleting or disabling the env entry for
OZONE_PLATFORM (the line setting OZONE_PLATFORM,wayland) so only
ELECTRON_OZONE_PLATFORM_HINT remains, unless you've explicitly tested all
Chromium/Electron apps under forced Wayland and want to keep the override.

Comment thread config/hyprland/scripts/wofi-wifi.sh Outdated
Comment on lines +7 to +16
NETWORKS=$(nmcli -t -f SSID,SIGNAL,SECURITY device wifi list --rescan yes |
awk -F: '!seen[$1]++ && $1!=""' |
sort -t: -k2 -rn |
awk -F: '{
signal=$2
sec=$3
lock=""
if (sec != "" && sec != "--") lock=" [secured]"
printf "%s %s%%%s\n", $1, signal, lock
}')

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 | 🟡 Minor

SSIDs containing colons break the awk field parsing.

nmcli -t uses : as the field separator, but SSIDs can legitimately contain : (e.g., My:Network). This would shift the $2 (SIGNAL) and $3 (SECURITY) fields, producing garbled output or wrong security detection.

Use \: escaping that nmcli -t provides, or switch to a different delimiter with nmcli -t -f SSID,SIGNAL,SECURITY --escape yes and handle the escapes, or use nmcli -f SSID,SIGNAL,SECURITY --terse --fields ... with \n-based record parsing.

🤖 Prompt for AI Agents
In `@config/hyprland/scripts/wofi-wifi.sh` around lines 7 - 16, The current
NETWORKS pipeline uses nmcli -t and awk -F: which breaks when SSIDs contain ":";
update the nmcli invocation to enable escaping (add --escape yes) and change the
awk parsing to handle escaped colons: parse fields by recognizing only unescaped
colons (or use awk's FPAT to capture the three columns), then unescape SSID by
replacing '\:' sequences back to ':' before using $1, and keep the existing
signal/security logic (refer to the NETWORKS variable and the awk -F: block) so
security detection uses the corrected $2/$3 fields.

Comment thread config/hyprland/scripts/wofi-wifi.sh Outdated
Comment on lines +33 to +38
# Check if already connected
CURRENT=$(nmcli -t -f NAME connection show --active | head -1)
if [ "$CURRENT" = "$SSID" ]; then
notify-send "WiFi" "Already connected to $SSID"
exit 0
fi

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 | 🟡 Minor

Active connection check doesn't filter by connection type.

nmcli -t -f NAME connection show --active | head -1 returns the first active connection regardless of type. If an Ethernet connection is active, it will be returned first, and the WiFi comparison will never match even if you're already connected to the selected SSID.

Consider filtering for wifi connections specifically:

Proposed fix
-CURRENT=$(nmcli -t -f NAME connection show --active | head -1)
+CURRENT=$(nmcli -t -f NAME,TYPE connection show --active | awk -F: '$2=="802-11-wireless"{print $1; exit}')
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Check if already connected
CURRENT=$(nmcli -t -f NAME connection show --active | head -1)
if [ "$CURRENT" = "$SSID" ]; then
notify-send "WiFi" "Already connected to $SSID"
exit 0
fi
# Check if already connected
CURRENT=$(nmcli -t -f NAME,TYPE connection show --active | awk -F: '$2=="802-11-wireless"{print $1; exit}')
if [ "$CURRENT" = "$SSID" ]; then
notify-send "WiFi" "Already connected to $SSID"
exit 0
fi
🤖 Prompt for AI Agents
In `@config/hyprland/scripts/wofi-wifi.sh` around lines 33 - 38, The
active-connection check uses CURRENT=$(nmcli -t -f NAME connection show --active
| head -1) which can return a non-WiFi connection (e.g., Ethernet); change the
check to only consider active WiFi connections by querying active connections
with type wifi (use nmcli connection show --active --type wifi and the NAME
field) and set CURRENT from that filtered result before comparing to SSID so the
script correctly detects if the selected SSID is already connected.

Comment thread config/hyprland/scripts/wofi-wifi.sh Outdated
fi

# Check if we have a saved connection
if nmcli -t -f NAME connection show | grep -qx "$SSID"; then

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 | 🟡 Minor

Use grep -qFx instead of grep -qx for literal SSID matching.

If the SSID contains regex metacharacters (e.g., ., +, *), grep -qx will treat them as regex, potentially matching unintended connection names. -F forces fixed-string matching.

Proposed fix
-if nmcli -t -f NAME connection show | grep -qx "$SSID"; then
+if nmcli -t -f NAME connection show | grep -qFx "$SSID"; then
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if nmcli -t -f NAME connection show | grep -qx "$SSID"; then
if nmcli -t -f NAME connection show | grep -qFx "$SSID"; then
🤖 Prompt for AI Agents
In `@config/hyprland/scripts/wofi-wifi.sh` at line 41, The current check in the
wofi-wifi.sh script uses grep -qx which treats the SSID variable as a regex;
change the invocation that tests nmcli output (the line using nmcli -t -f NAME
connection show | grep -qx "$SSID") to use fixed-string matching by replacing
grep -qx with grep -qFx so literal SSIDs (the $SSID variable) containing regex
metacharacters are matched exactly; update that single pipeline in the script
accordingly.

Comment thread config/walker/default.nix Outdated
Comment on lines +3 to +15
programs.walker = {
enable = true;
runAsService = true;
};

xdg.configFile."walker/config.toml" = {
source = ./config.toml;
force = true;
};
xdg.configFile."walker/themes/dracula/style.css" = {
source = ./style.css;
force = true;
};

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:

# Check the home-manager source for the walker module
find . -name "*walker*" -type f | head -20

Repository: shunkakinoki/dotfiles

Length of output: 47


🏁 Script executed:

# Search for any existing walker module references in the repo
rg -rn "programs\.walker" --type nix | head -20

Repository: shunkakinoki/dotfiles

Length of output: 98


🏁 Script executed:

# Check if there are any nixpkgs references or flake inputs that might contain walker module
cat flake.nix | head -50

Repository: shunkakinoki/dotfiles

Length of output: 1405


🏁 Script executed:

# Look for home-manager related files that might document walker
rg -rn "walker" --type nix | head -30

Repository: shunkakinoki/dotfiles

Length of output: 313


🏁 Script executed:

cat -n config/walker/default.nix

Repository: shunkakinoki/dotfiles

Length of output: 472


🏁 Script executed:

# Check the structure of home-manager configuration
ls -la home-manager/

Repository: shunkakinoki/dotfiles

Length of output: 521


🏁 Script executed:

# Look for any walker-related imports or configurations
rg -rn "import.*walker\|walker.*import" --type nix

Repository: shunkakinoki/dotfiles

Length of output: 47


🌐 Web query:

home-manager programs.walker module configuration files

💡 Result:

With the Home Manager module shipped by Walker (imports = [ inputs.walker.homeManagerModules.default ];), the module mainly materializes Walker’s normal on-disk config under $XDG_CONFIG_HOME/walker (usually ~/.config/walker). Walker itself also documents this as the configuration directory. [1]

What files/directories get created

  • Main config

    • ~/.config/walker/config.toml
    • In Home Manager you fill this via programs.walker.config = { ...; }; (it maps to Walker’s config.toml options). [1][2]
  • Themes

    • ~/.config/walker/themes/<theme-name>/style.css
    • ~/.config/walker/themes/<theme-name>/*.xml (GTK layout files; e.g. layout.xml, per-provider item layouts, etc.)
    • In Home Manager you typically provide these via programs.walker.themes."<theme-name>".style and programs.walker.themes."<theme-name>".layouts."<file>". The upstream README points you at resources/themes/default as the reference structure. [1]

Upstream reference locations (useful when translating to HM)

  • Default config reference: resources/config.toml. [2]
  • Default theme reference: resources/themes/default/*. [1]

Sources: Walker README (config + theming paths and HM example) [1]; Walker docs (config.toml default path + link to default config) [2].


🏁 Script executed:

cat -n home-manager/default.nix

Repository: shunkakinoki/dotfiles

Length of output: 1261


🏁 Script executed:

# Check if walker input is available in the flake
rg -n "walker" flake.nix

Repository: shunkakinoki/dotfiles

Length of output: 47


🏁 Script executed:

# Look for how modules are imported in the home-manager config
cat -n home-manager/modules/default.nix | head -40

Repository: shunkakinoki/dotfiles

Length of output: 234


🏁 Script executed:

ls -la config/

Repository: shunkakinoki/dotfiles

Length of output: 1967


🏁 Script executed:

cat -n config/default.nix

Repository: shunkakinoki/dotfiles

Length of output: 832


🏁 Script executed:

# Check if walker is directly available in home-manager (it should be in nixpkgs-unstable)
# Search for how programs.walker is implemented
rg -n "walker" --type nix home-manager/ | head -10

Repository: shunkakinoki/dotfiles

Length of output: 111


Use programs.walker.config and programs.walker.themes instead of xdg.configFile for walker configuration.

Home-manager's walker module is designed to manage config files through its own options. Instead of using xdg.configFile with force = true (which bypasses the module's configuration system), configure walker using:

  • programs.walker.config for config.toml settings
  • programs.walker.themes for theme files

This approach is idiomatic, maintains consistency with home-manager's module design, and prevents potential conflicts or maintenance issues if the walker module is updated.

🤖 Prompt for AI Agents
In `@config/walker/default.nix` around lines 3 - 15, Replace the xdg.configFile
entries that forcibly install walker/config.toml and
walker/themes/dracula/style.css with the walker module options: remove the
xdg.configFile."walker/config.toml" and
xdg.configFile."walker/themes/dracula/style.css" blocks and instead populate
programs.walker.config to provide the contents or path for config.toml and
programs.walker.themes to register the dracula style.css theme (referencing the
same source files ./config.toml and ./style.css); do not use force = true and
ensure the values conform to the programs.walker.config and
programs.walker.themes option shapes expected by the walker home-manager module.

The home-manager version doesn't include programs.walker module.
Use plain xdg.configFile for config and theme deployment instead.
services.logind.powerKey has been renamed to
services.logind.settings.Login.HandlePowerKey.
…ules

Add timewall flake input and configure it as a home-manager service on
matic for macOS Sequoia-style dynamic wallpapers using swww with fade
transitions. Remove static catppuccin wallpaper in favor of timewall
daemon.

Fix Hyprland v0.53 breaking changes: rename nofocus, stayfocused,
suppressevent, noanim to snake_case equivalents, add explicit `on`
values for center and blur, and update walker layerrules to use
match:namespace syntax.
The network module on-click now launches the floating wofi-wifi script
instead of opening nm-connection-editor as a separate window.
Kill existing wofi process if already open, allowing the waybar click
or Super+I keybind to act as a toggle to close the picker.
Replace 6+ fragmented tools (waybar, swaync, wofi, wlogout, wob,
nm-applet) with HyprPanel — an all-in-one panel with built-in bar,
notification daemon, WiFi/bluetooth menus, OSD, and power menu.
Dracula theme applied across all panels and menus.

@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

🤖 Fix all issues with AI agents
In `@config/hyprpanel/default.nix`:
- Line 70: There is a typo in the color value for the
"theme.bar.buttons.dashboard.icon" key: replace the incorrect hex "#8be8fd" with
the correct Dracula cyan "#8be9fd" so it matches the other uses (e.g., other
theme color entries and hyprland.conf); update only the hex literal for the
"theme.bar.buttons.dashboard.icon" setting.
🧹 Nitpick comments (3)
config/hyprland/hyprland.conf (1)

219-220: Fragile JSON-with-grep pattern for focus-or-launch.

grep -q '"class": "google-chrome"' on hyprctl clients -j output is brittle — it matches substrings and depends on exact JSON formatting. Consider using jq for reliable class matching, consistent with how you already use jq elsewhere in this file (e.g., lines 368–369).

♻️ Example using jq
-bind = $mod, G, exec, hyprctl clients -j | grep -q '"class": "google-chrome"' && hyprctl dispatch focuswindow class:google-chrome || google-chrome-stable
-bind = $mod, S, exec, hyprctl clients -j | grep -q '"class": "Slack"' && hyprctl dispatch focuswindow class:Slack || slack
+bind = $mod, G, exec, hyprctl clients -j | jq -e '[.[] | select(.class == "google-chrome")] | length > 0' > /dev/null && hyprctl dispatch focuswindow class:google-chrome || google-chrome-stable
+bind = $mod, S, exec, hyprctl clients -j | jq -e '[.[] | select(.class == "Slack")] | length > 0' > /dev/null && hyprctl dispatch focuswindow class:Slack || slack
home-manager/packages/default.nix (1)

21-21: clipse is in the cross-platform package list but is only used on Wayland.

clipse (line 21) is in the top-level list shared across all platforms (including macOS/Darwin), but it's only referenced in the Hyprland config (clipse -listen on line 58, ghostty -e clipse on line 337). Consider moving it to the lib.optionals (stdenv.isLinux && isDesktop) block alongside wl-clip-persist and cliphist.

named-hosts/matic/default.nix (1)

129-135: Consider adding DesktopNames=Hyprland to the session .desktop file.

Some XDG portal and environment detection logic relies on DesktopNames to identify the session type. While programs.hyprland handles portal configuration at the system level, adding this field improves compatibility with tools that inspect the session desktop entry.

Proposed change
         environment.etc."greetd/wayland-sessions/hyprland.desktop".text = ''
           [Desktop Entry]
           Name=Hyprland
+          DesktopNames=Hyprland
           Exec=uwsm start hyprland-uwsm.desktop
           Type=Application
         '';

Comment thread config/hyprpanel/default.nix Outdated
"theme.bar.buttons.borderColor" = "#bd93f9";

# Dashboard
"theme.bar.buttons.dashboard.icon" = "#8be8fd";

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 | 🟡 Minor

Likely typo: #8be8fd should be #8be9fd (Dracula cyan).

Every other use of Dracula cyan in this file (lines 80, 114, 174, 340, etc.) and in hyprland.conf (line 8) uses #8be9fd. This one instance uses #8be8fd (digit 8 instead of 9).

🐛 Fix
-      "theme.bar.buttons.dashboard.icon" = "#8be8fd";
+      "theme.bar.buttons.dashboard.icon" = "#8be9fd";
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"theme.bar.buttons.dashboard.icon" = "#8be8fd";
"theme.bar.buttons.dashboard.icon" = "#8be9fd";
🤖 Prompt for AI Agents
In `@config/hyprpanel/default.nix` at line 70, There is a typo in the color value
for the "theme.bar.buttons.dashboard.icon" key: replace the incorrect hex
"#8be8fd" with the correct Dracula cyan "#8be9fd" so it matches the other uses
(e.g., other theme color entries and hyprland.conf); update only the hex literal
for the "theme.bar.buttons.dashboard.icon" setting.

The bare `hyprpanel` string in hyprland.conf wasn't resolvable since
hyprland.systemd.enable = false means PATH doesn't include
home-manager profile bins. Move exec-once to Nix extraConfig using
${pkgs.hyprpanel}/bin/hyprpanel, matching the swww-daemon pattern.
…ments

- Add 15 custom commands to Walker (lock, screensaver, power, wifi, bluetooth, etc.)
- Remove duplicate Super+D walker binding (Framework+Space only)
- Set Walker layer to noanim for instant appearance
- Update Ghostty split navigation to Super+hjkl
- Enhance tmux with session persistence, vim-navigator, and clean green theme
shunkakinoki and others added 6 commits February 8, 2026 02:27
Add Earth, Greenland, Caribbean, and ISS Flare aerials in a shuffled
playlist that loops infinitely, matching macOS screensaver behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lscreen

Apply 95%/90% opacity to Ghostty, Chrome, and Slack only when not
in fullscreen mode using match:fullscreen:0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…iscord

Workspace rules applied to ALL windows of a class, so Cmd+N in Chrome
would force the new window to workspace 2 instead of the current one.
Focus-or-launch bindings (Super+G/S/D) handle initial placement.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@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

🤖 Fix all issues with AI agents
In `@config/hyprland/hyprland.conf`:
- Line 43: The exec-once command string is fragile because it uses && so a
failure in any systemctl --user restart call aborts the rest; update the
exec-once line (the command after exec-once) to either use ; between the three
systemctl --user restart invocations so all restarts are attempted regardless of
failures, or split the operations into separate exec-once entries so each
systemctl restart runs independently (refer to the existing exec-once line that
contains the sleep and systemctl --user restart calls).
🧹 Nitpick comments (3)
config/hyprland/hyprlock.conf (1)

22-42: Input field placeholder text may not render the icon on all setups.

Line 35: the placeholder relies on a Nerd Font glyph (󰈷). This is fine given font_family = JetBrainsMono Nerd Font is set on line 32, but if the Nerd Font package isn't installed the icon will render as a missing-glyph box. Worth keeping in mind if this config is shared across machines.

config/hyprland/default.nix (1)

17-18: Consider documenting the mpvpaper options.

The mpvpaper command line packs several non-obvious flags (no-audio loop-playlist=inf shuffle hwdec=auto-copy vf=crop=3240:2160). A brief inline comment explaining the crop dimensions and key choices would help future maintainers. Based on learnings, major changes in Nix configurations should be documented.

config/hyprland/hyprland.conf (1)

56-56: Backgrounding only the first process may leave clipse blocking the exec-once slot.

wl-clip-persist --clipboard regular & clipse -listen backgrounds wl-clip-persist but runs clipse -listen in the foreground of the spawned shell. While Hyprland's exec-once is non-blocking, it's cleaner and more explicit to background both:

♻️ Suggested
-exec-once = wl-clip-persist --clipboard regular & clipse -listen
+exec-once = wl-clip-persist --clipboard regular & clipse -listen &


# Notification daemon
exec-once = swaync
exec-once = sleep 1 && systemctl --user restart xdg-desktop-portal-hyprland && sleep 0.5 && systemctl --user restart xdg-desktop-portal-gtk && sleep 0.5 && systemctl --user restart xdg-desktop-portal

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 | 🟡 Minor

Portal restart chain is fragile with hardcoded sleeps.

If any systemctl --user restart command fails, the && chain aborts and downstream portals won't restart. Consider using ; instead of && so all three restarts are attempted regardless, or splitting into separate exec-once lines.

♻️ Proposed fix
-exec-once = sleep 1 && systemctl --user restart xdg-desktop-portal-hyprland && sleep 0.5 && systemctl --user restart xdg-desktop-portal-gtk && sleep 0.5 && systemctl --user restart xdg-desktop-portal
+exec-once = sleep 1; systemctl --user restart xdg-desktop-portal-hyprland; sleep 0.5; systemctl --user restart xdg-desktop-portal-gtk; sleep 0.5; systemctl --user restart xdg-desktop-portal
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
exec-once = sleep 1 && systemctl --user restart xdg-desktop-portal-hyprland && sleep 0.5 && systemctl --user restart xdg-desktop-portal-gtk && sleep 0.5 && systemctl --user restart xdg-desktop-portal
exec-once = sleep 1; systemctl --user restart xdg-desktop-portal-hyprland; sleep 0.5; systemctl --user restart xdg-desktop-portal-gtk; sleep 0.5; systemctl --user restart xdg-desktop-portal
🤖 Prompt for AI Agents
In `@config/hyprland/hyprland.conf` at line 43, The exec-once command string is
fragile because it uses && so a failure in any systemctl --user restart call
aborts the rest; update the exec-once line (the command after exec-once) to
either use ; between the three systemctl --user restart invocations so all
restarts are attempted regardless of failures, or split the operations into
separate exec-once entries so each systemctl restart runs independently (refer
to the existing exec-once line that contains the sleep and systemctl --user
restart calls).

shunkakinoki and others added 3 commits February 8, 2026 02:46
Replace invalid match:fullscreen:0 with a separate fullscreen:1
override rule that resets opacity to 1.0 for all fullscreen windows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fullscreen:1 is invalid; correct syntax is match:fullscreen 1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

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

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="config/hyprland/hyprland.conf">

<violation number="1" location="config/hyprland/hyprland.conf:399">
P2: The new lock screen binding reuses `$mod SHIFT, L`, which is already bound to `movewindow, r` earlier in the config. This creates a keybinding conflict and can prevent either moving windows right or locking the screen from working reliably.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

# Lock Screen
# =============================================================================
bind = $mod CTRL, L, exec, hyprlock
bind = $mod SHIFT, L, exec, hyprlock

@cubic-dev-ai cubic-dev-ai Bot Feb 7, 2026

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.

P2: The new lock screen binding reuses $mod SHIFT, L, which is already bound to movewindow, r earlier in the config. This creates a keybinding conflict and can prevent either moving windows right or locking the screen from working reliably.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At config/hyprland/hyprland.conf, line 399:

<comment>The new lock screen binding reuses `$mod SHIFT, L`, which is already bound to `movewindow, r` earlier in the config. This creates a keybinding conflict and can prevent either moving windows right or locking the screen from working reliably.</comment>

<file context>
@@ -396,7 +396,7 @@ binde = CTRL ALT SHIFT, minus, exec, hyprctl -j monitors | jq -r '.[0].scale' |
 # Lock Screen
 # =============================================================================
-bind = $mod CTRL, L, exec, hyprlock
+bind = $mod SHIFT, L, exec, hyprlock
 
 # =============================================================================
</file context>
Suggested change
bind = $mod SHIFT, L, exec, hyprlock
bind = $mod CTRL, L, exec, hyprlock
Fix with Cubic

shunkakinoki and others added 15 commits February 8, 2026 02:52
Replace mpvpaper + Apple Aerial videos with linux-wallpaperengine
which uses Steam Workshop wallpapers. Enable Steam on matic for
Wallpaper Engine assets. Uses home-manager service for declarative
wallpaper management with auto-restart.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Semi-transparent backgrounds, white text at varying opacities, and
Nord-inspired accent colors for a frosted glass aesthetic.
The match:fullscreen 1 override rule was likely overriding all opacity
rules. Removed it so translucent windows work again. Fullscreen
windows at 97% opacity is barely noticeable anyway.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Chrome class regex changed from ^(google-chrome)$ to ^(google-chrome.*)$
to match variants like google-chrome-stable. Fullscreen override kept
so all windows get full opacity in fullscreen mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 'override' keyword was preventing Chrome from getting translucent
opacity. Using plain opacity values so class-specific rules still apply
when not in fullscreen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…cency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lity

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@shunkakinoki
shunkakinoki merged commit 91e3661 into main Feb 7, 2026
23 of 25 checks passed
@shunkakinoki
shunkakinoki deleted the hyprrefactor branch February 7, 2026 18:29
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