No Description

Kevin Bloom cf8b6bbef8 update 2 weeks ago
README.md d00f9c73fa updated readme 3 months ago
books.md b4b6a6fd75 books 6 months ago
games.md c9fe4edc9c minor updates 6 months ago
pkgsrc-2023.txt 46aeb8d3ad new year, new me 3 months ago
pkgsrc-2024.txt cf8b6bbef8 update 2 weeks ago

README.md

Kevin "The Nuclear" Bloom (nuclearkev)

The point of this repo is so that I don't need a website. Since my website would likely just be a plain HTML file with some links, a markdown file works just as well. I'm an avid Free Software user, supporter, and activist. I'm a huge fan of the BSD operating systems, espeically NetBSD and OpenBSD. I've fallen out of favor with Linux for a variety of reasons but I've used it for over 10 years for both professional and personal usage.

I spend a lot of time programming, as I do it professionally. I mostly work in JavaScript/TypeScript, ClojureScript, and Haskell. In my spare time, I prefer to use simpler tools such as plain POSIX shell, POSIX awk, and, if needed, C. I have found that the combination of shell + awk is capable of basically every scripting need. I use my own editor, ait(1) for all editing needs. I wrote ait because I wasn't using 95% of the features in GNU Emacs and I wanted a good editor that has all the Emacs features I used without the bloat.

Outside of computers, I have many other hobbies. I love spending time with my family, fixing/repairing things, entomology, target shooting, playing guitar, Turkish coffee, the art of wet shaving with a safety razor, various gaming (tabletop or video), reading (usually technical), storytelling, and, most importantly, abiding in God.

Workflow

My workflow is rather simple on my personal computers. I use NetBSD as my OS of choice and try to install as little software as I can without having many programs that do the same thing. For example, I don't need 2 web browsers installed unless one is GUI and the other is tty.

I use xdm from NetBSD as my login manager. I use dwm(1) as my window manager with modifications in my dotfiles. I use uxterm(1) as my terminal emulator. I really love suckless's st(1) but I prefer to just use the tools that come with NetBSD. I use mpv(1) ledger(1) is my accounting software. xlockmore-[lite] is my screensaver program solely because of xlock -mode star -trek 1000. Lastly, for text editing I use ait(1). For email, I use s-nail(1) which is probably one of the best email clients I've ever used because it just works. mupdf(1) for reading crap, feh(1) for images. I've written many scripts that use pick(1) too. I like to use simple programs that don't have too many dependencies. This is obvious if you look at my .cwmrc which users xload(1) and xclock(1). xclock is used has a battery percent monitor as well using a hack I found online while researching cwm.

Hardware

Active

  • [main] Custom Trashtop Desktop
    • AMD FX(tm)-8320 Eight-Core Processor
    • trash asrock motherboard
    • 16 GB of RAM
    • NVIDIA GeForce GTX 260 AMD Radeon 667X graphic card
    • Atheros Communications AR9285 Wireless Card
    • Kinesis Advantage 2
    • Whatever mouse I'm not using for work
    • NetBSD 9.3
  • ThinkPad X220T
    • i7
    • 4G of RAM
    • NetBSD 10 beta
  • [server] Raspberry Pi Model B
    • NetBSD 9.3
    • samba
    • nice portable HDD for backups

Inactive

  • Gertrude (2000s Gateway desktop)
    • My first computer
  • Dell Latitude D820
    • The machine I learned Common Lisp on
  • ASUS C201 Chromebook

Software

Software I install from pkgsrc is prefixed with the directory it's found in: editors/emacs. Anything without that prefix is installed manually from source.

  • ait
  • croc
    • excellent file transfer program
  • slstatus
  • devel/git
    • quick-git
    • qg is a tool I created to make git quicker.
  • dwm
  • finance/ledger
    • PKG_OPTIONS.ledger=-python
    • currently working on aledger
  • fonts/dejavu-ttf
  • games/minetest
  • graphics/feh
  • graphics/scrot
  • mail/s-nail
  • misc/pick
  • multimedia/mpv
  • net/yt-dlp
  • passmenu
  • print/cups
  • print/mupdf
  • security/doas
    • I use a very very restrictive config
  • security/password-store
  • textproc/aspell
  • textproc/aspell-en
  • textproc/groff
    • the version in NetBSD doesn't entirely support the tbl(1) preprocessor.
  • www/firefox
  • www/elinks
    • to render HTML emails
  • x11/dmenu
  • x11/xdotool
    • for passmenu
  • x11/xlockmore-lite
  • (optional) graphics/drawing
  • (optional) mail/isync
    • if not using s-nail's IMAP
  • (optional) mail/msmtp
    • if not using s-nail's SMTP
  • (optional) meta-pkgs/pkg_developer

Local Server Setup

As mentioned in the hardware section, I have an ancient Raspberry Pi that I run a local home server on. This server's sole purpose is to host a few git repos that the family uses and for backing up photos and phones. I've tried many solutions for these purposes and, honestly, most of them didn't work. I settled on keeping things as simple as possible and just use samba. I use SMBSync2 to sync my phone backups to the server and anything else can be transferred by any other device via normal samba methods. I then create backup tarballs and ship them off to an external server elsewhere. The setup isn't perfect but it's worked extremely well.

I used to have a minidlna server running as well but I found that it's almost worthless for viewing files. Although I have plans to update this server to a newer Raspberry Pi which may speed up this server and make it usable.

Why I Compile From Source

I have 4 reasons why I prefer to compile my programs from source.

1. More Control

