Configurare una macchina Mac Dev da Zero a Hero con Dotfiles

La creazione di una nuova macchina può spesso essere una prospettiva eccitante. Tuttavia, come sviluppatori, ci sono molti strumenti di cui abbiamo bisogno che non vengono come standard.

In questo post, mi piacerebbe passare attraverso alcune delle tecniche che uso per aiutare a configurare la mia macchina in modo rapido, efficiente e con super poteri aggiunti.


introduzione

Dopo aver letto questo articolo, dovresti essere in grado di fare quanto segue:

  1. Imposta rapidamente una nuova macchina
  2. Migliora SSH in una macchina Linux
  3. Assorbi facilmente le configurazioni intelligenti di altri sviluppatori su GitHub
  4. Opzionalmente condividi la tua configurazione con altri sviluppatori e partecipa
  5. Questo è il modo in cui tutti gli sviluppatori professionisti mantengono le loro configurazioni

Prima di iniziare, avrai bisogno di capire Git e usare la riga di comando. Se non sei sicuro di cosa siano, ti consiglio di guardare oltre il seguente:

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

Superhero Dotfiles

Che cosa succede se si può modellare il terminale, rendere la velocità del controllo missione più veloce, eseguire g invece di idiota, avere linguetta completamento automatico indipendentemente dal caso del nome del file, controllare giornalmente gli aggiornamenti del software, non solo una volta alla settimana? E se tu potessi automatizzare la configurazione di tutte queste funzionalità con un singolo script? Suona bene? Allora questo post è per te.

Per molti aspetti la creazione di una nuova macchina dipende in gran parte dalle preferenze personali. Sono sempre in fase di refactoring e rivalutazione e ti consiglierei di fare lo stesso. Scopri cosa funziona meglio per te e condividi le tue conoscenze.

TL; DR: Investi tempo a imparare a configurare la tua macchina e ad automatizzare i processi, arriverà indietro di dieci volte.

Dotfile, così chiamato perché il nome del file inizia con a . si trovano nella directory home dell'utente. Questi file vengono creati durante l'installazione e la configurazione della macchina. Penso a ogni puntino come a un supereroe contenente ciascuno i propri superpoteri. Ho intenzione di andare oltre ogni supereroe dotfile e i poteri che si trovano all'interno. Ma prima…

C'è molto da dire per la bellezza dei dotfile, l'impostazione automatica delle configurazioni e l'accelerazione dei processi. Potrebbe essere allettante clonare un repository ed eseguire dotfile subito, ma sconsiglierei questo perché il risultato potrebbe avere risultati indesiderati.

Piccoli passi

Prima di tutto, consiglierei di clonare alcuni repository di dotfiles esistenti. Ciò consentirà di iniziare a comprendere la struttura del file e ottenere una panoramica del codice. Di seguito sono riportati i repository GitHub di alcuni sviluppatori principali che hanno condiviso i loro dotfile:

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

A prima vista può sembrare scoraggiante, ma non fatevi prendere dal panico, esaminerò ogni dotfile che uso quando installo una nuova macchina. Dopo aver letto questo post, quando hai una migliore comprensione di ogni file e cosa possono fare, ti consiglio di creare il tuo repository e sfruttare i dotfile esistenti per crearlo. È quindi possibile aggiungere i file e il codice nel modo migliore per soddisfare le proprie esigenze.

Come le persone chiamano in genere il loro repository dotfiles dotfile Ho impostato la struttura della cartella in questo modo:

 └── dotfiles ├── mathias │ └── dotfiles │ ├── LICENSE-MIT.txt │ ├── README.md │ ├── bin │ │ ├── bash -> / usr / local / Cellar / bash /4.2.45/bin/bash │ │ ├── httpcompression │ │ └── subl -> / Applications / 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

Qui, sto impostando una cartella principale denominata dotfiles, quindi una cartella con il nome utente e il repository. Il motivo per cui consiglio di configurarlo in questo modo è di evitare confusione. Parte del codice è abbastanza simile, quindi trovo utile vedere facilmente il codice che sto guardando. Ad esempio, se avessi quattro o più repository tutti denominati "dotfiles", questo processo sarebbe molto più difficile.

