Konfigurera en Mac Dev Machine från noll till hjälte med Dotfiles

Att skapa en ny maskin kan ofta vara en spännande utsiktsplats. Men som utvecklare finns det många verktyg vi behöver som inte kommer som standard.

I det här inlägget vill jag gå igenom några av de tekniker jag använder för att hjälpa mig att installera min maskin snabbt, effektivt och med extra supermakter.


Introduktion

Efter att ha läst den här artikeln borde du kunna göra följande:

  1. Snabbt ställa in en ny maskin
  2. Förbättra SSH i en Linux-låda
  3. Ta enkelt upp smarta konfigurer från andra utvecklare på GitHub
  4. Alternativt dela din inställning med andra utvecklare och delta
  5. På så sätt behåller alla professionella utvecklare sina konfigurationer

Innan vi börjar behöver du lite förståelse för Git och använder kommandoraden. Om du inte är säker på vad dessa är, rekommenderar jag att du tittar över följande först:

  • http://net.tutsplus.com/?s=git
  • http://net.tutsplus.com/?s=terminal

Superhero Dotfiles

Vad händer om du kan utforma terminalen, gör hastigheten på Mission Control snabbare, springa g istället för git, ha flik autofullständig oavsett filnamnssak, kontrollera efter uppdateringar dagligen, inte bara en gång per vecka? Vad händer om du kan automatisera att konfigurera alla dessa funktioner med ett enda skript? Låter bra? Då är det här inlägget för dig.

I många avseenden är det väldigt mycket att skapa en ny maskin till personlig preferens. Jag är alltid refactoring och reevaluating och jag rekommenderar dig att göra detsamma. Ta reda på vad som är bäst för dig och dela med dig av dina kunskaper.

TL; DR: Investera tid att lära sig att konfigurera din maskin och automatisera processer, du får den tiden tillbaka tio gånger.

Dotfiles, så kallad eftersom filnamnet börjar med a . finns i användarens hemkatalog. Dessa filer skapas när du installerar och konfigurerar din maskin. Jag tänker på varje dotfile som en superhjälte som innehåller sina egna supermakter. Jag ska gå över varje superhjälte dotfile och de befogenheter som ligger inom. Men först…

Det finns mycket att säga om dotfiles awesomeness, konfigurera konfigurationer automatiskt och påskynda processer. Det kan vara frestande att klona ett förråd och köra dotfiles direkt, men jag skulle råda emot detta eftersom resultatet kan ha oönskade resultat.

Små steg

Först och främst skulle jag rekommendera att klona vissa befintliga dotfilesförråd. Om du gör det kan du börja förstå filstrukturen och få en överblick över koden. Följande är GitHub repos från några topputvecklare som har delat sina dotfiles:

  • http://sow.so/dotfiles
  • http://mths.be/dotfiles
  • https://github.com/paulirish/dotfiles
  • http://dotfiles.github.io/

Det kan tyckas skrämmande vid första anblicken, men gör inte panik, jag går över varje dotfile som jag använder när jag installerar en ny maskin. När du har läst det här inlägget, när du har en bättre förståelse för varje fil och vad de kan göra, rekommenderar jag att du skapar ditt eget förråd och utnyttjar befintliga dotfiles för att bygga upp det. Du kan sedan lägga till filer och kod i det som bäst passar dina behov.

Som folk brukar namnge deras dotfiles repo punktfiler Jag ställer in mappstrukturen så här:

 └── dotfiles ├── mathias │ └── dotfiles │ ├── LICENSE-MIT.txt │ ├── README.md │ ├── bin │ │ ├── bash -> / usr / local / Cellar / bash /4.2.45/bin/bash │ │ ├── httpcompression │ │ └── subl -> / Program / Sublime \ Text \ 3.app/Contents/SharedSupport/bin/subl │ ├── bootstrap.sh │ └─ ─ init │ └── Mathias.terminal ├── paulirish │ └── dotfiles │ ├── README.md │ ├── bin │ │ ├── github-email │ │ └─ - spot │ ├── install- dps └── readme.md

