Bygget til alle. Delt gratis.

Giv dine øjne en pause.
Velkommen til Horizon.

Skærm-træthed er ægte. Horizon er et lille, gennemsigtigt PowerShell-script, der sikrer, at du får hvilet øjnene. Du bestemmer helt selv intervallet (f.eks. hvert 20. minut for at følge 20-20-20 reglen), og så dæmpes din skærm diskret, når det er tid til en pause. Ingen installation, ingen tracking - bare ren omtanke for dit syn.

Andre projekter

Bruger du Mac? Tag koden og opsætningen herunder, giv den til din AI-assistent, og bed den skrive et tilsvarende AppleScript eller Bash-script til din Mac.

Hvorfor bruge Horizon?

20-20-20 Reglen

Designet specifikt til at håndhæve reglen: Hvert 20. minut skal du kigge på noget 20 fod (ca. 6 meter) væk i 20 sekunder.

Forstyrrer ikke dit flow

Scriptet dæmper skærmen visuelt (80% sort), men stjæler ikke fokus fra dit arbejde. Du kan nemt lukke det ned med 'Escape', hvis det rammer et kritisk tidspunkt.

Ingen installation

Det er bare et simpelt PowerShell script. Ingen mærkelige .exe filer, ingen baggrunds-services der dræner dit batteri, og ingen installation påkrævet.

100% Gennemsigtigt

Koden er åben og ligger lige her på siden. Du kan læse præcis hvad den gør, før du kører den på din maskine. Fuld sikkerhed.

Fleksibel timer

Selvom standarden er 20 minutter, beder scriptet dig om dit ønskede interval, når du starter det. Skriv '0' for en hurtig 5-sekunders test.

Hurtig afbrydelse

Når scriptet venter i baggrunden, kan du altid trykke 'C' i konsol-vinduet for at afbryde den nuværende timer og vælge en ny.

Opsætning til autostart

Følg disse trin for at lade scriptet starte automatisk i baggrunden.

01

Opret filen

Gå til mappen Dokumenter, opret en ny Notesblok-fil og indsæt koden her fra siden. Tryk "Gem som", vælg "Alle filer", og gem den som Pause.ps1.

02

Kopier stien

Højreklik på filen Pause.ps1 i dine dokumenter og vælg "Kopier som sti" (Copy as path).

03

Opret genvej

Gå til dit skrivebord, højreklik på et tomt område og vælg Opret genvej.

04

Indsæt kommando

I feltet indsætter du: powershell.exe -ExecutionPolicy Bypass -File efterfulgt af et mellemrum og din kopierede sti.

05

Åbn autostart

Tryk på Windows-tast + R, skriv shell:startup i feltet og tryk Enter for at åbne din computers opstartsmappe.

06

Klar til brug

Kopier den nye genvej fra dit skrivebord og indsæt den i opstartsmappen. Scriptet starter nu automatisk, hver gang du tænder din PC.

Horizon script

Kopier koden herunder og følg guiden ovenfor.

Pause.ps1
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

function Show-DarkScreen {
    param($Seconds)
    
    $form = New-Object System.Windows.Forms.Form
    $form.BackColor = 'Black'
    $form.Opacity = 0.8
    $form.TopMost = $true
    $form.FormBorderStyle = 'None'
    $form.WindowState = 'Maximized'

    $labelTekst = New-Object System.Windows.Forms.Label
    $labelTekst.Text = "Take a break"
    $labelTekst.Font = New-Object System.Drawing.Font("Arial", 50)
    $labelTekst.ForeColor = 'White'
    $labelTekst.Dock = 'Top'
    $labelTekst.Height = 300
    $labelTekst.TextAlign = 'BottomCenter'

    $labelTimer = New-Object System.Windows.Forms.Label
    $labelTimer.Name = "MinTimer"
    $labelTimer.Text = $Seconds
    $labelTimer.Font = New-Object System.Drawing.Font("Arial", 150)
    $labelTimer.ForeColor = 'White'
    $labelTimer.Dock = 'Fill'
    $labelTimer.TextAlign = 'TopCenter'
    
    $form.Controls.Add($labelTimer)
    $form.Controls.Add($labelTekst)

    $timer = New-Object System.Windows.Forms.Timer
    $timer.Interval = 1000
    $script:timeLeft = $Seconds

    $timer.Add_Tick({
        $script:timeLeft--
        $form.Controls["MinTimer"].Text = $script:timeLeft
        if ($script:timeLeft -le 0) {
            $timer.Stop()
            $form.Close()
        }
    })

    $form.KeyPreview = $true
    $form.Add_KeyDown({
        if ($_.KeyCode -eq 'Escape') {
            $timer.Stop()
            $form.Close()
        }
    })

    $form.Add_Load({
        $timer.Start()
    })

    $form.Add_Shown({
        $form.Activate()
        $form.Focus()
    })

    $form.ShowDialog() | Out-Null
}