Vuoi sapere come faccio ad emettere la struttura delle cartelle in questo modo? Ho usato questa cosa fantastica chiamata albero, installato nel .infuso file.

Rompiamo ogni file e guardiamo cosa sta succedendo.


Superfoto Dotfiles e le loro superpotenze

I dotfile sono suddivisi in due tipi principali. Quelli che contengono una serie di comandi e vengono eseguiti una sola volta, .osx per esempio esegue un elenco di comandi e fornisce i super poteri di OS X. Altri file come .bash_profile e .bashrc corri ogni volta che apri una nuova sessione di Terminale e dai il superpotere del tuo Terminale.

Ecco una carrellata dei dotfiles nel mio repository e una descrizione di cosa possono fare.

.infuso

È meglio eseguire prima questo. Una volta che lo controlla homebrew è aggiornato, verrà utilizzato per installare strumenti utili come albero.

 preparare l'albero di installazione

Invece di dover andare su un sito e scaricare un'app, è anche possibile automatizzare l'installazione di alcune app utilizzando brew-botte, ad esempio:

 brew cask installa dropbox brek cask installa google-chrome

bootstrap.sh

Questo file è come girare la chiave in una macchina per avviare il motore.

Quando è in esecuzione, sincronizzerà il repository locale e quello su GitHub, quindi copierà i file nella cartella principale, ignorando tutti i file esistenti se esistono.

Pertanto, prima di correre bootstrap.sh è una buona idea fare il backup dei tuoi file dot esistenti e salvarli da qualche altra parte. Una comoda scorciatoia per arrivare ai tuoi dotfile nel Finder è:

Finder> Cmd + Maiusc + g> ~

Io uso un'app chiamata TotalFinder, questo aggiunge alcune caratteristiche interessanti al Finder. Le finestre a schede e una scorciatoia per mostrare e nascondere i file nascosti, ad esempio, mi sembrano molto utili.

Nel bootstrap.sh noterai source ~ / .bash_profile. Questo significa che se corri bootstrap.sh e si aprono finestre di Terminale, le nuove impostazioni verranno applicate senza necessità di un riavvio.

.bash_profile / .bashrc

Quando apri una nuova sessione di Terminale, questo file viene caricato da Bash. Carica negli altri punti percorso, bash_prompt, esportazioni, alias, funzioni, extra e configura alcune impostazioni utili come la correzione automatica degli errori di battitura durante l'utilizzo CD completamento.

In alcuni casi .bashrc può essere caricato, quindi questo file lo assicura .bash_profile è chiamato.

Mi piace il mio terminale pulito e privo di ingombri, quindi opto per non visualizzare il nome utente / computer in alto per impostazione predefinita con questo file.

.sentiero

Questo file accelera il processo di esecuzione di file eseguibili. Piuttosto che doverlo CD avanti e indietro attraverso vari percorsi verso file eseguibili, puoi impostare i percorsi dei file nel tuo .sentiero dotilfe e quindi eseguire direttamente i file eseguibili.

Generalmente, questo file non è conservato nel repository pubblico in quanto può contenere informazioni riservate.

Ecco un esempio di file ~ / .path che aggiunge ~ / utils al $ PATH:
export PATH = "$ HOME / utils: $ PATH"

.bash_prompt

Usando questo file puoi personalizzare e impostare i vari colori del tuo prompt di Bash.

.esportazioni

Imposta le variabili di ambiente, come ad esempio l'impostazione di Vim come l'editor predefinito che utilizza export EDITOR = "vim". Aumenta anche la quantità di cronologia salvata, utile per il backtracking sui precedenti comandi che hai usato.

.alias

Questo file contiene alias utili per aiutarti a scrivere di meno. Ad esempio, invece di digitare 'CD… 'puoi impostarlo qui per essere'... '. Iniziando a piacere ancora questi file? :)

.funzioni

Simile agli alias, tranne le funzioni possono assumere argomenti.