Här ställer jag upp en huvudmapp som heter dotfiles, sedan en mapp med användarnamnet och sedan repo. Anledningen till att jag rekommenderar att du ställer upp det här är att undvika förvirring. Några av koden är ganska lika, så jag tycker att det är användbart att enkelt se vilken kod jag tittar på. Om jag till exempel hade fyra eller flera repos alla namngivna "dotfiles" skulle denna process vara mycket svårare.

Vill du veta hur jag skriver ut mappstrukturen så? Jag använde denna fantastiska sak som heter träd, installerad i .brygga fil.

Låt oss bryta ned varje fil och titta på vad som händer.


Superhero Dotfiles och deras supermakter

Dotfiles är uppdelade i två huvudtyper. De som innehåller en uppsättning kommandon och kör endast en gång, .osx kör exempelvis en lista med kommandon och ger OS X supermakter. Andra filer som .bash_profile och .bashrc springa varje gång du öppnar en ny Terminal-session och ger dina supermakter i Terminal.

Här är en nedgång av dotfilesna i min repo och en beskrivning av vad de kan göra.

.brygga

Det är bäst att köra detta först. När det kontrolleras att homebrew är uppdaterad, kommer den att användas för att installera användbara verktyg som träd.

 brygga installera träd

I stället för att behöva gå till en webbplats och ladda ner en app är det också möjligt att automatisera installationen av vissa appar med brew-fat, som:

 Brew Cask Installera Dropbox Brew Cask Installera Google Chrome

bootstrap.sh

Den här filen är som att vrida nyckeln i en bil för att starta motorn.

När det körs kommer det att synkronisera den lokala repoen och den på GitHub och sedan kopiera de här filerna till din hemmapp och överväga eventuella befintliga filer om de finns.

Därför, innan du kör bootstrap.sh Det är en bra idé att säkerhetskopiera dina befintliga dotfiles och spara dem någon annanstans. En praktisk genväg för att komma till dina dotfiler i Finder är:

Finder> Cmd + Skift + g> ~

Jag använder en app som heter TotalFinder, det här lägger till några fina funktioner till Finder. Tabbed windows och en genväg för att visa och gömma dolda filer till exempel tycker jag att det är mycket användbart.

I bootstrap.sh du kommer att märka källa ~ / .bash_profile. Detta innebär att om du kör bootstrap.sh och har några Terminal fönster öppna, kommer dina nya inställningar att appliceras utan att behöva starta om.

.bash_profile / .bashrc

När du öppnar en ny Terminal-session laddas den här filen av Bash. Den laddas i de andra dotfilerna bana, bash_prompt, export, alias, funktioner, extra och konfigurerar några användbara inställningar, t.ex. autokorrigeringstyper när du använder CD komplettering.

I vissa fall .bashrc kan laddas, så den här filen ser till att .bash_profile kallas.

Jag gillar min Terminal ren och rörig fri, så jag väljer att inte visa användarnamnet / datornamn överst som standard med den här filen.

.väg

Den här filen påskyndar processen med att köra körbara filer. Snarare än att behöva CD fram och tillbaka över olika vägar till körbara filer, kan du ställa in filvägarna i din .väg dotilfe och kör sedan körbara filer direkt.

I allmänhet hålls den här filen inte i den offentliga repo, eftersom den kan innehålla känslig information.

Här är ett exempel ~ / .path-fil som lägger till ~ / utils till $ PATH:
export PATH = "$ HOME / utils: $ PATH"

.bash_prompt

Med den här filen kan du anpassa och ställa in de olika färgerna i din Bash-prompten.

.export

Ställer in miljövariabler, t.ex. inställning av Vim som standardredigerare med export EDITOR = "vim". Det ökar också mängden sparad historia, användbar för backtracking över tidigare kommandon som du har använt.

.alias

Den här filen innehåller användbara alias som hjälper dig att skriva mindre. Till exempel istället för att skriva "CD… "du kan ställa in det här för att vara"... '. Börjar du att gilla dessa filer än? :)

