diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for HLint
 
+2.0.4
+    --default adds ignores for any warnings it finds
 2.0.3
     #312, suggest removing the DeriveAnyClass extension
     Suggest removing the DeriveLift extension
diff --git a/data/default.yaml b/data/default.yaml
--- a/data/default.yaml
+++ b/data/default.yaml
@@ -54,3 +54,7 @@
 
 # Define some custom infix operators
 # - fixity: infixr 3 ~^#^~
+
+
+# To generate a suitable file for HLint do:
+# $ hlint --default > .hlint.yaml
diff --git a/hlint.cabal b/hlint.cabal
--- a/hlint.cabal
+++ b/hlint.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               hlint
-version:            2.0.3
+version:            2.0.4
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/src/HLint.hs b/src/HLint.hs
--- a/src/HLint.hs
+++ b/src/HLint.hs
@@ -8,7 +8,7 @@
 import Control.Exception
 import Control.Concurrent.Extra
 import System.Console.CmdArgs.Verbosity
-import Data.List
+import Data.List.Extra
 import GHC.Conc
 import System.Exit
 import System.IO.Extra
@@ -99,10 +99,23 @@
          else
             runGrep cmdPattern (cmdParseFlags cmd) files
 
+withVerbosity :: Verbosity -> IO a -> IO a
+withVerbosity new act = do
+    old <- getVerbosity
+    (setVerbosity new >> act) `finally` setVerbosity old
+
 hlintMain :: [String] -> Cmd -> IO [Idea]
 hlintMain args cmd@CmdMain{..}
     | cmdDefault = do
-        putStr =<< readFile (cmdDataDir </> "default.yaml")
+        ideas <- if null cmdFiles then return [] else withVerbosity Quiet $
+            runHlintMain args cmd{cmdJson=False,cmdSerialise=False,cmdRefactor=False} Nothing
+        let bad = nubOrd $ map ideaHint ideas
+        src <- readFile $ cmdDataDir </> "default.yaml"
+        if null bad then putStr src else do
+            let group1:groups = splitOn ["",""] $ lines src
+            let group2 = "# Warnings currently triggered by your code" :
+                         ["- ignore: {name: " ++ show x ++ "}" | x <- bad]
+            putStr $ unlines $ intercalate ["",""] $ group1:group2:groups
         return []
     | null cmdFiles && not (null cmdFindHints) = do
         hints <- concatMapM (resolveFile cmd Nothing) cmdFindHints
diff --git a/src/Idea.hs b/src/Idea.hs
--- a/src/Idea.hs
+++ b/src/Idea.hs
@@ -33,6 +33,9 @@
     }
     deriving (Eq,Ord)
 
+-- I don't use aeson here for 2 reasons:
+-- 1) Aeson doesn't esape unicode characters, and I want to (allows me to ignore encoding)
+-- 2) I want to control the format so it's slightly human readable as well
 showIdeaJson :: Idea -> String
 showIdeaJson idea@Idea{ideaSpan=srcSpan@SrcSpan{..}, ..} = wrap . intercalate "," . map mkPair $
     [("module", str ideaModule)
diff --git a/src/Test/All.hs b/src/Test/All.hs
--- a/src/Test/All.hs
+++ b/src/Test/All.hs
@@ -67,7 +67,6 @@
 checkCommentedYaml :: FilePath -> IO ()
 checkCommentedYaml file = do
     src <- lines <$> readFile' file
-    let src2 = [x | x <- src, Just x <- [stripPrefix "# " x], not $ all isAlpha $ take 1 x]
+    let src2 = [x | x <- src, Just x <- [stripPrefix "# " x], not $ all (\x -> isAlpha x || x == '$') $ take 1 x]
     e <- readFilesConfig [(file, Just $ unlines src2)]
     void $ evaluate $ length e
-
