Compare commits

...

58 Commits

Author SHA1 Message Date
eaa2de3e93 fix(emacs): lsp typo
All checks were successful
build / build (push) Successful in 2m47s
2026-04-29 19:44:48 -06:00
2073d0eacd feat(ryujinx): init 2026-04-29 19:44:16 -06:00
a900fe5664 feat(firefox): {en,ko}wikt aliases
All checks were successful
build / build (push) Successful in 3m20s
2026-04-29 09:30:08 -06:00
1dbd1d78ce feat(anki): anki-connect
All checks were successful
build / build (push) Successful in 3m45s
2026-04-28 10:47:39 -06:00
bec92689f7 fix(emacs): haskell cache
All checks were successful
build / build (push) Successful in 4m10s
2026-04-24 12:49:35 -06:00
087d5efaaf feat(emacs): qbe 2026-04-24 12:48:16 -06:00
148e9019f4 feat(emacs): haskell 2026-04-24 12:47:51 -06:00
05fd169c91 fix(emacs): syd-insert-file-name accurately label colliding paths 2026-04-23 17:08:12 -06:00
312fa1e42c feat(emacs): syd-insert-file-name classpath-relative 2026-04-23 17:08:12 -06:00
a55570bbf6 feat(emacs): customisable syd-insert-file-name 2026-04-23 17:08:12 -06:00
a35e9b63c1 feat(emacs): add magic requires for babashka.{fs,process}
All checks were successful
build / build (push) Successful in 2m39s
2026-04-19 14:14:46 -06:00
b7d32b5bc7 feat(easyeffects): init
All checks were successful
build / build (push) Successful in 2m33s
2026-04-14 09:53:56 -06:00
9979cf0497 chore(msyds): enable zathura
All checks were successful
build / build (push) Successful in 3m46s
2026-04-11 10:29:24 -06:00
b7bb888e98 feat(zathura): init module 2026-04-11 10:25:49 -06:00
8bd1250ab4 fix(emacs): prevent garbage from entering vc 2026-04-11 10:25:16 -06:00
b4a26e1713 feat(tf2): enable IPC stuff 2026-04-11 10:18:56 -06:00
3c1b5191da feat(emacs): command to import systemd env 2026-04-11 10:16:35 -06:00
ed18e5f850 fix(clojure): persist gitlibs 2026-04-10 16:47:32 -06:00
a9f95a1675 feat(emacs): 파일 이름을 넣음
All checks were successful
build / build (push) Successful in 2m53s
2026-04-02 08:59:03 -06:00
ecfb399127 refactor(niri,xwayland-satellite): split out xwayland-satellite
All checks were successful
build / build (push) Successful in 6s
해결 #5
2026-03-31 14:45:56 -06:00
bf834370e5 chore(sydpc): qemu은 끔
All checks were successful
build / build (push) Successful in 1m40s
2026-03-31 14:42:46 -06:00
5dc4d57d7e fix(emacs): coerce makeWrapper args
All checks were successful
build / build (push) Successful in 2m11s
2026-03-31 13:00:48 -06:00
17fb45606b chore(msyds): enable prism, flatpak on sydpc 2026-03-31 13:00:48 -06:00
1825424cbb feat: gtav battleye workaround 2026-03-31 13:00:48 -06:00
af08b2f1b1 fix(emacs): use fcitx5-remote correctly 2026-03-31 13:00:48 -06:00
7bdbb985da fix(emacs): auctex tex-view-selection 2026-03-31 13:00:48 -06:00
5a87805660 fix(emacs): add syd/project require 2026-03-31 13:00:48 -06:00
1f0c248b24 fix(emacs): set eshell aliases file envvar
Some checks failed
build / build (push) Failing after 1m17s
2026-03-31 11:47:47 -06:00
31b61ddd73 feat(prism-launcher): init
All checks were successful
build / build (push) Successful in 2m5s
2026-03-30 18:27:54 -06:00
c0b60ff0e4 feat(emacs): toki pona ligatures
All checks were successful
build / build (push) Successful in 2m40s
2026-03-30 13:20:18 -06:00
9ffa14e536 fix(jellyfin-rpc): systemd unit dependencies
All checks were successful
build / build (push) Successful in 2m44s
2026-03-29 19:05:17 -06:00
8c41e3b8df feat(gitea): set default merge style
All checks were successful
build / build (push) Successful in 6s
2026-03-28 14:21:40 -06:00
a9ac5ae964 feat(gitea): 도기 보나와 한국어 2026-03-28 14:21:40 -06:00
258c3edeab fix(emacs): o kepeken ilo Syd/handle
All checks were successful
build / build (push) Successful in 1m14s
2026-03-26 10:31:37 -06:00
5d5036a83c feat(emacs): eshell aliases from home.shellAliases
All checks were successful
build / build (push) Successful in 1m52s
2026-03-26 10:22:23 -06:00
da60eaa936 feat(bash): alias completions 2026-03-26 09:19:52 -06:00
c551e8f86e refactor: move crumb bash to msyds 2026-03-26 08:22:27 -06:00
de5b56d1b1 feat: markdown prose mode
All checks were successful
build / build (push) Successful in 3m4s
2026-03-24 20:00:08 -06:00
cbb7f3c7a7 fix: mark compilation buffer as popup 2026-03-24 19:59:42 -06:00
d0b5b42dca fix(fruitbook): disable bluetooth (since DMS provides it)
Some checks failed
build / build (push) Failing after 22m33s
2026-03-23 11:36:43 -06:00
7ea2a79aca fix(kdeconnect): o awen e ijo Kde-connect State
All checks were successful
build / build (push) Successful in 1m43s
closes #18
2026-03-22 02:27:45 -06:00
182198230a feat(gitea): 이메일 더함
All checks were successful
build / build (push) Successful in 6s
2026-03-22 02:23:34 -06:00
36be01d80e fix(emacs): o lon e fcitx-remote-command
All checks were successful
build / build (push) Successful in 1m23s
2026-03-22 01:31:22 -06:00
148597d593 refactor(fruitbook): niri 대신에 dms로 잠금
All checks were successful
build / build (push) Successful in 1m47s
2026-03-22 01:27:45 -06:00
087f015340 fix(fruitbook): 전지 그림을 보임
그런데 한 거만 해야 돼: upower을 켰어.
2026-03-22 01:18:52 -06:00
ab7d28ac0f fix(fruitbook): 노트북 닫을 때 화면을 잠금
All checks were successful
build / build (push) Successful in 1m37s
2026-03-22 00:50:51 -06:00
a913e4f5c7 fix(toki-pona): nasin pini la kepeken e sitelen pona 2026-03-22 00:45:46 -06:00
b31bcae064 fix(ci): o ante e pali mute kama pali lili
All checks were successful
build / build (push) Successful in 1m14s
2026-03-22 00:15:01 -06:00
2146717898 chore: sydpc밖에 steam, slippi, openutau를 끔
All checks were successful
build / build-sydpc (push) Successful in 2m10s
build / build-fruitbook (push) Successful in 36s
build / build-deertopia (push) Successful in 41s
2026-03-21 23:55:41 -06:00
584489c853 fix(fruitbook): nixos-modules를 빠른 선풍기 없이 켬 2026-03-21 23:55:22 -06:00
a3ead883fe fix(emacs): clojure-refactor mode hook
All checks were successful
build / build-sydpc (push) Successful in 2m4s
build / build-fruitbook (push) Successful in 24s
build / build-deertopia (push) Successful in 33s
2026-03-20 18:17:49 -06:00
86b80e887c feat(emacs): fcitx
All checks were successful
build / build-sydpc (push) Successful in 27s
build / build-fruitbook (push) Successful in 22s
build / build-deertopia (push) Successful in 25s
2026-03-17 12:45:20 -06:00
178f3b9c31 feat(toki-pona): apply in ghostty
All checks were successful
build / build-sydpc (push) Successful in 2m5s
build / build-fruitbook (push) Successful in 29s
build / build-deertopia (push) Successful in 42s
2026-03-17 11:43:54 -06:00
425f502bba fix(emacs): EXPAND TABS 2026-03-17 11:43:32 -06:00
077a709f65 fix(fruitbook): temporarily disable nixos-hardware
my laptop fans were going wild
2026-03-17 11:42:54 -06:00
989aaa37da feat(fruitbook): nixos-hardware
All checks were successful
build / build-sydpc (push) Successful in 4s
build / build-fruitbook (push) Successful in 3s
build / build-deertopia (push) Successful in 3s
2026-03-16 18:31:32 -06:00
02a3702e8e fix(bepasty): workaround for nixpkgs#500538
All checks were successful
build / build-sydpc (push) Successful in 34s
build / build-fruitbook (push) Successful in 24s
build / build-deertopia (push) Successful in 36s
https://github.com/NixOS/nixpkgs/pull/500538
2026-03-16 18:11:58 -06:00
2905839509 refactor(bepasty): no with lib 2026-03-16 16:50:32 -06:00
54 changed files with 1529 additions and 180 deletions