.funktioner

Liknande aliaser, förutom att funktioner kan ta argument.

Innan när jag nämnde jag tittade över olika dotfile repos, gjorde jag det mkdir att skapa en katalog. Efter det skulle jag då behöva CD in i den katalogen.

Ett exempel på en funktion som jag tycker är användbar är:

 # Skapa en ny katalog och skriv in funktionen mkd () mkdir -p "$ @" && cd "$ @"

Nu kan du helt enkelt göra det MKD. Nu har du inte bara gjort katalogen, du är också i katalogen.

.extra

Den här filen används för att lägga till din personliga information och läggs inte till i ditt förråd för att se till att någon inte av misstag förföljer ditt projekt och sedan börja begå med dina uppgifter. Något trevligt att lägga till här skulle vara dina Git-uppgifter.

.gitconfig

Den här filen används endast av Git, till exempel när a git kommando åberopas. Så även om det finns en .alias fil, de aliaserna körs direkt.

I .alias jag har g satt till git och i .gitconfig, s satt till status-s.

Nu istället för att springa:

 git-status-s

Jag kan helt enkelt springa:

 g s

.gitignore

Ange filer som du vill att Git ska ignorera på hela systemet. Yay, inte mer .DS_Store oavsiktligt begås!

.gvimrc

En liten fil som förbättrar läsbarheten för gvim.

.hgignore

Simliar till .gitignore för Mercurial.

.hushlogin

I vissa fall, till exempel när du ssh in i en maskin, kan du bli presenterad med ett meddelande. Det kan se ut så här:

 _ | | _ __ ___ _ _ ___ ___ ___ | | ___ ___ _ ____ _____ _ __ | '_' _ \ | | | | / __ / _ \ / _ \ | | / __ | / _ \ '__ \ \ / / _ \' __ | | | | | | | | _ | | | (_ | (_) | (_) | | \ __ \ __ / | \ V / __ / | | _ | | _ | | _ | \ __, | \ ___ \ ___ / \ ___ / | _ | | ___ / \ ___ | _ | \ _ / \ ___ | _ | __ / | | ___ / Välkommen till min coola server. Varje skadlig och / eller obehörig aktivitet är strängt förbjuden. All aktivitet kan vara inloggad.

Den här filen förhindrar att detta visas.

.inputrc

Konfigurerar läslinjemiljön. Här kontrolleras hur tangenterna fungerar när du skriver in ett kommando i ditt skal.

Ett exempel på hur jag tycker det är användbart är att göra flik autofullständig oavsett filnamn fall:

 sätt på avslutnings-ignorera-fallet på

.osx

Detta är min favorit av alla dotfiles. Den körs en gång manuellt för att kommandona ska köra och träda i kraft. Beroende på vad du har lagt till i den här filen kan du behöva starta om datorn.

Några av de fantastiska sakerna jag älskar är:

  • Inaktivera "Är du säker på att du vill öppna den här applikationen?" Dialogrutan
  • Kontrollera om programuppdateringar dagligen, inte bara en gång per vecka
  • Inaktivera anmälningscenter och ta bort menyraden
  • Aktivera åtkomst för hjälpmedel
  • Ställ in en snabbt snabb upprepning av tangentbordet
  • Finder: tillåta sluta via ⌘ + Q; gör det också döljer skrivbordsikoner
  • När du utför en sökning, söker du som standard i den aktuella mappen
  • Snabba upp Mission Control animationer

.screenrc

Om du använder skärm, Detta tar bort startmeddelandet.

.vimrc

Jag är inte så bekant med vim. Men några av de saker du kan göra med den här filen är att aktivera radnummer och lägga till syntaxmarkering.

Låter som en bra idé för mig :)

.wgetrc

Om du använder wget, Detta lägger till ytterligare inställningar som att ändra timeout till 60 sekunder istället för standard 15 minuter. Det ställer också in försöket till tre, snarare än standard 20!


Dotfiles är gå!

