# xrandr wrapper for nushell def xrandr [] { mut output = [] mut current_screen = { name: "" connected: false on: false primary: false resolution: null position: null resolutions: [] } let lines = ^xrandr | lines let length = $lines | length # We skip the first line for i in 1..<$length { let line = $lines | get $i let split = $line | split row -r '\s+' # This will be true whether the screen is connected or not if $line =~ "connected" { if $current_screen.name != "" { $output = ($output | append $current_screen) $current_screen.resolutions = [] $current_screen.on = false $current_screen.resolution = null $current_screen.position = null } $current_screen.name = ($split | get 0) $current_screen.connected = (($split | get 1) != "disconnected") $current_screen.primary = (($split | get 2) == "primary") let resolution = if $current_screen.primary { ($split | get 3 | split column -c '+' | get column1 | get 0) } else { ($split | get 2 | split column -c '+' | get column1 | get 0) } if not ($resolution | str starts-with "(") { $current_screen.on = true $current_screen.resolution = $resolution $current_screen.position = if $current_screen.primary { ($split | get 3 | split column -c '+' | each { "+" + $in.column2 + "+" + $in.column3 } | get 0) } else { ($split | get 2 | split column -c '+' | each { "+" + $in.column2 + "+" + $in.column3 } | get 0) } } } else { $current_screen.resolutions = ($current_screen.resolutions | append ($split | get 1)) } } if $current_screen.name != "" { $output = ($output | append $current_screen) } $output }