These kinds of projects are the epitome of the "using technology to solve human problems" fallacy.
If you are having trouble staying motivated to work, then you need to fix that. For me, browsing facebook et al is a palette cleanser of sorts. If I lock myself to only being able to view 'work' sites, I'd become too stressed to do my best work.
It's most definitely in the "tech to solve human problems" camp.
Interesting to hear that you feel more stressed when you lock yourself out of palette cleansing sites. For me, I sometimes get this background anxiety/agitation when working in front of a computer for long periods of time, which can tip me into distraction when I hit something frustrating.
My computer is a shared leisure/work machine, which means that it can fall into the "working in the bedroom effect:" I find that I don't work well in that space because it's where I sleep and relax at the end of a day.
I create a boundary between relaxing/working states by changing environment: going to a coffee shop, office, or another room.
For some reason, this script has a similar boundary/environment effect on me: an intentional step to create a different "space" where I am working.
1. Permanent for a time period. It is incredibly, incredibly hard to undo. This is what makes it different from the others
2. Applescriptable
3. GUI with whitelist/blacklist
I did this a while ago as a surrogate distraction. I don't ever use it, but here's a link to it. I am not a bash artist and am well aware there is much to improve. This is a scratched itch, nothing more:
Rather than looping through the lines of the config file and removing commented lines, you may consider just using grep and letting the shell take care of the whitespace:
# NB: left unquoted so it's split by the IFS.
blocked_sites=$(grep -v '^#' "$blocked_hosts")
The one I've found that's worked best for me is a Chrome extension called Delayed Gratification that actually only delays my access to the site for 30 seconds. It's enough that I can convince myself to sit there and wait for 30 seconds rather than turn it off when I really want access to the site and feel it's justified.
But 30 seconds is also a decent amount of time to convince myself that I don't really need to see that site right now, and often I'll just close the tab a few seconds in and get on with work.
Self-control only goes so far, but if (like me) you have trained yourself to flick to reddit as soon as you get even slightly bored, it's a good way to untrain that behaviour.
I'm in this camp--if I'm working on something in a browser and I get bored, my reflex is to open a new tab and do HN or reddit before I know what I'm doing.
Did a combination of Chrome/Safari nanny plugins for a while, but the effort of `sudo` + password seems to be working better and is a bit easier to turn on/off for me.
If you are having trouble staying motivated to work, then you need to fix that. For me, browsing facebook et al is a palette cleanser of sorts. If I lock myself to only being able to view 'work' sites, I'd become too stressed to do my best work.