Prima, quando ho detto che stavo guardando diversi repository di dotfile, l'ho fatto mkdir per creare una directory. Dopo, dovrei quindi CD in quella directory.

Un esempio di una funzione che ritengo utile è:

 # Crea una nuova directory e inseriscila funzione mkd () mkdir -p "$ @" && cd "$ @"

Ora puoi semplicemente farlo MKD. Ora, non solo hai creato la directory, anche tu sei nella directory.

.extra

Questo file viene utilizzato per aggiungere le tue informazioni personali e non viene aggiunto al tuo repository per assicurarti che qualcuno non incolli per sbaglio il tuo progetto e inizi a impegnarsi con i tuoi dettagli. Qualcosa di carino da aggiungere qui saranno le tue credenziali Git.

.gitconfig

Questo file è usato solo da Git, ad esempio, quando a idiota il comando è invocato. Quindi anche se c'è un .alias file, quegli alias vengono eseguiti direttamente.

Nel .alias io ho g impostato idiota e in .gitconfig, S impostato stato -s.

Ora invece di correre:

 git status -s

Posso semplicemente eseguire:

 g s

.gitignore

Imposta i file che vorresti Git ignorare sull'intero sistema. Sì, non di più .DS_Store essere accidentalmente impegnati!

.gvimrc

Un piccolo file che migliora la leggibilità per gvim.

.hgignore

Simliar a .gitignore per Mercurial.

.hushlogin

In alcuni casi, ad esempio, quando tu SSH in una macchina, potrebbe essere presentato un messaggio. Potrebbe sembrare qualcosa del genere:

 _ | | _ __ ___ _ _ ___ ___ ___ | | ___ ___ _ ____ _____ _ __ | '_' _ \ | | | | / __ / _ \ / _ \ | | / __ | / _ \ '__ \ \ / / _ \ __ | | | | | | | | | _ | | | (_ | (_) | (_) | | \ __ \ __ / | \ V / __ / | | _ | | _ | | _ | \ __, | \ ___ \ ___ / \ ___ / | _ | | ___ / \ ___ | _ | \ _ / \ ___ | _ | __ / | | ___ / Benvenuti nel mio fantastico server. Qualsiasi attività dannosa e / o non autorizzata è severamente vietata..

Questo file impedisce che questo venga mostrato.

.inputrc

Configura l'ambiente 'Readline'. Questo controlla il modo in cui le chiavi funzionano quando stai inserendo un comando nella tua shell.

Un esempio di come trovo questo utile è quello di fare linguetta completamento automatico indipendentemente dal caso del nome file:

 imposta il completamento-ignora-caso su

.osx

Questo è il mio preferito di tutti i dotfile. Viene eseguito una volta, manualmente, affinché i comandi vengano eseguiti e abbiano effetto. A seconda di cosa è stato aggiunto a questo file, potrebbe essere necessario riavviare il computer.

Alcune delle cose fantastiche che amo sono:

  • Disattiva la finestra di dialogo "Sei sicuro di voler aprire questa applicazione?"
  • Controlla gli aggiornamenti del software ogni giorno, non solo una volta alla settimana
  • Disabilitare il Centro notifiche e rimuovere l'icona della barra dei menu
  • Abilita l'accesso per i dispositivi di assistenza
  • Imposta una frequenza di ripetizione della tastiera incredibilmente veloce
  • Finder: consentire l'uscita tramite ⌘ + Q; così facendo si nasconderanno anche le icone del desktop
  • Quando esegui una ricerca, cerca la cartella corrente per impostazione predefinita
  • Accelerare le animazioni del controllo missione

.screenrc

Se usi schermo, questo rimuove il messaggio di avvio.

.vimrc

Non mi è familiare vim. Tuttavia, alcune delle cose che puoi fare con questo file includono l'abilitazione dei numeri di riga e l'aggiunta dell'evidenziazione della sintassi.

Mi sembra una buona idea :)

.wgetrc

Se usi wget, ciò aggiunge impostazioni aggiuntive come la modifica del timeout a 60 secondi anziché i 15 minuti predefiniti. Imposta anche il tentativo su tre, anziché sul valore predefinito 20!


