Table of Contents

Configuration Reference

This document explains the config.yaml schema for WinHome.

Secrets

WinHome supports referencing secrets from environment variables or local files using the {{ }} syntax.

  • {{ env:VAR_NAME }}: Replaced with the value of the environment variable.
  • {{ file:C:\path\to\secret.txt }}: Replaced with the trimmed content of the file.

Example:

git:
  userEmail: 'me@example.com'
  signingKey: '{{ env:GIT_SIGNING_KEY }}'

Security Hardening

You can apply pre-defined security baselines using the security_preset key in systemSettings.

  • baseline: Enables SmartScreen, Disables Autorun/Autoplay, Disables LLMNR.
  • strict: Includes baseline + Disables Windows Script Host, Remote Assistance, and NetBIOS.

Example:

systemSettings:
  security_preset: 'baseline' # or "strict"
  dark_mode: true

Power Management

You can configure system power and sleep timeouts under systemSettings (values are in minutes).

  • screen_timeout_ac: Screen timeout when plugged in.
  • screen_timeout_dc: Screen timeout on battery.
  • sleep_timeout_ac: Sleep timeout when plugged in.
  • sleep_timeout_dc: Sleep timeout on battery.

Example:

systemSettings:
  screen_timeout_ac: 15
  screen_timeout_dc: 5
  sleep_timeout_ac: 60
  sleep_timeout_dc: 15

Plugins

You can configure installed plugins under the extensions key. The key name must match the plugin name.

Example (Vim Plugin):

extensions:
  vim:
    settings:
      number: true
      relativenumber: true
      theme: 'gruvbox'

Example (Obsidian Plugin):

extensions:
  obsidian:
    vaults:
      - path: "C:\\Users\\test\\Documents\\TestVault"
        settings:
          spellcheck: true
          accentColor: '#002aff'
        plugins:
          - 'obsidian-git'

Example (PowerToys Plugin):

extensions:
  powertoys:
    general:
      settings:
        theme: 0
    modules:
      fancyzones:
        enabled: true
        settings:
          shiftDrag: true
      awake:
        enabled: true
        settings:
          keepAwake: true
          keepAwakeTimeInMinutes: 30
      powerrename:
        enabled: true
        settings:
          isEnabled: true

Example (Oh My Posh Plugin):

ohmyposh:
  profile: "C:\\Users\\test\\Documents\\PowerShell\\Microsoft.PowerShell_profile.ps1"
  settings:
    theme: 'tokyonight'

Apps

Install applications using supported managers (winget, scoop, choco) or installed plugins.

apps:
  - id: 'Microsoft.VisualStudioCode'
    manager: 'winget'

  # Using a plugin
  - id: 'tpope/vim-fugitive'
    manager: 'vim'

Profiles

Profiles can override selected top-level settings when --profile <name> is used.

envVars:
  - variable: "EDITOR"
    value: "nvim"
    action: "set"

profiles:
  work:
    git:
      userName: "Work User"
      userEmail: "work@example.com"
    envVars:
      - variable: "EDITOR"
        value: "code"
        action: "set"
      - variable: "Path"
        value: "%USERPROFILE%\work\bin"
        action: "append"

For profiles.<name>.envVars, action: set replaces any matching top-level variable for that profile. action: append keeps the base variable entries and adds the profile-specific value.