• Operand
  • # (b)ring mi - belles.

gram:build

> ./config/nushell/screen.nu

Lenses
(coming soon!)


# manage screens

def screen --wrapped [...call: string] { Hyprland ...($call) }
let shines = [ 0 1 4 16 32 64 100 ]
def "screen shine" [shine:int] { light -S ($shines | get $shine) }

def "screen color" [degree?: int] {
  try { nix-shell -p killall --command "killall wlsunset" } # &> /dev/null
  if ($degree != null) { wlsunset -t $degree -T ($degree + 1) } }
def sc [degree: int] { screen color $degree }

def screens [] {
  hyprctl monitors | ag '^Monitor ' | lines | each {|l|
    $l | split column ' ' | get 0 | get column2 }
}

def "screen on" [display?:string] {
  let display = if ($display == null) { screen choose } else { $display }
  if ($display == "all") { screens | par-each {|s|
    hyprctl dispatch dpms on $s; }
  } else { hyprctl dispatch dpms on $display; }
}

def "screen off" [display?:string] {
  let display = if ($display == null) { screen choose } else { $display }
  if ($display == "all") { screens | par-each {|s|
    hyprctl dispatch dpms off $s; }
  } else { hyprctl dispatch dpms off $display; }
}

def "screen blink" [dura:duration, display?:string] {
  let display = if ($display == null) { screen choose } else { $display }
  if ($display == "all") { screens | par-each {|s| screen blink $dura $s }
  } else { screen off $display; sleep $dura; screen on $display; }
}

def "screen res" [scale?:number] {
  let scale = if ($scale | is-empty) { 1 } else { $scale }

  hyprctl monitors | split row "\n\n" | each {|d|
    let display = $d | lines | split column ":"
    let name = $display | get 0 | get column1
    let res = $display | where {|param| $param.column1 =~ 'availableModes' } |
    get column2 | split column " " | transpose | get column1 |
    where {|d| not ($d | is-empty) } | split column --regex '[x@]' |
    rename x y freq | sort-by --natural --reverse x | get 0

    $res | upsert name $name
    | upsert x (($res | get x | into int) / $scale)
    | upsert y (($res | get y | into int) / $scale)
  }
}

def "screen send" [num?:number] {
  let num = if $num == null {
    hyprctl activeworkspace | ag '^workspace ID' |
    split column ' ' | get column3 | get 0
  } else { $num }
  let screen = screen choose;
  hyprctl dispatch moveworkspacetomonitor $num $screen;
  hyprctl dispatch focusmonitor $screen;
  hyprctl dispatch forcerendererreload; };

def "screen choose" [] {
  let s = (screens)
  if ($s | length) == 1 { $s | get 0 } else { $s | str join "\n" | fzf }
}

def "screen change" [] {
  hyprctl dispatch swapactiveworkspaces (screen choose) (screen choose)
}

# def "screen rec" [] {
#   bind disk nvme0n1p5
#   let node = [ ($env.HOME), "disk", "nvme0n1p5", "rec",
#   $"(clock | str trim).screen.wf-recorder.mkv" ] | path expand | last
# # echo ([
#   nsh wf-recorder ([
#     "wf-recorder"
#     "-d DP-2" # (screen choose)
#     "--audio='USB Composite Device Pro'"
#     "-c libx264"
#     $"--file=($node)"
#   ] | str join ' ')
# }

# possible: [ auto, avc, hevc, vp8, vp9, av1]
def "screen record" [
  --codec (-c): string = "hevc"
] { [ signal-desktop whatsapp-for-linux webcord ] | each {|gram| ps | where name =~ $gram | each {|p| kill $p} }
  let screen = (screen choose)
  let c = clock | str trim | split row 'T'
  let node = [ ($env.HOME), "disc", "cap", $"($c | get 0).rec",
    $"($c | get 1).($screen).wl-screenrec.mkv" ] | path join
  mkdir (dirname $node); nsh wl-screenrec wl-screenrec -o $screen --filename $node; $node } # --codec $codec
# "--audio --audio-device 'USB Composite Device Pro'"