I can better control how I want to run the program. This is really the crux of it all. If you install a program from a traditional binary-based package manager you get whatever the maintainer thinks is best to include. Usually it's compiled to support for as much as possible. While sometimes this is nice, say for mpv, it isn't want I want for most of my other programs such as emacs. This helps not only with dependency control and management but also being able to control how the software will run.

2. Fundamental to Free Software

Many users of free operating systems take advantage of binary packages for software. Most all Linux distros and BSDs have a repository of pre-compiled programs that you can easily just download, install, and run. This is great for speed and ease-of-use but what if you don't like how a binary is built? What if it's built with many extra dependecies that you don't need? If you're like most others, you don't care. Just install everything - the package manager will take of care it for you anyways. What if it doesn't? I've had Debian's dpkg and apt completely lock up on me preventing me from installing updates somewhere between 3-5 times in my Linux life.

The reason why compilng is fundamental to free software is rhetorically answered in the above paragraph: What if you don't like how a binary is built? Well, if it's a binary: too bad so sad. If it's a makefile or recipe: just edit the recipe. Also, one of the key freedoms with Free Software is the ability to have the source [and do with it as you wish]. If you only use binaries, you might as well be using proprietary software! (slightly joking...)

3. pkgsrc Doesn't Sign Their Binaries

For reasons unknown to man, the pkgsrc and NetBSD team have never included support for signed binaries. This means when you install a program using the pkg_add or pkgin utilities you're installing a program that hasn't been verified that it's actually what it says it is. Not even a simple SHA256 is done. This is kind of a big deal and therefore is, in my opinion, unsafe to install programs this way. Thankfully, all pkgsrc files are signed and checked before being installed.

4. More Fun

While yes it's faster and easier to just install programs in binary form, it kind of boring. pkgin install emacs and you're done. I find compiling things from source to be kind of like a hobby or doing work around the house. When something finished and is installed properly, albeit thanks to the magic of makefiles in pkgsrc, there is a sense of accomplishment. Plus, if I'm building something large such as www/webkit-gtk I just let it run over night and in the morning I get a little surprise...

Why NetBSD?

My choice of NetBSD is not a reason of trying to be hip or cool, it was a logical decision taking into account many factors both interpersonal and technical. I don't need to explain why I don't use proprietary systems (unless for work), that's a given. What about the grand ol' GNU/Linux - or /Linux (you're supposed to say the slash) as I'm starting to call it thanks to distros that are trying to split away from GNU. I have 4 reasons why not Linux.

First, the Linux kernel is going nuts. I'm not going into detail but it's becoming more like the MS Windows kernel as time goes on. Second, toxic programs influenced by bad guys such as systemd. While, yes, you can go to another distro such as the amazing CRUX not wanting to use systemd really limits the distros you can use. Third, lack of care. Many distros out there only care about how many users they can get. They, therefore, try to make the distro as appealing to their crowd as possible. This, more or less, misses the point of free software. It's about the FREEDOM. Distros also should not include proprietary anything without informing the user at least or anything sketchy Take Ubuntu's Amazon spyware thing from the past - what a mistake. Fourth, stability. How many times have you done a system update and found X not working? Maybe the system won't even boot? This happened to me constantly when I was running Arch on my C201. I spent more time fixing it than actually using it! I've also had Debian systems break randomly too.

FreeBSD or DragonflyBSD? I'll pass on both. Neither have a strict free software policy nor do they really mention freedom anywhere on their sites. Also, FreeBSD people give me chills and it wouldn't work nicely with my NVIDIA card. OpenBSD is probably the most well written operating systems of all time and they have an extremely strict free software only policy. Oh yeah, now we're talking! Except it wouldn't boot on my computer thanks to the NVIDIA card I had it in originally... Well, NetBSD is kinda well written, has a strict free software policy that isn't extremely anti-GPL, AND it works with my NVIDIA card! I'd like to personally thank llvm-pipe for being an amazing generic video driver. Anyway, NetBSD checks all my boxes plus pkgsrc is amazing for compiling things from source.

Why did I write ait?

Well, I've come to realize a few things: Emacs is amazing but Emacs is overkill. I love Emacs bindings and how it edits but I don't use very many of the features anymore and having all the extra stuff just isn't worth it. I've been using ait as my only editor since around March 2023.

Qemacs, mg, jed, etc.? Qemacs is probably the only actual option even close to comparable to GNU Emacs. My only issue with it is that it isn't really an exact GNU Emacs clone and I find myself making many many mistakes. mg is really great but doesn't support UTF-8. Jed makes my brain hurt. Most of the others aren't really complete enough for me.

Lastly, I wanted to make an editor that combined the powers of Emacs, termbox2, and acme. Emacs has the best buffer and window management, best keybindings, and I know all the bindings. Termbox2 is super small and minimal. Acme uses the operating system to enhance the editor, which is brillent (yes, Emacs does this too but not the same).

Notable Programs

All of these are works in progress...

  • ait
    • small yet mighty GNU Emacs style editor
  • quick-git
    • git(1) frontend written in POSIX shell and awk(1)
    • aimed at being quick to input git commands
  • aledger
    • plain text accounting software based on ledger(1) written in POSIX awk(1) and shell
    • aimed at being similar to ledger but with zero dependencies
  • (coming soon...) REST client using POSIX shell, awk(1), and curl(1)
    • probably will be called scar or something cute like that.

Other Things

Occupation

I'm a full-stack developer for SKED. We use NixOps, NixOS, and Nix for everything. The backend is written in Haskell, frontend written with JS/TS, and iOS/Android app written in ClojureScript.

Books

Books

Favorite Games

Games

pkgsrc

I maintain a few packages in pkgsrc. You can find the list here. I also maintain games/minetest and have done some updates for other programs you can see it in the pkgsrc-${year}.txt files in this repo.