Skip to content

Instantly share code, notes, and snippets.

View xyproto's full-sized avatar
🥸
Perpetually focused

Alexander F. Rødseth xyproto

🥸
Perpetually focused
View GitHub Profile
@xyproto
xyproto / s.go
Created October 8, 2025 13:19
systemd service starter/stopper with a TUI, for Linux
package main
import (
"bufio"
"fmt"
"os"
"os/exec"
"strings"
tea "github.com/charmbracelet/bubbletea"
@xyproto
xyproto / upsie.go
Created October 8, 2025 12:53
Show uptime + selected uname info in a nice and brief way, with colors, for Linux
package main
import (
"bytes"
"flag"
"fmt"
"io"
"os"
"strconv"
"strings"
@xyproto
xyproto / mouseboid.go
Last active October 8, 2025 13:12
Make the mouse cursor move in boid-like ways, for Windows (shake to pause)
package main
import (
"fmt"
"math"
"syscall"
"time"
"unsafe"
)
// Simple C benchmark
#include <stdio.h>
#include <time.h>
inline int parse_bin_digit(const int ch)
{
switch (ch) {
case '0':
return 0;
package main
//
// Example program for checking errors when adding users.
//
// HOWEVER it might be better to instead check that the values are as expected
// in the Redis database AFTER adding them.
//
import (
@xyproto
xyproto / README.md
Last active April 9, 2020 10:21
Configuration for the Nano editor - red/black theme

Alias for .bashrc or .zshrc:

sh alias nano="LC_ALL=en_US.UTF-8 nano --smarthome --autoindent --linenumbers --mouse --historylog --trimblanks --backupdir=$HOME/.backup --rcfile=$HOME/.config/nano/config --nohelp --tempfile"

@xyproto
xyproto / props.go
Created October 3, 2018 16:06
List user properties with permissionbolt and simplebolt
package main
import (
"fmt"
"github.com/coreos/bbolt"
"github.com/xyproto/permissionbolt"
"github.com/xyproto/simplebolt"
"log"
"os"
"path"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
extern char* go_add(char*, char*) __asm__ ("example.main.Add");
char* __go_string_plus(char *a, char *b) {
char *c = malloc((strlen(a) + strlen(b) + 1));
strcat(c, a);
strcat(c, b);
@xyproto
xyproto / GC.md
Last active August 1, 2017 17:22
Garbage collection is not mandatory in Go

Go

Disable garbage collection:

debug.SetGCPercent(-1)

Trigger garbage collection:

runtime.GC()

@xyproto
xyproto / Makefile
Created July 26, 2017 14:00
One way of processing shell scripts through the C preprocessor + strip comments. Beware that cpp may do surprising things to shell scripts.
RELEASE ?= 0
%: %.in
@$(eval SHEBANG=$(shell head -1 ${<} | grep -q -F '#!' && echo 1 || echo 0))
@if [ $(SHEBANG) = 1 ]; then \
head -1 $< > $@; \
tail -n +2 $< | sed -e 's/^ *# .*$$//' -e '/^$$/d' -e '/^#$$/d' | cpp -DRELEASE=$(RELEASE) -P >> $@; \
else \
sed -e 's/^ *# .*$$//' -e '/^$$/d' -e '/^#$$/d' $< | cpp -DRELEASE=$(RELEASE) -P > $@; \
fi