Vid denna tidpunkt har jag gått över alla filer och jag är på ett stadium där jag är nöjd med allt i min repo. Något som jag inte var säker på har kommenterats.

Nu den spännande delen! Som det står har vi dotfiles i en repo men vi måste sätta dem på rätt plats så att de kan hittas och användas.

Tänk på det här, vi har Thor's Hammer, Batman's Utility Belt, Captain America's Shield, och Iron Man's Suit. Alla våra hjältar vet hur man använder dessa, men utan dem är de förlorade! Vi måste ge våra superhjältar sina vapen så att de kan använda dem.

För att göra detta (med mina befintliga dotfiles säkerhetskopierade och mina repor alla uppdaterade), öppna din terminal, CD till repo och springa

 källa bootstrap.sh

Nästa, CD till ~ och springa:

 källa .osx

Snabb omstart och ... Fantastiska supermakter är nu tillgängliga!!!


Ytterligare supermakter

Rupa Z

Spenderar du mycket tid på att göra saker som detta?

cd detta / är / det / sökvägen / det / jag / vill / så / jag / typ / det / allt / ut / till / få / whereiwant

Vad händer i stället kan du bara göra det här:

z whereiwant

Ja tack. Tack https://github.com/rupa/z.

För att lägga till detta, i .bash_profile Jag gjorde följande förändring:

 # init z https://github.com/rupa/z. ~ / Z / z.sh

Och även i install-deps.sh:

 cd git klon https://github.com/rupa/z.git chmod + x ~ / z / z.sh

Återgå saker

När du kör din dotfiles för första gången kan det hända att du inte tycker om en kod som har sprang. Till exempel i .osx fil, jag var inte så angelägen om vad följande kod gjorde:

 standardvärden skriv com.apple.dock showhidden -bool true

Den här koden ändrade opaciteten på dolda appar i dockan.

För att helt enkelt återgå detta beteende till standardläget, körde jag helt enkelt kommandot igen, den här tiden ändras Sann till falsk, som så:

 standardvärden skriv com.apple.dock showhidden -boll false

Detta ställde det tillbaka till standard.

Med de flesta kommandon är det ganska uppenbart att återgå till kommandot genom att helt enkelt ändra Sann till falsk eller tvärtom. Med andra är det möjligt att ställa in det som standard med standardinställningarna raderas, till exempel, standardinställningar ta bort NSGlobalDomain AppleHighlightColor. I vissa fall kan du också behöva starta om maskinen.

Anpassade .osx-kommandon

Nu är det här för den mer avancerade dotfile-mästaren. När du får mer kunskap och självförtroende med dotfiles kanske du vill inkludera din egen kod.

På en ny maskin om du finner att du manuellt byter inställningar, skulle dessa vara bäst automatiserade.

Lägger till din egen .osx Kommandon kan bli lite knepiga!

Men i allmänhet är det här ett bra ställe att börja:

  • standardinställningar läs> a
  • Ändra inställningen
  • standardvärden läs> b
  • diff a b

Genom att göra detta skapas en fil som heter en och b Då visas skillnaden mellan dem, med den här kunskapen kan du sedan öppna filen b i Sublime Text 2, leta efter den bit som har ändrats och försök att träna kommandot för att ändra det. Om du provar den här metoden lyckas du med!


Slutsats

Så där har du det! Gå ut, ha kul med dotfiles, se fram emot att ge din maskin superkraft och nästa gång du behöver ställa in en maskin från början, kan du le dig själv eftersom hela processen är automatiserad.

Tack så mycket för att sluta, vänligen kommentera nedan om du har några frågor eller förslag.

Jag är särskilt intresserad av att se din egen .punktfiler repos och eventuella nya tillägg du gör, så gärna lägga till en länk till din dotfiles repo i kommentarerna nedan.

Speciellt tack

Det här blogginlägget skulle inte ha varit möjligt utan den underbara hjälp från samhället, särskilt tack till @mathias, @paul_irish, @reybango och @AndrewPerkins.