add new projects, xssbook, and blog post
This commit is contained in:
parent
859f31065d
commit
ac17edeec3
6 changed files with 192 additions and 9 deletions
src
157
src/assets/blog/2025-02-24.md
Normal file
157
src/assets/blog/2025-02-24.md
Normal 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.
|
7
src/assets/projects/11-mips.md
Normal file
7
src/assets/projects/11-mips.md
Normal 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.
|
7
src/assets/projects/12-crimson.md
Normal file
7
src/assets/projects/12-crimson.md
Normal 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.
|
8
src/assets/projects/13-iris.md
Normal file
8
src/assets/projects/13-iris.md
Normal 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.
|
|
@ -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>
|
||||
|
|
|
@ -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';
|
||||
|
|
Loading…
Add table
Reference in a new issue