" Vim syntax file
" Language:     hyprlang
" Maintainer:   Luca Saccarola <github.e41mv@aleeas.com>
" Last Change:  2025 Mar 26

if exists("b:current_syntax")
  finish
endif
let s:cpo= &cpo
set cpo&vim

let b:current_syntax = "hyprlang"

syn case ignore

syn match hyprCommand '^\s*\zs\S\+\ze\s*=' contains=hyprVariable
syn match hyprValue '=\s*\zs.\+\ze$' contains=hyprNumber,hyprFloat,hyprBoolean,hyprString,hyprColor,hyprModifier,hyprVariable,hyprComment

syn match hyprVariable '\$\w\+' contained

" Category
syn region hyprCategory matchgroup=hyprCategoryD start='^\s*\k\+\s*{' end='^\s*}' contains=hyprCommand,hyprValue,hyprComment,hyprCategory,hyprCategoryD

" Variables Types
syn match   hyprNumber  '\%[-+]\<\d\+\>\%[%]' contained
syn match   hyprFloat   '\%[-+]\<\d\+\.\d\+\>\%[%]' contained
syn match   hyprString  "'[^']*'" contained
syn match   hyprString  '"[^"]*"' contained
syn match   hyprColor   'rgb(\(\w\|\d\)\{6})' contained
syn match   hyprColor   'rgba(\(\w\|\d\)\{8})' contained
syn match   hyprColor   '0x\(\w\|\d\)\{8}' contained
syn keyword hyprBoolean true false yes no on off contained

"               Super         Shift         Alt         Ctrl        Control
syn keyword hyprModifier contained
      \ super                 supershift    superalt    superctrl   supercontrol
      \                       super_shift   super_alt   super_ctrl  super_control
      \ shift   shiftsuper                  shiftalt    shiftctrl   shiftcontrol
      \         shift_super                 shift_alt   shift_ctrl  shift_control
      \ alt     altsuper      altshift                  altctrl     altcontrol
      \         alt_super     alt_shift                 alt_ctrl    alt_control
      \ ctrl    ctrlsuper     ctrlshift     ctrlalt                 ctrlcontrol
      \         ctrl_super    ctrl_shift    ctrl_alt                ctrl_control
      \ control controlsuper  controlshift  controlalt  controlctrl
      \         control_super control_shift control_alt control_ctrl

" Comments
syn match hyprComment '#.*$'

" Link to default groups
hi def link hyprVariable  Identifier
hi def link hyprCategoryD Special
hi def link hyprComment   Comment
hi def link hyprNumber    Constant
hi def link hyprModifier  Constant
hi def link hyprFloat     hyprNumber
hi def link hyprBoolean   Boolean
hi def link hyprString    String
hi def link hyprColor     Structure
hi def link hyprCommand   Keyword

let &cpo = s:cpo
unlet s:cpo
" vim: ts=8 sts=2 sw=2 et
