elsa in mac

hyprland, Master Layout 설정 본문

Mac(OS X)/Asahi Linux

hyprland, Master Layout 설정

elsa in mac 2024. 1. 29. 20:46

hyprland의 Master Layout 예

Hyprland는 공식적으로 Dwindle과 Master 이렇게 두가지 layout을 지원합니다.
Dwindle layout은 BSPWM(Binary Space Partitioning Window Manager)와 유사한 방식으로 화면을 계층적으로 2분할해 나가는 방식입니다. 반면, Master 방식은 크게 Master window와 그 밖의 window로 구분하고, Master 윈도우의 배치 위치 기준으로 나머지 Window들을 분할 배치하는 방법 입니다.

이번 포스트에서는 hyprland의 Master layout 설정에 대해 살펴 보도록 하겠습니다.

위의 스샷은 현재 제가 적용하여 사용하고 있는 Master Layout으로 위와 관련된 설정치는 아래와 같습니다.

general {
  sensitivity         = 1.00
  apply_sens_to_raw   = 1
  gaps_in             = 10
  gaps_out            = 220
  border_size         = 5
  resize_on_border    = true
  col.active_border   = rgba(ffc700aa)
  col.inactive_border = $backgroundCol
  layout              = master
}

decoration {
  rounding            = 8
  active_opacity      = 0.9
  inactive_opacity    = 0.8
  fullscreen_opacity  = 1.0
  dim_inactive        = false
  dim_strength        = 0.1 Right Win, Super to Menu
  drop_shadow         = false

  blur {
  enabled             = true
  size                = 4
  passes              = 4
  ignore_opacity      = false
  new_optimizations   = true
  }
}

master {
  mfact                = 0.45  
  orientation          = center
  always_center_master = true
  new_is_master        = false
  new_on_top           = false
  smart_resizing       = false
}

monitor = ,highres,auto,1.0666667,bitdepth,10 
monitor = HDMI-A-1,addreserved,-100,0,-50,-50

 

Layout Concept
Tiiling Window  환경에서 어떻게 WIndow들을 배치하고 사용할 것인지는 전적으로 개인적인 취향입니다. 어떤 것이 절대적으로 좋다는 정답은 존재하지 않겠지요. 개인적인 컨셉은 아래와 같습니다.

Monitor 화면 전체를 다 사용하는 것이 일반적이지만, 사실 좌/우 측은 실제 작업 중 집중적으로 또는 오랫동안 볼 수 있는 영역이 아닙니다. 고개를 돌려서 봐야 하기 때문이죠. 물론, 모니터 위쪽과 아래쪽도 마찬가지 입니다. Window를 배치하기는 하지만 실제 working area는 아무래도 화면의 중앙일 수 밖에 없습니다.  따라서, 모니터 전체 영역을 사용영역으로 하여 윈도우로 가득찬 답답한 환경을 만드는 것 보다는 충분히 여백을 주어 개방감을 주는 편이 오랫동안 컴퓨터 작업을 하는 환경에서는 심적으로 도움이 됩니다.

사용영역에 대한 비 대칭 gap 설정
위의 설정에서 general 항목에 layout = master로 선언함으로써 default layout을 master로 설정합니다.  Dwindle Layout의 경우 binary tree 알고리즘을 기본으로 하기 때문에, 현재 작업하는 window를 화면의 정 중앙에 놓을 수 없습니다. master layout을 기본으로 사용하는 가장 큰 이유 입니다.  gaps_in 은 window와 window 사이의 gap으로 단위는 pixel 입니다. gaps_out은 전체화면 기준의 gap을 설정합니다.

  gaps_in  = 10
  gaps_out = 220

위의 설정에 따라 window 간에는 10픽셀의 갭을 그리고 모니터 외각으로 부터는 220픽셀의 갭을 갖게 됩니다. 여기서 문제는 Top, Bottom, Left, Right 이렇게 세부적인 설정이 불가하다는 점 입니다. window간의 gap은 그렇다 치더라도 모니터 edge로 부터의 gap도 상하좌우 일괄적으로 220픽셀만큼 갭을 갖게 됩니다. 예를 들어 상/하는 100픽셀, 좌/우는 50픽샐 이렇게 설정을 할 수 없다는 점입니다.  단, monitor의 addreserved 옵션을 설정하여 이 같은 제한사항을 극복할 수 있습니다.

