From ac17edeec3303a102338124dc80f64538595ef6a Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 25 Feb 2025 14:58:48 -0500 Subject: add new projects, xssbook, and blog post --- src/assets/blog/2025-02-24.md | 157 ++++++++++++++++++++++++++++++++++++++ src/assets/projects/11-mips.md | 7 ++ src/assets/projects/12-crimson.md | 7 ++ src/assets/projects/13-iris.md | 8 ++ src/web/_views/home/main.php | 6 +- src/web/lang/home.php | 16 ++-- 6 files changed, 192 insertions(+), 9 deletions(-) create mode 100644 src/assets/blog/2025-02-24.md create mode 100644 src/assets/projects/11-mips.md create mode 100644 src/assets/projects/12-crimson.md create mode 100644 src/assets/projects/13-iris.md (limited to 'src') diff --git a/src/assets/blog/2025-02-24.md b/src/assets/blog/2025-02-24.md new file mode 100644 index 0000000..4946faa --- /dev/null +++ b/src/assets/blog/2025-02-24.md @@ -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. diff --git a/src/assets/projects/11-mips.md b/src/assets/projects/11-mips.md new file mode 100644 index 0000000..031ca94 --- /dev/null +++ b/src/assets/projects/11-mips.md @@ -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. diff --git a/src/assets/projects/12-crimson.md b/src/assets/projects/12-crimson.md new file mode 100644 index 0000000..55415ae --- /dev/null +++ b/src/assets/projects/12-crimson.md @@ -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. diff --git a/src/assets/projects/13-iris.md b/src/assets/projects/13-iris.md new file mode 100644 index 0000000..d591964 --- /dev/null +++ b/src/assets/projects/13-iris.md @@ -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. diff --git a/src/web/_views/home/main.php b/src/web/_views/home/main.php index 50134e3..22cc856 100644 --- a/src/web/_views/home/main.php +++ b/src/web/_views/home/main.php @@ -47,7 +47,11 @@ freya@freya.cat - + + + XSSbook + Admin istrator + diff --git a/src/web/lang/home.php b/src/web/lang/home.php index 03d706c..2a21773 100644 --- a/src/web/lang/home.php +++ b/src/web/lang/home.php @@ -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'; -- cgit v1.2.3-freya