Note first that there is a difference between the local tree and your home tree. By default, they are in different places and are searched in different ways.
kpsewhich -var-value TEXMFHOME
returns the current location of your personal tree.
However, this isn't enough. TeX looks in specific places for specific kinds of files. For example, it looks for .sty, .cls and .tex files in some directories but not others. Similarly for .bib and bst files and so on.
The easiest way to figure out where to put something is often to mimic the structure of the main distribution tree.
ls $(kpsewhich -var-value TEXMFDIST)
shows the top level directory. .sty and .cls files are in sub-directories under tex/latex/, .bib files in sub-directories under bibtex/bib/ and so on.
Another approach to to query the search path. For example
kpsewhich -show-path=bib
will tell me where BibTeX will look for .bib files.
kpsewhich -show-path=tex
will tell me where TeX will look for .tex files.
However, it is a bit less clear how to use this method to get the search path for .sty and .cls files.
kpsewhich -show-path=sty
returns an error. To figure out which values are acceptable, you can display a full list
kpsewhich -help-format
which, on my system, returns
kpathsea version 6.2.1
Recognized Kpathsea format names and their (abbreviations) and suffixes:
gf: gf [variables: GFFONTS GLYPHFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/gf/$MAKETEX_MODE//]
pk: pk [variables: PKFONTS TEXPKS GLYPHFONTS TEXFONTS]
[original path (from texmf.cnf) = .:{$TEXMF/fonts,$VARTEXFONTS}/pk/{$MAKETEX_MODE,modeless}//]
bitmap font (bitmapfont): [variables: GLYPHFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts]
tfm: .tfm [variables: TFMFONTS TEXFONTS]
[original path (from texmf.cnf) = .:{$TEXMF/fonts,$VARTEXFONTS}/tfm//]
afm: .afm [variables: AFMFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/afm//:$OSFONTDIR//]
base: .base [variables: MFBASES TEXMFINI]
[original path (from texmf.cnf) = .:$TEXMF/web2c{/$engine,}]
bib: .bib [variables: BIBINPUTS TEXBIB]
[original path (from texmf.cnf) = .:$TEXMF/bibtex/bib//]
bst: .bst [variables: BSTINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/bibtex/{bst,csf}//]
cnf: .cnf [variables: TEXMFCNF]
[original path (from compile-time paths.h) = {$SELFAUTOLOC,$SELFAUTOLOC/share/texmf-local/web2c,$SELFAUTOLOC/share/texmf-dist/web2c,$SELFAUTOLOC/share/texmf/web2c,$SELFAUTOLOC/texmf-local/web2c,$SELFAUTOLOC/texmf-dist/web2c,$SELFAUTOLOC/texmf/web2c,$SELFAUTODIR,$SELFAUTODIR/share/texmf-local/web2c,$SELFAUTODIR/share/texmf-dist/web2c,$SELFAUTODIR/share/texmf/web2c,$SELFAUTODIR/texmf-local/web2c,$SELFAUTODIR/texmf-dist/web2c,$SELFAUTODIR/texmf/web2c,$SELFAUTOGRANDPARENT/texmf-local/web2c,$SELFAUTOPARENT,$SELFAUTOPARENT/share/texmf-local/web2c,$SELFAUTOPARENT/share/texmf-dist/web2c,$SELFAUTOPARENT/share/texmf/web2c,$SELFAUTOPARENT/texmf-local/web2c,$SELFAUTOPARENT/texmf-dist/web2c,$SELFAUTOPARENT/texmf/web2c}]
ls-R: ls-R ls-r [variables: TEXMFDBS]
[original path (from texmf.cnf) = {!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFLOCAL,!!$TEXMFDIST,$TEXMFARCH}]
fmt: .fmt [variables: TEXFORMATS TEXMFINI]
[original path (from texmf.cnf) = .:$TEXMF/web2c{/$engine,}]
map: .map [variables: TEXFONTMAPS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/map/{$progname,pdftex,dvips,}//]
mem: .mem [variables: MPMEMS TEXMFINI]
[original path (from texmf.cnf) = .:$TEXMF/web2c{/$engine,}]
mf: .mf [variables: MFINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/metafont//:{$TEXMF/fonts,$VARTEXFONTS}/source//]
mfpool: .pool [variables: MFPOOL TEXMFINI]
[original path (from texmf.cnf) = ${TEXPOOL}]
mft: .mft [variables: MFTINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/mft//]
mp: .mp [variables: MPINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/metapost//]
mppool: .pool [variables: MPPOOL TEXMFINI]
[original path (from texmf.cnf) = ${TEXPOOL}]
MetaPost support (mpsupport): [variables: MPSUPPORT]
[original path (from texmf.cnf) = .:$TEXMF/metapost/support]
ocp: .ocp [variables: OCPINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/omega/ocp//]
ofm: .ofm .tfm [variables: OFMFONTS TEXFONTS]
[original path (from texmf.cnf) = .:{$TEXMF/fonts,$VARTEXFONTS}/{ofm,tfm}//]
opl: .opl .pl [variables: OPLFONTS TEXFONTS]
[original path (from texmf.cnf) = .:{$TEXMF/fonts,$VARTEXFONTS}/opl//]
otp: .otp [variables: OTPINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/omega/otp//]
ovf: .ovf .vf [variables: OVFFONTS TEXFONTS]
[original path (from texmf.cnf) = .:{$TEXMF/fonts,$VARTEXFONTS}/{ovf,vf}//]
ovp: .ovp .vpl [variables: OVPFONTS TEXFONTS]
[original path (from texmf.cnf) = .:{$TEXMF/fonts,$VARTEXFONTS}/ovp//]
graphic/figure: .eps .epsi [variables: TEXPICTS TEXINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/tex/{$progname,generic,}//]
tex: .tex .sty .cls .fd .aux .bbl .def .clo .ldf [variables: TEXINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/tex/{$progname,generic,}//]
TeX system documentation (doc): [variables: TEXDOCS]
[original path (from texmf.cnf) = $TEXMF/doc//]
texpool: .pool [variables: TEXPOOL TEXMFINI]
[original path (from texmf.cnf) = .:$TEXMF/web2c]
TeX system sources (source): .dtx .ins [variables: TEXSOURCES]
[original path (from texmf.cnf) = .:$TEXMF/source//]
PostScript header: .pro [variables: TEXPSHEADERS PSHEADERS]
[original path (from texmf.cnf) = .:$TEXMF/{dvips,fonts/{enc,type1,type42,type3}}//]
Troff fonts (trofffont): [variables: TRFONTS]
[original path (from texmf.cnf) = /usr{/local,}/share/groff/{current/font,site-font}/devps]
type1 fonts: .pfa .pfb [variables: T1FONTS T1INPUTS TEXFONTS TEXPSHEADERS PSHEADERS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/type1//:$OSFONTDIR//]
vf: .vf [variables: VFFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/vf//]
dvips config (dvipsconfig): [variables: TEXCONFIG]
[original path (from texmf.cnf) = $TEXMF/dvips//]
ist: .ist [variables: TEXINDEXSTYLE INDEXSTYLE]
[original path (from texmf.cnf) = .:$TEXMF/makeindex//]
truetype fonts: .ttf .ttc .TTF .TTC .dfont [variables: TTFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/{truetype,opentype}//:$OSFONTDIR//]
type42 fonts: .t42 .T42 [variables: T42FONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/type42//]
web2c files (web2c): [variables: WEB2C]
[original path (from texmf.cnf) = $TEXMF/web2c]
other text files (othertext): [variables: KPSEWHICHINPUTS]
[original path (from compile-time paths.h) = .:$TEXMF/kpsewhich//]
other binary files (otherbin): [variables: KPSEWHICHINPUTS]
[original path (from compile-time paths.h) = .:$TEXMF/kpsewhich//]
misc fonts (miscfont): [variables: MISCFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/misc//]
web: .web .ch [variables: WEBINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/web//]
cweb: .w .web .ch [variables: CWEBINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/cweb//]
enc files: .enc [variables: ENCFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/enc//]
cmap files (cmap): [variables: CMAPFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/cmap//]
subfont definition files: .sfd [variables: SFDFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/sfd//]
opentype fonts: .otf [variables: OPENTYPEFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/{opentype,truetype}//:$OSFONTDIR//]
pdftex config (pdftexconfig): [variables: PDFTEXCONFIG]
[original path (from texmf.cnf) = .:$TEXMF/pdftex/{$progname,}//]
lig files: .lig [variables: LIGFONTS TEXFONTS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/lig//]
texmfscripts: [variables: TEXMFSCRIPTS]
[original path (from texmf.cnf) = $TEXMF/scripts/{$progname,$engine,}//]
lua: .lua .luatex .luc .luctex .texlua .texluc .tlu [variables: LUAINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/scripts/{$progname,$engine,}/{lua,}//:$TEXMF/tex/{luatex,plain,generic,}//]
font feature files: .fea [variables: FONTFEATURES]
[original path (from texmf.cnf) = .:$TEXMF/fonts/fea//]
cid maps: .cid .cidmap [variables: FONTCIDMAPS]
[original path (from texmf.cnf) = .:$TEXMF/fonts/cid//]
mlbib: .mlbib .bib [variables: MLBIBINPUTS BIBINPUTS TEXBIB]
[original path (from texmf.cnf) = .:$TEXMF/bibtex/bib/{mlbib,}//]
mlbst: .mlbst .bst [variables: MLBSTINPUTS BSTINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/bibtex/{mlbst,bst}//]
clua: .dll .so [variables: CLUAINPUTS]
[original path (from texmf.cnf) = .:$SELFAUTOLOC/lib/{$progname,$engine,}/lua//]
ris: .ris [variables: RISINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/bibtex/ris//]
bltxml: .bltxml [variables: BLTXMLINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/bibtex/bltxml//]
To see paths after expansion, use --show-path=FMT.
Email bug reports to tex-k@tug.org.
This is best used with grep else you may never find what you need:
kpsewhich -help-format | grep -1 sty
returns
[original path (from texmf.cnf) = .:$TEXMF/tex/{$progname,generic,}//]
tex: .tex .sty .cls .fd .aux .bbl .def .clo .ldf [variables: TEXINPUTS]
[original path (from texmf.cnf) = .:$TEXMF/tex/{$progname,generic,}//]
So we know that .sty and .cls files will be found in sub-directories under sub-directories such as tex/latex/, as well as tex/generic/.
It is usual to use a further sub-directory for files belonging to a package e.g. tex/latex/fancyhdr/ or whatever. This tends to keep things a bit tidier and saner than they might otherwise be.
~/texmf/latex? By default, TeX won't look for anything there. Probably, you needed~/texmf/tex/latex? For example,mypackage.stywould go in~/texmf/tex/latex/mypackage/mypackage.sty. – cfr Jan 22 '15 at 23:43~/texmfmust mimic the normal TDS, which means LaTeX stuff goes at~/texmf/tex/latex. I'd do something likemkdir ~/texmf/bibtex/{bib,bst} && mkdir ~/texmf/tex/latexif you plan on using your local tree. – jon Jan 23 '15 at 00:15TEXMFLOCAL. – cfr Oct 07 '15 at 02:05kpsewhich --var-valuecan be completed by usingTEXMFHOME,TEXMFLOCAL, andTEXMFDISTto learn about the 'home', 'local', and 'system' directories; meanwhile,kpsewhich --var-value TEXMFwill list all your 'texmf's in the order (I believe) that they will be searched. – jon Oct 07 '15 at 02:11