monitor = ,highres,auto,1.0666667,bitdepth,10 
monitor = HDMI-A-1,addreserved,-100,0,-50,-50

위의 설정은 monitor 설정 옵션으로,  모니터의 배율을 1.0666667배로 하고, 색상은 10bit로 설정합니다. 그리고, 두번째 라인에서 HDMI-A-1 모니터에 대해서 Top(-100), Bottom(0), Left(-50), Right(-50)을 설정하고 있는데, 이는 윗쪽으로 100 pixel 만큼 확장, 좌/우로 각각 50픽셀만큼 확장하라는 의미가 됩니다. 예를들어, 모니터 해상도가 3840x2160으로 가정하면, gaps_out에 의해서 상/하/좌/우 각각 220픽샐만큼 gap을 주게 되므로, 왼도우가 배치되는 영역은 Center를 기준으로 3620 x 1720 이 됩니다. 여기서 monitor의 addreserved 설정에 의해 위로 100 픽셀을 확장하고, 좌/우로 50 픽셀을 확장하므로 윗쪽 gap은 220이 아닌 120이 되고, 좌우의 gap도 220이 아닌 170 이 되게 됩니다. 몰론 아래쪽은 0 이므로 그대로 gap은 220이 됩니다. 일종의 offset 역활을 하는 셈 입니다.

Master Layout 설정

master {
  mfact                = 0.45  
  orientation          = center
  always_center_master = true
  new_is_master        = false
  new_on_top           = false
  smart_resizing       = false
}

mfact는 master split factor로 master window를 전체 화면에서 얼마의 크기로 사용할 것인가를 정의합니다. 0.45라는 것은 유효 영역 기준 45%폭을 사용하겠다는 의미가 됩니다. 

orientation 옵션은 master window을 어디에 배치할 것인가를 정의 합니다. left, right, top, bottom, center 중 하나를 사용할 수 있으며, 컨셉에 맞게 center로 선언을 했습니다. 이 경우, 최초 아무것도 없는 바탕화면 상황에서 window를 하나 띄우게 되면, 조정된 gap을 제외한 영역의 45% 크기로 center에 window가 나타나게 됩니다. 물론, always_center_master 옵션에 의해 중앙에 배치된 window가 항상 master가 되게 됩니다.

두 번째 앱을 띄우게 되면, 중앙을 기준으로 오른쪽에 Window가 배치되며, 세번째 window를 열면, 이번엔 중앙을 기준으로 왼쪽에 window가 배치 됩니다. Master Window는 분할의 대상이 아니므로, 4번째, 5번째 Window를 열게 되면, 좌/우의 window의 크기가 반으로 줄어 들면서 새로 띄운 Window들이 배치되게 됩니다.

좌/우에 배치된 Window들은 Center Window와 swap을 하는 방식으로 Master window를 바꾸게 됩니다.

키 바인딩
포커스와 swap을 위한 key binding은 아래와 같습니다.

# Move focus 
bind = SUPER,          left,   movefocus,  l
bind = SUPER,          right,  movefocus,  r
bind = SUPER,          up,     movefocus,  u
bind = SUPER,          down,   movefocus,  d

# Swap Window
bind = SUPER CTRL,    left,   swapwindow, l
bind = SUPER CTRL,    right,  swapwindow, r
bind = SUPER CTRL,    up,     swapwindow, u
bind = SUPER CTRL,    down,   swapwindow, d

bind = SUPER,         X,      layoutmsg,  swapwithmaster

# resize Master Window
bind = SUPER ALT, M,   exec,       hyprctl dispatch splitratio  0.1
bind = SUPER ALT, N,   exec,       hyprctl dispatch splitratio -0.1

SUPER키는 일반 키보드의 window 키 또는 mac 전용 키보드의 command 키에 해당합니다. 

SUPER + 방향키 로 포커스를 이동 시킬 수 있고, SUPER+ctrl+방향키로, 해당 방향의 윈도우와 서로 자리를 바꿀 수 있습니다. 또한, 현재 포커스를 갖고 있는 윈도우를 SUPER+x 키로 Master Window로 변경함에 따라, Center에 위치한 window와 서로 자리를 바꿀 수 있습니다.

Super+alt+m/n 키를 누르게 되면, 각각 10% 혹은 -10% 씩 Master Window의 크기가 좌/우로 늘어나거나 줄어들게 됩니다.

공유하기 링크
Comments