Sette opp en Mac Dev Machine fra null til helt med Dotfiles

Å sette opp en ny maskin kan ofte være et spennende potensial. Men som utviklere er det mange verktøy vi trenger som ikke kommer som standard.

I dette innlegget vil jeg gjerne gå gjennom noen av de teknikkene jeg bruker for å hjelpe meg med å sette opp maskinen min raskt, effektivt og med ekstra supermakter.


Introduksjon

Etter å ha lest denne artikkelen, bør du kunne gjøre følgende:

  1. Sett raskt opp en ny maskin
  2. Forbedre SSH'ing i en Linux-boks
  3. Lett absorbere smarte konfigs fra andre utviklere på GitHub
  4. Eventuelt dele oppsettet ditt med andre utviklere og delta
  5. Slik opprettholder alle profesjonelle utviklere sine konfigurasjoner

Før vi begynner, trenger du litt forståelse av Git og bruker kommandolinjen. Hvis du ikke er sikker på hva disse er, vil jeg anbefale å se over følgende først:

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

Superhero Dotfiles

Hva om du kunne stilere terminalen, gjør hastigheten til oppdragskontrollen raskere, løp g i stedet for git, ha tab Autofullfør uavhengig av filnavn, sjekk om programvareoppdateringer daglig, ikke bare en gang i uken? Hva om du kan automatisere å sette opp alle disse funksjonene med et enkelt skript? Høres bra? Da er dette innlegget for deg.

I mange henseender er det å sette opp en ny maskin helt ned til personlig preferanse. Jeg er alltid refactoring og reevaluating og jeg vil råde deg til å gjøre det samme. Finn ut hva som fungerer best for deg og dele din kunnskap.

TL; DR: Invester tid til å lære å konfigurere maskinen og automatisere prosesser, du får den tiden tilbake ti ganger.

Dotfiles, såkalte fordi filnavnet begynner med a . finnes i brukerens hjemmekatalog. Disse filene er opprettet når du installerer og konfigurerer maskinen. Jeg tenker på hver dotfile som en superhelt som hver inneholder sine egne supermakter. Jeg skal gå over hver superhelt dotfile og kreftene som ligger innenfor. Men først…

Det er mye å si om awesomeness av dotfiles, konfigurere konfigurasjoner automatisk og fremskynde prosesser. Det kan være fristende å klone et repository og kjøre dotfiles med en gang, men jeg vil råde over dette da utfallet kan ha uønskede resultater.

Baby skritt

Først av alt, vil jeg anbefale å klone noen eksisterende dotfiles repositories. Hvis du gjør det, kan du begynne å forstå filstrukturen og få oversikt over koden. Følgende er GitHub repos fra noen topp utviklere som har delt sine dotfiles:

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

Det kan virke skremmende ved første øyekast, men ikke panikk, jeg skal gå over hver dotfile som jeg bruker når jeg installerer en ny maskin. Etter å ha lest dette innlegget, når du har en bedre forståelse av hver fil og hva de kan gjøre, vil jeg anbefale å lage ditt eget arkiv og dra nytte av eksisterende dotfiles for å bygge opp det. Du kan da legge til filene og koden i det som passer best for dine behov.

Som folk nevner generelt deres dotfiles repo dotfiles Jeg stiller mappestrukturen opp slik:

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

Her setter jeg opp en hovedmappe som heter dotfiles, deretter en mappe med brukernavnet og deretter repo. Grunnen jeg anbefaler å sette opp slik som dette er å unngå forvirring. Noen av kodene er ganske like, så jeg synes det er nyttig å enkelt se hvilken kode jeg ser på. For eksempel, hvis jeg hadde fire eller flere repos alle navngitte "dotfiles", ville denne prosessen bli mye vanskeligere.

Vil du vite hvordan jeg skriver ut mappestrukturen slik? Jeg brukte denne fantastiske tingen som heter tre, installert i .brygge fil.

La oss kaste hver fil ned og se på hva som skjer.


