aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2022-06-16-terminal-lifestyle.org
blob: 8ac3a5f1ff5ce560522a5b1507318ba0b09c001b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#+date: <2022-06-16 Thu 00:00:00>
#+title: Embracing a Focused Terminal Lifestyle
#+description: How to minimize digital distractions and maximize productivity using terminal-based tools and workflows for web browsing, communication, email, RSS, and coding.
#+slug: terminal-lifestyle

* Text-Based Simplicity

I've detailed my views on web-based minimalism and related topics in
other posts throughout the years; e.g., JavaScript/CSS bloat slowing
down websites that are essentially a text document. However, I have
never really expanded beyond talking about the web and describing how I
focus on minimizing distractions in other digital environments.

This post is going to set the baseline for how I /try/ to live my
digital life. It does not necessarily get into my physical life, which
is often harder to control and contain all the noise in our modern
world.

While there are new things to do every day in our digital world, I find
that keeping a core set of values and interests can ground you and keep
you mindful of /why/ you are participating in the digital world. For
example, if - at your core - you have no interest in what strangers
think about random topics, it would be unwise to start participating in
social media. However, I am someone who has been dragged in by effective
advertising to participate in communities that I realize I do not care
for.

I won't dive much further into explaining the philosophy of all this,
but I will link a few helpful articles that may pique your interest if
you're in search of more meaningful experiences:

- [[https://en.wikipedia.org/wiki/Mindfulness][Mindfulness]]
- [[https://en.wikipedia.org/wiki/Minimalism][Minimalism]]
- [[https://en.wikipedia.org/wiki/Stoicism][Stoicism]]

* Living Life in the Terminal

My personal approach to reducing digital distractions and increasing my
focus on the task at hand is to use a terminal for as much as I possibly
can.

Most days, this means that I have a few tabs open constantly in my
terminal:

1. A web browser
2. A chat client
3. An email client
4. An RSS feed reader
5. A local shell for navigating my computer's files
6. A remote shell for managing servers and other machines

Beyond this, I rarely open other tabs or GUI applications, unless
absolutely necessary. If you look, you may be surprised what can be
accomplished in the terminal.

For example, I have moved my music and entertainment downloads to the
terminal, along with my device VPN connections. I am exploring options
for moving my RSS subscriptions to something like
[[https://newsboat.org/][Newsboat]], so that I can read my daily
articles without all the fuss.

Now that we have some examples out of the way, let's dive into the
specifics.

** Browsing the Web

I'm going to start off with a hard topic for those who prefer to live in
the terminal: web browsing. This task is made hard mostly by websites
and web apps that require JavaScript to run. The other difficult part is
that if you're using a text-based browser, that means images won't load
(hopefully that's obvious).

I am using [[https://lynx.invisible-island.net][Lynx]], a text-based
browser that runs quickly and easily in the terminal. Lynx allows me to
browser most websites by simply typing =g= and then typing in the URL I
want.

If you need a search engine while in Lynx, I recommend
[[https://lite.duckduckgo.com/lite/][DuckDuckGo (Lite)]], which allows
you to search the web using their text-only interface.

Eventually, you will run into websites that don't work (or are just too
ugly and messy) in a text-only mode, and you'll be forced to switch over
to a GUI browser to look at that site. Personally, I don't mind this as
it doesn't happen as often as I thought it would.

The only time I need to do this is when I want to browse an
image/video-focused webpage or if I need to log in to a site, and it
doesn't support a text-only login page. For example, I am able to easily
log in to [[https://sr.ht][Sourcehut]] in lynx.

** Chatting with Friends

After web browsing activities, my main form of terminal communication is
Matrix. I use the [[https://docs.mau.fi/gomuks/][gomuks]] client
currently.

This was incredibly easy to install on macOS (but I will need to see if
it'll be just as easy on Linux when my new laptop arrives):

#+begin_src sh
brew install gomuks
#+end_src

Once you launch gomuks, it will sync and require your username and
password to login. After doing so, the only problem I ran into was
verifying my gomuks client so that I could participate in rooms with
E2EE.

Finally, I was able to verify the session by opening the Element desktop
app (I assume you can do this in the browser and mobile app too, but I'm
not sure) and manually verifying myself with this process:

1. Open the Element desktop app
2. Open a room I was a member of
3. Open the =Room Info= pane
4. Open the =People= menu and search for myself
5. Click on my profile name
6. Click on the session link under the =Security= section and follow the
   prompts to manually verify the session

Overall, I like gomuks and am able to enjoy all the features I was using
in Element. The only hiccup I have occurred is manually downloading
images to view them, which can be annoying.

** Email

Moving email to the terminal has been the hardest of the tasks for me.
Unlike web browsing, where I can simply decide to not look at a website
that does not work in the terminal, I cannot simply ignore emails sent
to me.

Personally, I am experimenting with [[https://neomutt.org/][neomutt]] as
a potential email client.

However, this requires a *TON* of configuration and tweaking to get
right. Even when I was able to set up neomutt, configure my email
account, and customize a few personal preferences, a lot of emails still
do not display correctly (mostly due to HTML and images).

I won't get into the details of configuring =neomutt=; I mostly followed
this blog post:
[[https://gideonwolfe.com/posts/workflow/neomutt/intro/][Email in the
Terminal: Configuring Neomutt]].

Finally, I have yet to figure out how to connect my GPG keys to
=neomutt=, but that's a problem for another day.

** RSS Feed Reader

I have just started using [[https://newsboat.org/][Newsboat]] to read
articles in my terminal and have found quick success with it.

The configuration was super easy for this app; I simply installed the
app, created a file for URLs, and imported my OPML subscriptions that I
had exported out of my old feed reader:

#+begin_src sh
brew install newsboat
#+end_src

#+begin_src sh
touch ~/.newsboat/urls
#+end_src

#+begin_src sh
newsboat -i=my_subscriptions.opml
#+end_src

** Writing & Programming

Unfortunately, the weak link in my terminal-based environment right now
is my grasp of the possibilities of editing files within a shell.

I am used to the easy extensions found in VSCodium and Kate, so I am
slowly learning how to mold the default editing tools to my needs.
Currently, this means I am using =nano= with the following
configuration:

#+begin_src config
set breaklonglines
set autoindent
set linenumbers
set tabstospaces
set tabsize 2
set fill 80
#+end_src

This configuration allows nano to automatically hard-wrap lines at 80
characters, autoindent the wrapped lines (if the previous line was
indented), use 2 spaces per tab, and display line numbers within each
file I open.

I am currently looking to see if =vim= or =emacs= would be more useful
for my current needs, but I'm not in any rush, so I don't expect to find
an answer anytime soon.

With my current life demands, I am not programming at the moment and
have not explored the best terminal set-up for programming. However, I
have seen many peers find success configuring =vim= and =emacs=, so
that's where I will start when I pick my projects back up.