⇒ ↩ go back to index
software i use daily
january 10, 2021
⇒ I’ve had this post in my drafts folder for >3 months, but it was horridly written and not in any state to post. I was inspired to rewrite it by Ávalos’ post.
I’ll be going over software that I use daily (or at least often), most good, some not so good. Recommendations are libre, or at least open source.
browsing the webnetᵃ
A decent browser, as good as a web browser can be at least. I like the vim bindings (the main selling point) and the high depth of customization, far exceeding any other browser now that antitrust-shield (a.k.a. “firefox”) killed classic extensions. With the advent of Manifest V3, the mainstream browsers now give users and extensions the same power that the Judenrat held in Nazi Germanyᵇ, so I’ll never be using them any time soon. Qutebrowser /is/ based on qtwebengine, which is based off of chromium, so in the end I still am supporting the google monopoly, but at least not as much as if I actually used chrome/chromium. It’s not like it would ever be possible to write your own browser engine anyways, so might as well use the de facto reference implementation (not that it’s meant to be used as reference for anybody to make their own) and have anti-google features built on top. I’d recommend, better than other browsers at least.
[b]: not that google is necessarily on the same level of the nazis, but let’s admit it, they would wipe out the jews if it gave them $1,000 more profit and they could get away with it.
A beautiful browser for gemini and gopher, replete with a feed reader and lots of awesome features. What I use every day to browse gemini and gopherspace.
⇒ I’ve written about my feed setup on lagrange before, why not check it out?
youtube and other video sites
I use mpv with some key bindings in qutebrowser to watch any videos I like thanks to mpv’s integration with youtube-dl. I usually find videos via youtube’s rss feeds or by looking on a youtube proxy like invidious.
I use a self-hosted miniflux instance as my rss reader. It’s dead simple to set up.
⇒ miniflux is a minimalist and opinionated feed reader.
Miniflux has a good minimalist reader so I read all my rss feeds in that, but for other articles I just stumble across or am sent, I use wallabag. A bit of a pain to set up, but nothing difficult.
⇒ save and classify articles. read them later. freely.
in my telephone typewriter
I use zsh and oh-my-zshᶜ because I want pretty themes and good completion without having to do much setup work. I use the agnoster theme, and I love the git/fossil integration. I generally want something that works, looks decent, and doesn’t require a lot of setup, configuration, or babysitting, so a near-default omz install works fine for me. I obviously add my own aliases, functions, envvar definitions, etc, but the main shell config I don’t want to deal with.
⇒ my .zshrc
⇒ [c]: oh my zsh is a framework for managing your zsh configuration.
Like my shell configuration, I just don’t want to do a whole lot configuring my multiplexer. I use the Powerline Cyan Block theme from tmux-themepackᵈ and that’s it. I do use tmuxinatorᵉ scripts to be able to quickly open up common session setups. My usual setup is to have a “messaging” session that has neomutt, weechat, and ncmcpp, and a “main” session that I do stuff in. If I’m working on multiple projects and want clean workspaces then I’ll open up an “editing” session, which has one neovim pane, another in the working directory for testing, compilation, etc, and a third pane for man pages, documentation, running unrelated commands, etc.
⇒ my .tmux.conf
⇒ [d]: a pack of various tmux themes.
⇒ [e]: manage complex tmux sessions easily
Not much to say about this other than the fact that I use it. I love it because it lets me jump to my most commonly used directories without having to type out the full path or define an alias. That’s about it, my entire one line of setup and configuration for it is on line 165 of my .zshrc. It’s written in rust, but as long as I don’t have to compile it I’m okay (until I migrate to an architecture not supported by rust).
⇒ a faster way to navigate your filesystem
neovim and friends
I love neovimᶠ, I just can’t bring myself to leave it. I’ve tried emacs, including evil mode and doom emacs, but I just can’t part with my beautiful, beautiful neovim. My vim config is so unorganized and confusing that I can’t in good conscience post it, but it’s not a whole lot other than lots of keys configured for CoC and a few defaults that everyone has set up. I am a heathen that uses plugins, but I don’t think I’m /that bad/ compared to some bloated abominations I’ve seen.
Firstly, I use lots of syntax highlighting plugins, because I like my languages to be beautiful.
First up for the “real plugins,” I use CoCᵍ because I love having autocomplete & fancy lsp and wasn’t too happy with neovim’s built-in lsp support, I don’t think that’s too much despite the fact that CoC is rather heavyweight, but it’s really useful and I use most of its features.
I also use vimwikiʰ as a poor man’s org mode (which is exactly the way I want it, what I use vimwiki for is all I’d use org mode for anyways) that I take notes, plan in, etc. It’s not even a big plugin really, it’s just a convenience for jumping between hyperlinked wiki files. I like that you can export to html, I have a “quick link” on my startpageⁱ to my html-compiled vimwiki, and have it configured to automatically render to html on write so it’s always up to date.
Finally, I use a few more plugins for convenience: vim-plugʲ for managing my plugins, auto pairsˡ for ease of writingᵐ, vim-airlineᵒ for a nice status bar (surprisingly doesn’t require any configuration, pretty plug-’n’-play), gitgutterᵖ to show git changes, fzfʳ/fzf.vimˢ for switching between buffers and files, and goyoᵗ for better writing. I almost always have goyo enabled when writing prose, and almost never use it when writing code. It really is pretty though.
⇒ my normal vim view (this screenshot was taken before the previously mentioned rewrite of this post)
⇒ with goyo enabled. can you see how it’s great for prose and not so great for code?
A PSA about Vim & Co and the Editor Wars:
While I love it and use it incessantly, I .never/ recommend it to someone unless they’re already interested in learning vim. If people ask me what editor I recommend, I first always ask what they’re looking for. Small edits on the command line? nano (I can’t bring myself to recommend ed for a “casual user” even though I use it for small edits myself). Want a graphical editor? VS Code OSS or Atom. If, and only if, do I know that 1) they’re willing to put up with the hassle of being really slow for *months* before getting proficient at vim; and 2) they already know about it and were interested in learning it before asking me; would I recommend vim for somebody. I also don’t hold a grudge just because somebody uses a different editor, or tried vim and decided to use something else. I’ve tried a lot and only vim has been right for me, why couldn’t it be the inverse for somebody else? I recommended vim to somebody and they didn’t like it but loved emacs instead, and I was just happy that they’d found something they like, and they have very valid reasons for liking one over the other. Stuff that’s important to me is relatively unimportant to them, and stuff that’s important to them is relatively unimportant to me, so of course we’re going to use different things.
⇒ [f]: hyperextensible vim-based text editor
⇒ [g]: make your vim/neovim as smart as vscode.
⇒ [h]: vimwiki is a personal wiki for vim – interlinked, plain text files written in a markup language
⇒ [i]: a lightweight gruvbox-themed startpage
⇒ [j]: minimalist vim plugin manager
⇒ [l]: vim plugin, insert or delete brackets, parens, quotes in pair
[m]: i have to disable it a lot because it can get annoying when i’m editing something rather than writing new stuff. luckily <M-p> is a global shortcut for disabling/enabling the plugin so it doesn’t get in my way.
⇒ [o]: lean & mean status/tabline for vim that’s light as air
⇒ [p]: a vim plugin which shows git diff markers in the sign column and stages/previews/undoes hunks and partial hunks.
⇒ [r]: a command-line fuzzy finder
⇒ [s]: fzf heart vim
⇒ [t]: distraction-free writing in vim
While I love me a beautiful visual editor, when making quick edits it feels like…almost too much. I use ed for stuff like changing a few lines in a file, writing commit messages, etc. I also use ed scripts a lot, which are a lot like a simple sed or awk script, but I like ed scripts because if you know vi/ed commands you can convert something you already know how to manually do into an ed script really quickly.
If you thought my vim config was bloated, wait until you see my ed configuration, which is almost incomprehensibly complex and large. Here it is (if you missed it in my .zshrc earlier):
I know, a true user will immediately know what they do wrong and would never need those error messages wasting their tty’s ink ribbon, but I use -v so I know what errors actually are instead of the all-helpful “?”. I also use -l because otherwise ed will exit nonzero if a single editor command has an error, which gets annoying when using it to write commit messages or something, ’cause git will discard the message if the editor exits nonzero. Finally, I use -p'* ' because I like to know when I’m at the prompt vs. when I’m in insert mode, because I’m not clever enough to innately know, like a true user would.
Now, I know that people might think I’m crazy for using ed, but it really is fast and nice to use for small things once you get to know it. I’d never write code or anything long in it, but it still has its uses. The ed manualᵘ (not the man page, it’s GNU, remember?) goes through everything about it, but it really isn’t that different from vi’s basic command set, it doesn’t take a whole lot to learn it if you use vim.
⇒ [u]: ed manual
neomutt & associates
Yes, I love everything neo-, neovim, neomuttᵛ, both have wonderful features compared to their non-neo predecessors. Neomutt has manyʷ additional patches and features that I can’t live without, while still integrating all of mainline mutt’s changes and features. Of all the features that are included in neomutt, only one (the sidebar patch) was merged into mainline mutt, and that was after the sidebar was maintained as an independent patch for 5 years and as a part of neomutt for 2 years, so it seems like the mutt developers aren’t interested in integrating many community patches or requests—not that I blame them or expect them to, it just means I prefer the fork that does include those patches. On top of neomutt I use isync/mbsyncˣ to sync my email with my server and msmtpʸ for sending email. I also use vdirsyncerᶻ to sync contacts with my phone using nextcloud’s carddav features, and khardᵅ for searching through them when sending.
⇒ my neomutt muttrc
⇒ a sample configuration for each of my mail accounts (see the folder hooks at the bottom of my muttrc)
⇒ my neomutt keybindings
⇒ my mailcap for mutt (only used for proper rendering of html email)
For syncing and sending mail, my mbsync, msmtp, vdirsyncer, and khard configs are so bog-standard that I’m not bothering to post them. However, I do have a weird method of filtering email. I was using maildropᵝ for filtering and sorting email, but I realized that my configuration was so simple that it wasn’t worth the annoyance of using it, so I migrated my configuration to just use grep.
⇒ see my mail sync script that does basic filtering without needing special mail utilities.
⇒ [v]: neomutt is a command line mail reader (or mua). it’s a fork of mutt with added features.
⇒ [w]: neomutt has brought together lots of mutt patches, many of which were useful, but had been abandoned.
⇒ [x]: free imap and maildir mailbox synchronizer
⇒ [y]: msmtp is an SMTP client.
⇒ [z]: vdirsyncer is a command-line tool for synchronizing calendars and addressbooks between a variety of servers and the local filesystem.
⇒ [α]: console carddav client
⇒ [β]: mail delivery agent with filtering abilities
weechat and company
I use a pretty basic weechatᵟ configuration, all the big stuff goes on in my pounceᵋ, calico, and litterboxᵠ configuration on my server. I’ve actually had people ask me how to set up pounce before, so maybe this will be illustrative for people.
systemd services (yes, I still use systemd on my web server despite ridding all my personal computers of it):
⇒ necessary to get the pid directory and sockets set up, otherwise you’ll have to manually fix permissions every time it starts up.
⇒ the calico daemon, not much to it other than putting in your domain name
⇒ the actual pounce daemon. all of my different networks i’m in use carbon copied services like this, just changing the subdomain and configuration file
⇒ the optional litterbox logger, not a whole lot to it other than providing it a client key so it can log into the pounce server.
⇒ my configuration for pounce. all of my pounce configs are like this, with some obvious changes like autojoining channels, different sasl certs, etc.
⇒ [δ]: the extensible chat client.
⇒ [ε]: pounce(1) is a multi-client, tls-only irc bouncer. also includes the calico(1) dispatcher for running multiple pounce instances on one server.
⇒ [φ]: litterbox(1) is a tls-only irc logger. it is intended for use with the irc bouncer pounce.
mpd + ncmpcpp
You have to get your muzak somehow, why not also do it in the terminal? I just have it set up to hook into pulseaudio and that’s it. I literally just followed the arch wiki to set them both up:
⇒ arch wiki: music player daemon
⇒ arch wiki: ncmpcpp
I use pass to store all my passwords and logins. I use qute-passᵞ for entering logins in qutebrowser, and “Password Store”ᶥ on my phone.
⇒ pass: the standard unix password manager
⇒ [γ]: insert login information using pass and a dmenu-compatible application
⇒ [ι]: simple password manager that is compatible with pass
I use it for all my accounting and finances, just keep the journals encrypted somehow. It’s wonderful for keeping track of all your finances, I wholeheartedly recommend.
⇒ hledger: plain text accounting, made easy
Other than that though, I do like it for simple searches.
⇒ ripgrep recursively searches directories for a regex pattern while respecting your gitignore
I do prefer it when I’m just searching quickly for files, but I still use find for more complex queries.
⇒ a simple, fast and user-friendly alternative to 'find’
other utilities i shouldn’t need to elaborate on
⇒ syncthing is a continuous file synchronization program.
I use it for syncing a variety of files between my devices.
A KDE utility. The only hex editor that I’ve actually liked, although I’d love to find a decent TUI one (or write my own).
⇒ okteta is a simple editor for the raw data of files. this type of program is also called hex editor or binary editor.
I unwillingly use it for school. Absolute non-recommendation.
Well, that’s longer than I originally anticipated, but I do use a lot of things regularly. I’ll probably end up making a second (shorter) post when I come up with more. I’m getting into fossilᶿ but don’t have enough use with it to give a recommendation, but it’s very promising. I have a few more things, and I’m sure I’ll remember something I forgot to include on here.
⇒ [θ]: fossil is a simple, high-reliability, distributed software configuration management system
⇒ ↩ go back to index
⇒ like this post!
⇒ view likes and comments
⇒ contact: firstname.lastname@example.org
-- © 2021 nytpu - CC-BY-SA-4.0