Giter Site home page Giter Site logo

starter_home's Introduction

How I Manage My Home

I wouldn't really call it "move in ready" yet, but the walls are up.

If you're an intrepid early adopter, head on over to the MOVING guide and start packing!

I use Git with a twist:

  • I've set it up to ignore everything by default
  • I then whitelist what git should care about

Finally use a few other twists around git:

  • $HOME's only remote is a local repository, such as $HOME/home-int
  • $HOME is on a context-specific non-master branch (e.g. patron, personal, server, etc)
  • $HOME/home-int has the remotes you'd expect:
    • Github for the master branch
    • Linode for any personal branches
    • private git server for patron branches

I also use automatic worktree updating on push, as setup by my git-setup-worktree-push script.

All of this allows me to:

  • quickly commit any changes in $HOME before they become forgotten
  • reconciliation (merging, rebasing, etc) so that any conflicts or other artifacts do not break my actual $HOME
  • easily separate public vs private changes without much risk of leaking private details to Github

Git

Much of my workflow as a programmer revolves around managing changes. As such, my git config is one of the parts of my setup that I iterate on the most. The [alias] section is where most of the important parts are.

(Neo)Vim

The only thing I use more than git, is vim (actually neovim.) While I do still have a .vimrc for classic vim, it's under-maintained at this point. Most of my vim config that matters is in .config/nvim/init.vim.

I use vim-plug to manage my neovim plugins (and pathogen for classic vim). I try to keep my vim config cleanly organized using manual fold markers, and by separating out anything beyond simple settings changes into separate plugins.

Basic Shell Setup: .profile, .bashrc, and .zshrc

First off, I'm primarily a Zsh user, but also have to use bash on occasion.

Because of this, there's a clear separation between non-shell specific environment in .profile, and any shell-specific things in that shell's rc file.

There's also a shared .aliases file between bash and zsh (TODO: I've never cared enough about my bash to fragment its rc, probably should get on that).

Rather than manage a monolithic dot file, I keep my .profile and .zshrc fragmented into .profile.d/ and .zsh/rc.d/ respectively.

So that I don't get into a manual numeric-prefixing game, I declare fragment dependencies in comments in each fragment; for example, I could have a file .profile.d/bar:

# after: foo
export BAR_THING="$FOO_THING"

Since the bar fragment depends on the foo fragemnet to define $FOO_THING. There is also a corresponding # before: ... form so that a dependency can inject itself before a dependant.

Dependency and dependant names don't have to actually be concrete files; for example in my .profile.d I have a virtual bootstrap dependant for early fragments such as hostname and locale.

Dependency resolution is done by a simple python script driving a simple for part in ...; do source $part; done loop.

Shell Orchestration: TMux (RIP Screen)

I use TMux for terminal multiplexing; its config is kept in .tmux.conf with an additional include statusline styling.

I do also have mouldering .screenrc from a long time ago.

starter_home's People

Contributors

jcorbin avatar woodrowpearson avatar zmt avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.