Skip to main content
Isabel’s Dotfiles uses different window managers depending on the platform. On Linux, the configuration uses fht-compositor, while on macOS it uses AeroSpace.

Hyprland configuration

While the documentation mentions fht-compositor, the actual implementation currently uses Hyprland as the Wayland compositor. The configuration can be found in home/isabel/gui/hyprland.nix.

Enabling Hyprland

To enable Hyprland in your user configuration:
home/isabel/gui/hyprland.nix
{
  programs.hyprland.enable = true;
}

Key bindings

The configuration includes a comprehensive set of keybindings for window management:
KeybindingAction
SUPER + DOpen launcher (vicinae)
SUPER + BOpen browser
SUPER + EOpen file manager
SUPER + COpen editor
SUPER + ReturnOpen terminal
SUPER + LLock screen
SUPER + OOpen Obsidian

Submaps for movement and resize

Hyprland uses submaps for more advanced window manipulation:
# Enter move mode with SUPER + M
bind=SUPER, M, submap, move
submap=move

  binde = , left, movewindow, l
  binde = , right, movewindow, r
  binde = , up, movewindow, u
  binde = , down, movewindow, d
  # Vim-style navigation also supported
  binde = , j, movewindow, l
  binde = , l, movewindow, r
  binde = , i, movewindow, u
  binde = , k, movewindow, d

  bind=,escape,submap,reset
submap=reset

Visual customization

The Hyprland configuration includes extensive visual customization:

Animations

home/isabel/gui/hyprland.nix
animations = {
  enabled = true;

  bezier = [
    "wind, 0.05, 0.9, 0.1, 1.05"
    "winIn, 0.1, 1.1, 0.1, 1.1"
    "winOut, 0.3, -0.3, 0, 1"
    "liner, 1, 1, 1, 1"
  ];
  animation = [
    "windows, 1, 6, wind, slide"
    "windowsIn, 1, 6, winIn, slide"
    "windowsOut, 1, 5, winOut, slide"
    "windowsMove, 1, 5, wind, slide"
    "border, 1, 1, liner"
    "borderangle, 1, 30, liner, loop"
    "fade, 1, 10, default"
    "workspaces, 1, 5, wind"
  ];
};

Decorations

home/isabel/gui/hyprland.nix
decoration = {
  rounding = 15;

  active_opacity = 1.00;
  inactive_opacity = 1.00;
  fullscreen_opacity = 1.00;

  shadow = {
    enabled = true;
    color = "rgb(11111B)";
    color_inactive = "rgba(11111B00)";
  };

  blur = {
    enabled = true;
    passes = 2;
    size = 2;
    brightness = 1;
    contrast = 1.3;
    noise = 1.17e-2;
    ignore_opacity = true;
    new_optimizations = true;
    xray = true;
  };
};
The blur and shadow effects use Catppuccin Mocha colors for a cohesive theme.

General layout

home/isabel/gui/hyprland.nix
general = {
  gaps_in = 8;
  gaps_out = 8;
  gaps_workspaces = 0;
  border_size = 2;

  "col.active_border" = "$pink";
  "col.inactive_border" = "$surface1";
};

Monitor configuration

The configuration includes dynamic monitor setup based on your system configuration:
home/isabel/gui/hyprland.nix
mapMonitors = concatLines (
  imap0 (
    i: m:
    "monitor=${m.name},${toString m.width}x${toString m.height}@${toString m.refresh-rate},${toString (i * 1920)}x0,${toString m.scale}"
  ) (attrValues monitors)
);
Workspaces are automatically distributed across monitors based on the device configuration.

Window rules

Automatic window placement and behavior:
home/isabel/gui/hyprland.nix
windowrule = [
  "float on, match:title ^(nm-connection-editor)$"
  "float on, match:title ^(Network)$"
  "float on, match:title ^(xdg-desktop-portal-gtk)$"
  "float on, match:class gay.vaskel.soteria"
  "float on, match:title ^(Picture-in-Picture)$"
  
  "workspace 6, match:class discord"  # Discord on workspace 6
  "workspace 7, match:class spotify"  # Spotify on workspace 7
  
  # Hide sharing indicators
  "workspace special silent, match:title ^(Firefox — Sharing Indicator)$"
  "workspace special silent, match:title ^(.*is sharing (your screen|a window).)$"
];

Input configuration

The configuration automatically adapts input settings based on your keyboard layout:
home/isabel/gui/hyprland.nix
input = {
  kb_layout = keyboard;
  follow_mouse = 1;
  sensitivity = if keyboard == "us" then -0.8 else 0;
  numlock_by_default = true;

  touchpad = {
    tap-to-click = true;
    natural_scroll = false;
    disable_while_typing = false;
  };
};

Comparison with fht-compositor and AeroSpace

While the current implementation uses Hyprland, the documentation references fht-compositor for Linux and AeroSpace for macOS. Here’s a comparison of common keybindings:
SKHD (macOS)fht-compositorHyprlandAction
CMD+RETURNSUPER+RETURNSUPER+RETURNOpen terminal
-SUPER+BSUPER+BOpen browser
CMD+QSUPER+QSUPER+QQuit window
CMD+DSUPER+DSUPER+DLauncher
-SUPER+FSUPER+FFull screen
CMD+CTRL+[number]SUPER+[number]SUPER+[number]Switch workspace
CMD+SHIFT+[number]SUPER+SHIFT+[number]SUPER+SHIFT+[number]Move to workspace

Next steps

Catppuccin theme

Learn how the Catppuccin theme integrates with your window manager

Home Manager

Understand how window manager configuration fits into Home Manager

Build docs developers (and LLMs) love