Superhero Dotfiles og deres supermakter

Dotfiles er delt inn i to hovedtyper. De som inneholder et sett med kommandoer og bare kjører en gang, .osx for eksempel kjører en liste over kommandoer og gir OS X supermakter. Andre filer som .bash_profile og .bashrc Kjør hver gang du åpner en ny Terminal-økt, og gir Terminal-superkrefter.

Her er en nedlasting av dotfilene i min repo og en beskrivelse av hva de kan gjøre.

.brygge

Det er best å kjøre dette først. Når det sjekker det Hjemme brygget er oppdatert, vil den bli brukt til å installere nyttige verktøy som tre.

 brygge installasjonstreet

I stedet for å måtte gå til et nettsted og laste ned en app, er det også mulig å automatisere installeringen av enkelte apper ved hjelp av brygge-cask, som for eksempel:

 brew cask installer dropbox brew cask installer google-chrome

bootstrap.sh

Denne filen er som å vri nøkkelen i en bil for å starte motoren.

Når det kjøres, vil det synkronisere den lokale repoen og den på GitHub, og deretter kopiere de filene til hjemmemappen din, og overstyr eventuelle eksisterende filer hvis de eksisterer.

Derfor, før du kjører bootstrap.sh det er en god ide å sikkerhetskopiere eksisterende dotfiles og lagre dem et annet sted. En praktisk snarvei for å komme til dotfilene dine i Finder er:

Finder> Cmd + Shift + g> ~

Jeg bruker en app kalt TotalFinder, dette legger til noen fine funksjoner til Finder. Tabbed windows og en snarvei for å vise og skjule skjulte filer for eksempel finner jeg veldig nyttig.

I bootstrap.sh du vil legge merke til kilde ~ / .bash_profile. Dette betyr at hvis du kjører bootstrap.sh og har noen Terminal-vinduer åpne, vil de nye innstillingene bli brukt uten behov for omstart.

.bash_profile / .bashrc

Når du åpner en ny Terminal-økt, lastes denne filen av Bash. Den laster i de andre dotfilene banen, bash_prompt, eksport, aliaser, funksjoner, ekstra og konfigurerer noen nyttige innstillinger som automatisk korrigeringstastatur når du bruker cd ferdigstillelse.

I noen tilfeller .bashrc kan lastes, så denne filen sørger for at .bash_profile er kalt.

Jeg liker min Terminal ren og rotfri, så jeg velger ikke å vise brukernavn / datamaskinnavn øverst som standard med denne filen.

.sti

Denne filen øker prosessen med å kjøre kjørbare filer. Snarere enn å måtte cd frem og tilbake over ulike baner til kjørbare filer, kan du angi filbanene i din .sti dotilfe og kjør kjørbare filer direkte.

Vanligvis er denne filen ikke holdt i offentlig repo, da den kan inneholde sensitiv informasjon.

Her er et eksempel ~ / .path-fil som legger til ~ / utils til $ PATH:
eksporter PATH = "$ HOME / utils: $ PATH"

.bash_prompt

Ved å bruke denne filen kan du tilpasse og angi de forskjellige fargene i Bash-spørringen din.

.eksport

Angir miljøvariabler, for eksempel innstilling av Vim som standardredigeringsprogrammet ved hjelp av eksport EDITOR = "vim". Det øker også mengden historie lagret, nyttig for backtracking over tidligere kommandoer du har brukt.

.aliaser

Denne filen inneholder nyttige aliaser som hjelper deg med å skrive mindre. For eksempel, i stedet for å skrive 'cd ... 'du kan sette det her for å være'... '. Begynner å like disse filene enda? :)

.funksjoner

Ligner på aliaser, unntatt funksjoner kan ta argumenter.

Før da jeg nevnte at jeg så over forskjellige dotfile repos, gjorde jeg det mkdir å opprette en katalog. Etter det vil jeg da måtte cd inn i den katalogen.

