summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/assets/blog/2025-02-24.md157
-rw-r--r--src/assets/projects/11-mips.md7
-rw-r--r--src/assets/projects/12-crimson.md7
-rw-r--r--src/assets/projects/13-iris.md8
-rw-r--r--src/web/_views/home/main.php6
-rw-r--r--src/web/lang/home.php16
6 files changed, 192 insertions, 9 deletions
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 @@
<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>
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';