add matrix-screenshot.ps1

master
lub 3 years ago
parent 8704797319
commit 4dfc24132c

@ -0,0 +1,82 @@
#!/usr/bin/env pwsh
<#
.SYNOPSIS
Takes a screenshot and puts the URl into the clipboard
.DESCRIPTION
Uses grim and slurp to create a screenshot and uploads it into a matrix content repository.
A GETable URL is placed into the clipboard via wl-copy and optionally sent to the specified room.
.NOTES
Example config at $HOME/.config/matrix-screenshot.ps1:
```
$roomId = '!XpxHNLnPsnNEbScyeh:imninja.net'
$accessToken = 'NotaReALaCceSSTOk3n'
$homeserverUrl = 'https://imninja.net'
```
#>
[CmdletBinding()]
param (
# Takes a fullscreen screenshot instead of selecting an area.
[switch]
$Fullscreen
)
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version 3.0
# import config
. (Join-Path $env:HOME '.config/matrix-screenshot.ps1')
$tmp = New-TemporaryFile
if ($Fullscreen) {
grim $tmp.FullName
} else {
grim -g $(slurp) $tmp.FullName
}
if (($tmp | Get-Item).Length -eq 0) {
Write-Error ('Screenshot file "{0}" is empty' -f $tmp.FullName) -ErrorAction Continue
$tmp | Remove-Item
exit
}
$mediaSplat = @{
Authentication = 'Bearer'
Token = $accessToken | ConvertTo-SecureString -AsPlainText
Headers = @{
'Content-Type' = 'image/jpeg'
}
Method = 'Post'
Uri = ($homeserverUrl+'/_matrix/media/r0/upload')
InFile = $tmp.FullName
}
$media = Invoke-RestMethod @mediaSplat
$tmp | Remove-Item
$serverName = $media.content_uri.Split('/')[2]
$mediaId = $media.content_uri.Split('/')[3]
$mediaUrl = '{0}/_matrix/media/r0/download/{1}/{2}' -f $homeserverUrl,$serverName,$mediaId
$mediaUrl | wl-copy
if ($roomId) {
$eventSplat = @{
Authentication = 'Bearer'
Token = $accessToken | ConvertTo-SecureString -AsPlainText
Method = 'Put'
Uri = '{0}/_matrix/client/r0/rooms/{1}/send/{2}/{3}' -f $homeserverUrl,$roomId,'m.room.message',($tmp.Name)
Body = @{
body = $tmp.Name
msgtype = 'm.image'
url = $media.content_uri
} | ConvertTo-Json
}
$event = Invoke-RestMethod @eventSplat
Write-Output ('{0}' -f $event.event_id)
}

@ -245,6 +245,8 @@ bindsym XF86AudioNext exec --no-startup-id 'rhythmbox-client --no-start --next'
#requires grim,slurp,wl-clipboard
bindsym $mod+shift+s exec --no-startup-id 'grim -g "$(slurp)" - | wl-copy'
bindsym $mod+ctrl+shift+s exec --no-startup-id 'grim - | wl-copy'
bindsym $mod+alt+shift+s exec --no-startup-id 'pwsh -Command matrix-screenshot.ps1'
bindsym $mod+alt+ctrl+shift+s exec --no-startup-id 'pwsh -Command matrix-screenshot.ps1 -Fullscreen'
#brightness
bindsym XF86MonBrightnessUp exec --no-startup-id 'sudo brightnessctl -d intel_backlight s +5%'

Loading…
Cancel
Save