add new projects, xssbook, and blog post

This commit is contained in:
Murphy 2025-02-25 14:58:48 -05:00
parent 859f31065d
commit ac17edeec3
Signed by: freya
GPG key ID: 9FBC6FFD6D2DBF17
6 changed files with 192 additions and 9 deletions

View file

@ -0,0 +1,157 @@
---
name: From Guix to NixOS
date: 025-02-25T14:57:00-05:00
desc: I love GNU, but im tired of managing everything myself.
---
I love GNU and all of the work they do, but If i have to work a full time job to
use your software the way I want, its not feasible for me to use...
### GNU/Guix
[Guix](https://guix.gnu.org) is a declarative linux distrobution developed by
the GNU project. If you ever herd of glibc, coreutils, or GNU/Hurd, its that
crowd. Guix's goal is to build declarative system that is fully libre: the
primary goal of the GNU project and the free software foundation. This means
running zero free software, no drm, no binary blobs, no strictly licensed
code, and not even providing the option to the user to run proprietary software
if they want. This is the GNU way.
#### Declarative systems
A declarative system is built and can be fully reproduced from a single
configuration. On my old guix system, I had a set of multiple guile scheme files,
guix's configuration language of choice, that specified the entire system. What
packages were installed, the users of the system with what groups they have, the
bootloader, init system and the services it runs, and everything else is all
contaiend in those scheme files.
For example, the following scheme defined the users that were on my systems.
```scheme
(define freya-user-accounts
(lambda (groups)
(cons* (user-account
(name "freya")
(comment "Freya Murphy")
(uid 1000)
(group "users")
(shell (file-append zsh "/bin/zsh"))
(home-directory "/home/freya")
(create-home-directory? #t)
(supplementary-groups groups))
%base-user-accounts)))
```
Packages can be defined...
```scheme
(define-public %freya-packages
(append
(specifications->packages (list ; video audio
"mesa"
"mesa-utils"
; terminal
"alsa-utils"
"vim"
"neovim"
; .... and so on
))))
```
Guix also uses an inhouse init system called shepherd that defines services using
guix configuration scheme files. Declarative systems are really cool. If I break
something, I can easially fix it by rolling-back my system. I dont have to figure
out what stuff in the system changed, and manually repair it. Since everything is
defined by configuration, it be overwritten when I rebuild the system state.
Another thing specific to guix I liked is that it uses guile as its
configuration language. For these reasons and many more, I switched to guix over
two years ago and stayed on it until recently. Recently I left guix, and this is
why.
### The problems
1. The Guix package manager is really slow
I have no gosh darn idea what the heck GNU was doing when they built guix, but
their package manage is slooooow. Really slow. Snail slow. If I wanted to
instantiate my configuration on a new system It could easially take one to two
hours. HOURS.
Also, the guix package manager doesnt do TLS correctly. I don't
know what why, but it every so often, especially when installing an entire system,
it will crash and loose any builds or downloads it was in the middle of processing.
Since the guix package manager is slow, it then takes a moment to start back up.
In conclusion, when instantiating a new system, I have to start the installer
multiple times, which adds to the hassle and install time.
2. Very few packages
The main issue with using software that is used by a very small community is
you will run into things just not being supported. With guix, this is packages.
Since guix does not expose binaries and shared libraries globally (this is
just how declarative systems work) you cannot just download software and built it.
With guix and other declarative systems, you have to package the software to
get it to run at all.
Due to this, I had to spend hours packaging software I wanted to use
including, but not limited to, UEFI firmware for QEMU, Hyprland, my lock screen,
clipboard, gtk themes, and modern versions of pipewire.
Since I was packaging all this software myself, there were no official binary
substitutes avaliable such that I didnt have to build all the software all the
time. Instead I had to manage my own [build server](https://cuirass.freya.cat/).
3. No non-free software
Do you need to use Discord because all your friends use it? Do you want
drivers to run a functional computer? Well if you asked those to questions GNU,
GNU would tell you to get better friends and get a better computer.
I'm sorry but im just not going to do that. Unlike other distrobutions that
hide non-free software behind a flag, GNU just doesnt support it. At all. Nada.
There are people in the community that add support themselves in their own
third-party repositories, but they can break. And even with those third-party
repositories the software may still not be packaged. Even more If you want to
package it yourself, guix's build system doesnt make it easy to package non free
software. Guix does not provide the utilities to do it. There are third-party
extensions to the build system that make it easier to package proprietary
software, but its not official and provided by guix.
4. Documentation and Support
The biggest issue I had with guix was their documentation and support, or
the lack there of. In the standard GNU fassion, the support they offer is
"read the fucking documentation" (RTFM). This is fine if the documentation is good.
With guix its not.
You would be lucky to find something in guix documented. You would be even
luckier if the documentation was any good. With guix, the best place to figure
how to use the system is IRC chat logs, mailing list archives, reading other
peoples dotfiles, and reading the guix source code.
### NixOS (the solution)
NixOS is another declarative system that is much older, more widly used, and
better supported then GNU/Guix. Guix was even a hard-fork of Nix. The major
two differences is that NixOS is configured using their inhouse nix language,
which isnt great, and that NixOS uses systemd for their init system.
Besides not being able to use lisp, and being forced to use systemd, there are
many benifits to NixOS over Guix. Nix supports non-free software if you choose
to use it. Nix has good documentation. Nix has packages for almost everything.
And compared to guix, nix is really fast.
So I switched.
#### My experience
Ive been on NixOS for a little over a month now, and I'm loving it much better.
The nix language is kind weird, but I can live with it. I dont have to use
third-party repositories just to get packages to get my system to boot. It
takes minutes not hours to setup a system. Everything just works™.
You can see my guix configuration [here](https://g.freya.cat/freya/dotfiles-guix)
and my nix configuration [here](https://g.freya.cat/freya/dotfiles-nix). If you
are trying to learn or switch to either system, you can use them as a good
resource. You can also view the guix repository I created called [sakura](https://g.freya.cat/freya/sakura)
when I had to package things. But if you need a recommendation to use either GUIX
or NixOS, from someone who used Guix for two years, use Nix.

View file

@ -0,0 +1,7 @@
---
name: mips
repo: mips
---
mips is a mips32 full toolchain featuring an assembler (masm), linker (mld),
and simulator (msim) for all the mips ELF programs you need.

View file

@ -0,0 +1,7 @@
---
name: crimson
repo: crimson
---
crimson is a barebones PHP framework for all your model view controller needs.
It is currently used on xssbook.com and integrated into this website.

View file

@ -0,0 +1,8 @@
---
name: iris
repo: iris
---
iris is a declarative package manager for NeoVIM that providies the ability to
lock the commits to your plugin repositories. Usefull for setups in NixOS or
GNU/Guix.

View file

@ -47,7 +47,11 @@
<tr>
<th><?=lang('contact_xmpp')?></th>
<td><a href="xmpp:freya@freya.cat">freya@freya.cat</a></td>
</tr>
</tr>
<tr>
<th>XSSbook</th>
<td><a href="https://xssbook.com/profile?id=7">Admin istrator</a></td>
</tr>
</tbody>
</table>
</div>

View file

@ -5,10 +5,10 @@ $lang['title'] = $lang['first_name'];
# sections
$lang['about'] = 'About';
$lang['section_about'] = '
Hello! My name is Freya, and I am a person on the internet.
I like to make projects that involve many things, though some of my
favorites are operating systems, programming languages, and networking
infrastructure.
Hi, and welcome to my webbed site! I go by Freya (IPA). I make cool
programming projects, work as a software developer, and lurk on the
interwebz. You can find me tinerking with systems programming, networking, and
declarative linux distros.
';
$lang['whats_new'] = 'Whats New?';
@ -23,11 +23,11 @@ $lang['interests'] = 'Interests';
$lang['interests_general'] = 'General';
$lang['interests_general_value'] = 'Computing, Anime, FNaF';
$lang['interests_music'] = 'Music';
$lang['interests_music_value'] = 'Billy Joel, Linkin Park, Vocaloid, Neil Cicierega';
$lang['interests_music_value'] = 'Vocaloid (Len <3), Neil Cicierega, SiIvaGunner';
$lang['interests_anime'] = 'Anime';
$lang['interests_anime_value'] = 'Sasaki and Miyano, Evangalion, Code Geass, Stranger by the Shore';
$lang['interests_comics'] = 'Comics';
$lang['interests_comics_value'] = 'Homestuck';
$lang['interests_anime_value'] = 'Evangalion, Code Geass, Banana Fish, Stranger by the Shore';
$lang['interests_comics'] = 'Comics / Books';
$lang['interests_comics_value'] = 'Homestuck, Erha';
# contact
$lang['contact'] = 'Contact Me';