Et eksempel på en funksjon som jeg finner nyttig er:

 # Opprett en ny katalog og skriv inn funksjonen mkd () mkdir -p "$ @" && cd "$ @"

Nå kan du bare gjøre det MKD. Nå har du ikke bare laget katalogen, du er også i katalogen.

.ekstra

Denne filen brukes til å legge til dine personlige opplysninger og er ikke lagt til i depotet ditt for å sikre at noen ikke ved et uhell gaffelprosjektet ditt og deretter begynne å begå ved å bruke dine opplysninger. Noe fint å legge inn her ville være Git-legitimasjonene dine.

.gitconfig

Denne filen brukes kun av Git, for eksempel når a git kommandoen er påkalt. Så selv om det er en .aliaser fil, disse aliasene kjøres direkte.

I .aliaser jeg har g satt til git og i .gitconfig, s satt til status-s.

Nå i stedet for å kjøre:

 git status-s

Jeg kan bare kjøre:

 g s

.gitignore

Sett inn filer som du vil at Git skal ignorere på hele systemet. Yay, ikke mer .DS_Store blir begått uhell!

.gvimrc

En liten fil som forbedrer lesbarheten for gvim.

.hgignore

Simliar til .gitignore for Mercurial.

.hushlogin

I noen tilfeller, for eksempel når du ssh inn i en maskin, kan du bli presentert med en melding. Det kan se slik ut:

 _ | | _ __ ___ _ _ ___ ___ ___ | | ___ ___ _ ____ _____ _ __ | '_' _ \ | | | | / __ / _ \ / _ \ | | / __ | / _ \ '__ \ \ / / _ \' __ | | | | | | | | _ | | | (_ | (_) | (_) | | \ __ \ __ / | \ V / __ / | | _ | | _ | | _ | \ __, | \ ___ \ ___ / \ ___ / | _ | | ___ / \ ___ | _ | \ _ / \ ___ | _ | __ / | | ___ / Velkommen til min kule server. Eventuell ondsinnet og / eller uautorisert aktivitet er strengt forbudt. All aktivitet kan logges.

Denne filen forhindrer at dette blir vist.

.INPUTRC

Konfigurerer 'Leslinjemiljøet'. Dette styrer måten tastene fungerer når du skriver inn en kommando i skallet ditt.

Et eksempel på hvordan jeg finner dette nyttig er å lage tab autofullfør uansett filnavn tilfelle:

 sett ferdig-ignorer-saken på

.osx

Dette er min favoritt av alle dotfiles. Den kjøres en gang manuelt for at kommandoene skal løpe og tre i kraft. Avhengig av hva du har lagt til i denne filen, må du kanskje starte maskinen på nytt.

Noen av de fantastiske tingene jeg elsker er:

  • Deaktiver "Er du sikker på at du vil åpne denne applikasjonen?" -Dialogboksen
  • Sjekk etter programvareoppdateringer hver dag, ikke bare en gang i uken
  • Deaktiver varslingssenter og fjern menylinjens ikon
  • Aktiver tilgang for hjelpemidler
  • Angi en blazingly rask tastatur gjentakelse rate
  • Finder: Tillat å avslutte via ⌘ + Q; å gjøre det vil også skjule desktop ikoner
  • Når du utfører et søk, søker du etter gjeldende mappe som standard
  • Fremskynde Mission Control animasjoner

.screenrc

Hvis du bruker skjerm, dette fjerner oppstartsmeldingen.

.vimrc

Jeg er ikke så kjent med vim. Men noen av tingene du kan gjøre med denne filen, er å aktivere linjenumre og legge til syntaksutheving.

Høres ut som en god ide til meg :)

.wgetrc

Hvis du bruker wget, Dette legger til flere innstillinger, for eksempel endring av timeout til 60 sekunder i stedet for standard 15 minutter. Det setter også prøve på tre, i stedet for standard 20!


Dotfiles er gå!

På dette tidspunktet har jeg gått over alle filene og jeg er på et stadium der jeg er fornøyd med alt i min repo. Alt jeg ikke var sikker på, har blitt kommentert.