Dotfiles Are Go!

A questo punto, ho esaminato tutti i file e sono in una fase in cui sono contento di tutto ciò che riguarda il mio repository. Qualcosa di cui non ero sicuro è stato commentato.

Ora la parte emozionante! Così com'è, abbiamo i dotfile in un repository ma dobbiamo metterli nel posto giusto in modo che possano essere trovati e usati.

Pensaci in questo modo, abbiamo Thor's Hammer, Batman's Utility Belt, Captain America's Shield e Iron Man's Suit. Tutti i nostri eroi sanno come usarli, ma senza di loro sono persi! Dobbiamo dare ai nostri supereroi le loro armi in modo che possano usarli.

Per fare ciò (con i miei file dot esistenti e il mio repository aggiornato), apri il tuo terminale, CD al repo e corri

 fonte bootstrap.sh

Il prossimo, CD a ~ e corri:

 fonte .osx

Riavvio rapido e ... Fantastici, i super poteri sono ora disponibili!!!


Super poteri aggiuntivi

Rupa Z

Trascorri molto tempo a fare cose del genere?

cd this / is / the / path / that / i / want / so / i / type / it / all / out / to / get / whereiwant

E se invece, potessi fare questo:

z dovewant

Sì grazie. Grazie https://github.com/rupa/z.

Per aggiungere questo, in .bash_profile Ho apportato la seguente modifica:

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

E anche in install-deps.sh:

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

Cose che stanno tornando

Quando esegui i tuoi dotfiles per la prima volta, potresti scoprire che non ti piace un pezzo di codice che è stato pubblicato. Ad esempio, nel .osx file, non ero troppo appassionato di ciò che ha fatto il seguente codice:

 i valori di default scrivono com.apple.dock showhidden -bool true

Questo codice ha cambiato l'opacità delle app nascoste nel dock.

Per ripristinare semplicemente questo comportamento al suo stato predefinito, ho semplicemente eseguito di nuovo il comando, questa volta cambiando vero a falso, come così:

 i valori di default scrivono com.apple.dock showhidden -bool false

Questo lo riporta di default.

Con la maggior parte dei comandi è abbastanza ovvio di ripristinare il comando semplicemente cambiando vero a falso o vice versa. Con gli altri, è possibile reimpostarlo come predefinito usando default cancella, per esempio, default cancella NSGlobalDomain AppleHighlightColor. In alcuni casi potrebbe essere necessario riavviare la macchina.

Comandi personalizzati .osx

Ora questo è per il master più avanzato di dotfile. Man mano che acquisisci più conoscenza e sicurezza utilizzando i dotfile, potresti voler includere il tuo codice.

Su una nuova macchina se trovi che stai modificando manualmente le impostazioni, queste sarebbero le migliori automatizzate.

Aggiungere il tuo .osx i comandi possono diventare un po 'complicati!

Ma generalmente, questo è un buon punto di partenza:

  • valori predefiniti leggi> a
  • Cambia l'impostazione
  • valori predefiniti leggi> b
  • diff a b

Facendo questo crea un file chiamato un e B quindi mostra la differenza tra loro, con questa conoscenza puoi quindi aprire il file B in Sublime Text 2, cerca il bit che è cambiato e prova a elaborare il comando per cambiarlo. Se provi questo metodo, buona fortuna!


Conclusione

Così il gioco è fatto! Vai avanti, divertiti con i dotfile, non vedo l'ora di dare alla tua macchina i super poteri e la prossima volta che hai bisogno di configurare una macchina da zero, puoi sorridere a te stesso mentre l'intero processo è automatizzato.

Grazie mille per esserti fermato, per favore commenta qui sotto se hai domande o suggerimenti.

Sono particolarmente interessato a vedere il tuo .dotfile repos e tutte le nuove aggiunte che fai, quindi sentiti libero di aggiungere un link al tuo repository dotfiles nei commenti qui sotto.

Ringraziamenti speciali

Questo post sul blog non sarebbe stato possibile senza il meraviglioso aiuto della community, grazie a @mathias, @paul_irish, @reybango e @AndrewPerkins.