$currentInterval = 20 # Standard arbejdstid

while ($true) {
    Clear-Host
    Write-Host "--- NyviaHorizon (Automation Mode) ---" -ForegroundColor Cyan
    Write-Host "Current work interval: $currentInterval minutes"
    Write-Host "Enter a new interval (in minutes), or type '0' for a quick test."
    Write-Host "Press ENTER to start with the current interval."
    $choice = Read-Host ">"

    if ($choice -eq '0') {
        $currentInterval = 0.166
    } elseif ($choice -as [int] -and $choice -gt 0) {
        $currentInterval = [int]$choice
    }

    $stopLoop = $false
    while (-not $stopLoop) {
        $targetTime = (Get-Date).AddMinutes($currentInterval)
        
        while ((Get-Date) -lt $targetTime) {
            $timeLeft = $targetTime - (Get-Date)
            Clear-Host
            Write-Host "Status: ACTIVE (Interval: $currentInterval min)" -ForegroundColor Green
            Write-Host "Next break in: $($timeLeft.Minutes)m $($timeLeft.Seconds)s"
            Write-Host ""
            Write-Host "Press 'C' to Cancel to Menu | Press 'S' to Snooze"
            
            if ([console]::KeyAvailable) {
                $key = [console]::ReadKey($true)
                if ($key.Key -eq 'C') { 
                    $stopLoop = $true
                    break 
                }
                if ($key.Key -eq 'S') {
                    # Stopper nedtællingen og lader dig indtaste snooze tid
                    Clear-Host
                    Write-Host "--- SNOOZE ---" -ForegroundColor Yellow
                    Write-Host "Enter snooze duration (e.g., '1h' or '1t' for 1 hour, '30m' for 30 minutes):"
                    $snoozeInput = Read-Host ">"
                    
                    $snoozeSeconds = 0
                    # For muscle memory understøtter vi både 'h' (hour) og 't' (time)
                    if ($snoozeInput -match '^(d+)[hHtT]$') {
                        $snoozeSeconds = [int]$matches[1] * 3600
                    } elseif ($snoozeInput -match '^(d+)[mM]$') {
                        $snoozeSeconds = [int]$matches[1] * 60
                    }

                    if ($snoozeSeconds -gt 0) {
                        $snoozeUntil = (Get-Date).AddSeconds($snoozeSeconds)
                        while ((Get-Date) -lt $snoozeUntil) {
                            $sLeft = $snoozeUntil - (Get-Date)
                            Clear-Host
                            Write-Host "SNOOZE ACTIVE" -ForegroundColor Yellow
                            Write-Host "Starting a fresh timer automatically at $($snoozeUntil.ToString('HH:mm:ss'))"
                            Write-Host "Time remaining: $($sLeft.Hours)h $($sLeft.Minutes)m $($sLeft.Seconds)s"
                            Write-Host ""
                            Write-Host "Press 'C' to cancel snooze and start timer now."
                            
                            if ([console]::KeyAvailable) {
                                $sKey = [console]::ReadKey($true)
                                if ($sKey.Key -eq 'C') {
                                    break # Bryder ud af snooze-loopet og starter timeren forfra
                                }
                            }
                            Start-Sleep -Milliseconds 250
                        }
                    } else {
                        Write-Host "Invalid input. Resuming timer..." -ForegroundColor Red
                        Start-Sleep -Seconds 2
                    }
                    
                    # Genoptag timeren FRA BUNDEN (Simpel reset)
                    $targetTime = (Get-Date).AddMinutes($currentInterval)
                }
            }
            Start-Sleep -Milliseconds 250
        }
        
        if ($stopLoop) { break }
        Show-DarkScreen -Seconds $currentInterval # Pausen varer det samme som intervallet i sekunder
    }
}

Pas godt på dig selv.

Det er nemt at glemme tiden, når man koder eller arbejder dybt koncentreret. Jeg lavede Horizon for at tvinge mig selv til at huske pauserne. Jeg håber, scriptet kan gøre det samme for dig og skåne dine øjne på den lange bane :}