stardance has been extended another month! the new deadline is october 31 :)

You are browsing as a guest. Sign up (or log in) to start making projects!

ngarnsworthy

@ngarnsworthy

Joined June 1st, 2026

  • 16Devlogs
  • 4Projects
  • 2Ships
  • 38Votes
HI! I'm @ngarnsworthy right now I'm working on termsite a library that allows you to make websites that look like terminals!
Open comments for this post

4h 26m 19s logged

Release 1.1.0

Done

  • Fixed NPM releases
  • Added environment to commands
  • Test and coverage reports in gitlab

TODO

  • Test re-renders
  • Add useful commands (echo, env, ls, etc.)
  • Add filesystem

Broken

The npm releases have issues with importing other files from within the package.

Retrospective

I did a much better job with small commits and using branches. I also improved my use of CI/CD with better test and coverage reporting. Despite the improvements in my test flow I still need to work on improving coverage. Some tests I tried to get to cover cases for the execution component did not cover the lines I intended them to. This combines with my lack of a good debug tooling in my editor, NeoVim, to make it difficult to write tests for specific lines.

Reasoning

The execution component exists as a result of the way preact checks props updates. Because the function for changing the env is passed with a bind it returns a new reference every time as a result the command re-renders which may cause a change to the env forcing the terminal to re-render. Yay, state loop :( /sar. To prevent this the execution component uses lifecycle methods to abort the render before it happens if there are no changes in the env.env, command, and commands props. This prevents re-renders that cause state loops, yay!

0
0
13
Open comments for this post

10h 3m 14s logged

Done

  • Tests are now working!
  • There is a fake terminal working!
  • Commitizen and Semantic Release worked!

TODO

  • Get persistent environmental variables working
  • Decrease unneeded re-renders

Broken

Releases to npm are currently empty for some reason?

Retrospective

In the future one thing I need to work more on is small commits. The commit for the terminal component grew a lot and got out of hand as I was finally beginning to use systems like tests in context. I also need to use branches and issue driven development more especially because semantic release pushes to npm with every commit to main.

Reasoning

I am using preact because it is very light. Overall I want this package to focus on remaining as light as possible so it can be put into websites with no performance impact

AI Disclosure

AI was used when I was figuring out how to setup jest with preact. No other AI was used in this devlog.

0
0
22
Ship Pending review

Hi! For one of my stardance projects I chose to work on NixOS dotfiles. They are a little different from the vast majority of projects so, please, bear with me. NixOS is a declarative operating system that has it’s function defined by a set of dotfiles, what I wrote! Because the dotfiles define an operating system it was a little harder to make a demo, so I opted to make a short video showing off some cool things you can do. Also, take a chance to read the README.md to see a little more explanation of some of the parts of the dotfiles.

One think I think I’ve learned a lot about through this project is functional programing. The dotfiles I wrote are in the functional Nix language. Functional programming compared to others forms lacks state, each function only acts on its inputs to create outputs. This makes the job of functions easier to determine because they can’t go and touch outside state, something I want to begin using in other projects on mine.

One thing I’m very proud of is the ability to run a Minecraft server I created. In the past with the servers I self-hosted I ran into issues with the server running out of resources; to fix this I used systemd (I’ve never really gotten into it before!) to only start and run the server when it is needed!!! I also had to learn about protecting services from bad-actors to prevent issues with my services.

One thing I would have done differently was the way I committed. I had a script that created a commit every time I rebuilt the dotfiles, this was a bad idea because now my commit history is full of unexplained commits and commits from when I was trying to get something to work. If I were to start this project from scratch I would have used something like commitizen and optional commits to prevent this issue.

  • 9 devlogs
  • 50h
Try project → See source code →
Open comments for this post

9h 21m 35s logged

Done

  • Added README.md
  • Added wshowkeys to make a demo video
  • Added docker
  • Changed Firefox Bookmarks and added Noogle
  • Added hyprsunset (night screen mode) and hypridle and hyprlock (lock screen)
  • Added more LSP servers to NeoVim
  • Added Discord updates from NeoVim
  • Fixed PDF application
  • Added CDemu
  • Removed some interface modules
  • Fix NAS mount
  • Added a Discord ping to the minecraft server
  • Added VPN

Minecraft Server

It is useful to know when someone joined the minecraft server. To this end a systemd that starts with the minecraft server was created that was wanted by the main minecraft server. This means when the minecraft server starts so will the ping service. The way the ping works is very simple, it just goes and sends a request to the discord webhook api with a body of {“message”: “The server has started”}. Like all systemd services I created I did my best to harden it. This involved limiting its network access and only allowing to see (and not write) a couple of files on the FS. The discord API key was stored in SOPS.

TODO

Continue to shape the OS to my developing needs. Also, it may be useful to start from scratch at some point.

0
0
15
Open comments for this post

7h 43m 18s logged

Done

Added persistent env that can be used to store values between commands.

Commands

  • ls: created, a command to see the files in your current directory
  • cat: created, a command to look at the contents of a file
  • cd: created, a command to change your directory
  • theme: created, a command to change your theme to one of the valid themes
  • help: improved, added new commands to help

TODO

  • Add more themes
  • Create mobile friendly interaction
  • Create accessible interaction
0
0
17
Open comments for this post

8h 42m 38s logged

Created a fake web terminal interface with each command running without state. Created the following
test commands : help , startup, error. The error command is used when a command is not found. The
startup command is ran on start and can be used to output usage information and setup state (when
that is implemented). The help command outputs help information on all commands.

0
0
7
Ship Changes requested

I created the frontend for a LMS made for a DECA chapter. The backend still needs to be implemented. The frontend targets server side rendering whenever possible to allow for better caching!

  • 2 devlogs
  • 9h
Try project → See source code →
Open comments for this post

8h 33m 50s logged

Done

  • Created some promotional content for the team
  • Test taking and viewing frontend
  • Test dashboard frontend

TODO

  • Event management
  • More promo content
  • User login
  • Backend data store
1
0
17
Open comments for this post

9h 19m 23s logged

Done

Minecraft

Added more mods to servers and setup a FTB modded server. I would have preferred to setup the FTB server using the nixos philosophy but I needed to install it with the installer because nix-minecraft does not support the use of FTB or Curseforge modpacks.

MTOD

The pictured MOTD shows up when you login to give a quick picture of the system status. The services that are displayed can be configured.

In progress: modularization

I’m creating a mySystem set of modules that individual configurations can enable and disable. This abstracts away the nix options and makes it easier to setup a new system quickly.

TODO

  • Print Server
  • Improve NeoVim
0
0
8
Open comments for this post

9h 6m 18s logged

Done

Socket Java Minecraft Server

Minecraft servers take up a lot of system resources so it makes sense to turn them off when no one is using them. I accomplish this through systemd services and sockets. A systemd socket listens for any incoming connection on a port and passes that to its associated service. Because Minecraft servers don’t support receiving from UNIX sockets that receiving service is a proxy. That proxy transfers all packets to the Minecraft server. The Minecraft server service is set to only run when the socket is active (which has a timeout).

Minecraft Bedrock Server

This one gave me a lot of headaches. Simply put BDS does not like NixOS. I ended up using a docker container to run the server in. This also comes with the benefit of auto updates.

BedrockOnLinux

One of the servers I run in Minecraft Bedrock (/) and I want to be able to access it from my NixOS PCs. So I created a nixpkg for BedrockOnLinux a tool that allows you to run Minecraft Bedrock on a Lixux machine.

Failures

There were SO MANY ISSUES with trying to get sockets working. At first I followed a blog post which used a over complicated method using RCON to stop the server when no players were on but using a timeout on the proxy worked much better and had player pings also keep the server open. I spent far too much time trying to get sockets to work for the bedrock server using socat to proxy the UDP connections, though this may have worked if I got my server properly working I’ll need to check this in the future.

TODO

  • Modpack from FTB
  • Firefox Bookmarks
  • Nvim code completion
0
0
7
Open comments for this post

5h 30m 31s logged

Done

Package

Created a package for mc-image-helper to use in a better Minecraft server module for NixOS because I plan on deploying it to the Minecraft server I run.

Clean up

Removed template comments and moved to a preset based system where presets like “PC” and “headless” controlled what was included.

Fonts

Fixed issues with emojis and CJK (Chinese Japanese Korean) characters.

Waybar

Improved battery icons and showing charging. Also enabled a smoother battery life readout.

NeoVim

Enabled NeoVim language servers and switched to internal Tree Sitter due to issues with the existing config.

Storage

Connect automatically to NAS using sops secrets.

TODO

NeoVim

Get snipping engine to work for code autocomplete

Server

Configure Minecraft module and deploy Minecraft server

Firefox

Add bookmarks for Stardance, Gitlab, NixOS, etc.

0
0
13
Open comments for this post

2h 54m 16s logged

MPD

MPD is a tool for playing music on Linux. I set it up as a user service under home-manager (to prevent issues with Pipewire O_o). I also configured a module in Waybar for it for easy control and seeing information.

TODO

  • Global MPD server to prevent database loading time
  • Firefox default bookmarks (prehaps)
  • Generalize config
0
0
7
Open comments for this post

2h 45m 1s logged

Transferred over NeoVim config

I had already built a NeoVim config in another set of dotfiles (when I was using Arch btw :P) and I just needed to move it over to home-manager nix dotfiles.

Fonts

Fonts needed to be fixed again 0_o. Now they are all managed my home-manager which avoids some of the fc detection issues I had been having. Emojis work now too!

Firefox

Firefox has finally been purged of all the junk! The new tab page is now empty from the get go!

TODO

  • Firefox default bookmarks
  • Add features to waybar
  • Generalize config for any computer
0
0
10
Open comments for this post

1h 47m 58s logged

Upgraded Waybar to look better.

Made system info all icons and removed unnecessary fluff. In the future I want to make it an option in Waybar to have your username be lowercase.

TODO

  • NeoVim config
  • Firefox default bookmarks
0
0
12
Open comments for this post

6h 56m 33s logged

Just added this project to Stardance!
Set up build automation, hyprland, waybar, kitty, and some common programs. Currently I’m working on creating a NeoVim config that is more than a placeholder to get HackaTime to work.

0
0
22

Followers

Loading…