Compare commits

...
14 Commits
Author SHA1 Message Date
aaron aca9e5d7cc chore(update): update flake file 2026-08-30 18:46:17 +02:00
aaron 2c8fbf008d Merge pull request 'chore(update): update flake file' (#72) from chore/update into main
Reviewed-on: #72
2026-08-20 20:53:12 +02:00
aaron c4f1be8a38 chore(update): update flake file 2026-08-20 20:52:22 +02:00
aaron 6df7fcacbb Merge pull request 'fix: ship a numbered udev rule file for vial since otherwise it gets overwritten by systemd's udev file' (#71) from feature/vial into main
Reviewed-on: #71
2026-08-09 14:45:34 +02:00
aaron bc11b464a8 fix: ship a numbered udev rule file for vial since otherwise it gets overwritten by systemd's udev file 2026-08-09 14:45:08 +02:00
aaron 0ac9b45286 Merge pull request 'feature(udev): add support for vial.rocks configurable devices and add the native app as well' (#69) from feature/lily58 into main
Reviewed-on: #69
2026-08-09 14:27:03 +02:00
aaron 55e12b2226 Merge pull request 'feature/appimage' (#70) from feature/bitbox02 into main
Reviewed-on: #70
2026-08-09 14:26:54 +02:00
aaron eab8f4974e feature(appimage): add appimage squashfs support for my nixos 2026-08-09 14:13:52 +02:00
aaron 0b1190a257 feature(appimage): add appimage squashfs support for my nixos 2026-08-09 14:13:06 +02:00
aaron 62954a67b5 feature(udev): add support for vial.rocks configurable devices and add the native app as well 2026-08-09 13:49:46 +02:00
aaron 37d44b64c1 Merge pull request 'chore(flake): update flake file' (#68) from chore/update into main
Reviewed-on: #68
2026-08-06 16:50:04 +02:00
aaron cb5dd91550 chore(flake): update flake file 2026-08-06 16:38:59 +02:00
aaron fb04de1d23 Merge pull request 'feature(tmux): make tmux forward csi-u sequences thus enabling shift-enter in opencode' (#66) from feature/tmux into main
Reviewed-on: #66
2026-07-29 10:46:47 +02:00
aaron f41387e451 feature(tmux): make tmux forward csi-u sequences thus enabling shift-enter in opencode 2026-07-29 10:44:42 +02:00
7 changed files with 82 additions and 37 deletions
Generated
+16 -15
View File
@@ -8,11 +8,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1782949081, "lastModified": 1787559586,
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "narHash": "sha256-onL0VLf9vPllmT0H/OlURIU5r5t5WIEl7t4tVNKT0Nw=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "rev": "9d0d87172c374f89da73c1cfe6d81ae62feac1f1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -28,11 +28,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784546264, "lastModified": 1787797243,
"narHash": "sha256-jxVr5EHMYAOkFvS2k0abIvt6NqyshyWmiHHzV17sT2g=", "narHash": "sha256-8+Q7NOB7RPajRjA4pbCDLzqH+MTjnG9x6LUPLfL2joA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "e3dea8e4792b09a6c0eb5836b0284ad05b1acba0", "rev": "99c9ec63390f1d8c14d95d9e8b17cc29cfbd4e11",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -43,11 +43,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1784497964, "lastModified": 1787900134,
"narHash": "sha256-vlHUuqAcbcH2RKmHbPiuQzbv1pnzzavXnI62RD0bqCU=", "narHash": "sha256-VYXO0XZlgj06dxJZRhrD3WoSsvq/c7+/Akyoa22pefw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "241313f4e8e508cb9b13278c2b0fa25b9ca27163", "rev": "83199d0d373dd3ac2b9a1996b1d0263f76ab7a4c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -66,11 +66,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1784057377, "lastModified": 1787862710,
"narHash": "sha256-yycNej5//EsRbV10moBoh+/63vXEwZD1ZFEiRm6C9rQ=", "narHash": "sha256-dL1Tv7LekaTWUJxHRckjbupWczDdc3QOgRuVCM+WAvQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "07180a087e4a00720dc0731cbcd8dec796974381", "rev": "8c096abcf376137527c134da4ee210332b08ccc0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -86,11 +86,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784556533, "lastModified": 1788099672,
"narHash": "sha256-tlcP2x7d+ldS3BypTcInqrsOhi6BPuSSTeubfBMmm8Y=", "narHash": "sha256-t4Rw5OeULK/WA2Jh9ja615sCs2AmvahkAUx/ymdf2YQ=",
"owner": "noctalia-dev", "owner": "noctalia-dev",
"repo": "noctalia-shell", "repo": "noctalia-shell",
"rev": "815635cf7dc810616c9e6ecf4b9b4f4c54e69905", "rev": "d891007c022a3a1d4484495fe8b350a00deafae9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -108,6 +108,7 @@
} }
}, },
"systems": { "systems": {
"flake": false,
"locked": { "locked": {
"lastModified": 1774449309, "lastModified": 1774449309,
"narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=", "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
+2
View File
@@ -2,6 +2,7 @@
{ {
imports = [ imports = [
../../modules/nixos/appimage.nix
../../modules/nixos/astro.nix ../../modules/nixos/astro.nix
../../modules/nixos/audio.nix ../../modules/nixos/audio.nix
../../modules/nixos/bootloader.nix ../../modules/nixos/bootloader.nix
@@ -25,6 +26,7 @@
../../modules/nixos/steam.nix ../../modules/nixos/steam.nix
../../modules/nixos/thunar.nix ../../modules/nixos/thunar.nix
../../modules/nixos/users.nix ../../modules/nixos/users.nix
../../modules/nixos/vial.nix
]; ];
# set hostname # set hostname
+2
View File
@@ -2,6 +2,7 @@
{ {
imports = [ imports = [
../../modules/nixos/appimage.nix
../../modules/nixos/astro.nix ../../modules/nixos/astro.nix
../../modules/nixos/audio.nix ../../modules/nixos/audio.nix
../../modules/nixos/bootloader.nix ../../modules/nixos/bootloader.nix
@@ -21,6 +22,7 @@
../../modules/nixos/settings.nix ../../modules/nixos/settings.nix
../../modules/nixos/steam.nix ../../modules/nixos/steam.nix
../../modules/nixos/users.nix ../../modules/nixos/users.nix
../../modules/nixos/vial.nix
]; ];
# set hostname # set hostname
+16 -22
View File
@@ -5,7 +5,7 @@ let
# #
# Written as escapes rather than literal glyphs. These are Private Use Area # Written as escapes rather than literal glyphs. These are Private Use Area
# codepoints: they render only with a patched font, they survive copy/paste # codepoints: they render only with a patched font, they survive copy/paste
# badly, and when they get stripped the loss is invisible -- the config still # badly, and when they get stripped the loss is invisible, the config still
# parses, the status bar just quietly loses its separators. Nix has no \u # parses, the status bar just quietly loses its separators. Nix has no \u
# escape of its own, but fromJSON does. # escape of its own, but fromJSON does.
sep = builtins.fromJSON '' sep = builtins.fromJSON ''
@@ -19,28 +19,27 @@ let
in in
{ {
programs.tmux = { programs.tmux = {
# defaults
enable = true; enable = true;
prefix = "C-a"; prefix = "C-a";
keyMode = "vi"; keyMode = "vi";
mouse = true; mouse = true;
# tmux-256color gives truecolor, italics and undercurl in nvim. # tmux-256color gives truecolor, italics and undercurl in nvim.
# screen-256color has none of them. No terminfo gymnastics needed here --
# unlike macOS, NixOS ships a current ncurses that has the entry.
terminal = "tmux-256color"; terminal = "tmux-256color";
# Default is 500ms. That is the lag you feel leaving insert mode in nvim, # Default is 500ms. Causes lag you feel when leaving insert mode in nvim,
# because tmux is waiting to see whether Esc starts an escape sequence. # because tmux is waiting to see whether Esc starts an escape sequence.
escapeTime = 10; escapeTime = 10;
# nvim autoread / :checktime react to focus. home-manager defaults to false. # nvim autoread / :checktime react to focus.
focusEvents = true; focusEvents = true;
# Default is 2000. # History limit.
historyLimit = 50000; historyLimit = 50000;
# Window numbers matching the number row. Behaviour change, so opt in. # Window numbers matching the number row.
# baseIndex = 1; baseIndex = 1;
extraConfig = '' extraConfig = ''
# Status keys # Status keys
@@ -49,16 +48,15 @@ in
# Tell tmux the outer terminal can do 24-bit colour (tmux >= 3.2). # Tell tmux the outer terminal can do 24-bit colour (tmux >= 3.2).
set -sa terminal-features ",*:RGB" set -sa terminal-features ",*:RGB"
# --- Shift+Enter / extended keys ----------------------------------- # Shift+Enter / extended keys
# Still the open topic; uncommenting these makes tmux forward CSI-u # These make tmux forward CSI-u sequences unconditionally.
# sequences unconditionally. Needs tmux >= 3.5 for the format option, # Needs tmux >= 3.5 for the format option,
# and a `tmux kill-server` afterwards -- a config reload is not enough. set -s extended-keys always
#set -s extended-keys always set -s extended-keys-format csi-u
#set -s extended-keys-format csi-u set -as terminal-features '*:extkeys'
#set -as terminal-features '*:extkeys'
# Status bar options # Status bar options
set -g status-interval 5 # was 1; the clock only has minute resolution set -g status-interval 5
set -g status-justify left set -g status-justify left
# Clock mode # Clock mode
@@ -69,11 +67,9 @@ in
set -g status-fg white set -g status-fg white
# Key bindings # Key bindings
# Reload configuration. tmux.conf is a read-only symlink into the nix
# store, so this only picks up changes after `home-manager switch`.
bind r source-file ~/.config/tmux/tmux.conf \; display-message "tmux.conf reloaded" bind r source-file ~/.config/tmux/tmux.conf \; display-message "tmux.conf reloaded"
# Panel split and selection -- new panes/windows inherit the cwd # Panel split and selection, new panes/windows inherit the cwd
unbind % unbind %
unbind '"' unbind '"'
bind v split-window -v -c "#{pane_current_path}" bind v split-window -v -c "#{pane_current_path}"
@@ -88,7 +84,7 @@ in
bind k select-pane -U bind k select-pane -U
bind l select-pane -R bind l select-pane -R
# Resize panes -- -r makes them repeatable, hold instead of re-prefixing # Resize panes
bind -r H resize-pane -L 5 bind -r H resize-pane -L 5
bind -r J resize-pane -D 5 bind -r J resize-pane -D 5
bind -r K resize-pane -U 5 bind -r K resize-pane -U 5
@@ -96,7 +92,6 @@ in
# Wayland clipboard integration # Wayland clipboard integration
# Copy selection to both clipboard (Ctrl+V / Shift+Insert) and primary (middle-click) # Copy selection to both clipboard (Ctrl+V / Shift+Insert) and primary (middle-click)
# v/C-v added: you had no way to *start* a selection from the keyboard.
bind -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi C-v send-keys -X rectangle-toggle bind -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-copy --primary" bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-copy --primary"
@@ -107,7 +102,6 @@ in
#set -g set-clipboard on #set -g set-clipboard on
# Kill commands # Kill commands
# Drop the `confirm-before -p "..."` part for the old single keystroke.
bind q confirm-before -p "kill window #W? (y/n)" kill-window bind q confirm-before -p "kill window #W? (y/n)" kill-window
bind Q confirm-before -p "kill session #S? (y/n)" kill-session bind Q confirm-before -p "kill session #S? (y/n)" kill-session
+19
View File
@@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
{
# AppImages ship a squashfs payload that the bundled runtime mounts through
# libfuse.so.2 at startup. nix-ld resolves the ELF interpreter but not that
# dlopen, so running one directly dies with "dlopen(): error loading
# libfuse.so.2". appimage-run sidesteps the mount entirely: it unpacks the
# image and runs the payload inside an FHS sandbox, which the bundled Qt and
# electron style binaries need anyway.
#
# Used for the BitBox02 wallet AppImage, downloaded fresh from
# https://bitbox.swiss/download/ rather than installed from nixpkgs.
programs.appimage = {
enable = true;
# register AppImages with binfmt_misc so ./Something.AppImage runs as-is,
# no appimage-run prefix to remember.
binfmt = true;
};
}
+1
View File
@@ -35,6 +35,7 @@
tree tree
unzip unzip
usbutils usbutils
vial
vim vim
wget wget
which which
+26
View File
@@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
{
# Vial-capable keyboards (lily58 pro r2g) expose a second, non-keyboard raw
# HID interface that vial.rocks drives over WebHID. Its /dev/hidraw* node is
# root-only by default, so neither chromium nor the native app can open it.
#
# This has to ship as a numbered rules file rather than via
# services.udev.extraRules: extraRules lands in 99-local.rules, but the
# builtin that turns TAG+="uaccess" into an actual ACL is invoked from
# systemd's 73-seat-late.rules. A tag set at 99 is set too late to be seen,
# so the device ends up correctly tagged and still unreadable. 60- sorts
# safely ahead of 73.
services.udev.packages = [
(pkgs.writeTextFile {
name = "vial-udev-rules";
destination = "/lib/udev/rules.d/60-vial.rules";
# Vial firmware advertises itself through a magic USB serial, so this
# matches any vial board rather than just the lily58. uaccess hands the
# device to whoever owns the active seat, no group membership needed.
text = ''
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{serial}=="*vial:f64c2b3c*", TAG+="uaccess"
'';
})
];
}