View File

@@ -4,26 +4,14 @@ on: [push]
jobs:
build-sydpc:
build:
runs-on: nixos
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: build sydpc
run: nix build -L .#nixosConfigurations.sydpc.config.system.build.toplevel
build-fruitbook:
runs-on: nixos
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: build fruitbook
run: nix build -L .#nixosConfigurations.fruitbook.config.system.build.toplevel
build-deertopia:
runs-on: nixos
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: build deertopia
run: nix build -L .#nixosConfigurations.deertopia.config.system.build.toplevel

82
flake.lock generated
View File

@@ -161,11 +161,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"lastModified": 1775087534,
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
"type": "github"
},
"original": {
@@ -420,14 +420,15 @@
"inputs": {
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_5"
"nixpkgs": "nixpkgs_5",
"nixpkgs-nixcord": "nixpkgs-nixcord"
},
"locked": {
"lastModified": 1772813986,
"narHash": "sha256-x0fD+LL+O99p36c2UnjnHvVq4/7TvGH/8G5lTNIJBCo=",
"lastModified": 1777125640,
"narHash": "sha256-jKmRu5PknoI0pk3WEqMhVReosUubUCq3M/izEQWzb+4=",
"owner": "KaylorBen",
"repo": "nixcord",
"rev": "e433a2919eb9b3a8c85ab3017c08685816e63a66",
"rev": "0e738683dd7551a9cbfa343397b1592dfd785b7e",
"type": "github"
},
"original": {
@@ -436,6 +437,21 @@
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1773533765,
"narHash": "sha256-qonGfS2lzCgCl59Zl63jF6dIRRpvW3AJooBGMaXjHiY=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "f8e82243fd601afb9f59ad230958bd073795cbfe",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1741402956,
@@ -454,11 +470,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1772328832,
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"lastModified": 1774748309,
"narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"rev": "333c4e0545a6da976206c74db8773a1645b5870a",
"type": "github"
},
"original": {
@@ -467,6 +483,22 @@
"type": "github"
}
},
"nixpkgs-nixcord": {
"locked": {
"lastModified": 1776734388,
"narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1742751704,
@@ -565,11 +597,11 @@
},
"nixpkgs_5": {
"locked": {
"lastModified": 1772465433,
"narHash": "sha256-ywy9troNEfpgh0Ee+zaV1UTgU8kYBVKtvPSxh6clYGU=",
"lastModified": 1776734388,
"narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c581273b8d5bdf1c6ce7e0a54da9841e6a763913",
"rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac",
"type": "github"
},
"original": {
@@ -581,16 +613,16 @@
},
"nixpkgs_6": {
"locked": {
"lastModified": 1773507054,
"narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=",
"owner": "NixOS",
"lastModified": 1773700673,
"narHash": "sha256-RLidgpn3mN3cVkIiiYehcmM2ImBnPudwISFLy71zN0o=",
"owner": "msyds",
"repo": "nixpkgs",
"rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9",
"rev": "2595b5f0592534492bce3cb61c2c9bf5ba03ffbe",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"owner": "msyds",
"ref": "fix-bepasty",
"repo": "nixpkgs",
"type": "github"
}
@@ -700,6 +732,7 @@
"niri": "niri",
"nixarr": "nixarr",
"nixcord": "nixcord",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_6",
"nur": "nur",
"sops-nix": "sops-nix",
@@ -786,16 +819,15 @@
]
},
"locked": {
"lastModified": 1773275674,
"narHash": "sha256-kULSjFWDoDatz31aIses5q51ESUi0ASUc3MKmBYLnRY=",
"ref": "fcitx5-toki-pona",
"rev": "03f6a67a0a3b3c00ff4566147eddb0123cfe3d14",
"revCount": 38,
"lastModified": 1776985528,
"narHash": "sha256-32WDZGOJBjq3Jr4DRtumqXoX5t25/T0cQ7CzAqT1OnE=",
"ref": "refs/heads/main",
"rev": "40de55454366e390e6972f5e9a9b1444df49ed18",
"revCount": 40,
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
},
"original": {
"ref": "fcitx5-toki-pona",
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
}

View File

@@ -3,7 +3,9 @@
inputs = {
disko.url = "github:nix-community/disko";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
# nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
# Waiting on https://github.com/NixOS/nixpkgs/pull/500538
nixpkgs.url = "github:msyds/nixpkgs/fix-bepasty";
impermanence.url = "github:nix-community/impermanence";
home-manager.url = "github:nix-community/home-manager";
sops-nix.url = "github:Mic92/sops-nix";
@@ -21,6 +23,7 @@
inputs.nixpkgs.follows = "nixpkgs";
inputs.vpnconfinement.follows = "vpn-confinement";
};
nixos-hardware.url = "github:NixOS/nixos-hardware";
# Used for Firefox extensions/addons.
nur = {
url = "github:nix-community/NUR";
@@ -30,7 +33,7 @@
syd-fcitx5-tables.url =
"git+https://git.deertopia.net/msyds/syd-fcitx5-tables";
sydpkgs = {
url = "git+https://git.deertopia.net/msyds/sydpkgs?ref=fcitx5-toki-pona";
url = "git+https://git.deertopia.net/msyds/sydpkgs";
inputs.nixpkgs.follows = "nixpkgs";
};
};

View File

@@ -1,23 +1,27 @@
{ config, pkgs, lib, disko, ... }:
{ config, pkgs, lib, disko, nixos-hardware, ... }:
{
imports = [
./hardware.nix
./filesystems.nix
nixos-hardware.nixosModules.apple-macbook-pro-12-1
];
# Enabled by default by Nixos-hardware.
services.mbpfan.enable = false;
sydnix = {
filesystemType = "btrfs";
wifi.enable = true;
stylix.enable = true;
niri.enable = true;
steam.enable = true;
bluetooth.enable = true;
# gdm.enable = true;
# blueman.enable = true;
openssh.enable = true;
sydpkgs.overlay.enable = true;
dank-material-shell.enable = true;
kdeconnect.enable = true;
upower.enable = true;
users.users = [
# "crumb"

View File

@@ -10,6 +10,8 @@
v4l2loopback
];
programs.dconf.enable = true;
sydnix = {
filesystemType = "btrfs";
wifi.enable = true;
@@ -19,8 +21,9 @@
slippi.enable = true;
niri.enable = true;
stylix.enable = true;
qemu.enable = true;
# qemu.enable = true;
flatpak.enable = true;
gtav-battleye-hack.enable = true;
# gdm.enable = true;
openssh.enable = true;
sydpkgs.overlay.enable = true;

16
modules/home/bash.nix Normal file
View File

@@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.bash;
in {
options.sydnix.bash = {
enable = lib.mkEnableOption "Bash";
};
imports = [
./bash/complete-alias.nix
];
config = lib.mkIf cfg.enable {
programs.bash.enable = true;
};
}

View File

@@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.bash.complete-alias;
in {
options.sydnix.bash.complete-alias = {
enable = lib.mkEnableOption "Alias completion";
};
config = lib.mkIf cfg.enable {
programs.bash.initExtra = lib.mkAfter ''
. ${lib.getExe pkgs.complete-alias}
complete -F _complete_alias "''${!BASH_ALIASES[@]}"
'';
};
}

View File

@@ -9,6 +9,7 @@ in {
config = lib.mkIf cfg.enable {
sydnix.impermanence.cache.directories = [
".m2" # Clojure dependencies.
".gitlibs"
];
};
}

View File

@@ -77,7 +77,9 @@ in {
};
systemd.user.services.jellyfin-rpc = {
Unit.Requires = [ "jellyfin-rpc-configure.service" ];
Unit.After = [ "jellyfin-rpc-configure.service" ];
Install.WantedBy = [ "default.target" ];
Service.ExecStart = lib.getExe pkgs.jellyfin-rpc;
};

View File

@@ -0,0 +1,22 @@
{ config, lib, pkgs, osConfig, ... }:
let cfg = config.sydnix.easyeffects;
in {
options.sydnix.easyeffects = {
enable = lib.mkEnableOption "Easyeffects";
};
config = lib.mkIf cfg.enable {
services.easyeffects = {
enable = true;
extraPresets.thanks-ash =
builtins.fromJSON
(builtins.readFile ./easyeffects/thanks-ash.json);
};
warnings = lib.optional (!osConfig.programs.dconf.enable) ''
Easyeffects requires services.dconf.enable = true in the NixOS
config.
'';
};
}

View File

@@ -0,0 +1,777 @@
{
"input": {
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": 0.0,
"left": {
"band0": {
"frequency": 22.4,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band1": {
"frequency": 27.8,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band10": {
"frequency": 194.06,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band11": {
"frequency": 240.81,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band12": {
"frequency": 298.834,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band13": {
"frequency": 370.834,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band14": {
"frequency": 460.182,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band15": {
"frequency": 571.057,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band16": {
"frequency": 708.647,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band17": {
"frequency": 879.387,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band18": {
"frequency": 1091.26,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band19": {
"frequency": 1354.19,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 34.51,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band20": {
"frequency": 1680.47,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band21": {
"frequency": 2085.35,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band22": {
"frequency": 2587.79,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band23": {
"frequency": 3211.29,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band24": {
"frequency": 3985.01,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band25": {
"frequency": 4945.15,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band26": {
"frequency": 6136.63,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band27": {
"frequency": 7615.17,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band28": {
"frequency": 9449.96,
"gain": 0.05000000000000426,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band29": {
"frequency": 11726.8,
"gain": -0.5300000000000011,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 42.82,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band30": {
"frequency": 14552.2,
"gain": -22.29,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band31": {
"frequency": 18058.4,
"gain": -36.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 53.14,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 65.95,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 81.83,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 101.55,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 126.0,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 156.38,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 32,
"output-gain": 0.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 22.4,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band1": {
"frequency": 27.8,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band10": {
"frequency": 194.06,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band11": {
"frequency": 240.81,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band12": {
"frequency": 298.834,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band13": {
"frequency": 370.834,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band14": {
"frequency": 460.182,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band15": {
"frequency": 571.057,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band16": {
"frequency": 708.647,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band17": {
"frequency": 879.387,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band18": {
"frequency": 1091.26,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band19": {
"frequency": 1354.19,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 34.51,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band20": {
"frequency": 1680.47,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band21": {
"frequency": 2085.35,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band22": {
"frequency": 2587.79,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band23": {
"frequency": 3211.29,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band24": {
"frequency": 3985.01,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band25": {
"frequency": 4945.15,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band26": {
"frequency": 6136.63,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band27": {
"frequency": 7615.17,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band28": {
"frequency": 9449.96,
"gain": 0.05000000000000426,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band29": {
"frequency": 11726.8,
"gain": -0.5300000000000011,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 42.82,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band30": {
"frequency": 14552.2,
"gain": -22.29,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band31": {
"frequency": 18058.4,
"gain": -36.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 53.14,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band5": {
"frequency": 65.95,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band6": {
"frequency": 81.83,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band7": {
"frequency": 101.55,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band8": {
"frequency": 126.0,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band9": {
"frequency": 156.38,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
}
},
"split-channels": false
},
"gate#0": {
"attack": 5.0,
"bypass": false,
"curve-threshold": -30.0,
"curve-zone": -6.0,
"dry": -80.01,
"hpf-frequency": 10.0,
"hpf-mode": "Off",
"hysteresis": false,
"hysteresis-threshold": -12.0,
"hysteresis-zone": -6.0,
"input-gain": 0.0,
"input-to-link": 0.0,
"input-to-sidechain": 0.0,
"link-to-input": 0.0,
"link-to-sidechain": 0.0,
"lpf-frequency": 20000.0,
"lpf-mode": "Off",
"makeup": 0.0,
"output-gain": 0.0,
"reduction": -24.0,
"release": 250.0,
"sidechain": {
"lookahead": 0.0,
"mode": "Peak",
"preamp": 0.0,
"reactivity": 10.0,
"source": "Middle",
"stereo-split-source": "Left/Right",
"type": "Internal"
},
"sidechain-to-input": 0.0,
"sidechain-to-link": 0.0,
"stereo-split": false,
"wet": 0.0
},
"loudness#0": {
"bypass": false,
"clipping": false,
"clipping-range": 6.0,
"fft": "4096",
"iir-approximation": "Normal",
"input-gain": 0.0,
"mode": "FFT",
"output-gain": 0.0,
"std": "ISO226-2023",
"volume": 7.0
},
"plugins_order": [
"gate#0",
"equalizer#0",
"loudness#0"
]
}
}

View File

@@ -56,7 +56,12 @@ in {
Extra arguments to pass to the final wrapProgram call.
'';
default = [];
type = lib.types.listOf lib.types.str;
type = with lib.types;
listOf
(coercedTo
(oneOf [str package])
builtins.toString
str);
apply = lib.escapeShellArgs;
};
};

View File

@@ -7,6 +7,10 @@ in {
};
config = lib.mkIf cfg.enable {
sydnix.impermanence.directories = [
".config/kdeconnect"
];
services.kdeconnect = {
enable = true;
indicator = true;

View File

@@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.prism-launcher;
in {
options.sydnix.prism-launcher = {
enable = lib.mkEnableOption "Prism Launcher";
};
config = lib.mkIf cfg.enable {
home.packages = [
pkgs.prismlauncher
];
sydnix.impermanence.directories = [
".local/share/PrismLauncher"
];
};
}

17
modules/home/ryujinx.nix Normal file
View File

@@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.ryujinx;
in {
options.sydnix.ryujinx = {
enable = lib.mkEnableOption "ryujinx";
};
config = lib.mkIf cfg.enable {
home.packages = [
pkgs.ryubing-canary
];
sydnix.impermanence.directories = [
".config/Ryujinx"
];
};
}

View File

@@ -15,6 +15,10 @@ in {
}))
];
programs.ghostty.settings.font-family = lib.mkAfter [
"sitelen seli kiwen mono juniko"
];
sydnix.hunspell.dictionaries = ds: with ds; [
tok
];

View File

@@ -20,6 +20,7 @@ in {
enable = true;
addons = with pkgs.ankiAddons; [
review-heatmap
anki-connect
];
sync = {
autoSync = true;

View File

@@ -1,34 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.users.crumb.bash;
in {
options.sydnix.users.crumb.bash.enable = lib.mkEnableOption "Bash, à la crumb";
config = lib.mkIf cfg.enable {
programs.bash = {
enable = true;
shellOptions = [
# Correct minor typos in cd commands.
"cdspell"
"autocd"
# Extra glob power.
"extglob"
# Recursive glob w/ **.
"globstar"
# Append to history file.
"histappend"
# Require user confirmation for commands using expansion.
"histverify"
# Re-edit failed history substitutions.
"histreedit"
];
};
home.shellAliases = {
nix2json = "nix eval --impure --json --file -";
"..." = "cd ../..";
"...." = "cd ../../..";
};
};
}

View File

@@ -239,7 +239,7 @@ in {
# Precedence of search engines.
order = [ "Kagi" "ddg" ];
default = "Kagi";
privateDefault = "ddg";
privateDefault = "Kagi";
engines = {
"Kagi" = {
urls = [{
@@ -273,6 +273,26 @@ in {
"${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "!np" ];
};
"English Wiktionary" = {
urls = [{
template = "https://en.wiktionary.org/wiki/Special:Search";
params = [
{ name = "go"; value = "Define"; }
{ name = "search"; value = "{searchTerms}"; }
];
}];
definedAliases = [ "!wikt" "!enwikt" "!" "!wiktionary" ];
};
"" = {
urls = [{
template = "https://ko.wiktionary.org/wiki/:";
params = [
{ name = "go"; value = "Define"; }
{ name = "search"; value = "{searchTerms}"; }
];
}];
definedAliases = [ "!kowikt" "!" ];
};
};
};

View File

@@ -9,14 +9,6 @@ in {
type = lib.types.nullOr lib.types.path;
default = config.stylix.image;
};
# xwayland-satellite implements rootless Xwayland in a separate application,
# without the host compositor's involvement. It makes X11 windows appear as
# normal windows, just like a native Xwayland integration. While it is still
# somewhat experimental, it handles a lot of applications correctly, like
# Steam, games and Discord.
xwayland-satellite.enable =
lib.mkEnableOption "xwayland-satellite starting with Niri"
// { default = true; };
polkit.enable =
lib.mkEnableOption "Niri/Gnome Polkit" // { default = true; };
swaylock.enable =
@@ -67,26 +59,17 @@ in {
stylix.targets.swaylock.enable = cfg.swaylock.enable;
services.polkit-gnome.enable = cfg.polkit.enable;
sydnix.xwayland-satellite.enable = lib.mkDefault true;
# File-picker.
home.packages = [ pkgs.nautilus ];
systemd.user.services.xwayland-satellite =
lib.mkIf cfg.xwayland-satellite.enable {
Service.ExecStart =
["${pkgs.xwayland-satellite}/bin/xwayland-satellite"];
Unit.After = ["niri.service"];
Unit.PartOf = ["niri.service"];
Install.WantedBy = ["niri.service"];
};
programs.niri = {
settings = {
# Activates some Nixpkgs patches to help run Electron applications under
# Wayland.
environment = {
NIXOS_OZONE_WL = "1";
DISPLAY = ":0";
XDG_CURRENT_DESKTOP = "niri";
QT_QPA_PLATFORM = "wayland";
ELECTRON_OZONE_PLATFORM_HINT = "auto";

View File

@@ -3,3 +3,7 @@ exec loadouts/init
exec overrides/binds.cfg
exec overrides/settings.cfg
con_logfile console.log
ip 0.0.0.0
rcon_password monitor
net_start

View File

@@ -0,0 +1,36 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.users.msyds.bash;
in {
options.sydnix.users.msyds.bash.enable =
lib.mkEnableOption "Bash, à la msyds";
config = lib.mkIf cfg.enable {
sydnix.bash.enable = true;
sydnix.bash.complete-alias.enable = true;
programs.bash.shellOptions = [
# Correct minor typos in cd commands.
"cdspell"
# Implicitly prepend `cd` to directory names.
"autocd"
# Extra glob power.
"extglob"
# Recursive glob w/ **.
"globstar"
# Append to history file.
"histappend"
# Require user confirmation for commands using expansion.
"histverify"
# Re-edit failed history substitutions.
"histreedit"
];
home.shellAliases = {
nix2json = "nix eval --impure --json --file -";
"..." = "cd ../..";
"...." = "cd ../../..";
};
};
}

View File

@@ -1,6 +1,11 @@
{ config, lib, pkgs, ... }:
{ config, lib, pkgs, host, ... }:
let cfg = config.sydnix.users.msyds.dank-material-shell;
let
cfg = config.sydnix.users.msyds.dank-material-shell;
on = hosts:
if builtins.isString hosts
then hosts == host
else builtins.elem host hosts;
in {
options.sydnix.users.msyds.dank-material-shell = {
enable = lib.mkEnableOption "Dank Material Shell";
@@ -167,7 +172,7 @@ in {
showControlCenterButton = true;
showCapsLockIndicator = true;
controlCenterShowNetworkIcon = true;
controlCenterShowBluetoothIcon = true;
controlCenterShowBluetoothIcon = on ["fruitbook"];
controlCenterShowAudioIcon = true;
controlCenterShowVpnIcon = true;
controlCenterShowBrightnessIcon = false;
@@ -286,9 +291,9 @@ in {
batterySuspendTimeout = 0;
batterySuspendBehavior = 0;
batteryProfileName = "";
lockBeforeSuspend = false;
lockBeforeSuspend = true;
loginctlLockIntegration = true;
fadeToLockEnabled = false;
fadeToLockEnabled = true;
fadeToLockGracePeriod = 5;
launchPrefix = "";
brightnessDevicePins = {};

View File

@@ -31,6 +31,17 @@ in {
treesit.enable = true;
};
home.sessionVariables = {
ESHELL_ALIASES_FILE = pkgs.writeText "eshell-aliases" ''
alias cdp syd-project-cd
alias jj jj --no-pager $*
${lib.concatMapAttrsStringSep
"\n"
(alias: value: "alias ${alias} ${value} $*")
config.home.shellAliases}
'';
};
sydnix.emacs = {
enable = true;
defaultEditor = true;
@@ -40,6 +51,10 @@ in {
pkgs.nerd-fonts.victor-mono
pkgs.ibm-plex
];
extraWrapProgramArgs = [
"--set" "ESHELL_ALIASES_FILE"
config.home.sessionVariables.ESHELL_ALIASES_FILE
];
};
};
}

View File

@@ -3,6 +3,7 @@
(syd-require-features
'(syd/base
syd/constants
syd/fcitx
syd/dash
syd/disable-package
syd/straight
@@ -64,5 +65,10 @@
syd/eshell
syd/treesit
syd/grammatical-framework
syd/tabs
syd/lsp
syd/custom))
syd/custom
syd/transient
syd/bookmark
syd/haskell
syd/qbe))

View File

@@ -2,7 +2,10 @@
(require 'syd/base)
(use-package auctex
(use-package auctex)
(use-package tex
:straight nil ; Part of auctex.
:config
(add-to-list 'TeX-view-program-selection '(output-pdf "Sioyek")))

View File

@@ -0,0 +1,10 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package bookmark
:straight nil
:custom ((bookmark-default-file
(file-name-concat syd-data-dir "bookmarks"))))
(provide 'syd/bookmark)

View File

@@ -1,6 +1,7 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(require 'syd/handle)
(require 'syd/popups)
(require 'syd/leader)
@@ -20,21 +21,38 @@
(use-package cider
:after clojure-mode
:config
(defun syd-clojure-doc (arg)
(interactive "P")
(cider-doc arg)
cider-doc-buffer)
(defun syd-clojure-eval-region (beg end)
(cider-eval-region beg end))
(syd-handle '(clojure-mode clojurescript-mode cider-repl-mode)
:docs #'cider-doc
:eval-region #'syd-clojure-eval-region
:load-buffer #'cider-load-buffer)
(add-hook 'cider-repl-mode-hook #'syd-lisp-mode)
(syd-push shackle-rules
`("*cider-doc*" ,@syd-help-popup-options)
'("*cider-test-report*")
'("*cider-error*")))
`("*cider-doc*" ,@syd-help-popup-options)
'("*cider-test-report*")
'("*cider-error*"))
(defun syd-clojure-classpath-relative-file-name (file-name)
(when (and cider-mode (cider-nrepl-eval-session))
(let ((prefixes (-filter #'file-directory-p
(cider-classpath-entries))))
(cl-loop for classpath-entry in prefixes
for prefix = (file-name-as-directory classpath-entry)
when (string-prefix-p prefix file-name)
return (string-remove-prefix prefix file-name)))))
(add-to-list 'syd-insert-file-name-alist
`(,#'syd-clojure-classpath-relative-file-name
. "Classpath-relative")))
(use-package cider-mode
:straight nil ; Part of `cider'.
@@ -114,6 +132,10 @@
(cljr-add-keybindings-with-prefix "C-c r"))
(use-package clj-refactor
:hook (clojure-mode . #'syd-clojure--setup-clj-refactor))
:config
(add-hook 'clojure-mode-hook #'syd-clojure--setup-clj-refactor)
(dolist (x '(("p" . "babashka.process")
("fs" . "babashka.fs")))
(add-to-list 'cljr-magic-require-namespaces x)))
(provide 'syd/clojure)

View File

@@ -1,4 +1,7 @@
;;; -*- lexical-binding: t -*-
;; -*- lexical-binding: t -*-
(require 'syd/base)
(require 'syd/popups)
(setq
;; Log native-compiler warnings, but don't display the buffer. Most of the
@@ -8,4 +11,7 @@
;; Scroll compilation buffer to follow output.
compilation-scroll-output t)
(syd-push shackle-rules
'("*compilation*" :select nil :size 0.42 :popup t :align bottom))
(provide 'syd/compilation)

View File

@@ -150,7 +150,9 @@ if FILE-NAME has no TRAMP prefix."
(eshell-last-dir-ring-file-name (file-name-concat
syd-eshell-data-dir "lastdir"))
(eshell-prompt-function #'syd-eshell--prompt-fn)
(eshell-prompt-regexp syd-eshell--prompt-regexp))
(eshell-prompt-regexp syd-eshell--prompt-regexp)
(eshell-aliases-file (or (getenv "ESHELL_ALIASES_FILE")
eshell-aliases-file)))
:general
(:keymaps 'syd-leader-open-map
"e" #'syd-toggle-eshell)

View File

@@ -0,0 +1,10 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package fcitx
:config
(setq fcitx-remote-command "fcitx5-remote")
(fcitx-aggressive-setup))
(provide 'syd/fcitx)

View File

@@ -0,0 +1,65 @@
;; -*- lexical-binding: t; -*-
(require 'syd/base)
(require 'syd/handle)
(defun syd-haskell-open-repl ()
"Open a Haskell REPL."
(interactive)
(require 'inf-haskell)
(run-haskell))
(defun syd-haskell-evil-open-above ()
"Opens a line above the current, following Haskell-mode's indentation"
(interactive)
(evil-beginning-of-line)
(haskell-indentation-newline-and-indent)
(evil-previous-line)
(haskell-indentation-indent-line)
(evil-append-line nil))
(defun syd-haskell-evil-open-below ()
"Opens a line below the current, following Haskell-mode's indentation"
(interactive)
(evil-append-line nil)
(haskell-indentation-newline-and-indent))
(defun syd-haskell-hoogle-start-server ()
(interactive)
(haskell-hoogle-start-server)
(message "Hoogle started on localhost:%d" haskell-hoogle-port-number))
(use-package haskell-mode
:mode (("\\.l?hs'" . haskell-literate-mode)
("\\.hs'" . haskell-mode))
:custom (; Show errors in REPL, not popup buffers.
(haskell-interactive-popup-errors nil)
(haskell-process-suggest-remove-import-line t)
(haskell-process-auto-import-loaded-modules t))
:general
(:keymaps 'haskell-mode-map
:states '(normal visual motion emacs insert)
:major-modes t
:prefix syd-localleader-key
:non-normal-prefix syd-alt-localleader-key
"c" #'haskell-cabal-visit-file
"h s" #'syd-haskell-hoogle-start-server
"h q" #'haskell-hoogle-kill-server)
(:keymaps 'interactive-haskell-mode-map
:states '(normal insert)
"C-j" #'haskell-interactive-mode-history-next
"C-k" #'haskell-interactive-mode-history-previous)
(:keymaps 'haskell-mode-map
:states 'normal
[remap evil-open-above] #'syd-haskell-evil-open-above
[remap evil-open-below] #'syd-haskell-evil-open-below)
:config
(add-to-list 'completion-ignored-extensions ".hi"))
(use-package lsp-haskell
:defer t
:custom ((lsp-haskell-server-path "haskell-language-server"))
:init
(add-hook 'haskell-mode-hook #'lsp-deferred 'append)
(add-hook 'haskell-literate-mode-hook #'lsp-deferred 'append))
(provide 'syd/haskell)

View File

@@ -69,7 +69,8 @@
(general-def
:prefix-map 'syd-leader-insert-map
"u" #'insert-char
"e" #'emoji-insert)
"e" #'emoji-insert
"p" #'syd-insert-file-name)
;; This is necessary to properly rebind `universal-argument'.
;; `universal-argument-more' is a command that provides additional prefixes

View File

@@ -22,11 +22,16 @@
"/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
"\\\\" "://"))
;; Sitelen pona glyphs.
(rx-let ((ideograph (any (#xF1900 . #xF198C))))
(rx-let ((ideograph (any (#xF1900 . #xF198C)))
(tok-punct (any "󱦜" "󱦝"))
(arrow (any "←-↙"))
(zwj ""))
(ligature-set-ligatures
'fundamental-mode
`(("󱦐" ,(rx (* ideograph)))
("󱥍" ,(rx "󱦗" (* ideograph))))))
`(("󱦐" ,(rx (* (or ideograph tok-punct))))
("󱥍" ,(rx "󱦗" (* (or ideograph tok-punct)) "󱦘"))
("󱥁" ,(rx zwj arrow))
("󱤑" ,(rx zwj ideograph)))))
(global-ligature-mode 1))
(provide 'syd/ligature)

View File

@@ -2,6 +2,7 @@
(require 'syd/base)
(require 'syd/popups)
(require 'syd/handle)
(use-package lsp-mode
:init
@@ -35,6 +36,12 @@
(syd-push
shackle-rules
`(("*lsp-help*" "*lsp-install*")
,@syd-help-popup-options)))
:select nil :size 0.42 :popup t :align bottom))
(defun syd-lsp-handle-docs ()
(interactive)
(lsp-describe-thing-at-point)
(get-buffer "*lsp-help*"))
(syd-handle 'lsp-mode
:docs #'syd-lsp-handle-docs))
(provide 'syd/lsp)

View File

@@ -0,0 +1,9 @@
;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package markdown-mode
:config
(add-hook 'markdown-mode-hook #'syd-prose-mode))
(provide 'syd/markdown)

View File

@@ -193,4 +193,74 @@ form."
(cons mode (intern (concat (match-string 1 s) "-ts-mode"))))
(error "Symbol `%c' is not a mode." mode))))
(defun syd--insert-file-name-annotation (descs)
(when descs
(let ((s (string-join descs ", ")))
(concat
" "
(propertize " " 'display `(space :align-to (- right ,(+ 1 (length s)))))
s))))
(defun syd-project-relative-file-name (file-name)
(file-relative-name file-name (project-root (project-current))))
(defvar syd-insert-file-name-alist
`((,#'syd-project-relative-file-name . "Project-relative")
(,#'file-relative-name . "File-relative")
(,#'identity . "Absolute"))
"List of pairs where each cons is a function mapping paths to paths
or nil, and each cons is a string description.")
(defun syd--evaluate-syd-insert-file-name-alist (path)
(cl-loop for (fn . lbl) in syd-insert-file-name-alist
for r = (funcall fn path)
when r
collect (cons r lbl)))
(defun syd-insert-file-name ()
(interactive)
(let* ((path (expand-file-name
(read-file-name "Path: " nil nil 'confirm)))
(choose-a-dir "... (choose a dir)")
(alts (cons `(,choose-a-dir)
(syd--evaluate-syd-insert-file-name-alist path)))
(choice
(completing-read
"Variant: "
(lambda (s p flag)
(pcase flag
('metadata
`(metadata
(annotation-function
. ,(lambda (s)
(let ((descs
(cl-loop for (p . lbl) in alts
when (equal p s)
collect lbl)))
(syd--insert-file-name-annotation
descs))))))
(_ (all-completions s (mapcar #'car alts) p)))))))
(if (equal choice choose-a-dir)
(insert (file-relative-name
path (read-file-name "Relative to: " nil nil
'confirm)))
(insert choice))))
(defun syd-import-systemd-environment ()
(interactive)
(with-temp-buffer
(shell-command "systemctl --user show-environment" (current-buffer))
(goto-char (point-min))
(while (re-search-forward
(rx bol (group (+ (not "=")))
"="
(or (and "$'" (group (* (not "'"))) "'")
(group (* any)))
eol)
nil t)
(let ((var (match-string 1))
(val (or (match-string 2)
(match-string 3))))
(setenv var val)))))
(provide 'syd/prelude)

View File

@@ -1,6 +1,7 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(require 'syd/keymaps)
(require 'syd/completion) ; For `consult'.
(require 'consult)

View File

@@ -0,0 +1,12 @@
;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package qbe-mode
:mode "\\.qbe\\'"
:straight (:type git
:host github
:repo "mbknust/qbe-mode")
:config
(add-hook 'qbe-mode-hook #'indent-tabs-mode))
(provide 'syd/qbe)

View File

@@ -0,0 +1,7 @@
;;; -*- lexical-binding: t -*-
(require 'syd/base)
;; Disable tabs by default.
(setq-default indent-tabs-mode nil)
(provide 'syd/tabs)

View File

@@ -0,0 +1,10 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package transient
:straight nil
:custom ((transient-history-file
(file-name-concat syd-data-dir "transient/history.el"))))
(provide 'syd/transient)

View File

@@ -0,0 +1,14 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.users.msyds.zathura;
in {
options.sydnix.users.msyds.zathura = {
enable = lib.mkEnableOption "Zathura";
};
config = lib.mkIf cfg.enable {
programs.zathura = {
enable = true;
};
};
}

View File

@@ -0,0 +1,38 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.xwayland-satellite;
in {
options.sydnix.xwayland-satellite = {
# xwayland-satellite implements rootless Xwayland in a separate
# application, without the host compositor's involvement. It makes
# X11 windows appear as normal windows, just like a native
# Xwayland integration. While it is still somewhat experimental,
# it handles a lot of applications correctly, like Steam, games
# and Discord.
enable = lib.mkEnableOption "XWayland outside your Wayland";
};
config = lib.mkIf cfg.enable {
systemd.user.services.xwayland-satellite =
let xwayland-satellite =
pkgs.xwayland-satellite.override { withSystemd = true; };
in {
Unit = {
Description = "Xwayland outside your Wayland";
BindsTo = [ "graphical-session.target" ];
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
Requisite = [ "graphical-session.target" ];
};
Service = {
Type = "notify";
NotifyAccess = "all";
ExecStart = lib.getExe xwayland-satellite;
StandardOutput = "journal";
ExecStartPost = "systemctl --user set-environment DISPLAY=:0";
ExecStop = "systemctl --user unset-environment DISPLAY";
};
Install.WantedBy = [ "graphical-session.target" ];
};
};
}

12
modules/nixos/blueman.nix Normal file
View File

@@ -0,0 +1,12 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.blueman;
in {
options.sydnix.blueman = {
enable = lib.mkEnableOption "Blueman BlueTooth manager";
};
config = lib.mkIf cfg.enable {
services.blueman.enable = true;
};
}

View File

@@ -7,8 +7,6 @@ in {
};
config = lib.mkIf cfg.enable {
services.blueman.enable = true;
hardware.bluetooth = {
enable = true;
powerOnBoot = true;

View File

@@ -12,6 +12,13 @@ in {
enableDynamicTheming = false;
};
# Start after xwayland-satellite, if possible. So DMS can start
# with the DISPLAY env var set.
systemd.user.services.dms = {
wants = ["xwayland-satellite.service"];
after = ["xwayland-satellite.service"];
};
services.displayManager.dms-greeter = {
enable = true;
compositor.name = assert config.sydnix.niri.enable; "niri";

View File

@@ -1,12 +1,10 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.sydnix.deertopia.bepasty;
in {
options = {
sydnix.deertopia.bepasty = {
enable = mkEnableOption "Bepasty";
enable = lib.mkEnableOption "Bepasty";
port = lib.mkOption {
default = 22018;
@@ -19,7 +17,7 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
sydnix.sops.secrets.bepasty-secret-key = {};
sydnix.sops.secrets.bepasty-secret-config = {};

View File

@@ -1,6 +1,8 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.deertopia.gitea;
let
cfg = config.sydnix.deertopia.gitea;
commas = lib.concatStringsSep ",";
in {
options.sydnix.deertopia.gitea = {
enable = lib.mkEnableOption "Gitea";
@@ -40,11 +42,18 @@ in {
# sudo -u git gitea admin auth add-ldap --name gitea --port 3890 --bind-dn 'uid=gitea,ou=people,dc=deertopia,dc=net' --bind-password «password» --user-search-base 'ou=people,dc=deertopia,dc=net' --user-filter '(&(memberof=cn=git,ou=groups,dc=deertopia,dc=net)(|(uid=%[1]s)(mail=%[1]s)))' --username-attribute uid --firstname-attribute givenName --surname-attribute sn --email-attribute mail --avatar-attribute jpegPhoto --security-protocol unencrypted --host 127.0.0.1 --config /var/lib/gitea/custom/conf/app.ini --synchronize-users
sydnix.sops.secrets.gitea-mailer-password = {
mode = "0440";
owner = "git";
group = "git";
};
services.gitea = {
enable = true;
user = "git";
group = "git";
appName = "GupHub"; # Name per my darling Colestar ♥
appName = "GupHub"; # Name per my dear Astrid ♥!!!!!
mailerPasswordFile = config.sops.secrets.gitea-mailer-password.path;
settings = {
server = {
ROOT_URL = "https://git.deertopia.net/";
@@ -53,7 +62,48 @@ in {
};
service = {
DISABLE_REGISTRATION = true;
ENABLE_NOTIFY_MAIL = true;
};
"repository.pull-request" = {
CLOSE_KEYWORDS = commas [
# en
"close" "closes" "closed" "fix" "fixes" "fixed" "resolve"
"resolves" "resolved"
# tok
"pini e"
# ko
"" "" ""
"" "" "" "" ""
"" "" "" "" ""
];
REOPEN_KEYWORDS = commas [
# en
"reopen" "reopens" "reopened"
# tok
"open sin e" "pakala sin e"
"li pakala sin" "li pakalan sin"
# ko
"" "" " " " " " "
" "
];
WORK_IN_PROGRESS_PREFIXES = commas [
# en
"WIP:" "[WIP]"
# tok
"pini ala:" "awen pali:"
# ko
" :" ":" ":" "[]" ":" "[]"
];
DEFAULT_MERGE_STYLE = "rebase";
};
mailer = {
ENABLED = true;
FROM = "Gitea <no-reply@deertopia.net>";
PROTOCOL = "smtps";
SMTP_ADDR = "smtp.fastmail.com";
SMTP_PORT = 465;
USER = "msyds@deertopia.net";
};
};
};
};

View File

@@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.gtav-battleye-hack;
in {
options.sydnix.gtav-battleye-hack = {
enable = lib.mkEnableOption
"Grand Theft Auto V Online BattlEye workaround";
};
config = lib.mkIf cfg.enable {
networking.hosts."0.0.0.0" = [
"paradise-s1.battleye.com"
"test-s1.battleye.com"
"paradiseenhanced-s1.battleye.com"
];
};
}

View File

@@ -22,11 +22,13 @@ in {
"https://nix-community.cachix.org"
"https://cache.nixos.org"
"https://cache.iog.io"
"https://cache.zw3rk.com"
];
trusted-public-keys = [
(builtins.readFile ../../public-keys/deertopia-cache.pub.pem)
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
"loony-tools:pr9m4BkM/5/eSTZlkQyRt57Jz7OMBxNSUiMC4FkcNfk="
];
};
};

12
modules/nixos/upower.nix Normal file
View File

@@ -0,0 +1,12 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.upower;
in {
options.sydnix.upower = {
enable = lib.mkEnableOption "UPower";
};
config = lib.mkIf cfg.enable {
services.upower.enable = true;
};
}

View File

@@ -59,6 +59,7 @@ let
pkgs = nixpkgs;
};
inherit inputs system;
host = hostName;
};
})
];

View File

@@ -30,6 +30,7 @@ anki-username: ENC[AES256_GCM,data:584uxjwyodM=,iv:/6HLSLzHgc77U1iN5JDLR9F+o8Nfe
anki-password: ENC[AES256_GCM,data:plSKMTeeilKt6weAnzw/jMo65A==,iv:lzuPUt1+2Iwi9sHbaFj0OuBLd1p+Do2N5aCYXd45MFQ=,tag:WIABFp1T6NuIGpqqQFHmrg==,type:str]
anki-sync-key: ENC[AES256_GCM,data:Ka4sPghPwmWQvdXw40ZRLogoMVTBjLnaSyHT9lTfn2XWHHqFAkANAg==,iv:bFkb/k7UUL8t26LjmQwiDYJpvq93NWuqUU/jNYkr7GQ=,tag:Mx5JdqjI3MDk7hsvOlPYIw==,type:str]
gitea-actions-runner-token: ENC[AES256_GCM,data:JglbJ2hgXl1wV2bCkcged+D3UrpWMMBuX+ri6YeIqwLIlscvK/wVCdsxQZtDGw==,iv:BYhgfoIa/wHQkd4c7kU8AWAJQfpTfUvSamFXDBqQXTE=,tag:sIK1XxVPIU+uBGaJY3AmTQ==,type:str]
gitea-mailer-password: ENC[AES256_GCM,data:bgFAhAzYcDhHi4Brg7x8CQ==,iv:hj8+YbcE+Jfhtu8g//Y8EiNw1CejTtMgstB/knbgOls=,tag:CYX3Pr4ErzvHGVfhpvfruw==,type:str]
sops:
age:
- recipient: age10fqh0td67alzpyjyhdex5ncj9thvaty506r0t63vs2nz4ldafgaqadl8mg
@@ -50,7 +51,7 @@ sops:
TXFLY2l0UHJ3Z0NGZjVpbTQ2UC8yaTQKA7wTmW9Ha6T2KmCr/nkXdizgv8+V6SAp
ZhDO+uDQ1evIh2wLWMOXNJ3d/zplLCOTzR2xkqBIUp5V7MXj45RUIA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-03-06T21:55:10Z"
mac: ENC[AES256_GCM,data:Coff3pzqPxqe1g+2R7V0AN/ZSLog6sKHIBSoWOflYH8tKbIqwvQFRVvEQN6D1o6ZhD2wu8NyTVrKY7FYn4nG9DsEQq8vknq51r1Z9meLSP114N37oX5qjp60ns9kEm3kbf41DTObXETs+jzcA4Rcl2m9Z5I/feKEm7oFp6PvzEg=,iv:Bywv84FGB6IO7M9KFoxx3cVXFElX7QNWossWszMJui8=,tag:D07pceBF1i1vUMZ7nFuslA==,type:str]
lastmodified: "2026-03-22T07:49:51Z"
mac: ENC[AES256_GCM,data:Y/7XSZtPlVPDV3eToYQ9MoAGF9nGq0sd0KU1VaR5duK1xbETULioQcpPvVk6HL1kPlUjnmR8RXfCKBC7EJ9P/UAMV2ySulLtD6daogCzF3qa2JSyXPuOyMuXMSjwCNcCyHgpaOrWz+7Zf9FU/1wQwVHeCDTf0sFHaX0xttFfHkg=,iv:7+zXPjeslh+z9hWhYXoUphpbg3Tpe4OHQEcUmetuiMM=,tag:LB0GuN+5TJxXyuvrrqOi7g==,type:str]
unencrypted_suffix: _unencrypted
version: 3.12.1

View File

@@ -18,63 +18,74 @@
];
};
homeConfiguration = { config, lib, pkgs, ... }: {
home.file.".ssh/id_ed25519".source =
config.lib.file.mkOutOfStoreSymlink
"/persist/private-keys/ssh/msyds@sydpc";
homeConfiguration = { config, lib, pkgs, host, ... }:
let on = hosts:
if builtins.isString hosts
then hosts == host
else builtins.elem host hosts;
in {
home.file.".ssh/id_ed25519".source =
config.lib.file.mkOutOfStoreSymlink
"/persist/private-keys/ssh/msyds@sydpc";
home.file.".face".source = ./avatar.jpg;
home.file.".face".source = ./avatar.jpg;
home.file.".ssh/id_ed25519.pub".source =
../../public-keys/ssh/${"msyds@sydpc.pub"};
home.file.".ssh/id_ed25519.pub".source =
../../public-keys/ssh/${"msyds@sydpc.pub"};
sydnix = {
documentation.enable = true;
xdg.enable = true;
steam.enable = true;
zotero.enable = true;
openutau.enable = true;
slippi.enable = true;
desktop-environment.enable = true;
clojure.enable = true;
capitaine-cursors.enable = true;
terraria.enable = true;
kdeconnect.enable = true;
qalculate.enable = true;
toki-pona.enable = true;
sops = {
enable = true;
keyFile = "/persist/private-keys/age/crumb";
};
# Personal configurations.
users.crumb = {
bash.enable = true;
direnv.enable = true;
git.enable = true;
nvim.enable = true;
readline.enable = true;
niri.enable = true;
firefox.enable = true;
ghostty.enable = true;
# waybar.enable = true;
tf2.enable = true;
fcitx5.enable = true;
anki.enable = true;
mumble.enable = true;
};
users.msyds = {
discord.enable = true;
hunspell.enable = true;
emacs.enable = true;
impermanence.enable = true;
syncthing.enable = true;
fonts.enable = true;
dank-material-shell.enable = true;
sioyek.enable = true;
sydnix = {
documentation.enable = true;
xdg.enable = true;
steam.enable = on "sydpc";
zotero.enable = true;
slippi.enable = on "sydpc";
desktop-environment.enable = true;
clojure.enable = true;
capitaine-cursors.enable = true;
terraria.enable = on "sydpc";
kdeconnect.enable = true;
qalculate.enable = true;
toki-pona.enable = true;
prism-launcher.enable = on "sydpc";
flatpak.enable = on "sydpc";
drawing-tablet.enable = on "sydpc";
easyeffects.enable = on "sydpc";
ryujinx.enable = on "sydpc";
sops = {
enable = true;
keyFile = "/persist/private-keys/age/crumb";
};
# Personal configurations.
users.crumb = {
direnv.enable = true;
git.enable = true;
nvim.enable = true;
readline.enable = true;
niri.enable = true;
firefox.enable = true;
ghostty.enable = true;
# waybar.enable = true;
tf2.enable = true;
fcitx5.enable = true;
anki.enable = true;
mumble.enable = true;
rnote.enable = on "sydpc";
};
users.msyds = {
discord.enable = true;
bash.enable = true;
hunspell.enable = true;
emacs.enable = true;
impermanence.enable = true;
syncthing.enable = true;
fonts.enable = true;
dank-material-shell.enable = true;
sioyek.enable = on "fruitbook";
zathura.enable = on "sydpc";
};
};
# Don't touch!
home.stateVersion = "18.09";
};
# Don't touch!
home.stateVersion = "18.09";
};
}