Of course, there certainly is a way to write a routine in such a way that you can give the desired style and desired key signature once while issuing \override AmbitusNoteHead.style = ... - the routine then rotate the note heads around accordingly - but this exceeds both my scheme skills and available time :-).
\version "2.19.44"
#(define (style-sacredHarp-notehead grob)
"Change the notehead style according to pitch class."
(let ((mod-position (modulo (ly:grob-property grob 'staff-position)
7)))
(case mod-position
;; Return styles
((1) 'fa) ; for C
((2) 'sol) ; for D
((3) 'la) ; for E
((4) 'fa) ; for F
((5) 'sol) ; for G
((6) 'la) ; for A
((0) 'mi) ; for B
)))
% Standard definitions for \aikenHeads or \sacredHarpHeads may be
%
%
% aikenHeads = \set shapeNoteStyles = ##(do re miMirror fa sol la ti)
% aikenHeadsMinor = \set shapeNoteStyles = ##(la ti do re miMirror fa sol)
% funkHeads = \set shapeNoteStyles = ##(doFunk reFunk miFunk faFunk solFunk laFunk tiFunk)
% funkHeadsMinor = \set shapeNoteStyles = ##(laFunk tiFunk doFunk reFunk miFunk faFunk solFunk)
% sacredHarpHeads = \set shapeNoteStyles = ##(fa sol la fa sol la mi)
% sacredHarpHeadsMinor = \set shapeNoteStyles = ##(la mi fa sol la fa sol)
% southernHarmonyHeads = \set shapeNoteStyles = ##(faThin sol laThin faThin sol laThin miThin)
% southernHarmonyHeadsMinor = \set shapeNoteStyles = ##(laThin miThin faThin sol laThin faThin sol)
% walkerHeads = \set shapeNoteStyles = ##(doWalker reWalker miWalker faWalker solFunk laWalker tiWalker)
% walkerHeadsMinor = \set shapeNoteStyles = ##(laWalker tiWalker doWalker reWalker miWalker faWalker solFunk)
\layout {
\context {
\Voice
\consists "Ambitus_engraver"
}
\override AmbitusNoteHead.style = #style-sacredHarp-notehead
}
\relative {
\sacredHarpHeads
c'4 d e b'
}