Nå er den spennende delen! Som det står har vi dotfilene i en repo, men vi må sette dem på riktig sted slik at de kan bli funnet og brukt.

Tenk på det som dette, vi har Thor's Hammer, Batman's Utility Belt, Captain America's Shield, og Iron Man's Suit. Alle våre helter vet hvordan du bruker disse, men uten dem er de tapt! Vi må gi våre superhero sine våpen, slik at de kan bruke dem.

For å gjøre dette (med mine eksisterende dotfiles sikkerhetskopiert og repoen min oppdatert), åpner du Terminal, cd til repo og løp

 kilde bootstrap.sh

neste, cd til ~ og løp:

 kilde .osx

Rask omstart og ... Fantastisk, super krefter er nå tilgjengelige!!!


Ekstra supermakter

Rupa Z

Tilbringer du mye tid på å gjøre ting som dette?

cd dette / er / det / banen / det / jeg / vil / så / jeg / type / det / alt / ut / til / få / hvorvidt

Hva om i stedet, kan du bare gjøre dette:

z hvorvidt

Ja takk. Takk, https://github.com/rupa/z.

For å legge til dette, i .bash_profile Jeg gjorde følgende endring:

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

Og også i install-deps.sh:

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

Tilbakestilling av ting

Når du kjører dotfilene dine for første gang, kan du oppdage at du ikke liker et stykke kode som har blitt kjørt. For eksempel, i .osx fil, jeg var ikke så opptatt av hva følgende kode gjorde:

 standardinnstillinger skriv com.apple.dock showhidden -bool true

Denne koden endret opaciteten på skjulte apper i kaien.

For å bare gå tilbake til denne oppførselen til standardstatus, kjørte jeg rett og slett kommandoen igjen, denne gangen endret ekte til falsk, og så:

 standardinnstillinger skriv com.apple.dock showhidden -bull false

Dette setter det tilbake til standard.

Med de fleste kommandoer er det ganske åpenbart å tilbakestille kommandoen ved å bare endre ekte til falsk eller vice versa. Med andre er det mulig å sette det tilbake til standard ved hjelp av standardinnstillinger sletter, for eksempel, standardinnstillinger slette NSGlobalDomain AppleHighlightColor. I noen tilfeller må du kanskje også starte maskinen på nytt.

Egendefinerte .osx kommandoer

Nå er dette for den mer avanserte dotfile master. Etter hvert som du får mer kunnskap og tillit ved hjelp av dotfiles, vil du kanskje inkludere din egen kode.

På en ny maskin hvis du finner at du manuelt endrer innstillinger, vil disse være best automatisert.

Legge til ditt eget .osx kommandoer kan bli litt vanskelig!

Men generelt er dette et godt sted å starte:

  • standardinnstillinger leser> a
  • Endre innstillingen
  • standardinnstillinger les> b
  • diff a b

Å gjøre dette skaper en fil som heter en og b så viser forskjellen mellom dem, med denne kunnskapen kan du deretter åpne filen b i Sublime Text 2, søk etter biten som endret og prøv og utfør kommandoen for å endre den. Hvis du prøver denne metoden, lykke til!


Konklusjon

Så, der har du det! Gå videre, ha det gøy med dotfiles, se frem til å gi maskinen din super krefter, og neste gang du trenger å sette opp en maskin fra bunnen av, kan du smile til deg selv som hele prosessen er automatisert.

Takk veldig mye for å stoppe ved, vær så snill å kommentere nedenfor hvis du har noen spørsmål eller forslag.

Jeg er spesielt interessert i å se din egen .dotfiles repos og eventuelle nye tillegg du gjør, så vær så snill å legge til en link til din dotfiles repo i kommentarene nedenfor.

Spesiell takk

Dette blogginnlegget ville ikke vært mulig uten den fantastiske hjelpen fra samfunnet, spesielt takket være @mathias, @paul_irish, @reybango og @AndrewPerkins.