mirror of
https://codeberg.org/muon/home.git
synced 2025-12-05 23:57:46 +00:00
Merge branch 'main' of codeberg.org:muon/home
This commit is contained in:
commit
3d5964b16d
85 changed files with 4593 additions and 710 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
use nix
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,3 +1,6 @@
|
||||||
# nixos-rebuild buildvm --flake .#
|
# nixos-rebuild buildvm --flake .#
|
||||||
result
|
result
|
||||||
*.qcow2
|
*.qcow2
|
||||||
|
|
||||||
|
# direnv
|
||||||
|
.direnv
|
||||||
|
|
|
||||||
22
.sops.yaml
Normal file
22
.sops.yaml
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
keys:
|
||||||
|
- &muon age1m97a3eptxwpdd7h5kkqe9gkmhg6rquc64qjmlsfqfhfqv8q72crqrylhgc
|
||||||
|
- &muho age1v4s4hg7u3vjjkarvrk7v6ev7w3wja2r5xm7f4t06culw3fuq7qns8sfju7
|
||||||
|
- &mups age1n7qz2w3hkf7fcdv92kxw9k6uef487na2tlc87486rcjwj8lyfuws5q46gn
|
||||||
|
- &murk age1mgjhkqy9x27gv2t2xvq46dxcajkr9c8zes7rr3dj0ac7md2j6vas43dftp
|
||||||
|
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: modules/nixos/sops/secrets.ya?ml$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *muon
|
||||||
|
- *muho
|
||||||
|
- *mups
|
||||||
|
- *murk
|
||||||
|
|
||||||
|
- path_regex: modules/home/sops/secrets.ya?ml$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *muon
|
||||||
|
- *muho
|
||||||
|
- *mups
|
||||||
|
- *murk
|
||||||
52
README.md
Normal file
52
README.md
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount hosts/$(hostname)/disk-config.nix
|
||||||
|
sudo mkdir /tmp/mnt
|
||||||
|
sudo mount /dev/mapper/crypted /tmp/mnt
|
||||||
|
sudo btrfs subvolume snapshot -r /tmp/mnt/root /tmp/mnt/root-blank
|
||||||
|
sudo umount /tmp/mnt
|
||||||
|
sudo nixos-generate-config --no-filesystems --root /mnt
|
||||||
|
cp /mnt/etc/nixos/hardware-configuration.nix hosts/$(hostname)/hardware-configuration.nix
|
||||||
|
rbw config set email admin@muon.host
|
||||||
|
rbw config set base_url https://vault.muon.host
|
||||||
|
rbw login
|
||||||
|
sudo mkdir -p /mnt{,/persist}/var/lib/sops-nix
|
||||||
|
sudo chown muon:users /mnt/persist/var/lib/sops-nix -R
|
||||||
|
rbw get sops > /mnt/var/lib/sops-nix/key.txt
|
||||||
|
sudo cp {/mnt,/mnt/persist}/var/lib/sops-nix/key.txt
|
||||||
|
sudo nixos-install --root /mnt --no-root-passwd --flake .#$(hostname)
|
||||||
|
sudo cp -r /mnt/var/lib/nixos/* /mnt/persist/var/lib/nixos/
|
||||||
|
sudo cp {/mnt,/mnt/persist}/etc/machine-id
|
||||||
|
```
|
||||||
|
|
||||||
|
# Impermanence
|
||||||
|
|
||||||
|
## Erasure
|
||||||
|
|
||||||
|
```nix
|
||||||
|
boot.initrd.postResumeCommands = lib.mkAfter ''
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount /dev/mapper/crypted /btrfs_tmp
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
```
|
||||||
437
_sources/generated.json
Normal file
437
_sources/generated.json
Normal file
|
|
@ -0,0 +1,437 @@
|
||||||
|
{
|
||||||
|
"valheim.aaacrafting": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.aaacrafting",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-cObo71X0wOzW3pZwAy7/dh7IRghu7EMPw7vWuoPWPlk=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/1.6.6/"
|
||||||
|
},
|
||||||
|
"version": "1.6.6"
|
||||||
|
},
|
||||||
|
"valheim.architect": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.architect",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-6H9zmahsKsjZITOAVzGQ6Fv4KN9HgwdjGUCLBp2pC3U=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/1.5.0/"
|
||||||
|
},
|
||||||
|
"version": "1.5.0"
|
||||||
|
},
|
||||||
|
"valheim.arearepair": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.arearepair",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-5eRobZrlGB5ECpyXldYMOt+0xKzU9rBeCSVPIs3PZd8=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/AzuAreaRepair/1.1.6/"
|
||||||
|
},
|
||||||
|
"version": "1.1.6"
|
||||||
|
},
|
||||||
|
"valheim.autostore": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.autostore",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-ooghhDinwLTwEpTTQFj/brdb9Yj5aLGr+zYsjrsq9A0=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/3.0.8/"
|
||||||
|
},
|
||||||
|
"version": "3.0.8"
|
||||||
|
},
|
||||||
|
"valheim.backpacks": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.backpacks",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-xSfcLisLLPALx6l1Rtbt10YFUo112HV2I6BO/zCjr5w=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Smoothbrain/Backpacks/1.3.6/"
|
||||||
|
},
|
||||||
|
"version": "1.3.6"
|
||||||
|
},
|
||||||
|
"valheim.betternetworking": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.betternetworking",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-krgZ4B+MbIG/3CQUMkVIB/xrvvW1TbxB0cp1KwCTBN4=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/CW_Jesse/BetterNetworking_Valheim/2.3.2/"
|
||||||
|
},
|
||||||
|
"version": "2.3.2"
|
||||||
|
},
|
||||||
|
"valheim.boneappetit": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.boneappetit",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-rqJWdsXKoxk49d4qyQ9s2cpcwOkEXJ80bL7UTxDa6fc=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/RockerKitten/BoneAppetit/3.3.1/"
|
||||||
|
},
|
||||||
|
"version": "3.3.1"
|
||||||
|
},
|
||||||
|
"valheim.campsite": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.campsite",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-r3HTjfNy7ehr6bsjddr6mTA7T8VVXRhDfulIodjc0jc=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/1.5.8/"
|
||||||
|
},
|
||||||
|
"version": "1.5.8"
|
||||||
|
},
|
||||||
|
"valheim.cartography": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.cartography",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-u20BTiyF4e6QJ6OUK5migjdEpyzIGRDxLPJ3NdZNhvA=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Advize/CartographySkill/3.0.1/"
|
||||||
|
},
|
||||||
|
"version": "3.0.1"
|
||||||
|
},
|
||||||
|
"valheim.craftyboxes": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.craftyboxes",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-8bvHmONHuc9K0cgT42+W4oxQ6MusAv8v0IIVMerdYSA=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/1.8.4/"
|
||||||
|
},
|
||||||
|
"version": "1.8.4"
|
||||||
|
},
|
||||||
|
"valheim.customships": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.customships",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-pUSd1DHQVTyN83ur1AmL8duEYk07otAZ8deDX4YaViU=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/MSchmoecker/CustomShips/0.4.1/"
|
||||||
|
},
|
||||||
|
"version": "0.4.1"
|
||||||
|
},
|
||||||
|
"valheim.extendedinv": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.extendedinv",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-Xd7KdUm3c14iQBST31DAqs+bQF9hwYhUxE66o3lusrA=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/1.4.9/"
|
||||||
|
},
|
||||||
|
"version": "1.4.9"
|
||||||
|
},
|
||||||
|
"valheim.foodmove": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.foodmove",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-O4hboEOetIA/xQkTmDMTMoSAxdtB4XfdlqBr8Ai/CvM=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/sbtoonz/Food_Degrade_Only_On_Move/1.0.1/"
|
||||||
|
},
|
||||||
|
"version": "1.0.1"
|
||||||
|
},
|
||||||
|
"valheim.jotunn": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.jotunn",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-Tso4/Sf4Evt5kpBrVqZrjE9Qs2MSZV04WB1w+uX+TX8=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/ValheimModding/Jotunn/2.25.0/"
|
||||||
|
},
|
||||||
|
"version": "2.25.0"
|
||||||
|
},
|
||||||
|
"valheim.jsondotnet": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.jsondotnet",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-OZgL/KKR5JP5PL6lq4hqqKtmhNzgyWIM0y6lXw5sQls=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/ValheimModding/JsonDotNET/13.0.4/"
|
||||||
|
},
|
||||||
|
"version": "13.0.4"
|
||||||
|
},
|
||||||
|
"valheim.lazyvikings": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.lazyvikings",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-6pkQ0q267r2y1+WSfnnBdf7XAhG+i8Mux+Noo+w2A3s=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/blacks7ar/LazyVikings/1.2.1/"
|
||||||
|
},
|
||||||
|
"version": "1.2.1"
|
||||||
|
},
|
||||||
|
"valheim.mining": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.mining",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-SxQ+Z4T5Hg5w4X4+L++eArWZXhoXuarecKl6gdpcpNQ=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Smoothbrain/Mining/1.1.5/"
|
||||||
|
},
|
||||||
|
"version": "1.1.5"
|
||||||
|
},
|
||||||
|
"valheim.missingpieces": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.missingpieces",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-Q6CPQp7C9+LyXIotiUhz3zRR0oze6FaugswVE4V6g7o=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/BentoG/MissingPieces/2.2.2/"
|
||||||
|
},
|
||||||
|
"version": "2.2.2"
|
||||||
|
},
|
||||||
|
"valheim.multiuserchest": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.multiuserchest",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-PhXW6vBtEMnhE93RAALEucPU9q3VpdMrooFawWYXl2A=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/MSchmoecker/MultiUserChest/0.6.1/"
|
||||||
|
},
|
||||||
|
"version": "0.6.1"
|
||||||
|
},
|
||||||
|
"valheim.planteasily": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.planteasily",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-HvjwiVBWs723LhHR7Xk6knugOU8eQewGiV+mZaAN5YU=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Advize/PlantEasily/2.0.3/"
|
||||||
|
},
|
||||||
|
"version": "2.0.3"
|
||||||
|
},
|
||||||
|
"valheim.quickteleport": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.quickteleport",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-YSAVthV994do/atQA+wGfillXeSYFlLJK6VyMcQNVKE=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/OdinPlus/QuickTeleport/1.1.0/"
|
||||||
|
},
|
||||||
|
"version": "1.1.0"
|
||||||
|
},
|
||||||
|
"valheim.reclaim": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.reclaim",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-2cWdmspwid2h1ekfDFAngN25402pQnxZQhm4rX6BNhw=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/1.3.6/"
|
||||||
|
},
|
||||||
|
"version": "1.3.6"
|
||||||
|
},
|
||||||
|
"valheim.savecrossbow": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.savecrossbow",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-AIgmeE9HZYOIFl4jZ2eL3tdFtrpHpGFAmYTt8IG7shU=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Azumatt/SaveCrossbowState/1.0.1/"
|
||||||
|
},
|
||||||
|
"version": "1.0.1"
|
||||||
|
},
|
||||||
|
"valheim.seedbed": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.seedbed",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-wm2gGSyMQ6r3lLpbpXtZYG7s+fFYvw5nZGmSW54Ayt4=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/blacks7ar/SeedBed/1.2.7/"
|
||||||
|
},
|
||||||
|
"version": "1.2.7"
|
||||||
|
},
|
||||||
|
"valheim.servercharacters": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.servercharacters",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-aSB+G4nK3gf0yvMYWbICMFe3A0aCSr7nBH45G9ZdE9g=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Smoothbrain/ServerCharacters/1.4.16/"
|
||||||
|
},
|
||||||
|
"version": "1.4.16"
|
||||||
|
},
|
||||||
|
"valheim.smoothsave": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.smoothsave",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-v5Zn+0O0au8VDzO+302oCE7Z9s87I3nq+eK2WbVVyFo=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Smoothbrain/SmoothSave/1.0.5/"
|
||||||
|
},
|
||||||
|
"version": "1.0.5"
|
||||||
|
},
|
||||||
|
"valheim.spearfishing": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.spearfishing",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-8hnK1sosF1cZGcHtq7w1y2WmWpqDuHDGrYDD2titSc8=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Korppis/Spearfishing/1.0.4/"
|
||||||
|
},
|
||||||
|
"version": "1.0.4"
|
||||||
|
},
|
||||||
|
"valheim.swim": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.swim",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-QCEYnx0I6onWEAJy851wS0WdC35L18DyJL1wAAwHFaU=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/1.3.8/"
|
||||||
|
},
|
||||||
|
"version": "1.3.8"
|
||||||
|
},
|
||||||
|
"valheim.swimequip": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.swimequip",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-UotiInuJAZsR1sL9aquTBQf7sw5kzG+2fG8QlFl+2Fc=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/blacks7ar/WieldEquipmentWhileSwimming/1.1.2/"
|
||||||
|
},
|
||||||
|
"version": "1.1.2"
|
||||||
|
},
|
||||||
|
"valheim.targetportal": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "valheim.targetportal",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"sha256": "sha256-6rfc+/4a55pIP2hIjwlggS2kqnqGhyCmRW8r+2OHhB4=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/1.2.0/"
|
||||||
|
},
|
||||||
|
"version": "1.2.0"
|
||||||
|
},
|
||||||
|
"vesktop.micfix": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "vesktop.micfix",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"name": null,
|
||||||
|
"sha256": "sha256-eNOKW43LQdJp2GFHqe3RxAhMwkNulrotIOMByosen84=",
|
||||||
|
"type": "url",
|
||||||
|
"url": "https://codeberg.org/muon/gists/raw/branch/main/micfix.patch"
|
||||||
|
},
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
252
_sources/generated.nix
Normal file
252
_sources/generated.nix
Normal file
|
|
@ -0,0 +1,252 @@
|
||||||
|
# This file was generated by nvfetcher, please do not modify it manually.
|
||||||
|
{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }:
|
||||||
|
{
|
||||||
|
"valheim.aaacrafting" = {
|
||||||
|
pname = "valheim.aaacrafting";
|
||||||
|
version = "1.6.6";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/1.6.6/";
|
||||||
|
sha256 = "sha256-cObo71X0wOzW3pZwAy7/dh7IRghu7EMPw7vWuoPWPlk=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.architect" = {
|
||||||
|
pname = "valheim.architect";
|
||||||
|
version = "1.5.0";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/1.5.0/";
|
||||||
|
sha256 = "sha256-6H9zmahsKsjZITOAVzGQ6Fv4KN9HgwdjGUCLBp2pC3U=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.arearepair" = {
|
||||||
|
pname = "valheim.arearepair";
|
||||||
|
version = "1.1.6";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/AzuAreaRepair/1.1.6/";
|
||||||
|
sha256 = "sha256-5eRobZrlGB5ECpyXldYMOt+0xKzU9rBeCSVPIs3PZd8=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.autostore" = {
|
||||||
|
pname = "valheim.autostore";
|
||||||
|
version = "3.0.8";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/3.0.8/";
|
||||||
|
sha256 = "sha256-ooghhDinwLTwEpTTQFj/brdb9Yj5aLGr+zYsjrsq9A0=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.backpacks" = {
|
||||||
|
pname = "valheim.backpacks";
|
||||||
|
version = "1.3.6";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Smoothbrain/Backpacks/1.3.6/";
|
||||||
|
sha256 = "sha256-xSfcLisLLPALx6l1Rtbt10YFUo112HV2I6BO/zCjr5w=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.betternetworking" = {
|
||||||
|
pname = "valheim.betternetworking";
|
||||||
|
version = "2.3.2";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/CW_Jesse/BetterNetworking_Valheim/2.3.2/";
|
||||||
|
sha256 = "sha256-krgZ4B+MbIG/3CQUMkVIB/xrvvW1TbxB0cp1KwCTBN4=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.boneappetit" = {
|
||||||
|
pname = "valheim.boneappetit";
|
||||||
|
version = "3.3.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/RockerKitten/BoneAppetit/3.3.1/";
|
||||||
|
sha256 = "sha256-rqJWdsXKoxk49d4qyQ9s2cpcwOkEXJ80bL7UTxDa6fc=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.campsite" = {
|
||||||
|
pname = "valheim.campsite";
|
||||||
|
version = "1.5.8";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/1.5.8/";
|
||||||
|
sha256 = "sha256-r3HTjfNy7ehr6bsjddr6mTA7T8VVXRhDfulIodjc0jc=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.cartography" = {
|
||||||
|
pname = "valheim.cartography";
|
||||||
|
version = "3.0.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Advize/CartographySkill/3.0.1/";
|
||||||
|
sha256 = "sha256-u20BTiyF4e6QJ6OUK5migjdEpyzIGRDxLPJ3NdZNhvA=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.craftyboxes" = {
|
||||||
|
pname = "valheim.craftyboxes";
|
||||||
|
version = "1.8.4";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/1.8.4/";
|
||||||
|
sha256 = "sha256-8bvHmONHuc9K0cgT42+W4oxQ6MusAv8v0IIVMerdYSA=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.customships" = {
|
||||||
|
pname = "valheim.customships";
|
||||||
|
version = "0.4.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/MSchmoecker/CustomShips/0.4.1/";
|
||||||
|
sha256 = "sha256-pUSd1DHQVTyN83ur1AmL8duEYk07otAZ8deDX4YaViU=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.extendedinv" = {
|
||||||
|
pname = "valheim.extendedinv";
|
||||||
|
version = "1.4.9";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/1.4.9/";
|
||||||
|
sha256 = "sha256-Xd7KdUm3c14iQBST31DAqs+bQF9hwYhUxE66o3lusrA=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.foodmove" = {
|
||||||
|
pname = "valheim.foodmove";
|
||||||
|
version = "1.0.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/sbtoonz/Food_Degrade_Only_On_Move/1.0.1/";
|
||||||
|
sha256 = "sha256-O4hboEOetIA/xQkTmDMTMoSAxdtB4XfdlqBr8Ai/CvM=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.jotunn" = {
|
||||||
|
pname = "valheim.jotunn";
|
||||||
|
version = "2.25.0";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/ValheimModding/Jotunn/2.25.0/";
|
||||||
|
sha256 = "sha256-Tso4/Sf4Evt5kpBrVqZrjE9Qs2MSZV04WB1w+uX+TX8=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.jsondotnet" = {
|
||||||
|
pname = "valheim.jsondotnet";
|
||||||
|
version = "13.0.4";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/ValheimModding/JsonDotNET/13.0.4/";
|
||||||
|
sha256 = "sha256-OZgL/KKR5JP5PL6lq4hqqKtmhNzgyWIM0y6lXw5sQls=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.lazyvikings" = {
|
||||||
|
pname = "valheim.lazyvikings";
|
||||||
|
version = "1.2.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/blacks7ar/LazyVikings/1.2.1/";
|
||||||
|
sha256 = "sha256-6pkQ0q267r2y1+WSfnnBdf7XAhG+i8Mux+Noo+w2A3s=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.mining" = {
|
||||||
|
pname = "valheim.mining";
|
||||||
|
version = "1.1.5";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Smoothbrain/Mining/1.1.5/";
|
||||||
|
sha256 = "sha256-SxQ+Z4T5Hg5w4X4+L++eArWZXhoXuarecKl6gdpcpNQ=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.missingpieces" = {
|
||||||
|
pname = "valheim.missingpieces";
|
||||||
|
version = "2.2.2";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/BentoG/MissingPieces/2.2.2/";
|
||||||
|
sha256 = "sha256-Q6CPQp7C9+LyXIotiUhz3zRR0oze6FaugswVE4V6g7o=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.multiuserchest" = {
|
||||||
|
pname = "valheim.multiuserchest";
|
||||||
|
version = "0.6.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/MSchmoecker/MultiUserChest/0.6.1/";
|
||||||
|
sha256 = "sha256-PhXW6vBtEMnhE93RAALEucPU9q3VpdMrooFawWYXl2A=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.planteasily" = {
|
||||||
|
pname = "valheim.planteasily";
|
||||||
|
version = "2.0.3";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Advize/PlantEasily/2.0.3/";
|
||||||
|
sha256 = "sha256-HvjwiVBWs723LhHR7Xk6knugOU8eQewGiV+mZaAN5YU=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.quickteleport" = {
|
||||||
|
pname = "valheim.quickteleport";
|
||||||
|
version = "1.1.0";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/OdinPlus/QuickTeleport/1.1.0/";
|
||||||
|
sha256 = "sha256-YSAVthV994do/atQA+wGfillXeSYFlLJK6VyMcQNVKE=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.reclaim" = {
|
||||||
|
pname = "valheim.reclaim";
|
||||||
|
version = "1.3.6";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/1.3.6/";
|
||||||
|
sha256 = "sha256-2cWdmspwid2h1ekfDFAngN25402pQnxZQhm4rX6BNhw=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.savecrossbow" = {
|
||||||
|
pname = "valheim.savecrossbow";
|
||||||
|
version = "1.0.1";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Azumatt/SaveCrossbowState/1.0.1/";
|
||||||
|
sha256 = "sha256-AIgmeE9HZYOIFl4jZ2eL3tdFtrpHpGFAmYTt8IG7shU=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.seedbed" = {
|
||||||
|
pname = "valheim.seedbed";
|
||||||
|
version = "1.2.7";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/blacks7ar/SeedBed/1.2.7/";
|
||||||
|
sha256 = "sha256-wm2gGSyMQ6r3lLpbpXtZYG7s+fFYvw5nZGmSW54Ayt4=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.servercharacters" = {
|
||||||
|
pname = "valheim.servercharacters";
|
||||||
|
version = "1.4.16";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Smoothbrain/ServerCharacters/1.4.16/";
|
||||||
|
sha256 = "sha256-aSB+G4nK3gf0yvMYWbICMFe3A0aCSr7nBH45G9ZdE9g=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.smoothsave" = {
|
||||||
|
pname = "valheim.smoothsave";
|
||||||
|
version = "1.0.5";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Smoothbrain/SmoothSave/1.0.5/";
|
||||||
|
sha256 = "sha256-v5Zn+0O0au8VDzO+302oCE7Z9s87I3nq+eK2WbVVyFo=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.spearfishing" = {
|
||||||
|
pname = "valheim.spearfishing";
|
||||||
|
version = "1.0.4";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Korppis/Spearfishing/1.0.4/";
|
||||||
|
sha256 = "sha256-8hnK1sosF1cZGcHtq7w1y2WmWpqDuHDGrYDD2titSc8=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.swim" = {
|
||||||
|
pname = "valheim.swim";
|
||||||
|
version = "1.3.8";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/1.3.8/";
|
||||||
|
sha256 = "sha256-QCEYnx0I6onWEAJy851wS0WdC35L18DyJL1wAAwHFaU=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.swimequip" = {
|
||||||
|
pname = "valheim.swimequip";
|
||||||
|
version = "1.1.2";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/blacks7ar/WieldEquipmentWhileSwimming/1.1.2/";
|
||||||
|
sha256 = "sha256-UotiInuJAZsR1sL9aquTBQf7sw5kzG+2fG8QlFl+2Fc=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"valheim.targetportal" = {
|
||||||
|
pname = "valheim.targetportal";
|
||||||
|
version = "1.2.0";
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/1.2.0/";
|
||||||
|
sha256 = "sha256-6rfc+/4a55pIP2hIjwlggS2kqnqGhyCmRW8r+2OHhB4=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"vesktop.micfix" = {
|
||||||
|
pname = "vesktop.micfix";
|
||||||
|
version = "1.0.1";
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://codeberg.org/muon/gists/raw/branch/main/micfix.patch";
|
||||||
|
sha256 = "sha256-eNOKW43LQdJp2GFHqe3RxAhMwkNulrotIOMByosen84=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
535
flake.lock
generated
535
flake.lock
generated
|
|
@ -1,33 +1,15 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"actual": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1733551027,
|
|
||||||
"narHash": "sha256-nlZWAq4E+cNywCuxpnYcyky4fd+8bVzJHrS2e8QTtVs=",
|
|
||||||
"ref": "refs/heads/main",
|
|
||||||
"rev": "7f041ffa7f204deb0fc2e36908b382804f2e108d",
|
|
||||||
"revCount": 18,
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.xeno.science/xenofem/actual-nix.git"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.xeno.science/xenofem/actual-nix.git"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"base16": {
|
"base16": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"fromYaml": "fromYaml"
|
"fromYaml": "fromYaml"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732200724,
|
"lastModified": 1755819240,
|
||||||
"narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
|
"narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=",
|
||||||
"owner": "SenchoPens",
|
"owner": "SenchoPens",
|
||||||
"repo": "base16.nix",
|
"repo": "base16.nix",
|
||||||
"rev": "153d52373b0fb2d343592871009a286ec8837aec",
|
"rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -55,11 +37,11 @@
|
||||||
"base16-helix": {
|
"base16-helix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1725860795,
|
"lastModified": 1752979451,
|
||||||
"narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
|
"narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "base16-helix",
|
"repo": "base16-helix",
|
||||||
"rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
|
"rev": "27cf1e66e50abc622fb76a3019012dc07c678fac",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -71,26 +53,43 @@
|
||||||
"base16-vim": {
|
"base16-vim": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731949548,
|
"lastModified": 1732806396,
|
||||||
"narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=",
|
"narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "base16-vim",
|
"repo": "base16-vim",
|
||||||
"rev": "61165b1632409bd55e530f3dbdd4477f011cadc6",
|
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "base16-vim",
|
"repo": "base16-vim",
|
||||||
|
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firefox-gnome-theme": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1756083905,
|
||||||
|
"narHash": "sha256-UqYGTBgI5ypGh0Kf6zZjom/vABg7HQocB4gmxzl12uo=",
|
||||||
|
"owner": "rafaelmardojai",
|
||||||
|
"repo": "firefox-gnome-theme",
|
||||||
|
"rev": "b655eaf16d4cbec9c3472f62eee285d4b419a808",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rafaelmardojai",
|
||||||
|
"repo": "firefox-gnome-theme",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1733328505,
|
"lastModified": 1747046372,
|
||||||
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -102,11 +101,11 @@
|
||||||
"flake-compat_2": {
|
"flake-compat_2": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1673956053,
|
"lastModified": 1747046372,
|
||||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -118,16 +117,58 @@
|
||||||
"flake-compat_3": {
|
"flake-compat_3": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1696426674,
|
"lastModified": 1751685974,
|
||||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
|
||||||
"owner": "edolstra",
|
"ref": "refs/heads/main",
|
||||||
"repo": "flake-compat",
|
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
|
||||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
"revCount": 92,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.lix.systems/lix-project/flake-compat.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.lix.systems/lix-project/flake-compat.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nvf",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1756770412,
|
||||||
|
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "4524271976b625a4a605beefd893f270620fd751",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "edolstra",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"stylix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1756770412,
|
||||||
|
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "4524271976b625a4a605beefd893f270620fd751",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -149,63 +190,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils_2": {
|
|
||||||
"inputs": {
|
|
||||||
"systems": "systems_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681202837,
|
|
||||||
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_3": {
|
|
||||||
"inputs": {
|
|
||||||
"systems": "systems_3"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1710146030,
|
|
||||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_4": {
|
|
||||||
"inputs": {
|
|
||||||
"systems": [
|
|
||||||
"stylix",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731533236,
|
|
||||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fromYaml": {
|
"fromYaml": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
|
@ -225,16 +209,16 @@
|
||||||
"gnome-shell": {
|
"gnome-shell": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732369855,
|
"lastModified": 1748186689,
|
||||||
"narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
|
"narHash": "sha256-UaD7Y9f8iuLBMGHXeJlRu6U1Ggw5B9JnkFs3enZlap0=",
|
||||||
"owner": "GNOME",
|
"owner": "GNOME",
|
||||||
"repo": "gnome-shell",
|
"repo": "gnome-shell",
|
||||||
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
|
"rev": "8c88f917db0f1f0d80fa55206c863d3746fa18d0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "GNOME",
|
"owner": "GNOME",
|
||||||
"ref": "47.2",
|
"ref": "48.2",
|
||||||
"repo": "gnome-shell",
|
"repo": "gnome-shell",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
@ -246,11 +230,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1735774425,
|
"lastModified": 1758810399,
|
||||||
"narHash": "sha256-C73gLFnEh8ZI0uDijUgCDWCd21T6I6tsaWgIBHcfAXg=",
|
"narHash": "sha256-bpWoE1tiFX5T1tr5EudkpW9Kk02XR+6olkoSkf3nHZU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "5f6aa268e419d053c3d5025da740e390b12ac936",
|
"rev": "39d26c16866260eee6d0487fe9c102ba1c1bf7b2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -262,16 +246,16 @@
|
||||||
"home-manager_2": {
|
"home-manager_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"stylix",
|
"zen-browser",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1733085484,
|
"lastModified": 1752603129,
|
||||||
"narHash": "sha256-dVmNuUajnU18oHzBQWZm1BQtANCHaqNuxTHZQ+GN0r8=",
|
"narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "c1fee8d4a60b89cae12b288ba9dbc608ff298163",
|
"rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -280,20 +264,48 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"impermanence": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1737831083,
|
||||||
|
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mnw": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1756659871,
|
||||||
|
"narHash": "sha256-v6Rh4aQ6RKjM2N02kK9Usn0Ix7+OY66vNpeklc1MnGE=",
|
||||||
|
"owner": "Gerg-L",
|
||||||
|
"repo": "mnw",
|
||||||
|
"rev": "ed6cc3e48557ba18266e598a5ebb6602499ada16",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Gerg-L",
|
||||||
|
"repo": "mnw",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nix-alien": {
|
"nix-alien": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"nix-filter": "nix-filter",
|
|
||||||
"nix-index-database": "nix-index-database",
|
"nix-index-database": "nix-index-database",
|
||||||
"nixpkgs": "nixpkgs_2"
|
"nixpkgs": "nixpkgs"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734239219,
|
"lastModified": 1757920634,
|
||||||
"narHash": "sha256-iKY/OGNANXpd9hXBGfx8vObpHW4IcOH0MrerLCCc7hA=",
|
"narHash": "sha256-MNxTc+dncIHFGKQRyAqI/Clttp3JICaSUKlMUQ6l9jc=",
|
||||||
"owner": "thiagokokada",
|
"owner": "thiagokokada",
|
||||||
"repo": "nix-alien",
|
"repo": "nix-alien",
|
||||||
"rev": "a266d0f74dd4a82ec6a72b02fbf3fbc5f7105f15",
|
"rev": "f8a51ef800bc8b7420998415035f9c086eb64d5c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -302,21 +314,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix-filter": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731533336,
|
|
||||||
"narHash": "sha256-oRam5PS1vcrr5UPgALW0eo1m/5/pls27Z/pabHNy2Ms=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "nix-filter",
|
|
||||||
"rev": "f7653272fd234696ae94229839a99b73c9ab7de0",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "nix-filter",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix-index-database": {
|
"nix-index-database": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -325,11 +322,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734234111,
|
"lastModified": 1757822619,
|
||||||
"narHash": "sha256-icEMqBt4HtGH52PU5FHidgBrNJvOfXH6VQKNtnD1aw8=",
|
"narHash": "sha256-3HIpe3P2h1AUPYcAH9cjuX0tZOqJpX01c0iDwoUYNZ8=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "311d6cf3ad3f56cb051ffab1f480b2909b3f754d",
|
"rev": "050a5feb5d1bb5b6e5fc04a7d3d816923a87c9ea",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -341,15 +338,15 @@
|
||||||
"nix-minecraft": {
|
"nix-minecraft": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat_2",
|
"flake-compat": "flake-compat_2",
|
||||||
"flake-utils": "flake-utils_2",
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": "nixpkgs_3"
|
"nixpkgs": "nixpkgs_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1720748198,
|
"lastModified": 1750164803,
|
||||||
"narHash": "sha256-2AxCoCoBnFJcZjp9Se7W7JgQ88rwMLUwi5EAcsj5B9I=",
|
"narHash": "sha256-aLDTGNh84IcJTT9m380uW3wHogKbHcTcK9uUunALdNU=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "a1ab2a1353a38a6642fbc69f118adc08faf7dbcb",
|
"rev": "efaa1a2497ce1988d9b3bc7bb395abdf8177e0a3",
|
||||||
"revCount": 628,
|
"revCount": 925,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://codeberg.org/nix-astral/nix-minecraft.git"
|
"url": "https://codeberg.org/nix-astral/nix-minecraft.git"
|
||||||
},
|
},
|
||||||
|
|
@ -360,11 +357,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1728492678,
|
"lastModified": 1757745802,
|
||||||
"narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=",
|
"narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7",
|
"rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -376,15 +373,15 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1733940404,
|
"lastModified": 1748929857,
|
||||||
"narHash": "sha256-Pj39hSoUA86ZePPF/UXiYHHM7hMIkios8TYG29kQT4g=",
|
"narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=",
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "5d67ea6b4b63378b9c13be21e2ec9d1afc921713",
|
"rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
|
|
@ -392,11 +389,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1715266358,
|
"lastModified": 1760773850,
|
||||||
"narHash": "sha256-doPgfj+7FFe9rfzWo1siAV2mVCasW+Bh8I1cToAXEE4=",
|
"narHash": "sha256-skbm70mjURx9k0iGIN1aUm09b0n3QbFw2gCpG0A5mEI=",
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f1010e0469db743d14519a1efd37e23f8513d714",
|
"rev": "df05dcceaf4d6a5f2caeda75da00de370d8c14e6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -408,79 +405,121 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1735471104,
|
"lastModified": 1756819007,
|
||||||
"narHash": "sha256-0q9NGQySwDQc7RhAV2ukfnu7Gxa5/ybJ2ANT8DQrQrs=",
|
"narHash": "sha256-12V64nKG/O/guxSYnr5/nq1EfqwJCdD2+cIGmhz3nrE=",
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4",
|
"rev": "aaff8c16d7fc04991cac6245bee1baa31f72b1e1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nur": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": [
|
||||||
|
"stylix",
|
||||||
|
"flake-parts"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"stylix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1622516815,
|
"lastModified": 1756961635,
|
||||||
"narHash": "sha256-ZjBd81a6J3TwtlBr3rHsZspYUwT9OdhDk+a/SgSEf7I=",
|
"narHash": "sha256-hETvQcILTg5kChjYNns1fD5ELdsYB/VVgVmBtqKQj9A=",
|
||||||
"owner": "NixOS",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs",
|
"repo": "NUR",
|
||||||
"rev": "7e9b0dff974c89e070da1ad85713ff3c20b0ca97",
|
"rev": "6ca27b2654ac55e3f6e0ca434c1b4589ae22b370",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "nix-community",
|
||||||
"ref": "21.05",
|
"repo": "NUR",
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_6": {
|
"nvf": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat_3",
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"mnw": "mnw",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": "systems_2"
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732238832,
|
"lastModified": 1758271661,
|
||||||
"narHash": "sha256-sQxuJm8rHY20xq6Ah+GwIUkF95tWjGRd1X8xF+Pkk38=",
|
"narHash": "sha256-ENqd2/33uP5vB44ClDjjAV+J78oF8q1er4QUZuT8Z7g=",
|
||||||
"owner": "NixOS",
|
"owner": "NotAShelf",
|
||||||
"repo": "nixpkgs",
|
"repo": "nvf",
|
||||||
"rev": "8edf06bea5bcbee082df1b7369ff973b91618b8d",
|
"rev": "b7571df4d6e9ac08506a738ddceeec0b141751b0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NotAShelf",
|
||||||
"ref": "nixpkgs-unstable",
|
"repo": "nvf",
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"actual": "actual",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
|
"impermanence": "impermanence",
|
||||||
"nix-alien": "nix-alien",
|
"nix-alien": "nix-alien",
|
||||||
"nix-minecraft": "nix-minecraft",
|
"nix-minecraft": "nix-minecraft",
|
||||||
"nixpkgs": "nixpkgs_4",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"shabitica": "shabitica",
|
"nvf": "nvf",
|
||||||
"stylix": "stylix"
|
"sops-nix": "sops-nix",
|
||||||
|
"stylix": "stylix",
|
||||||
|
"valheim-server": "valheim-server",
|
||||||
|
"zen-browser": "zen-browser"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"shabitica": {
|
"sops-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils_3",
|
"nixpkgs": [
|
||||||
"nixpkgs": "nixpkgs_5"
|
"nixpkgs"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1724518687,
|
"lastModified": 1758425756,
|
||||||
"narHash": "sha256-rPKeUG3aKLHF/9t5zAQPvy/QKm/eBXFKP6X+Cr9E7Go=",
|
"narHash": "sha256-L3N8zV6wsViXiD8i3WFyrvjDdz76g3tXKEdZ4FkgQ+Y=",
|
||||||
"owner": "lomenzel",
|
"owner": "Mic92",
|
||||||
"repo": "shabitica",
|
"repo": "sops-nix",
|
||||||
"rev": "6013624a276b326530ebf8c616fc89e2f23fd3af",
|
"rev": "e0fdaea3c31646e252a60b42d0ed8eafdb289762",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "lomenzel",
|
"owner": "Mic92",
|
||||||
"repo": "shabitica",
|
"repo": "sops-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"steam-fetcher": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"valheim-server",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1714795926,
|
||||||
|
"narHash": "sha256-PkgC9jqoN6cJ8XYzTA2PlrWs7aPJkM3BGiTxNqax0cA=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "steam-fetcher",
|
||||||
|
"rev": "12f66eafb7862d91b3e30c14035f96a21941bd9c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "steam-fetcher",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -490,22 +529,24 @@
|
||||||
"base16-fish": "base16-fish",
|
"base16-fish": "base16-fish",
|
||||||
"base16-helix": "base16-helix",
|
"base16-helix": "base16-helix",
|
||||||
"base16-vim": "base16-vim",
|
"base16-vim": "base16-vim",
|
||||||
"flake-compat": "flake-compat_3",
|
"firefox-gnome-theme": "firefox-gnome-theme",
|
||||||
"flake-utils": "flake-utils_4",
|
"flake-parts": "flake-parts_2",
|
||||||
"gnome-shell": "gnome-shell",
|
"gnome-shell": "gnome-shell",
|
||||||
"home-manager": "home-manager_2",
|
"nixpkgs": "nixpkgs_4",
|
||||||
"nixpkgs": "nixpkgs_6",
|
"nur": "nur",
|
||||||
"systems": "systems_4",
|
"systems": "systems_3",
|
||||||
"tinted-foot": "tinted-foot",
|
"tinted-foot": "tinted-foot",
|
||||||
"tinted-kitty": "tinted-kitty",
|
"tinted-kitty": "tinted-kitty",
|
||||||
"tinted-tmux": "tinted-tmux"
|
"tinted-schemes": "tinted-schemes",
|
||||||
|
"tinted-tmux": "tinted-tmux",
|
||||||
|
"tinted-zed": "tinted-zed"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1735764504,
|
"lastModified": 1758757969,
|
||||||
"narHash": "sha256-shMdOkQzR9jIK3TW6XaesOea1rHwxWIFFOhIRhuCF4Y=",
|
"narHash": "sha256-2zC4aHoDsR12Jyd6WvSxmQbAKT4V93frnHHDjA8o3r8=",
|
||||||
"owner": "danth",
|
"owner": "danth",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"rev": "911c07f40f816fd2d12a7dd750ca8bc421db9dd2",
|
"rev": "484819a16fdc1c76cdd62d8e94018db44e5e1a8b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -559,21 +600,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems_4": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681028828,
|
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tinted-foot": {
|
"tinted-foot": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
|
@ -594,28 +620,43 @@
|
||||||
"tinted-kitty": {
|
"tinted-kitty": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1716423189,
|
"lastModified": 1735730497,
|
||||||
"narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
|
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "tinted-kitty",
|
"repo": "tinted-kitty",
|
||||||
"rev": "eb39e141db14baef052893285df9f266df041ff8",
|
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "tinted-kitty",
|
"repo": "tinted-kitty",
|
||||||
"rev": "eb39e141db14baef052893285df9f266df041ff8",
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tinted-schemes": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1754779259,
|
||||||
|
"narHash": "sha256-8KG2lXGaXLUE0F/JVwLQe7kOVm21IDfNEo0gfga5P4M=",
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "schemes",
|
||||||
|
"rev": "097d751b9e3c8b97ce158e7d141e5a292545b502",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "schemes",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tinted-tmux": {
|
"tinted-tmux": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729501581,
|
"lastModified": 1754788770,
|
||||||
"narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=",
|
"narHash": "sha256-LAu5nBr7pM/jD9jwFc6/kyFY4h7Us4bZz7dvVvehuwo=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "tinted-tmux",
|
"repo": "tinted-tmux",
|
||||||
"rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14",
|
"rev": "fb2175accef8935f6955503ec9dd3c973eec385c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -623,6 +664,64 @@
|
||||||
"repo": "tinted-tmux",
|
"repo": "tinted-tmux",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"tinted-zed": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1755613540,
|
||||||
|
"narHash": "sha256-zBFrrTxHLDMDX/OYxkCwGGbAhPXLi8FrnLhYLsSOKeY=",
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "base16-zed",
|
||||||
|
"rev": "937bada16cd3200bdbd3a2f5776fc3b686d5cba0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "base16-zed",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"valheim-server": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"steam-fetcher": "steam-fetcher"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1744964760,
|
||||||
|
"narHash": "sha256-VSy6SZqDDMqrFlf6gw3xA/u3WEu3thjGOh3akIJEWW4=",
|
||||||
|
"owner": "kmjayadeep",
|
||||||
|
"repo": "valheim-server-flake",
|
||||||
|
"rev": "5b95198dca8af8287108b610432d88aef5fa29fc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kmjayadeep",
|
||||||
|
"repo": "valheim-server-flake",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"zen-browser": {
|
||||||
|
"inputs": {
|
||||||
|
"home-manager": "home-manager_2",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1760843785,
|
||||||
|
"narHash": "sha256-lp6xctqGBNKZ3pmRlALX1puVG7EKQa4xAq+2leThDKw=",
|
||||||
|
"owner": "0xc000022070",
|
||||||
|
"repo": "zen-browser-flake",
|
||||||
|
"rev": "a36f9da8a234b59dd5fc4484e37dadae2aa75b80",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "0xc000022070",
|
||||||
|
"repo": "zen-browser-flake",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|
|
||||||
178
flake.nix
178
flake.nix
|
|
@ -5,98 +5,108 @@
|
||||||
home-manager.url = "github:nix-community/home-manager";
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
impermanence.url = "github:nix-community/impermanence";
|
||||||
|
|
||||||
stylix.url = "github:danth/stylix";
|
stylix.url = "github:danth/stylix";
|
||||||
# nix-minecraft.url = "git+ssh://git@codeberg.org/nix-astral/nix-minecraft.git";
|
|
||||||
nix-minecraft.url = "git+https://codeberg.org/nix-astral/nix-minecraft.git";
|
|
||||||
shabitica.url = "github:lomenzel/shabitica";
|
|
||||||
actual.url = "git+https://git.xeno.science/xenofem/actual-nix.git";
|
|
||||||
nix-alien.url = "github:thiagokokada/nix-alien";
|
nix-alien.url = "github:thiagokokada/nix-alien";
|
||||||
|
|
||||||
|
nvf = {
|
||||||
|
url = "github:NotAShelf/nvf";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
zen-browser = {
|
||||||
|
url = "github:0xc000022070/zen-browser-flake";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix-minecraft.url = "git+https://codeberg.org/nix-astral/nix-minecraft.git";
|
||||||
|
# nix-minecraft.url = "github:Infinidoge/nix-minecraft";
|
||||||
|
valheim-server.url = "github:kmjayadeep/valheim-server-flake";
|
||||||
|
valheim-server.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = inputs@{ nixpkgs, home-manager, stylix, ... }:
|
outputs = inputs @ {
|
||||||
let
|
nixpkgs,
|
||||||
system = "x86_64-linux";
|
home-manager,
|
||||||
|
stylix,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
|
||||||
pkgs' = (import inputs.nixpkgs { inherit system; }).applyPatches {
|
pkgs = import inputs.nixpkgs {inherit system;};
|
||||||
name = "nixpkgs-unstable-patched";
|
|
||||||
src = inputs.nixpkgs;
|
sources = import ./_sources/generated.nix {
|
||||||
patches = [
|
inherit (pkgs) fetchurl fetchgit fetchFromGitHub dockerTools;
|
||||||
(builtins.fetchurl {
|
};
|
||||||
url =
|
|
||||||
"https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/369042.patch";
|
utils = import ./utils.nix {inherit inputs system sources;};
|
||||||
sha256 =
|
in {
|
||||||
"sha256:08asxmd34rzaxb8dr4nccy26k3vxnx7psy2imnp40fdplqna0a85";
|
nixosConfigurations = {
|
||||||
})
|
# desktop
|
||||||
(builtins.fetchurl {
|
muon = utils.mkHost ./hosts/muon/configuration.nix;
|
||||||
url =
|
|
||||||
"https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/368790.patch";
|
# laptop
|
||||||
sha256 =
|
muop = utils.mkHost ./hosts/muop/configuration.nix;
|
||||||
"sha256:1blsawm4l30wkrdkvvq0fw2aki7v921isdwrk9dw8yh09cglbfd9";
|
|
||||||
})
|
# vps
|
||||||
(builtins.fetchurl {
|
muho = utils.mkHost ./hosts/muho/configuration.nix;
|
||||||
url =
|
|
||||||
"https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/368091.patch";
|
# vps
|
||||||
sha256 =
|
mups = utils.mkHost ./hosts/mups/configuration.nix;
|
||||||
"sha256:11qnwrq8sgbmxiy9qvv7q2lbl824x90p2iklf3kjf9yb3c2dx9nj";
|
|
||||||
})
|
# vm
|
||||||
|
muvm = utils.mkHost ./hosts/muvm/configuration.nix;
|
||||||
|
|
||||||
|
# work
|
||||||
|
murk = utils.mkHost ./hosts/murk/configuration.nix;
|
||||||
|
|
||||||
|
# installer
|
||||||
|
muin = utils.mkHost ./hosts/muin/configuration.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
homeManagerModules.default = ./modules/home;
|
||||||
|
|
||||||
|
colmena = {
|
||||||
|
meta = {
|
||||||
|
nixpkgs = import inputs.nixpkgs {inherit system;};
|
||||||
|
|
||||||
|
specialArgs = {inherit nixpkgs inputs system sources;};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Remote host name
|
||||||
|
"mups" = {
|
||||||
|
name,
|
||||||
|
nodes,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
deployment.targetHost = "muon.host"; # SSH IP
|
||||||
|
deployment.targetUser = "root"; # SSH username
|
||||||
|
|
||||||
|
# modules
|
||||||
|
imports = [
|
||||||
|
./hosts/mups/configuration.nix
|
||||||
|
./modules/nixos
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
inputs.stylix.nixosModules.stylix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
pkgs = import pkgs' { inherit system; };
|
|
||||||
|
|
||||||
utils = import ./utils.nix { inherit builtins inputs system pkgs; };
|
# "muho" = { name, nodes, ... }: {
|
||||||
in {
|
# deployment.targetHost = "muho"; # SSH IP
|
||||||
nixosConfigurations = {
|
# deployment.targetUser = "muon"; # SSH username
|
||||||
# desktop
|
|
||||||
muon = utils.mkHost ./hosts/muon/configuration.nix;
|
|
||||||
|
|
||||||
# laptop
|
# # modules
|
||||||
muop = utils.mkHost ./hosts/muop/configuration.nix;
|
# imports = [
|
||||||
|
# ./hosts/muho/configuration.nix
|
||||||
# vps
|
# ./modules/nixos
|
||||||
muho = utils.mkHost ./hosts/muho/configuration.nix;
|
# inputs.home-manager.nixosModules.default
|
||||||
|
# inputs.stylix.nixosModules.stylix
|
||||||
# vps
|
# ];
|
||||||
mups = utils.mkHost ./hosts/mups/configuration.nix;
|
# };
|
||||||
|
|
||||||
# vm
|
|
||||||
muvm = utils.mkHost ./hosts/muvm/configuration.nix;
|
|
||||||
};
|
|
||||||
|
|
||||||
homeManagerModules.default = ./modules/home;
|
|
||||||
|
|
||||||
colmena = {
|
|
||||||
meta = {
|
|
||||||
nixpkgs = import inputs.nixpkgs { inherit system; };
|
|
||||||
|
|
||||||
specialArgs = { inherit nixpkgs inputs system; };
|
|
||||||
};
|
|
||||||
|
|
||||||
# Remote host name
|
|
||||||
"mups" = { name, nodes, ... }: {
|
|
||||||
deployment.targetHost = "muon.host"; # SSH IP
|
|
||||||
deployment.targetUser = "root"; # SSH username
|
|
||||||
|
|
||||||
# modules
|
|
||||||
imports = [
|
|
||||||
./hosts/mups/configuration.nix
|
|
||||||
./modules/nixos
|
|
||||||
inputs.home-manager.nixosModules.default
|
|
||||||
inputs.stylix.nixosModules.stylix
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# "muho" = { name, nodes, ... }: {
|
|
||||||
# deployment.targetHost = "muho"; # SSH IP
|
|
||||||
# deployment.targetUser = "muon"; # SSH username
|
|
||||||
|
|
||||||
# # modules
|
|
||||||
# imports = [
|
|
||||||
# ./hosts/muho/configuration.nix
|
|
||||||
# ./modules/nixos
|
|
||||||
# inputs.home-manager.nixosModules.default
|
|
||||||
# inputs.stylix.nixosModules.stylix
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
{ config, lib, pkgs, inputs, system, ... }:
|
{ config, lib, pkgs, inputs, system, ... }:
|
||||||
let cfg = config.mods;
|
let
|
||||||
|
cfg = config.mods;
|
||||||
|
keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKEio+Y5wBVD1wILaH2R3wV10FvVjiqy/4gGBWHOITTB muon@muon"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKevYmkH7xvYoquBjnYZ7PJiVqf+GOh9fxAJBN6wZGBB gin4@hi.is"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILmAOd9VbhyJeibt6Vrb101MNTk5W8+rh94Djv/C+pyu muon@muho"
|
||||||
|
];
|
||||||
in {
|
in {
|
||||||
# Hardware
|
# Hardware
|
||||||
imports = [ ./hardware-configuration.nix ../ports.nix ];
|
imports = [ ./hardware-configuration.nix ../ports.nix ];
|
||||||
|
|
@ -29,16 +35,37 @@ in {
|
||||||
mods.server.reddit.enable = true;
|
mods.server.reddit.enable = true;
|
||||||
|
|
||||||
mods.server.grav.enable = true;
|
mods.server.grav.enable = true;
|
||||||
|
mods.server.homebox.enable = true;
|
||||||
|
mods.server.share.enable = false;
|
||||||
|
mods.server.vault.enable = true;
|
||||||
|
mods.server.git.enable = true;
|
||||||
|
mods.server.cal.enable = true;
|
||||||
|
mods.server.chat.enable = false;
|
||||||
|
mods.server.ntfy.enable = true;
|
||||||
|
mods.server.lemmy.enable = true;
|
||||||
|
mods.server.audio.enable = true;
|
||||||
|
mods.server.atuin.enable = true;
|
||||||
|
|
||||||
|
mods.server.dash.enable = false;
|
||||||
|
mods.server.nginx.ports.dash = 3009;
|
||||||
|
|
||||||
mods.tailscale.enable = true;
|
mods.tailscale.enable = true;
|
||||||
mods.wireguard.id = 3;
|
mods.wireguard.id = 3;
|
||||||
|
|
||||||
services.xserver.windowManager.i3.enable = false;
|
services.xserver.windowManager.i3.enable = false;
|
||||||
|
|
||||||
|
users.users.muon.openssh.authorizedKeys.keys = keys;
|
||||||
|
users.users.root.openssh.authorizedKeys.keys = keys;
|
||||||
|
|
||||||
# Proprietary </3
|
# Proprietary </3
|
||||||
mods.unfree.steam.enable = false;
|
mods.unfree.steam.enable = false;
|
||||||
mods.unfree.nvidia.enable = false;
|
mods.unfree.nvidia.enable = false;
|
||||||
mods.unfree.minecraft.enable = false;
|
mods.unfree.minecraft.enable = true;
|
||||||
|
|
||||||
|
mods.unfree.valheim.enable = false;
|
||||||
|
mods.server.vrising.enable = false;
|
||||||
|
# mods.server.statech.enable = true;
|
||||||
|
# mods.server.astral.enable = true;
|
||||||
|
|
||||||
# Hardware preferences
|
# Hardware preferences
|
||||||
|
|
||||||
|
|
@ -103,5 +130,5 @@ in {
|
||||||
# hardware.nvidia.powerManagement.enable = false;
|
# hardware.nvidia.powerManagement.enable = false;
|
||||||
|
|
||||||
# Version of first install
|
# Version of first install
|
||||||
system.stateVersion = "23.05";
|
system.stateVersion = "23.11";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,12 @@
|
||||||
options = [ "subvol=base" "compress=zstd" "noatime" ];
|
options = [ "subvol=base" "compress=zstd" "noatime" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fileSystems."/srv" = {
|
||||||
|
device = "/dev/disk/by-uuid/9067ce83-2520-4543-8b7f-38949e1b8b8b";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [ "subvol=base" "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
|
||||||
fileSystems."/storage1" = {
|
fileSystems."/storage1" = {
|
||||||
device = "storage1";
|
device = "storage1";
|
||||||
fsType = "zfs";
|
fsType = "zfs";
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
{ pkgs, lib, osConfig, ... }:
|
{ pkgs, lib, osConfig, sources, ... }:
|
||||||
let cfg = osConfig.mods;
|
let cfg = osConfig.mods;
|
||||||
in {
|
in {
|
||||||
# Modules
|
# Modules
|
||||||
mods.xdg.enable = true;
|
mods.xdg.enable = true;
|
||||||
mods.social.enable = true;
|
mods.social.enable = false;
|
||||||
mods.i3.enable = false;
|
mods.i3.enable = false;
|
||||||
mods.terminal.zsh.enable = true;
|
mods.terminal.zsh.enable = true;
|
||||||
mods.terminal.emulator.enable = false;
|
mods.terminal.emulator.enable = false;
|
||||||
|
|
|
||||||
49
hosts/muin/configuration.nix
Normal file
49
hosts/muin/configuration.nix
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# Hardware
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
(inputs.nixpkgs
|
||||||
|
+ "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
# Install
|
||||||
|
environment.etc.sops-key = {
|
||||||
|
source = "/home/muon/.config/sops-nix/secrets/sops-key";
|
||||||
|
target = "sops-nix/key.txt";
|
||||||
|
};
|
||||||
|
sops.age.keyFile = lib.mkForce "/etc/sops-nix/key.txt";
|
||||||
|
|
||||||
|
# System
|
||||||
|
mods.user.name = "muon";
|
||||||
|
networking.hostName = "murk";
|
||||||
|
networking.hostId = "a2309090";
|
||||||
|
mods.home.file = ./home.nix;
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
mods.desktop.enable = true;
|
||||||
|
mods.boot.enable = false;
|
||||||
|
|
||||||
|
mods.theme.enable = true;
|
||||||
|
mods.theme.scheme = "woodland";
|
||||||
|
mods.theme.wallpaper = ./wallpaper.png;
|
||||||
|
|
||||||
|
services.xserver.windowManager.i3.enable = true;
|
||||||
|
|
||||||
|
# Hardware preferences
|
||||||
|
environment.variables = {
|
||||||
|
WINIT_HIDPI_FACTOR = "1";
|
||||||
|
WINIT_X11_SCALE_FACTOR = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
## Mouse
|
||||||
|
services.libinput.mouse.accelProfile = "flat";
|
||||||
|
|
||||||
|
# Version of first install
|
||||||
|
system.stateVersion = "23.05";
|
||||||
|
}
|
||||||
72
hosts/muin/disk-config.nix
Normal file
72
hosts/muin/disk-config.nix
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
type = "disk";
|
||||||
|
device = "/dev/sda";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
size = "512M";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
luks = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "luks";
|
||||||
|
name = "crypted";
|
||||||
|
# disable settings.keyFile if you want to use interactive password entry
|
||||||
|
#passwordFile = "/tmp/secret.key"; # Interactive
|
||||||
|
# settings = {
|
||||||
|
# allowDiscards = true;
|
||||||
|
# keyFile = "/tmp/secret.key";
|
||||||
|
# };
|
||||||
|
# additionalKeyFiles = [ "/tmp/additionalSecret.key" ];
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
extraArgs = [ "-f" ];
|
||||||
|
subvolumes = {
|
||||||
|
"/root" = {
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/home" = {
|
||||||
|
mountpoint = "/home";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/nix" = {
|
||||||
|
mountpoint = "/nix";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/persist" = {
|
||||||
|
mountpoint = "/persist";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/log" = {
|
||||||
|
mountpoint = "/var/log";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/swap" = {
|
||||||
|
mountpoint = "/swap";
|
||||||
|
swap.swapfile.size = "4G";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/persist".neededForBoot = true;
|
||||||
|
fileSystems."/var/log".neededForBoot = true;
|
||||||
|
}
|
||||||
32
hosts/muin/hardware-configuration.nix
Normal file
32
hosts/muin/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
|
||||||
|
boot.supportedFilesystems = ["btrfs"];
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
networking.useDHCP = lib.mkForce true;
|
||||||
|
|
||||||
|
# imports = [
|
||||||
|
# (modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
# virtualisation.vmVariant = {
|
||||||
|
# # following configuration is added only when building VM with build-vm
|
||||||
|
# virtualisation = {
|
||||||
|
# memorySize = 4096; # Use 2048MiB memory.
|
||||||
|
# cores = 3;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
}
|
||||||
148
hosts/muin/home.nix
Normal file
148
hosts/muin/home.nix
Normal file
|
|
@ -0,0 +1,148 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = osConfig.mods;
|
||||||
|
installScript = pkgs.writeShellApplication {
|
||||||
|
name = "install-flake";
|
||||||
|
text = ''
|
||||||
|
msg() {
|
||||||
|
printf "\033[01;32minstall-flake: \033[0m%s\n" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg "Cloning config..."
|
||||||
|
if [[ ! "$PWD" == "$HOME" ]]; then
|
||||||
|
cd
|
||||||
|
fi
|
||||||
|
if [[ ! -d "home" ]]; then
|
||||||
|
git clone https://codeberg.org/muon/home
|
||||||
|
else
|
||||||
|
msg "Already cloned!"
|
||||||
|
fi
|
||||||
|
cd home
|
||||||
|
nvim hosts/"$(hostname)"/disk-config.nix
|
||||||
|
|
||||||
|
msg "Running disko..."
|
||||||
|
if ! mount | grep "on /mnt" ; then
|
||||||
|
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount hosts/"$(hostname)"/disk-config.nix
|
||||||
|
else
|
||||||
|
msg "Already mounted!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Making blank root snapshot..."
|
||||||
|
sudo mkdir -p /tmp/mnt
|
||||||
|
sudo mount /dev/mapper/crypted /tmp/mnt
|
||||||
|
if [[ ! -e /tmp/mnt/root-blank ]]; then
|
||||||
|
sudo btrfs subvolume snapshot -r /tmp/mnt/root /tmp/mnt/root-blank
|
||||||
|
else
|
||||||
|
msg "Already snapshotted!"
|
||||||
|
fi
|
||||||
|
sudo umount /tmp/mnt
|
||||||
|
|
||||||
|
msg "Retrieving sops key..."
|
||||||
|
sudo mkdir -p /mnt/persist/var/lib/sops-nix
|
||||||
|
if [[ ! -e /mnt/persist/var/lib/sops-nix/key.txt ]]; then
|
||||||
|
rbw config set email admin@muon.host
|
||||||
|
rbw config set base_url https://vault.muon.host
|
||||||
|
rbw login
|
||||||
|
rbw get sops | sudo tee /mnt/persist/var/lib/sops-nix/key.txt
|
||||||
|
# sudo cp /etc/sops-nix/key.txt /mnt/persist/var/lib/sops-nix/key.txt
|
||||||
|
sudo chown muon:users /mnt/persist/var/lib/sops-nix -R
|
||||||
|
else
|
||||||
|
msg "Already retrieved!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Setting hardware config..."
|
||||||
|
sudo nixos-generate-config --no-filesystems --root /mnt
|
||||||
|
cp /mnt/etc/nixos/hardware-configuration.nix hosts/"$(hostname)"/hardware-configuration.nix
|
||||||
|
|
||||||
|
msg "Installing NixOS config..."
|
||||||
|
sudo nixos-install --root /mnt --no-root-passwd --flake .#"$(hostname)"
|
||||||
|
|
||||||
|
msg "Edit persistent filesystem..."
|
||||||
|
PERSIST="$HOME/persist.sh"
|
||||||
|
if [[ ! -e $PERSIST ]]; then
|
||||||
|
sudo cp "$HOME/persist.txt" "$PERSIST"
|
||||||
|
sudo chmod +w "$PERSIST"
|
||||||
|
fi
|
||||||
|
nvim "$PERSIST"
|
||||||
|
|
||||||
|
msg "Copying persistent filesystem..."
|
||||||
|
make_persist() {
|
||||||
|
F="$1"
|
||||||
|
P="/mnt/persist''${1#/mnt}"
|
||||||
|
echo "$P"
|
||||||
|
if [[ -e "$F" ]]; then
|
||||||
|
sudo mkdir -p "$(dirname "$P")"
|
||||||
|
else
|
||||||
|
msg "Error: $F does not exist!"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [[ -d "$F" ]]; then
|
||||||
|
if [[ -n "$( ls -A "$F")" ]]; then
|
||||||
|
sudo cp -r "$F/"* "$P"
|
||||||
|
fi
|
||||||
|
elif [[ -f "$F" ]]; then
|
||||||
|
sudo cp "$F" "$P"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
grep -v '^#' "$PERSIST" | while read -r file ; do
|
||||||
|
make_persist "$file"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
# Install
|
||||||
|
# sops.age.keyFile = lib.mkForce "/etc/sops-nix/key.txt";
|
||||||
|
programs.atuin.enable = lib.mkForce false;
|
||||||
|
home.file.persist = {
|
||||||
|
target = "persist.txt";
|
||||||
|
text = ''
|
||||||
|
/mnt/var/lib/nixos
|
||||||
|
/mnt/var/lib/systemd/coredump
|
||||||
|
/mnt/etc/machine-id
|
||||||
|
/etc/NetworkManager
|
||||||
|
/var/lib/NetworkManager
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
home.packages = with pkgs;
|
||||||
|
[
|
||||||
|
installScript
|
||||||
|
]
|
||||||
|
# Modules
|
||||||
|
++ [
|
||||||
|
pulseaudio
|
||||||
|
pavucontrol
|
||||||
|
alsa-utils
|
||||||
|
];
|
||||||
|
|
||||||
|
mods.xdg.enable = true;
|
||||||
|
mods.i3.enable = true;
|
||||||
|
mods.battery.enable = true;
|
||||||
|
mods.terminal.zsh.enable = true;
|
||||||
|
mods.terminal.emulator.enable = true;
|
||||||
|
mods.terminal.development.enable = true;
|
||||||
|
mods.terminal.tools.enable = true;
|
||||||
|
mods.desktop.development.enable = true;
|
||||||
|
mods.desktop.productivity.enable = false;
|
||||||
|
|
||||||
|
# Hardware preferences
|
||||||
|
## Monitors
|
||||||
|
services.autorandr.enable = true;
|
||||||
|
programs.autorandr = {
|
||||||
|
enable = true;
|
||||||
|
hooks.postswitch = {
|
||||||
|
"notify-i3" = "${pkgs.i3}/bin/i3-msg restart";
|
||||||
|
"set-wallpaper" = ''
|
||||||
|
${lib.getExe pkgs.feh} --bg-fill --nofehbg ${./wallpaper.png}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Version of first install
|
||||||
|
home.stateVersion = "23.05";
|
||||||
|
}
|
||||||
BIN
hosts/muin/wallpaper.png
Normal file
BIN
hosts/muin/wallpaper.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 283 KiB |
|
|
@ -1,37 +1,55 @@
|
||||||
{ config, lib, pkgs, inputs, system, ... }:
|
{
|
||||||
let cfg = config.mods;
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
sources,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mods;
|
||||||
in {
|
in {
|
||||||
# Hardware
|
# Hardware
|
||||||
imports = [
|
imports = [./hardware-configuration.nix ./openrgb.nix];
|
||||||
./hardware-configuration.nix
|
|
||||||
inputs.shabitica.nixosModules."x86_64-linux".default
|
|
||||||
inputs.actual.nixosModules.default
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.systemPackages = with inputs.nix-alien.packages.${system};
|
environment.systemPackages = with inputs.nix-alien.packages.${system};
|
||||||
[ nix-alien ];
|
with pkgs; [
|
||||||
|
nix-alien
|
||||||
|
r2modman
|
||||||
|
lutris
|
||||||
|
godot
|
||||||
|
rustdesk-flutter
|
||||||
|
motion
|
||||||
|
qmk
|
||||||
|
gnumeric
|
||||||
|
opensnitch
|
||||||
|
opensnitch-ui
|
||||||
|
];
|
||||||
|
|
||||||
# System
|
# System
|
||||||
mods.user.name = "muon";
|
mods.user.name = "muon";
|
||||||
networking.hostName = cfg.user.name;
|
networking.hostName = cfg.user.name;
|
||||||
|
networking.hostId = "a230906f";
|
||||||
mods.home.file = ./home.nix;
|
mods.home.file = ./home.nix;
|
||||||
|
nix.settings.trusted-users = ["root" "muon"];
|
||||||
|
|
||||||
# Modules
|
# Modules
|
||||||
mods.desktop.enable = true;
|
mods.desktop.enable = true;
|
||||||
mods.desktop.wayland.enable = false;
|
mods.desktop.wayland.enable = false;
|
||||||
mods.desktop.gaming.enable = true;
|
mods.desktop.gaming.enable = true;
|
||||||
mods.boot.enable = true;
|
mods.boot.enable = true;
|
||||||
|
mods.clamav.enable = true;
|
||||||
|
|
||||||
mods.theme.enable = true;
|
mods.theme.enable = true;
|
||||||
mods.theme.scheme = "woodland";
|
mods.theme.scheme = "woodland";
|
||||||
mods.theme.wallpaper = ./wallpaper.png;
|
mods.theme.wallpaper = ./wallpaper.png;
|
||||||
|
|
||||||
mods.containers.steam.enable = false;
|
mods.containers.steam.enable = false;
|
||||||
mods.server.media.enable = true;
|
mods.server.astral.enable = false;
|
||||||
mods.server.astral.enable = true;
|
|
||||||
mods.server.astral.autoStart = false;
|
mods.server.astral.autoStart = false;
|
||||||
|
mods.server.nvr.enable = false;
|
||||||
|
|
||||||
|
mods.docker.enable = true;
|
||||||
mods.docker.media.enable = false;
|
mods.docker.media.enable = false;
|
||||||
|
|
||||||
mods.server.sync.enable = true;
|
mods.server.sync.enable = true;
|
||||||
|
|
@ -43,6 +61,12 @@ in {
|
||||||
services.xserver.windowManager.i3.enable = true;
|
services.xserver.windowManager.i3.enable = true;
|
||||||
services.actual.enable = true;
|
services.actual.enable = true;
|
||||||
|
|
||||||
|
virtualisation.virtualbox.host.enable = true;
|
||||||
|
users.extraGroups.vboxusers.members = ["user-with-access-to-virtualbox"];
|
||||||
|
|
||||||
|
services.picom.enable = true;
|
||||||
|
services.picom.opacityRules = ["50:name *= '^Cheat$'"];
|
||||||
|
|
||||||
# Proprietary </3
|
# Proprietary </3
|
||||||
mods.unfree.steam.enable = true;
|
mods.unfree.steam.enable = true;
|
||||||
mods.unfree.nvidia.enable = true;
|
mods.unfree.nvidia.enable = true;
|
||||||
|
|
@ -53,6 +77,9 @@ in {
|
||||||
## Mouse
|
## Mouse
|
||||||
services.libinput.mouse.accelProfile = "flat";
|
services.libinput.mouse.accelProfile = "flat";
|
||||||
|
|
||||||
|
## Keyboard
|
||||||
|
hardware.keyboard.qmk.enable = true;
|
||||||
|
|
||||||
## Monitors
|
## Monitors
|
||||||
mods.monitors = {
|
mods.monitors = {
|
||||||
primary = {
|
primary = {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules =
|
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
||||||
[ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.kernelModules = ["kvm-intel"];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
virtualisation.libvirtd.enable = true;
|
||||||
boot.extraModulePackages = [ ];
|
boot.supportedFilesystems = ["zfs" "ntfs" "btrfs"];
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/disk/by-uuid/03e49688-cc62-49c9-a906-e2ea87a38891";
|
device = "/dev/disk/by-uuid/03e49688-cc62-49c9-a906-e2ea87a38891";
|
||||||
|
|
@ -18,10 +22,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.initrd.luks.devices = {
|
boot.initrd.luks.devices = {
|
||||||
"luks-root".device =
|
"luks-root".device = "/dev/disk/by-uuid/86769693-b61c-4712-852d-e0fba612d260";
|
||||||
"/dev/disk/by-uuid/86769693-b61c-4712-852d-e0fba612d260";
|
"luks-swap".device = "/dev/disk/by-uuid/0418acfc-792c-43f4-a887-cc8bb51fa7c3";
|
||||||
"luks-swap".device =
|
|
||||||
"/dev/disk/by-uuid/0418acfc-792c-43f4-a887-cc8bb51fa7c3";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/mnt/bulk" = {
|
fileSystems."/mnt/bulk" = {
|
||||||
|
|
@ -32,11 +34,11 @@
|
||||||
fileSystems."/boot" = {
|
fileSystems."/boot" = {
|
||||||
device = "/dev/disk/by-uuid/CCCC-449E";
|
device = "/dev/disk/by-uuid/CCCC-449E";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
options = [ "fmask=0022" "dmask=0022" ];
|
options = ["fmask=0022" "dmask=0022"];
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [
|
swapDevices = [
|
||||||
{ device = "/dev/disk/by-uuid/e7cf209d-386d-41db-8a35-6c9fff014722"; }
|
{device = "/dev/disk/by-uuid/e7cf209d-386d-41db-8a35-6c9fff014722";}
|
||||||
{
|
{
|
||||||
device = "/var/lib/swapfile";
|
device = "/var/lib/swapfile";
|
||||||
size = 8 * 1024;
|
size = 8 * 1024;
|
||||||
|
|
@ -50,7 +52,7 @@
|
||||||
networking.useDHCP = lib.mkDefault true;
|
networking.useDHCP = lib.mkDefault true;
|
||||||
# networking.interfaces.docker0.useDHCP = lib.mkDefault true;
|
# networking.interfaces.docker0.useDHCP = lib.mkDefault true;
|
||||||
networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
|
networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
|
||||||
# networking.interfaces.enp0s31f6.mtu = 1200;
|
networking.interfaces.enp0s31f6.mtu = 1280;
|
||||||
# networking.interfaces.tun0.useDHCP = lib.mkDefault true;
|
# networking.interfaces.tun0.useDHCP = lib.mkDefault true;
|
||||||
# networking.interfaces.vboxnet0.useDHCP = lib.mkDefault true;
|
# networking.interfaces.vboxnet0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
|
|
||||||
29
hosts/muon/openrgb.nix
Normal file
29
hosts/muon/openrgb.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
no-rgb = pkgs.writeScriptBin "no-rgb" ''
|
||||||
|
#!/bin/sh
|
||||||
|
NUM_DEVICES=$(${pkgs.openrgb}/bin/openrgb --noautoconnect --list-devices | grep -E '^[0-9]+: ' | wc -l)
|
||||||
|
|
||||||
|
for i in $(seq 0 $(($NUM_DEVICES - 1))); do
|
||||||
|
${pkgs.openrgb}/bin/openrgb --noautoconnect --device $i --mode static --color 000000
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
config = {
|
||||||
|
services.udev.packages = [pkgs.openrgb];
|
||||||
|
boot.kernelModules = ["i2c-dev"];
|
||||||
|
hardware.i2c.enable = true;
|
||||||
|
|
||||||
|
systemd.services.no-rgb = {
|
||||||
|
description = "no-rgb";
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${no-rgb}/bin/no-rgb";
|
||||||
|
Type = "oneshot";
|
||||||
|
};
|
||||||
|
wantedBy = ["multi-user.target"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -29,9 +29,9 @@ in {
|
||||||
mods.server.astral.enable = false;
|
mods.server.astral.enable = false;
|
||||||
mods.server.astral.memory = "3G";
|
mods.server.astral.memory = "3G";
|
||||||
|
|
||||||
mods.server.sync.enable = true;
|
# mods.server.sync.enable = false;
|
||||||
mods.server.sync.address = "100.85.27.29";
|
# mods.server.sync.address = "100.85.27.29";
|
||||||
mods.server.sync.port = "8385";
|
# mods.server.sync.port = "8385";
|
||||||
|
|
||||||
mods.server.headscale.enable = false;
|
mods.server.headscale.enable = false;
|
||||||
mods.server.wireguard.enable = true;
|
mods.server.wireguard.enable = true;
|
||||||
|
|
@ -55,6 +55,11 @@ in {
|
||||||
default = true;
|
default = true;
|
||||||
locations."/" = { proxyPass = "http://localhost:8008"; };
|
locations."/" = { proxyPass = "http://localhost:8008"; };
|
||||||
};
|
};
|
||||||
|
"nvr.muon.host" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
locations."/" = { proxyPass = "http://10.0.0.2:8095"; };
|
||||||
|
};
|
||||||
"tetterodesportcomplex.nl" = {
|
"tetterodesportcomplex.nl" = {
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
{ config, lib, pkgs, modulesPath, ... }: let
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
let
|
||||||
ip = "93.95.230.11";
|
ip = "93.95.230.11";
|
||||||
gateway = "93.95.230.1";
|
gateway = "93.95.230.1";
|
||||||
hostname = "vpsorvhm2v";
|
hostname = "vpsorvhm2v";
|
||||||
|
|
@ -6,33 +7,38 @@
|
||||||
dns1 = "93.95.224.29";
|
dns1 = "93.95.224.29";
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports =
|
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||||
[ (modulesPath + "/profiles/qemu-guest.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk" ];
|
boot.initrd.availableKernelModules =
|
||||||
|
[ "ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk" ];
|
||||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [ ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{ device = "/dev/disk/by-uuid/031e2049-33ed-4d21-a208-8da3fc250260";
|
device = "/dev/disk/by-uuid/031e2049-33ed-4d21-a208-8da3fc250260";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [{
|
# swapDevices = [{
|
||||||
device = "/dev/disk/by-uuid/bc6acd1f-98bb-4f94-b52c-40aa7312e838";
|
# device = "/dev/disk/by-uuid/bc6acd1f-98bb-4f94-b52c-40aa7312e838";
|
||||||
} {
|
# } {
|
||||||
device = "/var/lib/swapfile";
|
# device = "/var/lib/swapfile";
|
||||||
size = 2*1024;
|
# size = 2*1024;
|
||||||
}];
|
# }];
|
||||||
|
|
||||||
networking.useDHCP = lib.mkForce false;
|
networking.useDHCP = lib.mkForce false;
|
||||||
networking.domain = "";
|
networking.domain = "";
|
||||||
|
|
||||||
networking.interfaces.ens3.ipv4.addresses = [{ address = ip; prefixLength = 24; }];
|
networking.interfaces.ens3.ipv4.addresses = [{
|
||||||
networking.defaultGateway = { address = gateway; interface = "ens3"; };
|
address = ip;
|
||||||
networking.nameservers = [ dns0 dns1 ];
|
prefixLength = 24;
|
||||||
|
}];
|
||||||
|
networking.defaultGateway = {
|
||||||
|
address = gateway;
|
||||||
|
interface = "ens3";
|
||||||
|
};
|
||||||
|
networking.nameservers = [ dns0 dns1 ];
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
142
hosts/murk/configuration.nix
Normal file
142
hosts/murk/configuration.nix
Normal file
|
|
@ -0,0 +1,142 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
sources,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mods;
|
||||||
|
keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKEio+Y5wBVD1wILaH2R3wV10FvVjiqy/4gGBWHOITTB muon@muon"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKevYmkH7xvYoquBjnYZ7PJiVqf+GOh9fxAJBN6wZGBB gin4@hi.is"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILmAOd9VbhyJeibt6Vrb101MNTk5W8+rh94Djv/C+pyu muon@muho"
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
# Hardware
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
"${
|
||||||
|
builtins.fetchTarball {
|
||||||
|
url = "https://github.com/nix-community/disko/archive/refs/tags/v1.12.0.tar.gz";
|
||||||
|
sha256 = "0wbx518d2x54yn4xh98cgm65wvj0gpy6nia6ra7ns4j63hx14fkq";
|
||||||
|
}
|
||||||
|
}/module.nix"
|
||||||
|
./disk-config.nix
|
||||||
|
# (inputs.nixpkgs
|
||||||
|
# + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = with inputs.nix-alien.packages.${system}; [
|
||||||
|
nix-alien
|
||||||
|
pkgs.libratbag
|
||||||
|
pkgs.piper
|
||||||
|
pkgs.libpq
|
||||||
|
pkgs.qmk
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.wireguard-tools
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.binfmt = {
|
||||||
|
emulatedSystems = ["aarch64-linux"];
|
||||||
|
preferStaticEmulators = true; # Make it work with Docker
|
||||||
|
};
|
||||||
|
|
||||||
|
# System
|
||||||
|
mods.user.name = "muon";
|
||||||
|
networking.hostName = "murk";
|
||||||
|
networking.hostId = "a2309090";
|
||||||
|
mods.home.file = ./home.nix;
|
||||||
|
nix.settings.trusted-users = ["root" "muon"];
|
||||||
|
users.users.muon.extraGroups = ["docker"];
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
mods.desktop.enable = true;
|
||||||
|
mods.boot.enable = true;
|
||||||
|
|
||||||
|
mods.theme.enable = true;
|
||||||
|
mods.theme.scheme = "woodland";
|
||||||
|
mods.theme.wallpaper = ./wallpaper.png;
|
||||||
|
|
||||||
|
services.xserver.windowManager.i3.enable = true;
|
||||||
|
# mods.desktop.wayland.enable = true;
|
||||||
|
|
||||||
|
mods.impermanence.enable = true;
|
||||||
|
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
users.users.muon.openssh.authorizedKeys.keys = keys;
|
||||||
|
users.users.root.openssh.authorizedKeys.keys = keys;
|
||||||
|
|
||||||
|
# Persist
|
||||||
|
environment.persistence."/persist" = {
|
||||||
|
directories = ["/etc/NetworkManager" "/var/lib/NetworkManager"];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Hardware preferences
|
||||||
|
environment.variables = {
|
||||||
|
WINIT_HIDPI_FACTOR = "1";
|
||||||
|
WINIT_X11_SCALE_FACTOR = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
## Laptop
|
||||||
|
powerManagement.enable = true;
|
||||||
|
services.thermald.enable = true;
|
||||||
|
services.tlp.enable = true;
|
||||||
|
# services.xserver.dpi = lib.mkForce 180;
|
||||||
|
# environment.variables = {
|
||||||
|
# GDK_SCALE = "2";
|
||||||
|
# GDK_DPI_SCALE = "0.5";
|
||||||
|
# _JAVA_OPTIONS = "-Dsun.java2d.uiScale=2";
|
||||||
|
# };
|
||||||
|
|
||||||
|
## Monitors
|
||||||
|
mods.monitors = {
|
||||||
|
primary = {
|
||||||
|
name = "eDP-1";
|
||||||
|
config = {
|
||||||
|
enable = true;
|
||||||
|
mode = "2560x1600";
|
||||||
|
position = "1264x1440";
|
||||||
|
primary = true;
|
||||||
|
rate = "60.00";
|
||||||
|
dpi = 96;
|
||||||
|
scale = {
|
||||||
|
x = 0.5;
|
||||||
|
y = 0.5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
left = {
|
||||||
|
name = "DP-3-2";
|
||||||
|
config = {
|
||||||
|
enable = true;
|
||||||
|
mode = "2560x1440";
|
||||||
|
position = "0x0";
|
||||||
|
rate = "60.00";
|
||||||
|
dpi = 72;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
right = {
|
||||||
|
name = "DP-3-1";
|
||||||
|
config = {
|
||||||
|
enable = true;
|
||||||
|
mode = "2560x1440";
|
||||||
|
position = "2560x0";
|
||||||
|
rate = "60.00";
|
||||||
|
dpi = 72;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
## Mouse
|
||||||
|
services.libinput.mouse.accelProfile = "flat";
|
||||||
|
|
||||||
|
## Keyboard
|
||||||
|
hardware.keyboard.qmk.enable = true;
|
||||||
|
|
||||||
|
# Version of first install
|
||||||
|
system.stateVersion = "23.05";
|
||||||
|
}
|
||||||
72
hosts/murk/disk-config.nix
Normal file
72
hosts/murk/disk-config.nix
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
type = "disk";
|
||||||
|
device = "/dev/sda";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
size = "512M";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
luks = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "luks";
|
||||||
|
name = "crypted";
|
||||||
|
# disable settings.keyFile if you want to use interactive password entry
|
||||||
|
#passwordFile = "/tmp/secret.key"; # Interactive
|
||||||
|
# settings = {
|
||||||
|
# allowDiscards = true;
|
||||||
|
# keyFile = "/tmp/secret.key";
|
||||||
|
# };
|
||||||
|
# additionalKeyFiles = [ "/tmp/additionalSecret.key" ];
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
extraArgs = [ "-f" ];
|
||||||
|
subvolumes = {
|
||||||
|
"/root" = {
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/home" = {
|
||||||
|
mountpoint = "/home";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/nix" = {
|
||||||
|
mountpoint = "/nix";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/persist" = {
|
||||||
|
mountpoint = "/persist";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/log" = {
|
||||||
|
mountpoint = "/var/log";
|
||||||
|
mountOptions = [ "compress=zstd" "noatime" ];
|
||||||
|
};
|
||||||
|
"/swap" = {
|
||||||
|
mountpoint = "/swap";
|
||||||
|
swap.swapfile.size = "4G";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/persist".neededForBoot = true;
|
||||||
|
fileSystems."/var/log".neededForBoot = true;
|
||||||
|
}
|
||||||
18
hosts/murk/hardware-configuration.nix
Normal file
18
hosts/murk/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usbhid" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
90
hosts/murk/home.nix
Normal file
90
hosts/murk/home.nix
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = osConfig.mods;
|
||||||
|
in {
|
||||||
|
imports = [inputs.impermanence.homeManagerModules.impermanence];
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
mods.xdg.enable = true;
|
||||||
|
mods.i3.enable = true;
|
||||||
|
# mods.hyprland.enable = true;
|
||||||
|
mods.battery.enable = true;
|
||||||
|
mods.terminal.zsh.enable = true;
|
||||||
|
mods.terminal.emulator.enable = true;
|
||||||
|
mods.terminal.development.enable = true;
|
||||||
|
mods.terminal.tools.enable = true;
|
||||||
|
mods.desktop.development.enable = true;
|
||||||
|
mods.desktop.productivity.enable = false;
|
||||||
|
|
||||||
|
home.packages = with pkgs;
|
||||||
|
[
|
||||||
|
thunderbird
|
||||||
|
pulseaudio
|
||||||
|
pavucontrol
|
||||||
|
alsa-utils
|
||||||
|
rustdesk-flutter
|
||||||
|
|
||||||
|
# tools
|
||||||
|
docker
|
||||||
|
fish
|
||||||
|
devenv
|
||||||
|
dbeaver-bin
|
||||||
|
ruff
|
||||||
|
just
|
||||||
|
go
|
||||||
|
rainfrog
|
||||||
|
tealdeer
|
||||||
|
gh
|
||||||
|
(callPackage ./packages/mender-cli.nix {})
|
||||||
|
]
|
||||||
|
# Non-free </3
|
||||||
|
++ [google-cloud-sdk google-cloud-sql-proxy];
|
||||||
|
|
||||||
|
# Hardware preferences
|
||||||
|
## Monitors
|
||||||
|
xsession.windowManager.i3.config.workspaceOutputAssign = [
|
||||||
|
{
|
||||||
|
workspace = "1";
|
||||||
|
output = "${cfg.monitors.left.name}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
workspace = "2";
|
||||||
|
output = "${cfg.monitors.right.name}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
workspace = "4";
|
||||||
|
output = "${cfg.monitors.primary.name}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
services.autorandr.enable = true;
|
||||||
|
programs.autorandr = {
|
||||||
|
enable = true;
|
||||||
|
hooks.postswitch = {
|
||||||
|
"notify-i3" = "${pkgs.i3}/bin/i3-msg restart";
|
||||||
|
"set-wallpaper" = ''
|
||||||
|
${lib.getExe pkgs.feh} --bg-fill --nofehbg ${./wallpaper.png}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
profiles.default = {
|
||||||
|
fingerprint = {
|
||||||
|
"${cfg.monitors.right.name}" = "00ffffffffffff0030aef465010101011e1e0103803c22782a31d5a65453a0240a5054bfcf00d1c0d100b300a9c09500818081c08100e973006aa0a034504220680055502100001a565e00a0a0a029503020350055502100001a000000fd00304b0f6e1e000a202020202020000000fc00513237712d31300a202020202001ff020329f04b10050403021f1413121101230907078301000067030c001000183c681a00000101304b00023a801871382d40582c450055502100001e662156aa51001e30468f330055502100001eab22a0a050841a303020360055502100001a7c2e90a0601a1e403020360055502100001a000000000000000000000000000026";
|
||||||
|
"${cfg.monitors.left.name}" = "00ffffffffffff0005e30427b11a0000321f0104a53c22783be445a554529e260d5054bfef00d1c0b30095008180814081c001010101565e00a0a0a029503020350055502100001e000000ff005141424d434841303036383333000000fc00513237563447350a2020202020000000fd00304b72721e010a2020202020200163020318f14b0103051404131f120211902309070783010000a073006aa0a029500820350055502100001a2a4480a0703827403020350055502100001a023a801871382d40582c450055502100001ef03c00d051a0355060883a0055502100001c000000000000000000000000000000000000000000000000000000000000005f";
|
||||||
|
"${cfg.monitors.primary.name}" = "00ffffffffffff0026cfab050000000000200104b51f147803de50a3544c99260f505400000001010101010101010101010101010101b29f00a0a04089631830760a38c310000019b29f00a0a040466018303c0038c310000019000000fd00285a969629010a202020202020000000fe004d3134354e574b31205230200a00ad";
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
"${cfg.monitors.primary.name}" = cfg.monitors.primary.config;
|
||||||
|
"${cfg.monitors.left.name}" = cfg.monitors.left.config;
|
||||||
|
"${cfg.monitors.right.name}" = cfg.monitors.right.config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Version of first install
|
||||||
|
home.stateVersion = "23.05";
|
||||||
|
}
|
||||||
54
hosts/murk/packages/mender-cli.nix
Normal file
54
hosts/murk/packages/mender-cli.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
buildGoModule,
|
||||||
|
fetchFromGitHub,
|
||||||
|
makeWrapper,
|
||||||
|
installShellFiles,
|
||||||
|
xz,
|
||||||
|
go,
|
||||||
|
}:
|
||||||
|
buildGoModule rec {
|
||||||
|
pname = "mender-cli";
|
||||||
|
version = "1.12.0";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "mendersoftware";
|
||||||
|
repo = "mender-cli";
|
||||||
|
rev = version;
|
||||||
|
sha256 = "sha256-Pf87wTHXcFlnYsgx7ieiIJ9PWJFPUkFJYTkKJKmMFEQ=";
|
||||||
|
};
|
||||||
|
|
||||||
|
vendorHash = "sha256-MqyBa+wsbuXqtM4DL/QGBUWuEYlG8BRxIXq7O1LJUyM=";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
installShellFiles
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
xz
|
||||||
|
];
|
||||||
|
|
||||||
|
allowGoReference = true;
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
wrapProgram "$out/bin/mender-cli" \
|
||||||
|
--prefix PATH : ${go}/bin
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
|
||||||
|
installShellCompletion --cmd mender-cli \
|
||||||
|
--bash <($out/bin/mender-cli completion bash) \
|
||||||
|
--fish <($out/bin/mender-cli completion fish) \
|
||||||
|
--zsh <($out/bin/mender-cli completion zsh) \
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Mender CLI tool to simplify integration between the Mender server and cloud services like continuous integration (CI)/build automation";
|
||||||
|
mainProgram = "mender-cli";
|
||||||
|
homepage = "https://github.com/mendersoftware/mender-cli/";
|
||||||
|
changelog = "https://github.com/mendersoftware/mender-cli/releases/tag/${version}";
|
||||||
|
license = lib.licenses.asl20;
|
||||||
|
};
|
||||||
|
}
|
||||||
BIN
hosts/murk/wallpaper.png
Normal file
BIN
hosts/murk/wallpaper.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 MiB |
|
|
@ -1,9 +1,38 @@
|
||||||
{ pkgs, lib, config, ... }: {
|
{ pkgs, lib, config, ... }: {
|
||||||
mods.server.nginx.ports = {
|
options.mods.server = with lib; {
|
||||||
photos = 3001;
|
local.ports = mkOption {
|
||||||
|
type = types.attrsOf (types.ints.u16);
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
mods.server.nginx.ports = {
|
||||||
|
photos = 3001;
|
||||||
|
homebox = 3002;
|
||||||
|
# immich-machine-learning = 3003;
|
||||||
|
share = 3004;
|
||||||
|
vault = 3005;
|
||||||
|
git = 3006;
|
||||||
|
cal = 3007;
|
||||||
|
chat = 3008;
|
||||||
|
# dash = 3009;
|
||||||
|
ntfy = 3010;
|
||||||
|
audio = 3011;
|
||||||
|
atuin = 3012;
|
||||||
|
|
||||||
search = 8081;
|
search = 8081;
|
||||||
videos = 8082;
|
videos = 8082;
|
||||||
reddit = 8083;
|
reddit = 8083;
|
||||||
|
};
|
||||||
|
mods.server.local.ports = {
|
||||||
|
# grav = 5001
|
||||||
|
lemmy-api = 5002;
|
||||||
|
lemmy-ui = 5003;
|
||||||
|
pict-rs = 5004;
|
||||||
|
readarr = 5005;
|
||||||
|
prowlarr = 5006;
|
||||||
|
flaresolverr = 5007;
|
||||||
|
torrent = 5008;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,19 @@
|
||||||
{ pkgs, lib, config, osConfig, ... }:
|
{
|
||||||
let cfg = osConfig.mods;
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = osConfig.mods;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./terminal
|
./terminal
|
||||||
./desktop
|
./desktop
|
||||||
|
./sops
|
||||||
|
|
||||||
./xdg.nix
|
./xdg.nix
|
||||||
|
./impermanence.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Let Home Manager install and manage itself
|
# Let Home Manager install and manage itself
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,59 @@
|
||||||
{ pkgs, lib, config, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
options.mods.desktop.development.enable =
|
options.mods.desktop.development.enable =
|
||||||
lib.mkEnableOption "enables gui development tools";
|
lib.mkEnableOption "enables gui development tools";
|
||||||
|
|
||||||
config = lib.mkIf config.mods.desktop.development.enable {
|
config = lib.mkIf config.mods.desktop.development.enable {
|
||||||
# home.packages = with pkgs; [];
|
# home.packages = with pkgs; [ i3-swallow ];
|
||||||
|
|
||||||
|
programs.nyxt = {
|
||||||
|
enable = false;
|
||||||
|
config = ''
|
||||||
|
(in-package #:nyxt-user)
|
||||||
|
|
||||||
|
(defvar *my-search-engines*
|
||||||
|
(list
|
||||||
|
(make-instance 'search-engine
|
||||||
|
:name "Searx"
|
||||||
|
:shortcut "s"
|
||||||
|
#+nyxt-4 :control-url #+nyxt-3 :search-url
|
||||||
|
""https://search.muon.host/?q=~a";")
|
||||||
|
|
||||||
|
(make-instance 'search-engine
|
||||||
|
:name "nixpkgs"
|
||||||
|
:shortcut "np"
|
||||||
|
#+nyxt-4 :control-url #+nyxt-3 :search-url
|
||||||
|
"https://search.nixos.org/packages?channel=unstable&query=~a")))
|
||||||
|
|
||||||
|
(make-instance 'search-engine
|
||||||
|
:name "nix options"
|
||||||
|
:shortcut "np"
|
||||||
|
#+nyxt-4 :control-url #+nyxt-3 :search-url
|
||||||
|
"https://search.nixos.org/options?channel=unstable&query=~a")))
|
||||||
|
|
||||||
|
(make-instance 'search-engine
|
||||||
|
:name "home-manager"
|
||||||
|
:shortcut "hm"
|
||||||
|
#+nyxt-4 :control-url #+nyxt-3 :search-url
|
||||||
|
"https://home-manager-options.extranix.com/?release=master&query=~a")))
|
||||||
|
|
||||||
|
|
||||||
|
(define-configuration browser
|
||||||
|
((restore-session-on-startup-p nil)
|
||||||
|
(default-new-buffer-url (quri:uri "https://online.bonjourr.fr/"))
|
||||||
|
(external-editor-program ("alacritty -e hx")
|
||||||
|
#+nyxt-4
|
||||||
|
(search-engine-suggestions-p nil)
|
||||||
|
#+nyxt-4
|
||||||
|
(search-engines (append %slot-default% *my-search-engines*))
|
||||||
|
))
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
programs.qutebrowser = {
|
programs.qutebrowser = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
|
@ -13,14 +63,14 @@
|
||||||
default_page = "https://online.bonjourr.fr/";
|
default_page = "https://online.bonjourr.fr/";
|
||||||
start_pages = "https://online.bonjourr.fr/";
|
start_pages = "https://online.bonjourr.fr/";
|
||||||
};
|
};
|
||||||
|
editor.command = ["alacritty" "-e" "hx" "{file}:{line}:{column}"];
|
||||||
};
|
};
|
||||||
|
|
||||||
searchEngines = {
|
searchEngines = {
|
||||||
DEFAULT = "https://search.muon.host/?q={}";
|
DEFAULT = "https://search.muon.host/?q={}";
|
||||||
np = "https://search.nixos.org/packages?channel=unstable&query={}";
|
np = "https://search.nixos.org/packages?channel=unstable&query={}";
|
||||||
no = "https://search.nixos.org/options?channel=unstable&query={}";
|
no = "https://search.nixos.org/options?channel=unstable&query={}";
|
||||||
hm =
|
hm = "https://home-manager-options.extranix.com/?release=master&query={}";
|
||||||
"https://home-manager-options.extranix.com/?release=master&query={}";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,10 @@
|
||||||
{ pkgs, lib, config, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
options.mods.hyprland.enable = lib.mkEnableOption {
|
options.mods.hyprland.enable = lib.mkEnableOption {
|
||||||
description = "enables hyprland";
|
description = "enables hyprland";
|
||||||
default = false;
|
default = false;
|
||||||
|
|
@ -22,32 +28,44 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
"$mod" = "SUPER";
|
"$mod" = "SUPER";
|
||||||
bind = [
|
bind =
|
||||||
"$mod, Return, exec, alacritty"
|
[
|
||||||
"$mod, D, exec, fuzzel"
|
"$mod, Return, exec, alacritty"
|
||||||
"$mod, F, exec, qutebrowser"
|
"$mod, D, exec, fuzzel"
|
||||||
|
"$mod, B, exec, qutebrowser"
|
||||||
|
|
||||||
"$mod SHIFT, Q, killactive,"
|
"$mod SHIFT, Q, killactive,"
|
||||||
"$mod SHIFT, X, exit,"
|
"$mod SHIFT, X, exit,"
|
||||||
|
|
||||||
"$mod, H, movefocus, l"
|
"$mod, H, movefocus, l"
|
||||||
"$mod, J, movefocus, d"
|
"$mod, J, movefocus, d"
|
||||||
"$mod, K, movefocus, u"
|
"$mod, K, movefocus, u"
|
||||||
"$mod, L, movefocus, r"
|
"$mod, L, movefocus, r"
|
||||||
]
|
|
||||||
++ (builtins.concatLists (builtins.genList (
|
"$mod SHIFT, H, movewindow, l"
|
||||||
# workspaces
|
"$mod SHIFT, J, movewindow, d"
|
||||||
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
|
"$mod SHIFT, K, movewindow, u"
|
||||||
x: let
|
"$mod SHIFT, L, movewindow, r"
|
||||||
ws = let
|
|
||||||
c = (x + 1) / 10;
|
|
||||||
in
|
|
||||||
builtins.toString (x + 1 - (c * 10));
|
|
||||||
in [
|
|
||||||
"$mod, ${ws}, workspace, ${toString (x + 1)}"
|
|
||||||
"$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
|
|
||||||
]
|
]
|
||||||
) 10) );
|
++ (builtins.concatLists (builtins.genList (
|
||||||
|
# workspaces
|
||||||
|
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
|
||||||
|
x: let
|
||||||
|
ws = let
|
||||||
|
c = (x + 1) / 10;
|
||||||
|
in
|
||||||
|
builtins.toString (x + 1 - (c * 10));
|
||||||
|
in [
|
||||||
|
"$mod, ${ws}, workspace, ${toString (x + 1)}"
|
||||||
|
"$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
10));
|
||||||
|
|
||||||
|
monitor =
|
||||||
|
lib.mapAttrsToList
|
||||||
|
(_: v: "${v.name},${v.config.mode}@${v.config.rate},${v.config.position},1")
|
||||||
|
osConfig.mods.monitors;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,109 +1,182 @@
|
||||||
{ pkgs, lib, config, osConfig, ... }: {
|
{
|
||||||
options.mods.i3.enable = lib.mkEnableOption "enables i3";
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
fsss = with pkgs;
|
||||||
|
writeShellApplication {
|
||||||
|
name = "fsss";
|
||||||
|
runtimeInputs = [flameshot curl xsel];
|
||||||
|
text = ''
|
||||||
|
flameshot gui -r -s > /tmp/ss.png;if [ ! -s /tmp/ss.png ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
AUTH=$(cat ${config.sops.secrets.zipline-auth.path})
|
||||||
|
curl -H "authorization: $AUTH" https://share.muon.host/api/upload -F file=@/tmp/ss.png -H "Content-Type: multipart/form-data" -H "Format: date" -H "Image-Compression-Percent: 90" -H "No-JSON: true" | tr -d '\n' | xsel -ib;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
zmenu = with pkgs;
|
||||||
|
writeShellApplication {
|
||||||
|
name = "zmenu";
|
||||||
|
runtimeInputs = [zellij zoxide wmctrl i3 rofi alacritty zsh];
|
||||||
|
text = ''
|
||||||
|
ZPATH=$(zoxide query -l | sed -e "s|$HOME/||g" | rofi -dmenu)
|
||||||
|
[[ -z "$ZPATH" ]] && exit
|
||||||
|
ZSESH=$(echo "$ZPATH" | tr / -)
|
||||||
|
ZWIND=$(wmctrl -l | grep "$ZSESH" || echo "")
|
||||||
|
cd "$ZPATH"
|
||||||
|
if [[ -z "$ZWIND" ]]; then
|
||||||
|
alacritty -T "$ZSESH" -e zsh -c "zellij -s $ZSESH -n dev || zellij a $ZSESH"
|
||||||
|
else
|
||||||
|
wmctrl -a "$ZSESH"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
with lib; {
|
||||||
|
options.mods.i3.enable = mkEnableOption "enables i3";
|
||||||
|
options.mods.battery.enable = mkEnableOption "enables battery";
|
||||||
|
|
||||||
config = lib.mkIf config.mods.i3.enable {
|
config = mkIf config.mods.i3.enable {
|
||||||
services.unclutter.enable = true;
|
services.unclutter.enable = true;
|
||||||
programs.rofi.enable = true;
|
programs.rofi.enable = true;
|
||||||
|
|
||||||
programs.i3status-rust = {
|
programs.i3status-rust = {
|
||||||
enable = true;
|
enable = true;
|
||||||
bars.default = {
|
bars.default = lib.mkMerge [
|
||||||
settings.theme.overrides = with config.lib.stylix.colors.withHashtag; {
|
|
||||||
idle_bg = base00;
|
|
||||||
idle_fg = base05;
|
|
||||||
separator = "";
|
|
||||||
};
|
|
||||||
icons = "awesome5";
|
|
||||||
blocks = [
|
|
||||||
{
|
{
|
||||||
block = "sound";
|
blocks = lib.mkBefore [
|
||||||
format = " $icon $volume ";
|
{
|
||||||
click = [{
|
block = "privacy";
|
||||||
button = "left";
|
driver = [{name = "v4l";} {name = "pipewire";}];
|
||||||
cmd = "pavucontrol";
|
}
|
||||||
}];
|
# {
|
||||||
|
# block = "net";
|
||||||
|
# format = " $icon ";
|
||||||
|
# inactive_format = " $icon ";
|
||||||
|
# }
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
(lib.mkIf config.mods.battery.enable {
|
||||||
|
blocks = [
|
||||||
|
{
|
||||||
|
block = "battery";
|
||||||
|
format = " $icon $percentage ";
|
||||||
|
# format_alt =
|
||||||
|
# " $icon $percentage {$time_remaining.dur(hms:true, min_unit:m) |}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
})
|
||||||
{
|
{
|
||||||
block = "time";
|
settings.theme.overrides = lib.mkMerge [
|
||||||
format = "$icon $timestamp.datetime(f:'%Y-%m-%d %a %H:%M:%S') ";
|
{separator = "";}
|
||||||
interval = 1;
|
config.lib.stylix.i3status-rust.bar
|
||||||
|
];
|
||||||
|
icons = "awesome5";
|
||||||
|
blocks = lib.mkAfter [
|
||||||
|
{
|
||||||
|
block = "sound";
|
||||||
|
format = " $icon {$volume |} ";
|
||||||
|
click = [
|
||||||
|
{
|
||||||
|
button = "left";
|
||||||
|
cmd = "${lib.getExe pkgs.pavucontrol}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
block = "time";
|
||||||
|
format = "$icon $timestamp.datetime(f:'%Y-%m-%d %a %H:%M:%S') ";
|
||||||
|
# format_alt = "$icon $timestamp.datetime(f:'%Y-%m-%d %H:%M') ";
|
||||||
|
interval = 1;
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
xsession.windowManager.i3 = let
|
xsession.windowManager.i3 = let
|
||||||
modifier = "Mod4";
|
modifier = "Mod4";
|
||||||
wsAmount = 10;
|
wsAmount = 10;
|
||||||
genSpaces = f: map builtins.toString (builtins.genList f wsAmount);
|
genSpaces = f: map builtins.toString (builtins.genList f wsAmount);
|
||||||
workspaces = genSpaces (x: x + 1);
|
workspaces = genSpaces (x: x + 1);
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
modifier = modifier;
|
||||||
|
terminal = "alacritty";
|
||||||
|
menu = "rofi -show drun";
|
||||||
|
|
||||||
in {
|
window = {
|
||||||
enable = true;
|
titlebar = false;
|
||||||
config = {
|
hideEdgeBorders = "smart";
|
||||||
modifier = modifier;
|
};
|
||||||
terminal = "alacritty";
|
|
||||||
menu = "rofi -show drun";
|
|
||||||
|
|
||||||
window = {
|
floating.criteria = [
|
||||||
titlebar = false;
|
{title = "^Cheat$";}
|
||||||
hideEdgeBorders = "smart";
|
];
|
||||||
|
|
||||||
|
defaultWorkspace = "workspace number 1";
|
||||||
|
workspaceAutoBackAndForth = true;
|
||||||
|
focus.wrapping = "yes";
|
||||||
|
|
||||||
|
# startup = [ ] ++ lib.optionals config.mods.social.enable [{
|
||||||
|
# command = "exec vesktop";
|
||||||
|
# }];
|
||||||
|
|
||||||
|
assigns = {
|
||||||
|
"2" = [{class = "Vesktop";}];
|
||||||
|
"3" = [{class = "^Steam$";}];
|
||||||
|
};
|
||||||
|
|
||||||
|
keybindings = let
|
||||||
|
# modKeyComb: string -> valueAction: string
|
||||||
|
# -> keys: [string] -> values: [string]
|
||||||
|
# -> keybindings: attrSet { string -> string }
|
||||||
|
zipBinds = comb: action: keys: values: (builtins.listToAttrs (zipListsWith (k: v: {
|
||||||
|
name = "${modifier}${comb}${k}";
|
||||||
|
value = "${action} ${v}";
|
||||||
|
})
|
||||||
|
keys
|
||||||
|
values));
|
||||||
|
|
||||||
|
moveKeys = ["h" "j" "k" "l"];
|
||||||
|
moveDirs = ["left" "down" "up" "right"];
|
||||||
|
|
||||||
|
workspKeys = genSpaces (x: mod (x + 1) wsAmount);
|
||||||
|
in
|
||||||
|
mkOptionDefault ((zipBinds "+" "focus" moveKeys moveDirs)
|
||||||
|
// (zipBinds "+Shift+" "move" moveKeys moveDirs)
|
||||||
|
// (zipBinds "+" "workspace number" workspKeys workspaces)
|
||||||
|
// (zipBinds "+Shift+" "move container to workspace number" workspKeys
|
||||||
|
workspaces)
|
||||||
|
// {
|
||||||
|
"XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume 0 +2%";
|
||||||
|
"XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume 0 -2%";
|
||||||
|
"Print" = "exec ${getExe fsss}";
|
||||||
|
"${modifier}+z" = "exec ${getExe zmenu}";
|
||||||
|
"${modifier}+y" = "sticky toggle";
|
||||||
|
"${modifier}+g" = "floating toggle";
|
||||||
|
});
|
||||||
|
|
||||||
|
bars = let
|
||||||
|
status_conf = "${config.xdg.configHome}/i3status-rust/config-default.toml";
|
||||||
|
stylix_bar =
|
||||||
|
{
|
||||||
|
mode = "dock";
|
||||||
|
hiddenState = "hide";
|
||||||
|
position = "bottom";
|
||||||
|
statusCommand = "${getExe pkgs.i3status-rust} ${status_conf}";
|
||||||
|
command = "${pkgs.i3}/bin/i3bar";
|
||||||
|
workspaceButtons = true;
|
||||||
|
workspaceNumbers = true;
|
||||||
|
trayOutput = "primary";
|
||||||
|
}
|
||||||
|
// config.lib.stylix.i3.bar;
|
||||||
|
in [stylix_bar];
|
||||||
};
|
};
|
||||||
|
|
||||||
defaultWorkspace = "workspace number 1";
|
|
||||||
workspaceAutoBackAndForth = true;
|
|
||||||
focus.wrapping = "yes";
|
|
||||||
|
|
||||||
# startup = [ ] ++ lib.optionals config.mods.social.enable [{
|
|
||||||
# command = "exec vesktop";
|
|
||||||
# }];
|
|
||||||
|
|
||||||
assigns = {
|
|
||||||
"2" = [{ class = "Vesktop"; }];
|
|
||||||
"3" = [{ class = "^Steam$"; }];
|
|
||||||
};
|
|
||||||
|
|
||||||
keybindings = let
|
|
||||||
# modKeyComb: string -> valueAction: string
|
|
||||||
# -> keys: [string] -> values: [string]
|
|
||||||
# -> keybindings: attrSet { string -> string }
|
|
||||||
zipBinds = comb: action: keys: values:
|
|
||||||
(builtins.listToAttrs (lib.zipListsWith (k: v: {
|
|
||||||
name = "${modifier}${comb}${k}";
|
|
||||||
value = "${action} ${v}";
|
|
||||||
}) keys values));
|
|
||||||
|
|
||||||
moveKeys = [ "h" "j" "k" "l" ];
|
|
||||||
moveDirs = [ "left" "down" "up" "right" ];
|
|
||||||
|
|
||||||
workspKeys = genSpaces (x: lib.mod (x + 1) wsAmount);
|
|
||||||
|
|
||||||
in lib.mkOptionDefault ((zipBinds "+" "focus" moveKeys moveDirs)
|
|
||||||
// (zipBinds "+Shift+" "move" moveKeys moveDirs)
|
|
||||||
// (zipBinds "+" "workspace number" workspKeys workspaces)
|
|
||||||
// (zipBinds "+Shift+" "move container to workspace number" workspKeys
|
|
||||||
workspaces) // {
|
|
||||||
"XF86AudioRaiseVolume" =
|
|
||||||
"exec --no-startup-id pactl set-sink-volume 0 +2%";
|
|
||||||
"XF86AudioLowerVolume" =
|
|
||||||
"exec --no-startup-id pactl set-sink-volume 0 -2%";
|
|
||||||
});
|
|
||||||
|
|
||||||
bars = let
|
|
||||||
status_conf =
|
|
||||||
"${config.xdg.configHome}/i3status-rust/config-default.toml";
|
|
||||||
stylix_bar = {
|
|
||||||
mode = "dock";
|
|
||||||
hiddenState = "hide";
|
|
||||||
position = "bottom";
|
|
||||||
statusCommand = "${lib.getExe pkgs.i3status-rust} ${status_conf}";
|
|
||||||
command = "${pkgs.i3}/bin/i3bar";
|
|
||||||
workspaceButtons = true;
|
|
||||||
workspaceNumbers = true;
|
|
||||||
trayOutput = "primary";
|
|
||||||
} // config.lib.stylix.i3.bar;
|
|
||||||
in [ stylix_bar ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,9 @@
|
||||||
{ pkgs, lib, config, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
options.mods.desktop.media.enable =
|
options.mods.desktop.media.enable =
|
||||||
lib.mkEnableOption "enables entertainment programs";
|
lib.mkEnableOption "enables entertainment programs";
|
||||||
|
|
||||||
|
|
@ -9,10 +14,13 @@
|
||||||
pavucontrol
|
pavucontrol
|
||||||
|
|
||||||
# Video
|
# Video
|
||||||
stremio
|
(callPackage ./packages/stremio-linux-shell.nix {})
|
||||||
|
|
||||||
# Podcasts
|
# Podcasts
|
||||||
gpodder
|
gpodder
|
||||||
|
|
||||||
|
# Interactive
|
||||||
|
bottles
|
||||||
];
|
];
|
||||||
programs.mpv.enable = true;
|
programs.mpv.enable = true;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
122
modules/home/desktop/packages/stremio-linux-shell.nix
Normal file
122
modules/home/desktop/packages/stremio-linux-shell.nix
Normal file
|
|
@ -0,0 +1,122 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
rustPlatform,
|
||||||
|
fetchFromGitHub,
|
||||||
|
openssl,
|
||||||
|
pkg-config,
|
||||||
|
gtk3,
|
||||||
|
mpv,
|
||||||
|
libappindicator,
|
||||||
|
libxkbcommon,
|
||||||
|
libcef,
|
||||||
|
makeWrapper,
|
||||||
|
nodejs,
|
||||||
|
# fetchurl,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# cef-rs expects a specific directory layout
|
||||||
|
# Copied from https://github.com/NixOS/nixpkgs/pull/428206 because im lazy
|
||||||
|
cef-path = stdenv.mkDerivation {
|
||||||
|
pname = "cef-path";
|
||||||
|
version = libcef.version;
|
||||||
|
dontUnpack = true;
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p "$out"
|
||||||
|
find ${libcef}/lib -type f -name "*" -exec cp {} $out/ \;
|
||||||
|
find ${libcef}/libexec -type f -name "*" -exec cp {} $out/ \;
|
||||||
|
cp -r ${libcef}/share/cef/* $out/
|
||||||
|
mkdir -p "$out/include"
|
||||||
|
cp -r ${libcef}/include/* "$out/include/"
|
||||||
|
'';
|
||||||
|
postFixup = ''
|
||||||
|
strip $out/*.so*
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
# NOTE stremio downloads server.js into XDG_DATA_DIR. Packaging it is not required.
|
||||||
|
# I'm patching this because I don't enjoy stremio downloading code at runtime.
|
||||||
|
# This and the postPatch are not needed if you're okay with stremio downloading server.js at runtime
|
||||||
|
# Latest server.js version found at https://www.strem.io/updater/server/check
|
||||||
|
# server = fetchurl rec {
|
||||||
|
# pname = "stremio-server";
|
||||||
|
# version = "4.20.11";
|
||||||
|
# url = "https://dl.strem.io/server/v${version}/desktop/server.js";
|
||||||
|
# hash = "sha256-2QCwUlusNTGqbOmOGjyKOx0bHaoGmn9vy93qViXx95E=";
|
||||||
|
# meta.license = lib.licenses.unfree;
|
||||||
|
# };
|
||||||
|
in
|
||||||
|
rustPlatform.buildRustPackage (finalAttrs: {
|
||||||
|
name = "stremio-linux-shell";
|
||||||
|
version = "1.0.0-beta.11";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "Stremio";
|
||||||
|
repo = "stremio-linux-shell";
|
||||||
|
tag = "v${finalAttrs.version}";
|
||||||
|
hash = "sha256-FNAeur5esDqBoYlmjUO6jdi1eC83ynbLxbjH07QZ++E=";
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoHash = "sha256-9/28BCG51jPnKXbbzzNp7KQLMkLEugFQfwszRR9kmUw=";
|
||||||
|
|
||||||
|
# The build scripts tries to download CEF binaries by default.
|
||||||
|
# Probably overkill since setting CEF_PATH should skip downloading binaries.
|
||||||
|
buildFeatures = [
|
||||||
|
"offline-build"
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
openssl
|
||||||
|
gtk3
|
||||||
|
mpv
|
||||||
|
libcef
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
pkg-config
|
||||||
|
];
|
||||||
|
|
||||||
|
#postPatch = ''
|
||||||
|
# substituteInPlace ./src/config.rs \
|
||||||
|
# --replace-fail \
|
||||||
|
# 'let file = data_dir.join(SERVER_FILE);' \
|
||||||
|
# 'let file = PathBuf::from(r"${server}");'
|
||||||
|
|
||||||
|
# substituteInPlace ./src/server.rs \
|
||||||
|
# --replace-fail \
|
||||||
|
# 'let should_download = self.config.version() != Some(latest_version.clone());' \
|
||||||
|
# 'let should_download = false;'
|
||||||
|
#'';
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
mkdir -p $out/share/applications
|
||||||
|
mkdir -p $out/share/icons/hicolor/scalable/apps
|
||||||
|
|
||||||
|
mv $out/bin/stremio-linux-shell $out/bin/stremio
|
||||||
|
cp $src/data/com.stremio.Stremio.desktop $out/share/applications/com.stremio.Stremio.desktop
|
||||||
|
cp $src/data/icons/com.stremio.Stremio.svg $out/share/icons/hicolor/scalable/apps/com.stremio.Stremio.svg
|
||||||
|
|
||||||
|
|
||||||
|
wrapProgram $out/bin/stremio \
|
||||||
|
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libappindicator libxkbcommon]} \
|
||||||
|
--prefix PATH : ${lib.makeBinPath [nodejs]}'';
|
||||||
|
|
||||||
|
env.CEF_PATH = cef-path;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
mainProgram = "stremio";
|
||||||
|
description = "Modern media center that gives you the freedom to watch everything you want";
|
||||||
|
homepage = "https://www.stremio.com/";
|
||||||
|
# (Server-side) 4.x versions of the web UI are closed-source
|
||||||
|
license = with lib.licenses; [
|
||||||
|
gpl3Only
|
||||||
|
# server.js is unfree
|
||||||
|
# unfree
|
||||||
|
];
|
||||||
|
maintainers = with lib.maintainers; [
|
||||||
|
griffi-gh
|
||||||
|
{name = "nuko";}
|
||||||
|
];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|
@ -1,61 +1,322 @@
|
||||||
{ pkgs, lib, config, osConfig, ... }: {
|
{
|
||||||
options.mods.desktop.productivity.enable =
|
pkgs,
|
||||||
lib.mkEnableOption "enables gui productivity tools";
|
lib,
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
system,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
color = config.lib.stylix.colors.withHashtag;
|
||||||
|
in
|
||||||
|
with lib; {
|
||||||
|
options.mods.desktop.productivity.enable =
|
||||||
|
lib.mkEnableOption "enables gui productivity tools";
|
||||||
|
|
||||||
config = lib.mkIf config.mods.desktop.productivity.enable {
|
imports = [
|
||||||
home.packages = with pkgs; [
|
inputs.zen-browser.homeModules.beta
|
||||||
# ISO downloader
|
# or inputs.zen-browser.homeModules.twilight
|
||||||
qbittorrent
|
# or inputs.zen-browser.homeModules.twilight-official
|
||||||
xd
|
|
||||||
biglybt
|
|
||||||
# transmission_4-gtk
|
|
||||||
|
|
||||||
# email
|
|
||||||
thunderbird
|
|
||||||
|
|
||||||
# webgl
|
|
||||||
chromium
|
|
||||||
mullvad-browser
|
|
||||||
|
|
||||||
# password manager
|
|
||||||
bitwarden-desktop
|
|
||||||
|
|
||||||
# file management
|
|
||||||
breeze-icons
|
|
||||||
libsForQt5.qt5ct
|
|
||||||
dolphin
|
|
||||||
|
|
||||||
# documents
|
|
||||||
# texliveFull
|
|
||||||
# texstudio
|
|
||||||
];
|
];
|
||||||
|
|
||||||
qt.platformTheme = "qt5ct";
|
config = lib.mkIf config.mods.desktop.productivity.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# ISO downloader
|
||||||
|
qbittorrent
|
||||||
|
xd
|
||||||
|
biglybt
|
||||||
|
# transmission_4-gtk
|
||||||
|
|
||||||
home.sessionVariables.BROWSER = "librewolf";
|
# email
|
||||||
programs.zsh.sessionVariables.BROWSER = "librewolf";
|
thunderbird
|
||||||
|
|
||||||
programs.librewolf = {
|
# webgl
|
||||||
enable = false;
|
# mullvad-browser
|
||||||
settings = {
|
|
||||||
"webgl.disabled" = true;
|
# password manager
|
||||||
"privacy.resistFingerprinting" = true;
|
bitwarden-desktop
|
||||||
"privacy.clearOnShutdown.history" = false;
|
|
||||||
"privacy.clearOnShutdown.cookies" = false;
|
# file management
|
||||||
"network.cookie.lifetimePolicy" = 0;
|
libsForQt5.breeze-icons
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
|
||||||
|
# documents
|
||||||
|
# texliveFull
|
||||||
|
# texstudio
|
||||||
|
|
||||||
|
# 3D
|
||||||
|
blender
|
||||||
|
];
|
||||||
|
|
||||||
|
# qt.platformTheme = "qtct";
|
||||||
|
|
||||||
|
home.sessionVariables.BROWSER = "librewolf";
|
||||||
|
programs.zsh.sessionVariables.BROWSER = "librewolf";
|
||||||
|
|
||||||
|
services.flameshot = {
|
||||||
|
enable = false;
|
||||||
|
settings = {
|
||||||
|
General = {
|
||||||
|
disabledTrayIcon = true;
|
||||||
|
showStartupLaunchMessage = false;
|
||||||
|
startupLaunch = false;
|
||||||
|
|
||||||
|
uiColor = color.base01;
|
||||||
|
contrastUiColor = color.base00;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.librewolf = {
|
||||||
|
enable = false;
|
||||||
|
settings = {
|
||||||
|
"webgl.disabled" = true;
|
||||||
|
"privacy.resistFingerprinting" = true;
|
||||||
|
"privacy.clearOnShutdown.history" = false;
|
||||||
|
"privacy.clearOnShutdown.cookies" = false;
|
||||||
|
"network.cookie.lifetimePolicy" = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.desktopEntries = lib.mkIf osConfig.mods.i2p.enable {
|
||||||
|
i2p-browser = {
|
||||||
|
name = "i2p Browser";
|
||||||
|
genericName = "Web Browser";
|
||||||
|
exec = "${pkgs.mullvad-browser}/bin/mullvad-browser -p i2p";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
stylix.targets.zen-browser.profileNames = [];
|
||||||
|
programs.zen-browser = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
policies = let
|
||||||
|
mkLockedAttrs = builtins.mapAttrs (_: value: {
|
||||||
|
Value = value;
|
||||||
|
Status = "locked";
|
||||||
|
});
|
||||||
|
|
||||||
|
mkPluginUrl = id: "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
|
||||||
|
|
||||||
|
mkExtensionEntry = {
|
||||||
|
id,
|
||||||
|
pinned ? false,
|
||||||
|
}: let
|
||||||
|
base = {
|
||||||
|
install_url = mkPluginUrl id;
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
if pinned
|
||||||
|
then base // {default_area = "navbar";}
|
||||||
|
else base;
|
||||||
|
|
||||||
|
mkExtensionSettings = builtins.mapAttrs (_: entry:
|
||||||
|
if builtins.isAttrs entry
|
||||||
|
then entry
|
||||||
|
else mkExtensionEntry {id = entry;});
|
||||||
|
in {
|
||||||
|
AutofillAddressEnabled = false;
|
||||||
|
AutofillCreditCardEnabled = false;
|
||||||
|
DisableAppUpdate = true;
|
||||||
|
DisableFeedbackCommands = true;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisablePocket = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DontCheckDefaultBrowser = true;
|
||||||
|
OfferToSaveLogins = false;
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = true;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
};
|
||||||
|
ExtensionSettings = mkExtensionSettings {
|
||||||
|
"uBlock0@raymondhill.net" = mkExtensionEntry {
|
||||||
|
id = "ublock-origin";
|
||||||
|
pinned = true;
|
||||||
|
};
|
||||||
|
"{85860b32-02a8-431a-b2b1-40fbd64c9c69}" = "github-file-icons";
|
||||||
|
"{74145f27-f039-47ce-a470-a662b129930a}" = "clearurls";
|
||||||
|
"github-no-more@ihatereality.space" = "github-no-more";
|
||||||
|
"github-repository-size@pranavmangal" = "gh-repo-size";
|
||||||
|
"@searchengineadremover" = "searchengineadremover";
|
||||||
|
"jid1-BoFifL9Vbdl2zQ@jetpack" = "decentraleyes";
|
||||||
|
"{d7742d87-e61d-4b78-b8a1-b469842139fa}" = "vimium-ff";
|
||||||
|
};
|
||||||
|
Preferences = mkLockedAttrs {
|
||||||
|
"browser.aboutConfig.showWarning" = false;
|
||||||
|
"browser.tabs.warnOnClose" = false;
|
||||||
|
"media.videocontrols.picture-in-picture.video-toggle.enabled" = true;
|
||||||
|
# Disable swipe gestures (Browser:BackOrBackDuplicate, Browser:ForwardOrForwardDuplicate)
|
||||||
|
"browser.gesture.swipe.left" = "";
|
||||||
|
"browser.gesture.swipe.right" = "";
|
||||||
|
"browser.tabs.hoverPreview.enabled" = true;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.topsites" = false;
|
||||||
|
"browser.topsites.contile.enabled" = false;
|
||||||
|
|
||||||
|
"privacy.resistFingerprinting" = true;
|
||||||
|
"privacy.firstparty.isolate" = true;
|
||||||
|
"network.cookie.cookieBehavior" = 5;
|
||||||
|
"dom.battery.enabled" = false;
|
||||||
|
|
||||||
|
"gfx.webrender.all" = true;
|
||||||
|
"network.http.http3.enabled" = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles.default = rec {
|
||||||
|
settings = {
|
||||||
|
"zen.workspaces.continue-where-left-off" = true;
|
||||||
|
"zen.workspaces.natural-scroll" = true;
|
||||||
|
"zen.view.compact.hide-tabbar" = true;
|
||||||
|
"zen.view.compact.hide-toolbar" = true;
|
||||||
|
"zen.view.compact.animate-sidebar" = false;
|
||||||
|
"zen.welcome-screen.seen" = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
bookmarks = {
|
||||||
|
force = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
name = "Nix sites";
|
||||||
|
toolbar = true;
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "homepage";
|
||||||
|
url = "https://nixos.org/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "wiki";
|
||||||
|
tags = ["wiki" "nix"];
|
||||||
|
url = "https://wiki.nixos.org/";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
pinsForce = true;
|
||||||
|
pins = {
|
||||||
|
"GitHub" = {
|
||||||
|
id = "48e8a119-5a14-4826-9545-91c8e8dd3bf6";
|
||||||
|
workspace = spaces."Work".id;
|
||||||
|
url = "https://github.com";
|
||||||
|
position = 101;
|
||||||
|
isEssential = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
containersForce = true;
|
||||||
|
containers = {
|
||||||
|
Work = {
|
||||||
|
color = "blue";
|
||||||
|
icon = "briefcase";
|
||||||
|
id = 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spacesForce = true;
|
||||||
|
spaces = {
|
||||||
|
"Personal" = {
|
||||||
|
id = "572910e1-4468-4832-a869-0b3a93e2f165";
|
||||||
|
# icon = "";
|
||||||
|
position = 1000;
|
||||||
|
};
|
||||||
|
"Work" = {
|
||||||
|
id = "ec287d7f-d910-4860-b400-513f269dee77";
|
||||||
|
# icon = "briefcase";
|
||||||
|
position = 1001;
|
||||||
|
container = containers."Work".id;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
search = {
|
||||||
|
force = true;
|
||||||
|
default = "searx";
|
||||||
|
engines = let
|
||||||
|
nixSnowflakeIcon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
|
in {
|
||||||
|
"Nix Packages" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://search.nixos.org/packages";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "type";
|
||||||
|
value = "packages";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "channel";
|
||||||
|
value = "unstable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
icon = nixSnowflakeIcon;
|
||||||
|
definedAliases = ["np"];
|
||||||
|
};
|
||||||
|
"Nix Options" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://search.nixos.org/options";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "channel";
|
||||||
|
value = "unstable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
icon = nixSnowflakeIcon;
|
||||||
|
definedAliases = ["nop"];
|
||||||
|
};
|
||||||
|
"Home Manager Options" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://home-manager-options.extranix.com/";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "release";
|
||||||
|
value = "master"; # unstable
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
icon = nixSnowflakeIcon;
|
||||||
|
definedAliases = ["hm"];
|
||||||
|
};
|
||||||
|
"searx" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://search.muon.host/search";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "q";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
icon = "magnifying-glass";
|
||||||
|
definedAliases = ["srx"];
|
||||||
|
};
|
||||||
|
bing.metaData.hidden = "true";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
}
|
||||||
xdg.desktopEntries = lib.mkIf osConfig.mods.i2p.enable {
|
|
||||||
i2p-browser = {
|
|
||||||
name = "i2p Browser";
|
|
||||||
genericName = "Web Browser";
|
|
||||||
exec = "${pkgs.mullvad-browser}/bin/mullvad-browser -p i2p";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# programs.qutebrowser = {
|
|
||||||
# enable = true;
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,7 @@
|
||||||
{ pkgs, lib, config, ... }:
|
{ pkgs, lib, config, sources, ... }:
|
||||||
let
|
let
|
||||||
vesktop-nogain = (pkgs.vesktop.overrideAttrs (previousAttrs: {
|
vesktop-nogain = (pkgs.vesktop.overrideAttrs (previousAttrs: {
|
||||||
patches = previousAttrs.patches ++ [
|
patches = previousAttrs.patches ++ [ sources."vesktop.micfix".src ];
|
||||||
(builtins.fetchurl {
|
|
||||||
url = "https://codeberg.org/muon/gists/raw/branch/main/micfix.patch";
|
|
||||||
sha256 = "18zmq68m5mx3s924iqfbmm8a7r8qbjnw86hvvax2vg8w94g7mrqp";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}));
|
}));
|
||||||
in {
|
in {
|
||||||
options.mods.social.enable =
|
options.mods.social.enable =
|
||||||
|
|
|
||||||
50
modules/home/impermanence.nix
Normal file
50
modules/home/impermanence.nix
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
{ pkgs, lib, config, osConfig, ... }:
|
||||||
|
let
|
||||||
|
fs-diff = with pkgs;
|
||||||
|
writeShellApplication {
|
||||||
|
name = "fs-diff";
|
||||||
|
text = ''
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# fs-diff.sh
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
sudo mkdir -p /btrfs_tmp
|
||||||
|
sudo mount -o subvol=/ /dev/mapper/crypted /btrfs_tmp
|
||||||
|
|
||||||
|
OLD_TRANSID=$(sudo btrfs subvolume find-new /btrfs_tmp/root-blank 9999999)
|
||||||
|
OLD_TRANSID=''${OLD_TRANSID#transid marker was }
|
||||||
|
|
||||||
|
sudo btrfs subvolume find-new "/btrfs_tmp/root" "$OLD_TRANSID" |
|
||||||
|
sed '$d' |
|
||||||
|
cut -f17- -d' ' |
|
||||||
|
sort |
|
||||||
|
uniq |
|
||||||
|
while read -r path; do
|
||||||
|
path="/$path"
|
||||||
|
if [ -L "$path" ]; then
|
||||||
|
: # The path is a symbolic link, so is probably handled by NixOS already
|
||||||
|
elif [ -d "$path" ]; then
|
||||||
|
: # The path is a directory, ignore
|
||||||
|
else
|
||||||
|
echo "$path"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
sudo umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in with lib; {
|
||||||
|
config = mkIf osConfig.mods.impermanence.enable {
|
||||||
|
home.packages = [ fs-diff ];
|
||||||
|
# home.persistence."/persist/home/muon" = {
|
||||||
|
# directories = [
|
||||||
|
# "documents"
|
||||||
|
# "downloads"
|
||||||
|
# "src"
|
||||||
|
# ".gnupg"
|
||||||
|
# ".ssh"
|
||||||
|
# ".config/sops"
|
||||||
|
# ".local/share/direnv"
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules/home/sops/default.nix
Normal file
21
modules/home/sops/default.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mods;
|
||||||
|
in
|
||||||
|
with lib; {
|
||||||
|
imports = [inputs.sops-nix.homeManagerModules.sops];
|
||||||
|
sops = {
|
||||||
|
age.keyFile = "/persist/var/lib/sops-nix/key.txt";
|
||||||
|
defaultSopsFile = ./secrets.yaml;
|
||||||
|
secrets.zipline-auth = {};
|
||||||
|
secrets.atuin-auth = {};
|
||||||
|
secrets.hr-password = {};
|
||||||
|
secrets.sops-key = {};
|
||||||
|
};
|
||||||
|
}
|
||||||
46
modules/home/sops/secrets.yaml
Normal file
46
modules/home/sops/secrets.yaml
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
zipline-auth: ENC[AES256_GCM,data:RkJI6GuH7RzdcSlKn32gMGojjB6rkdDcnNUvsi/BTfJk2slzoktAaJPzQA==,iv:LIiB3tyqXf/D64aIDSo0AyG3imvI6ZE893KBPlYFr28=,tag:wl8spMBwzfvuKA+Y6JnVyQ==,type:str]
|
||||||
|
atuin-auth: ENC[AES256_GCM,data:LDkiXWIwxor8Ro383gonJCyqu+nyxS7DrI2J8uo4Cqu2X61rBUlnpNR6YirUZS/lYAnWYJhZM7sR0G7ZNh9EgQ==,iv:UEs2KW8ImMnaQrSLrIGbVXEq86QiVPAPNIXBZpa3jFI=,tag:N0rhnPbasFzkoI3CJ9CV+Q==,type:str]
|
||||||
|
hr-password: ENC[AES256_GCM,data:QZuzAnTJ2KgPnffHvdCWrJEM5d/FXxhX3dA1,iv:FgDw6aXDY0jCpJiYc9WOobR96TXNtnvN7neJu8drxMM=,tag:YT82wryVy3V+41w0YbMOrA==,type:str]
|
||||||
|
sops-key: ENC[AES256_GCM,data:msX0EJqJauteOBICUsLcVgqNxqGcqvD+Xi/B2EhUX2OAoyBH5oDae8XWlQCi2RdOm4NtnrSTnG8FRQXfkXO+tne0VEfYTCjeVtU=,iv:qxpvofr56Ey17xcPpju/mQgiz+0cOYED5caAHs3myXw=,tag:oDFXh0rlc0tmV2IUJ1ezBQ==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age1m97a3eptxwpdd7h5kkqe9gkmhg6rquc64qjmlsfqfhfqv8q72crqrylhgc
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqWlVGK0V3UTVuejFMRVA0
|
||||||
|
QUhrRXhwcTc4N3B5b1V6ckZqRUJVcXdCbWtzCnl2a0JTeVJKSkpreGdyc0xnODk1
|
||||||
|
WlFFdVBBbTkxRnVoRmQ5VjFsRGxvN1EKLS0tIGQ2dlFFRlM5NzQxQkZ5MENuYU8x
|
||||||
|
SkhrZUR0MkVyazc2MUx0aklWUFZFNHMKm8wOh9R1LWyLgJ7nJ0mCGmSeK8biNfHG
|
||||||
|
Y9w991ccXbVd8QVq7k0I2sJ/T/4DLlFineV8jRsj4rN9cks4Uo5mTQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1v4s4hg7u3vjjkarvrk7v6ev7w3wja2r5xm7f4t06culw3fuq7qns8sfju7
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxQlJQN3c2WVU4T2hhVDV1
|
||||||
|
SjlqZkVJSFk5VEw4dkNxejF6MFBkWVQ0MUE0Cjc2WTQvTXlsbDZqNlg1RkZ4eVNF
|
||||||
|
NTczRGJ6M2c1cXBqcmxYbzMxVGdSVjAKLS0tIG9JNmdLUW9iN29CVVZ0dC9BVFRP
|
||||||
|
Y2g3MU1TZnhjQ0t5MkxKWVhQVDJ3WDAKMuI1G3t4BmG3JbwXfQKNTdkHCjnU/jHK
|
||||||
|
Z2eKhvwKqT08z+Pvtxd2pcRtK+t23/edCUJv684VrNXoBlgMH10PuA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1n7qz2w3hkf7fcdv92kxw9k6uef487na2tlc87486rcjwj8lyfuws5q46gn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5Lyt4Zk5GeW1XNTBLbnBZ
|
||||||
|
MHE4WG5Cci9Sa1V4aDZQRkVzdDJ0a3JRYWwwCmhSSFFNdTlCM05wUy9uQnhUcFY3
|
||||||
|
c05xUFRiamV1WmxuU2tFeWVqeTlYdGsKLS0tIGJtWWNMc2lwK0taOHluN3BmcnRO
|
||||||
|
YVYySTJaNE1aalAxUXZqR1BWMzJvalUKnD3hpu5b1Tb+tg+gmVWuAYVlg2SPRI8p
|
||||||
|
kILLFBP2mHz3V6lRX77tXXvCkjLZ8EFKMIl8owGZ8LUsokz1k5EbSA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1mgjhkqy9x27gv2t2xvq46dxcajkr9c8zes7rr3dj0ac7md2j6vas43dftp
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6d0JHVWd6eGt4b05RNUVr
|
||||||
|
VzFsSnN1Qk5wSnk4aWdvOVlzY0k5LzZMQXc4CmxRMmMrM3pVMjV6S0pVNnNsQlFo
|
||||||
|
S3lDTGZGTHV3cXdyWndzd0JQSVRUYTQKLS0tIDJHbnZvTFN0YmVsdkFhR2NhckYy
|
||||||
|
a0V1N2VjUDE4Z3R5MGxMQVNmOVp0bVUK9cppJW33tKFOSvbIn/2Dga8k7/McaTpK
|
||||||
|
m7M+83guMzNoOlpJ/WYU1BaePcM974AgjVR0WD/v+xGBvGKubKHqtw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2025-08-04T07:58:56Z"
|
||||||
|
mac: ENC[AES256_GCM,data:aJw3KK4GMj5/Q06v1C5rdSerdO21cNxpTIJYoxmfhBKudzD7lSL6l+d47kWoB0U4J5jtbs9obWz2MH3CvyPBapjJaSFnYEXk1JuGihf8GK3QrqLAt+dmF2ZD1FBLpQELripueneyHkzT32180hpXGnppNlgOuATlIMSPosvlpVI=,iv:SpGAyTqqbpuxcLkMq7VnLQUoR6oW0ERgnyPaqVHpaN8=,tag:OSNGT8/5E+PRhoR8dIyaSA==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.10.2
|
||||||
|
|
@ -1,10 +1,6 @@
|
||||||
{ pkgs, lib, osConfig, ... }: {
|
{ pkgs, lib, osConfig, ... }: {
|
||||||
imports = [
|
imports =
|
||||||
./shell.nix
|
[ ./shell.nix ./emulator.nix ./development.nix ./tools.nix ./yazi.nix ];
|
||||||
./emulator.nix
|
|
||||||
./development.nix
|
|
||||||
./tools.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
config = lib.mkIf osConfig.mods.desktop.enable {
|
config = lib.mkIf osConfig.mods.desktop.enable {
|
||||||
mods.terminal.emulator.enable = lib.mkDefault true;
|
mods.terminal.emulator.enable = lib.mkDefault true;
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,19 @@
|
||||||
{ pkgs, lib, config, ... }:
|
{
|
||||||
let
|
pkgs,
|
||||||
wgsl_analyzer = with pkgs;
|
lib,
|
||||||
stdenv.mkDerivation rec {
|
config,
|
||||||
pname = "wgsl_analyzer";
|
inputs,
|
||||||
version = "0.8.1";
|
...
|
||||||
|
}: let
|
||||||
src = fetchurl {
|
zellij-muon = pkgs.zellij.overrideAttrs (previousAttrs: {
|
||||||
url =
|
patches = previousAttrs.patches ++ [./zellij/floating_fix.patch];
|
||||||
"https://github.com/wgsl-analyzer/wgsl-analyzer/releases/download/v${version}/${pname}-linux-x64";
|
});
|
||||||
hash = "sha256-WRc9fHUw9/KHD5BzUX3nd+0sRkc7i8axsXhHUZFOUeY=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [ autoPatchelfHook ];
|
|
||||||
|
|
||||||
buildInputs = [ openssl zlib ];
|
|
||||||
|
|
||||||
sourceRoot = ".";
|
|
||||||
phases = [ "installPhase" "patchPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
cp $src $out/bin/${pname}
|
|
||||||
chmod +x $out/bin/${pname}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in {
|
in {
|
||||||
options.mods.terminal.development.enable =
|
options.mods.terminal.development.enable =
|
||||||
lib.mkEnableOption "enables cli editor";
|
lib.mkEnableOption "enables cli editor";
|
||||||
|
|
||||||
|
imports = [inputs.nvf.homeManagerModules.default];
|
||||||
|
|
||||||
config = lib.mkIf config.mods.terminal.development.enable {
|
config = lib.mkIf config.mods.terminal.development.enable {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# Nix
|
# Nix
|
||||||
|
|
@ -38,8 +25,10 @@ in {
|
||||||
|
|
||||||
# Shaders
|
# Shaders
|
||||||
glsl_analyzer
|
glsl_analyzer
|
||||||
# wgsl_analyzer
|
wgsl-analyzer
|
||||||
|
|
||||||
|
# Python
|
||||||
|
black
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.direnv = {
|
programs.direnv = {
|
||||||
|
|
@ -48,21 +37,115 @@ in {
|
||||||
enableZshIntegration = lib.mkIf config.mods.terminal.zsh.enable true;
|
enableZshIntegration = lib.mkIf config.mods.terminal.zsh.enable true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.zellij = {
|
||||||
|
settings = {
|
||||||
|
default_mode._args = ["locked"];
|
||||||
|
show_startup_tips._args = [false];
|
||||||
|
show_release_notes._args = [false];
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = builtins.readFile ./zellij/config.kdl;
|
||||||
|
|
||||||
|
layouts = {
|
||||||
|
dev = {
|
||||||
|
layout = {
|
||||||
|
_children = [
|
||||||
|
{
|
||||||
|
default_tab_template = {
|
||||||
|
_children = [
|
||||||
|
{
|
||||||
|
pane = {
|
||||||
|
size = 1;
|
||||||
|
borderless = true;
|
||||||
|
plugin = {
|
||||||
|
location = "zellij:tab-bar";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{"children" = {};}
|
||||||
|
{
|
||||||
|
pane = {
|
||||||
|
size = 1;
|
||||||
|
borderless = true;
|
||||||
|
plugin = {
|
||||||
|
location = "zellij:status-bar";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
tab = {
|
||||||
|
_props = {
|
||||||
|
name = "project";
|
||||||
|
focus = true;
|
||||||
|
};
|
||||||
|
_children = [
|
||||||
|
{
|
||||||
|
pane = {
|
||||||
|
command = "zsh";
|
||||||
|
args = ["-c" "nvim"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
tab = {
|
||||||
|
_props = {
|
||||||
|
name = "test";
|
||||||
|
};
|
||||||
|
_children = [
|
||||||
|
{
|
||||||
|
pane = {
|
||||||
|
command = "zsh";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
tab = {
|
||||||
|
_props = {
|
||||||
|
name = "git";
|
||||||
|
};
|
||||||
|
_children = [
|
||||||
|
{
|
||||||
|
pane = {
|
||||||
|
command = "lazygit";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
home.sessionVariables.EDITOR = "hx";
|
home.sessionVariables.EDITOR = "hx";
|
||||||
programs.zsh.sessionVariables.EDITOR = "hx";
|
programs.zsh.sessionVariables.EDITOR = "hx";
|
||||||
|
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
package = pkgs.evil-helix;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
keys.normal = {
|
keys.normal = {
|
||||||
"esc" = [ "collapse_selection" "keep_primary_selection" ];
|
"esc" = ["collapse_selection" "keep_primary_selection"];
|
||||||
|
"Z" = {
|
||||||
|
"Q" = ":quit!";
|
||||||
|
"Z" = ":write-quit!";
|
||||||
|
};
|
||||||
|
"V" = ["select_mode" "extend_to_line_bounds"];
|
||||||
};
|
};
|
||||||
editor = {
|
editor = {
|
||||||
line-number = "relative";
|
line-number = "relative";
|
||||||
completion-replace = true;
|
completion-replace = true;
|
||||||
bufferline = "always";
|
bufferline = "always";
|
||||||
rulers = [ 80 ];
|
rulers = [80];
|
||||||
soft-wrap.enable = true;
|
soft-wrap.enable = true;
|
||||||
indent-guides.render = true;
|
indent-guides.render = true;
|
||||||
cursor-shape = {
|
cursor-shape = {
|
||||||
|
|
@ -75,7 +158,7 @@ in {
|
||||||
|
|
||||||
languages.language-server = {
|
languages.language-server = {
|
||||||
glsl.command = "${pkgs.glsl_analyzer}/bin/glsl_analyzer";
|
glsl.command = "${pkgs.glsl_analyzer}/bin/glsl_analyzer";
|
||||||
wgsl.command = "${wgsl_analyzer}/bin/wgsl_analyzer";
|
wgsl.command = "${pkgs.wgsl-analyzer}/bin/wgsl-analyzer";
|
||||||
};
|
};
|
||||||
|
|
||||||
languages.language = [
|
languages.language = [
|
||||||
|
|
@ -91,13 +174,147 @@ in {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "glsl";
|
name = "glsl";
|
||||||
language-servers = [ "glsl" ];
|
language-servers = ["glsl"];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "wgsl";
|
name = "wgsl";
|
||||||
language-servers = [ "wgsl" ];
|
language-servers = ["wgsl"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "python";
|
||||||
|
auto-format = true;
|
||||||
|
formatter = {
|
||||||
|
command = "${pkgs.black}/bin/black";
|
||||||
|
args = ["-" "--quiet" "--line-length=79"];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.nvf = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
vim = {
|
||||||
|
viAlias = false;
|
||||||
|
vimAlias = true;
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
formatOnSave = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
keymaps = [
|
||||||
|
{
|
||||||
|
key = "<leader>w";
|
||||||
|
mode = ["n"];
|
||||||
|
action = ":w<CR>";
|
||||||
|
silent = true;
|
||||||
|
desc = "Save file";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "gd";
|
||||||
|
mode = "n";
|
||||||
|
silent = true;
|
||||||
|
action = "<cmd>lua vim.lsp.buf.definition()<CR>";
|
||||||
|
desc = "Go to Definition";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
languages = {
|
||||||
|
enableFormat = true;
|
||||||
|
enableTreesitter = true;
|
||||||
|
enableExtraDiagnostics = true;
|
||||||
|
|
||||||
|
nix.enable = true;
|
||||||
|
nix.lsp.server = "nixd";
|
||||||
|
|
||||||
|
markdown.enable = true;
|
||||||
|
bash.enable = true;
|
||||||
|
rust.enable = true;
|
||||||
|
rust.crates.enable = true;
|
||||||
|
|
||||||
|
python.enable = true;
|
||||||
|
python.lsp.server = "pyright";
|
||||||
|
# python.lsp.package = [(lib.getExe pkgs.ruff) "server"];
|
||||||
|
python.format.type = "ruff";
|
||||||
|
|
||||||
|
clang = {
|
||||||
|
enable = true;
|
||||||
|
cHeader = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
statusline.lualine.enable = true;
|
||||||
|
telescope.enable = true;
|
||||||
|
autocomplete.nvim-cmp.enable = true;
|
||||||
|
autopairs.nvim-autopairs.enable = true;
|
||||||
|
tabline.nvimBufferline.enable = true;
|
||||||
|
treesitter.context.enable = true;
|
||||||
|
dashboard.alpha.enable = true;
|
||||||
|
comments.comment-nvim.enable = true;
|
||||||
|
|
||||||
|
options = {
|
||||||
|
tabstop = 2;
|
||||||
|
shiftwidth = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
notes = {
|
||||||
|
# orgmode.enable = true;
|
||||||
|
todo-comments.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
spellcheck = {enable = true;};
|
||||||
|
|
||||||
|
binds = {
|
||||||
|
whichKey.enable = true;
|
||||||
|
cheatsheet.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
git = {
|
||||||
|
enable = true;
|
||||||
|
gitsigns.enable = true;
|
||||||
|
gitsigns.codeActions.enable =
|
||||||
|
false; # throws an annoying debug message
|
||||||
|
};
|
||||||
|
|
||||||
|
terminal = {
|
||||||
|
toggleterm = {
|
||||||
|
enable = true;
|
||||||
|
lazygit.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
utility = {
|
||||||
|
diffview-nvim.enable = true;
|
||||||
|
surround.enable = true;
|
||||||
|
# multicursors.enable = true;
|
||||||
|
undotree.enable = true;
|
||||||
|
|
||||||
|
motion = {
|
||||||
|
hop.enable = true;
|
||||||
|
leap.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
visuals = {
|
||||||
|
nvim-web-devicons.enable = true;
|
||||||
|
nvim-cursorline.enable = true;
|
||||||
|
cinnamon-nvim.enable = true;
|
||||||
|
fidget-nvim.enable = true;
|
||||||
|
|
||||||
|
highlight-undo.enable = true;
|
||||||
|
indent-blankline.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ui = {
|
||||||
|
borders.enable = true;
|
||||||
|
noice.enable = true;
|
||||||
|
colorizer.enable = true;
|
||||||
|
illuminate.enable = true;
|
||||||
|
smartcolumn.enable = true;
|
||||||
|
fastaction.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,22 @@
|
||||||
{ pkgs, lib, config, ... }:
|
{
|
||||||
let
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
cfg = config.mods.terminal;
|
cfg = config.mods.terminal;
|
||||||
|
|
||||||
aliases = {
|
aliases = with lib; {
|
||||||
la = "ls -lah";
|
la = "ls -lah";
|
||||||
|
xc = "${getExe pkgs.xclip} -selection clipboard";
|
||||||
|
".." = "cd ..";
|
||||||
|
"..." = "cd ../..";
|
||||||
|
"...." = "cd ../..";
|
||||||
|
"....." = "cd ../../..";
|
||||||
|
"......" = "cd ../../../..";
|
||||||
};
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
options.mods.terminal = {
|
options.mods.terminal = {zsh.enable = lib.mkEnableOption "enables zsh";};
|
||||||
zsh.enable = lib.mkEnableOption "enables zsh";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
programs.starship.enable = true;
|
programs.starship.enable = true;
|
||||||
|
|
@ -29,7 +36,7 @@ in {
|
||||||
path = "${config.xdg.dataHome}/zsh/history";
|
path = "${config.xdg.dataHome}/zsh/history";
|
||||||
};
|
};
|
||||||
|
|
||||||
initExtra = ''
|
initContent = ''
|
||||||
autoload -U compinit
|
autoload -U compinit
|
||||||
setopt no_auto_remove_slash
|
setopt no_auto_remove_slash
|
||||||
'';
|
'';
|
||||||
|
|
|
||||||
|
|
@ -1,51 +1,90 @@
|
||||||
{ pkgs, lib, config, ... }:
|
{
|
||||||
let cfg = config.mods.terminal;
|
pkgs,
|
||||||
in with lib; {
|
lib,
|
||||||
options.mods.terminal.tools.enable = mkEnableOption "enables cli tools";
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mods.terminal;
|
||||||
|
in
|
||||||
|
with lib; {
|
||||||
|
options.mods.terminal.tools.enable = mkEnableOption "enables cli tools";
|
||||||
|
|
||||||
config = mkIf cfg.tools.enable {
|
config = mkIf cfg.tools.enable {
|
||||||
|
programs =
|
||||||
|
builtins.listToAttrs (map (name: {
|
||||||
|
name = name;
|
||||||
|
value =
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
// optionalAttrs
|
||||||
|
(builtins.hasAttr "enableZshIntegration" config.programs.${name}) {
|
||||||
|
enableZshIntegration = mkIf cfg.zsh.enable true;
|
||||||
|
};
|
||||||
|
}) [
|
||||||
|
"zellij"
|
||||||
|
"fzf"
|
||||||
|
"eza"
|
||||||
|
"bat"
|
||||||
|
"zoxide"
|
||||||
|
"dircolors"
|
||||||
|
"nix-index"
|
||||||
|
|
||||||
programs = builtins.listToAttrs (map (name: {
|
"lazygit"
|
||||||
name = name;
|
"fd"
|
||||||
value = {
|
"ripgrep"
|
||||||
enable = true;
|
"bottom"
|
||||||
} // optionalAttrs
|
"htop"
|
||||||
(builtins.hasAttr "enableZshIntegration" config.programs.${name}) {
|
"vifm"
|
||||||
enableZshIntegration = mkIf cfg.zsh.enable true;
|
"rbw"
|
||||||
|
])
|
||||||
|
// {
|
||||||
|
atuin = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
flags = ["--disable-up-arrow"];
|
||||||
|
settings = {
|
||||||
|
sync_frequency = "5m";
|
||||||
|
sync_address = "https://atuin.muon.host";
|
||||||
|
key_path = config.sops.secrets.atuin-auth.path;
|
||||||
|
keymap_mode = "vim-insert";
|
||||||
|
keymap_cursor = {
|
||||||
|
vim_insert = "blink-bar";
|
||||||
|
vim_normal = "steady-block";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}) [
|
|
||||||
"zellij"
|
|
||||||
"fzf"
|
|
||||||
"eza"
|
|
||||||
"bat"
|
|
||||||
"zoxide"
|
|
||||||
"dircolors"
|
|
||||||
"yazi"
|
|
||||||
"nix-index"
|
|
||||||
"thefuck"
|
|
||||||
|
|
||||||
"lazygit"
|
services.clipmenu = {
|
||||||
"fd"
|
enable = true;
|
||||||
"ripgrep"
|
launcher = "rofi";
|
||||||
"bottom"
|
};
|
||||||
"htop"
|
|
||||||
"vifm"
|
|
||||||
]);
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# libraries
|
# libraries
|
||||||
glow
|
glow
|
||||||
ueberzugpp
|
ueberzugpp
|
||||||
|
|
||||||
# file managing
|
# file managing
|
||||||
trash-cli
|
trash-cli
|
||||||
dua
|
dua
|
||||||
fdupes
|
fdupes
|
||||||
vifm
|
vifm
|
||||||
|
unzip
|
||||||
|
|
||||||
# programs
|
# email
|
||||||
fend
|
aerc
|
||||||
unzip
|
|
||||||
];
|
# security
|
||||||
};
|
pinentry-tty
|
||||||
}
|
|
||||||
|
# utilities
|
||||||
|
fend
|
||||||
|
xclip
|
||||||
|
just
|
||||||
|
devenv
|
||||||
|
tealdeer
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
||||||
39
modules/home/terminal/yazi.nix
Normal file
39
modules/home/terminal/yazi.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let cfg = config.mods.terminal;
|
||||||
|
in with lib; {
|
||||||
|
|
||||||
|
config = mkIf cfg.tools.enable {
|
||||||
|
programs.yazi = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
manager = {
|
||||||
|
ratio = [ 1 4 3 ];
|
||||||
|
sort_by = "natural";
|
||||||
|
sort_sensitive = true;
|
||||||
|
sort_reverse = false;
|
||||||
|
sort_dir_first = true;
|
||||||
|
linemode = "none";
|
||||||
|
show_hidden = true;
|
||||||
|
show_symlink = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
preview = {
|
||||||
|
image_filter = "lanczos3";
|
||||||
|
image_quality = 90;
|
||||||
|
tab_size = 1;
|
||||||
|
max_width = 600;
|
||||||
|
max_height = 900;
|
||||||
|
cache_dir = "";
|
||||||
|
ueberzug_scale = 1;
|
||||||
|
ueberzug_offset = [ 0 0 0 0 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
tasks = {
|
||||||
|
micro_workers = 5;
|
||||||
|
macro_workers = 10;
|
||||||
|
bizarre_retry = 5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
244
modules/home/terminal/zellij/config.kdl
Normal file
244
modules/home/terminal/zellij/config.kdl
Normal file
|
|
@ -0,0 +1,244 @@
|
||||||
|
keybinds clear-defaults=true {
|
||||||
|
unbind "Ctrl g"
|
||||||
|
locked {
|
||||||
|
bind "Alt Space" { SwitchToMode "normal"; }
|
||||||
|
}
|
||||||
|
pane {
|
||||||
|
bind "left" { MoveFocus "left"; }
|
||||||
|
bind "down" { MoveFocus "down"; }
|
||||||
|
bind "up" { MoveFocus "up"; }
|
||||||
|
bind "right" { MoveFocus "right"; }
|
||||||
|
bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
|
||||||
|
bind "d" { NewPane "down"; SwitchToMode "locked"; }
|
||||||
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "locked"; }
|
||||||
|
bind "f" { ToggleFocusFullscreen; SwitchToMode "locked"; }
|
||||||
|
bind "h" { MoveFocus "left"; }
|
||||||
|
bind "i" { TogglePanePinned; SwitchToMode "locked"; }
|
||||||
|
bind "j" { MoveFocus "down"; }
|
||||||
|
bind "k" { MoveFocus "up"; }
|
||||||
|
bind "l" { MoveFocus "right"; }
|
||||||
|
bind "n" { NewPane; SwitchToMode "locked"; }
|
||||||
|
bind "p" { SwitchToMode "normal"; }
|
||||||
|
bind "r" { NewPane "right"; SwitchToMode "locked"; }
|
||||||
|
bind "s" { NewPane "stacked"; SwitchToMode "locked"; }
|
||||||
|
bind "w" { ToggleFloatingPanes; SwitchToMode "locked"; }
|
||||||
|
bind "x" { CloseFocus; SwitchToMode "locked"; }
|
||||||
|
bind "z" { TogglePaneFrames; SwitchToMode "locked"; }
|
||||||
|
bind "tab" { SwitchFocus; }
|
||||||
|
}
|
||||||
|
tab {
|
||||||
|
bind "left" { GoToPreviousTab; }
|
||||||
|
bind "down" { GoToNextTab; }
|
||||||
|
bind "up" { GoToPreviousTab; }
|
||||||
|
bind "right" { GoToNextTab; }
|
||||||
|
bind "1" { GoToTab 1; SwitchToMode "locked"; }
|
||||||
|
bind "2" { GoToTab 2; SwitchToMode "locked"; }
|
||||||
|
bind "3" { GoToTab 3; SwitchToMode "locked"; }
|
||||||
|
bind "4" { GoToTab 4; SwitchToMode "locked"; }
|
||||||
|
bind "5" { GoToTab 5; SwitchToMode "locked"; }
|
||||||
|
bind "6" { GoToTab 6; SwitchToMode "locked"; }
|
||||||
|
bind "7" { GoToTab 7; SwitchToMode "locked"; }
|
||||||
|
bind "8" { GoToTab 8; SwitchToMode "locked"; }
|
||||||
|
bind "9" { GoToTab 9; SwitchToMode "locked"; }
|
||||||
|
bind "[" { BreakPaneLeft; SwitchToMode "locked"; }
|
||||||
|
bind "]" { BreakPaneRight; SwitchToMode "locked"; }
|
||||||
|
bind "b" { BreakPane; SwitchToMode "locked"; }
|
||||||
|
bind "h" { GoToPreviousTab; }
|
||||||
|
bind "j" { GoToNextTab; }
|
||||||
|
bind "k" { GoToPreviousTab; }
|
||||||
|
bind "l" { GoToNextTab; }
|
||||||
|
bind "n" { NewTab; SwitchToMode "locked"; }
|
||||||
|
bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
|
||||||
|
bind "s" { ToggleActiveSyncTab; SwitchToMode "locked"; }
|
||||||
|
bind "t" { SwitchToMode "normal"; }
|
||||||
|
bind "x" { CloseTab; SwitchToMode "locked"; }
|
||||||
|
bind "tab" { ToggleTab; }
|
||||||
|
}
|
||||||
|
resize {
|
||||||
|
bind "left" { Resize "Increase left"; }
|
||||||
|
bind "down" { Resize "Increase down"; }
|
||||||
|
bind "up" { Resize "Increase up"; }
|
||||||
|
bind "right" { Resize "Increase right"; }
|
||||||
|
bind "+" { Resize "Increase"; }
|
||||||
|
bind "-" { Resize "Decrease"; }
|
||||||
|
bind "=" { Resize "Increase"; }
|
||||||
|
bind "H" { Resize "Decrease left"; }
|
||||||
|
bind "J" { Resize "Decrease down"; }
|
||||||
|
bind "K" { Resize "Decrease up"; }
|
||||||
|
bind "L" { Resize "Decrease right"; }
|
||||||
|
bind "h" { Resize "Increase left"; }
|
||||||
|
bind "j" { Resize "Increase down"; }
|
||||||
|
bind "k" { Resize "Increase up"; }
|
||||||
|
bind "l" { Resize "Increase right"; }
|
||||||
|
bind "r" { SwitchToMode "normal"; }
|
||||||
|
}
|
||||||
|
move {
|
||||||
|
bind "left" { MovePane "left"; }
|
||||||
|
bind "down" { MovePane "down"; }
|
||||||
|
bind "up" { MovePane "up"; }
|
||||||
|
bind "right" { MovePane "right"; }
|
||||||
|
bind "h" { MovePane "left"; }
|
||||||
|
bind "j" { MovePane "down"; }
|
||||||
|
bind "k" { MovePane "up"; }
|
||||||
|
bind "l" { MovePane "right"; }
|
||||||
|
bind "m" { SwitchToMode "normal"; }
|
||||||
|
bind "n" { MovePane; }
|
||||||
|
bind "p" { MovePaneBackwards; }
|
||||||
|
bind "tab" { MovePane; }
|
||||||
|
}
|
||||||
|
scroll {
|
||||||
|
bind "Alt left" { MoveFocusOrTab "left"; SwitchToMode "locked"; }
|
||||||
|
bind "Alt down" { MoveFocus "down"; SwitchToMode "locked"; }
|
||||||
|
bind "Alt up" { MoveFocus "up"; SwitchToMode "locked"; }
|
||||||
|
bind "Alt right" { MoveFocusOrTab "right"; SwitchToMode "locked"; }
|
||||||
|
bind "e" { EditScrollback; SwitchToMode "locked"; }
|
||||||
|
bind "f" { SwitchToMode "entersearch"; SearchInput 0; }
|
||||||
|
bind "Alt h" { MoveFocusOrTab "left"; SwitchToMode "locked"; }
|
||||||
|
bind "Alt j" { MoveFocus "down"; SwitchToMode "locked"; }
|
||||||
|
bind "Alt k" { MoveFocus "up"; SwitchToMode "locked"; }
|
||||||
|
bind "Alt l" { MoveFocusOrTab "right"; SwitchToMode "locked"; }
|
||||||
|
bind "s" { SwitchToMode "normal"; }
|
||||||
|
}
|
||||||
|
search {
|
||||||
|
bind "c" { SearchToggleOption "CaseSensitivity"; }
|
||||||
|
bind "n" { Search "down"; }
|
||||||
|
bind "o" { SearchToggleOption "WholeWord"; }
|
||||||
|
bind "p" { Search "up"; }
|
||||||
|
bind "w" { SearchToggleOption "Wrap"; }
|
||||||
|
}
|
||||||
|
session {
|
||||||
|
bind "a" {
|
||||||
|
LaunchOrFocusPlugin "zellij:about" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
}
|
||||||
|
SwitchToMode "locked"
|
||||||
|
}
|
||||||
|
bind "c" {
|
||||||
|
LaunchOrFocusPlugin "configuration" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
}
|
||||||
|
SwitchToMode "locked"
|
||||||
|
}
|
||||||
|
bind "d" { Detach; }
|
||||||
|
bind "o" { SwitchToMode "normal"; }
|
||||||
|
bind "p" {
|
||||||
|
LaunchOrFocusPlugin "plugin-manager" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
}
|
||||||
|
SwitchToMode "locked"
|
||||||
|
}
|
||||||
|
bind "s" {
|
||||||
|
LaunchOrFocusPlugin "zellij:share" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
}
|
||||||
|
SwitchToMode "locked"
|
||||||
|
}
|
||||||
|
bind "w" {
|
||||||
|
LaunchOrFocusPlugin "session-manager" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
}
|
||||||
|
SwitchToMode "locked"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
shared_among "normal" "locked" {
|
||||||
|
bind "Alt left" { MoveFocusOrTab "left"; }
|
||||||
|
bind "Alt down" { MoveFocus "down"; }
|
||||||
|
bind "Alt up" { MoveFocus "up"; }
|
||||||
|
bind "Alt right" { MoveFocusOrTab "right"; }
|
||||||
|
bind "Alt +" { Resize "Increase"; }
|
||||||
|
bind "Alt -" { Resize "Decrease"; }
|
||||||
|
bind "Alt =" { Resize "Increase"; }
|
||||||
|
bind "Alt [" { PreviousSwapLayout; }
|
||||||
|
bind "Alt ]" { NextSwapLayout; }
|
||||||
|
bind "Alt f" { ToggleFloatingPanes; }
|
||||||
|
bind "Alt h" { MoveFocusOrTab "left"; }
|
||||||
|
bind "Alt i" { MoveTab "left"; }
|
||||||
|
bind "Alt j" { MoveFocus "down"; }
|
||||||
|
bind "Alt k" { MoveFocus "up"; }
|
||||||
|
bind "Alt l" { MoveFocusOrTab "right"; }
|
||||||
|
bind "Alt n" { NewPane; }
|
||||||
|
bind "Alt o" { MoveTab "right"; }
|
||||||
|
bind "Alt p" { TogglePaneInGroup; }
|
||||||
|
bind "Alt Shift p" { ToggleGroupMarking; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "renametab" "renamepane" {
|
||||||
|
bind "Alt Space" { SwitchToMode "locked"; }
|
||||||
|
bind "Alt q" { Quit; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "entersearch" {
|
||||||
|
bind "enter" { SwitchToMode "locked"; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "entersearch" "renametab" "renamepane" {
|
||||||
|
bind "esc" { SwitchToMode "locked"; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "entersearch" "renametab" "renamepane" "move" {
|
||||||
|
bind "m" { SwitchToMode "move"; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "entersearch" "search" "renametab" "renamepane" "session" {
|
||||||
|
bind "o" { SwitchToMode "session"; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "tab" "entersearch" "renametab" "renamepane" {
|
||||||
|
bind "t" { SwitchToMode "tab"; }
|
||||||
|
}
|
||||||
|
shared_among "normal" "resize" "tab" "scroll" "prompt" "tmux" {
|
||||||
|
bind "p" { SwitchToMode "pane"; }
|
||||||
|
}
|
||||||
|
shared_among "normal" "resize" "search" "move" "prompt" "tmux" {
|
||||||
|
bind "s" { SwitchToMode "scroll"; }
|
||||||
|
}
|
||||||
|
shared_except "locked" "resize" "pane" "tab" "entersearch" "renametab" "renamepane" {
|
||||||
|
bind "r" { SwitchToMode "resize"; }
|
||||||
|
}
|
||||||
|
shared_among "scroll" "search" {
|
||||||
|
bind "PageDown" { PageScrollDown; }
|
||||||
|
bind "PageUp" { PageScrollUp; }
|
||||||
|
bind "left" { PageScrollUp; }
|
||||||
|
bind "down" { ScrollDown; }
|
||||||
|
bind "up" { ScrollUp; }
|
||||||
|
bind "right" { PageScrollDown; }
|
||||||
|
bind "Ctrl b" { PageScrollUp; }
|
||||||
|
bind "Ctrl c" { ScrollToBottom; SwitchToMode "locked"; }
|
||||||
|
bind "d" { HalfPageScrollDown; }
|
||||||
|
bind "Ctrl f" { PageScrollDown; }
|
||||||
|
bind "h" { PageScrollUp; }
|
||||||
|
bind "j" { ScrollDown; }
|
||||||
|
bind "k" { ScrollUp; }
|
||||||
|
bind "l" { PageScrollDown; }
|
||||||
|
bind "u" { HalfPageScrollUp; }
|
||||||
|
}
|
||||||
|
entersearch {
|
||||||
|
bind "Ctrl c" { SwitchToMode "scroll"; }
|
||||||
|
bind "esc" { SwitchToMode "scroll"; }
|
||||||
|
bind "enter" { SwitchToMode "search"; }
|
||||||
|
}
|
||||||
|
renametab {
|
||||||
|
bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
|
||||||
|
}
|
||||||
|
shared_among "renametab" "renamepane" {
|
||||||
|
bind "Ctrl c" { SwitchToMode "locked"; }
|
||||||
|
}
|
||||||
|
renamepane {
|
||||||
|
bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plugins {
|
||||||
|
about location="zellij:about"
|
||||||
|
compact-bar location="zellij:compact-bar"
|
||||||
|
configuration location="zellij:configuration"
|
||||||
|
filepicker location="zellij:strider" {
|
||||||
|
cwd "/"
|
||||||
|
}
|
||||||
|
plugin-manager location="zellij:plugin-manager"
|
||||||
|
session-manager location="zellij:session-manager"
|
||||||
|
status-bar location="zellij:status-bar"
|
||||||
|
strider location="zellij:strider"
|
||||||
|
tab-bar location="zellij:tab-bar"
|
||||||
|
welcome-screen location="zellij:session-manager" {
|
||||||
|
welcome_screen true
|
||||||
|
}
|
||||||
|
}
|
||||||
32
modules/home/terminal/zellij/floating_fix.patch
Normal file
32
modules/home/terminal/zellij/floating_fix.patch
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
diff --git a/zellij-utils/src/kdl/kdl_layout_parser.rs b/zellij-utils/src/kdl/kdl_layout_parser.rs
|
||||||
|
index c38c0146..d44440a7 100644
|
||||||
|
--- a/zellij-utils/src/kdl/kdl_layout_parser.rs
|
||||||
|
+++ b/zellij-utils/src/kdl/kdl_layout_parser.rs
|
||||||
|
@@ -1607,6 +1607,10 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
|
floating_pane.add_cwd_to_layout(&cwd_prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ // hide_floating_panes on the tab_layout takes precedence over the hide_floating_panes on the tab_template
|
||||||
|
+ tab_layout.hide_floating_panes =
|
||||||
|
+ kdl_get_bool_property_or_child_value!(kdl_node, "hide_floating_panes")
|
||||||
|
+ .unwrap_or(tab_layout.hide_floating_panes);
|
||||||
|
tab_layout.external_children_index = None;
|
||||||
|
Ok((
|
||||||
|
is_focused,
|
||||||
|
@@ -1671,6 +1675,8 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
|
let mut tab_floating_children = vec![];
|
||||||
|
let mut external_children_index = None;
|
||||||
|
let mut children_index_offset = 0;
|
||||||
|
+ let hide_floating_panes =
|
||||||
|
+ kdl_get_bool_property_or_child_value!(kdl_node, "hide_floating_panes").unwrap_or(false);
|
||||||
|
let is_part_of_stack = false;
|
||||||
|
if let Some(children) = kdl_children_nodes!(kdl_node) {
|
||||||
|
for (i, child) in children.iter().enumerate() {
|
||||||
|
@@ -1721,6 +1727,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
|
children_split_direction,
|
||||||
|
children: tab_children,
|
||||||
|
external_children_index,
|
||||||
|
+ hide_floating_panes,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
tab_floating_children,
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
{ pkgs, lib, config, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
options.mods.xdg.enable = lib.mkEnableOption "enables xdg settings";
|
options.mods.xdg.enable = lib.mkEnableOption "enables xdg settings";
|
||||||
|
|
||||||
config = lib.mkIf config.mods.xdg.enable {
|
config = lib.mkIf config.mods.xdg.enable {
|
||||||
xdg = let
|
xdg = let
|
||||||
browser = [ "librewolf.desktop" ];
|
browser = ["qutebrowser.desktop"];
|
||||||
associations = {
|
associations = {
|
||||||
"text/html" = browser;
|
"text/html" = browser;
|
||||||
"x-scheme-handler/http" = browser;
|
"x-scheme-handler/http" = browser;
|
||||||
|
|
@ -18,13 +23,13 @@
|
||||||
"application/x-extension-xhtml" = browser;
|
"application/x-extension-xhtml" = browser;
|
||||||
"application/x-extension-xht" = browser;
|
"application/x-extension-xht" = browser;
|
||||||
|
|
||||||
"audio/*" = [ "mpv.desktop" ];
|
"audio/*" = ["mpv.desktop"];
|
||||||
"video/*" = [ "mpv.dekstop" ];
|
"video/*" = ["mpv.dekstop"];
|
||||||
"image/*" = [ "imv.desktop" ];
|
"image/*" = ["imv.desktop"];
|
||||||
"application/json" = browser;
|
"application/json" = browser;
|
||||||
# "application/pdf" = ["org.pwmt.zathura.desktop.desktop"];
|
# "application/pdf" = ["org.pwmt.zathura.desktop.desktop"];
|
||||||
"x-scheme-handler/tg" = [ "kotatogram-desktop.desktop" ];
|
"x-scheme-handler/tg" = ["kotatogram-desktop.desktop"];
|
||||||
"x-scheme-handler/discord" = [ "vesktop.desktop" ];
|
"x-scheme-handler/discord" = ["vesktop.desktop"];
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@
|
||||||
timeout = 2;
|
timeout = 2;
|
||||||
efi.canTouchEfiVariables = true;
|
efi.canTouchEfiVariables = true;
|
||||||
grub = {
|
grub = {
|
||||||
enable = true;
|
enable = lib.mkDefault true;
|
||||||
zfsSupport = true;
|
zfsSupport = true;
|
||||||
efiSupport = true;
|
efiSupport = true;
|
||||||
device = "nodev";
|
device = "nodev";
|
||||||
|
} // lib.optionalAttrs (config.mods.monitors != { }) {
|
||||||
gfxmodeEfi = config.mods.monitors.primary.config.mode;
|
gfxmodeEfi = config.mods.monitors.primary.config.mode;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,16 @@
|
||||||
{ pkgs, lib, config, inputs, system, ... }: let
|
{ pkgs, lib, config, inputs, system, sources, ... }:
|
||||||
cfg = config.mods;
|
let cfg = config.mods;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
options.mods.home.file = lib.mkOption {
|
options.mods.home.file =
|
||||||
description = "home-manager configuration file";
|
lib.mkOption { description = "home-manager configuration file"; };
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
home-manager = {
|
home-manager = {
|
||||||
extraSpecialArgs = { inherit system pkgs inputs; };
|
extraSpecialArgs = { inherit system pkgs inputs sources; };
|
||||||
users."${cfg.user.name}" = {
|
users."${cfg.user.name}" = {
|
||||||
imports = [
|
imports =
|
||||||
cfg.home.file
|
[ cfg.home.file inputs.self.outputs.homeManagerModules.default ];
|
||||||
inputs.self.outputs.homeManagerModules.default
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
backupFileExtension = "bak";
|
backupFileExtension = "bak";
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,15 @@ in with lib; {
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
services.resolved.enable = true;
|
# networking.nameservers = [ "45.90.28.97" "45.90.30.97" ];
|
||||||
|
networking.nameservers = [ "194.242.2.4#base.dns.mullvad.net" ];
|
||||||
|
# services.resolved = {
|
||||||
|
# enable = true;
|
||||||
|
# dnssec = "false";
|
||||||
|
# dnsovertls = "true";
|
||||||
|
# domains = [ "~." ];
|
||||||
|
# fallbackDns = [ "194.242.2.4#base.dns.mullvad.net" ];
|
||||||
|
# };
|
||||||
|
|
||||||
# udev 250 doesn't reliably reinitialize devices after restart
|
# udev 250 doesn't reliably reinitialize devices after restart
|
||||||
systemd.services.systemd-udevd.restartIfChanged = false;
|
systemd.services.systemd-udevd.restartIfChanged = false;
|
||||||
|
|
@ -73,6 +81,7 @@ in with lib; {
|
||||||
presharedKeyFile =
|
presharedKeyFile =
|
||||||
"/home/muon/wireguard-keys/psk-${config.networking.hostName}";
|
"/home/muon/wireguard-keys/psk-${config.networking.hostName}";
|
||||||
allowedIPs = [ "10.0.0.${toString wg.id}/24" ];
|
allowedIPs = [ "10.0.0.${toString wg.id}/24" ];
|
||||||
|
# allowedIPs = [ "0.0.0.0/0" ];
|
||||||
# ip route add 93.95.230.11 via 192.168.0.1
|
# ip route add 93.95.230.11 via 192.168.0.1
|
||||||
endpoint = "93.95.230.11:51820";
|
endpoint = "93.95.230.11:51820";
|
||||||
persistentKeepalive = 25;
|
persistentKeepalive = 25;
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,23 @@
|
||||||
{ pkgs, lib, config, inputs, system, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
options = {
|
options = {
|
||||||
mods.nix.upgrade.enable = lib.mkEnableOption "enables nix auto upgrade";
|
mods.nix.upgrade.enable = lib.mkEnableOption "enables nix auto upgrade";
|
||||||
mods.nix.clean.enable = lib.mkEnableOption "enables nix auto cleaning";
|
mods.nix.clean.enable = lib.mkEnableOption "enables nix auto cleaning";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let flake = "/home/${config.mods.user.name}/.config/home";
|
config = let
|
||||||
|
flake = "/home/${config.mods.user.name}/.config/home";
|
||||||
in {
|
in {
|
||||||
system.autoUpgrade = {
|
system.autoUpgrade = {
|
||||||
enable = config.mods.nix.upgrade.enable;
|
enable = config.mods.nix.upgrade.enable;
|
||||||
flake = flake;
|
flake = flake;
|
||||||
flags = [ "--commit-lock-file" "-L" ];
|
flags = ["--commit-lock-file" "-L"];
|
||||||
dates = "02:00";
|
dates = "02:00";
|
||||||
randomizedDelaySec = "45min";
|
randomizedDelaySec = "45min";
|
||||||
};
|
};
|
||||||
|
|
@ -21,19 +29,23 @@
|
||||||
flake = flake;
|
flake = flake;
|
||||||
};
|
};
|
||||||
|
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
substituters = [
|
substituters = [
|
||||||
"https://cache.nixos.org"
|
"https://cache.nixos.org"
|
||||||
"https://nix-community.cachix.org"
|
"https://nix-community.cachix.org"
|
||||||
"https://nixpkgs-unfree.cachix.org"
|
"https://nixpkgs-unfree.cachix.org"
|
||||||
"https://hyprland.cachix.org"
|
"https://hyprland.cachix.org"
|
||||||
|
"https://devenv.cachix.org"
|
||||||
|
"https://muon.cachix.org"
|
||||||
];
|
];
|
||||||
trusted-public-keys = [
|
trusted-public-keys = [
|
||||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
"nixpkgs-unfree.cachix.org-1:hqvoInulhbV4nJ9yJOEr+4wxhDV4xq2d1DK7S6Nj6rs="
|
"nixpkgs-unfree.cachix.org-1:hqvoInulhbV4nJ9yJOEr+4wxhDV4xq2d1DK7S6Nj6rs="
|
||||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
|
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||||
|
"muon.cachix.org-1:tHFazVc8JsSeeLa2WLi50DHpJZKYy4V+oKlbhnbecXE="
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,8 @@
|
||||||
users.users.${config.mods.user.name} = {
|
users.users.${config.mods.user.name} = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = [ "wheel" ];
|
extraGroups = [ "wheel" ];
|
||||||
initialPassword = "changeme";
|
hashedPasswordFile = config.sops.secrets.muon-password.path;
|
||||||
shell = if config.programs.zsh.enable
|
shell = if config.programs.zsh.enable then pkgs.zsh else pkgs.bash;
|
||||||
then pkgs.zsh
|
|
||||||
else pkgs.bash;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,18 @@
|
||||||
{ pkgs, lib, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
./core
|
./core
|
||||||
./system
|
./system
|
||||||
./desktop
|
./desktop
|
||||||
./theme
|
./theme
|
||||||
./server
|
./server
|
||||||
|
./sops
|
||||||
|
./security
|
||||||
|
|
||||||
|
./impermanence.nix
|
||||||
|
|
||||||
# </3
|
# </3
|
||||||
./unfree
|
./unfree
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,8 @@
|
||||||
options.mods.sound.enable = lib.mkEnableOption "enables sound";
|
options.mods.sound.enable = lib.mkEnableOption "enables sound";
|
||||||
|
|
||||||
config = lib.mkIf config.mods.sound.enable {
|
config = lib.mkIf config.mods.sound.enable {
|
||||||
services.pipewire = {
|
services.pipewire.enable = false;
|
||||||
enable = true;
|
services.pulseaudio.enable = true;
|
||||||
pulse.enable = true;
|
services.pulseaudio.support32Bit = true;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
36
modules/nixos/impermanence.nix
Normal file
36
modules/nixos/impermanence.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
with lib; {
|
||||||
|
options.mods.impermanence.enable = mkEnableOption "enables impermanence";
|
||||||
|
|
||||||
|
config = mkIf config.mods.impermanence.enable {
|
||||||
|
environment.persistence."/persist" = {
|
||||||
|
directories = [ "/var/lib/nixos" "/var/lib/systemd/coredump" ];
|
||||||
|
files = [ "/var/lib/sops-nix/key.txt" "/etc/machine-id" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.postResumeCommands = lib.mkAfter ''
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount /dev/mapper/crypted /btrfs_tmp
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
18
modules/nixos/security/clamav.nix
Normal file
18
modules/nixos/security/clamav.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; {
|
||||||
|
options.mods.clamav.enable = mkEnableOption "enables clamav";
|
||||||
|
|
||||||
|
config = mkIf config.mods.clamav.enable {
|
||||||
|
services.clamav = {
|
||||||
|
scanner.enable = true;
|
||||||
|
updater.enable = true;
|
||||||
|
fangfrisch.enable = true;
|
||||||
|
daemon.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
9
modules/nixos/security/default.nix
Normal file
9
modules/nixos/security/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./clamav.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
24
modules/nixos/server/atuin.nix
Normal file
24
modules/nixos/server/atuin.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.atuin;
|
||||||
|
port = config.mods.server.nginx.ports.atuin;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
atuin = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables atuin server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.atuin = {
|
||||||
|
inherit port;
|
||||||
|
enable = true;
|
||||||
|
host = "0.0.0.0";
|
||||||
|
openRegistration = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
57
modules/nixos/server/audio.nix
Normal file
57
modules/nixos/server/audio.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.audio;
|
||||||
|
arr.read.port = config.mods.server.local.ports.readarr;
|
||||||
|
arr.prowl.port = config.mods.server.local.ports.prowlarr;
|
||||||
|
arr.flare.port = config.mods.server.local.ports.flaresolverr;
|
||||||
|
arr.torrent.port = config.mods.server.local.ports.torrent;
|
||||||
|
port = config.mods.server.nginx.ports.audio;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
audio = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables audiobook servers";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.readarr = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
settings.server.port = arr.read.port;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.prowlarr = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
settings.server.port = arr.prowl.port;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.flaresolverr = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
port = arr.flare.port;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.transmission = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
openRPCPort = true;
|
||||||
|
port = arr.torrent.port;
|
||||||
|
settings = {
|
||||||
|
download-dir = "/storage1/download";
|
||||||
|
rpc-port = arr.torrent.port;
|
||||||
|
rpc-bind-address = "0.0.0.0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.audiobookshelf = {
|
||||||
|
inherit port;
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
host = "0.0.0.0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
46
modules/nixos/server/cal.nix
Normal file
46
modules/nixos/server/cal.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.cal;
|
||||||
|
port = config.mods.server.nginx.ports.cal;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
cal = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables radicale server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.radicale = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
server = { hosts = [ "0.0.0.0:${toString port}" ]; };
|
||||||
|
auth = {
|
||||||
|
type = "htpasswd";
|
||||||
|
htpasswd_filename = "${toString config.sops.secrets.htpasswd.path}";
|
||||||
|
htpasswd_encryption = "bcrypt";
|
||||||
|
};
|
||||||
|
storage = { filesystem_folder = "/var/lib/radicale/collections"; };
|
||||||
|
};
|
||||||
|
rights = {
|
||||||
|
root = {
|
||||||
|
user = ".+";
|
||||||
|
collection = "";
|
||||||
|
permissions = "R";
|
||||||
|
};
|
||||||
|
principal = {
|
||||||
|
user = ".+";
|
||||||
|
collection = "{user}";
|
||||||
|
permissions = "RW";
|
||||||
|
};
|
||||||
|
calendars = {
|
||||||
|
user = ".+";
|
||||||
|
collection = "{user}/[^/]+";
|
||||||
|
permissions = "rw";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
44
modules/nixos/server/chat.nix
Normal file
44
modules/nixos/server/chat.nix
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.chat;
|
||||||
|
port = config.mods.server.nginx.ports.chat;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
chat = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables ollama server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.ollama = {
|
||||||
|
enable = true;
|
||||||
|
loadModels = [
|
||||||
|
"deepseek-r1:1.5b"
|
||||||
|
"deepseek-r1:7b"
|
||||||
|
"deepseek-r1:8b"
|
||||||
|
"gemma2:2b"
|
||||||
|
"gemma2:9b"
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
services.open-webui = {
|
||||||
|
enable = true;
|
||||||
|
host = "0.0.0.0";
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
ANONYMIZED_TELEMETRY = "False";
|
||||||
|
DO_NOT_TRACK = "True";
|
||||||
|
SCARF_NO_ANALYTICS = "True";
|
||||||
|
OLLAMA_API_BASE_URL = "http://127.0.0.1:11434";
|
||||||
|
# Disable authentication
|
||||||
|
# WEBUI_AUTH = "False";
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit port;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
54
modules/nixos/server/dash.nix
Normal file
54
modules/nixos/server/dash.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server;
|
||||||
|
port = cfg.nginx.ports.dash;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
dash = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables metrics dashboard";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.dash.enable {
|
||||||
|
services.grafana = {
|
||||||
|
enable = true;
|
||||||
|
domain = "dash.muon.host";
|
||||||
|
addr = "0.0.0.0";
|
||||||
|
|
||||||
|
provision.datasources.settings.datasources = [{
|
||||||
|
name = "Prometheus";
|
||||||
|
type = "Prometheus";
|
||||||
|
url = "http://localhost:${toString config.services.prometheus.port}";
|
||||||
|
}];
|
||||||
|
|
||||||
|
inherit port;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.prometheus = {
|
||||||
|
enable = true;
|
||||||
|
port = 9001;
|
||||||
|
|
||||||
|
exporters = {
|
||||||
|
node = {
|
||||||
|
enable = true;
|
||||||
|
enabledCollectors = [ "systemd" ];
|
||||||
|
port = 9002;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
scrapeConfigs = [{
|
||||||
|
job_name = "muho";
|
||||||
|
static_configs = [{
|
||||||
|
targets = [
|
||||||
|
"127.0.0.1:${
|
||||||
|
toString config.services.prometheus.exporters.node.port
|
||||||
|
}"
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -13,5 +13,17 @@
|
||||||
./search.nix
|
./search.nix
|
||||||
./nginx.nix
|
./nginx.nix
|
||||||
./frontends.nix
|
./frontends.nix
|
||||||
|
./homebox.nix
|
||||||
|
./share.nix
|
||||||
|
./vault.nix
|
||||||
|
./git.nix
|
||||||
|
./cal.nix
|
||||||
|
./chat.nix
|
||||||
|
./dash.nix
|
||||||
|
./nvr.nix
|
||||||
|
./ntfy.nix
|
||||||
|
./lemmy.nix
|
||||||
|
./audio.nix
|
||||||
|
./atuin.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
{ pkgs, lib, config, ... }: {
|
{ pkgs, lib, config, ... }: {
|
||||||
imports = [
|
imports = [ ./media.nix ];
|
||||||
./media.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
options.mods.docker = {
|
options.mods.docker = {
|
||||||
enable = lib.mkEnableOption {
|
enable = lib.mkEnableOption {
|
||||||
|
|
@ -14,19 +12,19 @@
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.arion
|
pkgs.arion
|
||||||
|
|
||||||
# Do install the docker CLI to talk to podman.
|
# Do install the docker CLI to talk to podman.
|
||||||
# Not needed when virtualisation.docker.enable = true;
|
# Not needed when virtualisation.docker.enable = true;
|
||||||
pkgs.docker-client
|
pkgs.docker-client
|
||||||
];
|
];
|
||||||
|
|
||||||
# Arion works with Docker, but for NixOS-based containers, you need Podman
|
# Arion works with Docker, but for NixOS-based containers, you need Podman
|
||||||
# since NixOS 21.05.
|
# since NixOS 21.05.
|
||||||
virtualisation.docker.enable = false;
|
# virtualisation.docker.enable = true;
|
||||||
virtualisation.podman.enable = true;
|
# virtualisation.podman.enable = true;
|
||||||
virtualisation.podman.dockerSocket.enable = true;
|
# virtualisation.podman.dockerSocket.enable = true;
|
||||||
virtualisation.podman.defaultNetwork.dnsname.enable = true;
|
# virtualisation.podman.defaultNetwork.dnsname.enable = true;
|
||||||
|
|
||||||
# Use your username instead of `myuser`
|
# Use your username instead of `myuser`
|
||||||
users.extraUsers.${config.mods.user.name}.extraGroups = ["podman"];
|
users.extraUsers.${config.mods.user.name}.extraGroups = [ "podman" ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [ ./astral.nix ./vrising.nix ./statech.nix ];
|
||||||
./astral.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
config = lib.mkIf config.mods.server.gaming.enable {
|
config = lib.mkIf config.mods.server.gaming.enable {
|
||||||
mods.server.astral.enable = true;
|
mods.server.astral.enable = true;
|
||||||
|
|
|
||||||
59
modules/nixos/server/gaming/statech.nix
Normal file
59
modules/nixos/server/gaming/statech.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{ pkgs, lib, config, inputs, sources, ... }:
|
||||||
|
let
|
||||||
|
inherit (inputs.nix-minecraft.lib) collectFilesAt;
|
||||||
|
modpack = pkgs.fetchPackwizModpack {
|
||||||
|
# version = "main";
|
||||||
|
url = "https://github.com/nix-astral/statech/raw/modrinth/pack.toml";
|
||||||
|
packHash = "sha256-osXcGvsoaTgu7z4eamDL/wiDewM+rge4gdu54I7wxXc=";
|
||||||
|
manifestHash =
|
||||||
|
"sha256:081s5qzx3v1cpb8a8ns77z3hqcd7df52b55cr0xmqr2ziir8ml07";
|
||||||
|
};
|
||||||
|
mcVersion = modpack.manifest.versions.minecraft;
|
||||||
|
fabricVersion = modpack.manifest.versions.fabric;
|
||||||
|
serverVersion = lib.replaceStrings [ "." ] [ "_" ] "fabric-${mcVersion}";
|
||||||
|
in {
|
||||||
|
options.mods.server.statech = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables minecraft statech server";
|
||||||
|
};
|
||||||
|
memory = lib.mkOption {
|
||||||
|
default = "6G";
|
||||||
|
description = "server detitated wam";
|
||||||
|
};
|
||||||
|
autoStart = lib.mkEnableOption {
|
||||||
|
default = true;
|
||||||
|
description = "start server on boot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.server.statech.enable {
|
||||||
|
services.minecraft-servers.servers.statech = {
|
||||||
|
enable = true;
|
||||||
|
serverProperties = { online-mode = true; };
|
||||||
|
autoStart = config.mods.server.statech.autoStart;
|
||||||
|
jvmOpts = (import ./aikar-flags.nix) config.mods.server.statech.memory;
|
||||||
|
package = pkgs.fabricServers.${serverVersion}.override {
|
||||||
|
loaderVersion = fabricVersion;
|
||||||
|
};
|
||||||
|
symlinks = {
|
||||||
|
# "global_packs" = "${modpack}/global_packs";
|
||||||
|
"kubejs" = "${modpack}/kubejs";
|
||||||
|
"config" = "${modpack}/config";
|
||||||
|
"mods" = "${modpack}/mods";
|
||||||
|
"resourcepacks" = "${modpack}/resourcepacks";
|
||||||
|
};
|
||||||
|
# symlinks =
|
||||||
|
# # collectFilesAt modpack "global_packs" //
|
||||||
|
# collectFilesAt modpack "kubejs" // collectFilesAt modpack "config"
|
||||||
|
# // collectFilesAt modpack "resourcepacks"
|
||||||
|
# // collectFilesAt modpack "mods" // {
|
||||||
|
|
||||||
|
# } // (lib.attrsets.mapAttrs' (n: v:
|
||||||
|
# lib.attrsets.nameValuePair
|
||||||
|
# ("mods/" + lib.strings.removePrefix "statech." n) v.src)
|
||||||
|
# (lib.attrsets.filterAttrs (n: v: lib.strings.hasPrefix "statech." n)
|
||||||
|
# sources));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
57
modules/nixos/server/gaming/vrising.nix
Normal file
57
modules/nixos/server/gaming/vrising.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
# Auto-generated using compose2nix v0.3.2-pre.
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let cfg = config.mods.server.vrising;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server.vrising = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables docker containers";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Runtime
|
||||||
|
virtualisation.podman = {
|
||||||
|
enable = true;
|
||||||
|
autoPrune.enable = true;
|
||||||
|
dockerCompat = true;
|
||||||
|
defaultNetwork.settings = {
|
||||||
|
# Required for container networking to be able to use names.
|
||||||
|
dns_enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable container name DNS for non-default Podman networks.
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/226365
|
||||||
|
networking.firewall.interfaces."podman+".allowedUDPPorts = [ 53 ];
|
||||||
|
networking.firewall.allowedUDPPorts = [ 9876 9877 ];
|
||||||
|
|
||||||
|
virtualisation.oci-containers.backend = "podman";
|
||||||
|
|
||||||
|
# Containers
|
||||||
|
virtualisation.oci-containers.containers."vrising-vrising" = {
|
||||||
|
image = "trueosiris/vrising";
|
||||||
|
environment = { "SERVERNAME" = "yapping at the succ"; };
|
||||||
|
volumes = [
|
||||||
|
"/srv/vrising/persistentdata:/mnt/vrising/persistentdata:rw"
|
||||||
|
"/srv/vrising/server:/mnt/vrising/server:rw"
|
||||||
|
];
|
||||||
|
ports = [ "0.0.0.0:9876:9876/udp" "0.0.0.0:9877:9877/udp" ];
|
||||||
|
log-driver = "journald";
|
||||||
|
extraOptions = [ ];
|
||||||
|
};
|
||||||
|
systemd.services."podman-vrising-vrising" = {
|
||||||
|
serviceConfig = { Restart = lib.mkOverride 90 "always"; };
|
||||||
|
partOf = [ "podman-compose-vrising-root.target" ];
|
||||||
|
wantedBy = [ "podman-compose-vrising-root.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Root service
|
||||||
|
# When started, this will automatically create all resources and start
|
||||||
|
# the containers. When stopped, this will teardown all resources.
|
||||||
|
systemd.targets."podman-compose-vrising-root" = {
|
||||||
|
unitConfig = { Description = "Root target generated by compose2nix."; };
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
28
modules/nixos/server/git.nix
Normal file
28
modules/nixos/server/git.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.git;
|
||||||
|
port = config.mods.server.nginx.ports.git;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
git = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables forgejo server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
lfs.enable = true;
|
||||||
|
settings.server = {
|
||||||
|
HTTP_ADDR = "0.0.0.0";
|
||||||
|
HTTP_PORT = port;
|
||||||
|
SSH_PORT = 22917;
|
||||||
|
DOMAIN = "git.muon.host";
|
||||||
|
ROOT_URL = "https://git.muon.host";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -9,16 +9,20 @@ in with lib; {
|
||||||
default = false;
|
default = false;
|
||||||
description = "enables grav service";
|
description = "enables grav service";
|
||||||
};
|
};
|
||||||
|
location = mkOption {
|
||||||
|
default = "/srv/grav";
|
||||||
|
description = "location for homebox data";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let port = 5001;
|
config = let port = 5001;
|
||||||
in {
|
in {
|
||||||
networking.firewall = { allowedTCPPorts = [ port ]; };
|
networking.firewall = { allowedTCPPorts = [ port ]; };
|
||||||
services.grav = mkIf cfg.grav.enable {
|
mods.services.grav = mkIf cfg.grav.enable {
|
||||||
inherit port;
|
inherit port;
|
||||||
enable = true;
|
enable = true;
|
||||||
root = "/curr/grav/grav";
|
root = cfg.grav.location;
|
||||||
phpPackage = pkgs.php81;
|
phpPackage = pkgs.php81;
|
||||||
};
|
};
|
||||||
users.users.${config.mods.user.name}.extraGroups = lib.mkAfter [ "grav" ];
|
users.users.${config.mods.user.name}.extraGroups = lib.mkAfter [ "grav" ];
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ let
|
||||||
generators mapAttrs mkDefault mkEnableOption mkIf mkPackageOption mkOption
|
generators mapAttrs mkDefault mkEnableOption mkIf mkPackageOption mkOption
|
||||||
types;
|
types;
|
||||||
|
|
||||||
cfg = config.services.grav;
|
cfg = config.mods.services.grav;
|
||||||
|
|
||||||
# yamlFormat = pkgs.formats.yaml { };
|
# yamlFormat = pkgs.formats.yaml { };
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ let
|
||||||
# yamlFormat.generate "grav-settings.yaml" cfg.systemSettings;
|
# yamlFormat.generate "grav-settings.yaml" cfg.systemSettings;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
options.services.grav = {
|
options.mods.services.grav = {
|
||||||
enable = mkEnableOption "grav";
|
enable = mkEnableOption "grav";
|
||||||
|
|
||||||
root = mkOption {
|
root = mkOption {
|
||||||
|
|
|
||||||
30
modules/nixos/server/homebox.nix
Normal file
30
modules/nixos/server/homebox.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.homebox;
|
||||||
|
port = config.mods.server.nginx.ports.homebox;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
homebox = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables homebox server";
|
||||||
|
};
|
||||||
|
location = mkOption {
|
||||||
|
default = "/srv/homebox";
|
||||||
|
description = "location for homebox data";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.homebox = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
HBOX_WEB_PORT = toString port;
|
||||||
|
HBOX_WEB_HOST = "0.0.0.0";
|
||||||
|
HBOX_OPTIONS_ALLOW_REGISTRATION = "true";
|
||||||
|
HBOX_MODE = "production";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
87
modules/nixos/server/lemmy.nix
Normal file
87
modules/nixos/server/lemmy.nix
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib) mkEnableOption;
|
||||||
|
cfg = config.mods.server.lemmy;
|
||||||
|
port = config.mods.server.local.ports.lemmy-api;
|
||||||
|
port-ui = config.mods.server.local.ports.lemmy-ui;
|
||||||
|
port-pict = config.mods.server.local.ports.pict-rs;
|
||||||
|
hostname = "lemmy.muon.host";
|
||||||
|
bind = "0.0.0.0";
|
||||||
|
in {
|
||||||
|
options.mods.server.lemmy = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables lemmy engine server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
services.lemmy = lib.mkIf cfg.enable {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
ui.port = port-ui;
|
||||||
|
|
||||||
|
settings = { inherit port hostname bind; };
|
||||||
|
|
||||||
|
database.createLocally = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.lemmy-ui = lib.mkIf cfg.enable {
|
||||||
|
environment = lib.mkForce {
|
||||||
|
LEMMY_UI_HOST = "${bind}:${toString port-ui}";
|
||||||
|
LEMMY_UI_LEMMY_INTERNAL_HOST = "${bind}:${toString port}";
|
||||||
|
LEMMY_UI_LEMMY_EXTERNAL_HOST = hostname;
|
||||||
|
LEMMY_UI_HTTPS = "false";
|
||||||
|
NODE_ENV = "production";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.pict-rs = lib.mkIf cfg.enable {
|
||||||
|
enable = true;
|
||||||
|
port = port-pict;
|
||||||
|
address = "0.0.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
# services.nginx.virtualHosts."${hostname}" = let
|
||||||
|
# ui = "http://10.0.0.3:${toString port-ui}";
|
||||||
|
# backend = "http://10.0.0.3:${toString port}";
|
||||||
|
# in lib.mkIf config.mods.server.nginx.enable {
|
||||||
|
# forceSSL = true;
|
||||||
|
# enableACME = true;
|
||||||
|
# locations = {
|
||||||
|
# "~ ^/(api|pictrs|feeds|nodeinfo|.well-known)" = {
|
||||||
|
# # backend requests
|
||||||
|
# proxyPass = backend;
|
||||||
|
# proxyWebsockets = true;
|
||||||
|
# recommendedProxySettings = true;
|
||||||
|
# };
|
||||||
|
# "/" = {
|
||||||
|
# # mixed frontend and backend requests, based on the request headers
|
||||||
|
# extraConfig = ''
|
||||||
|
# set $proxpass "${ui}";
|
||||||
|
# if ($http_accept = "application/activity+json") {
|
||||||
|
# set $proxpass "${backend}";
|
||||||
|
# }
|
||||||
|
# if ($http_accept = "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") {
|
||||||
|
# set $proxpass "${backend}";
|
||||||
|
# }
|
||||||
|
# if ($request_method = POST) {
|
||||||
|
# set $proxpass "${backend}";
|
||||||
|
# }
|
||||||
|
|
||||||
|
# # Cuts off the trailing slash on URLs to make them valid
|
||||||
|
# rewrite ^(.+)/+$ $1 permanent;
|
||||||
|
|
||||||
|
# proxy_pass $proxpass;
|
||||||
|
# # Proxied `Host` header is required to validate ActivityPub HTTP signatures for incoming events.
|
||||||
|
# # The other headers are optional, for the sake of better log data.
|
||||||
|
# proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
# proxy_set_header Host $host;
|
||||||
|
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -53,22 +53,33 @@ in with lib; {
|
||||||
# add_header Strict-Transport-Security $hsts_header;
|
# add_header Strict-Transport-Security $hsts_header;
|
||||||
|
|
||||||
# Enable CSP for your services.
|
# Enable CSP for your services.
|
||||||
#add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always;
|
# add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always;
|
||||||
|
|
||||||
# Minimize information leaked to other domains
|
# Minimize information leaked to other domains
|
||||||
add_header 'Referrer-Policy' 'origin-when-cross-origin';
|
# add_header 'Referrer-Policy' 'origin-when-cross-origin';
|
||||||
|
|
||||||
# Disable embedding as a frame
|
# Disable embedding as a frame
|
||||||
add_header X-Frame-Options DENY;
|
add_header X-Frame-Options DENY;
|
||||||
|
|
||||||
# Prevent injection of code in other mime types (XSS Attacks)
|
# Prevent injection of code in other mime types (XSS Attacks)
|
||||||
add_header X-Content-Type-Options nosniff;
|
# add_header X-Content-Type-Options nosniff;
|
||||||
|
|
||||||
# This might create errors
|
# This might create errors
|
||||||
# proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
|
# proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
|
||||||
|
|
||||||
# required when the server wants to use HTTP Authentication
|
# required when the server wants to use HTTP Authentication
|
||||||
proxy_pass_header Authorization;
|
proxy_pass_header Authorization;
|
||||||
|
|
||||||
|
# This is necessary to pass the correct IP to be hashed
|
||||||
|
real_ip_header X-Real-IP;
|
||||||
|
|
||||||
|
# security
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
||||||
|
add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always;
|
||||||
|
add_header Permissions-Policy "interest-cohort=()" always;
|
||||||
|
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
|
||||||
'';
|
'';
|
||||||
|
|
||||||
virtualHosts = let
|
virtualHosts = let
|
||||||
|
|
@ -79,7 +90,12 @@ in with lib; {
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
};
|
};
|
||||||
proxy = port:
|
proxy = port:
|
||||||
base { "/".proxyPass = "http://${cfg.ip}:${toString port}/"; };
|
base {
|
||||||
|
"/" = {
|
||||||
|
proxyPass = "http://${cfg.ip}:${toString port}/";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
in mapAttrs' (name: port:
|
in mapAttrs' (name: port:
|
||||||
nameValuePair ("${name}.${cfg.domain}")
|
nameValuePair ("${name}.${cfg.domain}")
|
||||||
# (proxy port // { default = true; })) cfg.ports;
|
# (proxy port // { default = true; })) cfg.ports;
|
||||||
|
|
|
||||||
28
modules/nixos/server/ntfy.nix
Normal file
28
modules/nixos/server/ntfy.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.ntfy;
|
||||||
|
port = config.mods.server.nginx.ports.ntfy;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
ntfy = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables ntfy-sh server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.ntfy-sh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
listen-http = "0.0.0.0:${toString port}";
|
||||||
|
base-url = "https://ntfy.muon.host";
|
||||||
|
behind-proxy = true;
|
||||||
|
|
||||||
|
auth-default-access = "deny-all";
|
||||||
|
enable-login = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
25
modules/nixos/server/nvr.nix
Normal file
25
modules/nixos/server/nvr.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.nvr;
|
||||||
|
# port = config.mods.server.nginx.ports.vault;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
nvr = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables zoneminder server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.zoneminder = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
database = {
|
||||||
|
createLocally = true;
|
||||||
|
username = "zoneminder";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
{ pkgs, lib, config, ... }: {
|
{ pkgs, lib, config, ... }: {
|
||||||
options.mods.server.photoprism = {
|
options.mods.server.photoprism = {
|
||||||
enable = lib.mkEnableOption {
|
enable = lib.mkEnableOption {
|
||||||
|
|
@ -7,7 +6,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
config = lib.mkIf config.mods.server.photoprism.enable {
|
config = lib.mkIf config.mods.server.photoprism.enable {
|
||||||
services.photoprism = {
|
services.photoprism = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
@ -35,12 +33,10 @@
|
||||||
dataDir = "/data/mysql";
|
dataDir = "/data/mysql";
|
||||||
package = pkgs.mariadb;
|
package = pkgs.mariadb;
|
||||||
ensureDatabases = [ "photoprism" ];
|
ensureDatabases = [ "photoprism" ];
|
||||||
ensureUsers = [ {
|
ensureUsers = [{
|
||||||
name = "photoprism";
|
name = "photoprism";
|
||||||
ensurePermissions = {
|
ensurePermissions = { "photoprism.*" = "ALL PRIVILEGES"; };
|
||||||
"photoprism.*" = "ALL PRIVILEGES";
|
}];
|
||||||
};
|
|
||||||
} ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
30
modules/nixos/server/share.nix
Normal file
30
modules/nixos/server/share.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.share;
|
||||||
|
port = config.mods.server.nginx.ports.share;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
share = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables zipline server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
users.groups.zipline = { };
|
||||||
|
users.users.zipline = {
|
||||||
|
isSystemUser = true;
|
||||||
|
group = "zipline";
|
||||||
|
};
|
||||||
|
services.zipline = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
CORE_HOST = "0.0.0.0";
|
||||||
|
CORE_PORT = port;
|
||||||
|
};
|
||||||
|
environmentFiles = [ "/run/secrets/zipline-secret" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
24
modules/nixos/server/vault.nix
Normal file
24
modules/nixos/server/vault.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.mods.server.vault;
|
||||||
|
port = config.mods.server.nginx.ports.vault;
|
||||||
|
in with lib; {
|
||||||
|
options.mods.server = {
|
||||||
|
vault = {
|
||||||
|
enable = mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables vaultwarden server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.vaultwarden = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
ROCKET_ADDRESS = "0.0.0.0";
|
||||||
|
ROCKET_PORT = port;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
28
modules/nixos/sops/default.nix
Normal file
28
modules/nixos/sops/default.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mods;
|
||||||
|
in
|
||||||
|
with lib; {
|
||||||
|
imports = [inputs.sops-nix.nixosModules.sops];
|
||||||
|
sops = {
|
||||||
|
age.keyFile = "/persist/var/lib/sops-nix/key.txt";
|
||||||
|
defaultSopsFile = ./secrets.yaml;
|
||||||
|
secrets.muon-password.neededForUsers = true;
|
||||||
|
secrets.zipline-secret = mkIf cfg.server.share.enable {
|
||||||
|
owner = "zipline";
|
||||||
|
group = "zipline";
|
||||||
|
};
|
||||||
|
secrets.htpasswd = mkIf cfg.server.cal.enable {
|
||||||
|
owner = "radicale";
|
||||||
|
group = "radicale";
|
||||||
|
};
|
||||||
|
secrets.lemmy-password = mkIf cfg.server.lemmy.enable {};
|
||||||
|
secrets.sops-key = {};
|
||||||
|
};
|
||||||
|
}
|
||||||
47
modules/nixos/sops/secrets.yaml
Normal file
47
modules/nixos/sops/secrets.yaml
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
muon-password: ENC[AES256_GCM,data:K2ifHvs8hQXK4//FXf3vfDliiklx0dTn8gpirTBT07Q1XIMJR1Vgn/f1uo62bu4a/bknAR5gEBfd/cSRUTdBBxd7Lec2k3fxQg==,iv:j1JTzyfjcKEqh+PK5tyCWBMV7MpwvIG9MJ9eiajksxM=,tag:ZcSEVBW1UOCvE40yIsaBFQ==,type:str]
|
||||||
|
zipline-secret: ENC[AES256_GCM,data:cdqPWBUg6FZkBrUYNkm7imntc2hXUAxDjd1Ymr3j9y763cbXDYEu44wJF0W1Ng==,iv:sdjV4SkRCTO04AvXqtoPOPyASlitrS4nS+M0Z2lZURA=,tag:gNcOdJvg9PtrRlm84CdbsQ==,type:str]
|
||||||
|
htpasswd: ENC[AES256_GCM,data:YbDNElLsvRtC1ezgxIYI6U+ZZES1Lr6BXamNdbxQibj0NfC9oobP7ed8MQpFTlhhJZx5I5Xa6XtFrvjdo13NtdU=,iv:P98P1XxtdCp7+TuAwKybzjcWGF1OQtnAuQs4ObZct7o=,tag:gXrQaBxUvuVSB5yYhWcihA==,type:str]
|
||||||
|
lemmy-password: ENC[AES256_GCM,data:VVPbhW6l+VYSUfmlySPSwITwonKQHaIY,iv:XcwM7Sz2novn3cHt4EK5HAZkYVPfPqwIcGtTWMQPByg=,tag:0b8epk98eTcx7b57yGcjpw==,type:str]
|
||||||
|
sops-key: ENC[AES256_GCM,data:CT2FJnxRV0nVccCS+bofjIDqoVnJKMs63BVdmC4KEXEJAdsiyINTNJ+19aMqIkr2eosvXX1+nvV6oeBvNv1uN9xCrrzu4Qj0yRA=,iv:w9Fp68KK8hnUirlDGOYKSQwlfp3OBWU4XWqliZn/apc=,tag:XZdhC65WpcazSol1mbdp5A==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age1m97a3eptxwpdd7h5kkqe9gkmhg6rquc64qjmlsfqfhfqv8q72crqrylhgc
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4bUg1Z1JBcmRldDIzN2Zt
|
||||||
|
Ky9LOTVBK0IzdE1UUFBXci94R0x1bitjT2hjCjA1NC9wMzNHZkorZllIaFpNMVlm
|
||||||
|
Y05oLzBYcENBbmNOc0Y5cVVHV0VVUVkKLS0tIFZzTjE5NVVEaWFKcUU4aWlnSjFt
|
||||||
|
eWlTRmEzYVpQdENiNUMxaWJta0NjcVEKx3togykPGYRNGgJR6fl9cDbJKiLWHjA9
|
||||||
|
XujrttnDTwNCCZENn/E4BABC4XecW8IqSsUmJW6GwZzYJu+4rNTSwA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1v4s4hg7u3vjjkarvrk7v6ev7w3wja2r5xm7f4t06culw3fuq7qns8sfju7
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWWE5tU0ltaTJscUVQSDBy
|
||||||
|
WHRDb2FTRVFtZ2s2eGRjb21ncU1HNkx3RmhRClMwQ0E1cCt1SmtoYi9TWExXdVdX
|
||||||
|
Ym5RS2h3bWt3SkRzUGVtbXEvWkcyWDgKLS0tIERuVFhubHprQ0JKVHBFdjBFSk1j
|
||||||
|
Qm5yVjBNc1l6VFQ4OGJsWXdsWUIyNFkKksIW0x8RxTdaw9YR4y+84VrYnfVZz2js
|
||||||
|
qz1RG4TXs9NRcm8fGGa/ZYZZN72h/l0WY+fayZ+ZUaHD43tHFisoYg==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1n7qz2w3hkf7fcdv92kxw9k6uef487na2tlc87486rcjwj8lyfuws5q46gn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1L29jY3lNeU8xeE03VUFu
|
||||||
|
MWJyczNxZFJHSG82c0p3OEtBOThqaE8xTFMwCm9KemZJMjBOQ0I1TU9Qd2IvMGVU
|
||||||
|
Ry9GQ1JuN0lHSVNpUjZMWU5hWWlFYmcKLS0tIE56b0prSDZCMnZXeTJpUksvN29I
|
||||||
|
UXp0a3AwM0hvbG1jeEZIMlViYU9ZWTgKKJ2YL6Q2LyR9x4Oqt5qWiyL7f4wAWrqw
|
||||||
|
FTY5r2unI7YdIFtzmbjIAqv/4qqy62Th8EEsqAZUcL/YBcuNIiyg6Q==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1mgjhkqy9x27gv2t2xvq46dxcajkr9c8zes7rr3dj0ac7md2j6vas43dftp
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJOUhRY0RtaUhNaHZZTHk3
|
||||||
|
QVF4cXV2Lzc3d1RRM2pzMXBBQU95endLRFFZCkdMVVlkV3VzSnRyRHpROHlReUdJ
|
||||||
|
ek9EbXk4WHVDblFXTkhHLzdwRTV3TjAKLS0tIDMxS1psQ1dSNG1XbGxvYlNQZ2dl
|
||||||
|
VFdIbUg1WjlldFFNbGx3dytQNXBsMDgKuU/86fojKVJ5X8+9OIf3k7ud6bujjyFI
|
||||||
|
HQoONJgXGoQJtkPsmJbMUuMjo/znK+tdCd/uAwxK1Nk670NVxGmJYA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2025-08-04T09:14:07Z"
|
||||||
|
mac: ENC[AES256_GCM,data:Qu5kuhV2c31S9l01e7IWCrjLKU8eBepK42eR1nEvPpoHqXxbIT3vcDbxJdcn2Ay6Z4pARYqmHctVDOCiilxFyYfzF8mP91u6NhsZC5kHMdP7GI5Pl5FXSCMxQbbBWgXxJXruq/NkrlrLnFTWyzBRLa4wTBZdDMZ2CGo6jLi7G0o=,iv:q3WG536FkLpYEp8AAcW0agYq6rDIhzzt47l7grDvGyo=,tag:T5msy2cSZ/bZ9HvbxTw0Rg==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.10.2
|
||||||
|
|
@ -4,9 +4,10 @@ let
|
||||||
mkPackages = mod: if cfg.${mod}.enable then cfg.${mod}.packages else [ ];
|
mkPackages = mod: if cfg.${mod}.enable then cfg.${mod}.packages else [ ];
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [ ./steam.nix ./nvidia.nix ./minecraft.nix ];
|
imports = [ ./steam.nix ./nvidia.nix ./minecraft.nix ./valheim.nix ];
|
||||||
|
|
||||||
nixpkgs.config.allowUnfreePredicate = pkg:
|
nixpkgs.config.allowUnfreePredicate = pkg:
|
||||||
builtins.elem (lib.getName pkg)
|
builtins.elem (lib.getName pkg) ((mkPackages "steam")
|
||||||
((mkPackages "steam") ++ (mkPackages "minecraft") ++ (mkPackages "nvidia"));
|
++ (mkPackages "minecraft") ++ (mkPackages "nvidia")
|
||||||
|
++ (mkPackages "valheim") ++ [ "stremio-shell" "stremio-server" ]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
28
modules/nixos/unfree/valheim.nix
Normal file
28
modules/nixos/unfree/valheim.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{ pkgs, lib, config, inputs, sources, ... }: {
|
||||||
|
options.mods.unfree.valheim = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
default = false;
|
||||||
|
description = "enables valheim server";
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = [ "valheim-server" "steamworks-sdk-redist" ];
|
||||||
|
description = "unfree packages";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [ inputs.valheim-server.nixosModules.default ];
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.unfree.valheim.enable {
|
||||||
|
services.valheim = {
|
||||||
|
enable = true;
|
||||||
|
serverName = "Smorld";
|
||||||
|
worldName = "Smorld";
|
||||||
|
openFirewall = true;
|
||||||
|
password = "notbeempty";
|
||||||
|
adminList = [ "76561198032854097" "76561198120039992" ];
|
||||||
|
bepinexMods = lib.mapAttrsToList (name: value: value.src)
|
||||||
|
(lib.attrsets.filterAttrs (n: v: lib.strings.hasPrefix "valheim." n)
|
||||||
|
sources);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
154
nvfetcher.toml
Normal file
154
nvfetcher.toml
Normal file
|
|
@ -0,0 +1,154 @@
|
||||||
|
["vesktop.micfix"]
|
||||||
|
src.manual = "1.0.1"
|
||||||
|
fetch.url = "https://codeberg.org/muon/gists/raw/branch/main/micfix.patch"
|
||||||
|
|
||||||
|
["valheim.jotunn"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/ValheimModding/Jotunn/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/ValheimModding/Jotunn/$ver/"
|
||||||
|
|
||||||
|
["valheim.jsondotnet"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/ValheimModding/JsonDotNET/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/ValheimModding/JsonDotNET/$ver/"
|
||||||
|
|
||||||
|
["valheim.craftyboxes"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/AzuCraftyBoxes/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/$ver/"
|
||||||
|
|
||||||
|
["valheim.autostore"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/AzuAutoStore/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/$ver/"
|
||||||
|
|
||||||
|
["valheim.arearepair"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/AzuAreaRepair/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/AzuAreaRepair/$ver/"
|
||||||
|
|
||||||
|
["valheim.extendedinv"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/AzuExtendedPlayerInventory/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/$ver/"
|
||||||
|
|
||||||
|
["valheim.reclaim"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/Recycle_N_Reclaim/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/$ver/"
|
||||||
|
|
||||||
|
["valheim.aaacrafting"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/AAA_Crafting/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/$ver/"
|
||||||
|
|
||||||
|
["valheim.savecrossbow"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Azumatt/SaveCrossbowState/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Azumatt/SaveCrossbowState/$ver/"
|
||||||
|
|
||||||
|
["valheim.campsite"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/OdinPlus/OdinCampsite/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/$ver/"
|
||||||
|
|
||||||
|
["valheim.architect"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/OdinPlus/OdinArchitect/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/$ver/"
|
||||||
|
|
||||||
|
["valheim.quickteleport"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/OdinPlus/QuickTeleport/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/OdinPlus/QuickTeleport/$ver/"
|
||||||
|
|
||||||
|
["valheim.multiuserchest"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/MSchmoecker/MultiUserChest/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/MSchmoecker/MultiUserChest/$ver/"
|
||||||
|
|
||||||
|
["valheim.customships"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/MSchmoecker/CustomShips/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/MSchmoecker/CustomShips/$ver/"
|
||||||
|
|
||||||
|
["valheim.cartography"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Advize/CartographySkill/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Advize/CartographySkill/$ver/"
|
||||||
|
|
||||||
|
["valheim.swim"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/blacks7ar/VikingsDoSwim/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/$ver/"
|
||||||
|
|
||||||
|
["valheim.swimequip"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/blacks7ar/WieldEquipmentWhileSwimming/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/blacks7ar/WieldEquipmentWhileSwimming/$ver/"
|
||||||
|
|
||||||
|
["valheim.seedbed"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/blacks7ar/SeedBed/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/blacks7ar/SeedBed/$ver/"
|
||||||
|
|
||||||
|
["valheim.lazyvikings"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/blacks7ar/LazyVikings/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/blacks7ar/LazyVikings/$ver/"
|
||||||
|
|
||||||
|
["valheim.servercharacters"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Smoothbrain/ServerCharacters/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Smoothbrain/ServerCharacters/$ver/"
|
||||||
|
|
||||||
|
["valheim.smoothsave"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Smoothbrain/SmoothSave/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Smoothbrain/SmoothSave/$ver/"
|
||||||
|
|
||||||
|
["valheim.backpacks"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Smoothbrain/Backpacks/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Smoothbrain/Backpacks/$ver/"
|
||||||
|
|
||||||
|
["valheim.mining"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Smoothbrain/Mining/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Smoothbrain/Mining/$ver/"
|
||||||
|
|
||||||
|
["valheim.targetportal"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Smoothbrain/TargetPortal/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/$ver/"
|
||||||
|
|
||||||
|
["valheim.planteasily"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Advize/PlantEasily/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Advize/PlantEasily/$ver/"
|
||||||
|
|
||||||
|
["valheim.betternetworking"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/CW_Jesse/BetterNetworking_Valheim/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/CW_Jesse/BetterNetworking_Valheim/$ver/"
|
||||||
|
|
||||||
|
["valheim.boneappetit"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/RockerKitten/BoneAppetit/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/RockerKitten/BoneAppetit/$ver/"
|
||||||
|
|
||||||
|
["valheim.spearfishing"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/Korppis/Spearfishing/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/Korppis/Spearfishing/$ver/"
|
||||||
|
|
||||||
|
["valheim.foodmove"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/sbtoonz/Food_Degrade_Only_On_Move/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/sbtoonz/Food_Degrade_Only_On_Move/$ver/"
|
||||||
|
|
||||||
|
["valheim.missingpieces"]
|
||||||
|
src.webpage = "https://thunderstore.io/c/valheim/p/BentoG/MissingPieces/"
|
||||||
|
src.regex = "v(\\d+\\.\\d+\\.\\d+)"
|
||||||
|
fetch.tarball = "https://thunderstore.io/package/download/BentoG/MissingPieces/$ver/"
|
||||||
|
|
||||||
14
shell.nix
Normal file
14
shell.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ pkgs ? import <nixpkgs> { }, ... }: {
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
NIX_CONFIG =
|
||||||
|
"extra-experimental-features = nix-command flakes ca-derivations";
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
nix
|
||||||
|
git
|
||||||
|
|
||||||
|
sops
|
||||||
|
age
|
||||||
|
nvfetcher
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
13
utils.nix
13
utils.nix
|
|
@ -1,21 +1,14 @@
|
||||||
{ builtins, inputs, system, pkgs, ... }: {
|
{ inputs, system, sources, ... }: {
|
||||||
mkHost = host:
|
mkHost = host:
|
||||||
inputs.nixpkgs.lib.nixosSystem {
|
inputs.nixpkgs.lib.nixosSystem {
|
||||||
specialArgs = with builtins;
|
specialArgs = { inherit inputs system sources; };
|
||||||
let
|
|
||||||
hasInfix = infix: content: match ".*${infix}.*" "${content}" != null;
|
|
||||||
muho = hasInfix "/muho/" (toString host);
|
|
||||||
in if muho then {
|
|
||||||
inherit inputs system pkgs;
|
|
||||||
} else {
|
|
||||||
inherit inputs system;
|
|
||||||
};
|
|
||||||
|
|
||||||
modules = [
|
modules = [
|
||||||
host
|
host
|
||||||
./modules/nixos
|
./modules/nixos
|
||||||
inputs.home-manager.nixosModules.default
|
inputs.home-manager.nixosModules.default
|
||||||
inputs.stylix.nixosModules.stylix
|
inputs.stylix.nixosModules.stylix
|
||||||
|
inputs.impermanence.nixosModules.impermanence
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue