aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2022-06-16-terminal-lifestyle.org
blob: c6b4483986deafbc642ed31db29b19dbb0d7f3ba (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
#+date:        [2022-06-16 Thu 00:00:00]
#+title:       Terminal First: Why the GUI Is Optional
#+description: My setup for handling email, browsing, IRC, and RSS from the terminal.
#+slug:        terminal-lifestyle
#+filetags:    :linux:

* 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 (Cascading Style Sheets) 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 (Really Simple Syndication) 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 graphical 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 virtual private network (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 (end-to-end encryption).

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 (Hypertext Markup Language) 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 PGP (Pretty Good Privacy)
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 (Outline Processor Markup
Language) 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.