1 Commits

Author SHA1 Message Date
4c1ccd22ff wip: attic
All checks were successful
build / build-sydpc (push) Successful in 33s
build / build-fruitbook (push) Successful in 30s
build / build-deertopia (push) Successful in 40s
2026-03-05 11:29:12 -07:00
50 changed files with 378 additions and 861 deletions

View File

@@ -4,14 +4,26 @@ on: [push]
jobs:
build:
build-sydpc:
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

213
flake.lock generated
View File

@@ -21,28 +21,28 @@
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1765809053,
"narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=",
"lastModified": 1754405784,
"narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1760703920,
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=",
"lastModified": 1752979451,
"narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "d646af9b7d14bff08824538164af99d0c521b185",
"rev": "27cf1e66e50abc622fb76a3019012dc07c678fac",
"type": "github"
},
"original": {
@@ -76,11 +76,11 @@
]
},
"locked": {
"lastModified": 1774411715,
"narHash": "sha256-mceIHtVMXpLAfr1W0VK9ceTBX5yKu4gGWpVbThWTsAA=",
"lastModified": 1762095388,
"narHash": "sha256-7Q8LtcvKWHbP8znARRTOY2tpU5WoV6FHwp5TZJOI8Us=",
"owner": "9001",
"repo": "copyparty",
"rev": "26e663d111e39ca96c63702ad27a05b6736607cf",
"rev": "ac085b8149ff50e03d260128596dd130ed1c7cae",
"type": "github"
},
"original": {
@@ -129,11 +129,11 @@
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1764873433,
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
"lastModified": 1758112371,
"narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
"rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d",
"type": "github"
},
"original": {
@@ -149,7 +149,7 @@
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"revCount": 69,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz?rev=ff81ac966bb2cae68946d5ed5fc4994f96d0ffec&revCount=69"
},
"original": {
"type": "tarball",
@@ -161,11 +161,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"lastModified": 1754091436,
"narHash": "sha256-XKqDMN1/Qj1DKivQvscI4vmHfDfvYR2pfuFOJiCeewM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"rev": "67df8c627c2c39c41dbec76a1f201929929ab0bd",
"type": "github"
},
"original": {
@@ -203,11 +203,11 @@
]
},
"locked": {
"lastModified": 1767609335,
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=",
"lastModified": 1756770412,
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "250481aafeb741edfe23d29195671c19b36b6dca",
"rev": "4524271976b625a4a605beefd893f270620fd751",
"type": "github"
},
"original": {
@@ -287,11 +287,11 @@
"flake": false,
"locked": {
"host": "gitlab.gnome.org",
"lastModified": 1767737596,
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
"lastModified": 1762869044,
"narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad",
"type": "gitlab"
},
"original": {
@@ -307,11 +307,11 @@
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1773608492,
"narHash": "sha256-QZteyExJYSQzgxqdsesDPbQgjctGG7iKV/6ooyQPITk=",
"lastModified": 1768325819,
"narHash": "sha256-mBKqOJkxCRwEhIXfq93WTcDXsBlJ/f1Dfv9thJxrDPs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "9a40ec3b78fc688d0908485887d355caa5666d18",
"rev": "b1fa714d6cd656e3105d1965637be6ab7541d7d7",
"type": "github"
},
"original": {
@@ -345,11 +345,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1772698812,
"narHash": "sha256-7+K/VaZ7TXUeUGSYshg8wC3UsRZHB+M4x6r38Q1B79c=",
"lastModified": 1768306584,
"narHash": "sha256-GWLONqOKcsWKFYqoEIFbIv6Ti/xoSvsYC9LzZzB1oj4=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "5641625ef950f024e3e0e3f38bb91f876290c0be",
"rev": "1b8c8ba473cf336d74ffb05ee453c8fe6a05bbbc",
"type": "github"
},
"original": {
@@ -378,11 +378,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1772207631,
"narHash": "sha256-Jkkg+KqshFO3CbTszVVpkKN2AOObYz+wMsM3ONo1z5g=",
"lastModified": 1768196703,
"narHash": "sha256-mttBQdVnVFO3mn+M+oqCsZZOtS2HvXYy+VaHxb8YuMw=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "e708f546153f74acf33eb183b3b2992587a701e5",
"rev": "3672e79369d72297abda8878245ea4ec327062c6",
"type": "github"
},
"original": {
@@ -423,11 +423,11 @@
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1772813986,
"narHash": "sha256-x0fD+LL+O99p36c2UnjnHvVq4/7TvGH/8G5lTNIJBCo=",
"lastModified": 1764576281,
"narHash": "sha256-f6vfwmIb9C3brI4/KJ9MFUDWt6FsKQ0dbMO6AuFc7E0=",
"owner": "KaylorBen",
"repo": "nixcord",
"rev": "e433a2919eb9b3a8c85ab3017c08685816e63a66",
"rev": "c8f47894134a4984acd319e66c4384eb1ff886e2",
"type": "github"
},
"original": {
@@ -436,21 +436,6 @@
"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,
@@ -469,11 +454,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1772328832,
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"lastModified": 1753579242,
"narHash": "sha256-zvaMGVn14/Zz8hnp4VWT9xVnhc8vuL3TStRqwk22biA=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"rev": "0f36c44e01a6129be94e3ade315a5883f0228a6e",
"type": "github"
},
"original": {
@@ -500,11 +485,11 @@
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1772598333,
"narHash": "sha256-YaHht/C35INEX3DeJQNWjNaTcPjYmBwwjFJ2jdtr+5U=",
"lastModified": 1768242861,
"narHash": "sha256-F4IIxa5xDHjtrmMcayM8lHctUq1oGltfBQu2+oqDWP4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fabb8c9deee281e50b1065002c9828f2cf7b2239",
"rev": "1327e798cb055f96f92685df444e9a2c326ab5ed",
"type": "github"
},
"original": {
@@ -515,6 +500,22 @@
}
},
"nixpkgs_10": {
"locked": {
"lastModified": 1750386251,
"narHash": "sha256-1ovgdmuDYVo5OUC5NzdF+V4zx2uT8RtsgZahxidBTyw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "076e8c6678d8c54204abcb4b1b14c366835a58bb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_11": {
"locked": {
"lastModified": 1743568003,
"narHash": "sha256-ZID5T65E8ruHqWRcdvZLsczWDOAWIE7om+vQOREwiX0=",
@@ -548,11 +549,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1773389992,
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
"lastModified": 1767892417,
"narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"type": "github"
},
"original": {
@@ -564,11 +565,11 @@
},
"nixpkgs_4": {
"locked": {
"lastModified": 1772624091,
"narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=",
"lastModified": 1768127708,
"narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "80bdc1e5ce51f56b19791b52b2901187931f5353",
"rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38",
"type": "github"
},
"original": {
@@ -580,32 +581,32 @@
},
"nixpkgs_5": {
"locked": {
"lastModified": 1772465433,
"narHash": "sha256-ywy9troNEfpgh0Ee+zaV1UTgU8kYBVKtvPSxh6clYGU=",
"lastModified": 1754028485,
"narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c581273b8d5bdf1c6ce7e0a54da9841e6a763913",
"rev": "59e69648d345d6e8fef86158c555730fa12af9de",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.11",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1773700673,
"narHash": "sha256-RLidgpn3mN3cVkIiiYehcmM2ImBnPudwISFLy71zN0o=",
"owner": "msyds",
"lastModified": 1768178648,
"narHash": "sha256-kz/F6mhESPvU1diB7tOM3nLcBfQe7GU7GQCymRlTi/s=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2595b5f0592534492bce3cb61c2c9bf5ba03ffbe",
"rev": "3fbab70c6e69c87ea2b6e48aa6629da2aa6a23b0",
"type": "github"
},
"original": {
"owner": "msyds",
"ref": "fix-bepasty",
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
@@ -628,11 +629,11 @@
},
"nixpkgs_8": {
"locked": {
"lastModified": 1767767207,
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
"lastModified": 1762977756,
"narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
"rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55",
"type": "github"
},
"original": {
@@ -692,11 +693,11 @@
]
},
"locked": {
"lastModified": 1767810917,
"narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=",
"lastModified": 1758998580,
"narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=",
"owner": "nix-community",
"repo": "NUR",
"rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4",
"rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728",
"type": "github"
},
"original": {
@@ -715,7 +716,6 @@
"niri": "niri",
"nixarr": "nixarr",
"nixcord": "nixcord",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_6",
"nur": "nur",
"sops-nix": "sops-nix",
@@ -763,11 +763,11 @@
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1772296853,
"narHash": "sha256-pAtzPsgHRKw/2Kv8HgAjSJg450FDldHPWsP3AKG/Xj0=",
"lastModified": 1764550443,
"narHash": "sha256-ArO2V1YEHmEILilTj4KPtqF4gqc1q2HBrrrmygQ/UyU=",
"owner": "danth",
"repo": "stylix",
"rev": "c4b8e80a1020e09a1f081ad0f98ce804a6e85acf",
"rev": "794b6e1fa75177ebfeb32967f135858a1ab1ba15",
"type": "github"
},
"original": {
@@ -797,23 +797,20 @@
},
"sydpkgs": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
"nixpkgs": "nixpkgs_10"
},
"locked": {
"lastModified": 1773275674,
"narHash": "sha256-kULSjFWDoDatz31aIses5q51ESUi0ASUc3MKmBYLnRY=",
"ref": "fcitx5-toki-pona",
"rev": "03f6a67a0a3b3c00ff4566147eddb0123cfe3d14",
"revCount": 38,
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
"lastModified": 1767975357,
"narHash": "sha256-MDVh3/aVhkD1bh/r8c0gs9DL4e78CrUbUxOZHWlCwLM=",
"owner": "msyds",
"repo": "sydpkgs",
"rev": "233479ab277d47b1dbda202eafca50e61c659151",
"type": "github"
},
"original": {
"ref": "fcitx5-toki-pona",
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
"owner": "msyds",
"repo": "sydpkgs",
"type": "github"
}
},
"systems": {
@@ -864,7 +861,7 @@
"tf2-nix": {
"inputs": {
"flake-utils": "flake-utils_3",
"nixpkgs": "nixpkgs_10"
"nixpkgs": "nixpkgs_11"
},
"locked": {
"lastModified": 1761467191,
@@ -916,11 +913,11 @@
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1767710407,
"narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=",
"lastModified": 1757716333,
"narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2",
"rev": "317a5e10c35825a6c905d912e480dfe8e71c7559",
"type": "github"
},
"original": {
@@ -932,11 +929,11 @@
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1767489635,
"narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=",
"lastModified": 1757811970,
"narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184",
"rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e",
"type": "github"
},
"original": {
@@ -948,11 +945,11 @@
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1767488740,
"narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=",
"lastModified": 1757811247,
"narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40",
"rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e",
"type": "github"
},
"original": {
@@ -1038,11 +1035,11 @@
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1772429643,
"narHash": "sha256-M+bAeCCcjBnVk6w/4dIVvXvpJwOKnXjwi/lDbaN6Yws=",
"lastModified": 1768106915,
"narHash": "sha256-HlLo9zH4ULRXlmlIK948cHmdVhxyHgTHxGaoCRlW4k8=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "10f985b84cdbcc3bbf35b3e7e43d1b2a84fa9ce2",
"rev": "72245e108f3b03c3c4474d2de9de2d1830849603",
"type": "github"
},
"original": {

View File

@@ -3,9 +3,7 @@
inputs = {
disko.url = "github:nix-community/disko";
# nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
# Waiting on https://github.com/NixOS/nixpkgs/pull/500538
nixpkgs.url = "github:msyds/nixpkgs/fix-bepasty";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
impermanence.url = "github:nix-community/impermanence";
home-manager.url = "github:nix-community/home-manager";
sops-nix.url = "github:Mic92/sops-nix";
@@ -23,7 +21,6 @@
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";
@@ -32,10 +29,7 @@
tf2-nix.url = "gitlab:msyds/tf2-nix";
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";
inputs.nixpkgs.follows = "nixpkgs";
};
sydpkgs.url = "github:msyds/sydpkgs";
};
outputs = { self, nixpkgs, ... }@inputs:

View File

@@ -49,6 +49,7 @@
deertopia = {
authelia.enable = true;
atticd.enable = true;
gitea.enable = true;
quiver.enable = true;
www.enable = true;
@@ -58,7 +59,7 @@
lldap.pam.enable = true;
nginx.enable = true;
slskd.enable = true;
# webdav.enable = true;
webdav.enable = true;
copyparty.enable = true;
syncthing.enable = true;
cache.enable = true;

View File

@@ -1,30 +1,26 @@
{ config, pkgs, lib, disko, nixos-hardware, ... }:
{ config, pkgs, lib, disko, ... }:
{
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;
# blueman.enable = true;
# gdm.enable = true;
openssh.enable = true;
sydpkgs.overlay.enable = true;
dank-material-shell.enable = true;
kdeconnect.enable = true;
upower.enable = true;
users.users = [
# "crumb"
"crumb"
"msyds"
];

View File

@@ -1,16 +0,0 @@
{ 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

@@ -1,16 +0,0 @@
{ 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

@@ -13,36 +13,51 @@ in {
};
};
imports = [
./discord/jellyfin-rpc.nix
];
config = lib.mkIf cfg.enable {
sydnix.impermanence.directories =
let xdg-config-home =
config.home.confighome
config = lib.mkIf cfg.enable
(let
# Fixes flickering and platform detection on Wayland.
vesktop-wayland-wrapper =
pkgs.symlinkJoin {
name = "vesktop-wayland-wrapper";
paths = [ pkgs.callPackage pkgs.vesktop ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/vesktop \
--add-flags "--disable-gpu-compositing"
# --add-flags "--disable-gpu-compositing --ozone-platform-hint=auto"
'';
};
in {
sydnix.impermanence.directories =
let xdg-config-home =
config.home.confighome
or "${config.home.homeDirectory}/.config";
in [
# This directory should really be written in terms of
# `config.programs.nixcord.vesktopConfigDir`, but it
# defaults to null for unknown reasons. This is in conflict
# with the docs, which claim it should be the path used
# here.
(lib.removePrefix
config.home.homeDirectory
"${xdg-config-home}/vesktop")
];
in [
# This directory should really be written in terms of
# `config.programs.nixcord.vesktopConfigDir`, but it defaults to null
# for unknown reasons. This is in conflict with the docs, which claim
# it should be the path used here.
(lib.removePrefix
config.home.homeDirectory
"${xdg-config-home}/vesktop")
];
programs.nixcord = {
enable = true;
discord = {
enable = false;
vencord.enable = false;
vencord.package = pkgs.vencord;
};
vesktop = {
programs.nixcord = {
enable = true;
discord = {
# Install Vesktop without Discord.
enable = false;
# openASAR.enable = true;
vencord.enable = false;
vencord.package = pkgs.vencord;
};
vesktop = {
enable = true;
# package =
# if cfg.fixWayland
# then vesktop-wayland-wrapper
# else pkgs.vesktop;
};
};
};
};
});
}

View File

@@ -1,95 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.discord.jellyfin-rpc;
vesktop-wrapper =
pkgs.vesktop.overrideAttrs (finalAttrs: prevAttrs: {
postFixup = ''
${prevAttrs.postFixup or ""}
if [[ -e $out/bin/.vesktop-wrapped ]]; then
echo ".vesktop-wrapped already exists..."
exit 1
fi
mv $out/bin/vesktop $out/bin/.vesktop-wrapped
tee $out/bin/vesktop <<EOF
#!/usr/bin/env bash
systemctl start --user jellyfin-rpc
$out/bin/.vesktop-wrapped "\$@"
systemctl stop --user jellyfin-rpc
EOF
chmod +x $out/bin/vesktop
'';
});
jellyfin-rpc-config-template =
pkgs.writeText "jellyfin-rpc-config-template"
(lib.toJSON {
jellyfin = {
url = "https://watch.deertopia.net";
username = ["lain" "msyds"];
music = {
display = ["year" "album" "genres"];
separator = "";
};
blacklist.libraries = [
"episode"
"movie"
"book"
"audiobook"
"livetv"
];
};
images = {
enable_images = true;
imgur_images = false;
};
});
in {
options.sydnix.discord.jellyfin-rpc = {
enable = lib.mkEnableOption "Jellyfin rich presence";
};
config = lib.mkIf cfg.enable {
systemd.user.services.jellyfin-rpc-configure =
let api-key-file = config.sops.secrets.jellyfin-rpc-api-key.path;
in {
Unit = {
After = [ "sops-nix.service" ];
Requires = [ "sops-nix.service" ];
X-Restart-Triggers = [ api-key-file ];
};
Install.WantedBy = [ "default.target" ];
Service = {
Type = "oneshot";
ExecStart =
pkgs.writeShellScript "jellyfin-rpc-configure" ''
dest=''${XDG_CONFIG_HOME:-$HOME/.config}/jellyfin-rpc/main.json
mkdir -p "$(dirname "$dest")"
umask 177
[[ -f "$dest" ]] && chmod 600 "$dest"
${lib.getExe pkgs.jq} \
< ${jellyfin-rpc-config-template} \
> "$dest" \
--rawfile api_key ${api-key-file} \
'.jellyfin.api_key = $api_key'
'';
};
};
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;
};
sydnix.sops.secrets.jellyfin-rpc-api-key = {};
programs.nixcord.vesktop.package = vesktop-wrapper;
assertions = [{
assertion = config.programs.nixcord.vesktop.enable;
message = "Jellyfin RPC requires Vesktop.";
}];
};
}

View File

@@ -1,16 +0,0 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.documentation;
in {
options.sydnix.documentation = {
enable = lib.mkEnableOption "Docs";
};
config = lib.mkIf cfg.enable {
home.extraOutputsToInstall = [
"doc"
"info"
"man"
];
};
}

View File

@@ -128,13 +128,6 @@ in {
version = cfg.package.version;
};
in {
xdg.mimeApps = {
enable = true;
defaultApplicationPackages = [
sydmacs
];
};
# Set emacsclient as the default editor for the time being.
home.sessionVariables = {

View File

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

View File

@@ -1,18 +0,0 @@
{ 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"
];
};
}

View File

@@ -1,33 +0,0 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.toki-pona;
in {
options.sydnix.toki-pona = {
enable = lib.mkEnableOption "Toki Pona fonts, input, and spell-check";
};
config = lib.mkIf cfg.enable {
i18n.inputMethod.fcitx5.addons = [
(pkgs.fcitx5-toki-pona.overrideAttrs (final: prev: {
patches = prev.patches or [] ++ [
./toki-pona/punctuation.patch
];
}))
];
programs.ghostty.settings.font-family = lib.mkAfter [
"sitelen seli kiwen mono juniko"
];
sydnix.hunspell.dictionaries = ds: with ds; [
tok
];
home.packages = with pkgs; [
# nasin-nanpa-ucsur
nasin-nanpa
nasin-nanpa-helvetica
sitelen-seli-kiwen
];
};
}

View File

@@ -1,22 +0,0 @@
diff --git a/static_tables/toki_pona_ucsur.txt b/static_tables/toki_pona_ucsur.txt
index 1bacd3a..53f5c8e 100644
--- a/static_tables/toki_pona_ucsur.txt
+++ b/static_tables/toki_pona_ucsur.txt
@@ -1,4 +1,4 @@
-KeyCode=mnptkswljiueoa()[]{}^*.:"-_
+KeyCode=mnptkswljiueoa()[]{}^*.:"-_<>,
Length=16
Prompt=
ConstructPhrase=
@@ -13,8 +13,11 @@ _  
^ 󱦕
* 󱦖
. 󱦜
+, 。
: 󱦝 
-
+< 「
+> 」
a 󱤀
akesi 󱤁
ala 󱤂

View File

@@ -0,0 +1,34 @@
{ 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

@@ -1,16 +1,15 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.users.msyds.discord;
let cfg = config.sydnix.users.crumb.discord;
in {
options.sydnix.users.msyds.discord = {
options.sydnix.users.crumb.discord = {
enable = lib.mkEnableOption "Discord";
};
config = lib.mkIf cfg.enable {
sydnix.discord.enable = true;
sydnix.discord.jellyfin-rpc.enable = true;
stylix.targets.nixcord.enable = false;
stylix.targets.nixcord.enable = true;
programs.nixcord = {
quickCss = ''
@@ -30,11 +29,6 @@ in {
];
plugins = {
ircColors.enable = true;
voiceMessages = {
enable = true;
echoCancellation = false;
noiseSuppression = false;
};
};
};
vesktop = {

View File

@@ -26,8 +26,8 @@ in {
};
globalOptions = {
# Disable shift to toggle. I accidentally press it all
# the time. 날 미치게 만들어요.
# Disable shift to toggle. I accidentally press it all the time.
# 날 미치게 만들어요.
Hotkey.AltTriggerKeys = "";
};

View File

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

View File

@@ -31,17 +31,6 @@ 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;

View File

@@ -1,11 +0,0 @@
;;;; Emacs Bookmark Format Version 1;;;; -*- coding: utf-8-emacs; mode: lisp-data -*-
;;; This format is meant to be slightly human-readable;
;;; nevertheless, you probably don't want to edit it.
;;; -*- End Of Bookmark File Format Version Stamp -*-
(("org-capture-last-stored"
(filename . "~/org/daily/2026-03-26.org")
(front-context-string . "* The significan")
(rear-context-string . "le: 2026-03-26\n\n")
(position . 89)
(last-modified 27077 32462 617656 528000))
)

View File

@@ -3,7 +3,6 @@
(syd-require-features
'(syd/base
syd/constants
syd/fcitx
syd/dash
syd/disable-package
syd/straight
@@ -50,7 +49,6 @@
syd/direnv
syd/ligature
syd/clojure
syd/auctex
syd/lisp
syd/minibuffer
syd/auto-save
@@ -65,6 +63,5 @@
syd/eshell
syd/treesit
syd/grammatical-framework
syd/tabs
syd/lsp
syd/custom))

View File

@@ -1,11 +0,0 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package auctex
:config
(add-to-list 'TeX-view-program-selection '(output-pdf "Sioyek")))
(use-package auctex-latexmk)
(provide 'syd/auctex)

View File

@@ -1,7 +1,6 @@
;;; -*- lexical-binding: t; -*-
(require 'syd/base)
(require 'syd/handle)
(require 'syd/popups)
(require 'syd/leader)
@@ -27,8 +26,7 @@
cider-doc-buffer)
(defun syd-clojure-eval-region (beg end)
(cider-eval-region beg end))
(syd-handle '(clojure-mode clojurescript-mode cider-repl-mode
cider-clojure-interaction-mode)
(syd-handle '(clojure-mode clojurescript-mode cider-repl-mode)
:docs #'cider-doc
:eval-region #'syd-clojure-eval-region
:load-buffer #'cider-load-buffer)
@@ -110,13 +108,4 @@
s)
s))))
(defun syd-clojure--setup-clj-refactor ()
(clj-refactor-mode 1)
(yas-minor-mode 1)
(cljr-add-keybindings-with-prefix "C-c r"))
(use-package clj-refactor
:config
(add-hook 'clojure-mode-hook #'syd-clojure--setup-clj-refactor))
(provide 'syd/clojure)

View File

@@ -1,7 +1,4 @@
;; -*- lexical-binding: t -*-
(require 'syd/base)
(require 'syd/popups)
;;; -*- lexical-binding: t -*-
(setq
;; Log native-compiler warnings, but don't display the buffer. Most of the
@@ -11,7 +8,4 @@
;; 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,9 +150,7 @@ 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-aliases-file (or (getenv "ESHELL_ALIASES_FILE")
eshell-aliases-file)))
(eshell-prompt-regexp syd-eshell--prompt-regexp))
:general
(:keymaps 'syd-leader-open-map
"e" #'syd-toggle-eshell)

View File

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

View File

@@ -12,21 +12,15 @@
(font-spec :family "JuliaMono" :size 16)
"A monospace font secondary to `syd-fixed-pitch-font'.")
(defvar syd-sitelen-pona-font
(font-spec :family "sitelen seli kiwen mono juniko"))
(defun syd-init-fonts-h ()
"Loads `syd-fixed-pitch-font' and `syd-variable-pitch-font'."
(dolist (map `((default . ,syd-fixed-pitch-font)
(fixed-pitch . ,syd-fixed-pitch-font)
(variable-pitch . ,syd-variable-pitch-font)))
(fixed-pitch . ,syd-fixed-pitch-font)
(variable-pitch . ,syd-variable-pitch-font)))
(pcase-let ((`(,face . ,font) map))
(set-face-attribute face nil
:width 'normal :weight 'normal
:slant 'normal :font font)))
(set-fontset-font
t '(#xF1900 . #xF19FF)
syd-sitelen-pona-font))
:width 'normal :weight 'normal
:slant 'normal :font font))))
(let ((hook-point (if (daemonp)
'server-after-make-frame-hook

View File

@@ -5,28 +5,22 @@
(use-package ligature
:config
(ligature-set-ligatures 'prog-mode
'("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||="
"||>" ":::" "::=" "=:=" "===" "==>" "=!=" "=>>"
"=<<" "=/=" "!==" "!!." ">=>" ">>=" ">>>" ">>-"
">->" "->>" "-->" "---" "-<<" "<~~" "<~>" "<*>"
"<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" "<--"
"<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_("
"..<" "..." "+++" "/==" "///" "_|_" "www" "&&" "^="
"~~" "~@" "~=" "~>" "~-" "**" "*>" "*/" "||" "|}"
"|]" "|=" "|>" "|-" "{|" "[|" "]#" "::" ":=" ":>"
":<" "$>" "==" "=>" "!=" "!!" ">:" ">=" ">>" ">-"
"-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" "<$"
"<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#="
"#!" "##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?"
"+>" "++" "?:" "?=" "?." "??" ";;" ";;;"
"/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
"\\\\" "://"))
;; Sitelen pona glyphs.
(rx-let ((ideograph (any (#xF1900 . #xF198C))))
(ligature-set-ligatures
'fundamental-mode
`(("󱦐" ,(rx (* ideograph)))
("󱥍" ,(rx "󱦗" (* ideograph))))))
'("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||="
"||>" ":::" "::=" "=:=" "===" "==>" "=!=" "=>>"
"=<<" "=/=" "!==" "!!." ">=>" ">>=" ">>>" ">>-"
">->" "->>" "-->" "---" "-<<" "<~~" "<~>" "<*>"
"<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" "<--"
"<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_("
"..<" "..." "+++" "/==" "///" "_|_" "www" "&&" "^="
"~~" "~@" "~=" "~>" "~-" "**" "*>" "*/" "||" "|}"
"|]" "|=" "|>" "|-" "{|" "[|" "]#" "::" ":=" ":>"
":<" "$>" "==" "=>" "!=" "!!" ">:" ">=" ">>" ">-"
"-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" "<$"
"<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#="
"#!" "##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?"
"+>" "++" "?:" "?=" "?." "??" ";;" ";;;"
"/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
"\\\\" "://"))
(global-ligature-mode 1))
(provide 'syd/ligature)

View File

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

View File

@@ -80,8 +80,7 @@
:target (file "todays-korean/%<%Y-%m-%d>.org"))
("I" "Korean irregularity class" plain
(file ,(syd-emacs-file "lisp/syd/org/roam/irregularity-class.org"))
:target (file ,default-target-file-name)))))
(org-roam-link-auto-replace nil))
:target (file ,default-target-file-name))))))
:config
(add-to-list 'org-agenda-files org-roam-directory)
(with-eval-after-load 'org-roam-dailies

View File

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

View File

@@ -1,20 +0,0 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.users.msyds.sioyek;
in {
options.sydnix.users.msyds.sioyek = {
enable = lib.mkEnableOption "Sioyek";
};
config = lib.mkIf cfg.enable {
programs.sioyek = {
enable = true;
bindings = {
"move_down" = "j";
"move_up" = "k";
"screen_down" = [ "d" "<C-d>" ];
"screen_up" = [ "u" "<C-u>" ];
};
};
};
}

View File

@@ -1,12 +0,0 @@
{ 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,6 +7,8 @@ in {
};
config = lib.mkIf cfg.enable {
services.blueman.enable = true;
hardware.bluetooth = {
enable = true;
powerOnBoot = true;

View File

@@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.deertopia.atticd;
in {
options.sydnix.deertopia.atticd = {
enable = lib.mkEnableOption "Atticd";
port = lib.mkOption {
default = 8012;
type = lib.types.port;
};
};
# sudo atticd-atticadm make-token --sub msyds --validity '1 year' --pull 'msyds-*' --push 'msyds-*' --create-cache 'msyds-*' --configure-cache 'msyds-*'
config = lib.mkIf cfg.enable {
sydnix.sops.secrets.atticd-environment-file = {
# owner = config.services.atticd.user;
# group = config.services.atticd.group;
};
services.atticd = {
enable = true;
environmentFile =
config.sops.secrets.atticd-environment-file.path;
settings = {
api-endpoint = "https://attic.deertopia.net/";
listen = "[::]:${toString cfg.port}";
garbage-collection = {
default-retention-period = "3 months";
};
};
};
sydnix.deertopia.nginx.vhosts."attic".vhost = {
forceSSL = true;
enableACME = true;
locations."/".proxyPass =
"http://127.0.0.1:${toString cfg.port}";
};
};
}

View File

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

View File

@@ -13,14 +13,10 @@ in {
};
};
imports = [
./copyparty/vault.nix
./copyparty/webdav.nix
];
imports = [ ./copyparty/vault.nix ];
config = lib.mkIf cfg.enable {
sydnix.deertopia.copyparty.vault.enable = true;
sydnix.deertopia.copyparty.webdav.enable = true;
sydnix.impermanence.directories = [
"/var/lib/copyparty"
@@ -33,8 +29,8 @@ in {
"media"
];
# HACK: Make files created by copyparty.service initialise with
# the mode 775.
# HACK: Make files created by copyparty.service initialise with the mode
# 775.
systemd.services.copyparty.serviceConfig.UMask = lib.mkForce "002";
services.copyparty = {
@@ -60,7 +56,7 @@ in {
"/Media library" = {
path = "/media/library";
# View and upload, but no deleting.
access.r = "*";
access.rw = "*";
access.rwmd = "@jellyfin-admin";
};
"/Torrents" = {

View File

@@ -36,12 +36,6 @@ in {
access.A = [ "msyds" ];
access.rwmd = [ "zotero" ];
};
"/msyds/zotero-root" = {
path = "/vault/msyds/zotero-root";
flags.daw = true;
access.A = [ "msyds" ];
access.rwmd = [ "zotero" ];
};
"/~msyds/public" = {
path = "/vault/~msyds/public";
access.A = [ "msyds" ];

View File

@@ -1,57 +0,0 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.deertopia.copyparty.webdav;
in {
options.sydnix.deertopia.copyparty.webdav = {
enable = lib.mkEnableOption "WebDAV via copyparty";
port = lib.mkOption {
type = lib.types.port;
description = ''
Port on which Copyparty shall listen for WebDAV traffic.
'';
default = 3924;
};
};
# https://github.com/9001/copyparty/issues/1142
config = lib.mkIf cfg.enable {
services.copyparty.settings = {
rproxy = -1;
xff-src = "lan";
daw = true;
dav-auth = true;
ihead = "*";
ohead = "*";
dav-port = cfg.port;
};
services.authelia.instances.deertopia.settings =
lib.mkIf config.sydnix.deertopia.authelia.enable {
access_control.rules = lib.mkBefore [
{
domain = "dav.deertopia.net";
policy = "bypass";
methods = [ "OPTIONS" "PROPFIND" ];
}
];
};
sydnix.deertopia.nginx.vhosts."dav" = {
directory = null;
vhost = {
forceSSL = true;
enableACME = true;
extraConfig = ''
include ${../authelia/authelia-location.conf};
# Increase limit of upload sizes.
client_max_body_size 20G;
'';
locations."/".extraConfig = ''
include ${../authelia/authelia-authrequest.conf};
include ${../authelia/proxy.conf};
proxy_pass http://localhost:${builtins.toString cfg.port};
'';
};
};
};
}

View File

@@ -1,8 +1,6 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.deertopia.gitea;
commas = lib.concatStringsSep ",";
let cfg = config.sydnix.deertopia.gitea;
in {
options.sydnix.deertopia.gitea = {
enable = lib.mkEnableOption "Gitea";
@@ -42,18 +40,11 @@ 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 dear Astrid ♥!!!!!
mailerPasswordFile = config.sops.secrets.gitea-mailer-password.path;
appName = "GupHub"; # Name per my darling Colestar ♥
settings = {
server = {
ROOT_URL = "https://git.deertopia.net/";
@@ -62,48 +53,7 @@ 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

@@ -3,51 +3,13 @@
let
cfg = config.sydnix.gitea-actions-runner;
container-name = "gitea-actions-runner";
gitea-actions-runner-uid = 991;
gitea-actions-runner-gid = 989;
token-file = config.sops.secrets.gitea-actions-runner-token.path;
in {
options.sydnix.gitea-actions-runner = {
enable = lib.mkEnableOption "Gitea actions runner";
instance-name = lib.mkOption {
type = lib.types.str;
default = config.networking.hostName;
description = ''
The name of the runner instance name.
'';
};
user.name = lib.mkOption {
type = lib.types.str;
default = "gitea-actions-runner";
description = ''
The name of the user gitea-actions-runner should run under.
'';
};
user.uid = lib.mkOption {
type = lib.types.int;
default = 991;
description = ''
The UID of the user gitea-actions-runner should run under.
This must be known at evaluation time so that the same UID can
be used both on the host and in the container, allowing the
container to access the host's nix-daemon.
'';
};
group.name = lib.mkOption {
type = lib.types.str;
default = "gitea-actions-runner";
description = ''
The name of the group gitea-actions-runner should run under.
'';
};
group.gid = lib.mkOption {
type = lib.types.int;
default = 989;
description = ''
The GID of the group gitea-actions-runner should run under.
This must be known at evaluation time so that the same GID can
be used both on the host and in the container, allowing the
container to access the host's nix-daemon.
'';
};
};
config = lib.mkIf cfg.enable {
@@ -55,7 +17,7 @@ in {
sydnix.impermanence.directories = [ "/var/lib/gitea-actions-runner" ];
containers."gitea-actions-runner" = {
containers.${container-name} = {
autoStart = true;
ephemeral = true;
@@ -73,9 +35,9 @@ in {
config = { config, lib, pkgs, ... }: {
system.stateVersion = "25.11";
services.gitea-actions-runner.instances.${cfg.instance-name} = {
services.gitea-actions-runner.instances.sydpc = {
enable = true;
name = cfg.instance-name;
name = "sydpc";
url = "https://git.deertopia.net/";
tokenFile = token-file;
labels = [ "nixos:host" ];
@@ -94,27 +56,23 @@ in {
# Disable dynamic user so runner state persists via bind mount
assertions = [{
assertion =
config.systemd.services.gitea-actions-runner-sydpc.enable;
assertion = config.systemd.services.gitea-actions-runner-sydpc.enable;
message = ''
Expected systemd service 'gitea-actions-runner-sydpc' is
not enabled the gitea-actions-runner NixOS module may
have changed its naming scheme.
Expected systemd service 'gitea-actions-runner-sydpc' is not
enabled the gitea-actions-runner module may have changed
its naming scheme.
'';
}];
systemd.services.gitea-actions-runner-sydpc.serviceConfig.DynamicUser
= lib.mkForce false;
users.users.${cfg.user.name} = {
uid = cfg.user.uid;
users.users.gitea-actions-runner = {
uid = gitea-actions-runner-uid;
home = "/var/lib/gitea-actions-runner";
group = cfg.group.name;
group = "gitea-actions-runner";
isSystemUser = true;
createHome = true;
};
users.groups.gitea-actions-runner.gid = cfg.group.gid;
users.groups.gitea-actions-runner.gid = gitea-actions-runner-gid;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
@@ -123,27 +81,23 @@ in {
nodejs
jq
attic-client
omnix
];
};
};
# Needs to be outside of the container because container uses's
# the host's nix-daemon
nix.settings.trusted-users = [
cfg.user.name
];
nix.settings.trusted-users = [ "gitea-actions-runner" ];
# Matching user on host — the container's gitea-actions-runner UID
# must be recognized by the host's nix-daemon as trusted (shared
# UID namespace)
users.users.${cfg.user.name} = {
uid = cfg.user.uid;
# Matching user on host — the container's gitea-actions-runner UID must be
# recognized by the host's nix-daemon as trusted (shared UID namespace)
users.users.gitea-actions-runner = {
uid = gitea-actions-runner-uid;
home = "/var/lib/gitea-actions-runner";
group = cfg.group.name;
group = "gitea-actions-runner";
isSystemUser = true;
createHome = true;
};
users.groups.${cfg.group.name}.gid = cfg.group.gid;
users.groups.gitea-actions-runner.gid = gitea-actions-runner-gid;
};
}

View File

@@ -70,6 +70,10 @@ in {
};
# O_O what the fuck did i write this for.... CONCERNING.
#
# oh because of these types of errors:
# Directory "/var/lib/private" already exists, but has mode 0755
# that is too permissive (0700 was requested), refusing.
systemd.tmpfiles.settings."10-varlibprivate" = {
"/var/lib/private" = {
z.group = "root";
@@ -78,6 +82,13 @@ in {
};
};
# Workaround for https://github.com/nix-community/impermanence/issues/254.
systemd.services."systemd-tmpfiles-resetup" = {
serviceConfig = {
RemainAfterExit = lib.mkForce false;
};
};
# Permit members of `cfg.persistGroupName` to read, write, and execute
# /persist.
systemd.tmpfiles.settings."10-persist" = {

View File

@@ -1,12 +0,0 @@
{ 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,7 +59,6 @@ let
pkgs = nixpkgs;
};
inherit inputs system;
host = hostName;
};
})
];

File diff suppressed because one or more lines are too long

View File

@@ -18,68 +18,59 @@
];
};
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";
homeConfiguration = { config, lib, pkgs, ... }: {
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 = 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 = true;
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;
};
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 = true;
};
sydnix = {
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;
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 = {
hunspell.enable = true;
emacs.enable = true;
impermanence.enable = true;
syncthing.enable = true;
fonts.enable = true;
dank-material-shell.enable = true;
};
# Don't touch!
home.stateVersion = "18.09";
};
# Don't touch!
home.stateVersion = "18.09";
};
}

View File

@@ -17,7 +17,6 @@ gitlab-oauth: ENC[AES256_GCM,data:1THznoGRZmq7BkisZoGa0ZiPG7aSmkV06SY=,iv:Gq6UPH
anki-username: ENC[AES256_GCM,data:cUWaxIc=,iv:I2wy54406Xe4tVHIhIFZqbezepc2wtp2M15T7ES9zGQ=,tag:FiU2CscHDcNv+6S5pODG7w==,type:str]
anki-password: ENC[AES256_GCM,data:kXQq1JPjTRpQ4f6/BOFj/gBhUA==,iv:P8MVsmCfyOoEJmyAjBfMSRT6mpkwDUBIzr2UjZmjHOA=,tag:D7KWEpldP/H6CUH7y+5/7Q==,type:str]
anki-sync-key: ENC[AES256_GCM,data:wvAo92t6oR8PxE5EId/OC+J4GKs/Rp21PSp+uDt72JWFzeWHO6a1KA==,iv:2yU4skxlDuH6smSr5PnPe8ZkWf4gdxKBXQfzPFiZXoA=,tag:7KXl5A4vzRdkWO++LbMb9A==,type:str]
jellyfin-rpc-api-key: ENC[AES256_GCM,data:srElaGG1JVWwDb+xA4iG9ew6oFUEHSd6AlLUXN8iA3c=,iv:z1UQshfWW6Q7GK8Ff8GK3OD7z0Aa5kePVRPLlUsDmF0=,tag:+csa3asD+0qthO05uZqK0A==,type:str]
sops:
age:
- recipient: age1qayk0d0f765v57pedm7mtau6qkmv8rh6jtaqm40g5g9armaty4jqc0v0y2
@@ -29,7 +28,7 @@ sops:
VVBqSEM2bVFBU0M5YzZBQWIwUmVXUXMKvWb57Rc+rO5M8Pf7lvbSjuZB4FrHgT3A
uBQHH3wpv0BVVzL8tucPnwNxDnwpWvFxxwNVy/rtfs6y6HPu6fuOsA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-03-06T21:55:34Z"
mac: ENC[AES256_GCM,data:kkEZI0Of8KUpGJRoGAD3gXCtNz44Sucki4Fk2lQ55o+IcBYtxJwwpoQH3usihSigaPquee4XAxhdlWyHt7S46Q9dTFXjT9IUpnxrlG0ZQOnTRbdRlT2qcxLSlghdDWRuezhjT5KWFqlq4Av85KmL7kiB7LAkPVk6EERHJuFsWR8=,iv:Y3wd4hP1ui3rtXe++3j1oAKYbd8V4cc0SBLOlcyl5Zc=,tag:/FK8R28WAWDhWImMnm6wQg==,type:str]
lastmodified: "2025-11-30T00:32:08Z"
mac: ENC[AES256_GCM,data:9c3xcwnGSoi/IpDHBJ922kd9Xh4EodOL/1B1epdCIB/N3Pu07wVMGSGm97e2uqczbFgebXc/Oz1Gpr9hdxNpvxlldXQgqPhZIlk6Pfelf6E0WcC5+QOE1ZQ6MTsgAE5RjFy2fctphXJi/Z9VuTcSgakSYuy+0QbPCfuwL5CaTVk=,iv:8qwCqjVALlaxJCAfZURpt7c6/3b9KKar7mtsYb3/rlw=,tag:utHZLe3FojSmyvBBIzfY2A==,type:str]
unencrypted_suffix: _unencrypted
version: 3.12.1
version: 3.11.0